diff -r c7c0fbc09788 -r 5e8dcbe22c24 web/wp-content/plugins/social/upgrades/2.0.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/wp-content/plugins/social/upgrades/2.0.php Tue Dec 04 18:43:10 2012 -0800 @@ -0,0 +1,329 @@ +lock(); + +// Find old social_notify and update to _social_notify. +$meta_keys = array( + 'social_aggregated_replies', + 'social_broadcast_error', + 'social_broadcast_accounts', + 'social_broadcasted_ids', + 'social_aggregation_log', + 'social_twitter_content', + 'social_notify_twitter', + 'social_facebook_content', + 'social_notify_facebook', + 'social_notify', + 'social_broadcasted' +); +if (count($meta_keys)) { + foreach ($meta_keys as $key) { + $new = '_'.$key; + if ($key == 'social_aggregated_replies') { + $new = '_social_aggregated_ids'; + } + $wpdb->query(" + UPDATE $wpdb->postmeta + SET meta_key = '$new' + WHERE meta_key = '$key' + "); + } +} + +// Delete old useless meta +$meta_keys = array( + '_social_broadcasted' +); +if (count($meta_keys)) { + foreach ($meta_keys as $key) { + $wpdb->query(" + DELETE + FROM $wpdb->postmeta + WHERE meta_key = '$key' + "); + } +} + +// De-auth Facebook accounts for new permissions. +if (version_compare(Social::option('installed_version'), '2.0', '<')) { + // Fix aggregated IDs + $results = $wpdb->get_results(" + SELECT post_id, meta_value + FROM $wpdb->postmeta + WHERE meta_key = '_social_aggregated_ids' + "); + if (is_array($results)) { + foreach ($results as $result) { + $result->meta_value = maybe_unserialize($result->meta_value); + if (is_array($result->meta_value)) { + $meta_value = array(); + foreach ($result->meta_value as $id) { + if (is_string($id)) { + if (strpos($id, '_') !== false) { + if (!isset($meta_value['facebook'])) { + $meta_value['facebook'] = array(); + } + + $meta_value['facebook'][] = $id; + } + else { + if (!isset($meta_value['twitter'])) { + $meta_value['twitter'] = array(); + } + + $meta_value['twitter'][] = $id; + } + } + } + + if (!empty($meta_value)) { + update_post_meta($result->post_id, '_social_aggregated_ids', $meta_value); + } + else { + delete_post_meta($result->post_id, '_social_aggregated_ids'); + } + } + } + } + + // Global accounts + $set_meta = false; + $accounts = get_option('social_accounts', array()); + if (count($accounts)) { + if (isset($accounts['facebook'])) { + $set_meta = true; + $accounts['facebook'] = array(); + } + + if (isset($accounts['twitter'])) { + foreach ($accounts['twitter'] as $account_id => $account) { + if (!isset($account->universal)) { + $accounts['twitter'][$account_id]->universal = true; + } + } + } + + update_option('social_accounts', $accounts); + } + + $results = $wpdb->get_results(" + SELECT user_id, meta_value + FROM $wpdb->usermeta + WHERE meta_key = 'social_accounts' + "); + if (is_array($results)) { + foreach ($results as $result) { + $accounts = maybe_unserialize($result->meta_value); + if (is_array($accounts)) { + if (isset($accounts['facebook'])) { + $set_meta = true; + $accounts['facebook'] = array(); + } + + if (isset($accounts['twitter'])) { + foreach ($accounts['twitter'] as $account_id => $account) { + if (!isset($account->personal)) { + $accounts['twitter'][$account_id]->personal = true; + } + } + } + + update_user_meta($result->user_id, 'social_accounts', $accounts); + } + } + } + + if ($set_meta) { + $results = $wpdb->get_results(" + SELECT ID + FROM $wpdb->users + "); + if (is_array($results)) { + foreach ($results as $result) { + update_user_meta($result->ID, 'social_2.0_upgrade', true); + } + } + } + + // Upgrade system_cron to fetch_comments + $fetch = $wpdb->get_var(" + SELECT option_value + FROM $wpdb->options + WHERE option_name = 'social_system_crons' + "); + + if (empty($fetch)) { + $fetch = '1'; + } + + $wpdb->query(" + INSERT + INTO $wpdb->options (option_name, option_value) + VALUES('social_fetch_comments', '$fetch') + ON DUPLICATE KEY UPDATE option_id = option_id + "); + + // Update all comment types + $keys = array(); + foreach (Social::instance()->services() as $service) { + $keys[] = $service->key(); + if ($service->key() == 'facebook') { + $keys[] = 'facebook-like'; + } + } + + foreach ($keys as $key) { + $query = $wpdb->query(" + UPDATE $wpdb->comments + SET comment_type = 'social-$key' + WHERE comment_type = '$key' + "); + } + + // Make sure all commenter accounts have the commenter flag + $results = $wpdb->get_results(" + SELECT m.user_id + FROM $wpdb->users AS u + JOIN $wpdb->usermeta AS m + ON m.user_id = u.ID + WHERE m.meta_key = 'social_accounts' + AND u.user_email LIKE '%@example.com' + "); + if (count($results)) { + foreach ($results as $result) { + update_user_meta($result->user_id, 'social_commenter', 'true'); + } + } + + // Rename the XMLRPC option + $wpdb->query(" + UPDATE $wpdb->options + SET option_name = 'social_default_accounts' + WHERE option_name = 'social_xmlrpc_accounts' + "); + + // Fix the broadcasted IDs format + $results = $wpdb->get_results(" + SELECT pm.meta_value, pm.post_id, p.post_content + FROM $wpdb->postmeta AS pm + JOIN $wpdb->posts AS p + ON pm.post_id = p.ID + WHERE meta_key = '_social_broadcasted_ids' + "); + if (is_array($results)) { + foreach ($results as $result) { + $meta_value = maybe_unserialize($result->meta_value); + if (is_array($meta_value)) { + Social::log('Old meta value for post #:post_id: :meta_value', array( + 'post_id' => $result->post_id, + 'meta_value' => print_r($meta_value, true) + )); + $_meta_value = array(); + foreach ($meta_value as $service_key => $accounts) { + if (!isset($_meta_value[$service_key])) { + $_meta_value[$service_key] = array(); + } + + foreach ($accounts as $account_id => $broadcasted) { + Social::log('Checking account #:account_id (:service).', array( + 'account_id' => $account_id, + 'service' => $service_key + )); + if (!isset($_meta_value[$service_key][$account_id])) { + $_meta_value[$service_key][$account_id] = array(); + } + + if (is_array($broadcasted)) { + foreach ($broadcasted as $id => $data) { + Social::log('Current Meta Value: :meta_value', array( + 'meta_value' => print_r($_meta_value, true) + )); + + if (is_scalar($data)) { + $_meta_value[$service_key][$account_id][$data] = array( + 'message' => '' + ); + } + else { + $_meta_value[$service_key][$account_id][$id] = $data; + } + } + } + else { + $_meta_value[$service_key][$account_id][$broadcasted] = array( + 'message' => '' + ); + } + } + } + + if (!empty($_meta_value)) { + update_post_meta($result->post_id, '_social_broadcasted_ids', $_meta_value); + } + + Social::log('New meta value for post #:post_id: :meta_value', array( + 'post_id' => $result->post_id, + 'meta_value' => print_r($_meta_value, true) + )); + } + } + } + + // Add broadcast by default + Social::option('broadcast_by_default', '0'); + + // Reschedule posts for aggregation + $results = $wpdb->get_results(" + SELECT post_id + FROM $wpdb->postmeta + WHERE meta_key = '_social_broadcasted_ids' + ORDER BY post_id DESC + LIMIT 50 + "); + if ($results !== null) { + $queue = Social_Aggregation_Queue::factory(); + foreach ($results as $result) { + if (!$queue->find($result->post_id)) { + $queue->add($result->post_id); + } + } + $queue->save(); + } + + // Fix comment author urls for Facebook comments... + $results = $wpdb->get_results(" + SELECT comment_ID, comment_author_url + FROM $wpdb->comments + WHERE comment_type = 'social-facebook' + AND comment_author_url LIKE 'http://graph.facebook.com/%' + "); + foreach ($results as $result) { + $url = explode('http://graph.facebook.com/', $result->comment_author_url); + $id = explode('/', $url[1]); + + $wpdb->query($wpdb->prepare(" + UPDATE $wpdb->comments + SET comment_author_url = %s + WHERE comment_ID = %s + ", 'http://facebook.com/profile.php?id='.$id[1], $result->comment_ID)); + } + + // Remove old CRONs + if (($timestamp = wp_next_scheduled('social_cron_60_init')) !== false) { + wp_unschedule_event($timestamp, 'social_cron_60_init'); + } + if (($timestamp = wp_next_scheduled('social_cron_60_core')) !== false) { + wp_unschedule_event($timestamp, 'social_cron_60_core'); + } +} + +// Flush the cache +wp_cache_flush(); + +// Decrement the semaphore and unlock +$semaphore->unlock();