Example #1
0
/**
* Renders a custom menu node as part of a submenu
*
* The custom menu this method override the render_custom_menu_item function
* in outputrenderers.php
*
* @see render_custom_menu()
*
* @staticvar int $submenucount
* @param custom_menu_item $menunode
* @return string
*/

protected function render_custom_menu_item(custom_menu_item $menunode) {

// Required to ensure we get unique trackable id's
    static $submenucount = 0;
    $content = html_writer::start_tag('li');
    if ($menunode->has_children()) {
// If the child has menus render it as a sub menu
        $submenucount++;
        if ($menunode->get_url() !== null) {
            $url = $menunode->get_url();
        } else {
            $url = '#cm_submenu_'.$submenucount;
        }
        $content .= html_writer::start_tag('span', array('class'=>'customitem'));
        $content .= html_writer::link($url, $menunode->get_text(), array('title'=>$menunode->get_title()));
        $content .= html_writer::end_tag('span');
        $content .= html_writer::start_tag('ul');
        foreach ($menunode->get_children() as $menunode) {
            $content .= $this->render_custom_menu_item($menunode);
        }
            $content .= html_writer::end_tag('ul');
        } else {
// The node doesn't have children so produce a final menuitem
        if ($menunode->get_url() !== null) {
            $url = $menunode->get_url();
        } else {
            $url = '#';
        }
        $content .= html_writer::link($url, $menunode->get_text(), array('title'=>$menunode->get_title()));
    }
    $content .= html_writer::end_tag('li');
// Return the sub menu
    return $content;
}
Example #2
0
 /**
  * Creates the custom menu
  *
  * @param string $definition the menu items definition in syntax required by {@link convert_text_to_menu_nodes()}
  * @param string $currentlanguage the current language code, null disables multilang support
  */
 public function __construct($definition = '', $currentlanguage = null)
 {
     $this->currentlanguage = $currentlanguage;
     parent::__construct('root');
     // create virtual root element of the menu
     if (!empty($definition)) {
         $this->override_children(self::convert_text_to_menu_nodes($definition, $currentlanguage));
     }
 }
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     static $submenucount = 0;
     if ($menunode->has_children()) {
         if ($level == 1) {
             $class = 'dropdown';
         } else {
             $class = 'dropdown-submenu';
         }
         if ($menunode === $this->language) {
             $class .= ' langmenu';
         }
         $content = html_writer::start_tag('li', array('class' => $class));
         // If the child has menus render it as a sub menu.
         $submenucount++;
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
             $richID = $menunode->get_text();
             //************added by Richard to give custom IDs to menu itmes based on the title************
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         $content .= html_writer::start_tag('a', array('href' => $url, 'class' => 'dropdown-toggle', 'id' => $richID, 'data-toggle' => 'dropdown', 'title' => $menunode->get_title()));
         $content .= $menunode->get_text();
         if ($level == 1) {
             $content .= '<b class="caret"></b>';
         }
         $content .= '</a>';
         $content .= '<ul class="dropdown-menu">';
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= '</ul>';
     } else {
         $content = '<li>';
         // The node doesn't have children so produce a final menuitem.
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
             $richID = $menunode->get_text();
             //************added by Richard to give custom IDs to menu itmes based on the title************
         } else {
             $url = '#';
         }
         $content .= html_writer::link($url, $menunode->get_text(), array('id' => $richID, 'title' => $menunode->get_title()));
     }
     return $content;
 }
