356 lines
5.8 KiB
PHP
356 lines
5.8 KiB
PHP
<?php
|
|
|
|
class acf_settings_updates {
|
|
|
|
var $view;
|
|
|
|
|
|
/*
|
|
* __construct
|
|
*
|
|
* Initialize filters, action, variables and includes
|
|
*
|
|
* @type function
|
|
* @date 23/06/12
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function __construct() {
|
|
|
|
// actions
|
|
add_action('admin_menu', array($this, 'admin_menu'), 20 );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* admin_menu
|
|
*
|
|
* This function will add the ACF menu item to the WP admin
|
|
*
|
|
* @type action (admin_menu)
|
|
* @date 28/09/13
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function admin_menu() {
|
|
|
|
// bail early if no show_admin
|
|
if( !acf_get_setting('show_admin') ) return;
|
|
|
|
|
|
// bail early if no show_updates
|
|
if( !acf_get_setting('show_updates') ) return;
|
|
|
|
|
|
// bail early if not a plugin (included in theme)
|
|
if( !acf_is_plugin_active() ) return;
|
|
|
|
|
|
// add page
|
|
$page = add_submenu_page('edit.php?post_type=acf-field-group', __('Updates','acf'), __('Updates','acf'), acf_get_setting('capability'),'acf-settings-updates', array($this,'html') );
|
|
|
|
|
|
// actions
|
|
add_action('load-' . $page, array($this,'load'));
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* show_remote_response_error
|
|
*
|
|
* This function will show an admin notice if server connection fails
|
|
*
|
|
* @type function
|
|
* @date 25/07/2016
|
|
* @since 5.4.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function show_remote_response_error() {
|
|
|
|
// only run once
|
|
if( acf_has_done('show_remote_response_error') ) return false;
|
|
|
|
|
|
// vars
|
|
$error = acf_get_setting('remote_response_error');
|
|
$notice = __('<b>Error</b>. Could not connect to update server', 'acf');
|
|
|
|
|
|
// append error
|
|
if( $error ) {
|
|
|
|
$notice .= ' <span class="description">(' . $error . ')</span>';
|
|
|
|
}
|
|
|
|
|
|
// add notice
|
|
acf_add_admin_notice( $notice, 'error' );
|
|
|
|
|
|
// return
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* load
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 7/01/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function load() {
|
|
|
|
// $_POST
|
|
if( acf_verify_nonce('activate_pro_licence') ) {
|
|
|
|
$this->activate_pro_licence();
|
|
|
|
} elseif( acf_verify_nonce('deactivate_pro_licence') ) {
|
|
|
|
$this->deactivate_pro_licence();
|
|
|
|
}
|
|
|
|
|
|
// view
|
|
$this->view = array(
|
|
'license' => '',
|
|
'active' => 0,
|
|
'current_version' => acf_get_setting('version'),
|
|
'remote_version' => '',
|
|
'update_available' => false,
|
|
'changelog' => '',
|
|
'upgrade_notice' => ''
|
|
);
|
|
|
|
|
|
// license
|
|
if( acf_pro_is_license_active() ) {
|
|
|
|
$this->view['license'] = acf_pro_get_license_key();
|
|
$this->view['active'] = 1;
|
|
|
|
}
|
|
|
|
|
|
// vars
|
|
$info = acf_get_remote_plugin_info();
|
|
|
|
|
|
// validate
|
|
if( empty($info) ) {
|
|
|
|
return $this->show_remote_response_error();
|
|
|
|
}
|
|
|
|
|
|
// add info to view
|
|
$this->view['remote_version'] = $info['version'];
|
|
|
|
|
|
// add changelog if the remote version is '>' than the current version
|
|
if( acf_pro_is_update_available() ) {
|
|
|
|
$this->view['update_available'] = true;
|
|
$this->view['changelog'] = acf_maybe_get($info, 'changelog');
|
|
$this->view['upgrade_notice'] = acf_maybe_get($info, 'upgrade_notice');
|
|
|
|
}
|
|
|
|
|
|
// update transient
|
|
acf_refresh_plugin_updates_transient();
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* html
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 7/01/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function html() {
|
|
|
|
// load view
|
|
acf_pro_get_view('settings-updates', $this->view);
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* activate_pro_licence
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 16/01/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function activate_pro_licence() {
|
|
|
|
// connect
|
|
$args = array(
|
|
'_nonce' => wp_create_nonce('activate_pro_licence'),
|
|
'acf_license' => acf_extract_var($_POST, 'acf_pro_licence'),
|
|
'acf_version' => acf_get_setting('version'),
|
|
'wp_name' => get_bloginfo('name'),
|
|
'wp_url' => home_url(),
|
|
'wp_version' => get_bloginfo('version'),
|
|
'wp_language' => get_bloginfo('language'),
|
|
'wp_timezone' => get_option('timezone_string'),
|
|
);
|
|
|
|
|
|
// connect
|
|
$response = acf_pro_get_remote_response( 'activate-license', $args );
|
|
|
|
|
|
// validate
|
|
if( empty($response) ) {
|
|
|
|
return $this->show_remote_response_error();
|
|
|
|
}
|
|
|
|
|
|
// vars
|
|
$response = json_decode($response, true);
|
|
$class = '';
|
|
|
|
|
|
// action
|
|
if( $response['status'] == 1 ) {
|
|
|
|
acf_pro_update_license($response['license']);
|
|
|
|
} else {
|
|
|
|
$class = 'error';
|
|
|
|
}
|
|
|
|
|
|
// show message
|
|
if( $response['message'] ) {
|
|
|
|
acf_add_admin_notice($response['message'], $class);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* deactivate_pro_licence
|
|
*
|
|
* description
|
|
*
|
|
* @type function
|
|
* @date 16/01/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param $post_id (int)
|
|
* @return $post_id (int)
|
|
*/
|
|
|
|
function deactivate_pro_licence() {
|
|
|
|
// validate
|
|
if( !acf_pro_is_license_active() ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
// connect
|
|
$args = array(
|
|
'_nonce' => wp_create_nonce('deactivate_pro_licence'),
|
|
'acf_license' => acf_pro_get_license_key(),
|
|
'wp_url' => home_url(),
|
|
);
|
|
|
|
|
|
// connect
|
|
$response = acf_pro_get_remote_response( 'deactivate-license', $args );
|
|
|
|
|
|
// validate
|
|
if( empty($response) ) {
|
|
|
|
return $this->show_remote_response_error();
|
|
|
|
}
|
|
|
|
|
|
// vars
|
|
$response = json_decode($response, true);
|
|
$class = '';
|
|
|
|
|
|
// allways clear DB
|
|
acf_pro_update_license('');
|
|
|
|
|
|
// action
|
|
if( $response['status'] == 1 ) {
|
|
|
|
|
|
|
|
} else {
|
|
|
|
$class = 'error';
|
|
|
|
}
|
|
|
|
|
|
// show message
|
|
if( $response['message'] ) {
|
|
|
|
acf_add_admin_notice($response['message'], $class);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// initialize
|
|
new acf_settings_updates();
|
|
|
|
?>
|