*/
class AdminPages_MetaBoxes extends AdminPagesModel
{
public function __construct()
{
// this should be first so the default values get stored
$this->admin_pages_metaboxes();
parent::__construct((array) get_site_option($this->prefix));
add_filter('submenu_file', [$this, 'set_submenu'], 10, 2);
add_filter('manage_adminify_admin_page_posts_columns', [$this, 'set_columns']);
add_action('manage_adminify_admin_page_posts_custom_column', [$this, 'adminify_column_content'], 10, 2);
}
public function get_defaults()
{
return [
'_wp_adminify_menu_type' => 'top_level',
'_wp_adminify_sub_menu_item' => '',
'_wp_adminify_menu_order' => 10,
'_wp_adminify_menu_icon' => 'dashicons-admin-site-alt',
'_wp_adminify_page_title' => '',
'_wp_adminify_remove_margin' => '',
'_wp_adminify_remove_notice' => '',
'_wp_adminify_user_roles' => '',
'_wp_adminify_script_type' => 'css',
'_wp_adminify_custom_js' => '',
'_wp_adminify_custom_css' => ''
];
}
// Set List Table Admin Pages Columns
public function set_columns($columns)
{
$columns = array(
'cb' => '',
'title' => __('Page Name', WP_ADMINIFY_TD),
'icon' => __('Menu Icon', WP_ADMINIFY_TD),
'parent_menu' => __('Parent Menu', WP_ADMINIFY_TD),
'roles' => __('User Roles', WP_ADMINIFY_TD)
);
return $columns;
}
// User Roles Column Content
public function user_roles_column_content($allowed_roles, $post_id)
{
$user_roles = Utils::post_meta('_wp_adminify_user_roles');
$roles = is_serialized($user_roles) ? unserialize($user_roles) : $user_roles;
$roles = empty($roles) ? array('all') : $roles;
$roles = implode(', ', $roles);
return $roles;
}
// List Table Admin Pages Column Contents
public function adminify_column_content($column, $post_id)
{
$admin_menu_type = Utils::post_meta('_wp_adminify_menu_type');
switch ($column) {
case 'parent_menu':
$parent_menu = __('None', WP_ADMINIFY_TD);
if ($admin_menu_type === 'sub_level') {
$parent_slug = Utils::post_meta('_wp_adminify_sub_menu_item');
foreach ($GLOBALS['menu'] as $menu) {
if ($menu[2] === $parent_slug) {
$parent_menu = $menu[0];
break;
}
}
}
echo esc_html($parent_menu);
break;
case 'roles':
$allowed_roles = __('All', WP_ADMINIFY_TD);
$allowed_roles = apply_filters('adminify_admin_page_user_roles', $this->user_roles_column_content($allowed_roles, $post_id));
echo ucwords($allowed_roles);
break;
case 'icon':
$menu_icon = Utils::post_meta('_wp_adminify_menu_icon');
$icon_class = $menu_icon ? $menu_icon : 'dashicons dashicons-no is-empty';
echo ('sub_level' === $admin_menu_type ? __('None', WP_ADMINIFY_TD) : '');
break;
}
}
public function set_submenu($submenu_file, $parent_file)
{
global $current_screen, $parent_file;
if (in_array($current_screen->base, array('post', 'edit')) && 'adminify_admin_page' === $current_screen->post_type) {
$parent_file = 'edit.php?post_type=adminify_widgets';
$submenu_file = 'edit.php?post_type=adminify_admin_page';
}
return $submenu_file;
}
public static function get_wp_admin_menus()
{
global $menu;
$options = [];
if (!empty($menu) && is_array($menu)) {
foreach ($menu as $item) {
if (!empty($item[0])) {
// the preg_replace removes "Comments" & "Plugins" menu spans.
$options[$item[2]] = (preg_replace('/\.*?\<\/span><\/span>/s', '', $item[0]));
}
}
}
return $options;
}
public static function get_wp_admin_submenus()
{
global $submenu;
$options = [];
if (!empty($submenu) && is_array($submenu)) {
foreach ($submenu as $items) {
foreach ($items as $item) {
if (!empty($item[0])) {
$options[$item[1]] = (preg_replace('/\.*?\<\/span><\/span>/s', '', $item[0]));
}
}
}
}
return $options;
}
public function get_menu_type_fiels(&$menu_type_fields)
{
$menu_type_fields[] = array(
'id' => $this->prefix . 'menu_type',
'type' => 'select',
'title' => __('Menu Type', WP_ADMINIFY_TD),
'options' => array(
'top_level' => __('Top Level Menu', WP_ADMINIFY_TD),
'sub_level' => __('Sub Menu', WP_ADMINIFY_TD),
),
'default' => $this->get_default_field('_wp_adminify_menu_type')
);
$menu_type_fields[] = array(
'id' => $this->prefix . 'sub_menu_item',
'type' => 'select',
'title' => __('Select Sub Menu', WP_ADMINIFY_TD),
'placeholder' => __('Select a menu', WP_ADMINIFY_TD),
'options' => 'WPAdminify\Inc\Modules\AdminPages\AdminPages_MetaBoxes::get_wp_admin_menus',
'dependency' => array($this->prefix . 'menu_type', '==', 'sub_level', 'true'),
'default' => $this->get_default_field('_wp_adminify_sub_menu_item')
);
$menu_type_fields[] = array(
'id' => $this->prefix . 'menu_order',
'type' => 'text',
'title' => __('Menu Order', WP_ADMINIFY_TD),
'default' => $this->get_default_field('_wp_adminify_menu_order')
);
$menu_type_fields[] = array(
'id' => $this->prefix . 'menu_icon',
'type' => 'icon',
'title' => __('Icon', WP_ADMINIFY_TD),
'default' => $this->get_default_field('_wp_adminify_menu_icon')
);
}
public function admin_pages_metaboxes()
{
if (!class_exists('ADMINIFY')) {
return;
}
// Admin Pages Metabox
\ADMINIFY::createMetabox($this->prefix, array(
'title' => __('Menu Attributes', WP_ADMINIFY_TD),
'post_type' => 'adminify_admin_page',
'context' => 'side',
'priority' => 'low',
'data_type' => 'unserialize'
));
$menu_type_fields = [];
$this->get_menu_type_fiels($menu_type_fields);
// Activate
\ADMINIFY::createSection($this->prefix, array(
'fields' => $menu_type_fields
));
// Display Options
\ADMINIFY::createMetabox($this->prefix . 'admin_page_display', array(
'title' => __('Display Options', WP_ADMINIFY_TD),
'post_type' => 'adminify_admin_page',
'context' => 'normal',
'priority' => 'high',
'data_type' => 'unserialize'
));
$remove_notice = [];
$this->get_remove_notice_fields($remove_notice);
\ADMINIFY::createSection($this->prefix . 'admin_page_display', array(
'title' => __('Enable/Disable', WP_ADMINIFY_TD),
'fields' => $remove_notice
));
// User Roles
\ADMINIFY::createSection($this->prefix . 'admin_page_display', array(
'title' => 'User Roles Access',
'fields' => array(
array(
'id' => $this->prefix . 'user_roles',
'type' => 'select',
'title' => __('Allow users to access this page', WP_ADMINIFY_TD),
'placeholder' => __('Select a role', WP_ADMINIFY_TD),
'chosen' => true,
'multiple' => true,
'options' => 'roles',
'default' => $this->get_default_field('_wp_adminify_user_roles')
),
)
));
$custom_css_js = [];
$this->get_custom_css_js($custom_css_js);
// Advanced
\ADMINIFY::createSection($this->prefix . 'admin_page_display', array(
'title' => __('Custom CSS/JS', WP_ADMINIFY_TD),
'fields' => $custom_css_js
));
}
public function get_remove_notice_fields(&$remove_notice)
{
$remove_notice[] = array(
'id' => $this->prefix . 'page_title',
'type' => 'checkbox',
'title' => __('Remove Page Title', WP_ADMINIFY_TD),
'label' => __('Remove Page Title from your created Custom Admin Page.', WP_ADMINIFY_TD),
'default' => $this->get_default_field('_wp_adminify_page_title')
);
$remove_notice[] = array(
'id' => $this->prefix . 'remove_margin',
'type' => 'checkbox',
'title' => __('Remove Page Margin', WP_ADMINIFY_TD),
'label' => __('Remove default Page Margin from Custom Admin Page', WP_ADMINIFY_TD),
'default' => $this->get_default_field('_wp_adminify_remove_margin')
);
$remove_notice[] = array(
'id' => $this->prefix . 'remove_notice',
'type' => 'checkbox',
'title' => __('Remove Admin Notices', WP_ADMINIFY_TD),
'label' => __('Remove Admin Notices from Custom Admin page', WP_ADMINIFY_TD),
'default' => $this->get_default_field('_wp_adminify_remove_notice')
);
}
/**
* Custom CSS/JS Options
*
* @param [type] $custom_css_js
*
* @return void
*/
public function get_custom_css_js(&$custom_css_js)
{
$custom_css_js[] = array(
'id' => $this->prefix . 'script_type',
'type' => 'button_set',
'title' => __('Snippet Type', WP_ADMINIFY_TD),
'options' => array(
'css' => __('CSS', WP_ADMINIFY_TD),
'js' => __('JS', WP_ADMINIFY_TD),
),
'default' => $this->get_default_field('_wp_adminify_script_type')
);
$custom_css_js[] = array(
'id' => $this->prefix . 'custom_js',
'type' => 'code_editor',
'title' => __('Custom JS', WP_ADMINIFY_TD),
'subtitle' => __('Add your Custom Script here', WP_ADMINIFY_TD),
'settings' => array(
'theme' => 'dracula',
'mode' => 'javascript',
),
'dependency' => array($this->prefix . 'script_type', '==', 'js'),
'default' => $this->get_default_field('_wp_adminify_custom_js')
);
$custom_css_js[] = array(
'id' => $this->prefix . 'custom_css',
'type' => 'code_editor',
'title' => __('Custom CSS', WP_ADMINIFY_TD),
'subtitle' => __('Add your Custom CSS here', WP_ADMINIFY_TD),
'settings' => array(
'theme' => 'mbo',
'mode' => 'css',
),
'dependency' => array($this->prefix . 'script_type', '==', 'css'),
'default' => $this->get_default_field('_wp_adminify_custom_css')
);
}
}