Beispiel #1
0
 protected function execute($arguments = array(), $options = array())
 {
     // We need a proper environment. This also gives us superadmin privileges
     aTaskTools::signinAsTaskUser($this->createConfiguration($options['application'], $options['env']), $options['connection']);
     aTaskTools::setCliHost();
     // Get all of the current pages with their slots. For efficiency this normally does not return slots
     // that are not the current version
     if ($options['allversions']) {
         // All versions case is a simpler query since we want to look at every slot
         $slots = Doctrine::getTable('aSlot')->findAll();
         foreach ($slots as $slot) {
             $slot->refreshSlot();
         }
     } else {
         // All cultures
         $pages = aPageTable::queryWithSlots(false, 'all')->execute();
         foreach ($pages as $page) {
             foreach ($page->Areas as $area) {
                 foreach ($area->AreaVersions as $areaVersion) {
                     foreach ($areaVersion->AreaVersionSlots as $areaVersionSlot) {
                         $areaVersionSlot->Slot->refreshSlot();
                     }
                 }
             }
         }
     }
 }
Beispiel #2
0
 /**
  * DOCUMENT ME
  * @param mixed $args
  * @param mixed $options
  */
 protected function execute($args = array(), $options = array())
 {
     aTaskTools::signinAsTaskUser($this->configuration, $options['connection']);
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getDoctrineConnection();
     if (!$this->askConfirmation("Importing any content will erase any existing content, are you sure? [y/N]", 'QUESTION_LARGE', false)) {
         die("Import CANCELLED.  No changes made.\n");
     }
     if (is_null($options['file'])) {
         $rootDir = $this->configuration->getRootDir();
         $dataDir = $rootDir . '/data/a';
         $options['file'] = $dataDir . '/site.xml';
         $options['pages'] = $dataDir . '/pages';
         $options['images'] = $dataDir . '/images';
     }
     $importer = new aImporter($connection, array('xmlFile' => $options['file'], 'pagesDir' => $options['pages'], 'imagesDir' => $options['images']));
     $importer->import();
 }
