pfeifferNet

Updater extends Update_Plugin
in package

Plugin updater.

Tags
since
5.11.0
since
6.1.0

Consistency with pNet plugin updater.

uses
Update_Plugin

Table of Contents

Constants

API_HOST  = 'api.github.com'
The GitHub API host.
CONTENT_URL  = 'https://api.github.com/repos/%1$s/%2$s/contents/%3$s?ref=%4$s'
Github API content URL template.
PLUGINS_API_REQS  = array('author' => '', 'banners' => array(), 'download_link' => '', 'homepage' => '', 'last_updated' => '', 'name' => '', 'requires_php' => '', 'requires' => '', 'sections' => array(), 'slug' => '', 'tested' => '', 'version' => '')
The required content for the plugins_api filter.
RELEASE_HEADERS  = array('author' => 'Author', 'authorURI' => 'Author URI', 'description' => 'Description', 'domainPath' => 'Domain Path', 'name' => 'Plugin Name', 'network' => 'Network', 'pluginURI' => 'Plugin URI', 'requires_php' => 'Requires PHP', 'requires' => 'Requires at least', 'requiresPlugins' => 'Requires Plugins', 'tested' => 'Tested up to', 'textDomain' => 'Text Domain', 'updateURI' => 'Update URI', 'version' => 'Version')
The release plugin file headers to parse.
REPOSITORY_NAME  = 'pSite'
The Github repository name.
REPOSITORY_OWNER  = 'krpfeiffer'
Github content owner.
TRANSIENT_EXPIRATION_DEBUG  = 2 * MINUTE_IN_SECONDS
Transient expiration for debugging.
TRANSIENT_EXPIRATION_PRODUCTION  = 6 * HOUR_IN_SECONDS
Transient expiration for production.
TRANSIENT_SUFFIX  = '_release_info'
Github release info transient key suffix.
UPDATE_PLUGINS_HOSTNAME_CONTENT  = array('autoupdate' => false, 'banners' => array(), 'icons' => array(), 'id' => '', 'package' => '', 'requires_php' => '', 'requires' => '', 'slug' => '', 'tested' => '', 'translations' => array(), 'url' => '', 'version' => '')
The required content for the update_plugins_hostname filter.
UPGRADE_ACTIONS  = array('update-selected', 'update-plugin')
The actions to intercept for upgrader source manipulation.

Properties

$github_token  : string
The GitHub access token.
$http_handler  : HTTP_Handler
The instance of the HTTP_Handler class.
$installed_info  : array<string|int, mixed>
The array of installed plugin or theme meta data.
$instances  : array<string|int, object>
The array of instances of this class and sub-classes.
$release_transient_expiration  : int
The GitHub response transient expiration.
$release_transient_key  : string
The GitHub release info transient key.

Methods

get_info()  : false|object
Filter the plugin information for view details popup.
get_instance()  : object
Creates and/or returns the instance of this class.
get_update()  : array<string|int, mixed>
Return the latest plugin release status.
set_github_credentials()  : array<string|int, mixed>
(Maybe) set GitHub authorisation credentials.
set_upgrader_source()  : string
Rename the unzipped update folder to be the same as the existing plugin folder.
__construct()  : void
Initialise the class and set its properties.
get_file_headers()  : array<string|int, mixed>
Get file headers from GitHub.
get_image_data()  : array<string|int, mixed>
Get the update details banner and icon image file data.
get_package_data()  : array<string|int, mixed>
Get the latest release package information from GitHub.
get_release_info()  : array<string|int, mixed>
Get the latest release information.
get_release_notes()  : string
Get the release notes in HTML format from GitHub.
move_update_folder()  : string
Rename (move) the unzipped update folder to have the same name as the existing theme or plugin folder.
rebuild_transient()  : array<string|int, mixed>
Rebuild transient with information from latest GitHub release.
set_installed_info()  : void
Set the installed plugin meta data.

Constants

API_HOST

The GitHub API host.

protected string API_HOST = 'api.github.com'
Tags
since
6.1.0

CONTENT_URL

Github API content URL template.

protected string CONTENT_URL = 'https://api.github.com/repos/%1$s/%2$s/contents/%3$s?ref=%4$s'