Example #4
0
    protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0, $direction = '' ) {
        static $submenucount = 0;

        if ($menunode->has_children()) {

            if ($level == 1) {
                $dropdowntype = 'dropdown';
            } else {
                $dropdowntype = 'dropdown-submenu';
            }

            $content = html_writer::start_tag('li', array('class' => $dropdowntype));
            // If the child has menus render it as a sub menu.
            $submenucount++;
            if ($menunode->get_url() !== null) {
                $url = $menunode->get_url();
            } else {
                $url = '#cm_submenu_'.$submenucount;
            }
            $linkattributes = array(
                'href' => $url,
                'class' => 'dropdown-toggle',
                'data-toggle' => 'dropdown',
                'title' => $menunode->get_title(),
            );
            $content .= html_writer::start_tag('a', $linkattributes);
            $content .= $menunode->get_text();
            if ($level == 1) {
                $content .= '<b class="caret"></b>';
            }
            $content .= '</a>';
            $content .= '<ul class="dropdown-menu '.$direction.'">';
            foreach ($menunode->get_children() as $menunode) {
                $content .= $this->render_custom_menu_item($menunode, 0);
            }
            $content .= '</ul>';
        } else {
            $content = '<li>';
            // The node doesn't have children so produce a final menuitem.
            $class = $menunode->get_title();
            if (preg_match("/^#+$/", $menunode->get_text())) {
                $content = '<li class="divider" role="presentation">';
            } else  {
                $content = '<li>';
            // The node doesn't have children so produce a final menuitem.
                if ($menunode->get_url() !== null) {
                    $url = $menunode->get_url();
                } else {
                    $url = '#';
                }
                $content .= html_writer::link($url, $menunode->get_text(), array('class' => $class, 'title' => $menunode->get_title()));
            }
        }
        return $content;
    }
Example #5
0
    /**
     * Renders a custom menu node as part of a submenu
     *
     * The custom menu this method produces makes use of the YUI3 menunav widget
     * and requires very specific html elements and classes.
     *
     * @see core:renderer::render_custom_menu()
     *
     * @staticvar int $submenucount
     * @param custom_menu_item $menunode
     * @return string
     */
    protected function render_custom_menu_item(custom_menu_item $menunode) {
        // Required to ensure we get unique trackable id's
        static $submenucount = 0;
        if ($menunode->has_children()) {
            // If the child has menus render it as a sub menu
            $submenucount++;
            $content = html_writer::start_tag('li');
            if ($menunode->get_url() !== null) {
                $url = $menunode->get_url();
            } else {
                $url = '#cm_submenu_'.$submenucount;
            }
            $content .= html_writer::link($url, $menunode->get_text(), array('class'=>'yui3-menu-label', 'title'=>$menunode->get_title()));
            $content .= html_writer::start_tag('div', array('id'=>'cm_submenu_'.$submenucount, 'class'=>'yui3-menu custom_menu_submenu'));
            $content .= html_writer::start_tag('div', array('class'=>'yui3-menu-content'));
            $content .= html_writer::start_tag('ul');
            foreach ($menunode->get_children() as $menunode) {
                $content .= $this->render_custom_menu_item($menunode);
            }
            $content .= html_writer::end_tag('ul');
            $content .= html_writer::end_tag('div');
            $content .= html_writer::end_tag('div');
            $content .= html_writer::end_tag('li');
        } else {
            // The node doesn't have children so produce a final menuitem.
            // Also, if the node's text matches '####', add a class so we can treat it as a divider.
            $content = '';
            if (preg_match("/^#+$/", $menunode->get_text())) {

                // This is a divider.
                $content = html_writer::start_tag('li', array('class' => 'yui3-menuitem divider'));
            } else {
                $content = html_writer::start_tag(
                    'li',
                    array(
                        'class' => 'yui3-menuitem'
                    )
                );
                if ($menunode->get_url() !== null) {
                    $url = $menunode->get_url();
                } else {
                    $url = '#';
                }
                $content .= html_writer::link(
                    $url,
                    $menunode->get_text(),
                    array('class' => 'yui3-menuitem-content', 'title' => $menunode->get_title())
                );
            }
            $content .= html_writer::end_tag('li');
        }
        // Return the sub menu
        return $content;
    }
