From: Michael J. Rubinsky Date: Wed, 6 Oct 2010 14:46:05 +0000 (-0400) Subject: Roll the conversion script for new style structure into the migration script. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=a240375b772411798e25d05af586baf439997dfd;p=horde.git Roll the conversion script for new style structure into the migration script. --- diff --git a/ansel/migration/3_ansel_upgrade_style.php b/ansel/migration/3_ansel_upgrade_style.php index 86d75bcf0..e72fc5ad1 100644 --- a/ansel/migration/3_ansel_upgrade_style.php +++ b/ansel/migration/3_ansel_upgrade_style.php @@ -16,12 +16,60 @@ class AnselUpgradeStyle extends Horde_Db_Migration_Base { public function up() { + $GLOBALS['registry']->pushApp('ansel'); $this->changeColumn('ansel_shares', 'attribute_style', 'text'); // Create: ansel_hashes - $t = $this->createTable('ansel_hashes', array('primaryKey' => 'style_hash')); - $t->column('style_hash', 'string', array('limit' => 255)); - $t->end(); + $tableList = $this->tables(); + if (!in_array('ansel_hashes', $tableList)) { + $t = $this->createTable('ansel_hashes', array('primaryKey' => 'style_hash')); + $t->column('style_hash', 'string', array('limit' => 255)); + $t->end(); + } + + // Make sure we have the full styles array. + require ANSEL_BASE . '/config/styles.php'; + + // Migrate existing data + $sql = 'SELECT share_id, attribute_style FROM ansel_shares'; + $this->announce('Migrating gallery styles.', 'cli.message'); + $defaults = array( + 'thumbstyle' => 'Thumb', + 'background' => 'none', + 'gallery_view' => 'Gallery', + 'widgets' => array( + 'Tags' => array('view' => 'gallery'), + 'OtherGalleries' => array(), + 'Geotag' => array(), + 'Links' => array(), + 'GalleryFaces' => array(), + 'OwnerFaces' => array())); + + $rows = $this->_connection->selectAll($sql); + $update = 'UPDATE ansel_shares SET attribute_style=? WHERE share_id=?;'; + foreach ($rows as $row) { + // Make sure we haven't already migrated + if (@unserialize($row['attribute_style']) instanceof Ansel_Style) { + $this->announce('Skipping share ' . $row[0] . ', already migrated.', 'cli.message'); + continue; + } + if (empty($styles[$row['attribute_style']])) { + $newStyle = ''; + } else { + $properties = array_merge($defaults, $styles[$row['attribute_style']]); + + // Translate previous generator names: + $properties = $this->_translate_generators($properties); + $newStyle = serialize(new Ansel_Style($properties)); + } + $this->announce('Migrating share id: ' . $row['share_id'] . ' from: ' . $row['attribute_style'] . ' to: ' . $newStyle, 'cli.message'); + + try { + $this->_connection->execute($update, array($newStyle, $row['attribute_style'])); + } catch (Horde_Db_Exception $e) { + $this->announce('ERROR: ' . $e->getMessage()); + } + } } public function down() @@ -30,4 +78,29 @@ class AnselUpgradeStyle extends Horde_Db_Migration_Base $this->dropTable('ansel_hashes'); } + /** + * Translates old style array from Ansel 1.x to Ansel 2.x. + * + * @param array $properties + */ + private function _translate_generators($properties) + { + $thumb_map = array( + 'thumb' => 'Thumb', + 'prettythumb' => 'RoundedThumb', + 'shadowsharpthumb' => 'ShadowThumb', + 'polaroidthumb' => 'PolaroidThumb'); + + // Make sure we didn't already translate + if (!empty($thumb_map[$properties['thumbstyle']])) { + $properties['thumbstyle'] = $thumb_map[$properties['thumbstyle']]; + unset($properties['requires_png']); + unset($properties['name']); + unset($properties['title']); + unset($properties['hide']); + unset($properties['default_galleryimage_type']); + } + return $properties; + } + } \ No newline at end of file diff --git a/ansel/scripts/upgrades/2010-09-16_migrate_styles.php b/ansel/scripts/upgrades/2010-09-16_migrate_styles.php deleted file mode 100644 index 55c950a37..000000000 --- a/ansel/scripts/upgrades/2010-09-16_migrate_styles.php +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env php - - */ - -/** - * Translates old style array from Ansel 1.x to Ansel 2.x. - * - * @param array $properties - */ -function translate_generators($properties) -{ - $thumb_map = array( - 'thumb' => 'Thumb', - 'prettythumb' => 'RoundedThumb', - 'shadowsharpthumb' => 'ShadowThumb', - 'polaroidthumb' => 'PolaroidThumb'); - - $properties['thumbstyle'] = $thumb_map[$properties['thumbstyle']]; - unset($properties['requires_png']); - unset($properties['name']); - unset($properties['title']); - unset($properties['hide']); - unset($properties['default_galleryimage_type']); - - return $properties; -} - -$debug = false; -require_once dirname(__FILE__) . '/../../lib/Application.php'; -Horde_Registry::appInit('ansel', array('authentication' => 'none', 'cli' => true)); - -// Make sure we have the full styles array. -require ANSEL_BASE . '/config/styles.php'; - -$sql = 'SELECT share_id, attribute_style FROM ansel_shares'; -$cli->message('Migrating gallery styles.', 'cli.message'); -$defaults = array( - 'thumbstyle' => 'Thumb', - 'background' => 'none', - 'gallery_view' => 'Gallery', - 'widgets' => array( - 'Tags' => array('view' => 'gallery'), - 'OtherGalleries' => array(), - 'Geotag' => array(), - 'Links' => array(), - 'GalleryFaces' => array(), - 'OwnerFaces' => array())); - -$rows = $ansel_db->queryAll($sql); -$update = $ansel_db->prepare('UPDATE ansel_shares SET attribute_style=? WHERE share_id=?;'); -foreach ($rows as $row) { - // Make sure we haven't already migrated - if (@unserialize($row[1]) instanceof Ansel_Style) { - $cli->message('Skipping share ' . $row[0] . ', already migrated.', 'cli.message'); - continue; - } - if (empty($styles[$row[1]])) { - $newStyle = ''; - } else { - $properties = array_merge($defaults, $styles[$row[1]]); - - // Translate previous generator names: - $properties = translate_generators($properties); - - $newStyle = serialize(new Ansel_Style($properties)); - } - if ($debug) { - $cli->message('Migrating share id: ' . $row[0] . ' from: ' . $row[1] . ' to: ' . $newStyle, 'cli.message'); - } - $results = $update->execute(array($newStyle, $row[0])); - if ($results instanceof PEAR_Error) { - $cli->message($results->getMessage(), 'cli.error'); - } -} -$cli->message('Gallery styles successfully migrated.', 'cli.success');