pluto3/inc/acf/advanced-custom-fields-pro/pro/admin/settings-updates.php
2017-09-19 16:23:41 +08:00

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();
?>