table: %name% with %cols% columns';
$tablex = '
table: %name% with %cols% columns WARNING: exists!';
$view = 'view: %name% with %cols% columns';
$viewx = 'view: %name% with %cols% columns WARNING: exists!';
foreach($tableXML as $tabledef) {
if($tabledef->getName() == 'table') {
$tableInfo = TableInfo::fromXML($tabledef);
$tableInfo->setName(DBHelper::buildModTableName($mod, $tableInfo));
$st = $db->tableExists($tableInfo->getName()) ? $tablex : $table;
$st = str_replace(array('%name%','%cols%'), array(
$tableInfo->getName(),$tableInfo->getColumnCount()), $st);
$result .= $st;
}
elseif($tabledef->getName() == 'view') {
$viewInfo = ViewInfo::fromXML($tabledef);
$viewInfo->setName(DBHelper::buildModTableName($mod, $viewInfo));
$st = $db->tableExists($viewInfo->getName()) ? $viewx : $view;
$st = str_replace(array('%name%','%cols%'), array(
$viewInfo->getName(),$viewInfo->getColumnCount()), $st);
$result .= $st;
}
}
return $result;
}
public static function createModDBObjects(DB $db, $mod, $tableXML, array $templates = array()) {
$result = '';
$table = 'creating table: %name% with %cols% columns';
$view = 'creating view: %name% with %cols% columns';
foreach($tableXML as $tabledef) {
if($tabledef->getName() == 'table') {
$tableInfo = TableInfo::fromXML($tabledef);
$tableInfo->setName(DBHelper::buildModTableName($mod, $tableInfo));
if($db->tableExists($tableInfo->getName()))
$db->dropTable($tableInfo->getName());
$refs = $tableInfo->getRefs();
foreach($refs as $name=>$ref)
$tableInfo->setRef($name, 'm_' . str_replace('.', '#', $mod) . '_' . $ref['object'], $ref['column']);
$st = str_replace(array('%name%','%cols%'), array(
$tableInfo->getName(),$tableInfo->getColumnCount()), $table);
$db->createTable($tableInfo);
$result .= $st;
}
elseif($tabledef->getName() == 'view') {
$viewInfo = ViewInfo::fromXML($tabledef);
$viewInfo->setName(DBHelper::buildModTableName($mod, $viewInfo));
$st = str_replace(array('%name%','%cols%'), array(
$viewInfo->getName(),$viewInfo->getColumnCount()), $view);
$db->createView($viewInfo);
$result .= $st;
}
}
return $result;
}
public static function listRemoveActions(DB $db, $mod, $tableXML, array $templates = array()) {
$result = '';
$table = 'table %name% will be removed';
$view = 'view %name% will be removed';
$defs = array();
foreach($tableXML as $tabledef)
$defs[] = $tabledef;
$defs = array_reverse($defs);
foreach($defs as $tabledef) {
if($tabledef->getName() == 'table') {
$tableInfo = TableInfo::fromXML($tabledef);
$tableInfo->setName(DBHelper::buildModTableName($mod, $tableInfo));
$st = $table;
$st = str_replace(array('%name%','%cols%'), array(
$tableInfo->getName(),$tableInfo->getColumnCount()), $st);
$result .= $st;
}
elseif($tabledef->getName() == 'view') {
$viewInfo = ViewInfo::fromXML($tabledef);
$viewInfo->setName(DBHelper::buildModTableName($mod, $viewInfo));
$st = $view;
$st = str_replace(array('%name%','%cols%'), array(
$viewInfo->getName(),$viewInfo->getColumnCount()), $st);
$result .= $st;
}
}
return $result;
}
public static function removeModDBObjects(DB $db, $mod, $tableXML, array $templates = array()) {
$result = '';
$table = 'removing table %name%';
$view = 'removing view %name%';
$defs = array();
foreach($tableXML as $tabledef)
$defs[] = $tabledef;
$defs = array_reverse($defs); // reverse order to prevent foreign key errors
foreach($defs as $tabledef) {
if($tabledef->getName() == 'table') {
$tableInfo = TableInfo::fromXML($tabledef);
$tableInfo->setName(DBHelper::buildModTableName($mod, $tableInfo));
$st = str_replace(array('%name%','%cols%'), array(
$tableInfo->getName(),$tableInfo->getColumnCount()), $table);
$db->dropTable($tableInfo->getName());
$result .= $st;
}
elseif($tabledef->getName() == 'view') {
$viewInfo = ViewInfo::fromXML($tabledef);
$viewInfo->setName(DBHelper::buildModTableName($mod, $viewInfo));
$st = str_replace(array('%name%','%cols%'), array(
$viewInfo->getName(),$viewInfo->getColumnCount()), $view);
$db->dropView($viewInfo->getName());
$result .= $st;
}
}
return $result;
}
}