123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- namespace YahnisElsts\PluginUpdateChecker\v5p1\Theme;
- use YahnisElsts\PluginUpdateChecker\v5p1\UpdateChecker as BaseUpdateChecker;
- use YahnisElsts\PluginUpdateChecker\v5p1\InstalledPackage;
- use YahnisElsts\PluginUpdateChecker\v5p1\Scheduler;
- use YahnisElsts\PluginUpdateChecker\v5p1\DebugBar;
- if ( !class_exists(UpdateChecker::class, false) ):
- class UpdateChecker extends BaseUpdateChecker {
- protected $filterSuffix = 'theme';
- protected $updateTransient = 'update_themes';
- protected $componentType = 'theme';
- /**
- * @var string Theme directory name.
- */
- protected $stylesheet;
- public function __construct($metadataUrl, $stylesheet = null, $customSlug = null, $checkPeriod = 12, $optionName = '') {
- if ( $stylesheet === null ) {
- $stylesheet = get_stylesheet();
- }
- $this->stylesheet = $stylesheet;
- parent::__construct(
- $metadataUrl,
- $stylesheet,
- $customSlug ? $customSlug : $stylesheet,
- $checkPeriod,
- $optionName
- );
- }
- /**
- * For themes, the update array is indexed by theme directory name.
- *
- * @return string
- */
- protected function getUpdateListKey() {
- return $this->directoryName;
- }
- /**
- * Retrieve the latest update (if any) from the configured API endpoint.
- *
- * @return Update|null An instance of Update, or NULL when no updates are available.
- */
- public function requestUpdate() {
- list($themeUpdate, $result) = $this->requestMetadata(Update::class, 'request_update');
- if ( $themeUpdate !== null ) {
- /** @var Update $themeUpdate */
- $themeUpdate->slug = $this->slug;
- }
- $themeUpdate = $this->filterUpdateResult($themeUpdate, $result);
- return $themeUpdate;
- }
- protected function getNoUpdateItemFields() {
- return array_merge(
- parent::getNoUpdateItemFields(),
- array(
- 'theme' => $this->directoryName,
- 'requires' => '',
- )
- );
- }
- public function userCanInstallUpdates() {
- return current_user_can('update_themes');
- }
- /**
- * Create an instance of the scheduler.
- *
- * @param int $checkPeriod
- * @return Scheduler
- */
- protected function createScheduler($checkPeriod) {
- return new Scheduler($this, $checkPeriod, array('load-themes.php'));
- }
- /**
- * Is there an update being installed right now for this theme?
- *
- * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update.
- * @return bool
- */
- public function isBeingUpgraded($upgrader = null) {
- return $this->upgraderStatus->isThemeBeingUpgraded($this->stylesheet, $upgrader);
- }
- protected function createDebugBarExtension() {
- return new DebugBar\Extension($this, DebugBar\ThemePanel::class);
- }
- /**
- * Register a callback for filtering query arguments.
- *
- * The callback function should take one argument - an associative array of query arguments.
- * It should return a modified array of query arguments.
- *
- * @param callable $callback
- * @return void
- */
- public function addQueryArgFilter($callback){
- $this->addFilter('request_update_query_args', $callback);
- }
- /**
- * Register a callback for filtering arguments passed to wp_remote_get().
- *
- * The callback function should take one argument - an associative array of arguments -
- * and return a modified array or arguments. See the WP documentation on wp_remote_get()
- * for details on what arguments are available and how they work.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addHttpRequestArgFilter($callback) {
- $this->addFilter('request_update_options', $callback);
- }
- /**
- * Register a callback for filtering theme updates retrieved from the external API.
- *
- * The callback function should take two arguments. If the theme update was retrieved
- * successfully, the first argument passed will be an instance of Theme_Update. Otherwise,
- * it will be NULL. The second argument will be the corresponding return value of
- * wp_remote_get (see WP docs for details).
- *
- * The callback function should return a new or modified instance of Theme_Update or NULL.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addResultFilter($callback) {
- $this->addFilter('request_update_result', $callback, 10, 2);
- }
- /**
- * Create a package instance that represents this plugin or theme.
- *
- * @return InstalledPackage
- */
- protected function createInstalledPackage() {
- return new Package($this->stylesheet, $this);
- }
- }
- endif;
|