Beispiel #3
0
 protected function execute($args = array(), $options = array())
 {
     aTaskTools::signinAsTaskUser($this->configuration, $options['connection']);
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getDoctrineConnection();
     if (is_null($options['posts']) && is_null($options['events'])) {
         die("You must specify at least one of the posts and events options with a path to the xml file.\n");
     }
     if (!$this->askConfirmation("Importing the same content twice will result in duplicate content, are you sure? [y/N]", 'QUESTION_LARGE', false)) {
         die("Import CANCELLED.  No changes made.\n");
     }
     $rootDir = $this->configuration->getRootDir();
     $importer = new aBlogImporter($connection, $options);
     if (!is_null($options['events'])) {
         $importer->import('events');
     }
     if (!is_null($options['posts'])) {
         $importer->import('posts');
     }
 }
 protected function execute($arguments = array(), $options = array())
 {
     // initialize the database connection
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
     // We need to use PDO here because Doctrine is more than a little confused when
     // we've renamed the codebase but not the tables
     echo "Renaming tables in database\n";
     $tables = array('pk_context_cms_slot' => 'a_slot', 'pk_context_cms_area_version_slot' => 'a_area_version_slot', 'pk_context_cms_area_version' => 'a_area_version', 'pk_context_cms_area' => 'a_area', 'pk_context_cms_page' => 'a_page', 'pk_blog_category' => 'a_blog_category', 'pk_blog_event_version' => 'a_blog_event_version', 'pk_blog_item' => 'a_blog_item', 'pk_blog_item_version' => 'a_blog_item_version', 'pk_blog_post_version' => 'a_blog_post_version', 'pk_context_cms_access' => 'a_access', 'pk_context_cms_lucene_update' => 'a_lucene_update', 'pk_media_item' => 'a_media_item');
     $conn = Doctrine_Manager::connection()->getDbh();
     foreach ($tables as $old => $new) {
         try {
             echo "before\n";
             $conn->query("RENAME TABLE {$old} TO {$new}");
             echo "after\n";
         } catch (Exception $e) {
             echo "Rename of {$old} failed, that's normal if you don't use that table's plugin or you have run this script before.\n";
         }
     }
     echo "Renaming slots and engines in database\n";
     try {
         $conn->query('UPDATE a_slot SET type = REPLACE(type, "pkContextCMS", "a")');
     } catch (Exception $e) {
         echo "Warning: unable to reset slot types in a_slot table\n";
     }
     try {
         $conn->query('UPDATE a_page SET engine = REPLACE(engine, "pk", "a")');
     } catch (Exception $e) {
         echo "Warning: unable to rename engines in a_page table\n";
     }
     try {
         $conn->query('ALTER TABLE a_page ADD admin tinyint(1)');
     } catch (Exception $e) {
         echo "Warning: unable to add admin column to a_page table\n";
     }
     try {
         $conn->query('ALTER TABLE a_slot ADD variant varchar(100)');
     } catch (Exception $e) {
         echo "Warning: unable to add variant column to a_slot table\n";
     }
     try {
         $conn->query("CREATE TABLE `a_slot_media_item` (\n        `media_item_id` int(11) NOT NULL DEFAULT '0',\n        `slot_id` int(11) NOT NULL DEFAULT '0',\n        PRIMARY KEY (`media_item_id`,`slot_id`),\n        KEY `a_slot_media_item_slot_id_a_slot_id` (`slot_id`),\n        CONSTRAINT `a_slot_media_item_media_item_id_a_media_item_id` FOREIGN KEY (`media_item_id`) REFERENCES `a_media_item` (`id`) ON DELETE CASCADE,\n        CONSTRAINT `a_slot_media_item_slot_id_a_slot_id` FOREIGN KEY (`slot_id`) REFERENCES `a_slot` (`id`) ON DELETE CASCADE\n      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
     } catch (Exception $e) {
         echo "Warning: couldn't create a_slot_media_item table\n";
     }
     echo "Migrating media slots\n";
     $count = 0;
     $mediaSlots = Doctrine::getTable('aSlot')->createQuery('s')->whereIn('s.type', array('aImage', 'aPDF', 'aButton', 'aSlideshow', 'aVideo'))->execute();
     $total = count($mediaSlots);
     foreach ($mediaSlots as $mediaSlot) {
         $count++;
         echo "Migrating slot {$count} of {$total}\n";
         if ($mediaSlot->type === 'aSlideshow') {
             $items = $mediaSlot->getArrayValue();
             if (isset($items[0]) && isset($items[0]->id)) {
                 $order = array();
                 foreach ($items as $item) {
                     // aArray::getids has trouble with StdClass objects for some reason
                     $order[] = $item->id;
                 }
                 $mediaSlot->unlink('MediaItems');
                 $mediaSlot->link('MediaItems', $order);
                 $mediaSlot->setArrayValue(array('order' => $order));
                 $mediaSlot->save();
             }
         } else {
             if (strlen($mediaSlot->value)) {
                 $item = unserialize($mediaSlot->value);
                 if (isset($item->id)) {
                     $mediaSlot->unlink('MediaItems');
                     $mediaSlot->link('MediaItems', array($item->id));
                     $mediaSlot->setValue(null);
                     $mediaSlot->save();
                 }
             }
         }
     }
     try {
         $conn->query("CREATE TABLE `a_media_category` (\n        `id` int(11) NOT NULL AUTO_INCREMENT,\n        `name` varchar(255) DEFAULT NULL,\n        `description` text,\n        `created_at` datetime NOT NULL,\n        `updated_at` datetime NOT NULL,\n        `slug` varchar(255) DEFAULT NULL,\n        PRIMARY KEY (`id`),\n        UNIQUE KEY `name` (`name`)\n      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1");
     } catch (Exception $e) {
         echo "Warning: couldn't create a_media_category table\n";
     }
     try {
         $conn->query("CREATE TABLE `a_media_item_category` (\n        `media_item_id` int(11) NOT NULL DEFAULT '0',\n        `media_category_id` int(11) NOT NULL DEFAULT '0',\n        PRIMARY KEY (`media_item_id`,`media_category_id`),\n        KEY `a_media_item_category_media_category_id_a_media_category_id` (`media_category_id`),\n        CONSTRAINT `a_media_item_category_media_category_id_a_media_category_id` FOREIGN KEY (`media_category_id`) REFERENCES `a_media_category` (`id`) ON DELETE CASCADE,\n        CONSTRAINT `a_media_item_category_media_item_id_a_media_item_id` FOREIGN KEY (`media_item_id`) REFERENCES `a_media_item` (`id`) ON DELETE CASCADE\n      ) ENGINE=InnoDB DEFAULT CHARSET=latin1");
     } catch (Exception $e) {
         echo "Warning: couldn't create a_media_item_category table\n";
     }
     try {
         $conn->query("CREATE TABLE `a_media_page_category` (\n        `page_id` int(11) NOT NULL DEFAULT '0',\n        `media_category_id` int(11) NOT NULL DEFAULT '0',\n        PRIMARY KEY (`page_id`,`media_category_id`),\n        KEY `a_media_page_category_media_category_id_a_media_category_id` (`media_category_id`),\n        CONSTRAINT `a_media_page_category_media_category_id_a_media_category_id` FOREIGN KEY (`media_category_id`) REFERENCES `a_media_category` (`id`) ON DELETE CASCADE,\n        CONSTRAINT `a_media_page_category_page_id_a_page_id` FOREIGN KEY (`page_id`) REFERENCES `a_page` (`id`) ON DELETE CASCADE\n      ) ENGINE=InnoDB DEFAULT CHARSET=latin1");
     } catch (Exception $e) {
         echo "Warning: couldn't create a_media_page_category table\n";
     }
     echo "Rebuilding search index\n";
     $cmd = "./symfony apostrophe:rebuild-search-index --env=" . $options['env'];
     system($cmd, $result);
     if ($result != 0) {
         die("Unable to rebuild search indexes\n");
     }
     echo "If you have folders in data/pk_writable other than tmp and the zend search indexes \nyou may want to move them to data/a_writable. Due to interactions with svn this is not\nautomatic. In our projects we use svn ignore rules to protect the contents of the\ndata/*_writable folder. This is primarily an issue on servers other than your\ndevelopment machine, where you run this task separately. On your development\nmachine pk_writable is renamed to a_writable automatically.\n";
     // We need to be an admin user so the model layer sees the current user has
     // permissions to do what follows. We can't do this any earlier because
     // the routing table fires up and routes the home page which requires looking
     // at some engine routes, so the a_page table has to be ready
     aTaskTools::signinAsTaskUser($this->createConfiguration($options['application'], $options['env']));
     // Create the admin pages
     $home = aPageTable::retrieveBySlug('/');
     $admin = aPageTable::retrieveBySlug('/admin');
     if (!$admin) {
         $admin = new aPage();
         $admin->setSlug('/admin');
         $admin->setAdmin(true);
         $admin->getNode()->insertAsFirstChildOf($home);
         $admin->setEngine('aAdmin');
         $admin->save();
         // Must save the page BEFORE we call setTitle, which has the side effect of
         // refreshing the page object
         $admin->setTitle('Admin');
     }
     $page = aPageTable::retrieveBySlug('/admin/media');
     if (!$page) {
         $page = new aPage();
         $page->setSlug('/admin/media');
         $page->setAdmin(true);
         $page->getNode()->insertAsLastChildOf($admin);
         $page->setEngine('aMedia');
         $page->save();
         // Must save the page BEFORE we call setTitle, which has the side effect of
         // refreshing the page object
         $page->setTitle('Media');
     }
 }