/**
  * Test context calculations for submenus.
  */
 public function test_submenu_contexts()
 {
     $screen = get_current_screen();
     $self = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : null;
     $page = isset($_GET['page']) ? $_GET['page'] : null;
     $submenus = _fieldmanager_registry('submenus');
     _fieldmanager_registry('submenus', array());
     // Spoof is_admin().
     set_current_screen('dashboard-user');
     // Submenu of a default WordPress menu.
     $options_submenu = rand_str();
     fm_register_submenu_page($options_submenu, 'options-general.php', 'Options');
     $_SERVER['PHP_SELF'] = '/options-general.php';
     $_GET['page'] = $options_submenu;
     $this->assertEquals(array('submenu', $options_submenu), fm_calculate_context());
     // Submenu of a custom menu.
     $custom_menu_submenu = rand_str();
     fm_register_submenu_page($custom_menu_submenu, rand_str(), 'Custom');
     $_SERVER['PHP_SELF'] = '/admin.php';
     $_GET['page'] = $custom_menu_submenu;
     $this->assertEquals(array('submenu', $custom_menu_submenu), fm_calculate_context());
     // Submenu that Fieldmanager didn't register.
     $_SERVER['PHP_SELF'] = '/themes.php';
     $_GET['page'] = rand_str();
     $this->assertEquals(array(null, null), fm_calculate_context());
     $GLOBALS['current_screen'] = $screen;
     $_SERVER['PHP_SELF'] = $self;
     $_GET['page'] = $page;
     _fieldmanager_registry('submenus', $submenus);
 }
/**
 * Get the context for triggers and pattern matching.
 *
 * This function is crucial for performance. It prevents the unnecessary
 * initialization of FM classes, and the unnecessary loading of CSS and
 * JavaScript.
 *
 * @see fm_calculate_context() for detail about the returned array values.
 *
 * @return array Contextual information for the current request.
 */
function fm_get_context()
{
    static $calculated_context;
    if ($calculated_context) {
        return $calculated_context;
    } else {
        $calculated_context = fm_calculate_context();
        return $calculated_context;
    }
}
/**
 * Get the context for triggers and pattern matching.
 *
 * This function is crucial for performance. It prevents the unnecessary
 * initialization of FM classes, and the unnecessary loading of CSS and
 * JavaScript.
 *
 * @see fm_calculate_context() for detail about the returned array values.
 *
 * @param bool $recalculate Optional. If true, FM will recalculate the current
 *                          context. This is necessary for testing and perhaps
 *                          other programmatic purposes.
 * @return array Contextual information for the current request.
 */
function fm_get_context($recalculate = false)
{
    static $calculated_context;
    if (!$recalculate && $calculated_context) {
        return $calculated_context;
    } else {
        $calculated_context = fm_calculate_context();
        return $calculated_context;
    }
}
 /**
  * Test a submenu that Fieldmanager didn't register.
  */
 public function test_non_fm_submenu()
 {
     $_SERVER['PHP_SELF'] = '/themes.php';
     $_GET['page'] = rand_str();
     $this->assertEquals(array(null, null), fm_calculate_context());
 }
 public function test_ajax_direct_context()
 {
     $_SERVER['PHP_SELF'] = '/admin-ajax.php';
     $_POST = array('fm_context' => 'foo');
     $this->assertEquals(array('foo', null), fm_calculate_context());
     $this->_context_action_assertions('foo', null);
     $_POST = array('fm_context' => 'foo', 'fm_subcontext' => 'bar');
     $this->assertEquals(array('foo', 'bar'), fm_calculate_context());
     $this->_context_action_assertions('foo', 'bar');
 }