Merge branch 'development/2.8.x' into feature/wp_admin_settings

This commit is contained in:
Mykyta Synelnikov
2024-01-18 15:05:04 +02:00
committed by GitHub
52 changed files with 830 additions and 482 deletions
+3 -3
View File
@@ -466,7 +466,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
array(
'id' => '_um_access_hide_from_queries',
'type' => 'checkbox',
'label' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Hide from queries', 'ultimate-member' ) : __( 'Would you like to display 404 error on the term\'s archive page and terms\' posts single pages when users haven\'t access?', 'ultimate-member' ),
'label' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Hide from queries', 'ultimate-member' ) : __( 'Would you like to display a 404 page for users who do not have access to this term on the term\'s archive page and terms\' posts single pages?', 'ultimate-member' ),
'description' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Exclude only from WP queries results', 'ultimate-member' ) : __( 'Recommended to be enabled. Restricted term\'s archive page and all terms\' posts will be hidden by exclusion from WP Query. The safest and most effective method that hides post and its comments from all requests, RSS feeds, etc. on your site', 'ultimate-member' ),
'value' => 1,
'conditional' => array( '_um_accessible', '!=', '0' ),
@@ -618,7 +618,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
array(
'id' => '_um_access_hide_from_queries',
'type' => 'checkbox',
'label' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Hide from queries', 'ultimate-member' ) : __( 'Would you like to display 404 error on the term\'s archive page and terms\' posts single pages when users haven\'t access?', 'ultimate-member' ),
'label' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Hide from queries', 'ultimate-member' ) : __( 'Would you like to display a 404 page for users who do not have access to this term on the term\'s archive page and terms\' posts single pages?', 'ultimate-member' ),
'description' => UM()->options()->get( 'disable_restriction_pre_queries' ) ? __( 'Exclude only from WP queries results', 'ultimate-member' ) : __( 'Recommended to be enabled. Restricted term\'s archive page and all terms\' posts will be hidden by exclusion from WP Query. The safest and most effective method that hides post and its comments from all requests, RSS feeds, etc. on your site', 'ultimate-member' ),
'value' => ! empty( $data['_um_access_hide_from_queries'] ) ? $data['_um_access_hide_from_queries'] : '',
'conditional' => array( '_um_accessible', '!=', '0' ),
@@ -1267,7 +1267,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Metabox' ) ) {
}
// Set post meta for legacy support in the future.
add_post_meta( $post_id, 'um_form_version', UM_VERSION );
add_post_meta( $post_id, 'um_form_version', UM_VERSION, true );
if ( empty( $_POST['post_title'] ) ) {
$where = array( 'ID' => $post_id );
+57 -22
View File
@@ -22,7 +22,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
/**
* Admin_Navmenu constructor.
*/
function __construct() {
public function __construct() {
self::$fields = array(
'um_nav_public' => __( 'Display Mode', 'ultimate-member' ),
'um_nav_roles' => __( 'By Role', 'ultimate-member' ),
@@ -32,6 +32,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
add_action( 'wp_update_nav_menu_item', array( &$this, '_save' ), 10, 3 );
add_action( 'wp_nav_menu_item_custom_fields', array( $this, 'wp_nav_menu_item_custom_fields' ), 20, 5 );
// @todo Appearance > Customize > Menus section without UM settings
// add_action( 'wp_nav_menu_item_custom_fields_customize_template', array( $this, 'wp_nav_menu_item_custom_fields_customize_template' ), 20, 5 );
}
@@ -47,9 +49,9 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
*/
public function wp_nav_menu_item_custom_fields( $item_id, $item, $depth, $args, $id = null ) {
$um_nav_public = get_post_meta( $item->ID, 'menu-item-um_nav_public', true );
$um_nav_public = get_post_meta( $item->ID, 'menu-item-um_nav_public', true );
$_nav_roles_meta = get_post_meta( $item->ID, 'menu-item-um_nav_roles', true );
$um_nav_roles = array();
$um_nav_roles = array();
if ( $_nav_roles_meta ) {
foreach ( $_nav_roles_meta as $key => $value ) {
if ( is_int( $key ) ) {
@@ -61,48 +63,74 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
?>
<div class="um-nav-edit">
<div class="clear"></div>
<h4 style="margin-bottom: 0.6em;"><?php _e( 'Ultimate Member Menu Settings', 'ultimate-member' ) ?></h4>
<h4 style="margin-bottom: 0.6em;"><?php esc_html_e( 'Ultimate Member Menu Settings', 'ultimate-member' ); ?></h4>
<p class="description description-wide um-nav-mode">
<label for="edit-menu-item-um_nav_public-<?php echo esc_attr( $item_id ); ?>">
<?php _e( "Who can see this menu link?", 'ultimate-member' ); ?><br/>
<?php esc_html_e( 'Who can see this menu link?', 'ultimate-member' ); ?><br/>
<select id="edit-menu-item-um_nav_public-<?php echo esc_attr( $item_id ); ?>" name="menu-item-um_nav_public[<?php echo esc_attr( $item_id ); ?>]" style="width:100%;">
<option value="0" <?php selected( $um_nav_public, 0 ); ?>><?php _e( 'Everyone', 'ultimate-member' ) ?></option>
<option value="1" <?php selected( $um_nav_public, 1 ); ?>><?php _e( 'Logged Out Users', 'ultimate-member' ) ?></option>
<option value="2" <?php selected( $um_nav_public, 2 ); ?>><?php _e( 'Logged In Users', 'ultimate-member' ) ?></option>
<option value="0" <?php selected( $um_nav_public, 0 ); ?>><?php esc_html_e( 'Everyone', 'ultimate-member' ); ?></option>
<option value="1" <?php selected( $um_nav_public, 1 ); ?>><?php esc_html_e( 'Logged Out Users', 'ultimate-member' ); ?></option>
<option value="2" <?php selected( $um_nav_public, 2 ); ?>><?php esc_html_e( 'Logged In Users', 'ultimate-member' ); ?></option>
</select>
</label>
</p>
<p class="description description-wide um-nav-roles" <?php echo $um_nav_public == 2 ? 'style="display: block;"' : ''; ?>><?php _e( "Select the member roles that can see this link", 'ultimate-member' ) ?><br>
<p class="description description-wide um-nav-roles" <?php echo 2 === absint( $um_nav_public ) ? 'style="display: block;"' : ''; ?>><?php esc_html_e( 'Select the member roles that can see this link', 'ultimate-member' ); ?><br>
<?php
$i = 0;
$html = '';
$columns = apply_filters( 'wp_nav_menu_item:um_nav_columns', 2, $item_id, $item );
$i = 0;
$html = '';
$columns = apply_filters( 'wp_nav_menu_item:um_nav_columns', 2, $item_id, $item );
$per_page = ceil( count( $options ) / $columns );
while ( $i < $columns ) {
$section_fields_per_page = array_slice( $options, $i * $per_page, $per_page );
$html .= '<span class="um-form-fields-section" style="width:' . floor( 100 / $columns ) . '% !important;">';
foreach ( $section_fields_per_page as $k => $title ) {
$id_attr = ' id="edit-menu-item-um_nav_roles-' . $item_id . '_' . $k . '" ';
$for_attr = ' for="edit-menu-item-um_nav_roles-' . $item_id . '_' . $k . '" ';
$checked_attr = checked( in_array($k,$um_nav_roles), true, false );
$html .= "<label {$for_attr}> <input type='checkbox' {$id_attr} name='menu-item-um_nav_roles[{$item_id}][{$k}]' value='1' {$checked_attr} /> <span>{$title}</span> </label>";
$id_attr = ' id="edit-menu-item-um_nav_roles-' . $item_id . '_' . $k . '" ';
$for_attr = ' for="edit-menu-item-um_nav_roles-' . $item_id . '_' . $k . '" ';
$checked_attr = checked( in_array( $k, $um_nav_roles, true ), true, false );
$html .= "<label {$for_attr}> <input type='checkbox' {$id_attr} name='menu-item-um_nav_roles[{$item_id}][{$k}]' value='1' {$checked_attr} /> <span>{$title}</span> </label>";
}
$html .= '</span>';
$i++;
}
echo $html;
?>
</p>
<?php do_action( 'um_wp_nav_menu_custom_fields', $item_id, $um_nav_public ); ?>
<div class="clear"></div>
</div>
<?php
}
/**
* @todo Appearance > Customize > Menus section without UM settings
* @return void
*/
public function wp_nav_menu_item_custom_fields_customize_template() {
?>
<div class="clear"></div>
<h4 style="margin-bottom: 0.6em;"><?php esc_html_e( 'Ultimate Member Menu Settings', 'ultimate-member' ); ?></h4>
<p class="description description-wide um-nav-mode">
<label for="edit-menu-item-um_nav_public-{{ data.menu_item_id }}">
<?php esc_html_e( 'Who can see this menu link?', 'ultimate-member' ); ?><br/>
<select id="edit-menu-item-um_nav_public-{{ data.menu_item_id }}"
name="menu-item-um_nav_public[{{ data.menu_item_id }}]" style="width:100%;">
<option value="0"><?php esc_html_e( 'Everyone', 'ultimate-member' ); ?></option>
<option value="1"><?php esc_html_e( 'Logged Out Users', 'ultimate-member' ); ?></option>
<option value="2"><?php esc_html_e( 'Logged In Users', 'ultimate-member' ); ?></option>
</select>
</label>
</p>
<?php
}
/**
*
@@ -112,11 +140,12 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
/**
* @param int $menu_id
* @param int $menu_item_db_id
* @param int $menu_id
* @param int $menu_item_db_id
* @param array $menu_item_args
*/
function _save( $menu_id, $menu_item_db_id, $menu_item_args ) {
public function _save( $menu_id, $menu_item_db_id, $menu_item_args ) {
// phpcs:disable WordPress.Security.NonceVerification
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return;
}
@@ -125,6 +154,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
return;
}
self::$fields = apply_filters( 'um_wp_nav_menu_fields', self::$fields );
foreach ( self::$fields as $_key => $label ) {
$key = sprintf( 'menu-item-%s', $_key );
@@ -132,11 +163,15 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
// Sanitize
if ( ! empty( $_POST[ $key ][ $menu_item_db_id ] ) ) {
// Do some checks here...
$value = is_array( $_POST[ $key ][ $menu_item_db_id ] ) ?
array_map( 'sanitize_key', array_keys( $_POST[ $key ][ $menu_item_db_id ] ) ) : (int) $_POST[ $key ][ $menu_item_db_id ];
if ( is_array( $_POST[ $key ][ $menu_item_db_id ] ) ) {
$value = array_map( 'sanitize_key', array_keys( $_POST[ $key ][ $menu_item_db_id ] ) );
} else {
$value = (int) $_POST[ $key ][ $menu_item_db_id ];
}
} else {
$value = null;
}
// phpcs:enable WordPress.Security.NonceVerification
// Update
if ( ! is_null( $value ) ) {
@@ -148,7 +183,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Navmenu' ) ) {
}
/**
*
* @todo Deprecate
*/
function _wp_template() {
?>
+3 -3
View File
@@ -3517,13 +3517,13 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
*
* @return array
*/
function save_email_templates( $settings ) {
public function save_email_templates( $settings ) {
if ( empty( $settings['um_email_template'] ) ) {
return $settings;
}
$template = $settings['um_email_template'];
$content = wp_kses_post( stripslashes( $settings[ $template ] ) );
$content = wp_kses( stripslashes( $settings[ $template ] ), 'post', array( 'data' ) );
$theme_template_path = UM()->mail()->get_template_file( 'theme', $template );
if ( ! file_exists( $theme_template_path ) ) {
@@ -3531,7 +3531,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
}
if ( file_exists( $theme_template_path ) ) {
$fp = fopen( $theme_template_path, "w" );
$fp = fopen( $theme_template_path, "w" );
$result = fputs( $fp, $content );
fclose( $fp );
}