/**
  * Upgrade database.
  *
  * @since  1.0.0
  * @param  bool $force Also execute update logic when version did not change.
  */
 public static function update($force = false)
 {
     static $Done = false;
     if ($Done && !$force) {
         return;
     }
     // Migration handler has its own valid_user check.
     self::check_migration_handler();
     // Updates are only triggered from Admin-Side by an Admin user.
     if (!self::valid_user()) {
         return;
     }
     // Check for correct network-wide protection setup.
     self::check_settings();
     $settings = MS_Factory::load('MS_Model_Settings');
     $old_version = $settings->version;
     // Old: The version in DB.
     $new_version = MS_Plugin::instance()->version;
     // New: Version in file.
     $is_new_setup = empty($old_version);
     // Compare current src version to DB version:
     // We only do UP-grades but no DOWN-grades!
     if ($old_version) {
         $version_changed = version_compare($old_version, $new_version, 'lt');
     } else {
         $version_changed = true;
     }
     if ($force || $version_changed) {
         $Done = true;
         $msg = array();
         /*
          * ----- General update logic, executed on every update ------------
          */
         do_action('ms_model_upgrade_before_update', $settings, $old_version, $new_version, $force);
         // Prepare the Update message.
         if (!$version_changed) {
             $msg[] = sprintf(__('<strong>Membership 2</strong> is set up for version %1$s!', 'membership2'), $new_version);
         } else {
             $msg[] = sprintf(__('<strong>Membership 2</strong> was updated to version %1$s!', 'membership2'), $new_version);
         }
         // Every time the plugin is updated we clear the cache.
         MS_Factory::clear();
         // Create missing Membership pages.
         $new_pages = MS_Model_Pages::create_missing_pages();
         if (!empty($new_pages)) {
             $msg[] = sprintf(__('New Membership pages created: "%1$s".', 'membership2'), implode('", "', $new_pages));
         }
         // Remove an old version of Protected Content
         // TODO: REMOVE THIS BLOCK/FUNCTION END OF 2015
         if ($version_changed) {
             self::remove_old_copy();
         }
         // Note: We do not create menu items on upgrade! Users might have
         // intentionally removed the items from the menu...
         /*
          * ----- Version-Specific update logic -----------------------------
          */
         // Upgrade from a 1.0.0.x version to 1.0.1.0 or higher
         if (version_compare($old_version, '1.0.1.0', 'lt')) {
             self::_upgrade_1_0_1_0();
         }
         // Upgrade from 1.0.1.0 version to 1.0.1.1 or higher
         if (version_compare($old_version, '1.0.1.1', 'lt')) {
             self::_upgrade_1_0_1_1();
         }
         // Upgrade from 1.0.1.x version to 1.0.2.0 or higher
         if (version_compare($old_version, '1.0.2.0', 'lt')) {
             self::_upgrade_1_0_2_0();
         }
         // Upgrade from 1.0.2.x version to 1.0.2.4 or higher
         if (version_compare($old_version, '1.0.2.4', 'lt')) {
             self::_upgrade_1_0_2_4();
         }
         /*
          * ----- General update logic, executed on every update ------------
          */
         $settings->version = $new_version;
         $settings->save();
         // Display a message after the page is reloaded.
         if (!$is_new_setup) {
             lib3()->ui->admin_message(implode('<br>', $msg), '', '', 'ms-update');
         }
         do_action('ms_model_upgrade_after_update', $settings, $old_version, $new_version, $force);
         $addons = MS_Factory::load('MS_Model_Addon');
         $addons->flush_list();
         // This will reload the current page.
         MS_Plugin::flush_rewrite_rules();
     }
 }
 /**
  * Function is triggered every time an add-on is enabled.
  *
  * We flush the Factory Cache when the WPML Add-on is enabled so all strings
  * are properly registered for translation.
  *
  * @since  1.0.1.0
  * @param  string $addon The Add-on ID
  */
 public function enable_addon($addon)
 {
     if (self::ID == $addon) {
         MS_Factory::clear();
     }
 }