/** * update block configuration */ public function update($blockinfo) { // Get current content $vars = BlockUtil::varsFromContent($blockinfo['content']); // check if import old menu $menutree_menus = FormUtil::getPassedValue('menutree_menus', 'null'); if ($menutree_menus != 'null') { $vars['menutree_content'] = $this->_import_menu($menutree_menus); } else { $vars['menutree_content'] = FormUtil::getPassedValue('menutree_content', '', 'POST'); $vars['menutree_content'] = DataUtil::urlsafeJsonDecode($vars['menutree_content']); } if (!$this->validate_menu($vars['menutree_content'])) { return LogUtil::registerError($this->__('Error! Could not save your changes.')); } // sort tree array according to lineno key uasort($vars['menutree_content'], array('Blocks_Block_Menutree','sort_menu')); // get other form data $menutree_data = FormUtil::getPassedValue('menutree'); $vars['menutree_tpl'] = isset($menutree_data['tpl']) ? $menutree_data['tpl'] : ''; if (empty($vars['menutree_tpl']) || !$this->view->template_exists($vars['menutree_tpl'])) { $vars['menutree_tpl'] = 'menutree/blocks_block_menutree_default.tpl'; } $vars['menutree_stylesheet'] = isset($menutree_data['stylesheet']) ? $menutree_data['stylesheet'] : ''; if (empty($vars['menutree_stylesheet']) || $vars['menutree_stylesheet'] == 'null' || !file_exists($vars['menutree_stylesheet'])) { $vars['menutree_stylesheet'] = ''; } $vars['menutree_titles'] = isset($menutree_data['titles']) ? $menutree_data['titles'] : array(); $vars['menutree_linkclass'] = isset($menutree_data['linkclass']) ? (bool)$menutree_data['linkclass'] : false; // if class list is provided - rebuild array and fill empty entries if ($vars['menutree_linkclass'] && isset($menutree_data['linkclasses'])) { foreach ((array)$menutree_data['linkclasses'] as $k => $class) { if (empty($class['name'])) { unset($menutree_data['linkclasses'][$k]); } elseif (empty($class['title'])) { $menutree_data['linkclasses'][$k]['title'] = $class['name']; } } $vars['menutree_linkclasses'] = $menutree_data['linkclasses']; if (count($vars['menutree_linkclasses']) < 1) { $vars['menutree_linkclass'] = false; } } $vars['menutree_maxdepth'] = isset($menutree_data['maxdepth']) ? (int)$menutree_data['maxdepth'] : 0; $vars['menutree_editlinks'] = isset($menutree_data['editlinks']) ? (bool)$menutree_data['editlinks'] : false; $vars['menutree_stripbaseurl'] = isset($menutree_data['stripbaseurl']) ? (bool)$menutree_data['stripbaseurl'] : false; $vars['menutree_titlesperms'] = isset($menutree_data['titlesperms']) && array_key_exists($menutree_data['titlesperms'],$this->_permlevels()) ? $menutree_data['titlesperms'] : 'ACCESS_EDIT'; $vars['menutree_displayperms'] = isset($menutree_data['displayperms']) && array_key_exists($menutree_data['displayperms'],$this->_permlevels()) ? $menutree_data['displayperms'] : 'ACCESS_EDIT'; $vars['menutree_settingsperms'] = isset($menutree_data['settingsperms']) && array_key_exists($menutree_data['settingsperms'],$this->_permlevels()) ? $menutree_data['settingsperms'] : 'ACCESS_EDIT'; if (empty($vars['menutree_content'])) { unset($vars['menutree_content']); } else { // check langs and save current langs list and current default lang $tmp = current($vars['menutree_content']); $vars['oldlanguages'] = array_keys($tmp); $vars['olddefaultanguage'] = $vars['oldlanguages'][0]; // strip base url - if needed if ($vars['menutree_stripbaseurl'] === true) { $baseurl = System::getBaseUrl(); foreach ($vars['menutree_content'] as $itemid => $item) { foreach ($item as $lang => $_item) { // strip base url only when it occurs at the beginning of url and only once if (strpos($_item['href'], $baseurl) === 0) { $vars['menutree_content'][$itemid][$lang]['href'] = substr_replace($_item['href'], '', 0, strlen($baseurl)); } } } } } // write back the new contents $blockinfo['content'] = BlockUtil::varsToContent($vars); // clear the block cache $this->view->clear_cache(null, $blockinfo['bkey'].'/bid'.$blockinfo['bid']); // and clear the theme cache Zikula_View_Theme::getInstance()->clear_cache(); return $blockinfo; }