Example #6
0
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     global $COURSE, $USER, $CFG;
     static $submenucount = 0;
     if ($menunode->has_children()) {
         if ($level == 1) {
             $class = 'dropdown';
         } else {
             $class = 'dropdown-submenu';
         }
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         // allow protected menu items to only logged in
         if (preg_match('/^!/', $url)) {
             if (!isloggedin() || isguestuser()) {
                 return;
             } else {
                 $url = preg_replace('/^!/', '', $url);
             }
         }
         // Url context variables replacement if needed in menu (first catch escaped form).
         $url = preg_replace('/%25WWWROOT%25/', $CFG->wwwroot, $url);
         $url = preg_replace('/%WWWROOT%/', $CFG->wwwroot, $url);
         $url = preg_replace('/%25COURSEID%25/', $COURSE->id, $url);
         $url = preg_replace('/%COURSEID%/', $COURSE->id, $url);
         $url = preg_replace('/%25USERID%25/', $USER->id, $url);
         $url = preg_replace('/%USERID%/', $USER->id, $url);
         if ($menunode === $this->language) {
             $class .= ' langmenu';
         }
         $content = html_writer::start_tag('li', array('class' => $class));
         // If the child has menus render it as a sub menu.
         $submenucount++;
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         $content .= html_writer::start_tag('a', array('href' => $url, 'class' => 'dropdown-toggle', 'data-toggle' => 'dropdown', 'title' => $menunode->get_title()));
         $content .= $menunode->get_text();
         if ($level == 1) {
             $content .= '<b class="caret"></b>';
         }
         $content .= '</a>';
         $content .= '<ul class="dropdown-menu">';
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= '</ul>';
     } else {
         $content = '<li>';
         // The node doesn't have children so produce a final menuitem.
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#';
         }
         $coursecontext = context_course::instance($COURSE->id);
         // allow protected menu items to only logged in
         if (preg_match('/^([^!]*)!(.*)$/', $url, $matches)) {
             if (empty($matches[1])) {
                 if (!isloggedin() || isguestuser()) {
                     return;
                 } else {
                     $url = preg_replace('/^!/', '', $url);
                 }
             } else {
                 if (has_capability($matches[1], $coursecontext)) {
                     $url = $matches[2];
                 } else {
                     return;
                 }
             }
         }
         // Url context variables replacement if needed in menu (first catch escaped form).
         $url = preg_replace('/%25WWWROOT%25/', $CFG->wwwroot, $url);
         $url = preg_replace('/%WWWROOT%/', $CFG->wwwroot, $url);
         $url = preg_replace('/%25COURSEID%25/', $COURSE->id, $url);
         $url = preg_replace('/%COURSEID%/', $COURSE->id, $url);
         $url = preg_replace('/%25USERID%25/', $USER->id, $url);
         $url = preg_replace('/%USERID%/', $USER->id, $url);
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
     }
     return $content;
 }
Example #7
0
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     static $submenucount = 0;
     $content = '';
     if ($menunode->has_children()) {
         if ($level == 1) {
             $class = 'dropdown';
         } else {
             $class = 'dropdown-submenu';
         }
         if ($menunode === $this->language) {
             $class .= ' langmenu';
         }
         $content = html_writer::start_tag('li', array('class' => $class));
         // If the child has menus render it as a sub menu.
         $submenucount++;
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         $content .= html_writer::start_tag('a', array('href' => $url, 'class' => 'dropdown-toggle', 'data-toggle' => 'dropdown', 'title' => $menunode->get_title()));
         $content .= $menunode->get_text();
         if ($level == 1) {
             $content .= '<b class="caret"></b>';
         }
         $content .= '</a>';
         $content .= '<ul class="dropdown-menu">';
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= '</ul>';
     } else {
         // The node doesn't have children so produce a final menuitem.
         // Also, if the node's text matches '####', add a class so we can treat it as a divider.
         if (preg_match("/^#+\$/", $menunode->get_text())) {
             // This is a divider.
             $content = '<li class="divider">&nbsp;</li>';
         } else {
             $content = '<li>';
             if ($menunode->get_url() !== null) {
                 $url = $menunode->get_url();
             } else {
                 $url = '#';
             }
             $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
             $content .= '</li>';
         }
     }
     return $content;
 }
