function _do_system_reset()
 {
     global $wpdb, $mgm_init;
     extract($_POST);
     // track
     $status = 'error';
     $message = __('Reset failed', 'mgm');
     $redirect = '';
     // take option
     switch ($reset_type) {
         case 'settntable':
             // user meta
             $wpdb->query("DELETE FROM `{$wpdb->usermeta}` WHERE `meta_key` LIKE 'mgm_%' OR `meta_key` LIKE '_mgm_%'");
             // post meta
             $wpdb->query("DELETE FROM `{$wpdb->postmeta}` WHERE `meta_key` LIKE '_mgm_%' ");
             // loop tables
             foreach (mgm_get_tables() as $table) {
                 // do not clear countries table
                 if ($table == TBL_MGM_COUNTRY) {
                     continue;
                 }
                 // truncate
                 $wpdb->query('TRUNCATE ' . $table);
             }
             // set messages
             $status = 'success';
             $message = __('Settings and Table reset completed successfully.', 'mgm');
         case 'settonly':
             // option meta
             $wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name` LIKE 'mgm_%' AND option_name NOT IN('mgm_version','mgm_upgrade_id','mgm_auth','mgm_auth_options')");
             // set messages
             if ($reset_type == 'settonly') {
                 $status = 'success';
                 $message = __('Settings reset completed successfully.', 'mgm');
             }
             break;
         case 'fullreset':
             // plugin basename
             $plugin = untrailingslashit(MGM_PLUGIN_NAME);
             // if active
             if (is_plugin_active($plugin)) {
                 // post meta explicitly
                 $wpdb->query("DELETE FROM `{$wpdb->postmeta}` WHERE `meta_key` LIKE '_mgm_%' ");
                 // deactivate first
                 deactivate_plugins($plugin, true);
                 // remove all
                 $mgm_init->deactivate(true);
                 // send deactivation
                 mgm_get_class('auth')->notify_deactivation();
                 // sleep 2 sec
                 sleep(2);
                 // redirect
                 $status = 'success';
                 $message = __('MagicMembers deactivated successfully. You will be redirected to Plugins page.', 'mgm');
                 $redirect = 'plugins.php?deactivate=true&plugin_status=active&paged=1';
             } else {
                 $status = 'error';
                 $message = __('MagicMembers already deactivated', 'mgm');
             }
             break;
         case 'licensereset':
             // delete option
             delete_option('mgm_auth_options');
             delete_option('mgm_auth');
             // old key
             // clear dashboard cache
             mgm_delete_transients();
             // response
             $status = 'success';
             $message = __('License reset completed successfully.', 'mgm');
             $redirect = 'admin.php?page=mgm/admin';
             break;
         case 'dashcachereset':
             // clear dashboard cache
             mgm_delete_transients();
             // response
             $status = 'success';
             $message = __('Dashboard cache reset completed successfully.', 'mgm');
             break;
         case 'sidebarwidgetreset':
             // delete option
             delete_option('mgm_sidebar_widget_options');
             delete_option('mgm_sidebar_widget');
             // old key
             // response
             $status = 'success';
             $message = __('Sidebar Widget Settings reset completed successfully.', 'mgm');
             break;
     }
     // response
     return json_encode(array('status' => $status, 'message' => $message, 'redirect' => $redirect));
 }
Esempio n. 2
0
<?php

/** 
 * Schema update
 */
$charset_collate = mgm_get_charset_collate();
// db tables
$wpdb_tables = mgm_get_wp_tables();
// alter charset
foreach (mgm_get_tables() as $table) {
    // check if exists
    if (!in_array($table, $wpdb_tables)) {
        continue;
    }
    // run
    $wpdb->query("ALTER TABLE `{$table}` {$charset_collate}");
}
// update collat
mgm_reset_tables_collate($wpdb_tables);
// end of file
/**
 * check tables loaded
 */
function mgm_check_dbtables_loaded($key = NULL)
{
    global $wpdb;
    // wp tables
    $wp_tables = mgm_get_wp_tables();
    // check
    $mgm_tables = mgm_get_tables();
    // deprecated tables not removed from tables define
    $mgm_deprecated_tables = array(TBL_MGM_DOWNLOAD_ATTRIBUTE, TBL_MGM_DOWNLOAD_ATTRIBUTE_TYPE);
    // return
    $return = true;
    // prefix
    $t_prefix = $wpdb->prefix . MGM_TABLE_PREFIX;
    // check
    foreach ($mgm_tables as $mgm_table) {
        // only tables matching "wp_mgm_" at beginging
        if (preg_match('/^' . $t_prefix . '/i', $mgm_table)) {
            // skip
            if (in_array($mgm_table, $mgm_deprecated_tables)) {
                continue;
            }
            // check
            if (!in_array($mgm_table, $wp_tables)) {
                $return = false;
                break;
            }
        }
    }
    // reload
    if (!$return) {
        require_once MGM_CORE_DIR . 'migration/install/mgm_schema.php';
    }
    // return
    return $return;
}
Esempio n. 4
0
 function deactivate($force = false)
 {
     global $wpdb;
     // if remove by force
     if ($force) {
         // uninstall options
         $wpdb->query("DELETE FROM `{$wpdb->options}` WHERE `option_name` LIKE 'mgm_%' ");
         // user meta
         $wpdb->query("DELETE FROM `{$wpdb->usermeta}` WHERE `meta_key` LIKE 'mgm_%' OR `meta_key` LIKE '_mgm_%'");
         // post meta
         $wpdb->query("DELETE FROM `{$wpdb->postmeta}` WHERE `meta_key` LIKE '_mgm_%' ");
         // tables
         foreach (mgm_get_tables() as $table) {
             $wpdb->query("DROP TABLE IF EXISTS `{$table}`");
         }
     }
     // clear event hooks
     foreach (mgm_get_defined_schedules() as $schedule_name => $event_name) {
         wp_clear_scheduled_hook($event_name);
     }
     // clear dashboard cache
     mgm_delete_transients();
 }
/**
 * find and update table field collation
 */
function mgm_reset_tables_collate($wpdb_tables = NULL)
{
    global $wpdb;
    // charset
    $charset = !empty($wpdb->charset) ? $wpdb->charset : 'utf8';
    // collate
    $collate = !empty($wpdb->collate) ? $wpdb->collate : 'utf8_general_ci';
    // sql
    $sql_regx = 'ALTER TABLE `%s` CHANGE `%s` `%s` %s CHARACTER SET %s COLLATE %s %s;';
    // db tables
    if (!$wpdb_tables) {
        $wpdb_tables = mgm_get_wp_tables();
    }
    // loop
    foreach (mgm_get_tables() as $table) {
        // check if exists
        if (!in_array($table, $wpdb_tables)) {
            continue;
        }
        // query
        $fields = $wpdb->get_results(sprintf('SHOW FULL COLUMNS FROM `%s`', $table), ARRAY_A);
        // loop
        foreach ($fields as $field) {
            // check
            if (isset($field['Collation'])) {
                // check
                if (!empty($field['Collation']) && $field['Collation'] != $collate) {
                    // null
                    $null = $field['Null'] == 'NO' ? 'NOT NULL' : 'NULL DEFAULT NULL';
                    // sql
                    $sql = sprintf($sql_regx, $table, $field['Field'], $field['Field'], $field['Type'], $charset, $collate, $null);
                    // update
                    $wpdb->query($sql);
                }
            }
        }
    }
    // return
    return true;
}