/** * Determines whether or not BuddyPress is installed. * * @package s2Member\Utilities * @since 110720 * * @param bool $query_active_plugins Optional. If true, this conditional will query active plugins too. Defaults to true if {@link s2Member\WS_PLUGIN__S2MEMBER_ONLY} is true, else false. * @return bool True if BuddyPress is installed, else false. */ public static function bp_is_installed($query_active_plugins = NULL) { if (defined("BP_VERSION") && did_action("bp_core_loaded")) { return true; } /* Quickest/easiest way to determine. */ /**/ $s2o = defined("WS_PLUGIN__S2MEMBER_ONLY") && WS_PLUGIN__S2MEMBER_ONLY ? true : false; /**/ if ($query_active_plugins = !isset($query_active_plugins) && $s2o ? true : $query_active_plugins) { $buddypress = "buddypress/bp-loader.php"; /* BuddyPress. */ /**/ $active_plugins = is_multisite() ? wp_get_active_network_plugins() : array(); $active_plugins = array_unique(array_merge($active_plugins, wp_get_active_and_valid_plugins())); /**/ foreach ($active_plugins as $active_plugin) { /* Search. */ if (plugin_basename($active_plugin) === $buddypress) { return true; } } /* BuddyPress active. */ } return false; /* Default return false. */ }
private function collect_data() { $active_plugins = wp_get_active_and_valid_plugins(); $this->init_bundle($active_plugins); foreach ($active_plugins as $plugin) { $this->add_installed_plugin($plugin); } }
/** * Generate a hash with all the system support information * * @return string of encoded support info * @author Peter Chester */ public static function generateSupportHash() { $user = wp_get_current_user(); $plugins_raw = wp_get_active_and_valid_plugins(); $plugins = array(); foreach ($plugins_raw as $k => $v) { $plugins[] = basename($v); } $systeminfo = array('URL' => 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER['REQUEST_URI'], 'NAME' => $user->display_name, 'EMAIL' => $user->user_email, 'PLUGIN VERSION' => TribeEvents::VERSION, 'WORDPRESS VERSION' => get_bloginfo('version'), 'PHP VERSION' => phpversion(), 'PLUGINS' => $plugins, 'THEME' => get_current_theme(), 'MU INSTALL' => is_multisite() ? 'TRUE' : 'FALSE', 'SETTINGS' => TribeEvents::getOptions(), 'ERRORS' => self::$debug_log); $systeminfo = apply_filters('tribe-events-pro-support', $systeminfo); $systeminfo = serialize($systeminfo); $systeminfo = base64_encode($systeminfo); return $systeminfo; }
/** * Get list of active plugins with a given prefix in the plugin folder path. * * @param string|array $prefix Prefixes you want to retrieve. * * @return array List of plugins with prefix in path. */ public static function get_plugins_with_prefix($prefix) { $full_list = wp_get_active_and_valid_plugins(); if (is_multisite()) { $full_list = array_merge($full_list, wp_get_active_network_plugins()); } $filtered_list = array(); foreach ($full_list as $plugin) { $base = plugin_basename($plugin); if (0 === Tribe__Utils__Array::strpos($base, $prefix)) { $filtered_list[] = $plugin; } } return $filtered_list; }
public static function get_plugin_details($args = array()) { if (!is_callable('get_plugins')) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!is_callable('get_plugins')) { return false; } $plugins = get_plugins(); $active_plugins = is_callable('wp_get_active_and_valid_plugins') ? wp_get_active_and_valid_plugins() : array(); $network_active_plugins = is_callable('wp_get_active_network_plugins') ? wp_get_active_network_plugins() : array(); // $mu_plugins = ( is_callable( 'get_mu_plugins' ) ) ? get_mu_plugins() : array(); // $dropins = ( is_callable( 'get_dropins' ) ) ? get_dropins() : array(); array_walk($active_plugins, array(__CLASS__, 'strip_plugin_dir')); array_walk($network_active_plugins, array(__CLASS__, 'strip_plugin_dir')); foreach ($plugins as $plugin => $data) { if (in_array($plugin, $active_plugins)) { $plugins[$plugin]['status'] = 'active'; } else { if (in_array($plugin, $network_active_plugins)) { $plugins[$plugin]['status'] = 'network_active'; } else { $plugins[$plugin]['status'] = 'inactive'; } } if (empty($args['verbose'])) { unset($plugins[$plugin]['PluginURI']); unset($plugins[$plugin]['Description']); unset($plugins[$plugin]['Author']); unset($plugins[$plugin]['AuthorURI']); unset($plugins[$plugin]['TextDomain']); unset($plugins[$plugin]['DomainPath']); unset($plugins[$plugin]['Title']); unset($plugins[$plugin]['AuthorName']); } else { $path = WP_PLUGIN_DIR . '/' . dirname($plugin); $vcs_details = self::get_repository_directory_details($path); if (false !== $vcs_details) { $plugins[$plugin]['vcs'] = $vcs_details; } } } return $plugins; }
/** * Lists any non-multisite plugins. * * @return array */ static function get_plugins() { $plugins = array(); if (function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_and_valid_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $plugins[] = $plugin; } } return $plugins; }
function podpress_wp_e_commerce_compatibility() { global $wp_version; $wp_ecommerce_is_active = FALSE; if (version_compare($wp_version, '3.0', '<')) { $current_plugins = get_option('active_plugins'); } else { $current_plugins = wp_get_active_and_valid_plugins(); } if (TRUE === is_array($current_plugins)) { foreach ($current_plugins as $current_plugin) { if (FALSE !== stripos($current_plugin, 'wp-shopping-cart.php')) { $wp_ecommerce_is_active = TRUE; break; } } } if (TRUE === $wp_ecommerce_is_active) { if (!defined('PODPRESS_WP_ECOMMERCE_IS_ACTIVE')) { define('PODPRESS_WP_ECOMMERCE_IS_ACTIVE', TRUE); } } }
function _pp_support_upload($args = array()) { require_once dirname(__FILE__) . '/plugin_pp.php'; //$args['post_id'] = 1; //$args['term_taxonomy_id'] = 1; $request_vars = array('site' => site_url('')); global $wpdb; $ok = (array) pp_get_option('support_data'); $pp_config = array(); $pp_old = array(); //if ( ! empty( $ok['pp_options'] ) ) { global $pp_site_options; $options = array(); foreach (array('default_category', 'permalink_structure', '_bbp_default_role', '_bbp_private_forums', '_bbp_use_wp_editor', '_bbp_allow_anonymous', '_bbp_allow_global_access', '_bbp_db_version', 'bp-active-components', 'users_can_register', 'comment_moderation', 'comment_registration', 'registration', 'default_role', 'db_version', 'enable_app', 'enable_xmlrpc', 'sticky_posts', 'initial_db_version') as $opt) { $options[$opt] = get_option($opt); } ksort($options); $pp_config['options'] = gzcompress(serialize($options)); ksort($pp_site_options); $pp_config['pp_options'] = gzcompress(serialize($pp_site_options)); $pp_config['rvy_options'] = gzcompress(serialize($wpdb->get_results("SELECT option_name, option_value, option_id FROM {$wpdb->options} WHERE option_name LIKE 'rvy_%' ORDER BY option_name", ARRAY_N))); if (PP_MULTISITE) { global $pp_netwide_options, $pp_net_options; if (is_array($pp_net_options)) { ksort($pp_net_options); if (!empty($pp_net_options)) { $pp_config['pp_net_options'] = gzcompress(serialize($pp_net_options)); } } ksort($pp_netwide_options); if (!empty($pp_netwide_options)) { $pp_config['pp_netwide_options'] = gzcompress(serialize($pp_netwide_options)); } $sitemeta_table = $wpdb->base_prefix . 'sitemeta'; if ($rvy_net_options = $wpdb->get_results("SELECT meta_key, meta_value, site_id, meta_id FROM {$sitemeta_table} WHERE meta_key LIKE 'rvy_%' ORDER BY meta_key", ARRAY_N)) { $pp_config['rvy_net_options'] = gzcompress(serialize($rvy_net_options)); } } //} if (!empty($ok['wp_roles_types'])) { global $wp_post_types, $wp_taxonomies, $wp_post_statuses, $wp_roles; // strip labels, label_count props $pp_config['wp_roles'] = gzcompress(serialize($wp_roles)); // strip out labels and some other properties for perf foreach (array('wp_post_types', 'wp_taxonomies', 'wp_post_statuses') as $var) { $wp_data = ${$var}; $arr = array(); foreach (array_keys($wp_data) as $member) { $arr[$member] = array(); foreach (array_keys(get_object_vars($wp_data[$member])) as $prop) { if (!in_array($prop, array('labels', 'label_count', 'can_export', 'description'))) { $arr[$member][$prop] = $wp_data[$member]->{$prop}; } } } $pp_config[$var] = gzcompress(serialize($arr)); } } if (!empty($ok['theme'])) { $th = wp_get_theme(); $theme_data = array(); foreach (array('name', 'title', 'version', 'parent_theme', 'template') as $prop) { $theme_data[$prop] = $th->{$prop}; } $theme_data['errors'] = $th->errors(); $pp_config['theme'] = gzcompress(serialize($theme_data)); $pp_config['widgets'] = gzcompress(serialize((array) get_option('sidebars_widgets'))); } if (file_exists(ABSPATH . 'wp-admin/includes/plugin.php')) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } if (!empty($ok['active_plugins']) && function_exists('get_plugin_data')) { $active_plugins = array(); foreach (wp_get_active_and_valid_plugins() as $file) { // reduce to relative path for privacy $slug = array(); if ($part = @basename(dirname(dirname(dirname($file))))) { $slug[] = $part; } if ($part = @basename(dirname(dirname($file)))) { $slug[] = $part; } if ($part = @basename(dirname($file))) { $slug[] = $part; } $slug[] = basename($file); $slug = implode('/', $slug); $active_plugins[$slug] = array_diff_key(get_plugin_data($file), array_fill_keys(array('Author', 'AuthorURI', 'TextDomain', 'DomainPath', 'Title', 'AuthorName', 'Description'), true)); } $pp_config['active_plugins'] = gzcompress(serialize($active_plugins)); if (function_exists('get_dropins')) { $pp_config['dropins'] = gzcompress(serialize(get_dropins())); } } if (!empty($ok['installed_plugins']) && function_exists('get_plugins')) { if ($installed_plugins = get_plugins()) { foreach (array_keys($installed_plugins) as $key) { $installed_plugins[$key] = array_diff_key($installed_plugins[$key], array_fill_keys(array('Author', 'AuthorURI', 'TextDomain', 'DomainPath', 'Title', 'AuthorName', 'Description', 'PluginURI', 'Network'), true)); } $pp_config['installed_plugins'] = gzcompress(serialize($installed_plugins)); } } // if uploading for a specific post or term if (!empty($args['term_taxonomy_id']) && !empty($ok['post_data'])) { $pp_config['term_data'] = gzcompress(serialize($wpdb->get_results($wpdb->prepare("SELECT term_taxonomy_id, taxonomy, term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d", $args['term_taxonomy_id']), ARRAY_A))); } if (!empty($args['post_id']) && !empty($ok['post_data'])) { $pp_config['post_data'] = gzcompress(serialize($wpdb->get_row($wpdb->prepare("SELECT ID, post_type, post_author, post_status, post_parent FROM {$wpdb->posts} WHERE ID = %d LIMIT 1", $args['post_id'])))); $post_terms = $wpdb->get_results($wpdb->prepare("SELECT tr.term_taxonomy_id, tr.object_id, tt.taxonomy, tt.term_id FROM {$wpdb->term_relationships} AS tr INNER JOIN {$wpdb->term_taxonomy} AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id = %d ORDER BY tt.taxonomy, tt.term_taxonomy_id", $args['post_id']), ARRAY_A); $pp_config['post_terms'] = gzcompress(serialize($post_terms)); if (!empty($ok['pp_permissions'])) { if (!empty($wpdb->pp_conditions) && !empty($pp_config['post_terms'])) { $pp_config['pp_post_conditions'] = gzcompress(serialize($wpdb->get_results("SELECT * FROM {$wpdb->pp_conditions} WHERE scope = 'term' AND item_id IN ('" . implode("','", array_keys($post_terms)) . "') ORDER BY item_source, item_id, attribute, scope", ARRAY_N))); } } } if (!empty($ok['pp_permissions'])) { $pp_config['ppc_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id as id, agent_id AS agent, agent_type AS a_type, role_name as r, assigner_id as by_id FROM {$wpdb->ppc_roles} ORDER BY assignment_id DESC LIMIT 5000"))); $pp_config['ppc_exceptions'] = gzcompress(serialize($wpdb->get_results("SELECT e.*, COUNT(i.eitem_id) AS count FROM {$wpdb->ppc_exceptions} AS e INNER JOIN {$wpdb->ppc_exception_items} AS i ON e.exception_id = i.exception_id GROUP BY e.exception_id ORDER BY e.exception_id DESC LIMIT 5000", ARRAY_N))); $pp_config['ppc_exception_items'] = gzcompress(serialize($wpdb->get_results("SELECT eitem_id AS eitem, exception_id AS eid, item_id AS item, assign_for AS a_for, inherited_from AS inh FROM {$wpdb->ppc_exception_items} ORDER BY eitem_id DESC LIMIT 10000", ARRAY_N))); } if (!empty($ok['pp_groups'])) { $pp_config['pp_groups'] = gzcompress(serialize($wpdb->get_results("SELECT ID, group_name AS gname, metagroup_id AS mid, metagroup_type AS mtype FROM {$wpdb->pp_groups} ORDER BY ID DESC LIMIT 1000", ARRAY_N))); if (PP_MULTISITE) { $wpdb->pp_groups_netwide = $wpdb->base_prefix . 'pp_groups'; if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->pp_groups_netwide}'"))) { $pp_config['pp_net_groups'] = gzcompress(serialize($wpdb->get_results("SELECT ID, group_name AS gname, metagroup_id AS mid, metagroup_type AS mtype FROM {$wpdb->pp_groups_netwide} ORDER BY ID DESC LIMIT 1000", ARRAY_N))); } } if (!empty($wpdb->pp_circles)) { $pp_config['pp_circles'] = gzcompress(serialize($wpdb->get_results("SELECT * FROM {$wpdb->pp_circles} ORDER BY group_type, group_id", ARRAY_N))); } } if (!empty($ok['pp_group_members'])) { $pp_config['pp_wp_group_members'] = gzcompress(serialize($wpdb->get_results("SELECT gm.group_id AS g, gm.user_id AS u FROM {$wpdb->pp_group_members} AS gm INNER JOIN {$wpdb->pp_groups} AS g ON gm.group_id = g.ID AND g.metagroup_type = 'wp_role' ORDER BY gm.add_date_gmt DESC LIMIT 5000", ARRAY_N))); $pp_config['pp_group_members'] = gzcompress(serialize($wpdb->get_results("SELECT gm.group_id AS g, gm.user_id AS u FROM {$wpdb->pp_group_members} AS gm INNER JOIN {$wpdb->pp_groups} AS g ON gm.group_id = g.ID AND g.metagroup_type != 'wp_role' ORDER BY gm.add_date_gmt DESC LIMIT 2500", ARRAY_N))); if (PP_MULTISITE) { $wpdb->pp_group_members_netwide = $wpdb->base_prefix . 'pp_group_members'; if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->pp_group_members_netwide}'"))) { $pp_config['pp_net_group_members'] = gzcompress(serialize($wpdb->get_results("SELECT group_id AS g, user_id AS u FROM {$wpdb->pp_group_members_netwide} LIMIT 2500", ARRAY_N))); } } } $wpdb->ppi_imported = $wpdb->prefix . 'ppi_imported'; if (@mysql_num_rows(@mysql_query("SHOW TABLES LIKE '{$wpdb->ppi_imported}'"))) { $wpdb->ppi_runs = $wpdb->prefix . 'ppi_runs'; $wpdb->ppi_errors = $wpdb->prefix . 'ppi_errors'; } if (!empty($wpdb->ppi_runs)) { if (!empty($ok['ppc_roles']) || !empty($ok['pp_imports'])) { if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->ppi_runs}'"))) { $pp_old['ppi_runs'] = gzcompress(serialize($wpdb->get_results("SELECT * FROM {$wpdb->ppi_runs} ORDER BY import_date", ARRAY_N))); } if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->ppi_errors}'"))) { $pp_old['ppi_errors'] = gzcompress(serialize($wpdb->get_results("SELECT * FROM {$wpdb->ppi_errors} ORDER BY run_id, ID", ARRAY_N))); } } if (!empty($ok['pp_imports'])) { if ($ppi_ver = (array) get_option('ppi_version')) { $prefix = PP_MULTISITE ? $wpdb->base_prefix : $wpdb->prefix; if ($wpdb->query("SHOW COLUMNS FROM {$wpdb->ppi_imported} LIKE 'source_tbl'")) { if (defined('PPI_LEGACY_UPLOAD') && $wpdb->query("SHOW COLUMNS FROM {$wpdb->ppi_imported} LIKE 'source_table'")) { $extra_cols = ", REPLACE( source_table, '{$prefix}', '' ), REPLACE( import_table, '{$prefix}', '' )"; } else { $extra_cols = ''; } $pp_old['ppi_imported'] = gzcompress(serialize($wpdb->get_results("SELECT run_id, source_tbl AS src, source_id AS src_id, rel_id, import_tbl AS tbl, import_id AS to_id{$extra_cols} FROM {$wpdb->ppi_imported} ORDER BY run_id DESC, source_tbl, source_id LIMIT 25000", ARRAY_N))); } else { $pp_old['ppi_imported'] = gzcompress(serialize($wpdb->get_results("SELECT run_id, REPLACE( source_table, '{$prefix}', '' ) AS src, source_id AS src_id, rel_id, REPLACE( import_table, '{$prefix}', '' ) AS tbl, import_id AS to_id FROM {$wpdb->ppi_imported} ORDER BY run_id DESC, source_table, source_id LIMIT 25000", ARRAY_N))); } } } } if (!empty($ok['pp_imports'])) { // RS $wpdb->user2role2object_rs = $wpdb->prefix . 'user2role2object_rs'; $wpdb->role_scope_rs = $wpdb->prefix . 'role_scope_rs'; $wpdb->groups_rs = $wpdb->prefix . 'groups_rs'; $wpdb->user2group_rs = $wpdb->prefix . 'user2group_rs'; //if ( ! empty( $ok['pp_options'] ) ) { $pp_old['rs_options'] = gzcompress(serialize($wpdb->get_results("SELECT option_name AS name, option_value AS val, option_id AS id FROM {$wpdb->options} WHERE option_name LIKE 'scoper_%' ORDER BY option_name", ARRAY_N))); if (PP_MULTISITE) { $pp_old['rs_net_options'] = gzcompress(serialize($wpdb->get_results("SELECT meta_key AS mkey, meta_value AS val, site_id AS site, meta_id AS mid FROM {$sitemeta_table} WHERE meta_key LIKE 'scoper_%' ORDER BY meta_key", ARRAY_N))); } //} if (!empty($ok['pp_permissions'])) { if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->user2role2object_rs}'"))) { $pp_old['rs_wp_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, user_id, role_name AS r, date_limited AS dlim, content_date_limited AS clim FROM {$wpdb->user2role2object_rs} WHERE scope = 'blog' AND role_type = 'wp' ORDER BY assignment_id DESC LIMIT 5000", ARRAY_N))); $pp_old['rs_site_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, user_id, group_id, role_name AS r, date_limited AS dlim, content_date_limited AS clim FROM {$wpdb->user2role2object_rs} WHERE scope = 'blog' ORDER BY assignment_id DESC LIMIT 2500", ARRAY_N))); $pp_old['rs_term_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, user_id, group_id, role_name AS r, src_or_tx_name AS st_name, obj_or_term_id AS ot_id, assign_for AS a_for, inherited_from AS inh, date_limited AS dlim, content_date_limited AS clim FROM {$wpdb->user2role2object_rs} WHERE scope = 'term' ORDER BY assignment_id DESC LIMIT 1000", ARRAY_N))); $pp_old['rs_obj_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, user_id, group_id, role_name AS r, obj_or_term_id AS ot_id, assign_for AS a_for, inherited_from AS inh, date_limited AS dlim FROM {$wpdb->user2role2object_rs} WHERE scope = 'object' ORDER BY assignment_id DESC LIMIT 10000", ARRAY_N))); } if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->role_scope_rs}'"))) { $pp_old['rs_restrictions'] = gzcompress(serialize($wpdb->get_results("SELECT requirement_id AS id, role_name AS r, topic AS topic, src_or_tx_name AS st_name, obj_or_term_id AS ot_id, max_scope, require_for AS r_for, inherited_from AS inh FROM {$wpdb->role_scope_rs} ORDER BY requirement_id DESC LIMIT 5000", ARRAY_N))); } } if (!empty($ok['pp_groups'])) { if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->groups_rs}'"))) { $pp_old['rs_groups'] = gzcompress(serialize($wpdb->get_results("SELECT ID, group_name AS name, group_meta_id AS gmid FROM {$wpdb->groups_rs} ORDER BY ID DESC LIMIT 500", ARRAY_N))); } if (PP_MULTISITE) { $wpdb->net_groups_rs = $wpdb->base_prefix . 'groups_rs'; if (!empty($ok['pp_groups']) && mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->net_groups_rs}'"))) { $pp_old['rs_net_groups'] = gzcompress(serialize($wpdb->get_results("SELECT ID, group_name AS name, group_meta_id AS gmid FROM {$wpdb->net_groups_rs} ORDER BY ID DESC LIMIT 500", ARRAY_N))); } } } if (!empty($ok['pp_group_members']) && mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->user2group_rs}'"))) { $pp_old['rs_group_members'] = gzcompress(serialize($wpdb->get_results("SELECT group_id AS gid, user_id AS uid FROM {$wpdb->user2group_rs} LIMIT 5000", ARRAY_N))); } // PP One $wpdb->pp_roles = $wpdb->prefix . 'pp_roles'; $wpdb->pp_conditions = $wpdb->prefix . 'pp_conditions'; $wpdb->pp_circles = $wpdb->prefix . 'pp_circles'; if (!empty($ok['pp_groups']) && empty($pp_config['pp_circles']) && mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->pp_circles}'"))) { $pp_old['pp_circles'] = gzcompress(serialize($wpdb->get_results("SELECT * FROM {$wpdb->pp_circles} ORDER BY group_type, group_id", ARRAY_N))); } if (!empty($ok['pp_permissions']) && mysql_num_rows(mysql_query("SHOW TABLES LIKE '{$wpdb->pp_roles}'"))) { $pp_old['pp1_site_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, group_type AS gtype, group_id AS gid, role_name AS r FROM {$wpdb->pp_roles} WHERE scope = 'site' ORDER BY assignment_id DESC LIMIT 5000", ARRAY_N))); $pp_old['pp1_term_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, group_type AS gtype, group_id AS gid, role_name AS r, item_id, assign_for AS a_for, inherited_from AS inh FROM {$wpdb->pp_roles} WHERE scope = 'term' ORDER BY assignment_id DESC LIMIT 1000", ARRAY_N))); $pp_old['pp1_obj_roles'] = gzcompress(serialize($wpdb->get_results("SELECT assignment_id AS id, group_type AS gtype, group_id AS gid, role_name AS r, item_id, assign_for AS a_for, inherited_from AS inh FROM {$wpdb->pp_roles} WHERE scope = 'object' ORDER BY assignment_id DESC LIMIT 10000", ARRAY_N))); } } if (!empty($ok['error_log'])) { $base_path = str_replace('\\', '/', ABSPATH); $base_path_back = str_replace('/', '\\', ABSPATH); if ($path = _pp_get_errlog_path()) { $size = filesize($path); if (defined('PPI_ERROR_LOG_UPLOAD_LIMIT') && PPI_ERROR_LOG_UPLOAD_LIMIT > 1000 && PPI_ERROR_LOG_UPLOAD_LIMIT < 750000) { $limit = PPI_ERROR_LOG_UPLOAD_LIMIT; } else { $limit = 125000; } // with typical compression rate of 15 and base64 encoding, compressed size ~ 10k if ($size) { if ($size > $limit) { $fp = fopen($path, 'r'); fseek($fp, $size - $limit); $data = fread($fp, $size); } else { $data = file_get_contents($path); } // trim to relative paths for privacy if ($base_path) { $data = str_replace($base_path, './', $data); } if ($base_path_back) { $data = str_replace($base_path_back, '.\\', $data); } $error_log = base64_encode(gzcompress($data)); } } } else { $error_log = ''; } $hashes = array(); foreach (array('pp_config', 'pp_old', 'error_log') as $var) { if (!empty(${$var})) { if (PP_MULTISITE && 'error_log' != $var) { global $blog_id; ${$var}['site'] = $blog_id; } ${$var} = base64_encode(gzcompress(serialize(${$var}))); $hashes[$var] = md5(${$var}); } unset($var); } if ($response = PP_Plugin_Status::callhome('config-check', $request_vars, $hashes)) { $need_data = json_decode($response); } else { $need_data = false; } if ($need_data) { $post_data = array(); // add each data array to $post_data unless config-check did not indicate it is needed if (in_array('pp_config', $need_data)) { $post_data['pp_config'] = $pp_config; } if (in_array('pp_old', $need_data)) { $post_data['pp_old'] = $pp_old; } if (in_array('error_log', $need_data)) { $post_data['error_log'] = $error_log; } $response = PP_Plugin_Status::callhome('config-upload', $request_vars, $post_data); return $response; } else { return -1; } }
private function init_plugins() { if (!isset($this->installed_plugins) || !$this->installed_plugins) { if (!function_exists('get_plugin_data')) { include_once ABSPATH . '/wp-admin/includes/plugin.php'; } if (function_exists('get_plugin_data')) { $active_plugins = wp_get_active_and_valid_plugins(); foreach ($active_plugins as $plugin) { $this->add_installed_plugin($plugin); } } } }
function layers_get_plugins() { $active_plugins = wp_get_active_and_valid_plugins(); $layers_plugins = array(); foreach ((array) $active_plugins as $plugin_key) { $plugin_data = get_plugin_data($plugin_key); if (isset($plugin_data['Layers Plugin']) && 'true' == strtolower($plugin_data['Layers Plugin'])) { $layers_plugins[$plugin_key] = $plugin_data; } } return $layers_plugins; }
function vp_register_hooks() { global $versionPressContainer; /** @var Committer $committer */ $committer = $versionPressContainer->resolve(VersionPressServices::COMMITTER); /** @var Mirror $mirror */ $mirror = $versionPressContainer->resolve(VersionPressServices::MIRROR); /** @var DbSchemaInfo $dbSchemaInfo */ $dbSchemaInfo = $versionPressContainer->resolve(VersionPressServices::DB_SCHEMA); /** @var VpidRepository $vpidRepository */ $vpidRepository = $versionPressContainer->resolve(VersionPressServices::VPID_REPOSITORY); /** @var WpdbMirrorBridge $wpdbMirrorBridge */ $wpdbMirrorBridge = $versionPressContainer->resolve(VersionPressServices::WPDB_MIRROR_BRIDGE); /** @var \VersionPress\Database\Database $database */ $database = $versionPressContainer->resolve(VersionPressServices::DATABASE); /** @var ActionsInfoProvider $actionsInfoProvider */ $actionsInfoProvider = $versionPressContainer->resolve(VersionPressServices::ACTIONSINFO_PROVIDER_ACTIVE_PLUGINS); if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $plugins = wp_get_active_and_valid_plugins(); foreach ($plugins as $pluginFile) { $pluginDir = dirname($pluginFile); $hooksFile = $pluginDir . '/.versionpress/hooks.php'; if (file_exists($hooksFile)) { require_once $hooksFile; } } add_filter('update_feedback', function () { touch(ABSPATH . 'versionpress.maintenance'); }); WordPressMissingFunctions::pipeAction('_core_updated_successfully', 'vp_wordpress_updated'); add_action('activated_plugin', function ($pluginFile) { $plugins = get_plugins(); $pluginName = $plugins[$pluginFile]['Name']; do_action('vp_plugin_changed', 'activate', $pluginFile, $pluginName); }); add_action('deactivated_plugin', function ($pluginFile) { $plugins = get_plugins(); $pluginName = $plugins[$pluginFile]['Name']; do_action('vp_plugin_changed', 'deactivate', $pluginFile, $pluginName); }); add_action('upgrader_process_complete', function ($upgrader, $hook_extra) { if ($hook_extra['type'] === 'theme') { $themes = isset($hook_extra['bulk']) && $hook_extra['bulk'] === true ? $hook_extra['themes'] : [$upgrader->result['destination_name']]; foreach ($themes as $stylesheet) { $themeName = wp_get_theme($stylesheet)->get('Name'); if ($themeName === $stylesheet && isset($upgrader->skin->api, $upgrader->skin->api->name)) { $themeName = $upgrader->skin->api->name; } // action can be "install" or "update", see WP_Upgrader and search for `'hook_extra' =>` $action = $hook_extra['action']; do_action('vp_theme_changed', $action, $stylesheet, $themeName); } } if (!($hook_extra['type'] === 'plugin' && $hook_extra['action'] === 'update')) { return; // handled by different hook } if (isset($hook_extra['bulk']) && $hook_extra['bulk'] === true) { $pluginFiles = $hook_extra['plugins']; } else { $pluginFiles = [$hook_extra['plugin']]; } $plugins = get_plugins(); foreach ($pluginFiles as $pluginFile) { $pluginName = $plugins[$pluginFile]['Name']; do_action('vp_plugin_changed', 'update', $pluginFile, $pluginName); } }, 10, 2); add_filter('upgrader_pre_install', function ($_, $hook_extra) { if (!(isset($hook_extra['type']) && $hook_extra['type'] === 'plugin' && $hook_extra['action'] === 'install')) { return; } $pluginsBeforeInstallation = get_plugins(); $postInstallHook = function ($_, $hook_extra) use($pluginsBeforeInstallation, &$postInstallHook) { if (!($hook_extra['type'] === 'plugin' && $hook_extra['action'] === 'install')) { return; } wp_cache_delete('plugins', 'plugins'); $pluginsAfterInstallation = get_plugins(); $installedPlugins = array_diff_key($pluginsAfterInstallation, $pluginsBeforeInstallation); foreach ($installedPlugins as $pluginFile => $plugin) { do_action('vp_plugin_changed', 'install', $pluginFile, $plugin['Name']); } remove_filter('upgrader_post_install', $postInstallHook); }; add_filter('upgrader_post_install', $postInstallHook, 10, 2); }, 10, 2); add_filter('upgrader_pre_download', function ($reply, $_, $upgrader) use($committer) { if (!isset($upgrader->skin->language_update)) { return $reply; } $languages = get_available_languages(); $postInstallHook = function ($_, $hook_extra) use($committer, $languages, &$postInstallHook) { if (!isset($hook_extra['language_update_type'])) { return; } $type = $hook_extra['language_update_type']; $languageCode = $hook_extra['language_update']->language; $name = $type === "core" ? null : $hook_extra['language_update']->slug; $action = in_array($languageCode, $languages) ? "update" : "install"; do_action('vp_translation_changed', $action, $languageCode, $type, $name); remove_filter('upgrader_post_install', $postInstallHook); }; add_filter('upgrader_post_install', $postInstallHook, 10, 2); return false; }, 10, 3); add_action('switch_theme', function () use($committer) { if (defined('WP_CLI') && WP_CLI) { wp_remote_get(admin_url()); // } else { $committer->disableCommit(); // the change will be committed on next load } }); add_action('after_switch_theme', function () use($committer) { $theme = wp_get_theme(); $stylesheet = $theme->get_stylesheet(); $themeName = $theme->get('Name'); do_action('vp_theme_changed', 'switch', $stylesheet, $themeName); }); function _vp_get_language_name_by_code($code) { require_once ABSPATH . 'wp-admin/includes/translation-install.php'; $translations = wp_get_available_translations(); return isset($translations[$code]) ? $translations[$code]['native_name'] : 'English (United States)'; } add_action('add_option_WPLANG', function ($option, $value) use($committer) { $defaultLanguage = defined('WPLANG') ? WPLANG : ''; if ($value === $defaultLanguage) { return; // It's just submitted settings form without changing language } do_action('vp_translation_changed', 'activate', $value); }, 10, 2); add_action('update_option_WPLANG', function ($oldValue, $newValue) use($committer) { do_action('vp_translation_changed', 'activate', $newValue); }, 10, 2); add_action('wp_update_nav_menu_item', function ($menu_id, $menu_item_db_id) use($committer) { $key = 'menu-item-' . $menu_item_db_id; if (defined('DOING_AJAX') && DOING_AJAX && isset($_POST['action']) && $_POST['action'] === 'add-menu-item') { $committer->postponeCommit($key); $committer->commit(); } elseif (isset($_POST['action']) && $_POST['action'] === 'update') { $committer->usePostponedChangeInfos($key); } }, 10, 2); add_action('pre_delete_term', function ($termId, $taxonomy) use($committer, $vpidRepository, $dbSchemaInfo, $actionsInfoProvider) { $termVpid = $vpidRepository->getVpidForEntity('term', $termId); $term = get_term($termId, $taxonomy); $termEntityInfo = $dbSchemaInfo->getEntityInfo('term'); $actionsInfo = $actionsInfoProvider->getActionsInfo('term'); $changeInfo = new EntityChangeInfo($termEntityInfo, $actionsInfo, 'delete', $termVpid, ['VP-Term-Name' => $term->name, 'VP-Term-Taxonomy' => $taxonomy]); $committer->forceChangeInfo($changeInfo); }, 10, 2); add_filter('wp_save_image_editor_file', function ($saved, $filename, $image, $mime_type, $post_id) use($vpidRepository, $committer, $dbSchemaInfo, $actionsInfoProvider) { $vpid = $vpidRepository->getVpidForEntity('post', $post_id); $post = get_post($post_id); $actionsInfo = $actionsInfoProvider->getActionsInfo('post'); $changeInfo = new EntityChangeInfo($dbSchemaInfo->getEntityInfo('post'), $actionsInfo, 'edit', $vpid, ['VP-Post-Type' => $post->post_type, 'VP-Post-Title' => $post->post_title]); $committer->forceChangeInfo($changeInfo); }, 10, 5); add_filter('plugin_install_action_links', function ($links, $plugin) { $compatibility = CompatibilityChecker::testCompatibilityBySlug($plugin['slug']); if ($compatibility === CompatibilityResult::COMPATIBLE) { $cssClass = 'vp-compatible'; $compatibilityAdjective = 'Compatible'; } elseif ($compatibility === CompatibilityResult::INCOMPATIBLE) { $cssClass = 'vp-incompatible'; // @codingStandardsIgnoreLine $compatibilityAdjective = '<a href="http://docs.versionpress.net/en/integrations/plugins" target="_blank" title="This plugin is not compatible with VersionPress. These plugins will not work correctly when used together.">Incompatible</a>'; } else { $cssClass = 'vp-untested'; // @codingStandardsIgnoreLine $compatibilityAdjective = '<a href="http://docs.versionpress.net/en/integrations/plugins" target="_blank" title="This plugin was not yet tested with VersionPress. Some functionality may not work as intended.">Untested</a>'; } // @codingStandardsIgnoreLine $compatibilityNotice = '<span class="vp-compatibility %s" data-plugin-name="%s"><strong>%s</strong> with VersionPress</span>'; $links[] = sprintf($compatibilityNotice, $cssClass, $plugin['name'], $compatibilityAdjective); return $links; }, 10, 2); add_filter('plugin_row_meta', function ($plugin_meta, $plugin_file, $plugin_data, $status) { if ($status === "dropins") { return $plugin_meta; } $compatibility = CompatibilityChecker::testCompatibilityByPluginFile($plugin_file); if ($compatibility === CompatibilityResult::COMPATIBLE) { $cssClass = 'vp-compatible'; $compatibilityAdjective = 'Compatible'; } elseif ($compatibility === CompatibilityResult::INCOMPATIBLE) { $cssClass = 'vp-incompatible'; // @codingStandardsIgnoreLine $compatibilityAdjective = '<a href="http://docs.versionpress.net/en/integrations/plugins" target="_blank" title="This plugin is not compatible with VersionPress. These plugins will not work correctly when used together.">Incompatible</a>'; } elseif ($compatibility === CompatibilityResult::UNTESTED) { $cssClass = 'vp-untested'; // @codingStandardsIgnoreLine $compatibilityAdjective = '<a href="http://docs.versionpress.net/en/integrations/plugins" target="_blank" title="This plugin was not yet tested with VersionPress. Some functionality may not work as intended.">Untested</a>'; } else { return $plugin_meta; } // @codingStandardsIgnoreLine $compatibilityNotice = '<span class="vp-compatibility %s" data-plugin-name="%s"><strong>%s</strong> with VersionPress</span>'; $plugin_meta[] = sprintf($compatibilityNotice, $cssClass, $plugin_data['Name'], $compatibilityAdjective); return $plugin_meta; }, 10, 4); add_filter('plugin_action_links', function ($actions, $plugin_file) { $compatibility = CompatibilityChecker::testCompatibilityByPluginFile($plugin_file); if (isset($actions['activate'])) { if ($compatibility === CompatibilityResult::UNTESTED) { $actions['activate'] = "<span class=\"vp-plugin-list vp-untested\">{$actions['activate']}</span>"; } elseif ($compatibility === CompatibilityResult::INCOMPATIBLE) { $actions['activate'] = "<span class=\"vp-plugin-list vp-incompatible\">{$actions['activate']}</span>"; } } return $actions; }, 10, 2); add_action('vp_revert', function ($modifiedFiles) { // We have to flush the rewrite rules in the next request, because // in the current one the changed rewrite rules are not yet effective. set_transient('vp_flush_rewrite_rules', 1); vp_flush_regenerable_options(); // Update composer dependencies if (array_search('composer.lock', $modifiedFiles) || array_search('composer.json', $modifiedFiles)) { putenv('COMPOSER_HOME=' . VP_PROJECT_ROOT . '/vendor/bin/composer'); $originalCwd = getcwd(); chdir(VP_PROJECT_ROOT); $input = new \Symfony\Component\Console\Input\ArrayInput(['command' => 'install']); $output = new \Symfony\Component\Console\Output\NullOutput(); $application = new \Composer\Console\Application(); $application->setAutoExit(false); // prevent `$application->run` method from exitting the script $application->run($input, $output); $application->getComposer(); chdir($originalCwd); } }); add_action('pre_delete_term', function ($term, $taxonomy) use($database, $wpdbMirrorBridge) { if (!is_taxonomy_hierarchical($taxonomy)) { return; } $term = get_term($term, $taxonomy); if (is_wp_error($term)) { return; } $wpdbMirrorBridge->update($database->term_taxonomy, ['parent' => $term->parent], ['parent' => $term->term_id]); }, 10, 2); add_action('before_delete_post', function ($postId) use($database, $wpdbMirrorBridge) { // Fixing bug in WP (#34803) and WP-CLI (#2246); $post = get_post($postId); if (!is_wp_error($post) && $post->post_type === 'nav_menu_item') { $newParent = get_post_meta($post->ID, '_menu_item_menu_item_parent', true); $wpdbMirrorBridge->update($database->postmeta, ['meta_value' => $newParent], ['meta_key' => '_menu_item_menu_item_parent', 'meta_value' => $post->ID]); $database->update($database->postmeta, ['meta_value' => $newParent], ['meta_key' => '_menu_item_menu_item_parent', 'meta_value' => $post->ID]); } }); //---------------------------------------- // URL and WP-CLI "hooks" //---------------------------------------- $requestDetector = new \VersionPress\Utils\RequestDetector(); if ($requestDetector->isThemeDeleteRequest()) { $themeIds = $requestDetector->getThemeStylesheets(); foreach ($themeIds as $stylesheet) { $themeName = wp_get_theme($stylesheet)->get('Name'); do_action('vp_theme_changed', 'delete', $stylesheet, $themeName); } } if ($requestDetector->isPluginDeleteRequest()) { $pluginNames = $requestDetector->getPluginNames(); $plugins = get_plugins(); foreach ($pluginNames as $plugin) { do_action('vp_plugin_changed', 'delete', $plugin, $plugins[$plugin]['Name']); } } if ($requestDetector->isCoreLanguageUninstallRequest()) { $languageCode = $requestDetector->getLanguageCode(); do_action('vp_translation_changed', 'uninstall', $languageCode); } if (basename($_SERVER['PHP_SELF']) === 'theme-editor.php' && isset($_GET['updated']) && $_GET['updated'] === 'true') { $stylesheet = $_GET['theme']; $themeName = wp_get_theme($stylesheet)->get('Name'); do_action('vp_theme_changed', 'edit', $stylesheet, $themeName); } if (basename($_SERVER['PHP_SELF']) === 'plugin-editor.php' && (isset($_POST['action']) && $_POST['action'] === 'update' || isset($_GET['liveupdate']))) { $committer->disableCommit(); } if (basename($_SERVER['PHP_SELF']) === 'plugin-editor.php' && isset($_GET['a']) && $_GET['a'] === 'te') { if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $editedFile = $_GET['file']; $editedFilePathParts = preg_split("~[/\\\\]~", $editedFile); $plugins = get_plugins(); $pluginNames = array_keys($plugins); $bestRank = 0; $bestMatch = ""; foreach ($pluginNames as $plugin) { $rank = 0; $pluginPathParts = preg_split("~[/\\\\]~", $plugin); $maxEqualParts = min(count($editedFilePathParts), count($pluginPathParts)); for ($part = 0; $part < $maxEqualParts; $part++) { if ($editedFilePathParts[$part] !== $pluginPathParts[$part]) { break; } $rank += 1; } if ($rank > $bestRank) { $bestRank = $rank; $bestMatch = $plugin; } } do_action('vp_plugin_changed', 'edit', $bestMatch, $plugins[$bestMatch]['Name']); } add_filter('cron_schedules', function ($schedules) use($dbSchemaInfo) { $intervals = $dbSchemaInfo->getIntervalsForFrequentlyWrittenEntities(); foreach ($intervals as $interval) { if (isset($schedules[$interval])) { continue; } $seconds = strtotime($interval, 0); $schedules[$interval] = ['interval' => $seconds, 'display' => $interval]; } return $schedules; }); $r = $dbSchemaInfo->getRulesForFrequentlyWrittenEntities(); $groupedByInterval = []; foreach ($r as $entityName => $rules) { foreach ($rules as $rule) { $groupedByInterval[$rule['interval']][$entityName][] = $rule; } } foreach ($groupedByInterval as $interval => $allRulesInInterval) { $actionName = "vp_commit_frequently_written_entities_{$interval}"; if (!wp_next_scheduled($actionName)) { wp_schedule_event(time(), $interval, $actionName); } add_action($actionName, function () use($allRulesInInterval) { vp_save_frequently_written_entities($allRulesInInterval); }); } if (!function_exists('get_plugins')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } register_shutdown_function([$committer, 'commit']); }
/** * Return array of active plugins for current instance * * Improvement over wp_get_active_and_valid_plugins() which doesn't return any plugins when in MS * * @method get_active_plugins * @for Utility * * @since 0.2.0 */ public static function get_active_plugins() { $mu_plugins = (array) wp_get_mu_plugins(); $regular_plugins = (array) wp_get_active_and_valid_plugins(); if (is_multisite()) { $network_plugins = (array) wp_get_active_network_plugins(); } else { $network_plugins = array(); } return array_merge($regular_plugins, $mu_plugins, $network_plugins); }
/** * Get active GravityView Extensions and Gravity Forms Add-ons to help debug issues. * * @since 1.15 * @return string List of active extensions related to GravityView or Gravity Forms, separated by HTML line breaks */ private static function get_related_plugins_and_extensions() { if (!function_exists('wp_get_active_and_valid_plugins')) { return 'Running < WP 3.0'; } $extensions = get_site_transient(self::related_plugins_key); if (empty($extensions)) { $active_plugins = wp_get_active_and_valid_plugins(); $extensions = array(); foreach ($active_plugins as $active_plugin) { // Match gravityview, gravity-forms, gravityforms, gravitate if (!preg_match('/(gravityview|gravity-?forms|gravitate)/ism', $active_plugin)) { continue; } $plugin_data = get_plugin_data($active_plugin); $extensions[] = sprintf('%s %s', $plugin_data['Name'], $plugin_data['Version']); } if (!empty($extensions)) { set_site_transient(self::related_plugins_key, $extensions, HOUR_IN_SECONDS); } else { return 'There was an error fetching related plugins.'; } } return implode('<br />', $extensions); }
/** * Collect system information for support * * @return array of system data for support * @author Peter Chester */ public static function getSupportStats() { $user = wp_get_current_user(); $plugins = array(); if (function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_and_valid_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $plugins[] = $plugin; } } $network_plugins = array(); if (is_multisite() && function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_network_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $network_plugins[] = $plugin; } } $mu_plugins = array(); if (function_exists('get_mu_plugins')) { $mu_plugins_raw = get_mu_plugins(); foreach ($mu_plugins_raw as $k => $v) { $plugin = $v['Name']; if (!empty($v['Version'])) { $plugin .= sprintf(' version %s', $v['Version']); } if (!empty($v['Author'])) { $plugin .= sprintf(' by %s', $v['Author']); } if (!empty($v['AuthorURI'])) { $plugin .= sprintf('(%s)', $v['AuthorURI']); } $mu_plugins[] = $plugin; } } $keys = apply_filters('tribe-pue-install-keys', array()); $systeminfo = array('url' => 'http://' . $_SERVER["HTTP_HOST"], 'name' => $user->display_name, 'email' => $user->user_email, 'install keys' => $keys, 'WordPress version' => get_bloginfo('version'), 'PHP version' => phpversion(), 'plugins' => $plugins, 'network plugins' => $network_plugins, 'mu plugins' => $mu_plugins, 'theme' => wp_get_theme()->get('Name'), 'multisite' => is_multisite(), 'settings' => TribeEvents::getOptions()); $systeminfo = apply_filters('tribe-events-pro-support', $systeminfo); return $systeminfo; }
/** * Collect system information for support * * @return array of system data for support */ public function getSupportStats() { $user = wp_get_current_user(); $plugins = array(); if (function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_and_valid_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $plugins[] = $plugin; } } $network_plugins = array(); if (is_multisite() && function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_network_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $network_plugins[] = $plugin; } } $mu_plugins = array(); if (function_exists('get_mu_plugins')) { $mu_plugins_raw = get_mu_plugins(); foreach ($mu_plugins_raw as $k => $v) { $plugin = $v['Name']; if (!empty($v['Version'])) { $plugin .= sprintf(' version %s', $v['Version']); } if (!empty($v['Author'])) { $plugin .= sprintf(' by %s', $v['Author']); } if (!empty($v['AuthorURI'])) { $plugin .= sprintf('(%s)', $v['AuthorURI']); } $mu_plugins[] = $plugin; } } $keys = apply_filters('tribe-pue-install-keys', array()); $systeminfo = array('url' => 'http://' . $_SERVER['HTTP_HOST'], 'name' => $user->display_name, 'email' => $user->user_email, 'install keys' => $keys, 'WordPress version' => get_bloginfo('version'), 'PHP version' => phpversion(), 'plugins' => $plugins, 'network plugins' => $network_plugins, 'mu plugins' => $mu_plugins, 'theme' => wp_get_theme()->get('Name'), 'multisite' => is_multisite(), 'settings' => Tribe__Events__Main::getOptions(), 'WordPress timezone' => get_option('timezone_string', __('Unknown or not set', 'the-events-calendar')), 'server timezone' => date_default_timezone_get()); if ($this->rewrite_rules_purged) { $systeminfo['rewrite rules purged'] = __('Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'the-events-calendar'); } $systeminfo = apply_filters('tribe-events-pro-support', $systeminfo); return $systeminfo; }
/** * @since 3.4 */ function qtranxf_search_config_files() { $found = qtranxf_search_config_files_theme(); $plugins = wp_get_active_and_valid_plugins(); $plugin_dir = WP_PLUGIN_DIR . '/' . qtranxf_plugin_dirname(); //qtranxf_dbg_log('qtranxf_search_config_files: $plugin_dir: ', $plugin_dir); foreach ($plugins as $plugin) { $dir = dirname($plugin); $bnm = basename($dir); //qtranxf_dbg_log('$dir='.$dir.'; $bnm: ',$bnm); if (strpos($bnm, 'qtranslate-x') === 0) { continue; } if ($bnm == basename(QTRANSLATE_DIR)) { continue; } $fn = $dir . '/i18n-config.json'; if (!file_exists($fn)) { $fn = $plugin_dir . '/i18n-config/plugins/' . $bnm . '/i18n-config.json'; if (!file_exists($fn)) { continue; } } $found[] = $fn; } return qtranxf_normalize_config_files($found); }
function qtranxf_find_plugin_config_files(&$fn_bnm, &$fn_qtx, $bnm) { $plugins = wp_get_active_and_valid_plugins(); $fn_bnm = null; if (!qtranxf_find_plugin_by_foder($bnm . '-qtranslate-x', $plugins)) { $fn_bnm = qtranxf_find_plugin_file($bnm . '/i18n-config.json'); while (!$fn_bnm) { $fn_bnm = qtranxf_plugin_dirname() . '/i18n-config/plugins/' . $bnm . '/i18n-config.json'; $fn_bnm = qtranxf_find_plugin_file($fn_bnm); if ($fn_bnm) { break; } $fn_bnm = qtranxf_plugin_dirname() . '/i18n-config/themes/' . $bnm . '/i18n-config.json'; $fn_bnm = qtranxf_find_plugin_file($fn_bnm); break; } } $fn_qtx = null; while (qtranxf_endsWith($bnm, '-qtranslate-x')) { $bnm_qtx = substr($bnm, 0, -13); $plugins = wp_get_active_and_valid_plugins(); $fn_qtx = qtranxf_plugin_dirname() . '/i18n-config/plugins/' . $bnm_qtx . '/i18n-config.json'; $fn_qtx = qtranxf_find_plugin_file($fn_qtx); if ($fn_qtx) { break; } $fn_qtx = qtranxf_plugin_dirname() . '/i18n-config/themes/' . $bnm_qtx . '/i18n-config.json'; $fn_qtx = qtranxf_find_plugin_file($fn_qtx); break; } return $fn_bnm || $fn_qtx; }
public function active_plugin_data() { $active_plugins = wp_get_active_and_valid_plugins(); $output_data = array('Name', 'Version', 'Author', 'PluginURI', 'Description'); if (!empty($active_plugins)) { foreach ($active_plugins as $plugin_file) { $plugin_data = get_plugin_data($plugin_file, true, false); echo '<i> - File:</i> ' . $plugin_file . '<br />'; if (!empty($plugin_data)) { foreach ($output_data as $data_value) { if ($plugin_data[$data_value]) { echo ' - <strong>' . $data_value . ':</strong> ' . $plugin_data[$data_value] . '<br />'; } } } echo '-- <br />'; } } }
/** * Determines whether or not BuddyPress is installed. * * @package s2Member\Utilities * @since 110720 * * @param bool $query_active_plugins Optional. If true, this conditional will query active plugins too. * Defaults to true if {@link s2Member\WS_PLUGIN__S2MEMBER_ONLY} is true, else false. * * @return bool True if BuddyPress is installed, else false. */ public static function bp_is_installed($query_active_plugins = NULL) { if (defined('BP_VERSION') && did_action('bp_core_loaded')) { return TRUE; } // Quickest/easiest way to determine. $s2o = defined('WS_PLUGIN__S2MEMBER_ONLY') && WS_PLUGIN__S2MEMBER_ONLY ? TRUE : FALSE; if ($query_active_plugins = !isset($query_active_plugins) && $s2o ? TRUE : $query_active_plugins) { $buddypress = 'buddypress/bp-loader.php'; // BuddyPress. $active_plugins = is_multisite() ? wp_get_active_network_plugins() : array(); $active_plugins = array_unique(array_merge($active_plugins, wp_get_active_and_valid_plugins())); foreach ($active_plugins as $active_plugin) { // Search. if (plugin_basename($active_plugin) === $buddypress) { return TRUE; } } // BuddyPress active. } return FALSE; // Default return false. }
/** * Returns a formatted HTML list of all active plugins * * @return string */ private function get_current_plugins() { $updates_avail = get_site_transient('update_plugins'); $msg = ''; foreach (wp_get_active_and_valid_plugins() as $plugin) { $plugin_data = get_plugin_data($plugin); $plugin_file = str_replace(trailingslashit(WP_PLUGIN_DIR), '', $plugin); if (isset($updates_avail->response[$plugin_file])) { $msg .= '<i class="icon-close1"></i> '; } $msg .= '<a href="' . $plugin_data['PluginURI'] . '">' . $plugin_data['Name'] . '</a> v' . $plugin_data['Version'] . '<br/>'; } return $msg; }
/** * Track plugin activity in MixPanel * * @param string * * @return array */ function inboundrocket_track_plugin_activity($activity_desc, $custom_properties = array()) { if (!function_exists('curl_init')) { return false; } $inboundrocket_user = inboundrocket_get_current_user(); global $wp_version; global $current_user; get_currentuserinfo(); $user_id = md5(get_site_url()); $plugins = wp_get_active_and_valid_plugins(); $default_properties = array("distinct_id" => $user_id, '$wp-url' => get_site_url(), '$wp-version' => $wp_version, '$ir-version' => INBOUNDROCKET_PLUGIN_VERSION, '$wp-plugins' => $plugins); $properties = array_merge((array) $default_properties, (array) $custom_properties); $mp = Mixpanel::getInstance(INBOUNDROCKET_MIXPANEL_PROJECT_TOKEN, array("debug" => true)); $mp->track($activity_desc, $properties); return true; }
/** * Collect system information for support * * @return array of system data for support */ public function getSupportStats() { global $wpdb; $user = wp_get_current_user(); $plugins = array(); if (function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_and_valid_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $plugins[] = $plugin; } } $network_plugins = array(); if (is_multisite() && function_exists('get_plugin_data')) { $plugins_raw = wp_get_active_network_plugins(); foreach ($plugins_raw as $k => $v) { $plugin_details = get_plugin_data($v); $plugin = $plugin_details['Name']; if (!empty($plugin_details['Version'])) { $plugin .= sprintf(' version %s', $plugin_details['Version']); } if (!empty($plugin_details['Author'])) { $plugin .= sprintf(' by %s', $plugin_details['Author']); } if (!empty($plugin_details['AuthorURI'])) { $plugin .= sprintf('(%s)', $plugin_details['AuthorURI']); } $network_plugins[] = $plugin; } } $mu_plugins = array(); if (function_exists('get_mu_plugins')) { $mu_plugins_raw = get_mu_plugins(); foreach ($mu_plugins_raw as $k => $v) { $plugin = $v['Name']; if (!empty($v['Version'])) { $plugin .= sprintf(' version %s', $v['Version']); } if (!empty($v['Author'])) { $plugin .= sprintf(' by %s', $v['Author']); } if (!empty($v['AuthorURI'])) { $plugin .= sprintf('(%s)', $v['AuthorURI']); } $mu_plugins[] = $plugin; } } $keys = apply_filters('tribe-pue-install-keys', array()); //Obfuscate the License Keys for Security if (is_array($keys) && !empty($keys)) { $secure_keys = array(); foreach ($keys as $plugin => $license) { $secure_keys[$plugin] = preg_replace('/^(.{4}).*(.{4})$/', '$1' . str_repeat('#', 32) . '$2', $license); } $keys = $secure_keys; } //Server $server = explode(' ', $_SERVER['SERVER_SOFTWARE']); $server = explode('/', reset($server)); //PHP Information $php_info = array(); $php_vars = array('max_execution_time', 'memory_limit', 'upload_max_filesize', 'post_max_size', 'display_errors', 'log_errors'); foreach ($php_vars as $php_var) { if (isset($wpdb->qm_php_vars) && isset($wpdb->qm_php_vars[$php_var])) { $val = $wpdb->qm_php_vars[$php_var]; } else { $val = ini_get($php_var); } $php_info[$php_var] = $val; } $systeminfo = array('Home URL' => get_home_url(), 'Site URL' => get_site_url(), 'Site Language' => get_option('WPLANG') ? get_option('WPLANG') : esc_html__('English', 'tribe-common'), 'Character Set' => get_option('blog_charset'), 'Name' => $user->display_name, 'Email' => $user->user_email, 'Install keys' => $keys, 'WordPress version' => get_bloginfo('version'), 'PHP version' => phpversion(), 'PHP' => $php_info, 'Server' => $server[0], 'SAPI' => php_sapi_name(), 'Plugins' => $plugins, 'Network Plugins' => $network_plugins, 'MU Plugins' => $mu_plugins, 'Theme' => wp_get_theme()->get('Name'), 'Multisite' => is_multisite(), 'Settings' => Tribe__Settings_Manager::get_options(), 'WP Timezone' => get_option('timezone_string') ? get_option('timezone_string') : esc_html__('Unknown or not set', 'tribe-common'), 'WP GMT Offset' => get_option('gmt_offset') ? ' ' . get_option('gmt_offset') : esc_html__('Unknown or not set', 'tribe-common'), 'Server Timezone' => date_default_timezone_get(), 'WP Date Format' => get_option('date_format'), 'WP Time Format' => get_option('time_format'), 'Week Starts On' => get_option('start_of_week'), 'Common Library Dir' => $GLOBALS['tribe-common-info']['dir'], 'Common Library Version' => $GLOBALS['tribe-common-info']['version']); if ($this->rewrite_rules_purged) { $systeminfo['rewrite rules purged'] = esc_html__('Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'tribe-common'); } $systeminfo = apply_filters('tribe-events-pro-support', $systeminfo); return $systeminfo; }
/** * Load third-party plugin compatibility * * Cycle through /connections/ folder and load any files for installed plugins. * * @since 0.21 * */ static function load_plugin_compatibility() { $asset_directories = array(WP_CRM_Connections); //** Load any existing assets for active plugins */ foreach (wp_get_active_and_valid_plugins() as $plugin_path) { $plugin_slug = basename(plugin_basename(trim(dirname($plugin_path)))); //** Get plugin name from directory name, or file name (if plugin has no directory and is in root) */ if ($plugin_slug == 'plugins' || empty($plugin_slug)) { $plugin_slug = basename(plugin_basename(trim($plugin_path))); } //** Look for plugin-specific styles and load them */ foreach ($asset_directories as $directory) { $file_path = trailingslashit($directory) . $plugin_slug . '.php'; if (file_exists($file_path)) { if (WP_DEBUG == true) { include_once $file_path; } else { @(include_once $file_path); } } } } }
function get_plugins() { if (false === ($result = get_transient('sk_' . SK_CACHE_PREFIX . '_get_plugins'))) { $active_plugins = wp_get_active_and_valid_plugins(); $mu_plugins = get_mu_plugins(); $result = array(); if (is_array($active_plugins)) { foreach ($active_plugins as $plugins_key => $plugin) { $data = get_plugin_data($plugin, false, false); $slug = explode('/', plugin_basename($plugin)); $slug = str_replace('.php', '', $slug[1]); if ($data['Version']) { $result[$slug] = $data['Version']; } else { $result[$slug] = '1.0.0'; } } } if (is_array($mu_plugins)) { foreach ($mu_plugins as $plugins_key => $plugin) { $data = get_plugin_data(WPMU_PLUGIN_DIR . '/' . $plugins_key, false, false); $slug = explode('/', plugin_basename($plugins_key)); $slug = str_replace('.php', '', $slug[0]); if ($data['Version']) { $result[$slug] = $data['Version']; } else { $result[$slug] = '1.0.0'; } } } if (is_multisite()) { $plugins = get_site_option('active_sitewide_plugins'); foreach ($plugins as $plugins_key => $plugin) { $data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugins_key, false, false); $slug = explode('/', plugin_basename($plugins_key)); $slug = str_replace('.php', '', $slug[1]); if ($data['Version']) { $result[$slug] = $data['Version']; } else { $result[$slug] = '1.0.0'; } } } set_transient('sk_' . SK_CACHE_PREFIX . '_get_plugins', $result, $this->cache_time); } return $result; }
/** * create manifest file * @return bool */ public function create_manifest() { $this->substeps_todo = 3; $this->log(sprintf(__('%d. Trying to generate a manifest file …', 'backwpup'), $this->steps_data[$this->step_working]['STEP_TRY'])); //build manifest $manifest = array(); // add blog information $manifest['blog_info']['url'] = home_url(); $manifest['blog_info']['wpurl'] = site_url(); $manifest['blog_info']['prefix'] = $GLOBALS['wpdb']->prefix; $manifest['blog_info']['description'] = get_option('blogdescription'); $manifest['blog_info']['stylesheet_directory'] = get_template_directory_uri(); $manifest['blog_info']['activate_plugins'] = wp_get_active_and_valid_plugins(); $manifest['blog_info']['activate_theme'] = wp_get_theme()->get('Name'); $manifest['blog_info']['admin_email'] = get_option('admin_email'); $manifest['blog_info']['charset'] = get_bloginfo('charset'); $manifest['blog_info']['version'] = BackWPup::get_plugin_data('wp_version'); $manifest['blog_info']['backwpup_version'] = BackWPup::get_plugin_data('version'); $manifest['blog_info']['language'] = get_bloginfo('language'); $manifest['blog_info']['name'] = get_bloginfo('name'); $manifest['blog_info']['abspath'] = ABSPATH; $manifest['blog_info']['uploads'] = wp_upload_dir(null, false, true); $manifest['blog_info']['contents']['basedir'] = WP_CONTENT_DIR; $manifest['blog_info']['contents']['baseurl'] = WP_CONTENT_URL; $manifest['blog_info']['plugins']['basedir'] = WP_PLUGIN_DIR; $manifest['blog_info']['plugins']['baseurl'] = WP_PLUGIN_URL; $manifest['blog_info']['themes']['basedir'] = get_theme_root(); $manifest['blog_info']['themes']['baseurl'] = get_theme_root_uri(); // add job settings $manifest['job_settings'] = $this->job; // add archive info foreach ($this->additional_files_to_backup as $file) { $manifest['archive']['extra_files'][] = basename($file); } if (isset($this->steps_data['JOB_FILE'])) { if ($this->job['backuproot']) { $manifest['archive']['abspath'] = trailingslashit($this->get_destination_path_replacement(ABSPATH)); } if ($this->job['backupuploads']) { $manifest['archive']['uploads'] = trailingslashit($this->get_destination_path_replacement(BackWPup_File::get_upload_dir())); } if ($this->job['backupcontent']) { $manifest['archive']['contents'] = trailingslashit($this->get_destination_path_replacement(WP_CONTENT_DIR)); } if ($this->job['backupplugins']) { $manifest['archive']['plugins'] = trailingslashit($this->get_destination_path_replacement(WP_PLUGIN_DIR)); } if ($this->job['backupthemes']) { $manifest['archive']['themes'] = trailingslashit($this->get_destination_path_replacement(get_theme_root())); } } if (!file_put_contents(BackWPup::get_plugin_data('TEMP') . 'manifest.json', json_encode($manifest))) { return false; } $this->substeps_done = 1; //Create backwpup_readme.txt $readme_text = __('You may have noticed the manifest.json file in this archive.', 'backwpup') . PHP_EOL; $readme_text .= __('manifest.json might be needed for later restoring a backup from this archive.', 'backwpup') . PHP_EOL; $readme_text .= __('Please leave manifest.json untouched and in place. Otherwise it is safe to be ignored.', 'backwpup') . PHP_EOL; if (!file_put_contents(BackWPup::get_plugin_data('TEMP') . 'backwpup_readme.txt', $readme_text)) { return false; } $this->substeps_done = 2; //add file to backup files if (is_readable(BackWPup::get_plugin_data('TEMP') . 'manifest.json')) { $this->additional_files_to_backup[] = BackWPup::get_plugin_data('TEMP') . 'manifest.json'; $this->additional_files_to_backup[] = BackWPup::get_plugin_data('TEMP') . 'backwpup_readme.txt'; $this->log(sprintf(__('Added manifest.json file with %1$s to backup file list.', 'backwpup'), size_format(filesize(BackWPup::get_plugin_data('TEMP') . 'manifest.json'), 2))); } $this->substeps_done = 3; return true; }
function get_plugins() { $active_plugins = wp_get_active_and_valid_plugins(); $mu_plugins = get_mu_plugins(); $output = array(); if (is_array($active_plugins)) { foreach ($active_plugins as $plugins_key => $plugin) { $data = get_plugin_data($plugin, false, false); $slug = explode('/', plugin_basename($plugin)); $slug = str_replace('.php', '', $slug[1]); $output[$slug] = $data['Version']; } } if (is_array($mu_plugins)) { foreach ($mu_plugins as $plugins_key => $plugin) { $slug = str_replace('.php', '', $plugins_key); $output[$slug] = '1.0.0'; } } return $output; }
ms_cookie_constants(); } // Define constants after multisite is loaded. Cookie-related constants may be overridden in ms_network_cookies(). wp_cookie_constants(); // Define and enforce our SSL constants wp_ssl_constants(); // Create common globals. require ABSPATH . WPINC . '/vars.php'; // Make taxonomies and posts available to plugins and themes. // @plugin authors: warning: these get registered again on the init hook. create_initial_taxonomies(); create_initial_post_types(); // Register the default theme directory root register_theme_directory(get_theme_root()); // Load active plugins. foreach (wp_get_active_and_valid_plugins() as $plugin) { include_once $plugin; } unset($plugin); // Load pluggable functions. require ABSPATH . WPINC . '/pluggable.php'; require ABSPATH . WPINC . '/pluggable-deprecated.php'; // Set internal encoding. wp_set_internal_encoding(); // Run wp_cache_postload() if object cache is enabled and the function exists. if (WP_CACHE && function_exists('wp_cache_postload')) { wp_cache_postload(); } do_action('plugins_loaded'); // Define constants which affect functionality if not already defined. wp_functionality_constants();
public function getScriptData() { //Pass the list of installed plugins and their state (active/inactive) to UI JavaScript. $installedPlugins = get_plugins(); $activePlugins = array_map('plugin_basename', wp_get_active_and_valid_plugins()); $activeNetworkPlugins = array(); if (function_exists('wp_get_active_network_plugins')) { //This function is only available on Multisite. $activeNetworkPlugins = array_map('plugin_basename', wp_get_active_network_plugins()); } $plugins = array(); foreach ($installedPlugins as $pluginFile => $header) { $isActiveForNetwork = in_array($pluginFile, $activeNetworkPlugins); $isActive = in_array($pluginFile, $activePlugins); $plugins[] = array('fileName' => $pluginFile, 'name' => $header['Name'], 'description' => isset($header['Description']) ? $header['Description'] : '', 'isActive' => $isActive || $isActiveForNetwork); } //Flag roles that can manage plugins. $canManagePlugins = array(); $wpRoles = ameRoleUtils::get_roles(); foreach ($wpRoles->role_objects as $id => $role) { $canManagePlugins[$id] = $this->canManagePlugins($id, $role); } return array('settings' => $this->getSettings(), 'installedPlugins' => $plugins, 'canManagePlugins' => $canManagePlugins, 'isMultisite' => is_multisite(), 'isProVersion' => $this->menuEditor->is_pro_version(), 'dismissNoticeNonce' => wp_create_nonce('ws_ame_dismiss_pv_usage_notice'), 'adminAjaxUrl' => admin_url('admin-ajax.php')); }
function M_remove_old_plugin($plugins) { if (array_key_exists('membership/membership.php', $plugins) && !in_array('membership.php', (array) array_map('basename', wp_get_active_and_valid_plugins()))) { unset($plugins['membership/membership.php']); } return $plugins; }
/** * put your comment there... * * @param mixed $reload * @return CJTExtensions */ public function &getExtensions($reload = false) { // Get cached extensions or cache then if not yest cached! extract($this->onreloadcacheparameters(compact('reload'))); if ($reload || !($extensions = $this->extensions) && !($extensions = get_option(self::CACHE_OPTION_NAME, array()))) { //Resting! $this->file2Classmap = array(); $extensions = array(); # Get all active plugins $activePlugins = wp_get_active_and_valid_plugins(); # Get Network plugins if (is_multisite()) { $activePlugins = array_merge(wp_get_active_network_plugins(), $activePlugins); } // filter all installed Plugins to fetch all out Extensions! $activePlugins = $this->ongetactiveplugins($activePlugins); foreach ($activePlugins as $file) { $pluginDir = dirname($file); $pluginName = basename($pluginDir); // Any plugin with our prefix is a CJT extension! if (strpos($pluginName, $this->prefix[0]) === 0 || strpos($pluginName, $this->prefix[1]) === 0) { // CJT Extsnsion must has the definition XML file! // First try for Edition-Specific file // if not exists try the generic one. $xmlFile = "{$pluginDir}/{$pluginName}.xml"; if (file_exists($xmlFile)) { // Get Plugin primary data! $extension = array(); $extension['pluginFile'] = $file; $extension['file'] = basename($file); $extension['defFile'] = basename($pluginDir) . DIRECTORY_SEPARATOR . basename($xmlFile); // Its useful to use ABS path only at runtime as it might changed as host might get moved. $extension['dir'] = basename($pluginDir); $extension['name'] = $pluginName; // Cache XML file. $extension['definition']['raw'] = file_get_contents($xmlFile); // Filer! $extension = $this->ondetectextension($extension); // Read Basic XML Definition! $definitionXML = $this->onloaddefinition(new SimpleXMLElement($extension['definition']['raw'])); $attrs = $definitionXML->attributes(); $extension['defDoc'] = $definitionXML; $extension['definition']['primary']['loadMethod'] = (string) $attrs->loadMethod; $extension['definition']['primary']['requiredLicense'] = (string) $definitionXML->license; $className = (string) $attrs->class; // Add to list! $extensions[$className] = $extension; // Map Plugin FILE-2-CLASS name! $this->file2Classmap["{$extension['dir']}/{$extension['file']}"] = $className; } } } } $this->extensions = $this->onload($extensions); // Chaining return $this->extensions; }