- fixed issues with admin notices and their priority;

This commit is contained in:
nikitozzzzzzz
2018-04-03 11:46:30 +03:00
parent 39f55b2906
commit f2b6249516
11 changed files with 435 additions and 164 deletions
@@ -3,6 +3,16 @@
color: #555;
}
.um-admin-notice.upgraded {
border-color: #0085ba !important;
color: #555;
}
.um-admin-notice.error {
border-color: #dc3232 !important;
color: #555;
}
.um-admin-notice a.button-primary {
background-color: #0085ba !important;
border-color: #0085ba !important;
+1 -23
View File
@@ -27,7 +27,7 @@ if ( ! class_exists( 'um\admin\Admin' ) ) {
$this->templates_path = um_path . 'includes/admin/templates/';
add_action( 'admin_init', array( &$this, 'admin_init' ), 0 );
add_action( 'admin_notices', array( $this, 'check_wrong_install_folder' ), 3 );
}
@@ -54,28 +54,6 @@ if ( ! class_exists( 'um\admin\Admin' ) ) {
}
/**
* Check if plugin is installed with correct folder
*/
function check_wrong_install_folder() {
$invalid_folder = false;
$slug_array = explode( '/', um_plugin );
if ( $slug_array[0] != 'ultimate-member' )
$invalid_folder = true;
if ( $invalid_folder ) { ?>
<div class="error">
<p>
<?php printf( __( 'You have installed <strong>%s</strong> with wrong folder name. Correct folder name is <strong>"ultimate-member"</strong>.', 'ultimate-member' ), ultimatemember_plugin_name ) ?>
</p>
</div>
<?php }
}
/**
* Init admin action/filters + request handlers
*/
+390 -84
View File
@@ -13,15 +13,192 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
*/
class Admin_Notices {
/**
* Notices list
*
* @var array
*/
var $list = array();
/**
* Admin_Notices constructor.
*/
function __construct() {
add_action( 'admin_init', array( &$this, 'create_languages_folder' ) );
add_action( 'admin_notices', array( &$this, 'main_notices' ), 1 );
add_action( 'admin_notices', array( &$this, 'localize_note' ), 2 );
add_action( 'admin_notices', array( &$this, 'show_update_messages' ), 10 );
add_action( 'admin_init', array( &$this, 'create_list' ), 10 );
add_action( 'admin_notices', array( &$this, 'render_notices' ), 1 );
}
function create_list() {
$this->old_extensions_notice();
$this->main_notices();
$this->localize_note();
$this->show_update_messages();
$this->check_wrong_install_folder();
$this->admin_notice_tracking();
$this->need_upgrade();
$this->check_wrong_licenses();
/**
* UM hook
*
* @type action
* @title um_admin_create_notices
* @description Add notices to wp-admin
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_create_notices', 'function_name', 10 );
* @example
* <?php
* add_action( 'um_admin_create_notices', 'my_admin_create_notices', 10 );
* function my_admin_create_notices() {
* // your code here
* }
* ?>
*/
do_action( 'um_admin_create_notices' );
}
/**
* @return array
*/
function get_admin_notices() {
return $this->list;
}
/**
* @param $admin_notices
*/
function set_admin_notices( $admin_notices ) {
$this->list = $admin_notices;
}
/**
* @param $a
* @param $b
*
* @return mixed
*/
function notice_priority_sort( $a, $b ) {
if ( $a['priority'] == $b['priority'] ) {
return 0;
}
return ( $a['priority'] < $b['priority'] ) ? -1 : 1;
}
/**
* Add notice to UM notices array
*
* @param string $key
* @param array $data
* @param int $priority
*/
function add_notice( $key, $data, $priority = 10 ) {
$admin_notices = $this->get_admin_notices();
if ( empty( $admin_notices[ $key ] ) ) {
$admin_notices[ $key ] = array_merge( $data, array( 'priority' => $priority ) );
$this->set_admin_notices( $admin_notices );
}
}
/**
* Remove notice from UM notices array
*
* @param string $key
*/
function remove_notice( $key ) {
$admin_notices = $this->get_admin_notices();
if ( ! empty( $admin_notices[ $key ] ) ) {
unset( $admin_notices[ $key ] );
$this->set_admin_notices( $admin_notices );
}
}
/**
* Render all admin notices
*/
function render_notices() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$admin_notices = $this->get_admin_notices();
$hidden = get_user_meta( get_current_user_id(), 'um_hidden_admin_notices' );
$hidden = empty( $hidden ) ? array() : $hidden;
uasort( $admin_notices, array( &$this, 'notice_priority_sort' ) );
foreach ( $admin_notices as $key => $admin_notice ) {
if ( empty( $hidden ) || ! in_array( $key, $hidden ) ) {
$this->display_notice( $key );
}
}
/**
* UM hook
*
* @type action
* @title um_admin_after_main_notices
* @description Insert some content after main admin notices
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_after_main_notices', 'function_name', 10 );
* @example
* <?php
* add_action( 'um_admin_after_main_notices', 'my_admin_after_main_notices', 10 );
* function my_admin_after_main_notices() {
* // your code here
* }
* ?>
*/
do_action( 'um_admin_after_main_notices' );
}
/**
* Display single admin notice
*
* @param string $key
* @param bool $echo
*
* @return void|string
*/
function display_notice( $key, $echo = true ) {
$admin_notices = $this->get_admin_notices();
if ( empty( $admin_notices[ $key ] ) ) {
return;
}
$notice_data = $admin_notices[ $key ];
$class = ! empty( $notice_data['class'] ) ? $notice_data['class'] : 'updated';
ob_start(); ?>
<div class="<?php echo esc_attr( $class ) ?> um-admin-notice">
<?php echo ! empty( $notice_data['message'] ) ? $notice_data['message'] : '' ?>
</div>
<?php $notice = ob_get_clean();
if ( $echo ) {
echo $notice;
return;
} else {
return $notice;
}
}
@@ -42,81 +219,96 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
}
/**
* Show notice for customers with old extension's versions
*/
function old_extensions_notice() {
$show = false;
$slugs = array_map( function( $item ) {
return 'um-' . $item . '/um-' . $item . '.php';
}, array_keys( UM()->dependencies()->ext_required_version ) );
$active_plugins = UM()->dependencies()->get_active_plugins();
foreach ( $slugs as $slug ) {
if ( in_array( $slug, $active_plugins ) ) {
$plugin_data = get_plugin_data( um_path . '..' . DIRECTORY_SEPARATOR . $slug );
if ( version_compare( '2.0', $plugin_data['Version'], '>' ) ) {
$show = true;
break;
}
}
}
if ( ! $show ) {
return;
}
$this->add_notice( 'old_extensions', array(
'class' => 'error',
'message' => '<p>' . sprintf( __( '<strong>%s %s</strong> requires 2.0 extensions. You have pre 2.0 extensions installed on your site. <br /> Please update %s extensions to latest versions. For more info see this <a href="%s" target="_blank">doc</a>.', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version, ultimatemember_plugin_name, 'http://docs.ultimatemember.com/article/266-updating-to-2-0-versions-of-extensions' ) . '</p>',
), 0 );
}
/**
* Show main notices
*/
function main_notices() {
if ( ! defined( 'DOING_AJAX' ) ) {
$hide_exif_notice = get_option( 'um_hide_exif_notice' );
$hide_exif_notice = get_option( 'um_hide_exif_notice' );
if ( !extension_loaded('exif') && !$hide_exif_notice ) {
echo '<div class="updated" style="border-color: #0085ba;"><p>';
echo sprintf(__( 'Exif is not enabled on your server. Mobile photo uploads will not be rotated correctly until you enable the exif extension. <a href="%s">Hide this notice</a>', 'ultimate-member' ), add_query_arg('um_adm_action', 'um_hide_exif_notice') );
echo '</p></div>';
}
// Regarding page setup
$pages = UM()->config()->permalinks;
if ( $pages && is_array( $pages ) ) {
$err = false;
foreach( $pages as $slug => $page_id ) {
$page = get_post( $page_id );
if ( !isset( $page->ID ) && in_array( $slug, array( 'user','account','members','register','login','logout','password-reset' ) ) ) {
$err = true;
}
}
if ( $err ) {
echo '<div class="updated" style="border-color: #0085ba;"><p>' . __('One or more of your Ultimate Member pages are not correctly setup. Please visit <strong>Ultimate Member > Settings</strong> to re-assign your missing pages.','ultimate-member') . '</p></div>';
}
if ( isset( $pages['user'] ) ) {
$test = get_post( $pages['user'] );
if ( isset( $test->post_parent ) && $test->post_parent > 0 ) {
echo '<div class="updated" style="border-color: #0085ba;"><p>' . __('Ultimate Member Setup Error: User page can not be a child page.','ultimate-member') . '</p></div>';
}
}
if ( isset( $pages['account'] ) ) {
$test = get_post( $pages['account'] );
if ( isset( $test->post_parent ) && $test->post_parent > 0 ) {
echo '<div class="updated" style="border-color: #0085ba;"><p>' . __('Ultimate Member Setup Error: Account page can not be a child page.','ultimate-member') . '</p></div>';
}
}
}
/**
* UM hook
*
* @type action
* @title um_admin_after_main_notices
* @description Insert some content after main admin notices
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_after_main_notices', 'function_name', 10 );
* @example
* <?php
* add_action( 'um_admin_after_main_notices', 'my_admin_after_main_notices', 10 );
* function my_admin_after_main_notices() {
* // your code here
* }
* ?>
*/
do_action( 'um_admin_after_main_notices' );
if ( ! extension_loaded( 'exif' ) && ! $hide_exif_notice ) {
$this->add_notice( 'exif_disabled', array(
'class' => 'updated',
'message' => '<p>' . sprintf(__( 'Exif is not enabled on your server. Mobile photo uploads will not be rotated correctly until you enable the exif extension. <a href="%s">Hide this notice</a>', 'ultimate-member' ), add_query_arg('um_adm_action', 'um_hide_exif_notice') ) . '</p>',
), 10 );
}
// Regarding page setup
$pages = UM()->config()->permalinks;
if ( $pages && is_array( $pages ) ) {
$err = false;
foreach ( $pages as $slug => $page_id ) {
$page = get_post( $page_id );
if ( ! isset( $page->ID ) && in_array( $slug, array( 'user', 'account', 'members', 'register', 'login', 'logout', 'password-reset' ) ) ) {
$err = true;
}
}
if ( $err ) {
$this->add_notice( 'wrong_pages', array(
'class' => 'updated',
'message' => '<p>' . __( 'One or more of your Ultimate Member pages are not correctly setup. Please visit <strong>Ultimate Member > Settings</strong> to re-assign your missing pages.', 'ultimate-member' ) . '</p>',
), 20 );
}
if ( isset( $pages['user'] ) ) {
$test = get_post( $pages['user'] );
if ( isset( $test->post_parent ) && $test->post_parent > 0 ) {
$this->add_notice( 'wrong_user_page', array(
'class' => 'updated',
'message' => '<p>' . __( 'Ultimate Member Setup Error: User page can not be a child page.', 'ultimate-member' ) . '</p>',
), 25 );
}
}
if ( isset( $pages['account'] ) ) {
$test = get_post( $pages['account'] );
if ( isset( $test->post_parent ) && $test->post_parent > 0 ) {
$this->add_notice( 'wrong_account_page', array(
'class' => 'updated',
'message' => '<p>' . __( 'Ultimate Member Setup Error: Account page can not be a child page.', 'ultimate-member' ) . '</p>',
), 30 );
}
}
}
}
@@ -128,6 +320,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
if ( ! $locale || strstr( $locale, 'en_' ) ) {
return;
}
if ( file_exists( WP_LANG_DIR . '/plugins/ultimatemember-' . $locale . '.mo' ) ) {
return;
}
@@ -141,21 +334,17 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
$download_uri = add_query_arg( 'um_adm_action', 'um_language_downloader' );
echo '<div class="updated" style="border-color: #0085ba;"><p>';
echo sprintf(__('Your site language is <strong>%1$s</strong>. Good news! Ultimate Member is already available in <strong>%2$s language</strong>. <a href="%3$s">Download the translation</a> files and start using the plugin in your language now. <a href="%4$s">Hide this notice</a>','ultimate-member'), $locale, UM()->available_languages[$locale], $download_uri, add_query_arg('um_adm_action', 'um_hide_locale_notice') );
echo '</p></div>';
$this->add_notice( 'locale', array(
'class' => 'updated',
'message' => '<p>' . sprintf( __( 'Your site language is <strong>%1$s</strong>. Good news! Ultimate Member is already available in <strong>%2$s language</strong>. <a href="%3$s">Download the translation</a> files and start using the plugin in your language now. <a href="%4$s">Hide this notice</a>','ultimate-member'), $locale, UM()->available_languages[ $locale ], $download_uri, add_query_arg( 'um_adm_action', 'um_hide_locale_notice' ) ) . '</p>',
), 40 );
} else {
echo '<div class="updated" style="border-color: #0085ba;"><p>';
echo sprintf(__('Ultimate Member has not yet been translated to your langeuage: <strong>%1$s</strong>. If you have translated the plugin you need put these files <code>ultimatemember-%1$s.po and ultimatemember-%1$s.mo</code> in <strong>/wp-content/languages/plugins/</strong> for the plugin to be translated in your language. <a href="%2$s">Hide this notice</a>','ultimate-member'), $locale, add_query_arg('um_adm_action', 'um_hide_locale_notice') );
echo '</p></div>';
$this->add_notice( 'locale', array(
'class' => 'updated',
'message' => '<p>' . sprintf( __( 'Ultimate Member has not yet been translated to your language: <strong>%1$s</strong>. If you have translated the plugin you need put these files <code>ultimatemember-%1$s.po and ultimatemember-%1$s.mo</code> in <strong>/wp-content/languages/plugins/</strong> for the plugin to be translated in your language. <a href="%2$s">Hide this notice</a>', 'ultimate-member' ), $locale, add_query_arg( 'um_adm_action', 'um_hide_locale_notice' ) ) . '</p>',
), 40 );
}
@@ -233,14 +422,131 @@ if ( ! class_exists( 'um\admin\core\Admin_Notices' ) ) {
if ( ! empty( $messages ) ) {
foreach ( $messages as $message ) {
if ( isset( $message['err_content'] ) ) {
echo '<div class="error"><p>' . $message['err_content'] . '</p></div>';
$this->add_notice( 'actions', array(
'class' => 'error',
'message' => '<p>' . $message['err_content'] . '</p>',
), 50 );
} else {
echo '<div class="updated" style="border-color: #0085ba;"><p>' . $message['content'] . '</p></div>';
$this->add_notice( 'actions', array(
'class' => 'updated',
'message' => '<p>' . $message['content'] . '</p>',
), 50 );
}
}
}
}
/**
* Check if plugin is installed with correct folder
*/
function check_wrong_install_folder() {
$invalid_folder = false;
$slug_array = explode( '/', um_plugin );
if ( $slug_array[0] != 'ultimate-member' ) {
$invalid_folder = true;
}
if ( $invalid_folder ) {
$this->add_notice( 'invalid_dir', array(
'class' => 'error',
'message' => '<p>' . sprintf( __( 'You have installed <strong>%s</strong> with wrong folder name. Correct folder name is <strong>"ultimate-member"</strong>.', 'ultimate-member' ), ultimatemember_plugin_name ) . '</p>',
), 1 );
}
}
/**
* Show admin notices
*/
public function admin_notice_tracking() {
if ( ! current_user_can( 'manage_options' ) )
return;
$hide_notice = get_option( 'um_tracking_notice' );
if ( $hide_notice )
return;
$optin_url = esc_url( add_query_arg( 'um_adm_action', 'opt_into_tracking' ) );
$optout_url = esc_url( add_query_arg( 'um_adm_action', 'opt_out_of_tracking' ) );
ob_start(); ?>
<p>
<?php printf( __( 'Thanks for installing <strong>%s</strong>! The core plugin is free but we also sell extensions which allow us to continue developing and supporting the plugin full time. If you subscribe to our mailing list (no spam) we will email you a 20%% discount code which you can use to purchase the <a href="%s" target="_blank">extensions bundle</a>.', 'ultimate-member' ), ultimatemember_plugin_name, 'https://ultimatemember.com/core-extensions-bundle/' ); ?>
</p>
<p>
<a href="<?php echo esc_url( $optin_url ) ?>" class="button button-primary"><?php _e( 'Subscribe to mailing list', 'ultimate-member' ) ?></a>
&nbsp;
<a href="<?php echo esc_url( $optout_url ) ?>" class="button-secondary"><?php _e( 'No thanks', 'ultimate-member' ) ?></a>
</p>
<?php $message = ob_get_clean();
$this->add_notice( 'invalid_dir', array(
'class' => 'updated',
'message' => $message,
), 2 );
}
function check_wrong_licenses() {
$invalid_license = 0;
$arr_inactive_license_keys = array();
if ( empty( UM()->admin_settings()->settings_structure['licenses']['fields'] ) ) {
return;
}
foreach ( UM()->admin_settings()->settings_structure['licenses']['fields'] as $field_data ) {
$license = get_option( "{$field_data['id']}_edd_answer" );
if ( ( is_object( $license ) && 'valid' == $license->license ) || 'valid' == $license )
continue;
if ( ( is_object( $license ) && 'inactive' == $license->license ) || 'inactive' == $license ) {
$arr_inactive_license_keys[ ] = $license->item_name;
}
$invalid_license++;
}
if ( ! empty( $arr_inactive_license_keys ) ) {
$this->add_notice( 'license_key', array(
'class' => 'error',
'message' => '<p>' . sprintf( __( 'There are %d inactive %s license keys for this site. This site is not authorized to get plugin updates. You can active this site on <a href="%s">www.UltimateMember.com</a>.', 'ultimate-member' ), count( $arr_inactive_license_keys ) , ultimatemember_plugin_name, 'https://ultimatemember.com' ) . '</p>',
), 3 );
}
if ( $invalid_license ) {
$this->add_notice( 'license_key', array(
'class' => 'error',
'message' => '<p>' . sprintf( __( 'You have %d invalid or expired license keys for %s. Please go to the <a href="%s">Licenses page</a> to correct this issue.', 'ultimate-member' ), $invalid_license, ultimatemember_plugin_name, add_query_arg( array('page'=>'um_options', 'tab' => 'licenses'), admin_url( 'admin.php' ) ) ) . '</p>',
), 3 );
}
}
function need_upgrade() {
if ( ! empty( UM()->admin_upgrade()->necessary_packages ) ) {
$this->add_notice( 'upgrade', array(
'class' => 'error',
'message' => '<p>' . sprintf( __( '<strong>%s version %s</strong> needs to be updated. Please visit to "Upgrade" page <a href="%s">here</a> and run the upgrade process.', 'ultimate-member' ), ultimatemember_plugin_name, ultimatemember_version, add_query_arg( array( 'page' => 'um_upgrade' ), admin_url( 'admin.php' ) ) ) . '</p>',
), 4 );
} else {
if ( isset( $_GET['msg'] ) && 'updated' == $_GET['msg'] ) {
$this->add_notice( 'upgrade', array(
'class' => 'updated',
'message' => '<p>' . __( 'Successfully Upgraded', 'ultimate-member' ) . '</p>',
), 4 );
}
}
}
}
}
+1 -1
View File
@@ -76,7 +76,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
add_filter( 'um_change_settings_before_save', array( $this, 'remove_empty_values' ), 10, 1 );
//invalid licenses notice
add_action( 'admin_notices', array( $this, 'check_wrong_licenses' ) );
//add_action( 'admin_notices', array( $this, 'check_wrong_licenses' ) );
add_action( 'admin_init', array( &$this, 'um_download_install_info' ) );
+4 -4
View File
@@ -39,16 +39,16 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {
$this->necessary_packages = $this->need_run_upgrades();
if ( ! empty( $this->necessary_packages ) ) {
add_action( 'admin_notices', array( $this, 'need_upgrade' ) );
//add_action( 'admin_notices', array( $this, 'need_upgrade' ) );
$this->init_packages_ajax();
add_action( 'admin_menu', array( $this, 'admin_menu' ), 0 );
add_action( 'wp_ajax_um_run_package', array( $this, 'ajax_run_package' ) );
add_action( 'wp_ajax_um_get_packages', array( $this, 'ajax_get_packages' ) );
} else {
add_action( 'admin_notices', array( $this, 'updated_successfully' ) );
}
} /*else {
//add_action( 'admin_notices', array( $this, 'updated_successfully' ) );
}*/
}