Source of file api.globalmenu.php
Size: 12,608 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.globalmenu.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 | <?php /** * Ubilling global menu rendering and customization class */ class GlobalMenu { /** * Contains globalmenu config as key=>value with sections * * @var array */ protected $rawData = array(); /** * Contains some preprocessed menu data * * @var array */ protected $menuData = array(); /** * Contains available menu categories * * @var array */ protected $categories = array(); /** * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains disabled menu items * * @var array */ protected $disabled = array(); /** * Contains fast access menu items * * @var array */ protected $fastAccess = array(); /** * Contains default menu icons path * * @var string */ protected $iconsPath = 'skins/menuicons/'; /** * Pre-rendered menu code * * @var string */ protected $menuCode = ''; /** * Pre-rendered fast access menu code * * @var string */ protected $menuCodeFA = ''; /** * Current user`s login * * @var string */ protected $myLogin = ''; const DEFAULT_ICON = 'defaulticon.png'; const CUSTOMS_PATH = 'content/documents/glmcustoms/'; /** * Creates new GlobalMenu instance */ public function __construct() { $this->setLogin(); $this->loadCustoms(); $this->loadConfig(); $this->loadData(); $this->extractCategories(); $this->parseData(); } /** * Sets current logged in user login into private property * * @return void */ protected function setLogin() { if (LOGGED_IN) { $this->myLogin = whoami(); } } /** * Loads global menu custom data if its available * * @return void */ protected function loadCustoms() { if (!empty($this->myLogin)) { //read and preprocess disabled modules data $disabledFilename = self::CUSTOMS_PATH . $this->myLogin . '.disabled'; if (file_exists($disabledFilename)) { $tmpData = file_get_contents($disabledFilename); if (!empty($tmpData)) { $tmpData = explode(',', $tmpData); if (!empty($tmpData)) { foreach ($tmpData as $io => $modulename) { $this->disabled[$modulename] = $io; } } } } //read and preprocess fast access modules data $fastaccFilename = self::CUSTOMS_PATH . $this->myLogin . '.fastacc'; if (file_exists($fastaccFilename)) { $tmpData = file_get_contents($fastaccFilename); if (!empty($tmpData)) { $tmpData = explode(',', $tmpData); if (!empty($tmpData)) { foreach ($tmpData as $io => $modulename) { $this->fastAccess[$modulename] = $io; } } } } } } /** * Loads global alter.ini into protected data prop * * @global type $ubillingConfig * @return void */ protected function loadConfig() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Loads menudata into private raw data property * * @return void */ protected function loadData() { $this->rawData = rcms_parse_ini_file(CONFIG_PATH . 'globalmenu.ini', true); } /** * Extracts categories from filled up rawData * * @return void */ protected function extractCategories() { if (!empty($this->rawData)) { if (isset($this->rawData['ubillingglobalmenucategories'])) { $this->categories = $this->rawData['ubillingglobalmenucategories']; unset($this->rawData['ubillingglobalmenucategories']); foreach ($this->categories as $io => $each) { $this->menuData[$each] = ''; } } } } /** * Parses raw menu data into ready to output menu array witch right/option checks * * @return void */ protected function parseData() { if (!empty($this->rawData)) { foreach ($this->rawData as $io => $each) { $icon = (!empty($each['ICON'])) ? $each['ICON'] : self::DEFAULT_ICON; $icon = $this->iconsPath . $icon; $name = __($each['NAME']); $checkRight = (!empty($each['NEED_RIGHT'])) ? cfr($each['NEED_RIGHT']) : true; $checkOption = (!empty($each['NEED_OPTION'])) ? @$this->altCfg[$each['NEED_OPTION']] : true; if ($checkRight and $checkOption) { if (!isset($this->disabled[$io])) { $this->menuData[$each['CATEGORY']] .= wf_tag('li', false) . wf_Link($each['URL'], wf_img($icon) . ' ' . $name, false) . wf_tag('li', true); } } } } } /** * Formats existing menu data into printable HTML code * * @return void */ protected function formatMenuCode() { if (!empty($this->categories)) { if (!empty($this->menuData)) { foreach ($this->categories as $eachCategoryName => $eachCategoryId) { if (!empty($this->menuData[$eachCategoryId])) { $this->menuCode .= wf_tag('h3', false) . __($eachCategoryName) . wf_tag('h3', true); $this->menuCode .= wf_tag('ul', false, 'toggleGMENU'); $this->menuCode .= $this->menuData[$eachCategoryId]; $this->menuCode .= wf_tag('ul', true); } } } } } /** * Returns formatted menu code * * @return string */ public function render() { $this->formatMenuCode(); return($this->menuCode); } /** * Formats existing menu data into printable HTML code as personalization form * * @return string */ public function getEditForm() { $result = ''; $tmpArr = array(); if (!empty($this->categories)) { if (!empty($this->rawData)) { foreach ($this->rawData as $io => $each) { //table headers if (!isset($tmpArr[$each['CATEGORY']])) { $formCells = wf_TableCell(__('Module'), '50%'); $formCells .= wf_TableCell(__('Hidden')); $formCells .= wf_TableCell(__('Fast access')); $formRows = wf_TableRow($formCells, 'row1'); $tmpArr[$each['CATEGORY']] = $formRows; } //table rows $icon = (!empty($each['ICON'])) ? $each['ICON'] : self::DEFAULT_ICON; $icon = $this->iconsPath . $icon; $name = __($each['NAME']); $checkRight = (!empty($each['NEED_RIGHT'])) ? cfr($each['NEED_RIGHT']) : true; $checkOption = (!empty($each['NEED_OPTION'])) ? @$this->altCfg[$each['NEED_OPTION']] : true; if ($checkRight and $checkOption) { $formCells = wf_TableCell(wf_Link($each['URL'], wf_img($icon) . ' ' . $name, false)); $disabledFlag = (isset($this->disabled[$io])) ? true : false; $formCells .= wf_TableCell(wf_CheckInput('_glmdisabled[' . $io . ']', '', false, $disabledFlag)); $fastAccessFlag = (isset($this->fastAccess[$io])) ? true : false; $formCells .= wf_TableCell(wf_CheckInput('_glmfastacc[' . $io . ']', '', false, $fastAccessFlag)); $formRows = wf_TableRow($formCells, 'row5'); $tmpArr[$each['CATEGORY']] .= $formRows; } } } foreach ($this->categories as $eachCategoryName => $eachCategoryId) { $result .= wf_tag('h3', false) . __($eachCategoryName) . wf_tag('h3', true); $result .= wf_TableBody($tmpArr[$eachCategoryId], '100%', 0, ''); } } if (!empty($result)) { $result .= wf_HiddenInput('glcustomconfedit', 'true'); $result .= wf_tag('br'); $result .= wf_Submit(__('Save')); $result = wf_Form('', 'POST', $result, ''); } return ($result); } /** * Saves currently posted custom configs to FS * * @return void */ public function saveCustomConfigs() { //disabled modules management $disabledFilename = self::CUSTOMS_PATH . $this->myLogin . '.disabled'; $tmpData = ''; if (ubRouting::checkPost('_glmdisabled')) { $glmDisabled = ubRouting::post('_glmdisabled'); if (!empty($glmDisabled)) { foreach ($glmDisabled as $modulename => $on) { $tmpData .= trim($modulename) . ','; } $tmpData = rtrim($tmpData, ","); file_put_contents($disabledFilename, $tmpData); $tmpData = ''; } } else { file_put_contents($disabledFilename, ''); } //fast access modules management $fastaccFilename = self::CUSTOMS_PATH . $this->myLogin . '.fastacc'; $tmpData = ''; if (ubRouting::checkPost('_glmfastacc')) { $glmFastacc = ubRouting::post('_glmfastacc'); if (!empty($glmFastacc)) { foreach ($glmFastacc as $modulename => $on) { $tmpData .= trim($modulename) . ','; } $tmpData = rtrim($tmpData, ","); file_put_contents($fastaccFilename, $tmpData); $tmpData = ''; } } else { file_put_contents($fastaccFilename, ''); } } /** * Returns fast access menu customization control * * @return string */ protected function getCustomizeControl() { $result = ''; if (cfr('GLMENUCONF')) { $result .= wf_tag('div', false, 'breadcrumb_divider') . wf_tag('div', true); $result .= wf_Link('?module=glmenuconf', '+', false, '', 'title="' . __('Personalize menu') . '"'); } return($result); } /** * Rebuilds fast access menu data with newly saved config * * @return void */ public function rebuildFastAccessMenuData() { $delimiter = wf_tag('div', false, 'breadcrumb_divider') . wf_tag('div', true); $fastaccData = self::CUSTOMS_PATH . $this->myLogin . '.fastaccdata'; $tmpData = ''; if (!empty($this->rawData)) { foreach ($this->rawData as $io => $each) { if (isset($this->fastAccess[$io])) { $name = __($each['NAME']); $url = $each['URL']; $tmpData .= $delimiter . wf_Link($url, $name, false); } } } //edit control here $tmpData .= $this->getCustomizeControl(); file_put_contents($fastaccData, $tmpData); } /** * Loads prepared personal fast access menu data if it exists * * @return void */ protected function loadFastAccesMenu() { //just single full-load of data due instance lifetime if (empty($this->menuCodeFA)) { $this->menuCodeFA .= wf_Link('?module=taskbar', __('Taskbar'), false); $fastaccData = self::CUSTOMS_PATH . $this->myLogin . '.fastaccdata'; if (file_exists($fastaccData)) { //load preprocessed data $this->menuCodeFA .= file_get_contents($fastaccData); } else { //append customize link if no precached data $this->menuCodeFA .= $this->getCustomizeControl(); } } } /** * Returns raw fast acces menu code * * @return string */ public function renderFastAccessMenu() { $this->loadFastAccesMenu(); return ($this->menuCodeFA); } } |