The placeholders are: %1$s - repository owner. %2$s - repository name. %3$s - file path. This is the file we want to retrieve from the repository. For example, 'assets/icon.svg', RELEASE.md. %4$s - tag name. This is retrieved from the latest release.

Tags
since
6.1.0

PLUGINS_API_REQS

The required content for the plugins_api filter.

protected array<string|int, mixed> PLUGINS_API_REQS = array('author' => '', 'banners' => array(), 'download_link' => '', 'homepage' => '', 'last_updated' => '', 'name' => '', 'requires_php' => '', 'requires' => '', 'sections' => array(), 'slug' => '', 'tested' => '', 'version' => '')
  • The fields are defined in install_plugin_information() in wp-admin/includes/plugin-install.php.

@type string $author The name of the author of the plugin. @type array $banners Array of plugin banners. @type string $download_link The download link for the plugin update package. @type string $homepage The URL of the plugin homepage. @type string $last_updated The date the plugin was last updated. @type string $name The name of the plugin. @type string $requires_php The version of PHP the plugin requires. @type string $requires The version of WordPress the plugin requires. @type array $sections Array of plugin sections. @type string $slug Directory name of the plugin. @type string $tested The version of WordPress the plugin is tested against. @type string $version The version of the plugin.

Tags
since
6.1.0
link
https://developer.wordpress.org/reference/hooks/plugins_api/

RELEASE_HEADERS

The release plugin file headers to parse.

protected array<string|int, mixed> RELEASE_HEADERS = array('author' => 'Author', 'authorURI' => 'Author URI', 'description' => 'Description', 'domainPath' => 'Domain Path', 'name' => 'Plugin Name', 'network' => 'Network', 'pluginURI' => 'Plugin URI', 'requires_php' => 'Requires PHP', 'requires' => 'Requires at least', 'requiresPlugins' => 'Requires Plugins', 'tested' => 'Tested up to', 'textDomain' => 'Text Domain', 'updateURI' => 'Update URI', 'version' => 'Version')
  • List of headers, in the format: array( 'header_key' => 'Header Name' ).
Tags
since
6.1.0

REPOSITORY_NAME

The Github repository name.

protected string REPOSITORY_NAME = 'pSite'
Tags
since
6.1.0

REPOSITORY_OWNER

Github content owner.

protected string REPOSITORY_OWNER = 'krpfeiffer'
Tags
since
6.1.0

TRANSIENT_EXPIRATION_DEBUG

Transient expiration for debugging.

protected int TRANSIENT_EXPIRATION_DEBUG = 2 * MINUTE_IN_SECONDS
Tags
since
6.1.0

TRANSIENT_EXPIRATION_PRODUCTION

Transient expiration for production.

protected int TRANSIENT_EXPIRATION_PRODUCTION = 6 * HOUR_IN_SECONDS
Tags
since
6.1.0

TRANSIENT_SUFFIX

Github release info transient key suffix.

protected string TRANSIENT_SUFFIX = '_release_info'
Tags
since
6.1.0

UPDATE_PLUGINS_HOSTNAME_CONTENT

The required content for the update_plugins_hostname filter.

protected array<string|int, mixed> UPDATE_PLUGINS_HOSTNAME_CONTENT = array('autoupdate' => false, 'banners' => array(), 'icons' => array(), 'id' => '', 'package' => '', 'requires_php' => '', 'requires' => '', 'slug' => '', 'tested' => '', 'translations' => array(), 'url' => '', 'version' => '')

@type bool $autoupdate Optional. Whether the plugin should automatically update. Defaults to false. @type array $banners Optional. Array of plugin banners. @type array $icons Optional. Array of plugin icons. @type string $id Optional. ID of the plugin for update purposes, should be a URI specified in the Update URI header field. @type string $package The URL to the update ZIP for the plugin. @type string $requires Optional. The version of WordPress the plugin requires. @type string $requires_php Optional. The version of PHP the plugin requires. @type string $slug Directory name of the plugin. @type string $tested Optional. The version of WordPress the plugin is tested against. @type array $translations Optional. List of translation updates for the plugin. @type string $url The URL for details of the plugin. @type string $version The version of the plugin.

Tags
since
6.1.0
link
https://developer.wordpress.org/reference/hooks/update_plugins_hostname/

UPGRADE_ACTIONS

