From db1df977344d52a7de44ad83ee949cdc20e4ab79 Mon Sep 17 00:00:00 2001 From: greggy Date: Tue, 7 Oct 2025 09:14:37 +0200 Subject: [PATCH] adcity --- migrations/Version20251006214042.php | 3 +- src/Cron/AdCityForcedTextlinkCron.php | 103 ++++++++++++++++++-------- src/Entity/Werbenetzwerk.php | 14 ++++ 3 files changed, 87 insertions(+), 33 deletions(-) diff --git a/migrations/Version20251006214042.php b/migrations/Version20251006214042.php index e094283..b1156fa 100644 --- a/migrations/Version20251006214042.php +++ b/migrations/Version20251006214042.php @@ -27,6 +27,7 @@ final class Version20251006214042 extends AbstractMigration interfacepasswort VARCHAR(255) NOT NULL, interface_anfragen_pro_tag SMALLINT UNSIGNED NOT NULL, user_id VARCHAR(50) NOT NULL, + referal_url VARCHAR(255) DEFAULT NULL, date_updated DATETIME DEFAULT NULL, PRIMARY KEY (id) ) DEFAULT CHARACTER SET utf8mb4'); @@ -89,7 +90,7 @@ final class Version20251006214042 extends AbstractMigration $this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E948B23AFC FOREIGN KEY (werbenetzwerk_id) REFERENCES werbenetzwerk (id) ON DELETE SET NULL'); // Default data - Werbenetzwerk - $this->addSql('INSERT INTO werbenetzwerk (id, umrechnungskurs, eigenanteil_prozent, interfacepasswort, interface_anfragen_pro_tag, user_id, date_updated) VALUES (1, 0.0000000022, 25, "pAKc34EajovTvsnD6Y6WfhS", 500, "1244", NOW())'); + $this->addSql('INSERT INTO werbenetzwerk (id, umrechnungskurs, eigenanteil_prozent, interfacepasswort, interface_anfragen_pro_tag, user_id, referal_url, date_updated) VALUES (1, 0.0000000022, 25, "pAKc34EajovTvsnD6Y6WfhS", 500, "1244", "https://www.adcity.eu?ref=1244", NOW())'); // Default data - Users $this->addSql('INSERT INTO users (username, email, password, rolle, createdAt) VALUES ("admin", "admin@example.com", "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi", "admin", NOW())'); diff --git a/src/Cron/AdCityForcedTextlinkCron.php b/src/Cron/AdCityForcedTextlinkCron.php index 1031f7f..38dbe7e 100644 --- a/src/Cron/AdCityForcedTextlinkCron.php +++ b/src/Cron/AdCityForcedTextlinkCron.php @@ -45,9 +45,40 @@ class AdCityForcedTextlinkCron extends AbstractCron // Umrechnungskurs aktualisieren $this->updateUmrechnungskurs(); + // ForcedTextlink Kampagnen abrufen + $this->log("=== Fetching ForcedTextlink campaigns ==="); + $statsForcedTextlink = $this->fetchAndProcessKampagnen('forcedtextlink', 'is_ft'); + + // Paidmail Kampagnen abrufen + $this->log("\n=== Fetching Paidmail campaigns ==="); + $statsPaidmail = $this->fetchAndProcessKampagnen('paidmail', 'is_mail'); + + // Traffic Kampagnen abrufen + $this->log("\n=== Fetching Traffic campaigns ==="); + $statsTraffic = $this->fetchAndProcessKampagnen('traffic', 'is_tr'); + + // Änderungen speichern + $this->flush(); + + // Zusammenfassung ausgeben + $this->log("\n=== Overall Summary ==="); + $totalStats = [ + 'total' => $statsForcedTextlink['total'] + $statsPaidmail['total'] + $statsTraffic['total'], + 'created' => $statsForcedTextlink['created'] + $statsPaidmail['created'] + $statsTraffic['created'], + 'updated' => $statsForcedTextlink['updated'] + $statsPaidmail['updated'] + $statsTraffic['updated'] + ]; + $this->printSummary($totalStats['total'], $totalStats['created'], $totalStats['updated']); + $this->log("Cron job completed successfully."); + } + + /** + * Ruft Kampagnen von der API ab und verarbeitet sie + */ + private function fetchAndProcessKampagnen(string $type, string $kampagneType): array + { // API-Anfrage durchführen $response = $this->fetchFromApi(self::API_URL, [ - 'typ' => self::KAMPAGNE_TYPE, + 'typ' => $type, 'id' => $this->werbenetzwerk->getUserId(), 'pw' => $this->werbenetzwerk->getInterfacepasswort(), 'uebrig' => 20, @@ -60,20 +91,13 @@ class AdCityForcedTextlinkCron extends AbstractCron $this->log($response); // Response parsen und verarbeiten - $stats = $this->processResponse($response); - - // Änderungen speichern - $this->flush(); - - // Zusammenfassung ausgeben - $this->printSummary($stats['total'], $stats['created'], $stats['updated']); - $this->log("Cron job completed successfully."); + return $this->processResponse($response, $kampagneType); } /** * Verarbeitet die API-Response */ - private function processResponse(string $response): array + private function processResponse(string $response, string $kampagneType): array { $parts = explode('|', trim($response)); @@ -120,7 +144,7 @@ class AdCityForcedTextlinkCron extends AbstractCron $verguetungEuro = $verdienst * $this->werbenetzwerk->getUmrechnungskurs(); // Kampagne verarbeiten - if ($this->processKampagne($kid, $linktext, $ma, $reload, $uebrig, $verdienst, $verguetungEuro, $mailtext)) { + if ($this->processKampagne($kid, $linktext, $ma, $reload, $uebrig, $verdienst, $verguetungEuro, $mailtext, $kampagneType)) { $updatedCount++; } else { $createdCount++; @@ -147,20 +171,15 @@ class AdCityForcedTextlinkCron extends AbstractCron int $uebrig, float $verdienst, float $verguetungEuro, - ?string $mailtext + ?string $mailtext, + string $kampagneType ): bool { // Vergütung höher als 0.1 Euro filtern if ($verguetungEuro > 0.1) { $this->log("Skipping: $linktext (KID: $kid, Vergütung zu hoch: $verguetungEuro €)"); // Wenn Kampagne existiert, löschen - $existingKampagne = $this->entityManager - ->getRepository(Kampagne::class) - ->findOneBy([ - 'user' => $this->werbenetzwerkUser, - 'kid' => $kid, - 'is_ft' => true - ]); + $existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType); if ($existingKampagne) { $this->entityManager->remove($existingKampagne); $this->log(" → Deleted existing campaign with high vergütung"); @@ -170,18 +189,17 @@ class AdCityForcedTextlinkCron extends AbstractCron } // Link-URL generieren - $destUrl = "https://www.adcity.eu/codes/forcedtextlinkklick.php?id={USERID}&bid=$kid&aid={SEITENID}"; + $destUrl = match($kampagneType) { + 'is_ft' => "https://www.adcity.eu/codes/forcedtextlinkklick.php?id={USERID}&bid=$kid&aid={SEITENID}", + 'is_mail' => "https://www.adcity.eu/codes/paidmailklick.php?id={USERID}&bid=$kid&aid={SEITENID}", + 'is_tr' => "https://www.adcity.eu/codes/trafficklick.php?id={USERID}&bid=$kid&aid={SEITENID}", + default => "https://www.adcity.eu/codes/kampagne.php?id={USERID}&bid=$kid&aid={SEITENID}" + }; $this->log("Processing: $linktext (KID: $kid, MA: $ma, Reload: $reload, Uebrig: $uebrig)"); - // Prüfen ob Kampagne bereits existiert (is_ft = true) - $existingKampagne = $this->entityManager - ->getRepository(Kampagne::class) - ->findOneBy([ - 'user' => $this->werbenetzwerkUser, - 'kid' => $kid, - 'is_ft' => true - ]); + // Prüfen ob Kampagne bereits existiert + $existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType); if ($existingKampagne) { // Kampagne aktualisieren @@ -209,13 +227,18 @@ class AdCityForcedTextlinkCron extends AbstractCron $kampagne->setVerguetung($verguetungEuro); $kampagne->setUebrig($uebrig); $kampagne->setIsFb(false); - $kampagne->setIsTr(false); - $kampagne->setIsFt(true); - $kampagne->setIsMail(false); - if ($mailtext) { + $kampagne->setIsTr($kampagneType === 'is_tr'); + $kampagne->setIsFt($kampagneType === 'is_ft'); + $kampagne->setIsMail($kampagneType === 'is_mail'); + + if ($mailtext && $kampagneType === 'is_mail') { + $kampagne->setMailtext($mailtext); + } elseif ($mailtext && $kampagneType === 'is_ft') { + // ForcedTextlink kann auch Mailtext haben $kampagne->setMailtext($mailtext); $kampagne->setIsMail(true); } + $kampagne->setUser($this->werbenetzwerkUser); $this->entityManager->persist($kampagne); @@ -224,6 +247,22 @@ class AdCityForcedTextlinkCron extends AbstractCron } } + /** + * Findet eine existierende Kampagne basierend auf Typ + */ + private function findExistingKampagneByType(string $kid, string $kampagneType): ?Kampagne + { + $criteria = [ + 'user' => $this->werbenetzwerkUser, + 'kid' => $kid, + $kampagneType => true + ]; + + return $this->entityManager + ->getRepository(Kampagne::class) + ->findOneBy($criteria); + } + /** * Aktualisiert den Umrechnungskurs in der Datenbank */ diff --git a/src/Entity/Werbenetzwerk.php b/src/Entity/Werbenetzwerk.php index 3f92364..d5e63a0 100644 --- a/src/Entity/Werbenetzwerk.php +++ b/src/Entity/Werbenetzwerk.php @@ -29,6 +29,9 @@ class Werbenetzwerk #[ORM\Column(type: 'string', length: 50)] private string $user_id; + #[ORM\Column(type: 'string', length: 255, nullable: true)] + private ?string $referal_url = null; + #[ORM\Column(type: 'datetime', nullable: true)] private ?\DateTimeInterface $date_updated = null; @@ -104,4 +107,15 @@ class Werbenetzwerk $this->user_id = $user_id; return $this; } + + public function getReferalUrl(): ?string + { + return $this->referal_url; + } + + public function setReferalUrl(?string $referal_url): self + { + $this->referal_url = $referal_url; + return $this; + } }