web/wp-content/plugins/acf-extended/includes/modules/options-page/module-options-page.php (172 lines of code) (raw):
<?php
if(!defined('ABSPATH')){
exit;
}
if(!class_exists('acfe_module_options_page')):
class acfe_module_options_page extends acfe_module{
/**
* initialize
*/
function initialize(){
$this->name = 'options_page';
$this->plural = 'options_pages';
$this->setting = 'modules/options_pages';
$this->settings = 'modules.options_pages';
$this->view = 'admin.php?page=%s';
$this->register = 'acfe/init';
$this->post_type = 'acfe-dop';
$this->args = array(
'label' => __('Options Pages', 'acfe'),
'show_in_menu' => 'edit.php?post_type=acf-field-group',
'hierarchical' => true,
'labels' => array(
'name' => __('Options Pages', 'acfe'),
'singular_name' => __('Options Page', 'acfe'),
'menu_name' => __('Options Pages', 'acfe'),
'edit_item' => __('Edit Options Page', 'acfe'),
'add_new_item' => __('New Options Page', 'acfe'),
'enter_title' => __('Options Page Title', 'acfe'),
),
);
$this->messages = array(
'export_title' => __('Export Options Pages', 'acfe'),
'export_description' => __('Export Options Pages', 'acfe'),
'export_select' => __('Select Options Pages', 'acfe'),
'export_not_found' => __('No options page available.', 'acfe'),
'export_not_selected' => __('No options pages selected', 'acfe'),
'export_success_single' => __('1 options page exported', 'acfe'),
'export_success_multiple' => __('%s options pages exported', 'acfe'),
'export_instructions' => sprintf(__('It is recommended to include this code within the <code>acf/init</code> hook (<a href="%s" target="blank">see documentation</a>).', 'acfe'), esc_url('https://www.advancedcustomfields.com/resources/acf_add_options_page/')),
'import_title' => __('Import Options Pages', 'acfe'),
'import_description' => __('Import Options Pages', 'acfe'),
'import_success_single' => __('1 options page imported', 'acfe'),
'import_success_multiple' => __('%s options pages imported', 'acfe'),
);
$this->export_files = array(
'single' => 'options-page',
'multiple' => 'options-pages',
);
$this->validate = array('name');
$this->columns = array(
'acfe-name' => __('Menu slug', 'acfe'),
'acfe-post-id' => __('Post ID', 'acfe'),
'acfe-autoload' => __('Autoload', 'acfe'),
'acfe-position' => __('Position', 'acfe'),
);
$this->item = array(
'menu_slug' => '',
'page_title' => '',
'active' => true,
'menu_title' => '',
'capability' => 'edit_posts',
'parent_slug' => '',
'position' => null,
'icon_url' => false,
'redirect' => true,
'post_id' => 'options',
'autoload' => false,
'update_button' => __('Update', 'acf'),
'updated_message' => __('Options Updated', 'acf'),
);
$this->alias = array(
'menu_slug' => 'name',
'page_title' => 'label',
);
$this->l10n = array('page_title', 'menu_title', 'update_button', 'updated_message');
}
/**
* register_items
*
* acfe/module/register_items
*
* @param $items
*
* @return array
*/
function register_items($items){
// vars
$top_pages = $sub_pages = array();
foreach($items as $item){
// top pages
if(!$item['parent_slug']){
$top_pages[] = $item;
// sub pages
}else{
$sub_pages[] = $item;
}
}
// sort sub pages
if(!empty($sub_pages)){
uasort($sub_pages, function($a, $b){
return (int) $a['position'] - (int) $b['position'];
});
}
// register parent before childs so ACF correctly assign sub options pages
$items = array_merge($top_pages, $sub_pages);
return $items;
}
/**
* register_item
*
* acfe/module/register_item
*
* @param $item
*/
function register_item($item){
// validate
if(!empty($item['menu_slug']) && !acf_get_options_page($item['menu_slug'])){
acf_add_options_page($item);
}
}
/**
* updated_item
*
* acfe/module/updated_item
*
* @param $item
*/
function updated_item($item){
$this->update_item_hierarchy($item);
}
/**
* imported_item
*
* acfe/module/imported_item
*
* @param $item
*/
function imported_item($item){
$this->update_item_hierarchy($item);
}
/**
* update_item_hierarchy
*
* @param $item
*/
function update_item_hierarchy($item){
// get raw items
$raw_items = $this->get_raw_items();
// loop
foreach($raw_items as $raw_item){
// item is child
if($raw_item['menu_slug'] === $item['parent_slug']){
wp_update_post(array(
'ID' => $item['ID'],
'post_parent' => $raw_item['ID'],
));
}
// item is parent
if($item['menu_slug'] === $raw_item['parent_slug']){
wp_update_post(array(
'ID' => $raw_item['ID'],
'post_parent' => $item['ID'],
));
}
}
}
/**
* load_post
*
* acfe/module/load_post
*/
function load_post(){
global $item;
$field_groups = acf_get_field_groups(array(
'options_page' => $item['name']
));
if($field_groups){
acfe_add_field_groups_metabox(array(
'id' => 'acfe-field-groups',
'title' => __('Field Groups', 'acf'),
'screen' => $this->post_type,
'field_groups' => $field_groups,
));
}
}
/**
* validate_name
*
* @param $value
* @param $item
*
* @return false|string
*/
function validate_name($value, $item){
// editing current options page
if($item['name'] === $value){
return false;
}
// check sibiling options pages (could be disabled)
$sibiling_item = $this->get_item($value);
if($sibiling_item && $sibiling_item['ID'] !== $item['ID']){
return __('This options page slug already exists', 'acfe');
}
// check existing options pages
$options_pages = acf_get_array(acf_get_options_pages());
foreach($options_pages as $slug => $options_page){
// options page already exists
if($value === $slug){
return __('This options page slug already exists', 'acfe');
}
}
return false;
}
/**
* edit_column_acfe_name
*
* @param $item
*/
function edit_column_acfe_name($item){
echo '<code style="font-size: 12px;">' . $item['name'] . '</code>';
}
/**
* edit_column_acfe_post_id
*
* @param $item
*/
function edit_column_acfe_post_id($item){
echo '<code style="font-size: 12px;">' . $item['post_id'] . '</code>';
}
/**
* edit_column_acfe_autoload
*
* @param $item
*/
function edit_column_acfe_autoload($item){
echo $item['autoload'] ? __('Yes') : __('No');
}
/**
* edit_column_acfe_position
*
* @param $item
*/
function edit_column_acfe_position($item){
echo !acf_is_empty($item['position']) ? $item['position'] : '—';
}
/**
* export_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_code($code, $args){
return "acf_add_options_page({$code});";
}
/**
* export_local_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_local_code($code, $args){
return "acfe_register_options_page({$code});";
}
}
acfe_register_module('acfe_module_options_page');
endif;
function acfe_register_options_page($item){
acfe_get_module('options_page')->add_local_item($item);
}