Example #8
0
 public function __construct(custom_menu_item $menunode)
 {
     parent::__construct($menunode->get_text(), $menunode->get_url(), $menunode->get_title(), $menunode->get_sort_order(), $menunode->get_parent());
     $this->children = $menunode->get_children();
     $matches = array();
     if (preg_match('/^\\[\\[([a-zA-Z0-9\\-\\_\\:]+)\\]\\]$/', $this->text, $matches)) {
         try {
             $this->text = get_string($matches[1], 'theme_rocket');
         } catch (Exception $e) {
             $this->text = $matches[1];
         }
     }
     $matches = array();
     if (preg_match('/^\\[\\[([a-zA-Z0-9\\-\\_\\:]+)\\]\\]$/', $this->title, $matches)) {
         try {
             $this->title = get_string($matches[1], 'theme_rocket');
         } catch (Exception $e) {
             $this->title = $matches[1];
         }
     }
 }
 /**
  * Output custom menu items as flat list.
  *
  * @return string
  */
 protected function render_custom_menu_item(\custom_menu_item $menunode)
 {
     $content = html_writer::start_tag('li');
     if ($menunode->get_url() !== null) {
         $url = $menunode->get_url();
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
     } else {
         $content .= $menunode->get_text();
     }
     $content .= html_writer::end_tag('li');
     if ($menunode->has_children()) {
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode);
         }
     }
     return $content;
 }
 private function render_custom_menu_leaf(custom_menu_item $menunode)
 {
     $icon = $menunode->get_title();
     if (strpos($icon, 'icon-') === 0) {
         $icon = substr($icon, 5);
     } else {
         $icon = '';
     }
     return bootstrap::li_icon_link($menunode->get_url(), $icon, $menunode->get_text());
 }
Example #11
0
 /**
  * Support function that takes a custom_menu_item and converts it to a string.
  *
  * @param custom_menu_item $item
  * @param int $depth
  * @return string
  */
 protected function custommenu_out(custom_menu_item $item, $depth = 0)
 {
     $str = str_repeat('-', $depth);
     $str .= $item->get_text();
     $str .= '|' . $item->get_url();
     $str .= '|' . $item->get_title();
     if ($item->has_children()) {
         $str .= '|' . count($item->get_children());
         foreach ($item->get_children() as $child) {
             $str .= "\n" . $this->custommenu_out($child, $depth + 1);
         }
     }
     return $str;
 }
Example #12
0
 /**
  * Creates the custom menu
  * @param string $text Sets the text for this custom menu, never gets used and is optional
  */
 public function __construct($text='base') {
     global $CFG;
     parent::__construct($text);
     if (!empty($CFG->custommenuitems)) {
         $this->override_children(self::convert_text_to_menu_nodes($CFG->custommenuitems));
     }
 }
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     static $submenucount = 0;
     if ($menunode->has_children()) {
         $dropdowntype = $level == 1 ? 'parent dcjq-parent-li' : 'parent dcjq-parent-li';
         $content = html_writer::start_tag('li', array('class' => $dropdowntype));
         // If the child has menus, render it as a sub menu.
         $submenucount++;
         $url = $menunode->get_url() !== null ? $menunode->get_url() : '#cm_submenu_' . $submenucount;
         $content .= html_writer::start_tag('a', array('href' => 'javascript:void(0)', 'class' => 'dcjq-parent'));
         $content .= $menunode->get_title();
         $content .= html_writer::tag('i', '');
         $content .= html_writer::tag('span', '', array('class' => 'dcjq-icon'));
         $content .= html_writer::tag('span', '', array('class' => 'dcjq-icon'));
         $content .= html_writer::end_tag('a');
         $content .= html_writer::start_tag('ul');
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= html_writer::end_tag('ul');
     } else {
         $content = html_writer::start_tag('li');
         // The node doesn't have children so produce a final menuitem.
         $url = $menunode->get_url() !== null ? $menunode->get_url() : '#';
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
     }
     return $content;
 }
