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; }