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 } } } } } }