Example #14
0
 /**
  * Renders menu items for the custom_menu
  * @param custom_menu_item $menunode
  * @param int $level
  * @return string $content
  */
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     static $submenucount = 0;
     if ($menunode->has_children()) {
         if ($level == 1) {
             $class = 'dropdown';
         } else {
             $class = 'dropdown-submenu';
         }
         if ($menunode === $this->language) {
             $class .= ' langmenu';
         }
         $content = html_writer::start_tag('li', array('class' => $class));
         // If the child has menus render it as a sub menu.
         $submenucount++;
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         $content .= html_writer::start_tag('a', array('href' => $url, 'class' => 'dropdown-toggle', 'data-toggle' => 'dropdown', 'title' => $menunode->get_title()));
         $content .= $menunode->get_text();
         if ($level == 1) {
             $content .= '<i class="fa fa-caret-right"></i>';
         }
         $content .= '</a>';
         $content .= '<ul class="dropdown-menu">';
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= '</ul>';
     } else {
         $content = '<li>';
         // The node doesn't have children so produce a final menuitem.
         $class = '';
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
             $class = $url->get_param('essentialcolours');
         } else {
             $url = '#';
         }
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title(), 'class' => $class));
     }
     return $content;
 }
 /**
  * Renders a custom menu node as part of a submenu
  *
  * The custom menu this method produces makes use of the foundation
  * top-bar element and requires specific markup and classes
  *
  * @see core:renderer::render_custom_menu()
  *
  * @staticvar int $submenucount
  * @param custom_menu_item $menunode
  * @return string
  */
 protected function render_custom_menu_item(custom_menu_item $menunode)
 {
     if (right_to_left()) {
         $direction = array('left-side' => 'right', 'right-side' => 'left');
         $dir = 'right';
     } else {
         $direction = array('left-side' => 'left', 'right-side' => 'right');
         $dir = '';
     }
     if ($menunode->has_children()) {
         // If the child has menus render it as a sub menu
         $content = html_writer::start_tag('li', array('class' => 'has-dropdown ' . $dir));
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#';
         }
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
         $content .= html_writer::start_tag('ul', array('class' => 'dropdown'));
         foreach ($menunode->get_children() as $menunode) {
             // If the child has menus render it as a sub menu (it's a loop!)
             $content .= $this->render_custom_menu_item($menunode);
         }
         $content .= html_writer::end_tag('ul');
         $content .= html_writer::end_tag('li');
     } else {
         // The node doesn't have children so produce a menuitem
         $content = html_writer::start_tag('li');
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#';
         }
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
         $content .= html_writer::end_tag('li');
     }
     // Return the sub menu
     return $content;
 }
 protected function render_custom_menu_item(custom_menu_item $menunode, $level = 0)
 {
     static $submenucount = 0;
     // Add additional class for custom envelope/messages selector.
     $customclass = '';
     if (preg_match('/fa-envelope/', $menunode->get_text())) {
         $customclass = ' messages';
     }
     if ($menunode->has_children()) {
         if ($level == 1) {
             $dropdowntype = 'dropdown';
         } else {
             $dropdowntype = 'dropdown-submenu';
         }
         $content = html_writer::start_tag('li', array('class' => $dropdowntype . $customclass));
         // If the child has menus render it as a sub menu.
         $submenucount++;
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#cm_submenu_' . $submenucount;
         }
         $linkattributes = array('href' => $url, 'class' => 'dropdown-toggle', 'data-toggle' => 'dropdown', 'title' => $menunode->get_title());
         $content .= html_writer::start_tag('a', $linkattributes);
         $content .= $menunode->get_text();
         if ($level == 1) {
             $content .= '<b class="caret"></b>';
         }
         $content .= '</a>';
         $content .= '<ul class="dropdown-menu">';
         foreach ($menunode->get_children() as $menunode) {
             $content .= $this->render_custom_menu_item($menunode, 0);
         }
         $content .= '</ul>';
     } else {
         $content = '<li>';
         // The node doesn't have children so produce a final menuitem.
         if ($menunode->get_url() !== null) {
             $url = $menunode->get_url();
         } else {
             $url = '#';
         }
         $content .= html_writer::link($url, $menunode->get_text(), array('title' => $menunode->get_title()));
     }
     return $content;
 }