예제 #1
0
function sp_get_plugins($plugin_folder = '')
{
    $sf_plugins = array();
    $plugin_root = untrailingslashit(SFPLUGINDIR);
    if (!empty($plugin_folder)) {
        $plugin_root .= $plugin_folder;
    }
    # Files in root plugins directory
    $plugins_dir = @opendir($plugin_root);
    $plugin_files = array();
    if ($plugins_dir) {
        while (($file = readdir($plugins_dir)) !== false) {
            if (substr($file, 0, 1) == '.') {
                continue;
            }
            if (is_dir($plugin_root . '/' . $file)) {
                $plugins_subdir = @opendir($plugin_root . '/' . $file);
                if ($plugins_subdir) {
                    while (($subfile = readdir($plugins_subdir)) !== false) {
                        if (substr($subfile, 0, 1) == '.') {
                            continue;
                        }
                        if (substr($subfile, -4) == '.php') {
                            $plugin_files[] = "{$file}/{$subfile}";
                        }
                    }
                }
            } else {
                if (substr($file, -4) == '.php') {
                    $plugin_files[] = $file;
                }
            }
        }
    } else {
        return $sf_plugins;
    }
    if ($plugins_dir) {
        @closedir($plugins_dir);
    }
    if ($plugins_subdir) {
        @closedir($plugins_subdir);
    }
    if (empty($plugin_files)) {
        return $sf_plugins;
    }
    foreach ($plugin_files as $plugin_file) {
        if (!is_readable("{$plugin_root}/{$plugin_file}")) {
            continue;
        }
        $plugin_data = sp_get_plugin_data("{$plugin_root}/{$plugin_file}", false, false);
        # Do not apply markup/translate as it'll be cached.
        if (empty($plugin_data['Name'])) {
            continue;
        }
        $sf_plugins[plugin_basename($plugin_file)] = $plugin_data;
    }
    uasort($sf_plugins, create_function('$a, $b', 'return strnatcasecmp( $a["Name"], $b["Name"]);'));
    return $sf_plugins;
}
 function check_package($source)
 {
     global $wp_filesystem;
     if (is_wp_error($source)) {
         return $source;
     }
     $working_directory = str_replace($wp_filesystem->wp_content_dir(), trailingslashit(WP_CONTENT_DIR), $source);
     if (!is_dir($working_directory)) {
         return $source;
     }
     # Sanity check, if the above fails, lets not prevent installation.
     # Check the folder contains at least 1 valid plugin.
     $plugins_found = false;
     foreach (glob($working_directory . '*.php') as $file) {
         $info = sp_get_plugin_data($file, false, false);
         if (!empty($info['Name'])) {
             $plugins_found = true;
             break;
         }
     }
     if (!$plugins_found) {
         return new WP_Error('incompatible_archive', $this->strings['incompatible_archive'], spa_text('No valid plugins were found'));
     }
     return $source;
 }