PATH:
home
/
letacommog
/
letaweb
/
protected
/
components
<?php class DbMigration { public static function replacePrefix($oldString, $oldPrefix, $newPrefix) { if (strlen($oldPrefix) == 0) { return $newPrefix.$oldString; } $str = $oldString; if (substr($oldString, 0, strlen($oldPrefix)) == $oldPrefix) { $str = substr($oldString, strlen($oldPrefix)); } return $newPrefix.$str; } public static function removeData($source) { $oldTimestamt = microtime(); $souce_db = Yii::app()->dba; Yii::app()->dba->setActive(true); $table_prefix = trim($souce_db->tablePrefix); //get source tables $query = 'SHOW TABLES '.(strlen($table_prefix) ? (" LIKE '".$table_prefix."%'") : ''); $query_tables = $souce_db->createCommand()->setText($query)->queryAll(); $tables = array(); foreach ($query_tables as $key => $value) { foreach ($value as $k => $v) { if (self::startsWith($k, 'Tables_in')) { $tables[] = $v; } } } foreach ($tables as $table) { $transaction = $souce_db->beginTransaction(); try { $rows = $souce_db->createCommand()->delete($table, 'site_id=:site_id', array(':site_id' => $source->id)); $transaction->commit(); } catch (Exception $e) { $transaction->rollback(); } } } public static function exportModuleData($source) { $oldTimestamt = microtime(); $souce_db = Yii::app()->db; Yii::app()->dba->setActive(true); //$pdo = $souce_db->pdoInstance; $table_prefix = trim($souce_db->tablePrefix); //get source tables $tables = array( 'skinpreset'=>'type' ); $mysql = ""; foreach ($tables as $key=>$value) { $table = $table_prefix.$key; $rows = $souce_db->createCommand()->select('*')->from($table)->where($value.'=:id', array(':id' => $source->id))->queryAll(); $values = ''; $items = ''; $i = 1; foreach ($rows as $row) { if (isset($row[$value])) { $row[$value] = "{{{%module_id%}}}"; } if (isset($row['id'])) { unset($row['id']); } if (isset($row['unique_name'])) { //$row['unique_name'] = $row['unique_name']."-".$i; } $i++; $itemNames = array_keys($row); $itemNames = array_map('addslashes', $itemNames); $items = implode('`,`', $itemNames); $itemValues = array_values($row); $itemValues = array_map('addslashes', $itemValues); $valueString = implode("','", $itemValues); $valueString = "('".$valueString."'),"; $values .= "\n".$valueString; } if ($values != '') { $values = str_replace(array("\r", "\n"), '', $values); $insertSql = "INSERT INTO `$table` (`$items`) VALUES".rtrim($values, ',').";\n\r"; $mysql .= $insertSql; } } return $mysql; } public static function exportData($source) { $oldTimestamt = microtime(); $souce_db = Yii::app()->dba; Yii::app()->dba->setActive(true); //$pdo = $souce_db->pdoInstance; $table_prefix = trim($souce_db->tablePrefix); //get source tables $query = 'SHOW TABLES '.(strlen($table_prefix) ? (" LIKE '".$table_prefix."%'") : ''); $query_tables = $souce_db->createCommand()->setText($query)->queryAll(); $tables = array(); foreach ($query_tables as $key => $value) { foreach ($value as $k => $v) { if (self::startsWith($k, 'Tables_in')) { $tables[] = $v; } } } $mysql = ""; foreach ($tables as $table) { //$mysql .= "DELETE FROM `$table` WHERE `site_id` =".$source->id.";\n\r"; $rows = $souce_db->createCommand()->select('*')->from($table)->where('site_id=:site_id', array(':site_id' => $source->id))->queryAll(); $values = ''; $items = ''; $i = 1; foreach ($rows as $row) { if (isset($row['site_id'])) { $row['site_id'] = "{{{%site_id%}}}"; } if (isset($row['id'])) { unset($row['id']); } if (isset($row['unique_name'])) { //$row['unique_name'] = $row['unique_name']."-".$i; } $i++; if (isset($row['parent_id'])) { $row['parent_id'] = 0; } $itemNames = array_keys($row); $itemNames = array_map('addslashes', $itemNames); $items = implode('`,`', $itemNames); $itemValues = array_values($row); $itemValues = array_map('addslashes', $itemValues); $valueString = implode("','", $itemValues); $valueString = "('".$valueString."'),"; $values .= "\n".$valueString; } if ($values != '') { $values = str_replace(array("\r", "\n"), '', $values); $insertSql = "INSERT INTO `$table` (`$items`) VALUES".rtrim($values, ',').";\n\r"; $mysql .= $insertSql; } } return $mysql; } public static function copyData($source, $des) { $oldTimestamt = microtime(); $souce_db = Yii::app()->dba; $dest_db = Yii::app()->dba; Yii::app()->dba->setActive(true); $table_prefix = trim($souce_db->tablePrefix); $dest_table_prefix = trim($dest_db->tablePrefix); //get source tables $query = 'SHOW TABLES '.(strlen($table_prefix) ? (" LIKE '".$table_prefix."%'") : ''); $query_tables = $souce_db->createCommand()->setText($query)->queryAll(); $tables = array(); foreach ($query_tables as $key => $value) { foreach ($value as $k => $v) { if (self::startsWith($k, 'Tables_in')) { $tables[] = $v; } } } foreach ($tables as $table) { $newTableName = self::replacePrefix($table, $table_prefix, $dest_table_prefix); $min_dest_id = 0; $min_source_id = 0; $transaction = $dest_db->beginTransaction(); try { $rows = $souce_db->createCommand()->select('*')->from($table)->where('site_id=:site_id', array(':site_id' => $source->id))->queryAll(); $hasParent = 0; foreach ($rows as $row) { if (!isset($row['inline_id'])) { continue; } if (isset($row['site_id'])) { $row['site_id'] = $des->id; } if (isset($row['id'])) { unset($row['id']); } if (isset($row['parent_id'])) { if ($min_dest_id == 0) { $min_source_id = $souce_db->createCommand()->select('min(id)')->from($table)->where('site_id=:site_id', array(':site_id' => $source->id))->queryScalar(); } $id = $souce_db->createCommand()->select('max(id)')->from($table)->queryScalar(); $id++; if ($min_dest_id == 0) { $min_dest_id = $id; } $row['id'] = $id; if ($row['parent_id'] != 0) { $row['parent_id'] = $row['parent_id'] + $min_dest_id - $min_source_id; } } $dest_db->createCommand()->insert($newTableName, $row); } $transaction->commit(); } catch (Exception $e) { $transaction->rollback(); } } } public static function startsWith($haystack, $needle) { $length = strlen($needle); return (substr($haystack, 0, $length) === $needle); } }
[+]
..
[-] DbMigration.php
[edit]
[-] PController.php
[edit]