The actions to intercept for upgrader source manipulation.

protected array<string|int, string> UPGRADE_ACTIONS = array('update-selected', 'update-plugin')
Tags
since
6.1.0

Properties

$github_token

The GitHub access token.

protected string $github_token = ''
  • The token is retrieved from the plugin settings.
Tags
since
6.1.0

$installed_info

The array of installed plugin or theme meta data.

protected array<string|int, mixed> $installed_info = array()
Tags
since
6.1.0

$instances

The array of instances of this class and sub-classes.

protected static array<string|int, object> $instances = array()
Tags
since
6.1.0

$release_transient_expiration

The GitHub response transient expiration.

protected int $release_transient_expiration = 0
  • Short expiration in development. 6-hour expiration in production.
  • The value is set in class constructor.
Tags
since
6.1.0

$release_transient_key

The GitHub release info transient key.

protected string $release_transient_key = ''
Tags
since
6.1.0

Methods

get_info()

Filter the plugin information for view details popup.

public get_info(array<string|int, mixed>|false|object $result, string $action, object $args) : false|object
Parameters
$result : array<string|int, mixed>|false|object

The result object or array. Default false.

$action : string

The type of information being requested from the plugin installation API.

$args : object

Plugin API arguments.

Tags
since
5.11.0
since
6.1.0

Refactor to use repository metadata.

link
https://developer.wordpress.org/reference/functions/plugins_api/
see
Update_Plugin::PLUGINS_API_REQS
Return values
false|object

The result. Must be an object or false.

get_instance()

Creates and/or returns the instance of this class.

public static get_instance() : object
Tags
since
6.1.0
Return values
object

The instance of this class.

get_update()

Return the latest plugin release status.

public get_update(array<string|int, mixed>|false $update, array<string|int, mixed> $plugin_data, string $plugin_basename, array<string|int, string> $locales) : array<string|int, mixed>
Parameters
$update : array<string|int, mixed>|false

The plugin update data with the latest details. Default false.

$plugin_data : array<string|int, mixed>

Plugin headers.

$plugin_basename : string

Plugin basename.

$locales : array<string|int, string>

Installed locales to look up translations for.

Tags
since
5.11.0
since
6.1.0

Refactor to use repository metadata.

link
https://developer.wordpress.org/reference/hooks/update_plugins_hostname/
see
Update_Plugin::UPDATE_PLUGINS_HOSTNAME_CONTENT
Return values
array<string|int, mixed>

The (maybe) updated plugin information.

set_github_credentials()

(Maybe) set GitHub authorisation credentials.

public set_github_credentials(array<string|int, mixed> $args, string $url) : array<string|int, mixed>
  • Intercept HHTP requests and add authorisation token if request is to the GitHub api by the GitHub repository owner.
Parameters
$args : array<string|int, mixed>

HTTP request arguments.

$url : string

The request URL.

Tags
since
6.1.0
link
https://developer.wordpress.org/reference/hooks/http_request_args/
Return values
array<string|int, mixed>

The (maybe) updated args.

set_upgrader_source()

Rename the unzipped update folder to be the same as the existing plugin folder.

public set_upgrader_source(string $source, string $remote_source, WP_Upgrader $upgrader, array<string|int, mixed> $hook_extra) : string
  • The GitHub release archive zip file structure usually means that WordPress assigns a random name to the unzipped folder.
  • This method renames the unzipped folder to allow the core update process to work as expected.
Parameters
$source : string

The location of the unzipped update files.

$remote_source : string

The temporary location of the uploaded zip folder.

$upgrader : WP_Upgrader

The WP_Upgrader instance.

$hook_extra : array<string|int, mixed>

Extra arguments passed to hooked filters.

Tags
since
6.1.0
link
https://developer.wordpress.org/reference/hooks/upgrader_source_selection/
uses
HTTP_Handler::get_request_vars()
Return values
string

The (maybe) updated source location.

get_file_headers()

Get file headers from GitHub.

protected get_file_headers(string $url) : array<string|int, mixed>
Parameters
$url : string

The URL to use to extract header information.

Tags
since
6.4.0
Return values
array<string|int, mixed>

The file header information.

get_image_data()

Get the update details banner and icon image file data.

protected get_image_data() : array<string|int, mixed>
Tags
since
6.1.0
Return values
array<string|int, mixed>

