function cnRunDBUpgrade() { global $wpdb, $connections; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; require_once CN_PATH . 'includes/class.schema.php'; $urlPath = admin_url() . 'admin.php?page=' . $_GET['page']; if (!empty($wpdb->charset)) { $charsetCollate = "DEFAULT CHARACTER SET {$wpdb->charset}"; } if (!empty($wpdb->collate)) { $charsetCollate .= " COLLATE {$wpdb->collate}"; } // Check to ensure that the table exists if ($wpdb->get_var("SHOW TABLES LIKE 'CN_ENTRY_TABLE'") != CN_ENTRY_TABLE) { echo '<h3>', __('Upgrade the database structure...', 'connections'), '</h3>' . "\n"; $wpdb->show_errors(); $dbVersion = $connections->options->getDBVersion(); if (version_compare($dbVersion, '0.1.0', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.0.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; echo '<li>', __('Changing "id" type-length/values to BIGINT(20)', 'connections'), "</li>\n"; if (!$wpdb->query("ALTER TABLE " . CN_ENTRY_TABLE . " CHANGE id id BIGINT(20) NOT NULL AUTO_INCREMENT")) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "date_added"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'date_added', 'tinytext NOT NULL AFTER ts')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "entry_type"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'entry_type', 'tinytext NOT NULL AFTER date_added')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "honorable_prefix"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'honorable_prefix', 'tinytext NOT NULL AFTER entry_type')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "middle_name"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'middle_name', 'tinytext NOT NULL AFTER first_name')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "honorable_suffix"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'honorable_suffix', 'tinytext NOT NULL AFTER last_name')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "social"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'social', 'longtext NOT NULL AFTER im')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "added_by"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'added_by', 'bigint(20) NOT NULL AFTER options')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "edited_by"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'edited_by', 'bigint(20) NOT NULL AFTER added_by')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "owner"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'owner', 'bigint(20) NOT NULL AFTER edited_by')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "status"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'status', 'varchar(20) NOT NULL AFTER owner')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "contact_first_name"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'contact_first_name', 'tinytext NOT NULL AFTER department')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding Column... "contact_last_name"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'contact_last_name', 'tinytext NOT NULL AFTER contact_first_name')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; echo '<h4>', __('Adding default term relationship.', 'connections'), '</h4>'; // Add the Uncategorized category to all previous entries. $term = $connections->term->getTermBy('slug', 'uncategorized', 'category'); $entryIDs = $wpdb->get_col("SELECT id FROM " . CN_ENTRY_TABLE); $termID[] = $term->term_taxonomy_id; foreach ($entryIDs as $entryID) { $connections->term->setTermRelationships($entryID, $termID, 'category'); } $connections->options->setDBVersion('0.1.0'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.1', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.1.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<h4>', __('Setting all current entries to the "approved" status.', 'connections'), "</h4>\n"; $wpdb->query('UPDATE ' . CN_ENTRY_TABLE . ' SET status = \'approved\''); $connections->options->setDBVersion('0.1.1'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.2', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.2.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<h4>', __('Setting all current entries `entry_type` column.', 'connections'), "</h4>\n"; $sql = 'SELECT DISTINCT `id`, `options` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { $options = array(); $options = unserialize($result->options); if (isset($options['entry']['type'])) { $entryType = $options['entry']['type']; } else { $entryType = 'individual'; } $wpdb->query('UPDATE ' . CN_ENTRY_TABLE . ' SET entry_type = \'' . $entryType . '\' WHERE id = ' . $result->id); } $connections->options->setDBVersion('0.1.2'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.3', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.3.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; echo '<li>', __('Changing column name from group_name to family_name...', 'connections'), "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'family_name', 'CHANGE COLUMN group_name family_name tinytext NOT NULL')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; $connections->options->setDBVersion('0.1.3'); } if (version_compare($dbVersion, '0.1.4', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.4.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; echo '<li>', __('Changing column name from honorable_prefix to honorific_prefix...', 'connections'), "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'honorific_prefix', 'CHANGE COLUMN honorable_prefix honorific_prefix tinytext NOT NULL')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Changing column name from honorable_suffix to honorific_suffix...', 'connections'), "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'honorific_suffix', 'CHANGE COLUMN honorable_suffix honorific_suffix tinytext NOT NULL')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; $connections->options->setDBVersion('0.1.4'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.5', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.5.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_TABLE_META . "'") != CN_ENTRY_TABLE_META) { echo '<li>', __('Add the entry meta table.', 'connections'), "</li>\n"; $entryTableMeta = "CREATE TABLE " . CN_ENTRY_TABLE_META . " (\n\t\t\t meta_id bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\tentry_id bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\tmeta_key varchar(255) default NULL,\n\t\t\t\t\tmeta_value longtext,\n\t\t\t\t\tPRIMARY KEY (meta_id),\n\t\t\t\t\tKEY entry_id (entry_id),\n\t\t\t\t\tKEY meta_key (meta_key)\n\t\t\t ) {$charsetCollate};"; dbDelta($entryTableMeta); } echo '</ul>'; $connections->options->setDBVersion('0.1.5'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.6', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.6.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_ADDRESS_TABLE . "'") != CN_ENTRY_ADDRESS_TABLE) { echo '<li>', __('Add the entry address table.', 'connections'), "</li>\n"; $entryTableAddress = "CREATE TABLE " . CN_ENTRY_ADDRESS_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`line_1` tinytext NOT NULL,\n\t\t\t\t\t`line_2` tinytext NOT NULL,\n\t\t\t\t\t`line_3` tinytext NOT NULL,\n\t\t\t\t\t`city` tinytext NOT NULL,\n\t\t\t\t\t`state` tinytext NOT NULL,\n\t\t\t\t\t`zipcode` tinytext NOT NULL,\n\t\t\t\t\t`country` tinytext NOT NULL,\n\t\t\t\t\t`latitude` decimal(15,12) default NULL,\n\t\t\t\t\t`longitude` decimal(15,12) default NULL,\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTableAddress); } echo '<li>', __('Porting addresses...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `addresses` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->addresses)) { $addresses = unserialize($result->addresses); $order = 0; foreach ((array) $addresses as $key => $address) { if (empty($address['type'])) { $address['type'] = 'other'; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_ADDRESS_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `line_1` = "%s", `line_2` = "%s", `line_3` = "%s", `city` = "%s", `state` = "%s", `zipcode` = "%s", `country` = "%s", `latitude` = "%f", `longitude` = "%f", `visibility` = "%s"', $result->id, $order, 0, $address['type'], $address['address_line1'], $address['address_line2'], '', $address['city'], $address['state'], $address['zipcode'], $address['country'], $address['latitude'], $address['longitude'], 'public'); $wpdb->query($sql); $order++; } } } if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_PHONE_TABLE . "'") != CN_ENTRY_PHONE_TABLE) { echo '<li>Add the entry phone table.', "</li>\n"; $entryTablePhone = "CREATE TABLE " . CN_ENTRY_PHONE_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`number` tinytext NOT NULL,\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTablePhone); } echo '<li>', __('Porting phone numbers...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `phone_numbers` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->phone_numbers)) { $phoneNumbers = unserialize($result->phone_numbers); $order = 0; foreach ((array) $phoneNumbers as $key => $phone) { if (empty($phone['number'])) { continue; } if (empty($phone['type'])) { $phone['type'] = 'homephone'; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_PHONE_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `number` = "%s", `visibility` = "%s"', $result->id, $order, 0, $phone['type'], $phone['number'], 'public'); $wpdb->query($sql); $order++; } } } if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_EMAIL_TABLE . "'") != CN_ENTRY_EMAIL_TABLE) { echo '<li>', __('Add the entry email table.', 'connections'), "</li>\n"; $entryTableEmail = "CREATE TABLE " . CN_ENTRY_EMAIL_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`address` tinytext NOT NULL,\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTableEmail); } echo '<li>', __('Porting email addresses...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `email` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->email)) { $emailAddresses = unserialize($result->email); $order = 0; foreach ((array) $emailAddresses as $key => $email) { if (empty($email['address'])) { continue; } if (empty($email['type'])) { $email['type'] = 'personal'; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_EMAIL_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `address` = "%s", `visibility` = "%s"', $result->id, $order, 0, $email['type'], $email['address'], 'public'); $wpdb->query($sql); $order++; } } } if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_MESSENGER_TABLE . "'") != CN_ENTRY_MESSENGER_TABLE) { echo '<li>', __('Add the entry messenger table.', 'connections'), "</li>\n"; $entryTableMessenger = "CREATE TABLE " . CN_ENTRY_MESSENGER_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`uid` tinytext NOT NULL,\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTableMessenger); } echo '<li>', __('Porting IM IDs...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `im` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->im)) { $imIDs = unserialize($result->im); $order = 0; foreach ((array) $imIDs as $key => $network) { if (empty($network['id'])) { continue; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_MESSENGER_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `uid` = "%s", `visibility` = "%s"', $result->id, $order, 0, $network['type'], $network['id'], 'public'); $wpdb->query($sql); $order++; } } } if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_SOCIAL_TABLE . "'") != CN_ENTRY_SOCIAL_TABLE) { echo '<li>', __('Add the entry social media table.', 'connections'), "</li>\n"; $entryTableSocialMedia = "CREATE TABLE " . CN_ENTRY_SOCIAL_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`url` tinytext NOT NULL,\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTableSocialMedia); } echo '<li>', __('Porting Social Media IDs...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `social` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->social)) { $socialMediaIDs = unserialize($result->social); $order = 0; foreach ((array) $socialMediaIDs as $key => $network) { if (empty($network['url'])) { continue; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_SOCIAL_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `url` = "%s", `visibility` = "%s"', $result->id, $order, 0, $network['type'], $network['url'], 'public'); $wpdb->query($sql); $order++; } } } if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_LINK_TABLE . "'") != CN_ENTRY_LINK_TABLE) { echo '<li>', __('Add the entry link table.', 'connections'), "</li>\n"; $entryTableLink = "CREATE TABLE " . CN_ENTRY_LINK_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`title` tinytext NOT NULL,\n\t\t\t\t\t`url` tinytext NOT NULL,\n\t\t\t\t\t`target` tinytext NOT NULL,\n\t\t\t\t\t`follow` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; dbDelta($entryTableLink); } echo '<li>', __('Porting websites...', 'connections'), "</li>\n"; $sql = 'SELECT DISTINCT `id`, `websites` FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { if (!empty($result->websites)) { $websites = unserialize($result->websites); $order = 0; foreach ((array) $websites as $key => $website) { if (empty($website['address'])) { continue; } $sql = $wpdb->prepare('INSERT INTO ' . CN_ENTRY_LINK_TABLE . ' SET `entry_id` = "%d", `order` = "%d", `preferred` = "%d", `type` = "%s", `title` = "%s", `url` = "%s", `target` = "%s", `follow` = "%d", `visibility` = "%s"', $result->id, $order, 0, 'website', 'Visit Website', $website['address'], 'new', 0, 'public'); $wpdb->query($sql); $order++; } } } echo '<li>', __('Changing column name from websites to links...', 'connections'), "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'links', 'CHANGE COLUMN websites links longtext NOT NULL')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding column... "slug"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'slug', 'tinytext NOT NULL AFTER visibility')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding entry slugs...', 'connections'), "</li>\n"; $sql = 'SELECT id, CASE entry_type WHEN \'individual\' THEN CONCAT_WS( \'-\' , LOWER(first_name) , LOWER(last_name) ) WHEN \'organization\' THEN LOWER(organization) WHEN \'connection_group\' THEN LOWER(family_name) WHEN \'family\' THEN LOWER(family_name) END AS slug_temp FROM ' . CN_ENTRY_TABLE; $results = $wpdb->get_results($sql); foreach ($results as $result) { $slug = sanitize_title($result->slug_temp); $query = $wpdb->prepare('SELECT slug FROM ' . CN_ENTRY_TABLE . ' WHERE slug = %s', $slug); if ($wpdb->get_var($query)) { $num = 2; do { $alt_slug = $slug . "-{$num}"; $num++; $slug_check = $wpdb->get_var($wpdb->prepare('SELECT slug FROM ' . CN_ENTRY_TABLE . ' WHERE slug = %s', $alt_slug)); } while ($slug_check); $slug = $alt_slug; } $wpdb->query('UPDATE ' . CN_ENTRY_TABLE . ' SET slug = \'' . $slug . '\' WHERE id = ' . $result->id); } echo '</ul>'; /* * Not a db upgrade but we'll drop this in here to make it simple. * This file is no longer needed so we'll try to remove it. */ if (file_exists(ABSPATH . 'download.vCard.php')) { @unlink(ABSPATH . 'download.vCard.php'); } // Create the cache folder. wp_mkdir_p(CN_CACHE_PATH); if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0746); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0747); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0756); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0757); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0764); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0765); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0766); } if (file_exists(CN_CACHE_PATH) && !is_writeable(CN_CACHE_PATH)) { @chmod(CN_CACHE_PATH, 0767); } // Create the images folder. // wp_mkdir_p( CN_IMAGE_PATH ); if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0746); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0747); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0756); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0757); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0764); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0765); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0766); } if (file_exists(CN_IMAGE_PATH) && !is_writeable(CN_IMAGE_PATH)) { @chmod(CN_IMAGE_PATH, 0767); } // Create the custom template folder. wp_mkdir_p(CN_CUSTOM_TEMPLATE_PATH); if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0746); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0747); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0756); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0757); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0764); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0765); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0766); } if (file_exists(CN_CUSTOM_TEMPLATE_PATH) && !is_writeable(CN_CUSTOM_TEMPLATE_PATH)) { @chmod(CN_CUSTOM_TEMPLATE_PATH, 0767); } $connections->options->setDBVersion('0.1.6'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.7', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.7.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; echo '<li>', __('Adding column "image" to the links table.', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_LINK_TABLE, 'image', "tinyint unsigned NOT NULL default '0' AFTER follow")) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding column "logo" to the links table.', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_LINK_TABLE, 'logo', "tinyint unsigned NOT NULL default '0' AFTER image")) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; $connections->options->setDBVersion('0.1.7'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.8', '<')) { $fields['fields_entry'] = array('family_name', 'first_name', 'middle_name', 'last_name', 'title', 'organization', 'department', 'contact_first_name', 'contact_last_name', 'bio', 'notes'); $fields['fields_address'] = array('line_1', 'line_2', 'line_3', 'city', 'state', 'zipcode', 'country'); $fields['fields_phone'] = array('number'); echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.8.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<p><strong>', __('NOTE', 'connections'), ':</strong> ', __('You might receive this error: "The used table type doesn\'t support FULLTEXT indexes".', 'connections'), '</p>'; echo '<p>', __('This is not a critical error. What this means is that the database does not support FULLTEXT query statments. Connections will perform a secondary search query in order to return search results.', 'connections'), '</p>'; echo '<ul>'; echo '<li>Adding FULLTEXT to ' . CN_ENTRY_TABLE . ' ' . "</li>\n"; $wpdb->query('ALTER TABLE ' . CN_ENTRY_TABLE . ' ADD FULLTEXT (' . implode(',', $fields['fields_entry']) . ')'); echo '<li>Adding FULLTEXT to ' . CN_ENTRY_ADDRESS_TABLE . ' ' . "</li>\n"; $wpdb->query('ALTER TABLE ' . CN_ENTRY_ADDRESS_TABLE . ' ADD FULLTEXT (' . implode(',', $fields['fields_address']) . ')'); echo '<li>Adding FULLTEXT to ' . CN_ENTRY_PHONE_TABLE . ' ' . "</li>\n"; $wpdb->query('ALTER TABLE ' . CN_ENTRY_PHONE_TABLE . ' ADD FULLTEXT (' . implode(',', $fields['fields_phone']) . ')'); echo '</ul>'; echo '<p>', __('The activate action for Connections 0.7.2.2 was not properly updated which created a fatal bug for new installations of Connections. Checking for the missing table columns in the Links table and add them, if missing.', 'connections'), '</p>'; echo '<ul>'; echo '<li>', __('Adding, if missing, column "image" to the links table.', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_LINK_TABLE, 'image', "tinyint unsigned NOT NULL default '0' AFTER follow")) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding, if missing, column "logo" to the links table.', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_LINK_TABLE, 'logo', "tinyint unsigned NOT NULL default '0' AFTER image")) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; $connections->options->setDBVersion('0.1.8'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.1.9', '<')) { echo '<h4>', sprintf(__('Upgrade from database version %1$s to database version 0.1.9.', 'connections'), $connections->options->getDBVersion()), "</h4>\n"; echo '<ul>'; if ($wpdb->get_var("SHOW TABLES LIKE '" . CN_ENTRY_DATE_TABLE . "'") != CN_ENTRY_DATE_TABLE) { echo '<li>', __('Add the date table.', 'connections'), "</li>\n"; $entryTableDate = "CREATE TABLE " . CN_ENTRY_DATE_TABLE . " (\n\t\t\t `id` bigint(20) unsigned NOT NULL auto_increment,\n\t\t\t\t\t`entry_id` bigint(20) unsigned NOT NULL default '0',\n\t\t\t\t\t`order` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`preferred` tinyint unsigned NOT NULL default '0',\n\t\t\t\t\t`type` tinytext NOT NULL,\n\t\t\t\t\t`date` date NOT NULL default '0000-00-00',\n\t\t\t\t\t`visibility` tinytext NOT NULL,\n\t\t\t\t\tPRIMARY KEY (`id`, `entry_id`)\n\t\t\t ) {$charsetCollate}"; // Create the table dbDelta($entryTableDate); } echo '<li>', __('Adding column... "user"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'user', 'tinytext NOT NULL AFTER owner')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '<li>', __('Adding column... "dates"', 'connections'), "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'dates', 'longtext NOT NULL AFTER links')) { echo '<ul><li>', __('SUCCESS', 'connections'), '</li></ul>'; } echo '</ul>'; $connections->options->setDBVersion('0.1.9'); // Save the options $connections->options->saveOptions(); } if (version_compare($dbVersion, '0.2', '<')) { cnSchema::create(); $connections->options->setDBVersion('0.2'); // Save the options $connections->options->saveOptions(); } $connections->options->saveOptions(); echo '<h4>', __('Upgrade completed.', 'connections'), "</h4>\n"; echo '<h4><a class="button-primary" href="' . $urlPath . '">', __('Continue', 'connections'), '</a></h4>'; $wpdb->hide_errors(); } }
function cnRunDBUpgrade() { global $wpdb, $connections; $urlPath = admin_url() . 'admin.php?page=' . $_GET['page']; // Check to ensure that the table exists if ($wpdb->get_var("SHOW TABLES LIKE 'CN_ENTRY_TABLE'") != CN_ENTRY_TABLE) { echo '<h3>Upgrade the database structure...</h3>' . "\n"; $wpdb->show_errors(); $dbVersion = $connections->options->getDBVersion(); if (version_compare($dbVersion, '0.1.0', '<')) { echo '<h4>Upgrade from database version ' . $connections->options->getDBVersion() . ' to database version 0.1.0 ' . ".</h4>\n"; echo '<ul>'; echo '<li>Changing "id" type-length/values to BIGINT(20)' . "</li>\n"; if (!$wpdb->query("ALTER TABLE " . CN_ENTRY_TABLE . " CHANGE id id BIGINT(20) NOT NULL AUTO_INCREMENT")) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "date_added"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'date_added', 'tinytext NOT NULL AFTER ts')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "entry_type"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'entry_type', 'tinytext NOT NULL AFTER date_added')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "honorable_prefix"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'honorable_prefix', 'tinytext NOT NULL AFTER entry_type')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "middle_name"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'middle_name', 'tinytext NOT NULL AFTER first_name')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "honorable_suffix"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'honorable_suffix', 'tinytext NOT NULL AFTER last_name')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "social"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'social', 'longtext NOT NULL AFTER im')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "added_by"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'added_by', 'bigint(20) NOT NULL AFTER options')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "edited_by"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'edited_by', 'bigint(20) NOT NULL AFTER added_by')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "owner"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'owner', 'bigint(20) NOT NULL AFTER edited_by')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "status"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'status', 'varchar(20) NOT NULL AFTER owner')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "contact_first_name"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'contact_first_name', 'tinytext NOT NULL AFTER department')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Adding Column... "contact_last_name"' . "</li>\n"; if (cnAddTableColumn(CN_ENTRY_TABLE, 'contact_last_name', 'tinytext NOT NULL AFTER contact_first_name')) echo '<ul><li>SUCCESS</li></ul>'; echo '</ul>'; echo '<h4>Adding default term relationship.</h4>'; // Add the Uncategorized category to all previous entries. $term = $connections->term->getTermBy('slug', 'uncategorized', 'category'); $entryIDs = $wpdb->get_col( "SELECT id FROM " . CN_ENTRY_TABLE ); $termID[] = $term->term_taxonomy_id; foreach ($entryIDs as $entryID) { $connections->term->setTermRelationships($entryID, $termID, 'category'); } $connections->options->setDBVersion('0.1.0'); } if (version_compare($dbVersion, '0.1.1', '<')) { echo '<h4>Upgrade from database version ' . $connections->options->getDBVersion() . ' to database version 0.1.1 ' . ".</h4>\n"; //echo '<h4>Setting all current entries to the "approved" status.' . "</h4>\n"; /*$results = $connections->retrieve->entries(); foreach ($results as $result) { $entry = new cnEntry($result); $entry->update(); }*/ $connections->options->setDBVersion('0.1.1'); } if (version_compare($dbVersion, '0.1.2', '<')) { echo '<h4>Upgrade from database version ' . $connections->options->getDBVersion() . ' to database version 0.1.2 ' . ".</h4>\n"; //echo '<h4>Setting all current entries `entry_type` column.' . "</h4>\n"; /*$results = $connections->retrieve->entries(); foreach ($results as $result) { $entry = new cnEntry($result); $entry->update(); }*/ $connections->options->setDBVersion('0.1.2'); } if (version_compare($dbVersion, '0.1.3', '<')) { echo '<h4>Upgrade from database version ' . $connections->options->getDBVersion() . ' to database version ' . CN_DB_VERSION . ".</h4>\n"; echo '<ul>'; echo '<li>Changing column name from group_name to family_name...' . "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'CHANGE COLUMN group_name family_name tinytext NOT NULL')) echo '<ul><li>SUCCESS</li></ul>'; echo '</ul>'; $connections->options->setDBVersion('0.1.3'); } if (version_compare($dbVersion, '0.1.4', '<')) { echo '<h4>Upgrade from database version ' . $connections->options->getDBVersion() . ' to database version ' . CN_DB_VERSION . ".</h4>\n"; echo '<ul>'; echo '<li>Changing column name from honorable_prefix to honorific_prefix...' . "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'CHANGE COLUMN honorable_prefix honorific_prefix tinytext NOT NULL')) echo '<ul><li>SUCCESS</li></ul>'; echo '<li>Changing column name from honorable_suffix to honorific_suffix...' . "</li>\n"; if (cnAlterTable(CN_ENTRY_TABLE, 'CHANGE COLUMN honorable_suffix honorific_suffix tinytext NOT NULL')) echo '<ul><li>SUCCESS</li></ul>'; echo '</ul>'; $connections->options->setDBVersion('0.1.4'); } echo '<h4>Updating entries to the new database stucture.' . "</h4>\n"; $results = $connections->retrieve->entries(); foreach ($results as $result) { $entry = new cnEntry($result); $entry->update(); } echo '<h4>Upgrade completed.' . "</h4>\n"; echo '<h4><a href="' . $urlPath . '">Continue</a></h4>'; $wpdb->hide_errors(); } }