RCCWP_Menu::AttachCustomWritePanelMenuItems PHP Метод

AttachCustomWritePanelMenuItems() публичный статический Метод

    public static function AttachCustomWritePanelMenuItems()
    {
        global $submenu, $menu, $wp_version;
        global $mf_domain, $wpdb;
        require_once 'RCCWP_Options.php';
        $assignToRole = RCCWP_Options::Get('assign-to-role');
        $requiredPostsCap = 'edit_posts';
        $requiredPagesCap = 'edit_pages';
        $customWritePanels = RCCWP_CustomWritePanel::GetCustomWritePanels();
        $new_indicator_text = __('New', $mf_domain);
        $edit_indicator_text = __('Manage', $mf_domain);
        $new_menu = array();
        ksort($menu);
        foreach ($menu as $k => $v) {
            if ($k > 5) {
                break;
            }
            $new_menu[$k] = $v;
        }
        $base = 5;
        $offset = 0;
        $add_post = false;
        // fix for WP 3.0
        if (substr($wp_version, 0, 3) < 3.0) {
            // WP <= 2.9
            $page_new = "page-new.php?";
            $page_edit = "page.php?";
            $page_manage = "edit-pages.php?";
        } else {
            // WP > 3.0
            $page_new = "post-new.php?post_type=page&";
            $page_edit = "post.php?";
            $page_manage = "edit.php?post_type=page&";
        }
        // end fix
        foreach ($customWritePanels as $panel) {
            if ($panel->name != '_Global') {
                // traversal: fix to ignore the global group
                //exists a single write panel? and if exists  this write panel have posts?
                if ($panel->single == 1) {
                    $table_name = $wpdb->prefix . "postmeta";
                    $sql = $wpdb->prepare("SELECT post_id FROM {$table_name}  where meta_key = %s and  meta_value = %d ", array("_mf_write_panel_id", $panel->id));
                    $has_posts = $wpdb->get_var($sql);
                    if (empty($has_posts)) {
                        $add_post = true;
                    } else {
                        $add_post = false;
                    }
                }
                $offset++;
                if ($panel->type == "post") {
                    $type_write_panel = "edit-posts";
                } else {
                    $type_write_panel = "edit-pages";
                }
                if ($assignToRole == 1) {
                    $requiredPostsCap = $panel->capability_name;
                    $requiredPagesCap = $panel->capability_name;
                }
                require_once 'RCCWP_Options.php';
                $condence = RCCWP_Options::Get('condense-menu');
                //IF we has unactivated the condenced menu
                if (!$condence) {
                    //adding the top parent menus
                    $new_menu[$base + $offset] = array(__($panel->name), $type_write_panel, $base + $offset . '.php', '', 'mf-menu-' . sanitize_title_with_dashes($panel->name) . ' menu-top mf-menu-' . $type_write_panel, 'mf-menu-' . $panel->id, 'div');
                    //adding submenu options (add new and manage for each write panel)
                    if ($panel->type == "post") {
                        if ($panel->single == 1) {
                            //if the post is single
                            if ($add_post) {
                                //if the post is single and don't have any related post
                                add_submenu_page($base + $offset . '.php', __($panel->name), $new_indicator_text, $requiredPostsCap, 'post-new.php?custom-write-panel-id=' . $panel->id);
                            } else {
                                //if have one related post we just can  edit the post
                                add_submenu_page($base + $offset . '.php', __($panel->name), "Edit", $requiredPostsCap, 'post.php?action=edit&post=' . $has_posts);
                            }
                        } else {
                            add_submenu_page($base + $offset . '.php', __($panel->name), $edit_indicator_text, $requiredPostsCap, 'edit.php?filter-posts=1&custom-write-panel-id=' . $panel->id);
                            add_submenu_page($base + $offset . '.php', __($panel->name), $new_indicator_text, $requiredPostsCap, 'post-new.php?custom-write-panel-id=' . $panel->id);
                        }
                    } else {
                        if ($panel->single == 1) {
                            //if the page is single
                            if ($add_post) {
                                //if the page is single and don't have any related post
                                add_submenu_page($base + $offset . '.php', __($panel->name), $new_indicator_text, $requiredPagesCap, $page_new . 'custom-write-panel-id=' . $panel->id);
                            } else {
                                add_submenu_page($base + $offset . '.php', __($panel->name), "Edit", $requiredPagesCap, $page_edit . 'action=edit&post=' . $has_posts);
                            }
                        } else {
                            add_submenu_page($base + $offset . '.php', __($panel->name), $edit_indicator_text, $requiredPagesCap, $page_manage . 'filter-posts=1&custom-write-panel-id=' . $panel->id);
                            add_submenu_page($base + $offset . '.php', __($panel->name), $new_indicator_text, $requiredPagesCap, $page_new . 'custom-write-panel-id=' . $panel->id);
                        }
                    }
                } else {
                    //if condenced is activated
                    if ($panel->type == "post") {
                        if ($panel->single == 1) {
                            //if the post is single
                            if ($add_post) {
                                //if the post is single and don't have any related post
                                add_submenu_page('post-new.php', __($panel->name), __($panel->name), $requiredPostsCap, 'post-new.php?custom-write-panel-id=' . $panel->id);
                            }
                        } else {
                            add_submenu_page('post-new.php', __($panel->name), __($panel->name), $requiredPostsCap, 'post-new.php?custom-write-panel-id=' . $panel->id);
                        }
                    } else {
                        if ($panel->single == 1) {
                            //if the page is single
                            if ($add_post) {
                                //if the page is single and don't have any related post
                                add_submenu_page('page-new.php', __($panel->name), __($panel->name), $requiredPagesCap, $page_new . 'custom-write-panel-id=' . $panel->id);
                            } else {
                                add_submenu_page('page-new.php', __($panel->name), __($panel->name) . " (Edit)", $requiredPagesCap, $page_edit . 'action=edit&post=' . $has_posts);
                            }
                        } else {
                            add_submenu_page('page-new.php', __($panel->name), __($panel->name), $requiredPagesCap, $page_new . 'custom-write-panel-id=' . $panel->id);
                        }
                    }
                }
            }
            // traversal: endif '$panel->name == '_Global'
        }
        foreach ($menu as $k => $v) {
            if ($k > 5) {
                $new_menu[$k + $offset] = $v;
            }
        }
        global $_wp_last_utility_menu;
        $_wp_last_utility_menu += $offset;
        $menu = $new_menu;
        RCCWP_Menu::SetCurrentCustomWritePanelMenuItem();
    }