Esempio n. 1
0
 public function update($previousVersion)
 {
     if (version_compare($previousVersion, '1.0 Beta 3', '<')) {
         $activation_table = Symphony::Database()->fetchRow(0, "SHOW TABLES LIKE 'tbl_fields_memberactivation';");
         if (!empty($activation_table)) {
             Symphony::Database()->import("\n\t\t\t\t\t\tALTER TABLE `tbl_fields_memberactivation` ADD `auto_login` ENUM('yes','no') NULL DEFAULT 'yes';\n\t\t\t\t\t\tALTER TABLE `tbl_fields_memberactivation` ADD `deny_login` ENUM('yes','no') NULL DEFAULT 'yes';\n\t\t\t\t\t");
         }
         $password_table = Symphony::Database()->fetchRow(0, "SHOW TABLES LIKE 'tbl_fields_memberpassword';");
         if (!empty($password_table)) {
             Symphony::Database()->query("\n\t\t\t\t\t\tALTER TABLE `tbl_fields_memberpassword` ADD `code_expiry` VARCHAR(50) NOT NULL;\n\t\t\t\t\t");
         }
     }
     if (version_compare($previousVersion, '1.0RC1', '<')) {
         // Move the auto_login setting from the Activation Field to the config
         $field = extension_Members::getField('activation');
         if ($field instanceof Field) {
             Symphony::Configuration()->set('activate-account-auto-login', $field->get('auto_login'));
             $activation_table = Symphony::Database()->fetchRow(0, "SHOW TABLES LIKE 'tbl_fields_memberactivation';");
             if (!empty($activation_table)) {
                 Symphony::Database()->query("\n\t\t\t\t\t\t\tALTER TABLE `tbl_fields_memberpassword` DROP `auto_login`;\n\t\t\t\t\t\t");
             }
         }
         // These are now loaded dynamically
         Symphony::Configuration()->remove('timezone', 'members');
         Symphony::Configuration()->remove('role', 'members');
         Symphony::Configuration()->remove('activation', 'members');
         Symphony::Configuration()->remove('identity', 'members');
         Symphony::Configuration()->remove('email', 'members');
         Symphony::Configuration()->remove('authentication', 'members');
         Administration::instance()->saveConfig();
     }
     if (version_compare($previousVersion, '1.1 Beta 1', '<') || version_compare($previousVersion, '1.1.1RC1', '<')) {
         $tables = array();
         // For any Member: Username or Member: Email fields, add a handle column
         // and adjust the indexes to reflect that. Uniqueness is on the handle,
         // not the value.
         $field = extension_Members::getField('identity');
         if ($field instanceof fieldMemberUsername) {
             $identity_tables = Symphony::Database()->fetchCol("field_id", "SELECT `field_id` FROM `tbl_fields_memberusername`");
             if (is_array($identity_tables) && !empty($identity_tables)) {
                 $tables = array_merge($tables, $identity_tables);
             }
         }
         if (is_array($tables) && !empty($tables)) {
             foreach ($tables as $field) {
                 if (!extension_Members::tableContainsField('tbl_entries_data_' . $field, 'handle')) {
                     // Add handle field
                     Symphony::Database()->query(sprintf("ALTER TABLE `tbl_entries_data_%d` ADD `handle` VARCHAR(255) DEFAULT NULL", $field));
                     // Populate handle field
                     $rows = Symphony::Database()->fetch(sprintf("SELECT `id`, `value` FROM `tbl_entries_data_%d`", $field));
                     foreach ($rows as $row) {
                         Symphony::Database()->query(sprintf("\n\t\t\t\t\t\t\t\t\tUPDATE `tbl_entries_data_%d`\n\t\t\t\t\t\t\t\t\tSET handle = '%s'\n\t\t\t\t\t\t\t\t\tWHERE id = %d\n\t\t\t\t\t\t\t\t", $field, Lang::createHandle($row['value']), $row['id']));
                     }
                 }
                 // Try to drop the old `username` INDEX
                 try {
                     Symphony::Database()->query(sprintf('ALTER TABLE `tbl_entries_data_%d` DROP INDEX `username`, DROP INDEX `value`', $field));
                 } catch (Exception $ex) {
                 }
                 // Create the new UNIQUE INDEX `username` on `handle`
                 try {
                     Symphony::Database()->query(sprintf('CREATE UNIQUE INDEX `username` ON `tbl_entries_data_%d` (`handle`)', $field));
                 } catch (Exception $ex) {
                 }
                 // Create an index on the `value` column
                 try {
                     Symphony::Database()->query(sprintf('CREATE INDEX `value` ON `tbl_entries_data_%d` (`value`)', $field));
                 } catch (Exception $ex) {
                 }
             }
         }
     }
     // So `handle` for Email fields is useless as me@example.com will become
     // the same as meex@ample.com. Reverting previous change by dropping
     // `handle` column from Member: Email tables and restoring the UNIQUE KEY
     // index to the `value` column.
     if (version_compare($previousVersion, '1.1 Beta 2', '<')) {
         $tables = array();
         $field = extension_Members::getField('email');
         if ($field instanceof fieldMemberEmail) {
             $email_tables = Symphony::Database()->fetchCol("field_id", "SELECT `field_id` FROM `tbl_fields_memberemail`");
             if (is_array($email_tables) && !empty($email_tables)) {
                 $tables = array_merge($tables, $email_tables);
             }
         }
         if (is_array($tables) && !empty($tables)) {
             foreach ($tables as $field) {
                 if (extension_Members::tableContainsField('tbl_entries_data_' . $field, 'handle')) {
                     try {
                         // Drop handle field
                         Symphony::Database()->query(sprintf("ALTER TABLE `tbl_entries_data_%d` DROP `handle`", $field));
                         // Drop `value` index
                         Symphony::Database()->query(sprintf('ALTER TABLE `tbl_entries_data_%d` DROP INDEX `value`', $field));
                         // Readd UNIQUE `value` index
                         Symphony::Database()->query(sprintf('CREATE UNIQUE INDEX `value` ON `tbl_entries_data_%d` (`value`)', $field));
                     } catch (Exception $ex) {
                         // Ignore, this may be because a user is updating directly from 1.0 and
                         // never had the INDEX's created during the 1.1* betas
                     }
                 }
             }
         }
     }
 }