* @copyright 2004 by http://wombat.exit0.net * @package wombatSite * @subpackage controller */ $GLOBALS['_wbMenuTools'] = array( 'menuFile' => 'content/menu.ser', 'menu' => null, ); /** * Menu tools * * @static * @version 1.1.0 * @package wombatSite * @subpackage controller */ class wbMenuTools { /** * getMenu * * @static * @access public * @return array $menu */ function getMenu() { if( !$GLOBALS['_wbMenuTools']['menu'] ) { $res = wbMenuTools::loadMenu(); if( patErrorManager::isError( $res ) ) { return $res; } } return $GLOBALS['_wbMenuTools']['menu']; } /** * get flatten menu * * @static * @access public * @return array $flat */ function getFlatMenu() { if( !$GLOBALS['_wbMenuTools']['menu'] ) { $res = wbMenuTools::loadMenu(); if( patErrorManager::isError( $res ) ) { return $res; } } $flat = array(); wbMenuTools::flattenMenu( $GLOBALS['_wbMenuTools']['menu'], $flat ); return $flat; } /** * set menu * * @param array $menu * @return boolean $result true */ function setMenu( $menu ) { $GLOBALS['_wbMenuTools']['menu'] = $menu; return true; } /** * save menu to file * * @return boolean $result true */ function saveMenu() { $filename = wbFactory::getParam( 'baseDir' ) . '/' . wbFactory::getParam( 'varDir' ) . '/' . $GLOBALS['_wbMenuTools']['menuFile']; $fh = fopen( $filename, 'w' ); if( !$fh ) { return patErrorManager::raiseError( 'wbMenuTools::2', 'Could not save menu.', 'Could not open: "'. $filename .'" for writing!' ); } $filecontent = serialize( $this->_menu ); fwrite( $fh, $filecontent ); fclose( $fh ); return true; } /** * load the menu * * @static * @access public * @return boolean $result true on success */ function loadMenu() { $filename = wbFactory::getParam( 'baseDir' ) . '/' . wbFactory::getParam( 'varDir' ) . '/' . $GLOBALS['_wbMenuTools']['menuFile']; if( !file_exists( $filename ) || !is_readable( $filename ) ) { return patErrorManager::raiseWarning( 'wbMenuTools:1', 'Could not load menu.', 'Menu data not found, file: "'. $filename .'" could not be loaded!' ); } // load menu content $filecontent = file_get_contents( $filename); $GLOBALS['_wbMenuTools']['menu'] = unserialize( $filecontent ); return true; } /** * flatten menu entries * * recursive to push menu entries into a flat array * * @static * @param array $menu * @param array $list * @param array $path * @return boolean $result true on success * @see getFlattenMenu() */ function flattenMenu( &$menu, &$list, $path = array() ) { for( $i = 0; $i < count( $menu ); ++$i ) { array_push( $path, $menu[$i]['page'] ); $entry = array( 'page' => $menu[$i]['page'], 'title' => $menu[$i]['title'], 'brief' => $menu[$i]['brief'], 'path' => implode( '/', $path ) ); array_push( $list, $entry ); if( isset( $menu[$i]['menu'] ) && is_array( $menu[$i]['menu'] ) ) { $resuilt = wbMenuTools::flattenMenu( $menu[$i]['menu'], $list, $path ); } array_pop( $path ); } return true; } }