PHP-Code:
<?php
// Contao einbinden
define('TL_MODE', 'FE');
define('TL_SCRIPT', 'bundles/contaodsolnews/Synchronisation.php');
require($_SERVER['DOCUMENT_ROOT'].'/../system/initialize.php');
/**
* Run in a custom namespace, so the class can be replaced
*/
use Contao\Controller;
/**
* Klasse Synchronisation
* ==================================================================================
* Synchronisiert die Nachrichten der DSOL-Website mit dem lokalen Nachrichten-Archiv
*/
class Synchronisation
{
public function __construct()
{
}
public function run()
{
try
{
// Tabelle content der DSOL-Datenbank auslesen
$objDSOLDB = \Database::getInstance(array
(
'dbHost' => $GLOBALS['TL_CONFIG']['dsolnews_host'],
'dbUser' => $GLOBALS['TL_CONFIG']['dsolnews_user'],
'dbPass' => $GLOBALS['TL_CONFIG']['dsolnews_pass'],
'dbDatabase' => $GLOBALS['TL_CONFIG']['dsolnews_db']
));
// Nachrichten der DSOL-Website auslesen
$objDSOL = $objDSOLDB->prepare("SELECT * FROM dsb_content")
->execute();
// Nachrichten aus dem lokalen Archiv auslesen
$objNews = \Database::getInstance()->prepare("SELECT * FROM tl_news WHERE pid=?")
->execute($GLOBALS['TL_CONFIG']['dsolnews_archiv']);
echo '<b>'.$objNews->numRows . ' Nachrichten</b> im lokalen Archiv<br><br>';
$param = \Input::get('info');
// Neue Nachrichten vom lokalen Archiv zur DSOL-Website hinzufügen (kein Update!)
if(in_array('copy-new-to-extern', $param))
{
echo 'Suche nach neuen Nachrichten in lokalem Archiv...<br>';
$exportiert = 0;
if($objNews->numRows)
{
while($objNews->next())
{
// Nachricht im entfernten Archiv vorhanden?
$objRecord = $objDSOLDB->prepare("SELECT * FROM content WHERE Content_Saison=? AND Content_Nr=? AND Content_Bereich=?")
->limit(1)
->execute($objNews->dsol_saison, $objNews->dsol_nummer, 'index');
if($objRecord->numRows == 0)
{
// Nachricht nicht vorhanden, Export starten
$exportiert++;
$set = array
(
'Content_Saison' => $objNews->dsol_saison,
'Content_Bereich' => 'index',
'Content_Nr' => $objNews->dsol_nummer,
'Content_Text' => $objNews->teaser,
'Content_Status' => $objNews->published ? 'aktiv' : 'inaktiv',
);
$objInsert = $objDSOLDB->prepare("INSERT INTO content %s")
->set($set)
->execute();
}
}
}
echo '... <b>'.$exportiert.'</b> neue Nachrichten nach DSOL-Website exportiert<br>';
}
// Geänderte Nachrichten vom lokalen Archiv auf der DSOL-Website aktualisieren (Update!)
if(in_array('update-to-extern', $param))
{
echo 'Suche nach geänderten Nachrichten in lokalem Archiv...<br>';
$exportiert = 0;
if($objNews->numRows)
{
while($objNews->next())
{
// Nachricht im entfernten Archiv vorhanden?
$objRecord = $objDSOLDB->prepare("SELECT * FROM content WHERE Content_Saison=? AND Content_Nr=? AND Content_Bereich=?")
->limit(1)
->execute($objNews->dsol_saison, $objNews->dsol_nummer, 'index');
if($objRecord->numRows == 1)
{
// Nachricht vorhanden, Update starten
$ungleich = $objRecord->Content_Text != $objNews->teaser ? true : false;
$publiziert = $objRecord->Content_Status == 'aktiv' ? '1' : '';
if($ungleich || $publiziert != $objNews->published)
{
$exportiert++;
$set = array
(
'Content_Text' => $objNews->teaser,
'Content_Status' => $objNews->published ? 'aktiv' : 'inaktiv',
);
$objInsert = $objDSOLDB->prepare("UPDATE content %s WHERE Content_Saison=? AND Content_Bereich=? AND Content_Bereich=?")
->set($set)
->execute($objNews->dsol_saison, $objNews->dsol_nummer, 'index');
}
}
}
}
echo '... <b>'.$exportiert.'</b> vorhandene Nachrichten auf DSOL-Website aktualisiert<br>';
}
// Neue Nachrichten von DSOL-Website zum lokalen Archiv hinzufügen (kein Update!)
if(in_array('copy-new-to-intern', $param))
{
echo 'Suche nach neuen Nachrichten auf DSOL-Website...<br>';
$importiert = 0;
if($objDSOL->numRows)
{
while($objDSOL->next())
{
// Nachricht im lokalen Archiv vorhanden?
$objRecord = \Database::getInstance()->prepare("SELECT * FROM tl_news WHERE pid=? AND dsol_saison=? AND dsol_nummer=?")
->limit(1)
->execute($GLOBALS['TL_CONFIG']['dsolnews_archiv'], $objDSOL->Content_Saison, $objDSOL->Content_Nr);
if($objRecord->numRows == 0)
{
// Nachricht nicht vorhanden, Import starten
$importiert++;
$set = array
(
'pid' => $GLOBALS['TL_CONFIG']['dsolnews_archiv'],
'tstamp' => mktime(0, 0, 0, 1, 1, $objDSOL->Content_Saison),
'headline' => 'Nachricht Saison '.$objDSOL->Content_Saison.' Nr. '.$objDSOL->Content_Nr,
'date' => mktime(0, 0, 0, 1, 1, $objDSOL->Content_Saison),
'time' => mktime(0, 0, 0, 1, 1, $objDSOL->Content_Saison),
'teaser' => $objDSOL->Content_Text,
'source' => 'default',
'published' => $objDSOL->Content_Status == 'aktiv' ? '1' : '',
'dsol_saison' => $objDSOL->Content_Saison,
'dsol_nummer' => $objDSOL->Content_Nr,
);
$objInsert = \Database::getInstance()->prepare("INSERT INTO tl_news %s")
->set($set)
->execute();
}
}
}
echo '... <b>'.$importiert.'</b> Nachrichten importiert<br>';
}
// Geänderte Nachrichten von DSOL-Website zum lokalen Archiv übertragen (Update!)
if(in_array('update-to-intern', $param))
{
echo 'Suche nach geänderten Nachrichten auf DSOL-Website...<br>';
$importiert = 0;
if($objDSOL->numRows)
{
while($objDSOL->next())
{
// Nachricht im lokalen Archiv vorhanden?
$objRecord = \Database::getInstance()->prepare("SELECT * FROM tl_news WHERE pid=? AND dsol_saison=? AND dsol_nummer=?")
->limit(1)
->execute($GLOBALS['TL_CONFIG']['dsolnews_archiv'], $objDSOL->Content_Saison, $objDSOL->Content_Nr);
if($objRecord->numRows == 1)
{
// Nachricht vorhanden
$ungleich = $objDSOL->Content_Text != $objRecord->teaser ? true : false;
$publiziert = $objDSOL->Content_Status == 'aktiv' ? '1' : '';
if($ungleich || $publiziert != $objRecord->published)
{
$importiert++;
$set = array
(
'teaser' => $objDSOL->Content_Text,
'published' => $objDSOL->Content_Status == 'aktiv' ? '1' : '',
);
$objInsert = \Database::getInstance()->prepare("UPDATE INTO tl_news %s WHERE id=?")
->set($set)
->execute($objRecord->id);
}
}
}
}
echo '... <b>'.$importiert.'</b> vorhandene Nachrichten aktualisiert<br>';
}
echo '<br>Fertig';
}
catch(\TableNotFoundException $ex)
{
print_r($ex);
// Tabelle dsb_content existiert nicht, jetzt anlegen
echo "Tabelle dsb_content nicht gefunden<br>";
//$spl = "
//CREATE TABLE `dsb_content` (
// `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
// `tstamp` int(10) unsigned NOT NULL DEFAULT 0,
// `headline` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `date` int(10) unsigned NOT NULL DEFAULT 0,
// `time` int(11) NOT NULL DEFAULT 0,
// `subheadline` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `teaser` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
// `author` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `addImage` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `singleSRC` binary(16) DEFAULT NULL,
// `alt` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `imageTitle` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `size` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `fullsize` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `caption` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// `floating` varchar(12) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'above',
// `published` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
// PRIMARY KEY (`id`),
//) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;";
//$objDSOL = $objDSOLDB->prepare($sql)
// ->execute();
echo "Tabelle wurde angelegt";
return;
}
catch(\Exception $ex)
{
print_r($ex);
}
}
}
/**
* Instantiate controller
*/
$objClick = new Synchronisation();
$objClick->run();
dsb_content heißt die Tabelle die nicht vorhanden ist und angelegt werden muß, nach dem Auftreten des Fehlers.
Lesezeichen