Overview

Classes

  • Papi_Admin
  • Papi_Admin_Ajax
  • Papi_Admin_Assets
  • Papi_Admin_Management_Pages
  • Papi_Admin_Menu
  • Papi_Admin_Meta_Box
  • Papi_Admin_Meta_Box_Tabs
  • Papi_Admin_Option_Handler
  • Papi_Admin_Post_Handler
  • Papi_Admin_View
  • Papi_Attachment_Type
  • Papi_Conditional_Rules
  • Papi_Container
  • Papi_Core_Autoload
  • Papi_Core_Conditional
  • Papi_Core_Conditional_Rule
  • Papi_Core_Data_Handler
  • Papi_Core_Page
  • Papi_Core_Property
  • Papi_Core_Type
  • Papi_Loader
  • Papi_Option_Page
  • Papi_Option_Type
  • Papi_Page_Type
  • Papi_Page_Type_Meta
  • Papi_Porter
  • Papi_Porter_Driver
  • Papi_Porter_Driver_Core
  • Papi_Post_Page
  • Papi_Property
  • Papi_Property_Bool
  • Papi_Property_Checkbox
  • Papi_Property_Color
  • Papi_Property_Datetime
  • Papi_Property_Divider
  • Papi_Property_Dropdown
  • Papi_Property_Editor
  • Papi_Property_Email
  • Papi_Property_File
  • Papi_Property_Flexible
  • Papi_Property_Gallery
  • Papi_Property_Hidden
  • Papi_Property_Html
  • Papi_Property_Image
  • Papi_Property_Link
  • Papi_Property_Number
  • Papi_Property_Post
  • Papi_Property_Radio
  • Papi_Property_Reference
  • Papi_Property_Relationship
  • Papi_Property_Repeater
  • Papi_Property_String
  • Papi_Property_Term
  • Papi_Property_Text
  • Papi_Property_Url
  • Papi_Property_User

