setSourceDatabase ($source_db); } function run () { $db = new Database ($this->source_db); $db->connect (); Database::$instances ['ver3'] = $db; $this->transferSettings ($db->get ('settings')); $site = new IE_Entity_Task_Routes (); $site->setLive (true); $site->import (null); $this->transferMetaTags ($db->get ('metas')); $this->transferTextNames ($db->get ('text_blocks')); $this->transferGlobalTextContents ($db->get ('global_texts'), $db->getwhere ('text_blocks', 'global = 1')); $edited_categories = $db->getwhere ('categories'); $meta_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content')->from ('metas_pages')->join ('metas', 'metas.id', 'metas_pages.meta_id')->where ('catalog_type = "categories"')->get ()); $other_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content', 'title')->from ('texts')->join ('text_blocks', 'text_blocks.id', 'texts.text_block_id')->where ('catalog_type = "categories"')->get ()); $this->transferCategories ($edited_categories, $meta_texts, $other_texts); $edited_types = $db->getwhere ('types'); $meta_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content')->from ('metas_pages')->join ('metas', 'metas.id', 'metas_pages.meta_id')->where ('catalog_type = "types"')->get ()); $other_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content', 'title')->from ('texts')->join ('text_blocks', 'text_blocks.id', 'texts.text_block_id')->where ('catalog_type = "types"')->get ()); $this->transferTypes ($edited_types, $meta_texts, $other_texts); $this->transferFeaturedTypes ($db->getwhere ('types', 'featured > 0')); $this->transferPackages ($db->select ()->from ('packages')->where ("owner_alias = 1")->get ()); $meta_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content')->from ('metas_pages')->join ('metas', 'metas.id', 'metas_pages.meta_id')->where ('catalog_type = "user_pages"')->get ()); $other_texts = $this->convertMetaTextToArray ($db->select ('aliasid', 'name', 'content', 'title')->from ('texts')->join ('text_blocks', 'text_blocks.id', 'texts.text_block_id')->where ('catalog_type = "user_pages"')->get ()); $this->transferPages ($db->get ('user_pages'), $meta_texts, $other_texts); $setup = new Setup_Unattended (); $setup->updateTemplateCount (); } private function convertMetaTextToArray ($meta_texts) { $result = array(); foreach ($meta_texts as $meta_text) { if (! empty ($meta_text->content)) { $item = array ( 'name' => $meta_text->name, 'content' => $meta_text->content, ); if (isset ($meta_text->title)) { $item ['title'] = $meta_text->title; } $result [$meta_text->aliasid] [] = $item; } } return $result; } function __call ($name, $arguments) { if (preg_match ('/^transfer(.*)/', $name, $match)) { $classname = 'Migration34_Migrator_' . $match [1]; $reflection = new ReflectionClass ($classname); if ($arguments) { $migrator = $reflection->newInstanceArgs ($arguments); } else { $migrator = $reflection->newInstance (); } if ($migrator instanceof Loggable) { $migrator->logger ($this->logger ()); } $migrator->migrate (); return true; } $logger_function = array ('emerg', 'alert', 'crit', 'err', 'warn', 'notice', 'info', 'debug'); if (in_array ($name, $logger_function)) { $logger = $this->logger (); if (isset ($logger)) { return call_user_func_array (array ($logger, $name), $arguments); } } else { throw new Exception ("Invalid method `$name`."); } } public function checkPrerequisites () { $this->notice ('Checking prerequisites.'); $required_tables = array ('settings'); foreach ($required_tables as $required_table) { if (! $this->getSourceDatabase ()->table_exists ($required_table)) { throw new Migration34_Exception ("Table $required_table does not exist."); } } $settings = $this->getSourceDatabase ()->list_fields('settings'); if (isset ($settings ['id'] )) { if ('int' == $settings ['id'] ['type']) { return true; } } throw new Migration34_Exception ('Table settings has an unexpected structure.'); } function setSourceDatabase ($source_db) { $this->source_db = $source_db; } function getSourceDatabase () { return $this->source_db; } function logger (Zend_Log $logger = null) { if (isset ($logger)) { $this->logger = $logger; } else { if (isset ($this->logger)) { return $this->logger; } } } }