sitemap.inc.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 676 行 · 第 1/2 页
SVN-BASE
676 行
<?php/** * $Id$ * * Maintains (page, access) access map, as well as (section, page) map. * * KnowledgeTree Community Edition * Document Management Made Simple * Copyright (C) 2008 KnowledgeTree Inc. * Portions copyright The Jam Warehouse Software (Pty) Limited * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * Contributor( s): ______________________________________ */require_once(KT_LIB_DIR . '/security/Permission.inc');// define access constantsdefine("None", 1);define("Guest", 2);define("User", 3);define("UnitAdmin", 4);define("SysAdmin", 5);class SiteMap { /** * The underlying site map storage array */ var $aSiteMap; var $aSectionColours; /** * Whether to use the database to store the sitemap or not */ var $bUseDB; /** * Whether to the user accessing the page is a Sysadmin */ var $isSysAdmin; /** * * Whether to the user accessing the page is a Unitadmin */ var $isUnitAdmin; /** * Constructs a new SiteMap * If the db is not being used, the array is initialised. * * @param boolean whether to use the database to store the sitemap or not */ function SiteMap($bUseDB) { $this->bUseDB = $bUseDB; if (!$this->bUseDB) { $this->aSiteMap = array(); } $this->aSectionColours = array(); } /** * Sets the database flag * * @param boolean whether to use the database to store the sitemap or not */ function setUseDB($bUseDB) { $this->bUseDB = $bUseDB; } /** * Returns the database flag */ function getUseDB() { return $this->bUseDB; } /** * Adds a site page mapping entry. * * @param string the controller action * @param string the corresponding page for this action * @param string the section this page falls under * @param int the minimum access needed to access this page * @param string description of the page for link presentation * @param boolean whether this action is enabled or not */ function addPage($sAction, $sPage, $sSectionName, $sRequiredAccess, $sLinkText, $bEnabled = true, $iOrder = 0) { if (!$this->bUseDB) { $this->aSiteMap[$sSectionName][$sRequiredAccess][$sAction] = array ("page" => $sPage, "description" => $sLinkText, "enabled" => (($bEnabled) ? "1" : "0"), "default" => "0", "order" => $iOrder); } } function addSectionColour($sSectionName, $sHtmlElement, $sColour) { $this->aSectionColours[$sSectionName][$sHtmlElement] = $sColour; } function getSectionColour($sSectionName, $sHtmlElement) { return $this->aSectionColours[$sSectionName][$sHtmlElement]; } /** * Adds a site page mapping entry- the default page for the section. * * @param string the controller action * @param string the corresponding page for this action * @param string the section this page falls under * @param int the minimum access needed to access this page * @param string description of the page for link presentation */ function addDefaultPage($sAction, $sPage, $sSectionName, $sRequiredAccess, $sLinkText, $bEnabled = true, $iOrder = 0) { if (!$this->bUseDB) { $this->aSiteMap[$sSectionName][$sRequiredAccess][$sAction] = array ("page" => $sPage, "description" => $sLinkText, "enabled" => (($bEnabled) ? "1" : "0"), "default" => "1", "order" => $iOrder); } } /** * Returns true if the user has the necessary rights to access * a sitemap entry * * @param int the required access (defined above class) * @return boolean true if the user has the access, else false. */ function hasPermission($requiredAccess) { return true; } /** * Returns controller links for a section. * Checks whether to use the db or not and calls the appropriate method * * @param string the section to return links for */ function getSectionLinks($sSectionName, $bSortLinks = true) { if ($this->bUseDB) { return $this->getSectionLinksDB($sSectionName, $bSortLinks); } else { return $this->getSectionLinksArray($sSectionName, $bSortLinks); } } /** * Returns controller links for a section (uses the db) * * @param string the section to return links for */ function getSectionLinksDB($sSectionName, $bSortLinks) { global $default, $lang_err_database; $iFolderID = $_REQUEST['fFolderID']; $sql = $default->db; // lookup sectionID $sectionID = lookupID($default->site_sections_table, "name", $sSectionName); if ($sectionID) { // initialise result array $results = array("descriptions" => array(), "links" => array()); $sQuery = "SELECT link_text, action, access_id FROM $default->sitemap_table WHERE " ./*ok*/ "section_id = ? AND is_enabled = ? AND is_default=0"; if ($bSortLinks) { $sQuery .= " ORDER BY link_text ASC"; } $aParams = array($sectionID, true); if ($sql->query(array($sQuery, $aParams))) { while ($sql->next_record()) { // check permissions $default->log->info("SiteMap:: getSectionLinksDB calling hasPermission with access: " . $sql->f("access_id")); if ($this->hasPermission($sql->f("access_id"))) { // add this array to the resultset array if there is link text if (strlen($sql->f("link_text")) > 0) { $results["descriptions"][] = $sql->f("link_text"); // if fFolderID is set and fFolderID is in the page string // append folderID to the controller link $results["links"][] = isset($iFolderID) ? generateControllerLink($sql->f("action"), "fFolderID=$iFolderID") : generateControllerLink($sql->f("action"), ""); } } } // now check if we have anything in the results array before returning it if (count($results) > 0) { return $results; } else { return false; } } else { $_SESSION["errorMessage"] = $lang_err_database; return false; } } else { $_SESSION["errorMessage"] = "No such section name ($sSectionName) in the sitemap"; return false; } } /** * Returns controller links for a section (uses the array) * * @param string the section to return links for */ function getSectionLinksArray($sSectionName, $bSortLinks) { global $default; $iFolderID = $_REQUEST['fFolderID']; // check if the section exists if (is_array($this->aSiteMap[$sSectionName])) { // initialise result array $results = array("descriptions" => array(), "links" => array()); // need to loop through all (access, page) arrays in this section foreach ($this->aSiteMap[$sSectionName] as $requiredAccess => $pages) { //$default->log->info("SECTION:$sSectionName; access=" . arrayToString($requiredAccess) . ";pages=" . arrayToString($pages)); $default->log->info("SiteMap:: getSectionLinksArray calling hasPermission with requiredAccess: " . $requiredAccess); if ($this->hasPermission($requiredAccess)) { foreach ($pages as $action => $pageDetail) { // add this array to the resultset array if there is link text and it is enabled // but not if it is the default page if ((strlen($pages[$action]["description"]) > 0) && ($pages[$action]["enabled"]) && (!$pages[$action]["default"])) { if (!$bSortLinks) { $results["descriptions"][$pages[$action]["order"]] = $pages[$action]["description"]; $results["links"][$pages[$action]["order"]] = isset($iFolderID) ? generateControllerLink($action, "fFolderID=$iFolderID") : generateControllerLink($action, ""); } else { $results["descriptions"][] = $pages[$action]["description"]; $results["links"][] = isset($iFolderID) ? generateControllerLink($action, "fFolderID=$iFolderID") : generateControllerLink($action, ""); } } } } } // now check if we have anything in the results array before returning it if (count($results) > 0) { if ($bSortLinks) { // alpha sort the results sort($results["descriptions"], SORT_ASC); sort($results["links"], SORT_ASC); reset ($results); } return $results; } else { return false; } } else { $_SESSION["errorMessage"] = "No such section name ($sSectionName) in the sitemap"; return false; } } /** * Returns the link text for a page * * @param string the action to lookup the link text for * @return string the link text */ function getPageLinkText($sAction) { global $default; //$sAction = $this->getActionFromPage($sPage); $default->log->info("getPageLinkText action=$sAction"); // for each section foreach ($this->aSiteMap as $section => $valArr) { // for each group, page array combination foreach ($valArr as $requiredAccess => $pageArr) { // now loop through pages until we find the right one foreach ($pageArr as $ackshin => $page) { if ($ackshin == $sAction) { $default->log->info("loop:$ackshin; test:$sAction"); $default->log->info("SiteMap:: getPageLinkText calling hasPermission with access: " . $requiredAccess); if ($this->hasPermission($requiredAccess)) { return $page["description"]; } } } } } } /** * Returns the page mapped to the (action, groupName) pair. * Checks whether to use the db or not and calls the appropriate method * * @param string the action to lookup pages for * @return string the page to redirect to, or false if the user doesn't have access to the page */ function getPage($action) { if ($this->bUseDB) { return $this->getPageDB($action); } else { return $this->getPageArray($action); } } /** * Returns the page mapped to the (action, groupName) pair. (uses the db) * * @param string the action to lookup pages for * @return string the page to redirect to, or false if the user doesn't have access to the page */ function getPageDB($action) { global $default, $lang_err_database; $sql = $default->db; // lookup the page and access_id from the sitemap if ($sql->query(array("SELECT page, access_id FROM $default->sitemap_table WHERE action = ?", $action))) {/*ok*/ if ($sql->next_record()) { // check permissions
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?