Пример #1
0
 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&amp;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']));
         }
     }
 }
Пример #3
0
 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();
     }
 }
Пример #4
0
 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&amp;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;
 }
Пример #8
0
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();
 }
Пример #10
0
 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;
 }
Пример #12
0
 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;
Пример #13
0
/**
 * 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;
}
Пример #14
0
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;
 }
Пример #17
0
 /**
  * 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;
 }