Example #1
0
/**
 * Upgrade routine. Hooked onto admin_init
 *
 *@since 1.1
 *@access private
 *@ignore
*/
function eventorganiser_upgradecheck()
{
    global $wpdb, $EO_Errors;
    $eventorganiser_db_version = defined('EVENT_ORGANISER_VER') ? EVENT_ORGANISER_VER : false;
    $installed_ver = get_option('eventorganiser_version');
    if (empty($installed_ver)) {
        //This is a fresh install. Add current database version
        add_option('eventorganiser_version', $eventorganiser_db_version);
        //But a bug in 1.5 means that it could be that they first installed in 1.5 (as no db version was added)
        //So set to 1.5.  Fresh installs will have to go through the 1.6 (and above) update, but this is ok.
        $installed_ver = '1.5';
        eventorganiser_install();
    }
    //If this is an old version, perform some updates.
    if (!empty($installed_ver) && $installed_ver != $eventorganiser_db_version) {
        if (version_compare($installed_ver, '1.3', '<')) {
            wp_die('You cannot upgrade to this version from 1.3 or before. Please upgrade to 1.5.7 first.');
        }
        if (version_compare($installed_ver, '1.4', '<')) {
            eventorganiser_140_update();
        }
        if (version_compare($installed_ver, '1.5', '<')) {
            eventorganiser_150_update();
        }
        if (version_compare($installed_ver, '1.6', '<')) {
            //Remove columns:
            $columns = $wpdb->get_col("DESC {$wpdb->eo_events}", 0);
            $remove_columns = array('Venue', 'event_schedule', 'event_schedule_meta', 'event_frequency', 'reoccurrence_start', 'reoccurrence_end');
            $delete_columns = array_intersect($remove_columns, $columns);
            if (!empty($delete_columns)) {
                $sql = $wpdb->query("ALTER TABLE {$wpdb->eo_events} DROP COLUMN " . implode(', DROP COLUMN ', $delete_columns) . ';');
            }
            eventorganiser_install();
        }
        if (version_compare($installed_ver, '1.6.2', '<')) {
            $options = get_option('eventorganiser_options');
            if (!empty($options['eventtag'])) {
                $options['supports'][] = 'eventtag';
                update_option('eventorganiser_options', $options);
            }
        }
        if (version_compare($installed_ver, '2.7.3', '<')) {
            //Ensure event_allday columns is removed. This causes problems on Windows servers.
            $columns = $wpdb->get_col("DESC {$wpdb->eo_events}", 0);
            $remove_columns = array('event_allday');
            $delete_columns = array_intersect($remove_columns, $columns);
            if (!empty($delete_columns)) {
                $sql = $wpdb->query("ALTER TABLE {$wpdb->eo_events} DROP COLUMN " . implode(', DROP COLUMN ', $delete_columns) . ';');
            }
            flush_rewrite_rules();
        }
        if (version_compare($installed_ver, '2.12.0', '<') && version_compare(get_bloginfo('version'), '4.2-alpha-31007-src', '>=')) {
            //If the user is upgrading from an earlier version (without the split term fix)
            //and they have already upgraded to WP 4.2.0, then run the update routine
            eventorganiser_021200_update();
        }
        update_option('eventorganiser_version', $eventorganiser_db_version);
        //Run upgrade checks
        add_action('admin_notices', 'eventorganiser_db_checks', 0);
    }
    //eventorganiser_021200_update();
}
Example #2
0
 /**
  * Check that the upgrade routine run for users updating EO after
  * updating to WP 4.2 is able to recover 'lost' data.
  */
 public function testPostSplitTermsUpgrade()
 {
     global $wpdb;
     if (version_compare(get_bloginfo('version'), '4.2-alpha-31007-src', '<')) {
         $this->markTestSkipped(sprintf('This test applies only to 4.2-alpha-31007-src+, running %s', get_bloginfo('version')));
         return;
     }
     remove_action('split_shared_term', '_eventorganiser_handle_split_shared_terms', 10);
     register_taxonomy('wptests_tax', 'event');
     //Create terms - they'll have unique term IDs
     $t1 = wp_insert_term('Foo', 'wptests_tax');
     $t2 = eo_insert_venue('Foo', array('address' => 'Edinburgh Castle', 'city' => 'Edinburgh', 'country' => 'UK'));
     $t3 = wp_insert_term('Foo', 'event-category');
     //Manually modify the terms so they share term IDs
     $wpdb->update($wpdb->term_taxonomy, array('term_id' => $t1['term_id']), array('term_taxonomy_id' => $t2['term_taxonomy_id']), array('%d'), array('%d'));
     $wpdb->update($wpdb->term_taxonomy, array('term_id' => $t1['term_id']), array('term_taxonomy_id' => $t3['term_taxonomy_id']), array('%d'), array('%d'));
     //Insert/move data so it is assigned to 'pre-split ID'.
     update_option('eo-event-category_' . $t1['term_id'], array('colour' => '#ff0000'));
     $wpdb->update($wpdb->eo_venuemeta, array('eo_venue_id' => $t1['term_id']), array('eo_venue_id' => $t2['term_id']));
     //Create event and assign terms so we can retrieve term IDs
     $events = $this->factory->event->create_many(3);
     wp_set_object_terms($events[0], array('Foo'), 'wptests_tax');
     wp_set_object_terms($events[1], array('Foo'), 'event-venue');
     wp_set_object_terms($events[2], array('Foo'), 'event-category');
     // Verify that the term IDs are shared.
     $t1_terms = wp_get_object_terms($events[0], 'wptests_tax');
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $this->assertSame($t1_terms[0]->term_id, $t2_terms[0]->term_id);
     $this->assertSame($t1_terms[0]->term_id, $t3_terms[0]->term_id);
     //Split by updating venue
     eo_update_venue($t2_terms[0]->term_id, array('name' => 'Venue Foo'));
     wp_update_term($t3_terms[0]->term_id, 'event-category', array('name' => 'Category Foo'));
     //Check meta data is "lost"
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $address = eo_get_venue_address($t2_terms[0]->term_id);
     $this->assertEquals('', '');
     $meta = get_option('eo-event-category_' . $t3_terms[0]->term_id);
     $this->assertEquals(false, $meta);
     //Run upgrade routine
     eventorganiser_021200_update();
     //Check data is recovered
     $t2_terms = wp_get_object_terms($events[1], 'event-venue');
     $t3_terms = wp_get_object_terms($events[2], 'event-category');
     $address = eo_get_venue_address($t2_terms[0]->term_id);
     $this->assertEquals('Edinburgh', $address['city']);
     $meta = get_option('eo-event-category_' . $t3_terms[0]->term_id);
     $this->assertEquals('#ff0000', $meta['colour']);
     add_action('split_shared_term', '_eventorganiser_handle_split_shared_terms', 10, 4);
 }