adcity
This commit is contained in:
@@ -27,6 +27,7 @@ final class Version20251006214042 extends AbstractMigration
|
|||||||
interfacepasswort VARCHAR(255) NOT NULL,
|
interfacepasswort VARCHAR(255) NOT NULL,
|
||||||
interface_anfragen_pro_tag SMALLINT UNSIGNED NOT NULL,
|
interface_anfragen_pro_tag SMALLINT UNSIGNED NOT NULL,
|
||||||
user_id VARCHAR(50) NOT NULL,
|
user_id VARCHAR(50) NOT NULL,
|
||||||
|
referal_url VARCHAR(255) DEFAULT NULL,
|
||||||
date_updated DATETIME DEFAULT NULL,
|
date_updated DATETIME DEFAULT NULL,
|
||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
) DEFAULT CHARACTER SET utf8mb4');
|
) 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');
|
$this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E948B23AFC FOREIGN KEY (werbenetzwerk_id) REFERENCES werbenetzwerk (id) ON DELETE SET NULL');
|
||||||
|
|
||||||
// Default data - Werbenetzwerk
|
// 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
|
// 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())');
|
$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())');
|
||||||
|
|||||||
@@ -45,9 +45,40 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
// Umrechnungskurs aktualisieren
|
// Umrechnungskurs aktualisieren
|
||||||
$this->updateUmrechnungskurs();
|
$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
|
// API-Anfrage durchführen
|
||||||
$response = $this->fetchFromApi(self::API_URL, [
|
$response = $this->fetchFromApi(self::API_URL, [
|
||||||
'typ' => self::KAMPAGNE_TYPE,
|
'typ' => $type,
|
||||||
'id' => $this->werbenetzwerk->getUserId(),
|
'id' => $this->werbenetzwerk->getUserId(),
|
||||||
'pw' => $this->werbenetzwerk->getInterfacepasswort(),
|
'pw' => $this->werbenetzwerk->getInterfacepasswort(),
|
||||||
'uebrig' => 20,
|
'uebrig' => 20,
|
||||||
@@ -60,20 +91,13 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
$this->log($response);
|
$this->log($response);
|
||||||
|
|
||||||
// Response parsen und verarbeiten
|
// Response parsen und verarbeiten
|
||||||
$stats = $this->processResponse($response);
|
return $this->processResponse($response, $kampagneType);
|
||||||
|
|
||||||
// Änderungen speichern
|
|
||||||
$this->flush();
|
|
||||||
|
|
||||||
// Zusammenfassung ausgeben
|
|
||||||
$this->printSummary($stats['total'], $stats['created'], $stats['updated']);
|
|
||||||
$this->log("Cron job completed successfully.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verarbeitet die API-Response
|
* Verarbeitet die API-Response
|
||||||
*/
|
*/
|
||||||
private function processResponse(string $response): array
|
private function processResponse(string $response, string $kampagneType): array
|
||||||
{
|
{
|
||||||
$parts = explode('|', trim($response));
|
$parts = explode('|', trim($response));
|
||||||
|
|
||||||
@@ -120,7 +144,7 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
$verguetungEuro = $verdienst * $this->werbenetzwerk->getUmrechnungskurs();
|
$verguetungEuro = $verdienst * $this->werbenetzwerk->getUmrechnungskurs();
|
||||||
|
|
||||||
// Kampagne verarbeiten
|
// 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++;
|
$updatedCount++;
|
||||||
} else {
|
} else {
|
||||||
$createdCount++;
|
$createdCount++;
|
||||||
@@ -147,20 +171,15 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
int $uebrig,
|
int $uebrig,
|
||||||
float $verdienst,
|
float $verdienst,
|
||||||
float $verguetungEuro,
|
float $verguetungEuro,
|
||||||
?string $mailtext
|
?string $mailtext,
|
||||||
|
string $kampagneType
|
||||||
): bool {
|
): bool {
|
||||||
// Vergütung höher als 0.1 Euro filtern
|
// Vergütung höher als 0.1 Euro filtern
|
||||||
if ($verguetungEuro > 0.1) {
|
if ($verguetungEuro > 0.1) {
|
||||||
$this->log("Skipping: $linktext (KID: $kid, Vergütung zu hoch: $verguetungEuro €)");
|
$this->log("Skipping: $linktext (KID: $kid, Vergütung zu hoch: $verguetungEuro €)");
|
||||||
|
|
||||||
// Wenn Kampagne existiert, löschen
|
// Wenn Kampagne existiert, löschen
|
||||||
$existingKampagne = $this->entityManager
|
$existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType);
|
||||||
->getRepository(Kampagne::class)
|
|
||||||
->findOneBy([
|
|
||||||
'user' => $this->werbenetzwerkUser,
|
|
||||||
'kid' => $kid,
|
|
||||||
'is_ft' => true
|
|
||||||
]);
|
|
||||||
if ($existingKampagne) {
|
if ($existingKampagne) {
|
||||||
$this->entityManager->remove($existingKampagne);
|
$this->entityManager->remove($existingKampagne);
|
||||||
$this->log(" → Deleted existing campaign with high vergütung");
|
$this->log(" → Deleted existing campaign with high vergütung");
|
||||||
@@ -170,18 +189,17 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Link-URL generieren
|
// 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)");
|
$this->log("Processing: $linktext (KID: $kid, MA: $ma, Reload: $reload, Uebrig: $uebrig)");
|
||||||
|
|
||||||
// Prüfen ob Kampagne bereits existiert (is_ft = true)
|
// Prüfen ob Kampagne bereits existiert
|
||||||
$existingKampagne = $this->entityManager
|
$existingKampagne = $this->findExistingKampagneByType($kid, $kampagneType);
|
||||||
->getRepository(Kampagne::class)
|
|
||||||
->findOneBy([
|
|
||||||
'user' => $this->werbenetzwerkUser,
|
|
||||||
'kid' => $kid,
|
|
||||||
'is_ft' => true
|
|
||||||
]);
|
|
||||||
|
|
||||||
if ($existingKampagne) {
|
if ($existingKampagne) {
|
||||||
// Kampagne aktualisieren
|
// Kampagne aktualisieren
|
||||||
@@ -209,13 +227,18 @@ class AdCityForcedTextlinkCron extends AbstractCron
|
|||||||
$kampagne->setVerguetung($verguetungEuro);
|
$kampagne->setVerguetung($verguetungEuro);
|
||||||
$kampagne->setUebrig($uebrig);
|
$kampagne->setUebrig($uebrig);
|
||||||
$kampagne->setIsFb(false);
|
$kampagne->setIsFb(false);
|
||||||
$kampagne->setIsTr(false);
|
$kampagne->setIsTr($kampagneType === 'is_tr');
|
||||||
$kampagne->setIsFt(true);
|
$kampagne->setIsFt($kampagneType === 'is_ft');
|
||||||
$kampagne->setIsMail(false);
|
$kampagne->setIsMail($kampagneType === 'is_mail');
|
||||||
if ($mailtext) {
|
|
||||||
|
if ($mailtext && $kampagneType === 'is_mail') {
|
||||||
|
$kampagne->setMailtext($mailtext);
|
||||||
|
} elseif ($mailtext && $kampagneType === 'is_ft') {
|
||||||
|
// ForcedTextlink kann auch Mailtext haben
|
||||||
$kampagne->setMailtext($mailtext);
|
$kampagne->setMailtext($mailtext);
|
||||||
$kampagne->setIsMail(true);
|
$kampagne->setIsMail(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$kampagne->setUser($this->werbenetzwerkUser);
|
$kampagne->setUser($this->werbenetzwerkUser);
|
||||||
|
|
||||||
$this->entityManager->persist($kampagne);
|
$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
|
* Aktualisiert den Umrechnungskurs in der Datenbank
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ class Werbenetzwerk
|
|||||||
#[ORM\Column(type: 'string', length: 50)]
|
#[ORM\Column(type: 'string', length: 50)]
|
||||||
private string $user_id;
|
private string $user_id;
|
||||||
|
|
||||||
|
#[ORM\Column(type: 'string', length: 255, nullable: true)]
|
||||||
|
private ?string $referal_url = null;
|
||||||
|
|
||||||
#[ORM\Column(type: 'datetime', nullable: true)]
|
#[ORM\Column(type: 'datetime', nullable: true)]
|
||||||
private ?\DateTimeInterface $date_updated = null;
|
private ?\DateTimeInterface $date_updated = null;
|
||||||
|
|
||||||
@@ -104,4 +107,15 @@ class Werbenetzwerk
|
|||||||
$this->user_id = $user_id;
|
$this->user_id = $user_id;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getReferalUrl(): ?string
|
||||||
|
{
|
||||||
|
return $this->referal_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setReferalUrl(?string $referal_url): self
|
||||||
|
{
|
||||||
|
$this->referal_url = $referal_url;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user