. namespace core\output; /** * Stores tabs list * * Example how to print a single line tabs: * $rows = array( * new tabobject(...), * new tabobject(...) * ); * echo $OUTPUT->tabtree($rows, $selectedid); * * Multiple row tabs may not look good on some devices but if you want to use them * you can specify ->subtree for the active tabobject. * * @copyright 2013 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since Moodle 2.5 * @package core * @category output */ class tabtree extends tabobject { /** * Constuctor * * It is highly recommended to call constructor when list of tabs is already * populated, this way you ensure that selected and inactive tabs are located * and attribute level is set correctly. * * @param array $tabs array of tabs, each of them may have it's own ->subtree * @param string|null $selected which tab to mark as selected, all parent tabs will * automatically be marked as activated * @param array|string|null $inactive list of ids of inactive tabs, regardless of * their level. Note that you can as weel specify tabobject::$inactive for separate instances */ public function __construct($tabs, $selected = null, $inactive = null) { $this->subtree = $tabs; if ($selected !== null) { $this->set_selected($selected); } if ($inactive !== null) { if (is_array($inactive)) { foreach ($inactive as $id) { if ($tab = $this->find($id)) { $tab->inactive = true; } } } else if ($tab = $this->find($inactive)) { $tab->inactive = true; } } $this->set_level(0); } /** * Export for template. * * @param renderer_base $output Renderer. * @return \stdClass */ public function export_for_template(renderer_base $output) { $tabs = []; $secondrow = false; foreach ($this->subtree as $tab) { $tabs[] = $tab->export_for_template($output); if (!empty($tab->subtree) && ($tab->level == 0 || $tab->selected || $tab->activated)) { $secondrow = new tabtree($tab->subtree); } } return (object) [ 'tabs' => $tabs, 'secondrow' => $secondrow ? $secondrow->export_for_template($output) : false, ]; } } // Alias this class to the old name. // This file will be autoloaded by the legacyclasses autoload system. // In future all uses of this class will be corrected and the legacy references will be removed. class_alias(tabtree::class, \tabtree::class);