public static function getTree($iAdminID = 0) { $aWhere = array('iStatus' => 1); $aList = self::getAll(array('where' => $aWhere, 'order' => 'iMenuID ASC')); // 权限判断 if ($iAdminID > 0) { $aMenuPermission = Model_Permission::getMenuPermissions($iAdminID); } // 是否查找当前菜单 $bFind = 0; if ($iAdminID > 0) { $sUri = Yaf_G::getUrl(); } else { $sUri = null; } // 排序及整理 $aParentID = array(); $aOrder = array(); $aData = array(); foreach ($aList as $aMenu) { if ($iAdminID > 0) { if ($aMenuPermission != -1 && !isset($aMenuPermission[$aMenu['iMenuID']])) { continue; } $aMenu['iCurr'] = Yaf_G::getUrl($aMenu['sUrl']) == $sUri ? 1 : 0; if (!$bFind && $aMenu['iCurr'] == 1) { $bFind = 1; } } $aParentID[] = $aMenu['iParentID']; $aOrder[] = $aMenu['iOrder']; unset($aMenu['iOrder'], $aMenu['iStatus'], $aMenu['iCreateTime'], $aMenu['iUpdateTime']); $aData[] = $aMenu; } unset($aList); array_multisort($aParentID, SORT_NUMERIC, SORT_ASC, $aOrder, SORT_NUMERIC, SORT_ASC, $aData); // 如果没有匹配的菜单,则从Cookie中获取 if ($iAdminID > 0) { if (!$bFind) { $sUri = Util_Cookie::get('menu'); } else { Util_Cookie::set('menu', $sUri); } } // 整理父节点 $aParent = []; foreach ($aData as $aMenu) { if (!$bFind) { $aMenu['iCurr'] = Yaf_G::getUrl($aMenu['sUrl']) == $sUri ? 1 : 0; } $aParent[$aMenu['iParentID']][] = $aMenu; } unset($aMenu); return self::_buildTree($aParent, 0, 0, ''); }
/** * 生成新的搜索URL * * @param unknown $aParam * @param unknown $sReplaceKey * @param unknown $sNewValue */ public static function makeSearchUrl($aParam, $sReplaceKey, $sNewValue, $iSelect = 0, $sUri = null) { unset($aParam['page']); if (!is_array($sReplaceKey)) { $sReplaceKey = array($sReplaceKey); $sNewValue = array($sNewValue); } foreach ($sReplaceKey as $k => $v) { $aParam = self::makeSearchParam($aParam, $sReplaceKey[$k], $sNewValue[$k], $iSelect); } return Yaf_G::getUrl($sUri, $aParam) . '.html'; }
/** * 生成权限点 */ public function makeAction() { $aMenuList = Model_Menu::getMenus(); $aCtrClass = array(); $aMenuAction = array(); foreach ($aMenuList as $aMenu) { if ($aMenu['bIsLeaf']) { $aRoute = Yaf_G::getRoute($aMenu['sUrl']); $aMenuAction[$aRoute['module'] . '_' . $aRoute['controller'] . '_' . $aRoute['action']] = $aMenu['sMenuName']; $aCtrClass[$aRoute['module'] . '_' . $aRoute['controller']] = array('iMenuID' => $aMenu['iMenuID'], 'sMenuName' => $aMenu['sMenuName'], 'sUrl' => $aMenu['sUrl']); } } $aPermission = array(); foreach ($aCtrClass as $sCtrClass => $aMenu) { try { $sCtrClass = 'Controller_' . $sCtrClass; if (class_exists($sCtrClass)) { $oCtr = new ReflectionClass($sCtrClass); $aMethod = $oCtr->getMethods(); foreach ($aMethod as $oMethod) { $sAction = $oMethod->getName(); if (substr($sAction, -6) === 'Action') { $sAction = substr($sAction, 0, -6); $aRow = array($aMenu['iMenuID']); $aRow[] = Yaf_G::routeToUrl($sCtrClass . '_' . $sAction); $sDoc = $oMethod->getDocComment(); $matches = null; if (preg_match('/\\s+\\*\\s+(.+)/i', $sDoc, $matches)) { $aRow[] = $matches[1]; } elseif (isset($aMenuAction[$sCtrClass . '_' . $sAction])) { $aRow[] = $aMenuAction[$sCtrClass . '_' . $sAction]; } else { $aRow[] = $aMenu['sMenuName'] . '::' . $sAction; } $aPermission[] = $aRow; } } } } catch (Exception $e) { $aPermission[] = array($aMenu['iMenuID'], Yaf_G::getUrl($aMenu['sUrl']), $aMenu['sMenuName']); } } $iCnt = 0; foreach ($aPermission as $v) { $aRow = Model_Permission::getRow(array('where' => array('sPath' => $v[1]))); if (empty($aRow)) { $aRow = array('iMenuID' => $v[0], 'sPermissionName' => $v[2], 'sPath' => $v[1]); Model_Permission::addData($aRow); $iCnt++; } else { $aRow['iMenuID'] = $v[0]; $aRow['sPermissionName'] = $v[2]; Model_Permission::updData($aRow); $iCnt++; } } return $this->showMsg('本次生成权限点【' . $iCnt . '】个', true); }
public static function getUrl($sAction = null, $aParam = null, $bFullPath = false, $sDomain = null, $sPostfix = null) { return Yaf_G::getUrl($sAction, $aParam, $bFullPath, $sDomain, $sPostfix); }
public function permissionAction() { $aMenuList = Model_Menu::getMenus(); $aCtrClass = array(); $aMenuAction = array(); foreach ($aMenuList as $aMenu) { if ($aMenu['bIsLeaf']) { $aRoute = Yaf_G::getRoute($aMenu['sUrl']); $aMenuAction[$aRoute['module'] . '_' . $aRoute['controller'] . '_' . $aRoute['action']] = $aMenu['sMenuName']; $aCtrClass[$aRoute['module'] . '_' . $aRoute['controller']] = array('iMenuID' => $aMenu['iMenuID'], 'sMenuName' => $aMenu['sMenuName'], 'sUrl' => $aMenu['sUrl']); } } $aPermission = array(); foreach ($aCtrClass as $sCtrClass => $aMenu) { try { $sCtrClass = 'Controller_' . $sCtrClass; if (class_exists($sCtrClass)) { $oCtr = new ReflectionClass($sCtrClass); $aMethod = $oCtr->getMethods(); foreach ($aMethod as $oMethod) { $sAction = $oMethod->getName(); if (substr($sAction, -6) === 'Action') { $sAction = substr($sAction, 0, -6); $aRow = array($aMenu['iMenuID']); $aRow[] = Yaf_G::routeToUrl($sCtrClass . '_' . $sAction); $sDoc = $oMethod->getDocComment(); $matches = null; if (preg_match('/\\s+\\*\\s+(.+)/i', $sDoc, $matches)) { $aRow[] = $matches[1]; } elseif (isset($aMenuAction[$sCtrClass . '_' . $sAction])) { $aRow[] = $aMenuAction[$sCtrClass . '_' . $sAction]; } else { $aRow[] = $aMenu['sMenuName'] . '::' . $sAction; } $aPermission[] = $aRow; } } } } catch (Exception $e) { $aPermission[] = array($aMenu['iMenuID'], Yaf_G::getUrl($aMenu['sUrl']), $aMenu['sMenuName']); } } $this->showMsg($aPermission, true); }