Fragen\GitHub_Updater\Base::upgrader_source_selection PHP Метод

upgrader_source_selection() публичный Метод

Used for renaming of sources to ensure correct directory name.
public upgrader_source_selection ( string $source, string $remote_source, object $upgrader, array $hook_extra = null ) : string
$source string
$remote_source string
$upgrader object
$hook_extra array
Результат string
    public function upgrader_source_selection($source, $remote_source, $upgrader, $hook_extra = null)
    {
        global $wp_filesystem, $plugins, $themes;
        $slug = null;
        $repo = null;
        $new_source = null;
        $upgrader_object = null;
        /*
         * Rename plugins.
         */
        if ($upgrader instanceof \Plugin_Upgrader) {
            $upgrader_object = Plugin::instance();
            if (isset($hook_extra['plugin'])) {
                $slug = dirname($hook_extra['plugin']);
                $new_source = trailingslashit($remote_source) . $slug;
            }
            /*
             * Pre-WordPress 4.4
             */
            if ($plugins && empty($hook_extra)) {
                foreach (array_reverse($plugins) as $plugin) {
                    $slug = dirname($plugin);
                    if (false !== stristr(basename($source), dirname($plugin))) {
                        $new_source = trailingslashit($remote_source) . dirname($plugin);
                        break;
                    }
                }
            }
            if (!$plugins && empty($hook_extra)) {
                if (isset($upgrader->skin->plugin)) {
                    $slug = dirname($upgrader->skin->plugin);
                }
                if (empty($slug) && isset($_POST['slug'])) {
                    $slug = sanitize_text_field($_POST['slug']);
                }
                $new_source = trailingslashit($remote_source) . $slug;
            }
        }
        /*
         * Rename themes.
         */
        if ($upgrader instanceof \Theme_Upgrader) {
            $upgrader_object = Theme::instance();
            if (isset($hook_extra['theme'])) {
                $slug = $hook_extra['theme'];
                $new_source = trailingslashit($remote_source) . $slug;
            }
            /*
             * Pre-WordPress 4.4
             */
            if ($themes && empty($hook_extra)) {
                foreach ($themes as $theme) {
                    $slug = $theme;
                    if (false !== stristr(basename($source), $theme)) {
                        $new_source = trailingslashit($remote_source) . $theme;
                        break;
                    }
                }
            }
            if (!$themes && empty($hook_extra)) {
                if (isset($upgrader->skin->theme)) {
                    $slug = $upgrader->skin->theme;
                }
                $new_source = trailingslashit($remote_source) . $slug;
            }
        }
        $repo = $this->get_repo_slugs($slug, $upgrader_object);
        /*
         * Not GitHub Updater plugin/theme.
         */
        if (!isset($_POST['github_updater_repo']) && empty($repo)) {
            return $source;
        }
        /*
         * Remote install source.
         */
        if (isset(self::$options['github_updater_install_repo'])) {
            $repo['repo'] = $repo['extended_repo'] = self::$options['github_updater_install_repo'];
            $new_source = trailingslashit($remote_source) . self::$options['github_updater_install_repo'];
        }
        /*
         * Directory is misnamed to start.
         * May cause deactivation.
         */
        if (!array_key_exists($slug, (array) $upgrader_object->config) && !isset(self::$options['github_updater_install_repo'])) {
            if ($upgrader instanceof \Plugin_Upgrader) {
                foreach ($upgrader_object->config as $plugin) {
                    if ($slug === dirname($plugin->slug)) {
                        $slug = $plugin->repo;
                        $new_source = trailingslashit($remote_source) . $slug;
                        break;
                    }
                }
            }
            if ($upgrader instanceof \Theme_Upgrader) {
                foreach ($upgrader_object->config as $theme) {
                    if ($slug === $theme->repo) {
                        $new_source = trailingslashit($remote_source) . $slug;
                        break;
                    }
                }
            }
        }
        /*
         * Revert extended naming if previously present.
         */
        if ($upgrader_object instanceof Plugin && (!defined('GITHUB_UPDATER_EXTENDED_NAMING') || !GITHUB_UPDATER_EXTENDED_NAMING) && $slug !== $repo['repo']) {
            $new_source = trailingslashit($remote_source) . $repo['repo'];
        }
        /*
         * Extended naming.
         * Only for plugins and not for 'master' === branch && .org hosted.
         */
        if ($upgrader_object instanceof Plugin && (defined('GITHUB_UPDATER_EXTENDED_NAMING') && GITHUB_UPDATER_EXTENDED_NAMING) && (isset($upgrader_object->config[$repo['repo']]) && !$upgrader_object->config[$repo['repo']]->dot_org || $upgrader_object->tag && 'master' !== $upgrader_object->tag || isset(self::$options['github_updater_install_repo']))) {
            $new_source = trailingslashit($remote_source) . $repo['extended_repo'];
            printf(esc_html__('Rename successful using extended name to %1$s', 'github-updater') . '&#8230;<br>', '<strong>' . $repo['extended_repo'] . '</strong>');
        }
        /*
         * Renaming if GitLab Release Asset.
         * It has a different download directory structure.
         */
        if (isset($upgrader_object->config[$slug]->release_asset) && $upgrader_object->config[$slug]->release_asset && !empty($upgrader_object->config[$slug]->ci_job)) {
            $new_source = trailingslashit(dirname($remote_source)) . $slug;
            add_filter('upgrader_post_install', array(&$this, 'upgrader_post_install'), 10, 3);
        }
        $wp_filesystem->move($source, $new_source);
        return trailingslashit($new_source);
    }