Functions

  • current_page
  • papi
  • papi_action_delete_value
  • papi_action_include
  • papi_append_post_type_query
  • papi_body_class
  • papi_cache_delete
  • papi_cache_get
  • papi_cache_key
  • papi_cache_set
  • papi_camel_case
  • papi_cast_string_value
  • papi_convert_to_string
  • papi_current_user_is_allowed
  • papi_dashify
  • papi_delete_field
  • papi_delete_option
  • papi_delete_property_meta_value
  • papi_display_page_type
  • papi_doing_ajax
  • papi_esc_html
  • papi_f
  • papi_field
  • papi_field_shortcode
  • papi_field_value
  • papi_fields
  • papi_filter_conditional_rule_allowed
  • papi_filter_core_load_one_type_on
  • papi_filter_format_value
  • papi_filter_load_value
  • papi_filter_settings_directories
  • papi_filter_settings_only_page_type
  • papi_filter_settings_page_type_column_title
  • papi_filter_settings_show_page_type
  • papi_filter_settings_show_standard_page_type
  • papi_filter_settings_show_standard_page_type_in_filter
  • papi_filter_settings_sort_order
  • papi_filter_settings_standard_page_description
  • papi_filter_settings_standard_page_name
  • papi_filter_settings_standard_page_thumbnail
  • papi_filter_update_value
  • papi_from_property_array_slugs
  • papi_get_all_files_in_directory
  • papi_get_all_page_type_files
  • papi_get_all_page_types
  • papi_get_box_property
  • papi_get_class_name
  • papi_get_field
  • papi_get_file_path
  • papi_get_number_of_pages
  • papi_get_only_objects
  • papi_get_option
  • papi_get_options_and_properties
  • papi_get_or_post
  • papi_get_page
  • papi_get_page_new_url
  • papi_get_page_query_strings
  • papi_get_page_type
  • papi_get_page_type_base_path
  • papi_get_page_type_by_id
  • papi_get_page_type_by_post_id
  • papi_get_page_type_id
  • papi_get_page_type_key
  • papi_get_page_type_meta_value
  • papi_get_page_type_name
  • papi_get_page_type_template
  • papi_get_parent_post_id
  • papi_get_post_id
  • papi_get_post_type
  • papi_get_post_type_label
  • papi_get_post_types
  • papi_get_property_class_name
  • papi_get_property_meta_value
  • papi_get_property_options
  • papi_get_property_type
  • papi_get_property_type_key
  • papi_get_property_type_key_f
  • papi_get_qs
  • papi_get_sanitized_post
  • papi_get_slugs
  • papi_get_tab_options
  • papi_html_name
  • papi_html_tag
  • papi_include_template
  • papi_is_empty
  • papi_is_json
  • papi_is_method
  • papi_is_option_page
  • papi_is_option_type
  • papi_is_page_type
  • papi_is_property
  • papi_is_property_type_key
  • papi_is_rule
  • papi_management_page_type_render_box
  • papi_maybe_convert_to_array
  • papi_maybe_convert_to_object
  • papi_maybe_get_callable_value
  • papi_maybe_json_decode
  • papi_maybe_json_encode
  • papi_nl2br
  • papi_option_shortcode
  • papi_option_type_exists
  • papi_page_type_exists
  • papi_populate_properties
  • papi_property
  • papi_remove_papi
  • papi_remove_trailing_quotes
  • papi_render_html_tag
  • papi_render_properties
  • papi_render_property
  • papi_require_text
  • papi_required_html
  • papi_rule
  • papi_santize_data
  • papi_set_page_type_id
  • papi_setup_tabs
  • papi_slugify
  • papi_sort_order
  • papi_tab
  • papi_template
  • papi_template_include
  • papi_to_array
  • papi_to_property_array_slugs
  • papi_translate_keys
  • papi_underscorify
  • papi_update_field
  • papi_update_option
  • papi_update_property_meta_value
  • papi_with
  • papify
  • the_papi_field
  • the_papi_option
  • the_papi_page_type_name
  • Overview
  • Class
  1: <?php
  2: 
  3: /**
  4:  * Core class that handle if a conditional rule
  5:  * should display the property or not.
  6:  */
  7: class Papi_Core_Conditional {
  8: 
  9:     /**
 10:      * Available relations.
 11:      *
 12:      * @var array
 13:      */
 14:     private $relations = [
 15:         'AND',
 16:         'OR'
 17:     ];
 18: 
 19:     /**
 20:      * Check if the property should be displayed by the rules.
 21:      *
 22:      * @param  array $rules
 23:      * @param  Papi_Core_Property $property
 24:      *
 25:      * @return bool
 26:      */
 27:     public function display( array $rules, $property = null ) {
 28:         if ( empty( $rules ) ) {
 29:             return true;
 30:         }
 31: 
 32:         $rules  = $this->prepare_rules( $rules, $property );
 33: 
 34:         if ( in_array( $rules['relation'], $this->relations ) ) {
 35:             return $this->display_by_relation( $rules );
 36:         }
 37: 
 38:         return true;
 39:     }
 40: 
 41:     /**
 42:      * Get the display by relation.
 43:      *
 44:      * @param  array $rules
 45:      *
 46:      * @return bool
 47:      */
 48:     private function display_by_relation( array $rules ) {
 49:         if ( $rules['relation'] === 'AND' ) {
 50:             $display = true;
 51: 
 52:             foreach ( $rules as $rule ) {
 53:                 if ( ! $display ) {
 54:                     break;
 55:                 }
 56: 
 57:                 if ( papi_is_rule( $rule ) ) {
 58:                     $display = papi_filter_conditional_rule_allowed( $rule );
 59:                 }
 60:             }
 61: 
 62:             return $display;
 63:         }
 64: 
 65:         $empty = array_filter( $rules, function ( $rule ) {
 66:             return papi_is_rule( $rule ) ? true : null;
 67:         } );
 68: 
 69:         if ( empty( $empty ) ) {
 70:             return true;
 71:         }
 72: 
 73:         $result = [];
 74: 
 75:         foreach ( $rules as $rule ) {
 76:             if ( papi_is_rule( $rule ) ) {
 77:                 $result[] = papi_filter_conditional_rule_allowed( $rule );
 78:             }
 79:         }
 80: 
 81:         $result = array_filter( $result, function ( $res ) {
 82:             return $res === true ? true : null;
 83:         } );
 84: 
 85:         return ! empty( $result );
 86:     }
 87: 
 88:     /**
 89:      * Get rule slug.
 90:      *
 91:      * @param  Papi_Core_Conditional_Rule $rule
 92:      * @param  Papi_Core_Property $property
 93:      *
 94:      * @return string
 95:      */
 96:     private function get_rule_slug( $rule, $property ) {
 97:         $arrReg = '/\[\d+\](\[\w+\])$/';
 98:         $slug   = $property->get_slug();
 99: 
100:         $page_type = papi_get_page_type_by_post_id();
101: 
102:         if ( $page_type instanceof Papi_Page_Type === false ) {
103:             return $rule->slug;
104:         }
105: 
106:         if ( preg_match( $arrReg, $slug, $out ) ) {
107:             $slug     = str_replace( $out[1], '[' . papi_remove_papi( $rule->slug ) . ']', $slug );
108:             $property = $page_type->get_property( $slug );
109: 
110:             if ( papi_is_property( $property ) ) {
111:                 return $slug;
112:             }
113:         }
114: 
115:         return $rule->slug;
116:     }
117: 
118:     /**
119:      * Prepare rules.
120:      *
121:      * @param  array $rules
122:      * @param  Papi_Core_Property $property
123:      *
124:      * @return array
125:      */
126:     public function prepare_rules( array $rules, $property = null ) {
127:         if ( ! isset( $rules['relation'] ) ) {
128:             $rules['relation'] = 'OR';
129:         } else {
130:             $rules['relation'] = strtoupper( $rules['relation'] );
131:         }
132: 
133:         foreach ( $rules as $index => $value ) {
134:             if ( is_string( $index ) ) {
135:                 continue;
136:             }
137: 
138:             if ( is_array( $value ) ) {
139:                 $rules[$index] = new Papi_Core_Conditional_Rule( $value );
140: 
141:                 if ( strpos( $rules[$index]->slug, '.' ) === false && papi_is_property( $property ) ) {
142:                     $rules[$index]->slug = $this->get_rule_slug(
143:                         $rules[$index],
144:                         $property
145:                     );
146:                 }
147:             }
148:         }
149: 
150:         return $rules;
151:     }
152: }
153: 
API documentation generated by ApiGen