01/03/2013 3:16pm

PHP | Working Example - Simple Migration for Silverstripe / Sapphire


<!--

This program is published under the GNUv3 licence
Maintained by Wolf Vollprecht, Feb 2013
-->

<?php

class ImportAction extends Controller {

private $db_target = [
"type" => 'MySQLDatabase',
"server" => 'localhost',
"username" => 'root',
"password" => 'peta',
"database" => '3ZS_Import',
"path" => ''
];

private $db_origin = [
"type" => 'MySQLDatabase',
"server" => 'localhost',
"username" => 'root',
"password" => 'peta',
"database" => 'ZS_Origin',
"path" => ''
];

private function updateTable($table, $table_orig, $rules = null, $versions = [""]) {
foreach($versions as $version) {
$t = $table.$version;
$t_o = $table_orig.$version;
echo "Tabelle: " . $t . " Tabelle Original: " . $t_o;
DB::connect($this->db_origin);
$query = new SQLQuery();
$query->setFrom($t_o)->setSelect("*");
$res = $query->execute();
$num = 0;
DB::connect($this->db_target);
DB::query("TRUNCATE TABLE " . $t);
$conn = DB::getConn();
foreach($res as $r) {
$cont = false;
if(isset($rules["ignore"])) {
foreach($rules["ignore"] as $ignoreColumn => $ignoreValues) {
if(in_array($r[$ignoreColumn], $ignoreValues)) {
$cont = true;
}
}
}
if($cont) continue;
foreach($r as $k => $v) {
$r[$k] = $conn->addslashes($v);
}
if($rules) {
if(isset($rules["changeColumn"])) {
foreach($rules["changeColumn"] as $from => $to) {
$r[$to] = $r[$from];
}
}
if(isset($rules["changeEnum"])) {
foreach($rules["changeEnum"] as $enumField => $changes) {
$from = array_keys($changes);
if(in_array($r[$enumField], $from)) {
$r[$enumField] = $changes[$r[$enumField]];
}
}
}
if(isset($rules["unset"])) {
foreach($rules["unset"] as $rule) {
unset($r[$rule]);
}
}
}
$keys = array_keys($r);
$values = array_values($r);
$keys = implode(", ", $keys);
$values = implode("', '", $values);
$insert = "INSERT INTO ". $t ." (" . $keys . ") VALUES ('" . $values . "')";
echo $insert . "\n";
// echo $t . ": " . $num . "\r";
DB::query($insert);
$num++;
}
}
echo "\n-- Inserted " . $num . " Entries in " . $table . ".\n\n";
}

public function index() {
set_time_limit(0);
echo "\n\n=-= Import is running! =-=\n\n";

// $this->updateArticle();
// $this->updateBlog();
// $this->updateBlogHolder();
// $this->updateBlogTree();

// $this->updateComments();

$ss_versions = ["", "_Live", "_versions"];

$lotteryRules = [
"changeColumn" => [
[
"AblaufDatum" => "Deadline"
]
],
"unset" => [
"AblaufDatum"
]
];

$sitetreeRules = [
"changeEnum" => [
"ClassName" => [
"TeamseiteSingle" => "TeampageSingle",
"Teamseite" => "Teampage",
"Artikel" => "Article",
"Ausgabe" => "Issue",
"AusgabenHolder" => "IssueHolder"
]
],
"changeColumn" => [

],
"ignore" => [
"ClassName" => [
"Buecherboerse",
"Teamseite",
"MemberProfilePage"
]
],
"unset" => [
"HomepageForDomain", "ToDo", "MetaKeywords",
"Status", "Priority", "MetaTitle"
]
];

$articleRules = [
"changeColumn" => [
"ArticleAuthor" => "Author",
"TextKategorie" => "TextCategory",
"KategorieID" => "CategoryID",
"AusgabeID" => "IssueID",
],
// Not needed, already changed in SiteTree ...
// "changeEnum" => [
// "ClassName" => [
// "Artikel" => "Article"
// ]
// ],
"unset" => [
"ArticleAuthor", "TextKategorie", "KategorieID",
"AusgabeID"
]
];

$dropTypoRules = [
"unset" => [
"TypoID"
]
];

$newsCategoryRules = [
"changeEnum" => [
"ClassName" => [
"NewsKategorie" => "NewsCategory"
]
]
];

$participiantRules = [
"changeColumn" => [
"Vorname" => "Firstname",
"Nachname" => "Surname",
"Antwort" => "Solution",
"Gewonnen" => "Winner"
],
"changeEnum" => [
"ClassName" => [
"TeilnehmerObject" => "Participiant"
]
],
"unset" => [
"Vorname", "Nachname", "Antwort", "Gewonnen"
]
];

$issueRules = [
"changeColumn" => [
"AusgabePDFID" => "PDFID"
],
"unset" => ["AusgabePDFID"]
];

$fileRules = [
"changeColumn" => [],
"changeEnum" => [
"ClassName" => [
"MediaImage" => "Image",
"CoverImage" => "Image"
]
],
"unset" => ["Sort", "SortOrder"]
];

$landingPageElementRules = [
"changeColumn" => [
"MetaDaten" => "MetaData",
"BildID" => "ImageID",
"ExternerLink" => "ExternalLink"
],
"unset" => ["MetaDaten", "BildID", "ExternerLink"]
];

$mediaObjectRules = [
"changeEnum" => [
"ClassName" => [
"MediaHolder" => "MediaObject"
]
]
];



echo "the test";

$res = LotteryPage::get()->where("Deadline < Now()");
Debug::show($res);

// $this->updateTable("Article", "Artikel", $articleRules, $ss_versions);
// $this->updateTable("SiteTree", "SiteTree", $sitetreeRules, $ss_versions);
// $this->updateTable("BlogEntry", "BlogEntry", $dropTypoRules, $ss_versions);
// $this->updateTable("BlogHolder", "BlogHolder", null, $ss_versions);
// $this->updateTable("BlogTree", "BlogTree", null, $ss_versions);
// $this->updateTable("NewsHolder", "NewsHolder", $dropTypoRules, $ss_versions);
// $this->updateTable("Issue", "Ausgabe", $issueRules, $ss_versions);
// $this->updateTable("NewsCategory", "NewsKategorie", $newsCategoryRules);
// $this->updateTable("Participiant", "TeilnehmerObject", $participiantRules);
// $this->updateTable("LotteryPage", "LotteryPage", $lotteryRules, $ss_versions);

// $this->updateTable("MediaObject", "MediaHolder", $mediaObjectRules);

// $this->updateTable("File", "File", $fileRules);

// $this->updateTable("LandingPage", "LandingPage", null, $ss_versions);
// $this->updateTable("LandingPageElement", "LandingPageElement", $landingPageElementRules);

// $this->updateTable("ErrorPage", "ErrorPage", null, $ss_versions);

$this->updateTable("PageCounter", "PageCounter");

// $this->updateLottery();

// $this->updateMediaObject();

// $this->updateSiteTree();
// $this->updateMembers();
return "\n\n==========================\n=-=-=-=-= DONE =-=-=-=-=-= \n";
}
}


Post Comment