/** * Importiert die Daten aus der aus Kufer SQL exportierten XML Datei. * @global mixed[] $REX Redaxo Variable */ public static function syncData() { global $REX; // error reporting if (KUFER_IMPORT_DEBUG_MODE) { ini_set('display_startup_errors', 1); ini_set('display_errors', 1); error_reporting(-1); } else { ini_set('display_startup_errors', 0); ini_set('display_errors', 0); error_reporting(0); } include_once $REX['INCLUDE_PATH'] . '/functions/function_rex_generate.inc.php'; // init logger $logFile = KUFER_IMPORT_LOG_FILE_PATH; $log = KLogger::instance($logFile, KLogger::INFO); // PHP Log Einstellungen werden ausgelesen, damit sie später zurückgesetzt werden können $phpLogErrors = ini_get('log_errors'); $phperrorLog = ini_get('error_log'); ini_set('log_errors', 1); ini_set('error_log', $log->getLogFilePath()); $log->logInfo('======================================== START Kufer Import ========================================'); $context = stream_context_create(array('http' => array('header' => 'Accept: application/xml'))); $xmlUrl = $REX['ADDON']['kufer_import']['settings']['xml_url']; // XML Datei auslesen $xmlString = file_get_contents($xmlUrl, false, $context); $kufer_kurse = simplexml_load_string($xmlString, null, LIBXML_NOCDATA); // Bestehende Kurse auslesen, falls sie aktualisiert werden require_once $REX['INCLUDE_PATH'] . '/addons/d2u_kurse/classes/class.kurs.inc.php'; $kurse = Kurs::getAll($REX['TABLE_PREFIX'], FALSE); // Nur die Kurse sind von Interesse, die durch kufer_import hinzugefügt wurden $importierte_kurse = array(); foreach ($kurse as $kurs) { if ($kurs->import == KUFER_IMPORT_STRING) { $importierte_kurse[$kurs->kursnummer] = $kurs; } } // Kufer Kurse hinzufügen oder aktualisieren $counter_new = 0; $counter_update = 0; $kurskategorien = Kurskategorie::getAll($kurs->table_prefix, 0, FALSE); $terminkategorien = Terminkategorie::getAll($kurs->table_prefix, FALSE); $zielgruppen = Zielgruppe::getAll($kurs->table_prefix, FALSE); foreach ($kufer_kurse->kurs as $kufer_kurs) { // Kurse, die ausfallen werden nicht importiert if (isset($kufer_kurs->ausfall)) { continue; } // Kurse, die schon begonnen haben werden nicht importiert if (isset($kufer_kurs->beginndat) && $kufer_kurs->beginndat != "") { $d = explode(".", $kufer_kurs->beginndat); $beginndat_time = mktime(0, 0, 0, $d[1], $d[0], $d[2]); if (strtotime("-1 day") > $beginndat_time) { continue; } } $kurs = Kurs::factory($REX['TABLE_PREFIX']); // Wurde Kurs schon einmal importiert? if (isset($kufer_kurs->knr)) { $kufer_kursnummer = (string) $kufer_kurs->knr; if (array_key_exists($kufer_kursnummer, $importierte_kurse)) { // Kurs aus Array holen ... $kurs = $importierte_kurse[$kufer_kursnummer]; // ... und entfernen, denn übrige Kurse werden später gelöscht unset($importierte_kurse[$kufer_kursnummer]); } } // Werte aus Import holen und in Kursobjekt schreiben // Kursnummer if (isset($kufer_kurs->knr)) { $kurs->kursnummer = (string) $kufer_kurs->knr; } // Titel if (isset($kufer_kurs->titelkurz) && $kufer_kurs->titelkurz != "") { $kurs->titel = (string) $kufer_kurs->titelkurz; } else { if (isset($kufer_kurs->titellang) && $kufer_kurs->titellang != "") { $kurs->titel = (string) $kufer_kurs->titellang; } } // Beschreibung $kurs->beschreibung = ""; // Zuerst Zurücksetzen if (isset($kufer_kurs->titellang) && $kufer_kurs->titellang != "") { $kurs->beschreibung = "<p><b>" . (string) $kufer_kurs->titellang . "</b></p>"; } if (isset($kufer_kurs->web_info) && $kufer_kurs->web_info != "") { $kurs->beschreibung .= "<p>" . nl2br($kufer_kurs->web_info) . "</p>"; } else { if (isset($kufer_kurs->inhalt) && $kufer_kurs->inhalt != "") { $kurs->beschreibung .= "<p>" . nl2br($kufer_kurs->inhalt) . "</p>"; } } if (isset($kufer_kurs->material) && $kufer_kurs->material != "") { $kurs->beschreibung .= "<p><b>Material</b></p>"; $kurs->beschreibung .= "<p>" . nl2br($kufer_kurs->material) . "</p>"; } // Anmeldung mit Warenkorb möglich if (isset($kufer_kurs->keinewebanmeldung) && $kufer_kurs->keinewebanmeldung == "F") { $kurs->anmeldung_moeglich = "ja"; } else { if (isset($kufer_kurs->keinewebanmeldung) && $kufer_kurs->keinewebanmeldung == "W") { $kurs->anmeldung_moeglich = "nein"; } } if (isset($kufer_kurs->tnmax) && isset($kufer_kurs->tnanmeldungen) && (int) $kufer_kurs->tnmax > 0 && $kufer_kurs->tnanmeldungen >= (int) $kufer_kurs->tnmax) { $kurs->anmeldung_moeglich = "ausgebucht"; } // Datum Kurs if (isset($kufer_kurs->beginndat) && $kufer_kurs->beginndat != "") { // Beginn $kurs->datum_von = kufer_sync::formatDate($kufer_kurs->beginndat); // Ende if (isset($kufer_kurs->endedat) && $kufer_kurs->endedat != "" && trim($kufer_kurs->beginndat) != trim($kufer_kurs->endedat)) { $kurs->datum_bis = kufer_sync::formatDate($kufer_kurs->endedat); $kurs->uhrzeit = ""; } else { $kurs->datum_bis = ""; // Uhrzeit bei eintägigen Veranstaltungen ... if (isset($kufer_kurs->beginnuhr) && $kufer_kurs->beginnuhr != "") { $kurs->uhrzeit = $kufer_kurs->beginnuhr; if (isset($kufer_kurs->endeuhr) && $kufer_kurs->endeuhr != "") { $kurs->uhrzeit .= " - " . $kufer_kurs->endeuhr; } $kurs->uhrzeit .= " Uhr"; } } } if (isset($kufer_kurs->termine) && $kufer_kurs->termine->termin->count() > 1) { // ... bei mehrtätigen Veranstaltungen Termine in Beschreibung schreiben $kurs->beschreibung .= "<p><b>Termine</b></p>"; $kurs->beschreibung .= "<ul>"; for ($i = 0; $i < $kufer_kurs->termine->termin->count(); $i++) { $kurs->beschreibung .= "<li>" . $kufer_kurs->termine->termin[$i]->tag; if (isset($kufer_kurs->termine->termin[$i]->zeitvon) && $kufer_kurs->termine->termin[$i]->zeitvon != "") { $kurs->beschreibung .= ": " . $kufer_kurs->termine->termin[$i]->zeitvon; if (isset($kufer_kurs->termine->termin[$i]->zeitbis) && $kufer_kurs->termine->termin[$i]->zeitbis != "") { $kurs->beschreibung .= " - " . $kufer_kurs->termine->termin[$i]->zeitbis; } $kurs->beschreibung .= " Uhr"; } $kurs->beschreibung .= "</li>"; } $kurs->beschreibung .= "</ul>"; } if (isset($kufer_kurs->dauerdetails) && $kufer_kurs->dauerdetails != "") { $kurs->beschreibung .= "<p><b>Zusätzliche Bemerkungen zum Termin:</b></p><p>" . $kufer_kurs->dauerdetails . "</p>"; } // Kursort: siehe Einstellungen $kurs->ort = new Kursort($REX['ADDON']['kufer_import']['settings']['default_ort_id'], $kurs->table_prefix); // Kursgebühren if (isset($kufer_kurs->gebnorm) && floatval($kufer_kurs->gebnorm) > 0) { $kurs->kosten = floatval($kufer_kurs->gebnorm); } if (isset($kufer_kurs->geberm) && floatval($kufer_kurs->geberm) > 0 && $kufer_kurs->gebnorm != $kufer_kurs->geberm) { $kurs->kosten_erm = floatval($kufer_kurs->geberm); } // Maximale Teilnehmer if (isset($kufer_kurs->tnmax) && $kufer_kurs->tnmax > 0) { $kurs->teilnehmer_max = (int) $kufer_kurs->tnmax; // Konvertierung zu int nötig } // Minimale Teilnehmer if (isset($kufer_kurs->tnmin) && $kufer_kurs->tnmin > 0) { $kurs->teilnehmer_min = (int) $kufer_kurs->tnmin; // Konvertierung zu int nötig } // Anzahl Anmeldunngen if (isset($kufer_kurs->tnanmeldungen) && $kufer_kurs->tnanmeldungen > 0) { $kurs->teilnehmer_angemeldet = (int) $kufer_kurs->tnanmeldungen; // Konvertierung zu int nötig } // Anzahl auf Warteliste if (isset($kufer_kurs->tnwarteliste) && $kufer_kurs->tnwarteliste > 0) { $kurs->teilnehmer_warteliste = (int) $kufer_kurs->tnwarteliste; // Konvertierung zu int nötig } // Dozenten if (isset($kufer_kurs->dozenten) && count($kufer_kurs->dozenten) > 0) { $kurs->kursleiter = ""; // Erst Reset der Variable for ($i = 0; $i < $kufer_kurs->dozenten->dozent->count(); $i++) { $dozent = $kufer_kurs->dozenten->dozent[$i]; if (strlen($kurs->kursleiter) > 3) { $kurs->kursleiter .= ", "; } if (isset($dozent->titel)) { $kurs->kursleiter .= $dozent->titel . " "; } if (isset($dozent->vorname) && isset($dozent->name)) { $kurs->kursleiter .= $dozent->vorname . " " . $dozent->name; } } } // Ort: Raumname if (isset($kufer_kurs->ortraumname) && $kufer_kurs->ortraumname != "") { $kurs->raum = $kufer_kurs->ortraumname; } // Für die Zuordnung der Kategorien und Zielgruppen zuerst ein Reset $kurs->kurskategorie = FALSE; $kurs->sekundaere_kurskategorie_ids = array(); $kurs->zielgruppen_ids = array(); // Kategorien if (isset($kufer_kurs->kategorien) && count($kufer_kurs->kategorien) > 0) { // Erst mal nur die Kufer Kursbezeichnungen holen $kufer_kurs_bezeichnungstrukturen = array(); for ($i = 0; $i < $kufer_kurs->kategorien->kategorie->count(); $i++) { $kufer_kurs_bezeichnungstrukturen[] = (string) $kufer_kurs->kategorien->kategorie[$i]->bezeichnungstruktur; } // Kurskategorie zuordnen $kurskategorie_counter = 0; foreach ($kurskategorien as $kurskategorie) { foreach ($kurskategorie->kufer_kategorien_bezeichnungsstrukturen as $kurskategorie_bezeichnungsstruktur) { if (in_array($kurskategorie_bezeichnungsstruktur, $kufer_kurs_bezeichnungstrukturen) && !in_array($kurskategorie->kurskategorie_id, $kurs->sekundaere_kurskategorie_ids)) { if ($kurskategorie_counter == 0) { $kurs->kurskategorie = $kurskategorie; } $kurs->sekundaere_kurskategorie_ids[] = $kurskategorie->kurskategorie_id; } } } // Terminkategorie zuordnen foreach ($terminkategorien as $terminkategorie) { foreach ($terminkategorie->kufer_kategorien_bezeichnungsstrukturen as $terminkategorie_bezeichnungsstruktur) { if (in_array($terminkategorie_bezeichnungsstruktur, $kufer_kurs_bezeichnungstrukturen) && !in_array($terminkategorie->terminkategorie_id, $kurs->terminkategorie_ids)) { $kurs->terminkategorie_ids[] = $terminkategorie->terminkategorie_id; } } } // Zielgruppe aus Katgeorien zuordnen foreach ($zielgruppen as $zielgruppe) { foreach ($zielgruppe->kufer_kategorien_bezeichnungsstrukturen as $zielgruppe_bezeichnungsstruktur) { if (in_array($zielgruppe_bezeichnungsstruktur, $kufer_kurs_bezeichnungstrukturen) && !in_array($zielgruppe->zielgruppe_id, $kurs->zielgruppen_ids)) { $kurs->zielgruppen_ids[] = $zielgruppe->zielgruppe_id; } } } } // Falls immernoch keine Kurskategorie gesetzt wurde if ($kurs->kurskategorie === FALSE) { $kurs->kurskategorie = new Kurskategorie($REX['ADDON']['kufer_import']['settings']['default_kurs_kategorie_id'], $kurs->table_prefix); $kurs->sekundaere_kurskategorie_ids = array($REX['ADDON']['kufer_import']['settings']['default_kurs_kategorie_id']); } // Zielgruppe aus Zielgruppe if (isset($kufer_kurs->zielgruppe) && $kufer_kurs->zielgruppe != "") { foreach ($zielgruppen as $zielgruppe) { if ($zielgruppe->kufer_zielgruppe_name == $kufer_kurs->zielgruppe && !in_array($zielgruppe->zielgruppe_id, $kurs->zielgruppen_ids)) { $kurs->zielgruppen_ids[] = $zielgruppe->zielgruppe_id; } } } else { if (count($kurs->zielgruppen_ids) == 0) { $kurs->zielgruppen_ids[] = $REX['ADDON']['kufer_import']['settings']['default_zielgruppe_id']; } } // Status $kurs->status = "online"; // Importiert durch Kufer SQL $kurs->import = KUFER_IMPORT_STRING; // Kurs speichern und Ergebnis loggen if ($kurs->kurs_id == 0) { $counter_new++; } else { $counter_update++; } $log->logInfo($kurs->save()); } print "<h1>Kufer Import Ergebnis</h1>"; print "<p>" . $counter_new . " Kurse hinzugefügt.</p>"; print "<p>" . $counter_update . " Kurse aktualisiert.</p>"; // Übrige importierte Kurse löschen $counter_delete = 0; foreach ($importierte_kurse as $importierter_kurs) { $log->logInfo($importierter_kurs->delete()); $counter_delete++; } print "<p>" . $counter_delete . " Kurse gelöscht.</p>"; // Einstellungen zum Loggen zurücksetzen ini_set('log_errors', $phpLogErrors); ini_set('error_log', $phperrorLog); $log->logInfo('======================================== ENDE Kufer Import ========================================'); }
/** * Aendert die seo42 Sitemap und fuegt die URLs des Addons hinzu. * @global mixed[] $REX Die Redaxo Variable * @var mixed[] $_params Array mit Sitemap URLs * @return mixed[] Erweiterter Array mit Sitemap URLs */ function d2u_kurse_extended_sitemap($_params) { global $REX; $rex_clang_ids = array_keys($REX['CLANG']); $clang_id = array_shift($rex_clang_ids); // Startkacheln $add_array = array(); $add_array[$clang_id] = array('loc' => kurse_utils::getStartkachelURL($REX['ADDON']['d2u_kurse']['settings']['kategorie_titel'], $clang_id, TRUE), 'lastmod' => date('c', time()), 'changefreq' => 'monthly', 'priority' => 0.8); $_params['subject'][] = $add_array; $add_array = array(); $add_array[$clang_id] = array('loc' => kurse_utils::getStartkachelURL($REX['ADDON']['d2u_kurse']['settings']['ort_titel'], $clang_id, TRUE), 'lastmod' => date('c', time()), 'changefreq' => 'monthly', 'priority' => 0.8); $_params['subject'][] = $add_array; $add_array = array(); $add_array[$clang_id] = array('loc' => kurse_utils::getStartkachelURL($REX['ADDON']['d2u_kurse']['settings']['termin_titel'], $clang_id, TRUE), 'lastmod' => date('c', time()), 'changefreq' => 'monthly', 'priority' => 0.8); $_params['subject'][] = $add_array; $add_array = array(); $add_array[$clang_id] = array('loc' => kurse_utils::getStartkachelURL($REX['ADDON']['d2u_kurse']['settings']['zielgruppe_titel'], $clang_id, TRUE), 'lastmod' => date('c', time()), 'changefreq' => 'monthly', 'priority' => 0.8); $_params['subject'][] = $add_array; // Kurse $kurse = Kurs::getAll($REX['TABLE_PREFIX'], TRUE); foreach ($kurse as $kurs) { $add_array = array(); $add_array[$clang_id] = array('loc' => $kurs->getURL(TRUE), 'lastmod' => date('c', $kurs->updatedate), 'changefreq' => 'weekly', 'priority' => 1.0); $_params['subject'][] = $add_array; } // Kurskategorie $kurskategorien = Kurskategorie::getAll($REX['TABLE_PREFIX'], 0, TRUE); foreach ($kurskategorien as $kurskategorie) { $add_array = array(); $add_array[$clang_id] = array('loc' => $kurskategorie->getURL(TRUE), 'lastmod' => date('c', $kurskategorie->updatedate), 'changefreq' => 'monthly', 'priority' => 0.6); $_params['subject'][] = $add_array; } // Kursorte $kursorte = Kursort::getAll($REX['TABLE_PREFIX'], 0, TRUE); foreach ($kursorte as $kursort) { $add_array = array(); $add_array[$clang_id] = array('loc' => $kursort->getURL(TRUE), 'lastmod' => date('c', $kursort->updatedate), 'changefreq' => 'monthly', 'priority' => 0.6); $_params['subject'][] = $add_array; } // Kursortskategorien $kursortskategorien = KursortKategorie::getAll($REX['TABLE_PREFIX'], TRUE); foreach ($kursortskategorien as $kursortskategorie) { $add_array = array(); $add_array[$clang_id] = array('loc' => $kursortskategorie->getURL(TRUE), 'lastmod' => date('c', $kursortskategorie->updatedate), 'changefreq' => 'monthly', 'priority' => 0.6); $_params['subject'][] = $add_array; } // Terminkategorien $terminkategorien = Terminkategorie::getAll($REX['TABLE_PREFIX'], TRUE); foreach ($terminkategorien as $terminkategorie) { $add_array = array(); $add_array[$clang_id] = array('loc' => $terminkategorie->getURL(TRUE), 'lastmod' => date('c', $terminkategorie->updatedate), 'changefreq' => 'monthly', 'priority' => 0.6); $_params['subject'][] = $add_array; } // Zielgruppen $zielgruppen = Zielgruppe::getAll($REX['TABLE_PREFIX'], TRUE); foreach ($zielgruppen as $zielgruppe) { $add_array = array(); $add_array[$clang_id] = array('loc' => $zielgruppe->getURL(TRUE), 'lastmod' => date('c', $zielgruppe->updatedate), 'changefreq' => 'monthly', 'priority' => 0.6); $_params['subject'][] = $add_array; } return $_params['subject']; /* Allgemeiner Hinweis: In der config.inc.php muessen folgende Zeilen hinzugefuegt werden: -----%<----- require_once dirname(__FILE__) ."/extensions/seo42.inc.php"; rex_register_extension('SEO42_SITEMAP_ARRAY_CREATED', 'd2u_kurse_extended_sitemap'); -----%<----- */ }
print '<div class="col-xs-12 abstand"><div class="h1-bg" style="background-color: #' . $REX['ADDON']['d2u_kurse']['settings']['ort_farbe'] . ' !important">'; print '<h1 class="h1">' . $ortkategorie->name . '</h1>'; print '</div></div>'; $orte = Kursort::getAll($REX['TABLE_PREFIX'], $ort_kategorie_id, TRUE); foreach ($orte as $ort) { getKachelbox($ort->name, $ort->bild, $REX['ADDON']['d2u_kurse']['settings']['ort_farbe'], $ort->getURL(TRUE)); } } else { if ($ort_id > 0) { $orte = new Kursort($ort_id, $REX['TABLE_PREFIX']); $kurse = $orte->getAllKurse(TRUE); } else { if ($terminkategorie_id > 0) { $terminkategorie = new Terminkategorie($terminkategorie_id, $REX['TABLE_PREFIX']); if ($terminkategorie->eltern_terminkategorie === FALSE) { $terminkategorien = Terminkategorie::getAll($REX['TABLE_PREFIX'], TRUE, $terminkategorie_id); if (count($terminkategorien) > 0) { print '<div class="col-xs-12 abstand"><div class="h1-bg" style="background-color: #' . $REX['ADDON']['d2u_kurse']['settings']['termin_farbe'] . ' !important">'; print '<h1 class="h1">' . $terminkategorie->name . '</h1>'; print '</div></div>'; // Kinderkategorien anzeigen foreach ($terminkategorien as $cur_terminkategorie) { getKachelbox($cur_terminkategorie->name, $cur_terminkategorie->bild, $REX['ADDON']['d2u_kurse']['settings']['termin_farbe'], $cur_terminkategorie->getURL(TRUE)); } } else { // Wenn keine Kinderkategorien vorhanden sind, Kurse anzeigen $kurse = $terminkategorie->getAllKurse(TRUE); } } else { $kurse = $terminkategorie->getAllKurse(TRUE); }