252 lines
4.9 KiB
PHP
252 lines
4.9 KiB
PHP
<?php
|
|
/**
|
|
* Class Advanced Popups Rules.
|
|
*
|
|
* @link https://codesupply.co
|
|
* @since 1.0.0
|
|
*
|
|
* @package ADP
|
|
* @subpackage ADP/includes
|
|
*/
|
|
|
|
/**
|
|
* Class Rules
|
|
*/
|
|
class ADP_Popup_Rules {
|
|
|
|
/**
|
|
* The instance.
|
|
*
|
|
* @var mixed $instance The instance.
|
|
*/
|
|
public static $instance;
|
|
|
|
/**
|
|
* The rules.
|
|
*
|
|
* @var array $instance The rules.
|
|
*/
|
|
public $rules;
|
|
|
|
/**
|
|
* The rule sort order.
|
|
*
|
|
* @var array $rule_sort_order The rule sort order.
|
|
*/
|
|
public $rule_sort_order = array();
|
|
|
|
/**
|
|
* Init.
|
|
*/
|
|
public static function init() {
|
|
self::instance();
|
|
}
|
|
|
|
/**
|
|
* Return instance.
|
|
*/
|
|
public static function instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Get List rules
|
|
*/
|
|
public function get_list() {
|
|
$list = array(
|
|
'general' => array(),
|
|
'post_types' => array(),
|
|
'taxonomies' => array(),
|
|
);
|
|
|
|
$types = array();
|
|
|
|
// General.
|
|
$list['general'] = array(
|
|
'none' => esc_html__( 'None', 'advanced-popups' ),
|
|
'is_front_page' => esc_html__( 'Front Page', 'advanced-popups' ),
|
|
'is_home' => esc_html__( 'Home Page', 'advanced-popups' ),
|
|
'is_archive' => esc_html__( 'Archive Page', 'advanced-popups' ),
|
|
'is_author' => esc_html__( 'Author Page', 'advanced-popups' ),
|
|
'is_search' => esc_html__( 'Search Result Page', 'advanced-popups' ),
|
|
'is_404' => esc_html__( '404 Error Page', 'advanced-popups' ),
|
|
'url' => esc_html__( 'URL (slug)', 'advanced-popups' ),
|
|
);
|
|
|
|
// Post types.
|
|
$post_types = get_post_types( array(
|
|
'public' => true,
|
|
), 'objects' );
|
|
|
|
foreach ( $post_types as $name => $post_type ) {
|
|
|
|
if ( 'adp-popup' === $name ) {
|
|
continue;
|
|
}
|
|
|
|
if ( 'attachment' === $name ) {
|
|
continue;
|
|
}
|
|
|
|
$types[] = $name;
|
|
|
|
$list['post_types'][ 'post_type_' . $name ] = $post_type->labels->name;
|
|
}
|
|
|
|
// Taxonomies.
|
|
foreach ( $types as $name ) {
|
|
|
|
$post_type = get_post_type_object( $name );
|
|
|
|
$taxonomies = get_object_taxonomies( $name, 'object' );
|
|
|
|
foreach ( $taxonomies as $tax_name => $taxonomy ) {
|
|
$list['taxonomies'][ 'taxonomy_' . $tax_name ] = esc_html__( 'Taxonomy of ', 'advanced-popups' ) . $post_type->labels->name . ': ' . $taxonomy->labels->name;
|
|
}
|
|
}
|
|
|
|
return $list;
|
|
}
|
|
|
|
/**
|
|
* Get type from rule value
|
|
*
|
|
* @param string $val The value.
|
|
*/
|
|
public function get_type( $val ) {
|
|
|
|
if ( 'url' === $val ) {
|
|
return 'url';
|
|
}
|
|
|
|
if ( 0 === strpos( $val, 'is_' ) ) {
|
|
return 'is';
|
|
}
|
|
|
|
if ( 0 === strpos( $val, 'post_type' ) ) {
|
|
return 'post';
|
|
}
|
|
|
|
if ( 0 === strpos( $val, 'taxonomy' ) ) {
|
|
return 'taxonomy';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get object from rule value
|
|
*
|
|
* @param string $val The value.
|
|
*/
|
|
public function get_object( $val ) {
|
|
|
|
$val = str_replace( array( 'post_type', 'taxonomy' ), '', $val );
|
|
|
|
return ltrim( $val, '_' );
|
|
}
|
|
|
|
/**
|
|
* Checking all the rules on the front end
|
|
*
|
|
* @param string $rules The rules.
|
|
*/
|
|
public function is_check( $rules ) {
|
|
if ( ! $rules ) {
|
|
return true;
|
|
}
|
|
|
|
$check = array();
|
|
|
|
foreach ( $rules as $i => $row ) {
|
|
|
|
$check[ $i ] = true;
|
|
|
|
foreach ( $row as $t => $tools ) {
|
|
if ( ! isset( $tools['rule'] ) ) {
|
|
continue;
|
|
}
|
|
|
|
if ( 'none' === $tools['rule'] ) {
|
|
continue;
|
|
}
|
|
|
|
$rule = $tools['rule'];
|
|
|
|
// Get type from rule value.
|
|
$type_rule = self::instance()->get_type( $rule );
|
|
|
|
// Get type object from rule value.
|
|
$type_object = self::instance()->get_object( $rule );
|
|
|
|
$check_or = true;
|
|
|
|
// Check rules.
|
|
switch ( $type_rule ) {
|
|
case 'url':
|
|
if ( isset( $tools['url'] ) && $tools['url'] ) {
|
|
|
|
$object_uri = ltrim( rtrim( $tools['url'], '/' ), '/' );
|
|
$current_uri = ltrim( rtrim( $_SERVER['REQUEST_URI'], '/' ), '/' );
|
|
|
|
if ( $object_uri !== $current_uri ) {
|
|
$check_or = false;
|
|
}
|
|
}
|
|
break;
|
|
case 'is':
|
|
if ( ! function_exists( $rule ) || ! call_user_func( $rule ) ) {
|
|
$check_or = false;
|
|
}
|
|
break;
|
|
case 'post':
|
|
if ( ! is_singular( $type_object ) ) {
|
|
$check_or = false;
|
|
}
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
if ( isset( $tools['object'] ) && is_array( $tools['object'] ) ) {
|
|
foreach ( $tools['object'] as $object ) {
|
|
$check_or = (int) $post_id === (int) $object ? true : false;
|
|
}
|
|
}
|
|
break;
|
|
case 'taxonomy':
|
|
if ( ! is_tax( $type_object ) ) {
|
|
$check_or = false;
|
|
}
|
|
|
|
$term_id = get_queried_object_id();
|
|
|
|
if ( isset( $tools['object'] ) && is_array( $tools['object'] ) ) {
|
|
foreach ( $tools['object'] as $object ) {
|
|
$check_or = (int) $term_id === (int) $object ? true : false;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
$check[ $i ] = $check_or;
|
|
|
|
if ( $check_or ) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
$is_check = true;
|
|
|
|
foreach ( $check as $item ) {
|
|
if ( ! $item ) {
|
|
$is_check = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $is_check;
|
|
}
|
|
}
|