adcity
This commit is contained in:
@@ -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())');
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user