mirror of
https://github.com/lubuntu-team/lubuntu.me.git
synced 2025-02-23 08:11:08 +00:00
187 lines
5.7 KiB
PHP
187 lines
5.7 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Copyright (C) 2014-2017 ServMask Inc.
|
||
|
*
|
||
|
* This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation, either version 3 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
* ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗
|
||
|
* ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝
|
||
|
* ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝
|
||
|
* ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗
|
||
|
* ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗
|
||
|
* ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
|
||
|
*/
|
||
|
|
||
|
class Ai1wm_Updater {
|
||
|
|
||
|
/**
|
||
|
* Retrieve plugin installer pages from WordPress Plugins API.
|
||
|
*
|
||
|
* @param mixed $result
|
||
|
* @param string $action
|
||
|
* @param array|object $args
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public static function plugins_api( $result, $action = null, $args = null ) {
|
||
|
if ( empty( $args->slug ) ) {
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
$extensions = Ai1wm_Extensions::get();
|
||
|
|
||
|
// View details page
|
||
|
if ( isset( $args->slug ) && isset( $extensions[ $args->slug ] ) && $action === 'plugin_information' ) {
|
||
|
|
||
|
// Get current updates
|
||
|
$updates = get_option( AI1WM_UPDATER, array() );
|
||
|
|
||
|
// Plugin details
|
||
|
if ( isset( $updates[ $args->slug ] ) && ( $details = $updates[ $args->slug ] ) ) {
|
||
|
return (object) $details;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update WordPress plugin list page.
|
||
|
*
|
||
|
* @param object $transient
|
||
|
* @return object
|
||
|
*/
|
||
|
public static function update_plugins( $transient ) {
|
||
|
$extensions = Ai1wm_Extensions::get();
|
||
|
|
||
|
// Get current updates
|
||
|
$updates = get_option( AI1WM_UPDATER, array() );
|
||
|
|
||
|
// Get extension updates
|
||
|
foreach ( $updates as $slug => $update ) {
|
||
|
if ( isset( $extensions[ $slug ] ) && ( $extension = $extensions[ $slug ] ) ) {
|
||
|
if ( get_option( $extension['key'] ) ) {
|
||
|
if ( version_compare( $extension['version'], $update['version'], '<' ) ) {
|
||
|
|
||
|
// Get Site URL
|
||
|
$url = urlencode( get_site_url() );
|
||
|
|
||
|
// Get Purchase ID
|
||
|
$key = get_option( $extension['key'] );
|
||
|
|
||
|
// Set plugin details
|
||
|
$transient->response[ $extension['basename'] ] = (object) array(
|
||
|
'slug' => $slug,
|
||
|
'new_version' => $update['version'],
|
||
|
'url' => $update['homepage'],
|
||
|
'plugin' => $extension['basename'],
|
||
|
'package' => sprintf( '%s/%s?siteurl=%s', $update['download_link'], $key, $url ),
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $transient;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Check for extension updates
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public static function check_for_updates() {
|
||
|
// Get current updates
|
||
|
$updates = get_option( AI1WM_UPDATER, array() );
|
||
|
|
||
|
// Get extension updates
|
||
|
foreach ( Ai1wm_Extensions::get() as $slug => $extension ) {
|
||
|
$response = wp_remote_get( $extension['about'], array(
|
||
|
'timeout' => 15,
|
||
|
'headers' => array( 'Accept' => 'application/json' ),
|
||
|
) );
|
||
|
|
||
|
// Add updates
|
||
|
if ( ! is_wp_error( $response ) ) {
|
||
|
if ( ( $response = json_decode( $response['body'], true ) ) ) {
|
||
|
// Slug is mandatory
|
||
|
if ( ! isset( $response['slug'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Version is mandatory
|
||
|
if ( ! isset( $response['version'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Homepage is mandatory
|
||
|
if ( ! isset( $response['homepage'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Download link is mandatory
|
||
|
if ( ! isset( $response['download_link'] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$updates[ $slug ] = $response;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Set new updates
|
||
|
update_option( AI1WM_UPDATER, $updates );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add "Check for updates" link
|
||
|
*
|
||
|
* @param array $links The array having default links for the plugin.
|
||
|
* @param string $file The name of the plugin file.
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function plugin_row_meta( $links, $file ) {
|
||
|
$modal = 0;
|
||
|
|
||
|
// Add link for each extension
|
||
|
foreach ( Ai1wm_Extensions::get() as $slug => $extension ) {
|
||
|
$modal++;
|
||
|
|
||
|
// Get plugin details
|
||
|
if ( $file === $extension['basename'] ) {
|
||
|
$url = add_query_arg( array( 'ai1wm_updater' => 1 ), network_admin_url( 'plugins.php' ) );
|
||
|
|
||
|
// Check Purchase ID
|
||
|
if ( get_option( $extension['key'] ) ) {
|
||
|
|
||
|
// Add "Check for updates" link
|
||
|
$links[] = Ai1wm_Template::get_content( 'updater/check', array(
|
||
|
'url' => wp_nonce_url( $url, 'ai1wm_updater_nonce' ),
|
||
|
) );
|
||
|
|
||
|
} else {
|
||
|
|
||
|
// Add modal
|
||
|
$links[] = Ai1wm_Template::get_content( 'updater/modal', array(
|
||
|
'url' => wp_nonce_url( $url, 'ai1wm_updater_nonce' ),
|
||
|
'modal' => $modal,
|
||
|
) );
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $links;
|
||
|
}
|
||
|
}
|