_update_check();
}
/**
* Register the stylesheets for the admin area.
*
* @since 1.0.0
*/
public function enqueue_styles() {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Age_Gate_Loader as all of the hooks are defined
* in that particular class.
*
* The Age_Gate_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_style( $this->plugin_name, AGE_GATE_URL . 'admin/css/age-gate-admin.css', array(), $this->version, 'all' );
}
/**
* Register the JavaScript for the admin area.
*
* @since 1.0.0
*/
public function enqueue_scripts($hook) {
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Age_Gate_Loader as all of the hooks are defined
* in that particular class.
*
* The Age_Gate_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_script('wplink');
wp_enqueue_script( $this->plugin_name, AGE_GATE_URL . 'admin/js/age-gate-admin.js', array( 'jquery', 'wp-color-picker' ), $this->version, false );
wp_localize_script( $this->plugin_name, 'ag', $this->_localize() );
if('edit.php' === $hook){
// if ( 'edit.php' === $hook && ) {
wp_enqueue_script( $this->plugin_name . '-edit', AGE_GATE_URL . 'admin/js/age-gate-admin-edit.js', array( 'jquery' ), $this->version, true );
}
}
/**
* Register global plugin menu item
*
* @since 1.0.0 Displays the menu
*/
public function add_menu_section()
{
$this->plugin_page_hook_suffix = add_menu_page(
__('Age Gate', 'age-gate'),
__('Age Gate', 'age-gate'),
AGE_GATE_CAP_RESTRICTIONS,
$this->plugin_name,
'__return_false',//array($this, 'display_options_page'),
'dashicons-lock',
60
);
}
public function age_gate_admin_notice() {
if ($messages = get_transient('age_gate_admin_notice')) {
foreach ($messages as $key => $message) {
echo '
'. $message['message'] .'
';
}
}
if(current_user_can(AGE_GATE_CAP_ACCESS)){
$this->_dev_notices();
}
delete_transient('age_gate_admin_notice');
delete_transient('age_gate_admin_notice_css');
}
private function _dev_notices()
{
$data = get_plugin_data( AGE_GATE_PATH . 'age-gate.php' );
$sub = explode('-', ($data['Version']));
if(isset($sub[1]) && !empty($sub[1]) && !$this->settings['advanced']['dev_hide_warning']){
if($this->settings['advanced']['dev_notify'] && $new = $this->_checkLatest($sub[1])){
$messageText = sprintf(__('A new development version of Age Gate has been released. %s is the latest build, you have %s.', 'age-gate'), $new, $sub[1]);
echo '';
}
$messageText = sprintf(__('You are using the %s version of Age Gate %s. This may not be suitable for production websites.', 'age-gate'), $sub[1], AGE_GATE_VERSION);
echo '';
}
}
public function editor_scripts(){
global $pagenow;
if(isset($_REQUEST['page']) && strpos($_REQUEST['page'], 'age-gate') !== false){
if ( ! class_exists('_WP_Editors') and ( ! defined('DOING_AJAX') or ! DOING_AJAX)) {
require_once ABSPATH.WPINC.'/class-wp-editor.php';
wp_print_styles('editor-buttons');
_WP_Editors::wp_link_dialog();
}
}
}
/**
* Create a settings link in the plugins screen
*
* @param mixed $links The standard links
* @return mixed $links The links updated with our settings
* @since 1.0.0
*/
public function plugin_action_links( $links ) {
$addons = [];
$addons = apply_filters('age_gate_addons', $addons);
$addons = array_unique($addons, SORT_REGULAR);
$settings_link = '' . __( 'Settings', 'age-gate' ) . '';
$donate_link = '' . __( 'Donate', 'age-gate' ) . '';
array_unshift( $links, $settings_link );
array_push( $links, $donate_link );
if($addons){
unset($links['deactivate']);
}
return $links;
}
/**
* Create a link to website
*
* @param mixed $plugin_meta The standard links
* @return mixed $plugin_file The links updated with our settings
* @since 2.0.0
*/
public function website_link( $plugin_meta, $plugin_file ) {
$basename = plugin_basename(AGE_GATE_PATH) . '/age-gate.php';
if ( $basename === $plugin_file ) {
$plugin_meta[] = sprintf(
'%s',
'https://agegate.io/docs',
esc_html__( 'Documentation', 'age-gate' )
);
$plugin_meta[] = sprintf(
'%s',
'https://agegate.io/release-notes',
esc_html__( 'What’s new?', 'age-gate' )
);
$addons = [];
$addons = apply_filters('age_gate_addons', $addons);
$addons = array_unique($addons, SORT_REGULAR);
if($addons){
$message = '
Age Gate cannot be disabled as the following addons are activated:';
foreach ($addons as $key => $value) {
$message .= ' ' . $value['name'] . ",";
}
$plugin_meta[] = substr($message, 0, -1);
}
}
return $plugin_meta;
}
private function _localize()
{
return array(
'uploader' => array(
'title' => _x('Select an image to upload', 'Image uploader text', 'age-gate'),
'button' => _x('Use this image', 'Image uploader button', 'age-gate'),
'remove_image' => __('Remove image', 'age-gate'),
),
'link' => array(
'remove_link' => __('Remove link', 'age-gate'),
'custom' => __('Custom', 'age-gate')
),
'css' => array(
'warning' => __('There are warnings in your CSS. You can save your changes, but there may be display issues.', 'age-gate'),
'error' => __('There are errors in your CSS. Please fix these before saving.', 'age-gate'),
),
'update_confirm' => array(
'warning' => _x('I have read the warning and understand updating could cause unexpected results.', 'Warning message presented when trying to update between major versions', 'age-gate'),
'confirm' => _x('You can now proceed with the update', 'Confirm message presented on enabling update', 'age-gate')
)
);
}
/**
* Checks the plugin version against the stored version
* and updates the settings if mismatched
*
* @since 1.1.0
*
*/
private function _update_check()
{
if (AGE_GATE_VERSION !== get_option('wp_age_gate_version')){
require_once AGE_GATE_PATH . 'includes/class-age-gate-activator.php';
Age_Gate_Activator::activate();
$this->_set_admin_notice( array('message' => __('It looks like you\'ve recently updated Age Gate, please clear any caches.', 'age-gate'), 'status' => 'warning') );
// update_option('wp_age_gate_version', AGE_GATE_VERSION);
}
}
/**
* Forces use of JS age gate in some cases
* @return [type] [description]
*/
public static function force_js()
{
if(!function_exists('is_plugin_active')){
// wp_die(ABSPATH);
require_once( ABSPATH . "wp-admin/includes/plugin.php" );
}
return is_plugin_active('wp-e-commerce/wp-shopping-cart.php');
}
private function _checkLatest($current)
{
return false;
$x = @file_get_contents('https://agegate.io/api/downloads/v1/latest');
if($x){
$x = str_replace('"', '', $x);
}
if(version_compare($x, $current, ">")){
return $x;
}
}
/**
* Purges the expired Age Gate $transients
*
* From 2.1.0 this method only fires if WP Cron is diabled and when hitting admin
*
* @return void
* @since 2.1.0
*
*/
public function purge_transients()
{
global $pagenow;
if(defined('DISABLE_WP_CRON') && DISABLE_WP_CRON === true && $pagenow === 'admin.php'){
global $wpdb;
$options = $wpdb->options;
$t = esc_sql( "_transient_timeout_%_age_gate%" );
$sql = $wpdb->prepare (
"
SELECT option_name, option_value
FROM $options
WHERE option_name LIKE '%s'
",
$t
);
$transients = $wpdb->get_results( $sql );
foreach ($transients as $transient) {
if($transient->option_value < time()){
// Strip away the WordPress prefix in order to arrive at the transient key.
$key = str_replace( '_transient_timeout_', '', $transient->option_name );
// Now that we have the key, use WordPress core to the delete the transient.
delete_transient( $key );
}
}
}
}
public function ag_toggle()
{
if(isset($_REQUEST['ag_switch'])){
global $pagenow;
if($this->_can_age_gate() && isset($_REQUEST['page']) && $_REQUEST['page'] === 'age-gate' && wp_verify_nonce($_REQUEST['_wpnonce'], 'age-gate-toggle')){
if($_REQUEST['ag_switch'] !== 'hide'){
setcookie( 'age_gate', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN);
} else {
setcookie( 'age_gate', 99, time() + 3600, COOKIEPATH, COOKIE_DOMAIN);
}
}
wp_redirect($_SERVER['HTTP_REFERER']);
}
}
private function _can_age_gate()
{
if(current_user_can(AGE_GATE_CAP_RESTRICTIONS)){
return true;
} elseif(current_user_can(AGE_GATE_CAP_MESSAGING)){
return true;
} elseif(current_user_can(AGE_GATE_CAP_APPEARANCE)){
return true;
} elseif(current_user_can(AGE_GATE_CAP_ADVANCED)){
return true;
} elseif(current_user_can(AGE_GATE_CAP_ACCESS)){
return true;
}
return false;
}
}