function mpi_plugin_handle_download($plugin_name, $package, $mpi_action, $whform) { global $wp_version; if (version_compare($wp_version, '3.0', '<')) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Plugin_Upgrader(); $upgrader->install($package); if ($upgrader->plugin_info()) { echo '<a href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . $upgrader->plugin_info(), 'activate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Activate this plugin') . '" target="_parent">' . __('Activate Plugin') . '</a>'; } } else { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(compact('type', 'title', 'nonce', 'url'))); $res = $upgrader->install($package); //remove temp files if ($whform == "upload_locFiles") { @unlink($package); } if (!$upgrader->plugin_info()) { echo $res; } elseif ($mpi_action == "activate") { $mpiplugins = get_option('active_plugins'); if ($mpiplugins) { $puginsToActiv = array($upgrader->plugin_info()); foreach ($puginsToActiv as $mpiplugin) { if (!in_array($mpiplugin, $mpiplugins)) { array_push($mpiplugins, $mpiplugin); update_option('active_plugins', $mpiplugins); } } } _e('<b class="mpi_act">Plugin activated successfully.</b><br/>', 'mpi'); } } }
/** * @param Plugin_Upgrader $upgrader * @param array $extra */ public function hooks_plugin_install_or_update($upgrader, $extra) { if (!isset($extra['type']) || 'plugin' !== $extra['type']) { return; } if ('install' === $extra['action']) { $path = $upgrader->plugin_info(); if (!$path) { return; } $data = get_plugin_data($upgrader->skin->result['local_destination'] . '/' . $path, true, false); aal_insert_log(array('action' => 'installed', 'object_type' => 'Plugin', 'object_name' => $data['Name'], 'object_subtype' => $data['Version'])); } if ('update' === $extra['action']) { if (isset($extra['bulk']) && true == $extra['bulk']) { $slugs = $extra['plugins']; } else { if (!isset($upgrader->skin->plugin)) { return; } $slugs = array($upgrader->skin->plugin); } foreach ($slugs as $slug) { $data = get_plugin_data(WP_PLUGIN_DIR . '/' . $slug, true, false); aal_insert_log(array('action' => 'updated', 'object_type' => 'Plugin', 'object_name' => $data['Name'], 'object_subtype' => $data['Version'])); } } }
function pl_ui_build_body($obj) { if (isset($_GET['install_faves']) && 'true' == $_GET['install_faves'] || isset($_GET['install_multi']) && 'true' == $_GET['install_multi']) { if (isset($_GET['install_multi'])) { $mode = 'multi'; } else { $mode = 'fav'; } if ('multi' == $mode) { $banner = 'Installing Selected Products'; $favs = explode(',', $_GET['slugs']); foreach ($favs as $k => $fav) { $favs[$fav] = $fav; unset($favs[$k]); } } else { $banner = 'Installing Favourite Products'; $favs = (array) get_user_meta(wp_get_current_user()->ID, '_card_fav', true); } printf('<h2>%s</2>', $banner); // lets go! if (!empty($favs)) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(compact('type', 'title', 'nonce', 'url'))); $data = PL_Platform()->functions->cache_get('connect_updates'); foreach ($data as $k => $prod) { $data[$prod->slug] = $prod; unset($data[$k]); } foreach ($favs as $slug => $k) { $path = sprintf('%s/%s.php', $slug, $slug); if (PL_Platform()->extend->is_plugin_installed($path)) { printf('<p>%s is already installed, skipping.</p>', $data[$slug]->post_title); } else { printf('<p><i class="%s-spinner fa fa-cog fa-spin"></i><div style="display:none">', $slug); $link = PL_Platform_Updater::get_download_link($data[$slug]->download_data); $res = $upgrader->install($link); printf('</div></p><script>jQuery(".%s-spinner").hide()</script>', $slug); if ($upgrader->plugin_info()) { $result = activate_plugin($path); printf('<p><strong>%s</strong> has been installed successfully and is activated.</p>', $data[$slug]->post_title); } else { echo $res; break; } } } echo '</p><h3>All Done!</h3></p><script>localStorage.clear();setTimeout(function(){window.location.href=window.PLAdmin.extendURL},3000)</script>'; } } else { $obj->build_body(); } }
function handle_download($plugin_name, $package) { global $wp_version; if (version_compare($wp_version, '2.8', '<')) { $this->update_plugin_advanced($plugin_name, $package); } else { if (version_compare($wp_version, '3.0', '<')) { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Plugin_Upgrader(); $upgrader->install($package); if ($upgrader->plugin_info()) { echo '<a href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . $upgrader->plugin_info(), 'activate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Activate this plugin') . '" target="_parent">' . __('Activate Plugin') . '</a>'; } } else { include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(compact('type', 'title', 'nonce', 'url'))); $res = $upgrader->install($package); if (!$upgrader->plugin_info()) { echo $res; } } } }
/** * Installs a plugin or activates a plugin depending on the hover * link clicked by the user. * * Checks the $_GET variable to see which actions have been * passed and responds with the appropriate method. * * Uses WP_Filesystem to process and handle the plugin installation * method. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * * @return boolean True on success, false on failure */ protected function do_plugin_install() { /** All plugin information will be stored in an array for processing */ $plugin = array(); /** Checks for actions from hover links to process the installation */ if (isset($_GET[sanitize_key('plugin')]) && (isset($_GET[sanitize_key('tgmpa-install')]) && 'install-plugin' == $_GET[sanitize_key('tgmpa-install')] || isset($_GET[sanitize_key('tgmpa-update')]) && 'update-plugin' == $_GET[sanitize_key('tgmpa-update')])) { check_admin_referer('tgmpa-install'); $plugin['name'] = $_GET[sanitize_key('plugin_name')]; // Plugin name $plugin['slug'] = $_GET[sanitize_key('plugin')]; // Plugin slug $plugin['source'] = $_GET[sanitize_key('plugin_source')]; // Plugin source $plugin['version'] = isset($_GET[sanitize_key('version')]) ? $_GET[sanitize_key('version')] : ''; // Plugin source $install_type = isset($_GET[sanitize_key('tgmpa-update')]) ? $_GET[sanitize_key('tgmpa-update')] : ''; // Install type /** Pass all necessary information via URL if WP_Filesystem is needed */ $url = wp_nonce_url(add_query_arg(array('page' => $this->menu, 'plugin' => $plugin['slug'], 'plugin_name' => $plugin['name'], 'plugin_source' => $plugin['source'], 'tgmpa-install' => 'install-plugin'), admin_url($this->parent_url_slug)), 'tgmpa-install'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary $fields = array(sanitize_key('tgmpa-install')); // Extra fields to pass to WP_Filesystem if (false === ($creds = request_filesystem_credentials($url, $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($url, $method, true, false, $fields); // Setup WP_Filesystem return true; } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes /** Set plugin source to WordPress API link if available */ if (isset($plugin['source']) && 'repo' == $plugin['source']) { $api = plugins_api('plugin_information', array('slug' => $plugin['slug'], 'fields' => array('sections' => false))); if (is_wp_error($api)) { wp_die($this->strings['oops'] . var_dump($api)); } if (isset($api->download_link)) { $plugin['source'] = $api->download_link; } } /** Set type, based on whether the source starts with http:// or https:// */ $type = preg_match('|^http(s)?://|', $plugin['source']) ? 'web' : 'upload'; /** Prep variables for Plugin_Installer_Skin class */ $title = sprintf($this->strings['installing'], $plugin['name']); $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => $plugin['slug']), 'update.php'); if (isset($_GET['from'])) { $url .= add_query_arg('from', urlencode(stripslashes($_GET['from'])), $url); } $nonce = 'install-plugin_' . $plugin['slug']; /** Prefix a default path to pre-packaged plugins */ $source = 'upload' == $type ? $this->default_path . $plugin['source'] : $plugin['source']; /** Create a new instance of Plugin_Upgrader */ $upgrader = new Plugin_Upgrader($skin = new Plugin_Installer_Skin(compact('type', 'title', 'url', 'nonce', 'plugin', 'api'))); /** Perform the action and install the plugin from the $source urldecode() */ if ($install_type == 'update-plugin') { delete_site_transient('update_plugins'); $data = get_site_transient('update_plugins'); if (!is_object($data)) { $data = new stdClass(); } $data->response[$plugin['slug']]->package = $source; $data->response[$plugin['slug']]->version = $plugin['version']; set_site_transient('update_plugins', $data); $upgrader->upgrade($plugin['slug']); } else { $upgrader->install($source); } /** Flush plugins cache so we can make sure that the installed plugins list is always up to date */ wp_cache_flush(); /** Only activate plugins if the config option is set to true */ if ($this->is_automatic) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method $activate = activate_plugin($plugin_activate); // Activate the plugin $this->populate_file_path(); // Re-populate the file path now that the plugin has been installed and activated if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url($this->parent_url_slug)) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . __('Return to Required Plugins Installer', THEMENAME) . '</a></p>'; return true; // End it here if there is an error with automatic activation } else { echo '<p>' . $this->strings['plugin_activated'] . '</p>'; } } /** Display message based on if all plugins are now active or not */ $complete = array(); foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url($this->parent_url_slug)) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; $complete[] = $plugin; break; } else { $complete[] = ''; } } /** Filter out any empty entries */ $complete = array_filter($complete); /** All plugins are active, so we display the complete string and hide the plugin menu */ if (empty($complete)) { echo '<p>' . sprintf($this->strings['complete'], '<a href="' . admin_url() . '" title="' . __('Return to the Dashboard', THEMENAME) . '">' . __('Return to the Dashboard', THEMENAME) . '</a>') . '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; } return true; } elseif (isset($_GET[sanitize_key('plugin')]) && (isset($_GET[sanitize_key('tgmpa-activate')]) && 'activate-plugin' == $_GET[sanitize_key('tgmpa-activate')])) { check_admin_referer('tgmpa-activate', 'tgmpa-activate-nonce'); /** Populate $plugin array with necessary information */ $plugin['name'] = $_GET[sanitize_key('plugin_name')]; $plugin['slug'] = $_GET[sanitize_key('plugin')]; $plugin['source'] = $_GET[sanitize_key('plugin_source')]; $plugin_data = get_plugins('/' . $plugin['slug']); // Retrieve all plugins $plugin_file = array_keys($plugin_data); // Retrieve all plugin files from installed plugins $plugin_to_activate = $plugin['slug'] . '/' . $plugin_file[0]; // Match plugin slug with appropriate plugin file $activate = activate_plugin($plugin_to_activate); // Activate the plugin if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url($this->parent_url_slug)) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; return true; // End it here if there is an error with activation } else { /** Make sure message doesn't display again if bulk activation is performed immediately after a single activation */ if (!isset($_POST[sanitize_key('action')])) { $msg = sprintf(__('The following plugin was activated successfully: %s.', THEMENAME), '<strong>' . $plugin['name'] . '</strong>'); echo '<div id="message" class="updated"><p>' . $msg . '</p></div>'; } } } return false; }
/** * Installs and activates the plugin. * * This method actually installs the plugins. It instantiates the * WP_Filesystem Abstraction class to do the heavy lifting. * * Any errors are displayed using the WP_Error class. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * * @return boolean True on success, false on failure */ protected function do_plugin_install() { if (empty($_POST)) { // Bail out if the global $_POST is empty return false; } check_admin_referer('tgmpa'); // Security check foreach ($this->plugins as $plugin) { // Iterate and perform the action for each plugin in the array $fields = array(sanitize_key($plugin['name'])); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary if (isset($_POST[sanitize_key($plugin['name'])])) { // Don't do anything if the form has not been submitted $url = wp_nonce_url('themes.php?page=' . $this->menu, 'tgmpa'); // Make sure we are coming from the right page if (false === ($creds = request_filesystem_credentials($url, $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($url, $method, true, false, $fields); // Setup WP_Filesystem return true; } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes $api = plugins_api('plugin_information', array('slug' => $plugin['slug'], 'fields' => array('sections' => false))); if (is_wp_error($api)) { wp_die($this->strings['oops'] . var_dump($api)); } // Prep variables for Plugin_Installer_Skin class $title = sprintf($this->strings['installing'], $plugin['name']); $nonce = 'install-plugin_' . $plugin['slug']; $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => $plugin['slug']), 'update.php'); if (isset($_GET['from'])) { $url .= add_query_arg('from', urlencode(stripslashes($_GET['from'])), $url); } if (!isset($plugin['source']) && isset($api->download_link)) { $plugin['source'] = $api->download_link; } /** Set type, based on whether the source starts with http:// or https:// */ $type = preg_match('|^http(s)?://|', $plugin['source']) ? 'web' : 'upload'; /** Prefix a default path to pre-packaged plugins */ $source = 'upload' == $type ? $this->default_path . $plugin['source'] : $plugin['source']; $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(compact('title', 'url', 'nonce', 'plugin', 'api'))); // Create a new instance of Plugin_Upgrader $upgrader->install($source); // Perform the action and install the plugin from the $source urldecode() $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method wp_cache_flush(); // Flush the cache to remove plugin header errors $activate = activate_plugin($plugin_activate); // Activate the plugin $this->populate_file_path(); // Re-populate the file path now that the plugin has been installed and activated if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url('themes.php')) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . __('Return to Required Plugins Installer', $this->domain) . '</a></p>'; return true; // End it here if there is an error with automatic activation } else { echo '<p>' . $this->strings['plugin_activated'] . '</p>'; foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url('themes.php')) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . __('Return to Required Plugins Installer', $this->domain) . '</a></p>'; break; } } } } } return true; }
/** * Installs a plugin or activates a plugin depending on the hover * link clicked by the user. * * Checks the $_GET variable to see which actions have been * passed and responds with the appropriate method. * * Uses WP_Filesystem to process and handle the plugin installation * method. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * * @return boolean True on success, false on failure. */ protected function do_plugin_install() { if (!isset($_GET['plugin'])) { return false; } // All plugin information will be stored in an array for processing. $plugin = array(); $slug = sanitize_key($_GET['plugin']); // Checks for actions from hover links to process the installation. if (isset($this->plugins[$slug], $_GET['tgmpa-install']) && 'install-plugin' === $_GET['tgmpa-install']) { check_admin_referer('tgmpa-install'); // Pass necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url(add_query_arg(array('plugin' => urlencode($slug), 'tgmpa-install' => 'install-plugin'), $this->get_tgmpa_url()), 'tgmpa-install'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. if (false === ($creds = request_filesystem_credentials(esc_url_raw($url), $method, false, false, array()))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials(esc_url_raw($url), $method, true, false, array()); // Setup WP_Filesystem. return true; } // If we arrive here, we have the filesystem require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes. $plugin['slug'] = $slug; // Needed for potentially renaming of directory name $plugin['name'] = $this->plugins[$slug]['name']; $source = $this->get_download_url($slug); // Prep variables for Plugin_Installer_Skin class. $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => urlencode($slug)), 'update.php'); // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(array('type' => preg_match(self::IS_URL_REGEX, $source) ? 'web' : 'upload', 'title' => sprintf($this->strings['installing'], $plugin['name']), 'url' => esc_url_raw($url), 'nonce' => 'install-plugin_' . $slug, 'plugin' => $plugin))); // Perform the action and install the plugin from the $source urldecode(). add_filter('upgrader_source_selection', array($this, 'maybe_adjust_source_dir'), 1, 3); $upgrader->install($source); remove_filter('upgrader_source_selection', array($this, 'maybe_adjust_source_dir'), 1, 3); // Flush plugins cache so we can make sure that the installed plugins list is always up to date. $this->flush_plugins_cache(); // Only activate plugins if the config option is set to true. if ($this->is_automatic) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. if (false === $this->activate_single_plugin($plugin_activate, $slug, true)) { return true; // Finish execution of the function early as we encountered an error } // Re-populate the file path now that the plugin has been installed and activated. $this->populate_file_path($slug); } // Display message based on if all plugins are now active or not. $complete = true; foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { echo '<p><a href="', esc_url($this->get_tgmpa_url()), '" target="_parent">', esc_html($this->strings['return']), '</a></p>'; $complete = false; break; } } // All plugins are active, so we display the complete string and hide the plugin menu. if (true === $complete) { echo '<p>', sprintf(esc_html($this->strings['complete']), '<a href="' . esc_url(self_admin_url()) . '">' . esc_html__('Return to the Dashboard', 'tgmpa') . '</a>'), '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; } return true; } elseif (isset($this->plugins[$slug]['file_path'], $_GET['tgmpa-activate']) && 'activate-plugin' === $_GET['tgmpa-activate']) { check_admin_referer('tgmpa-activate', 'tgmpa-activate-nonce'); if (false === $this->activate_single_plugin($this->plugins[$slug]['file_path'], $slug)) { return true; // Finish execution of the function early as we encountered an error } } return false; }
function fv_wp_flowplayer_install_extension($plugin_package = 'fv_player_pro') { global $hook_suffix; $aInstalled = get_option('fv_flowplayer_extension_install') ? get_option('fv_flowplayer_extension_install') : array(); $aInstalled = array_merge($aInstalled, array($plugin_package => false)); update_option('fv_flowplayer_extension_install', $aInstalled); $aPluginInfo = get_transient('fv_flowplayer_license'); $plugin_basename = $aPluginInfo->{$plugin_package}->slug; $download_url = $aPluginInfo->{$plugin_package}->url; $sPluginBasenameReal = fv_flowplayer_get_extension_path(str_replace('_', '-', $plugin_package)); $plugin_basename = $sPluginBasenameReal ? $sPluginBasenameReal : $plugin_basename; $url = wp_nonce_url(site_url() . '/wp-admin/options-general.php?page=fvplayer', 'fv_player_pro_install', 'nonce_fv_player_pro_install'); set_current_screen(); ob_start(); if (false === ($creds = request_filesystem_credentials($url, '', false, false, false))) { $form = ob_get_clean(); include ABSPATH . 'wp-admin/admin-header.php'; echo fv_wp_flowplayer_install_extension_talk($form); include ABSPATH . 'wp-admin/admin-footer.php'; die; } if (!WP_Filesystem($creds)) { ob_start(); request_filesystem_credentials($url, $method, true, false, false); $form = ob_get_clean(); include ABSPATH . 'wp-admin/admin-header.php'; echo fv_wp_flowplayer_install_extension_talk($form); include ABSPATH . 'wp-admin/admin-footer.php'; die; } require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; $sTaskDone = 'FV Flowplayer Pro extension installed - check the new <a href="' . site_url() . '/wp-admin/options-general.php?page=fvplayer#fv_player_pro">Pro features!</a>!'; if (!$sPluginBasenameReal || is_wp_error(validate_plugin($plugin_basename))) { echo '<div style="display: none;">'; $objInstaller = new Plugin_Upgrader(); $objInstaller->install($download_url); echo '</div>'; wp_cache_flush(); if (is_wp_error($objInstaller->skin->result)) { update_option('fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension install failed - ' . $objInstaller->skin->result->get_error_message()); $bResult = false; } else { if ($objInstaller->plugin_info()) { $plugin_basename = $objInstaller->plugin_info(); } $activate = activate_plugin($plugin_basename); if (is_wp_error($activate)) { update_option('fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension install failed - ' . $activate->get_error_message()); $bResult = false; } } } else { if ($sPluginBasenameReal) { $sTaskDone = 'FV Flowplayer Pro extension upgraded succesfully!'; echo '<div style="display: none;">'; $objInstaller = new Plugin_Upgrader(); $objInstaller->upgrade($sPluginBasenameReal); echo '</div></div>'; // explanation: extra closing tag just to be safe (in case of "The plugin is at the latest version.") wp_cache_flush(); if (is_wp_error($objInstaller->skin->result)) { update_option('fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension upgrade failed - ' . $objInstaller->skin->result->get_error_message()); $bResult = false; } else { if ($objInstaller->plugin_info()) { $plugin_basename = $objInstaller->plugin_info(); } $activate = activate_plugin($plugin_basename); if (is_wp_error($activate)) { update_option('fv_wordpress_flowplayer_deferred_notices', 'FV Flowplayer Pro extension upgrade failed - ' . $activate->get_error_message()); $bResult = false; } } } } if (!isset($bResult)) { if (!isset($_GET['page']) || strcmp($_GET['page'], 'fvplayer') != 0) { update_option('fv_wordpress_flowplayer_deferred_notices', $sTaskDone); } $bResult = true; } $aInstalled = get_option('fv_flowplayer_extension_install') ? get_option('fv_flowplayer_extension_install') : array(); $aInstalled = array_merge($aInstalled, array($plugin_package => $bResult)); update_option('fv_flowplayer_extension_install', $aInstalled); return $bResult; }
function wp_install_plugins($array) { require_once $this->data['dir'] . '/wp-admin/includes/class-wp-upgrader.php'; global $WPQI_Installer_Skin; $WPQI_Installer_Skin(); foreach ($array as $name) { if (!$name) { continue; } $is_url = preg_match("/^(http|https):\\/\\//i", $name); $url = $is_url ? $name : "https://downloads.wordpress.org/plugin/{$name}.zip"; $upgrader = new Plugin_Upgrader(new WPQI_Installer_Skin()); $upgrader->install($url); activate_plugin($upgrader->plugin_info()); } wp_clean_plugins_cache(); }
private function install_plugins($plugins) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/plugin.php'; require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once dirname(dirname(__FILE__)) . '/upgrader-skin.php'; $upgrader = new Plugin_Upgrader(new Ithemes_Sync_Upgrader_Skin()); $results = array(); foreach ((array) $plugins as $plugin) { Ithemes_Sync_Functions::set_time_limit(300); if (preg_match('{^(http|https|ftp)://}i', $plugin)) { $result = $upgrader->install($plugin); } else { $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false))); if (is_wp_error($api)) { $result = $api; } else { $result = $upgrader->install($api->download_link); } } if (is_wp_error($result)) { $results[$plugin]['error'] = array('error_code' => $result->get_error_code(), 'error_details' => $result->get_error_message()); } else { $results[$plugin] = array('result' => $result, 'slug' => $upgrader->plugin_info()); if (true === $result) { $results[$plugin]['success'] = true; } } } Ithemes_Sync_Functions::refresh_plugin_updates(); return $results; }
protected function do_plugin_install() { $plugin = array(); if (isset($_GET['plugin']) && (isset($_GET['tgmpa-install']) && 'install-plugin' == $_GET['tgmpa-install'])) { check_admin_referer('tgmpa-install'); $plugin['name'] = $_GET['plugin_name']; $plugin['slug'] = $_GET['plugin']; $plugin['source'] = $_GET['plugin_source']; $url = wp_nonce_url(add_query_arg(array('page' => urlencode($this->menu), 'plugin' => urlencode($plugin['slug']), 'plugin_name' => urlencode($plugin['name']), 'plugin_source' => urlencode($plugin['source']), 'tgmpa-install' => 'install-plugin'), network_admin_url('themes.php')), 'tgmpa-install'); $method = ''; $fields = array('tgmpa-install'); if (false === ($creds = request_filesystem_credentials(esc_url_raw($url), $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials(esc_url_raw($url), $method, true, false, $fields); // Setup WP_Filesystem. return true; } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; if (isset($plugin['source']) && 'repo' == $plugin['source']) { $api = plugins_api('plugin_information', array('slug' => $plugin['slug'], 'fields' => array('sections' => false))); if (is_wp_error($api)) { wp_die($this->strings['oops'] . var_dump($api)); } if (isset($api->download_link)) { $plugin['source'] = $api->download_link; } } $type = preg_match('|^http(s)?://|', $plugin['source']) ? 'web' : 'upload'; $title = sprintf($this->strings['installing'], $plugin['name']); $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => urlencode($plugin['slug'])), 'update.php'); if (isset($_GET['from'])) { $url .= add_query_arg('from', urlencode(stripslashes($_GET['from'])), $url); } $url = esc_url_raw($url); $nonce = 'install-plugin_' . $plugin['slug']; $source = 'upload' == $type ? $this->default_path . $plugin['source'] : $plugin['source']; $upgrader = new Plugin_Upgrader($skin = new Plugin_Installer_Skin(compact('type', 'title', 'url', 'nonce', 'plugin', 'api'))); $upgrader->install($source); wp_cache_flush(); if ($this->is_automatic) { $plugin_activate = $upgrader->plugin_info(); $activate = activate_plugin($plugin_activate); $this->populate_file_path(); if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . esc_url(add_query_arg('page', urlencode($this->menu), network_admin_url('themes.php'))) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; return true; } else { echo '<p>' . $this->strings['plugin_activated'] . '</p>'; } } $complete = array(); foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { echo '<p><a href="' . esc_url(add_query_arg('page', urlencode($this->menu), network_admin_url('themes.php'))) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; $complete[] = $plugin; break; } else { $complete[] = ''; } } $complete = array_filter($complete); if (empty($complete)) { echo '<p>' . sprintf($this->strings['complete'], '<a href="' . esc_url(network_admin_url()) . '" title="' . esc_attr__('Return to the Dashboard', 'tgmpa') . '">' . __('Return to the Dashboard', 'tgmpa') . '</a>') . '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; } return true; } elseif (isset($_GET['plugin']) && (isset($_GET['tgmpa-activate']) && 'activate-plugin' == $_GET['tgmpa-activate'])) { check_admin_referer('tgmpa-activate', 'tgmpa-activate-nonce'); $plugin['name'] = $_GET['plugin_name']; $plugin['slug'] = $_GET['plugin']; $plugin['source'] = $_GET['plugin_source']; $plugin_data = get_plugins('/' . $plugin['slug']); $plugin_file = array_keys($plugin_data); $plugin_to_activate = $plugin['slug'] . '/' . $plugin_file[0]; $activate = activate_plugin($plugin_to_activate); if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . esc_url(add_query_arg('page', urlencode($this->menu), network_admin_url('themes.php'))) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; return true; } else { if (!isset($_POST['action'])) { $msg = $this->strings['activated_successfully'] . ' <strong>' . $plugin['name'] . '.</strong>'; echo '<div id="message" class="updated"><p>' . $msg . '</p></div>'; } } } return false; }
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; class Plugin_Installer_Skin_B extends Plugin_Installer_Skin { public $done_header = true; public $done_footer = true; public function feedback($string) { if (strpos($string, 'Destination folder already exists.') !== false) { echo json_encode(array('failed' => __('Plugin already installed. Maybe not activated?', 'formcraft'))); die; } } } $plugin_obj = new Plugin_Upgrader($skin = new Plugin_Installer_Skin_B(compact('type', 'title', 'url', 'nonce', 'plugin', 'api'))); $installed = $plugin_obj->install($plugin_file); $info = $plugin_obj->plugin_info(); $old_location = rtrim(plugin_dir_path($info), '/'); rename(WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $old_location, WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $result['github-repo']); $info = str_replace($old_location, $result['github-repo'], $info); if ($installed == true) { $activated = activate_plugin($info); if ($activated == NULL) { echo json_encode(array('success' => 'true', 'plugin' => $plugin)); die; } else { echo json_encode(array('failed' => __('Could not activate plugin', 'formcraft'))); die; } } else { echo json_encode(array('failed' => __('Could not install plugin', 'formcraft'))); die;
/** * Installs an Soliloquy addon. * * @since 1.0.0 */ function soliloquy_ajax_install_addon() { // Run a security check first. check_ajax_referer('soliloquy-install', 'nonce'); // Install the addon. if (isset($_POST['plugin'])) { $download_url = $_POST['plugin']; global $hook_suffix; // Set the current screen to avoid undefined notices. set_current_screen(); // Prepare variables. $method = ''; $url = add_query_arg(array('page' => 'soliloquy-settings'), admin_url('admin.php')); // Start output bufferring to catch the filesystem form if credentials are needed. ob_start(); if (false === ($creds = request_filesystem_credentials($url, $method, false, false, null))) { $form = ob_get_clean(); echo json_encode(array('form' => $form)); die; } // If we are not authenticated, make it happen now. if (!WP_Filesystem($creds)) { ob_start(); request_filesystem_credentials($url, $method, true, false, null); $form = ob_get_clean(); echo json_encode(array('form' => $form)); die; } // We do not need any extra credentials if we have gotten this far, so let's install the plugin. require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; require_once plugin_dir_path(Soliloquy::get_instance()->file) . 'includes/admin/skin.php'; // Create the plugin upgrader with our custom skin. $installer = new Plugin_Upgrader($skin = new Soliloquy_Skin()); $installer->install($download_url); // Flush the cache and return the newly installed plugin basename. wp_cache_flush(); if ($installer->plugin_info()) { $plugin_basename = $installer->plugin_info(); echo json_encode(array('plugin' => $plugin_basename)); die; } } // Send back a response. echo json_encode(true); die; }
function install_plugin($url) { if (strstr($url, '.zip') != FALSE) { $download_link = $url; } else { $slug = explode('/', $url); $slug = $slug[count($slug) - 2]; $api = plugins_api('plugin_information', array('slug' => $slug, 'fields' => array('sections' => 'false'))); $download_link = $api->download_link; } $upgrader = new Plugin_Upgrader(); if (!$upgrader->install($download_link)) { return 0; } //This will also activate the plugin after installation $plugin_to_activate = $upgrader->plugin_info(); $activate = activate_plugin($plugin_to_activate); wp_cache_flush(); return 1; }
/** * Installs a plugin or activates a plugin depending on the hover * link clicked by the user. * * Checks the $_GET variable to see which actions have been * passed and responds with the appropriate method. * * Uses WP_Filesystem to process and handle the plugin installation * method. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * * @return boolean True on success, false on failure */ protected function do_plugin_install() { // All plugin information will be stored in an array for processing. $plugin = array(); // Checks for actions from hover links to process the installation. if (isset($_GET['plugin']) && (isset($_GET['tgmpa-install']) && 'install-plugin' === $_GET['tgmpa-install'])) { check_admin_referer('tgmpa-install'); $plugin['name'] = $_GET['plugin_name']; // Plugin name. // @todo needs sanitizing, figure out how $plugin['slug'] = sanitize_title($_GET['plugin']); // Plugin slug. $plugin['source'] = $_GET['plugin_source']; // Plugin source. // @todo needs sanitizing, figure out how // Pass all necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url(add_query_arg(array('page' => urlencode($this->menu), 'plugin' => urlencode($plugin['slug']), 'plugin_name' => urlencode($plugin['name']), 'plugin_source' => urlencode($plugin['source']), 'tgmpa-install' => 'install-plugin'), self_admin_url($this->parent_slug)), 'tgmpa-install'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array('tgmpa-install'); // Extra fields to pass to WP_Filesystem. if (false === ($creds = request_filesystem_credentials(esc_url_raw($url), $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials(esc_url_raw($url), $method, true, false, $fields); // Setup WP_Filesystem. return true; } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api. require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes. // Set plugin source to WordPress API link if available. if (isset($plugin['source']) && 'repo' === $plugin['source']) { $api = plugins_api('plugin_information', array('slug' => $plugin['slug'], 'fields' => array('sections' => false))); if (is_wp_error($api)) { if (WP_DEBUG === true) { wp_die(esc_html($this->strings['oops']) . var_dump($api)); // wpcs: xss ok } else { wp_die(esc_html($this->strings['oops'])); } } if (isset($api->download_link)) { $plugin['source'] = $api->download_link; } } // Set type, based on whether the source starts with http:// or https://. $type = preg_match('|^http(s)?://|', $plugin['source']) ? 'web' : 'upload'; // Prep variables for Plugin_Installer_Skin class. $title = sprintf($this->strings['installing'], $plugin['name']); $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => urlencode($plugin['slug'])), 'update.php'); if (isset($_GET['from'])) { $url .= add_query_arg('from', urlencode(stripslashes($_GET['from'])), $url); } $url = esc_url_raw($url); $nonce = 'install-plugin_' . $plugin['slug']; // Prefix a default path to pre-packaged plugins. $source = 'upload' === $type ? $this->default_path . $plugin['source'] : $plugin['source']; // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader($skin = new Plugin_Installer_Skin(compact('type', 'title', 'url', 'nonce', 'plugin', 'api'))); // Perform the action and install the plugin from the $source urldecode(). $upgrader->install($source); // Flush plugins cache so we can make sure that the installed plugins list is always up to date. wp_cache_flush(); // Only activate plugins if the config option is set to true. if ($this->is_automatic) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. $activate = activate_plugin($plugin_activate); // Activate the plugin. $this->populate_file_path(); // Re-populate the file path now that the plugin has been installed and activated. if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>', wp_kses_post($activate->get_error_message()), '</p></div>', '<p><a href="', esc_url(add_query_arg('page', urlencode($this->menu), self_admin_url('themes.php'))), '" target="_parent">', esc_html($this->strings['return']), '</a></p>'; return true; // End it here if there is an error with automatic activation } else { echo '<p>', esc_html($this->strings['plugin_activated']), '</p>'; } } // Display message based on if all plugins are now active or not. $complete = array(); foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { echo '<p><a href="', esc_url(add_query_arg('page', urlencode($this->menu), self_admin_url($this->parent_slug))), '" target="_parent">', esc_html($this->strings['return']), '</a></p>'; $complete[] = $plugin; break; } else { $complete[] = ''; } } // Filter out any empty entries. $complete = array_filter($complete); // All plugins are active, so we display the complete string and hide the plugin menu. if (empty($complete)) { echo '<p>', sprintf(esc_html($this->strings['complete']), '<a href="' . esc_url(self_admin_url()) . '">' . esc_html__('Return to the Dashboard', 'tgmpa') . '</a>'), '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; } return true; } elseif (isset($_GET['plugin']) && (isset($_GET['tgmpa-activate']) && 'activate-plugin' === $_GET['tgmpa-activate'])) { check_admin_referer('tgmpa-activate', 'tgmpa-activate-nonce'); // Populate $plugin array with necessary information. $plugin['name'] = $_GET['plugin_name']; // @todo needs sanitizing, figure out how $plugin['slug'] = sanitize_title($_GET['plugin']); $plugin['source'] = $_GET['plugin_source']; // @todo needs sanitizing, figure out how $plugin_data = get_plugins('/' . $plugin['slug']); // Retrieve all plugins. $plugin_file = array_keys($plugin_data); // Retrieve all plugin files from installed plugins. $plugin_to_activate = $plugin['slug'] . '/' . $plugin_file[0]; // Match plugin slug with appropriate plugin file. $activate = activate_plugin($plugin_to_activate); // Activate the plugin. if (is_wp_error($activate)) { echo '<div id="message" class="error"><p>', wp_kses_post($activate->get_error_message()), '</p></div>'; echo '<p><a href="', esc_url(add_query_arg('page', urlencode($this->menu), self_admin_url($this->parent_slug))), '" target="_parent">', esc_html($this->strings['return']), '</a></p>'; return true; // End it here if there is an error with activation. } else { // Make sure message doesn't display again if bulk activation is performed immediately after a single activation. if (!isset($_POST['action'])) { echo '<div id="message" class="updated"><p>', esc_html($this->strings['activated_successfully']), ' <strong>', esc_html($plugin['name']), '.</strong></p></div>'; } } } return false; }
/** * Installs, updates or activates a plugin depending on the action link clicked by the user. * * Checks the $_GET variable to see which actions have been * passed and responds with the appropriate method. * * Uses WP_Filesystem to process and handle the plugin installation * method. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * @uses Plugin_Upgrader_Skin * * @return boolean True on success, false on failure. */ protected function do_plugin_install() { if (empty($_GET['plugin'])) { return false; } // All plugin information will be stored in an array for processing. $slug = $this->sanitize_key(urldecode($_GET['plugin'])); if (!isset($this->plugins[$slug])) { return false; } // Was an install or upgrade action link clicked? if (isset($_GET['tgmpa-install']) && 'install-plugin' === $_GET['tgmpa-install'] || isset($_GET['tgmpa-update']) && 'update-plugin' === $_GET['tgmpa-update']) { $install_type = 'install'; if (isset($_GET['tgmpa-update']) && 'update-plugin' === $_GET['tgmpa-update']) { $install_type = 'update'; } check_admin_referer('tgmpa-' . $install_type, 'tgmpa-nonce'); // Pass necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url(add_query_arg(array('plugin' => urlencode($slug), 'tgmpa-' . $install_type => $install_type . '-plugin'), $this->get_tgmpa_url()), 'tgmpa-' . $install_type, 'tgmpa-nonce'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. if (false === ($creds = request_filesystem_credentials(esc_url_raw($url), $method, false, false, array()))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials(esc_url_raw($url), $method, true, false, array()); // Setup WP_Filesystem. return true; } /* If we arrive here, we have the filesystem. */ // Prep variables for Plugin_Installer_Skin class. $extra = array(); $extra['slug'] = $slug; // Needed for potentially renaming of directory name. $source = $this->get_download_url($slug); $api = 'repo' === $this->plugins[$slug]['source_type'] ? $this->get_plugins_api($slug) : null; $api = false !== $api ? $api : null; $url = add_query_arg(array('action' => $install_type . '-plugin', 'plugin' => urlencode($slug)), 'update.php'); if (!class_exists('Plugin_Upgrader', false)) { require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; } $skin_args = array('type' => 'bundled' !== $this->plugins[$slug]['source_type'] ? 'web' : 'upload', 'title' => sprintf($this->strings['installing'], $this->plugins[$slug]['name']), 'url' => esc_url_raw($url), 'nonce' => $install_type . '-plugin_' . $slug, 'plugin' => '', 'api' => $api, 'extra' => $extra); if ('update' === $install_type) { $skin_args['plugin'] = $this->plugins[$slug]['file_path']; $skin = new Plugin_Upgrader_Skin($skin_args); } else { $skin = new Plugin_Installer_Skin($skin_args); } // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader($skin); // Perform the action and install the plugin from the $source urldecode(). add_filter('upgrader_source_selection', array($this, 'maybe_adjust_source_dir'), 1, 3); if ('update' === $install_type) { // Inject our info into the update transient. $to_inject = array($slug => $this->plugins[$slug]); $to_inject[$slug]['source'] = $source; $this->inject_update_info($to_inject); $upgrader->upgrade($this->plugins[$slug]['file_path']); } else { $upgrader->install($source); } remove_filter('upgrader_source_selection', array($this, 'maybe_adjust_source_dir'), 1, 3); // Make sure we have the correct file path now the plugin is installed/updated. $this->populate_file_path($slug); // Only activate plugins if the config option is set to true and the plugin isn't // already active (upgrade). if ($this->is_automatic && !$this->is_plugin_active($slug)) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. if (false === $this->activate_single_plugin($plugin_activate, $slug, true)) { return true; // Finish execution of the function early as we encountered an error. } } $this->show_tgmpa_version(); // Display message based on if all plugins are now active or not. if ($this->is_tgmpa_complete()) { echo '<p>', sprintf(esc_html($this->strings['complete']), '<a href="' . esc_url(self_admin_url()) . '">' . esc_html__('Return to the Dashboard', 'tgmpa') . '</a>'), '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; } else { echo '<p><a href="', esc_url($this->get_tgmpa_url()), '" target="_parent">', esc_html($this->strings['return']), '</a></p>'; } return true; } elseif (isset($this->plugins[$slug]['file_path'], $_GET['tgmpa-activate']) && 'activate-plugin' === $_GET['tgmpa-activate']) { // Activate action link was clicked. check_admin_referer('tgmpa-activate', 'tgmpa-nonce'); if (false === $this->activate_single_plugin($this->plugins[$slug]['file_path'], $slug)) { return true; // Finish execution of the function early as we encountered an error. } } return false; }
/** * Installs a plugin or activates a plugin depending on the hover * link clicked by the user. * * Checks the $_GET variable to see which actions have been * passed and responds with the appropriate method. * * Uses WP_Filesystem to process and handle the plugin installation * method. * * @since 1.0.0 * * @uses WP_Filesystem * @uses WP_Error * @uses WP_Upgrader * @uses Plugin_Upgrader * @uses Plugin_Installer_Skin * * @return boolean True on success, false on failure */ protected function do_plugin_install() { // All plugin information will be stored in an array for processing. $plugin = array(); // Checks for actions from hover links to process the installation. if (isset($_GET[sanitize_key('plugin')]) && (isset($_GET[sanitize_key('tgmpa-install')]) && 'install-plugin' == $_GET[sanitize_key('tgmpa-install')] || isset($_GET[sanitize_key('tgmpa-update')]) && 'update-plugin' == $_GET[sanitize_key('tgmpa-update')])) { check_admin_referer('tgmpa-install'); $plugin['name'] = $_GET['plugin_name']; // Plugin name. $plugin['slug'] = $_GET['plugin']; // Plugin slug. $plugin['source'] = urldecode($_GET['plugin_source']); // Plugin source. $plugin['version'] = isset($_GET[sanitize_key('version')]) ? $_GET[sanitize_key('version')] : ''; // Plugin source $install_type = isset($_GET[sanitize_key('tgmpa-update')]) ? $_GET[sanitize_key('tgmpa-update')] : ''; // Install type // Pass all necessary information via URL if WP_Filesystem is needed. $url = wp_nonce_url(add_query_arg(array('page' => $this->menu, 'plugin' => $plugin['slug'], 'plugin_name' => $plugin['name'], 'plugin_source' => $plugin['source'], 'tgmpa-install' => 'install-plugin'), admin_url('themes.php')), 'tgmpa-install'); $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array('tgmpa-install'); // Extra fields to pass to WP_Filesystem. if (false === ($creds = request_filesystem_credentials($url, $method, false, false, $fields))) { return true; } if (!WP_Filesystem($creds)) { request_filesystem_credentials($url, $method, true, false, $fields); // Setup WP_Filesystem. return true; } require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api. require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes. // Set plugin source to WordPress API link if available. if (isset($plugin['source']) && 'repo' == $plugin['source']) { $api = plugins_api('plugin_information', array('slug' => $plugin['slug'], 'fields' => array('sections' => false))); if (is_wp_error($api)) { wp_die($this->strings['oops'] . var_dump($api)); } if (isset($api->download_link)) { $plugin['source'] = $api->download_link; } } // Set type, based on whether the source starts with http:// or https://. $type = preg_match('|^http(s)?://|', $plugin['source']) ? 'web' : 'upload'; // Prep variables for Plugin_Installer_Skin class. $title = sprintf($this->strings['installing'], $plugin['name']); $url = add_query_arg(array('action' => 'install-plugin', 'plugin' => $plugin['slug']), 'update.php'); if (isset($_GET['from'])) { $url .= add_query_arg('from', urlencode(stripslashes($_GET['from'])), $url); } $nonce = 'install-plugin_' . $plugin['slug']; // Prefix a default path to pre-packaged plugins. $source = 'upload' == $type ? $this->default_path . $plugin['source'] : $plugin['source']; // Create a new instance of Plugin_Upgrader. $upgrader = new Plugin_Upgrader($skin = new Plugin_Installer_Skin(compact('type', 'title', 'url', 'nonce', 'plugin', 'api'))); // Perform the action and install the plugin from the $source urldecode(). if ($install_type == 'update-plugin') { delete_site_transient('update_plugins'); $data = get_site_transient('update_plugins'); if (!is_object($data)) { $data = new stdClass(); } $data->response[$plugin['slug']] = new stdClass(); $data->response[$plugin['slug']]->package = $source; $data->response[$plugin['slug']]->version = $plugin['version']; set_site_transient('update_plugins', $data); $upgrader->upgrade($plugin['slug']); } else { $upgrader->install($source); } // Flush plugins cache so we can make sure that the installed plugins list is always up to date. wp_cache_flush(); // Only activate plugins if the config option is set to true. if ($this->is_automatic) { $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method. $activate = activate_plugin($plugin_activate); // Activate the plugin. $this->populate_file_path(); // Re-populate the file path now that the plugin has been installed and activated. if (is_wp_error($activate)) { lbmn_debug_console('line 540: is_wp_error( $activate )'); echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url('themes.php')) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; // Vladimir: echo '<script type="text/javascript">window.parent.pluginsInstallFailed();</script>'; return true; // End it here if there is an error with automatic activation } else { lbmn_debug_console('line 549: ! is_wp_error( $activate )'); echo '<p>' . $this->strings['plugin_activated'] . '</p>'; } } // Display message based on if all plugins are now active or not. $complete = array(); foreach ($this->plugins as $plugin) { if (!is_plugin_active($plugin['file_path'])) { lbmn_debug_console('line 558'); echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url('themes.php')) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; $complete[] = $plugin; break; } else { $complete[] = ''; } } // Filter out any empty entries. $complete = array_filter($complete); // All plugins are active, so we display the complete string and hide the plugin menu. if (empty($complete)) { // echo '<p>' . sprintf( $this->strings['complete'], '<a href="/wp-admin/themes.php" title="' . __( 'Return to themes page', 'tgmpa' ) . '">' . __( 'Return to themes page', 'tgmpa' ) . '</a>' ) . '</p>'; // echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; lbmn_debug_console('line 577'); // Lumberman: add theme options flag echo '<p>' . sprintf(TGM_Plugin_Activation::$instance->strings['complete'], '<a href="' . admin_url('themes.php') . '" title="' . __('Return to Themes', THEMENAME) . '">' . __('Return to Themes', THEMENAME) . '</a>') . '</p>'; echo '<style type="text/css">#adminmenu .wp-submenu li.current { display: none !important; }</style>'; echo '<script type="text/javascript">window.parent.pluginsInstalledSuccessfully(); jQuery(".lumberman-message.quick-setup .step-plugins").addClass("step-completed");</script>'; update_option(LBMN_THEME_NAME . '_required_plugins_installed', true); } return true; } elseif (isset($_GET['plugin']) && (isset($_GET['tgmpa-activate']) && 'activate-plugin' == $_GET['tgmpa-activate'])) { check_admin_referer('tgmpa-activate', 'tgmpa-activate-nonce'); // Populate $plugin array with necessary information. $plugin['name'] = $_GET['plugin_name']; $plugin['slug'] = $_GET['plugin']; $plugin['source'] = $_GET['plugin_source']; $plugin_data = get_plugins('/' . $plugin['slug']); // Retrieve all plugins. $plugin_file = array_keys($plugin_data); // Retrieve all plugin files from installed plugins. $plugin_to_activate = $plugin['slug'] . '/' . $plugin_file[0]; // Match plugin slug with appropriate plugin file. $activate = activate_plugin($plugin_to_activate); // Activate the plugin. if (is_wp_error($activate)) { lbmn_debug_console('line 602'); echo '<div id="message" class="error"><p>' . $activate->get_error_message() . '</p></div>'; echo '<p><a href="' . add_query_arg('page', $this->menu, admin_url('themes.php')) . '" title="' . esc_attr($this->strings['return']) . '" target="_parent">' . $this->strings['return'] . '</a></p>'; // Vladimir: echo '<script type="text/javascript">window.parent.pluginsInstallFailed();</script>'; return true; // End it here if there is an error with activation. } else { // Make sure message doesn't display again if bulk activation is performed immediately after a single activation. if (!isset($_POST['action'])) { $msg = $this->strings['activated_successfully'] . ' <strong>' . $plugin['name'] . '.</strong>'; echo '<div id="message" class="updated"><p>' . $msg . '</p></div>'; // Vladimir: run JS that will check if all plugins installed echo '<script type="text/javascript">location.hash = "#checkifallinstalled";</script>'; } } } return false; }