get_package_data()

Get the latest release package information from GitHub.

protected get_package_data(string $update_url) : array<string|int, mixed>
Parameters
$update_url : string

The URL at which the latest release should be found.

Tags
since
6.1.0
link
https://docs.github.com/en/rest/releases/releases#get-the-latest-release
Return values
array<string|int, mixed>

The array of data about the release returned from GitHub.

get_release_info()

Get the latest release information.

protected get_release_info() : array<string|int, mixed>
  • A transient is used to cache response so we don't hammer the GitHub API.
  • Some values are duplicated, as different WordPress functions expect different keys.
  • Not all fields will be populated, as some are not relevant to plugins or themes.
Tags
since
6.1.0
Return values
array<string|int, mixed>

The latest plugin or theme release information. @type string $api_url The API URL for the release. @type array $assets The assets for the release. @type string $assets_url The URL for the release assets. @type string $author The author of the release plugin or theme. @type string $authorURI The author URL. @type bool $autoupdate Whether the plugin should automatically update. @type array $banners The array of banner images for the view details page. @type string $body The text release notes of the release. @type string $created_at The date the release was created. @type string $description The description of the plugin or theme. @type string $domainPath The path to the language files. @type string $download_link The download link for the release. Same as zipball_url. @type bool $draft Whether the release is a draft. @type string $homepage The homepage of the plugin. Same as pluginURI. @type string $html_url The HTML URL for the release. @type array $icons The array of plugin or theme icons for the updates page. @type int $id The ID of the release. @type bool $immutable Whether the release is immutable. @type string $last_updated The date the release was last updated. @type string $name The plugin or theme name @type string $network The network the plugin or theme is associated with. @type string $node_id The node ID of the release. @type string $package The package URL for the release. Sames as zipball_url. @type string $pluginURI The plugin URI. @type bool $prerelease Whether the release is a pre-release. @type string $published_at The date the release was published. @type string $release_name The name of the release. @type string $requires The version of WordPress required by the plugin or theme. @type string $requires_php The version of PHP required by the plugin or theme. @type string $requiresPlugins The plugins required by the plugin. @type array $sections The sections for the plugin details page. @type string $description The description section. Same as description. @type string $changelog The changelog section. This is the HTML formatted release notes. @type string $slug The slug of the plugin or theme. This is the plugin or theme folder name. @type string $tag_name The tag name of the latest release. @type string $tarball_url The tarball URL for the release. @type string $target_commitish The target commitish for the release. @type string $tested The version of WordPress the plugin or theme is tested against. @type string $textDomain The text domain of the plugin or theme. @type string $theme The directory name of the theme. @type string $updateURI The update URI for the plugin or theme. @type string $upload_url The upload URL for the release assets. @type string $url The URL for the plugin. Same as pluginURI. @type string $version The version of the plugin or theme update. Follows SemVer standard. @type string $zipball_url The zipball URL for the release.

get_release_notes()

Get the release notes in HTML format from GitHub.

protected get_release_notes(string $tag_name) : string
Parameters
$tag_name : string

The tag name of the release to target.

Tags
since
6.1.0
uses
Helper::strip_whitespace()
Return values
string

The release notes in HTML format.

move_update_folder()

Rename (move) the unzipped update folder to have the same name as the existing theme or plugin folder.

protected move_update_folder(string $source, string $slug) : string
Parameters
$source : string

The location of the unzipped files, within a temporary folder.

$slug : string

The name of the theme or plugin folder.

Tags
since
6.1.0
Return values
string

The updated source location.

rebuild_transient()

Rebuild transient with information from latest GitHub release.

protected rebuild_transient() : array<string|int, mixed>
  • Get the latest release metadata from GitHub.
  • Extended metadata is retrieved from the headers of the main plugin file included in the release.
  • The changelog is retrieved from the release notes (RELEASE.md) in the repository.
Tags
since
5.11.0
since
6.1.0

Refactor to use repository and latest release plugin metadata.

Return values
array<string|int, mixed>

The release information array.

set_installed_info()

Set the installed plugin meta data.

protected set_installed_info() : void
Tags
since
6.3.0
uses
get_asset_url()
uses
get_plugin_metadata()

        
On this page

Search results