295 function &
AddOption( $label, $target, $title=
"", $active=
false, $sortkey=
null, $external=
false ) {
296 if ( !isset($sortkey) ) {
297 $sortkey = (isset($this->last_sortkey) ? $this->last_sortkey + 100 : 1000);
299 $this->last_sortkey = $sortkey;
300 if ( version_compare(phpversion(),
'5.0') < 0) {
301 $new_option =
new MenuOption( $label, $target, $title, $this->main_class, $sortkey );
304 $new_option =
new MenuOption( $label, $target, $title, $this->main_class, $sortkey );
306 if ( ($old_option = $this->
_OptionExists( $label )) ===
false ) {
307 $this->options[] = &$new_option ;
310 dbg_error_log(
"MenuSet",
":AddOption: Replacing existing option # $old_option ($label)");
311 $this->options[$old_option] = &$new_option;
313 if ( is_bool($active) && $active ==
false && $_SERVER[
'REQUEST_URI'] == $target ) {
315 $new_option->Active( $this->active_class );
317 else if ( is_bool($active) && $active ) {
319 $new_option->Active( $this->active_class );
321 else if ( is_string($active) && preg_match($active,$_SERVER[
'REQUEST_URI']) ) {
323 $new_option->Active( $this->active_class );
326 if ( $external ==
true ) $new_option->Set(
'target',
'_blank');
341 function &
AddSubMenu( &$submenu_set, $label, $target, $title=
"", $active=
false, $sortkey=2000 ) {
342 $new_option =& $this->
AddOption( $label, $target, $title, $active, $sortkey );
343 $submenu_set->parent = &$new_option ;
344 $new_option->AddSubmenu( $submenu_set );
396 $this->has_active_options =
false;
397 foreach( $this->options AS $k => $v ) {
398 if ( isset($v->submenu_set) && $v->submenu_set->_HasActive() ) {
400 $this->options[$k]->Active( $this->active_class );
401 $this->has_active_options =
true;
414 if ( $this->has_active_options )
return;
415 foreach( $this->options AS $k => $v ) {
416 if ( isset($v->submenu_set) && $v->submenu_set->_HasActive() ) {
418 $this->options[$k]->Active( $this->active_class );
419 $this->has_active_options =
true;
420 return $this->has_active_options;
424 foreach( $this->options AS $k => $v ) {
425 if ( isset($v->submenu_set) && $v->submenu_set->MakeSomethingActive($test_pattern) ) {
427 $this->options[$k]->Active( $this->active_class );
428 $this->has_active_options =
true;
429 return $this->has_active_options;
432 if ( $this->options[$k]->MaybeActive( $test_pattern, $this->active_class ) ) {
433 $this->has_active_options =
true;
434 return $this->has_active_options;
462 function Render( $submenus_inline =
false ) {
463 if ( !isset($this->has_active_options) ) {
466 $options = $this->options;
467 usort($options,
"_CompareMenuSequence");
468 $render_sub_menus =
false;
469 $r =
"<div id=\"$this->div_id\">\n";
470 foreach( $options AS $k => $v ) {
472 if ( $v->IsActive() && isset($v->submenu_set) && $v->submenu_set->Size() > 0 ) {
473 $render_sub_menus = $v->submenu_set;
474 if ( $submenus_inline )
475 $r .= $render_sub_menus->Render();
479 if ( !$submenus_inline && $render_sub_menus !=
false ) {
480 $r .= $render_sub_menus->Render();
498 $class =
"submenu" . $depth;
502 $options = $this->options;
503 usort($options,
"_CompareMenuSequence");
505 $r =
"<div id=\"$this->div_id\" class=\"$class\">\n<ul>\n";
506 foreach( $options AS $k => $v ) {
507 if ( $skip_empty && isset($v->submenu_set) && $v->submenu_set->Size() < 1 )
continue;
508 $r .=
"<li>".$v->Render();
509 if ( isset($v->submenu_set) && $v->submenu_set->Size() > 0 ) {
510 $r .= $v->submenu_set->RenderAsCSS($depth+1);
514 $r .=
"</ul></div>\n";