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:  * Admin class that handles admin menus.
  5:  */
  6: final class Papi_Admin_Menu {
  7: 
  8:     /**
  9:      * The construct.
 10:      */
 11:     public function __construct() {
 12:         $this->setup_actions();
 13:     }
 14: 
 15:     /**
 16:      * Fill labels on admin bar.
 17:      */
 18:     public function admin_bar_menu() {
 19:         if ( $page_type = $this->get_page_type() ) {
 20:             $this->override_labels( $page_type );
 21:         }
 22:     }
 23: 
 24:     /**
 25:      * Get current page type.
 26:      *
 27:      * @return Papi_Page_Type
 28:      */
 29:     private function get_page_type() {
 30:         if ( $page_type = papi_get_page_type_by_id( papi_get_page_type_id() ) ) {
 31:             return $page_type;
 32:         }
 33:     }
 34: 
 35:     /**
 36:      * Override labels with labels from the page type.
 37:      *
 38:      * @param Papi_Page_Type $page_type
 39:      */
 40:     private function override_labels( Papi_Page_Type $page_type ) {
 41:         global $wp_post_types;
 42: 
 43:         $post_type = papi_get_post_type();
 44: 
 45:         if ( empty( $post_type ) || ! isset( $wp_post_types[$post_type] ) ) {
 46:             return;
 47:         }
 48: 
 49:         foreach ( $page_type->get_labels() as $key => $value ) {
 50:             if ( ! isset( $wp_post_types[$post_type]->labels->$key ) || empty( $value ) ) {
 51:                 continue;
 52:             }
 53: 
 54:             $wp_post_types[$post_type]->labels->$key = $value;
 55:         }
 56:     }
 57: 
 58:     /**
 59:      * Page items menu.
 60:      *
 61:      * This function will register all page types
 62:      * that has a fake post type. Like option types.
 63:      */
 64:     public function page_items_menu() {
 65:         $page_types = papi_get_all_page_types( false, null, true );
 66: 
 67:         foreach ( $page_types as $page_type ) {
 68:             if ( empty( $page_type->menu ) || empty( $page_type->name ) ) {
 69:                 continue;
 70:             }
 71: 
 72:             $slug = 'papi/' . $page_type->get_id();
 73: 
 74:             add_submenu_page(
 75:                 $page_type->menu,
 76:                 $page_type->name,
 77:                 $page_type->name,
 78:                 $page_type->capability,
 79:                 $slug,
 80:                 [$page_type, 'render']
 81:             );
 82:         }
 83:     }
 84: 
 85:     /**
 86:      * Setup menu items for real post types.
 87:      */
 88:     public function post_types_menu() {
 89:         global $submenu;
 90: 
 91:         $post_types = papi_get_post_types();
 92: 
 93:         foreach ( $post_types as $post_type ) {
 94:             if ( ! post_type_exists( $post_type ) ) {
 95:                 continue;
 96:             }
 97: 
 98:             if ( $post_type === 'post' ) {
 99:                 $edit_url = 'edit.php';
100:             } else {
101:                 $edit_url = 'edit.php?post_type=' . $post_type;
102:             }
103: 
104:             if ( ! isset( $submenu[$edit_url] ) || ! isset( $submenu[$edit_url][10] ) || ! isset( $submenu[$edit_url][10][2] ) ) {
105:                 $post_type_object = get_post_type_object( $post_type );
106:                 if ( ! $post_type_object->show_in_menu ) {
107:                     $submenu[$edit_url] = [
108:                         10 => [
109:                             __( 'Add New', 'papi' ),
110:                             'edit_posts',
111:                             'post-new.php'
112:                         ]
113:                     ];
114:                 } else {
115:                     continue;
116:                 }
117:             }
118: 
119:             $only_page_type = papi_filter_settings_only_page_type( $post_type );
120:             $page_types     = papi_get_all_page_types( false, $post_type );
121:             $show_standard  = false;
122: 
123:             // Don't change menu item when no page types is found.
124:             // @codeCoverageIgnoreStart
125:             if ( empty( $page_types ) ) {
126:                 continue;
127:             }
128:             // @codeCoverageIgnoreEnd
129: 
130:             if ( count( $page_types ) === 1 && empty( $only_page_type ) ) {
131:                 $show_standard  = $page_types[0]->standard_type;
132:                 $show_standard  = $show_standard ?
133:                     papi_filter_settings_show_standard_page_type( $post_type ) :
134:                     $show_standard;
135: 
136:                 $only_page_type = $show_standard ? '' : $page_types[0]->get_id();
137:             }
138: 
139:             if ( ! empty( $only_page_type ) && ! $show_standard ) {
140:                 $submenu[$edit_url][10][2] = papi_get_page_new_url(
141:                     $only_page_type,
142:                     false,
143:                     $post_type,
144:                     [
145:                         'action',
146:                         'message',
147:                         'page_type',
148:                         'post',
149:                         'post_type'
150:                     ]
151:                 );
152:             } else {
153:                 $page  = 'papi-add-new-page,' . $post_type;
154:                 $start = strpos( $edit_url, 'post_type' ) === false ? '?' : '&';
155: 
156:                 $submenu[$edit_url][10][2] = sprintf(
157:                     '%s%spage=%s',
158:                     $edit_url,
159:                     $start,
160:                     $page
161:                 );
162: 
163:                 // Add menu item.
164:                 add_menu_page(
165:                     __( 'Add New', 'papi' ),
166:                     __( 'Add New', 'papi' ),
167:                     'read',
168:                     $page,
169:                     [$this, 'render_view']
170:                 );
171: 
172:                 // Remove the menu item so it's hidden.
173:                 remove_menu_page( $page );
174:             }
175:         }
176:     }
177: 
178:     /**
179:      * Menu callback that loads right view depending on what the `page` query string says.
180:      */
181:     public function render_view() {
182:         if ( strpos( papi_get_qs( 'page' ), 'papi' ) !== false ) {
183:             $page = str_replace( 'papi-', '', papi_get_qs( 'page' ) );
184:             $res = preg_replace( '/\,.*/', '', $page );
185: 
186:             if ( is_string( $res ) ) {
187:                 $page_view = $res;
188:             }
189:         }
190: 
191:         if ( ! isset( $page_view ) ) {
192:             $page_view = null;
193:         }
194: 
195:         if ( ! is_null( $page_view ) ) {
196:             $view = new Papi_Admin_View;
197:             $view->render( $page_view );
198:         } else {
199:             echo '<h2>Papi - 404</h2>';
200:         }
201:     }
202: 
203:     /**
204:      * Setup actions.
205:      */
206:     private function setup_actions() {
207:         if ( is_admin() ) {
208:             add_action( 'admin_init', [$this, 'admin_bar_menu'] );
209:             add_action( 'admin_menu', [$this, 'page_items_menu'] );
210:             add_action( 'admin_menu', [$this, 'post_types_menu'] );
211:         } else {
212:             add_action( 'admin_bar_menu', [$this, 'admin_bar_menu'] );
213:         }
214:     }
215: }
216: 
217: new Papi_Admin_Menu;
218: 
API documentation generated by ApiGen