Ejemplo n.º 1
0
 /**
  * Re-order the submenu items so all Freemius added new submenu items
  * are added right after the plugin's settings submenu item.
  *
  * @author Vova Feldman (@svovaf)
  * @since  1.1.4
  */
 private function order_sub_submenu_items()
 {
     global $submenu;
     $menu_slug = $this->_menu->get_top_level_menu_slug();
     /**
      * Before "admin_menu" fires, WordPress will loop over the default submenus and remove pages for which the user
      * does not have permissions. So in case a plugin does not have top-level menu but does have submenus under any
      * of the default menus, only users that have the right role can access its sub-submenus (Account, Contact Us,
      * Support Forum, etc.) since $submenu[ $menu_slug ] will be empty if the user doesn't have permission.
      *
      * In case a plugin does not have submenus under any of the default menus but does have submenus under the menu
      * of another plugin, only users that have the right role can access its sub-submenus since we will use the
      * capability needed to access the parent menu as the capability for the submenus that we will add.
      */
     if (empty($submenu[$menu_slug])) {
         return;
     }
     $top_level_menu =& $submenu[$menu_slug];
     $all_submenu_items_after = array();
     $found_submenu_item = false;
     foreach ($top_level_menu as $submenu_id => $meta) {
         if ($found_submenu_item) {
             // Remove all submenu items after the plugin's submenu item.
             $all_submenu_items_after[] = $meta;
             unset($top_level_menu[$submenu_id]);
         }
         if ($this->_menu->get_raw_slug() === $meta[2]) {
             // Found the submenu item, put all below.
             $found_submenu_item = true;
             continue;
         }
     }
     // Embed all plugin's new submenu items.
     $this->embed_submenu_items();
     // Start with specially high number to make sure it's appended.
     $i = max(10000, max(array_keys($top_level_menu)) + 1);
     foreach ($all_submenu_items_after as $meta) {
         $top_level_menu[$i] = $meta;
         $i++;
     }
     // Sort submenu items.
     ksort($top_level_menu);
 }
Ejemplo n.º 2
0
 /**
  * Remove plugin's all admin menu items & pages, and replace with activation page.
  *
  * @author Vova Feldman (@svovaf)
  * @since  1.0.1
  */
 private function override_plugin_menu_with_activation()
 {
     $this->_logger->entrance();
     $hook = false;
     if ($this->_menu->is_top_level()) {
         $menu = $this->_menu->remove_menu_item();
         if (false !== $menu) {
             // Override menu action.
             $hook = add_menu_page($menu['menu'][3], $menu['menu'][0], 'manage_options', $this->_menu->get_slug(), array(&$this, '_connect_page_render'), $menu['menu'][6], $menu['position']);
         }
     } else {
         if ($this->_menu->has_custom_parent()) {
             $menus = array($this->_menu->get_parent_slug());
             if ($this->_menu->is_override_exact()) {
                 // Make sure the current page is matching the activation page.
                 $activation_url = strtolower($this->get_activation_url());
                 $request_url = strtolower($_SERVER['REQUEST_URI']);
                 if (parse_url($activation_url, PHP_URL_PATH) !== parse_url($request_url, PHP_URL_PATH)) {
                     // Different path - DO NOT OVERRIDE PAGE.
                     return;
                 }
                 $activation_url_params = array();
                 parse_str(parse_url($activation_url, PHP_URL_QUERY), $activation_url_params);
                 $request_url_params = array();
                 parse_str(parse_url($request_url, PHP_URL_QUERY), $request_url_params);
                 foreach ($activation_url_params as $key => $val) {
                     if (!isset($request_url_params[$key]) || $val != $request_url_params[$key]) {
                         // Not matching query string - DO NOT OVERRIDE PAGE.
                         return;
                     }
                 }
             }
         } else {
             $menus = array('tools.php', 'options-general.php');
         }
         foreach ($menus as $parent_slug) {
             $hook = $this->_menu->override_submenu_action($parent_slug, $this->_menu->get_raw_slug(), array(&$this, '_connect_page_render'));
             if (false !== $hook) {
                 // Found plugin's submenu item.
                 break;
             }
         }
     }
     if ($this->_menu->is_activation_page()) {
         // Clean admin page from distracting content.
         $this->_clean_admin_content_section();
     }
     if (false !== $hook) {
         if (fs_request_is_action($this->_slug . '_activate_existing')) {
             add_action("load-{$hook}", array(&$this, '_install_with_current_user'));
         } else {
             if (fs_request_is_action($this->_slug . '_activate_new')) {
                 add_action("load-{$hook}", array(&$this, '_install_with_new_user'));
             }
         }
     }
 }
 /**
  * Re-order the submenu items so all Freemius added new submenu items
  * are added right after the plugin's settings submenu item.
  *
  * @author Vova Feldman (@svovaf)
  * @since  1.1.4
  */
 private function order_sub_submenu_items()
 {
     global $submenu;
     $top_level_menu =& $submenu[$this->_menu->get_top_level_menu_slug()];
     $all_submenu_items_after = array();
     $found_submenu_item = false;
     foreach ($top_level_menu as $submenu_id => $meta) {
         if ($found_submenu_item) {
             // Remove all submenu items after the plugin's submenu item.
             $all_submenu_items_after[] = $meta;
             unset($top_level_menu[$submenu_id]);
         }
         if ($this->_menu->get_raw_slug() === $meta[2]) {
             // Found the submenu item, put all below.
             $found_submenu_item = true;
             continue;
         }
     }
     // Embed all plugin's new submenu items.
     $this->embed_submenu_items();
     // Start with specially high number to make sure it's appended.
     $i = 10000;
     foreach ($all_submenu_items_after as $meta) {
         $top_level_menu[$i] = $meta;
         $i++;
     }
     // Sort submenu items.
     ksort($top_level_menu);
 }
Ejemplo n.º 4
0
 /**
  * Re-order the submenu items so all Freemius added new submenu items
  * are added right after the plugin's settings submenu item.
  *
  * @author Vova Feldman (@svovaf)
  * @since  1.1.4
  */
 private function order_sub_submenu_items()
 {
     global $submenu;
     $top_level_menu =& $submenu[$this->_menu->get_top_level_menu_slug()];
     $all_submenu_items_after = array();
     $found_submenu_item = false;
     foreach ($top_level_menu as $submenu_id => $meta) {
         if ($found_submenu_item) {
             // Remove all submenu items after the plugin's submenu item.
             $all_submenu_items_after[] = $meta;
             unset($top_level_menu[$submenu_id]);
         }
         if ($this->_menu->get_raw_slug() === $meta[2]) {
             // Found the submenu item, put all below.
             $found_submenu_item = true;
             continue;
         }
     }
     // Embed all plugin's new submenu items.
     $this->embed_submenu_items();
     // FIX: Get highest array key value plus one
     foreach ($top_level_menu as $submenu_id => $meta) {
         $i = $submenu_id + 1;
     }
     foreach ($all_submenu_items_after as $meta) {
         $top_level_menu[$i] = $meta;
         $i++;
     }
     // Sort submenu items.
     ksort($top_level_menu);
 }