Example #1
0
function synved_option_wp_upgrader_pre_install($perform, $extra)
{
    if (!isset($extra['plugin'])) {
        return $perform;
    }
    $upgrade_transfer = get_option('synved_option_wp_upgrade_addon_transfer');
    if ($upgrade_transfer != null) {
        $upgrade_transfer_time = get_option('synved_option_wp_upgrade_addon_transfer_time');
        if ($upgrade_transfer_time == null || time() - $upgrade_transfer_time > 60 * 60 * 1) {
            $upgrade_transfer = null;
            update_option('synved_option_wp_upgrade_addon_transfer', '');
        }
    }
    $module_list = array();
    if (function_exists('synved_plugout_get_module_list')) {
        $module_list = synved_plugout_get_module_list();
    } else {
        global $synved_plugout;
        $module_list = array_keys($synved_plugout['module-list']);
    }
    $plugins_dir = WP_PLUGIN_DIR;
    $plugins_dir = rtrim(str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, realpath($plugins_dir)), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    $plugin = $extra['plugin'];
    $plugin_dir = rtrim(str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, realpath(dirname($plugins_dir . $plugin))), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    $dir = get_temp_dir();
    $name = time();
    $dir = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . wp_unique_filename($dir, $name) . DIRECTORY_SEPARATOR;
    $list = array();
    foreach ($module_list as $module_id) {
        $addon_list = synved_plugout_module_addon_list($module_id);
        if ($addon_list != null) {
            foreach ($addon_list as $addon_name => $addon_file) {
                if (file_exists($addon_file)) {
                    $addon_dir = dirname($addon_file);
                    $parent_dir = dirname($addon_dir);
                    // clean names for comparison
                    $addon_dir = rtrim(str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, realpath($addon_dir)), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
                    $parent_dir = rtrim(str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, realpath($parent_dir)), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
                    if (strtolower($parent_dir) != strtolower($plugins_dir) && strpos(strtolower($addon_dir), strtolower($plugin_dir)) !== false) {
                        $path = $dir;
                        $diff = substr($addon_dir, strlen($plugins_dir));
                        $path .= $diff;
                        wp_mkdir_p($path);
                        copy_dir($addon_dir, $path);
                        $list[] = array('original' => $addon_dir, 'temporary' => $path);
                    }
                }
            }
        }
    }
    if ($list != null) {
        update_option('synved_option_wp_upgrade_addon_transfer', array('directory' => $dir, 'list' => $list));
        update_option('synved_option_wp_upgrade_addon_transfer_time', time());
    }
    return $perform;
}
function synved_option_item_addon_is_installed(array $item)
{
    if ($item != null) {
        $type = synved_option_item_type($item);
        if ($type == 'addon') {
            $target = synved_option_item_property($item, 'target');
            $folder = synved_option_item_property($item, 'folder');
            $path = $target;
            if ($path != null) {
                $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
                if (substr($path, -1) != DIRECTORY_SEPARATOR) {
                    $path .= DIRECTORY_SEPARATOR;
                }
                $path .= $folder;
                if (is_dir($path)) {
                    return true;
                }
            }
            $module = synved_option_item_property($item, 'module');
            if ($module != null) {
                $addon_list = synved_plugout_module_addon_list($module);
                if (isset($addon_list[$folder])) {
                    return true;
                }
            }
        }
    }
    return false;
}