Commit 1fff13ce5afe5d56a6955f156856c613fb215bbf

Authored by Michael Joseph
1 parent 77cbe551

updated phpdocs

added getSectionLinks and getSectionName methods


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@374 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 95 additions and 42 deletions
lib/SiteMap.inc
1 <?php 1 <?php
  2 +
  3 +require_once("$default->owl_fs_root/lib/security/permission.inc");
  4 +
2 /** 5 /**
3 * $Id$ 6 * $Id$
4 * 7 *
5 * Maintains (page, access) access map, as well as (section, page) map. 8 * Maintains (page, access) access map, as well as (section, page) map.
6 * 9 *
7 * @version $Revision$ 10 * @version $Revision$
8 - * @author michael@jamwarehouse.com  
9 - * @package dms 11 + * @author Michael Joseph <michael@jamwarehouse.com>, Jam Warehouse (Pty) Ltd, South Africa
  12 + * @package lib.session
10 */ 13 */
11 class SiteMap { 14 class SiteMap {
12 15
@@ -25,10 +28,10 @@ class SiteMap { @@ -25,10 +28,10 @@ class SiteMap {
25 /** 28 /**
26 * Adds a site page mapping entry. 29 * Adds a site page mapping entry.
27 * 30 *
28 - * @param $action the controller action  
29 - * @param $page the corresponding page for this action  
30 - * @param $sectionName the section this page falls under  
31 - * @param $groupName the user group with access to this page 31 + * @param string the controller action
  32 + * @param string the corresponding page for this action
  33 + * @param string the section this page falls under
  34 + * @param string the user group with access to this page
32 */ 35 */
33 function addPage($action, $page, $sectionName, $groupName) { 36 function addPage($action, $page, $sectionName, $groupName) {
34 // add to map 37 // add to map
@@ -36,53 +39,104 @@ class SiteMap { @@ -36,53 +39,104 @@ class SiteMap {
36 } 39 }
37 40
38 /** 41 /**
  42 + * Adds a site page mapping entry- the default page for the section.
  43 + *
  44 + * @param string the controller action
  45 + * @param string the corresponding page for this action
  46 + * @param string the section this page falls under
  47 + * @param string the user group with access to this page
  48 + */
  49 + function addDefaultPage($action, $page, $sectionName, $groupName) {
  50 + }
  51 +
  52 + /**
  53 + * Returns the section name of the supplied page
  54 + *
  55 + * @param string the page to lookup the section for
  56 + */
  57 + function getSectionName($sRequiredPage) {
  58 + global $default;
  59 + // for each section
  60 + foreach ($this->siteMapArray as $section => $valArr) {
  61 + $default->log->debug("Sitemap::getSectionName section=$section; arr=" . arrayToString($valArr));
  62 + // for each group, page array combination
  63 + foreach ($valArr as $requiredGroupName => $pageArr) {
  64 + $default->log->debug("Sitemap::getSectionName ($requiredGroupName, " . arrayToString($pageArr) . ")");
  65 + // now loop through pages until we find the right one
  66 + foreach ($pageArr as $action => $page) {
  67 + $default->log->debug("Sitemap::getSectionName ($sRequiredPage == $page)");
  68 + if ($sRequiredPage == $page) {
  69 + return $section;
  70 + }
  71 + }
  72 + }
  73 + }
  74 + }
  75 +
  76 + /**
  77 + * Returns controller links for a section
  78 + *
  79 + * @param string the section to return links for
  80 + */
  81 + function getSectionLinks($sSectionName) {
  82 + global $default;
  83 + // check if the section exists
  84 + if (is_array($this->siteMapArray[$sSectionName])) {
  85 + // initialise result array
  86 + $results = array();
  87 + // need to loop through all (groupName, page) arrays in this section
  88 + foreach ($this->siteMapArray[$sSectionName] as $requiredGroupName => $pages) {
  89 + $default->log->debug("Sitemap::getSectionLinks: requiredGroup=$requiredGroupName, pages=" . arrayToString($pages));
  90 + // if anonymous
  91 + // or the user is in the required group or the user is the SA
  92 + if ( ($requiredGroupName == "Anonymous") ||
  93 + ( Permission::userIsInGroupName($requiredGroupName) ||
  94 + Permission::userIsInGroupName("System Administrators") ) ) {
  95 + // add this array to the resultset array
  96 + $default->log->debug("Sitemap::getSectionLinks: about to add " . arrayToString($pages));
  97 + //$results = array_merge($results, $this->siteMapArray[$sectionName][$requiredGroupName]);
  98 + $results = array_merge($results, $pages);
  99 + }
  100 + }
  101 + // now check if we have anything in the results array before returning it
  102 + if (count($results) > 0) {
  103 + return $results;
  104 + } else {
  105 + return false;
  106 + }
  107 + } else {
  108 + $_SESSION["errorMessage"] = "No such section name ($sSectionName) in the sitemap";
  109 + return false;
  110 + }
  111 + }
  112 +
  113 + /**
39 * Returns the page mapped to the (action, groupName) pair. 114 * Returns the page mapped to the (action, groupName) pair.
40 * 115 *
41 - * @param $action the action to lookup pages for  
42 - * @param $userID the user requesting the action 116 + * @param string the action to lookup pages for
43 * @return string the page to redirect to, or false if the user doesn't have access to the page 117 * @return string the page to redirect to, or false if the user doesn't have access to the page
44 */ 118 */
45 - function getPage($action, $userID) { 119 + function getPage($action) {
46 global $default; 120 global $default;
47 121
  122 + $default->log->info("SiteMap::getPage: checking ($action, " . $_SESSION["userID"] . ")");
48 $groupIDs = array(); 123 $groupIDs = array();
49 124
50 - // if there is no session (ie. requesting login page)  
51 - // then userID will be "" or unset or something  
52 - if (!$userID) {  
53 - // no session, so set groupID to Anonymous group  
54 - $groupIDs[] = lookupID($default->owl_groups_table, "name", "Anonymous");  
55 - } else {  
56 - // lookup the groups this user is in  
57 - $groupIDs = lookupGroupIDs($userID);  
58 - }  
59 -  
60 - $default->log->debug("Sitemap::getPage function start; action=$action; userID=$userID; groupIDs=" . arrayToString($groupIDs));  
61 -  
62 // for each section 125 // for each section
63 foreach ($this->siteMapArray as $section => $valArr) { 126 foreach ($this->siteMapArray as $section => $valArr) {
64 $default->log->debug("Sitemap::getPage section=$section"); 127 $default->log->debug("Sitemap::getPage section=$section");
65 // for each group, page array combination 128 // for each group, page array combination
66 foreach ($valArr as $requiredGroupName => $pageArr) { 129 foreach ($valArr as $requiredGroupName => $pageArr) {
67 - // lookup the id of the group with access to this page  
68 - $reqGrpID = lookupID($default->owl_groups_table, "name", "$requiredGroupName");  
69 - $default->log->debug("Sitemap::getPage requiredGroupName=$requiredGroupName; id=$reqGrpID");  
70 // now loop through pages until we find the right one 130 // now loop through pages until we find the right one
71 foreach ($pageArr as $ackshin => $page) { 131 foreach ($pageArr as $ackshin => $page) {
72 if ($ackshin == $action) { 132 if ($ackshin == $action) {
73 - // FIXME: this won't work once we have lots of groups will it??  
74 - // we're assuming that the default groups will be created in the right  
75 - // order, so that groups with sys and unit access have lower ids than  
76 - // the required ones!  
77 -  
78 - // now check if we have the right group access by  
79 - // looping through the groupID array and returning the page  
80 - // if the current groupID <= $reqGrpID  
81 - for ($i = 0; $i<count($groupIDs); $i++) {  
82 - $default->log->debug("Sitemap::getPage current groupid=" . $groupIDs[$i] . "; reqGrpID=$reqGrpID");  
83 - if ($groupIDs[$i] <= $reqGrpID) {  
84 - return $page;  
85 - } 133 + $default->log->debug("Sitemap::getPage current requiredGroup=$requiredGroupName, action=$ackshin");
  134 + // if anonymous
  135 + // or the user is in the required group or the user is the SA
  136 + if ( ($requiredGroupName == "Anonymous") ||
  137 + ( Permission::userIsInGroupName($requiredGroupName) ||
  138 + Permission::userIsInGroupName("System Administrators") ) ) {
  139 + return $page;
86 } 140 }
87 } 141 }
88 } 142 }
@@ -90,7 +144,7 @@ class SiteMap { @@ -90,7 +144,7 @@ class SiteMap {
90 } 144 }
91 // if the function hasn't returned already then the specified 145 // if the function hasn't returned already then the specified
92 // userGroup does not have access to the action 146 // userGroup does not have access to the action
93 - $default->log->info("Sitemap::getPage access denied for ($action, $userID)"); 147 + $default->log->info("Sitemap::getPage: access denied for ($action, " . $_SESSION["userID"] . ")");
94 return false; 148 return false;
95 } 149 }
96 150
@@ -98,11 +152,10 @@ class SiteMap { @@ -98,11 +152,10 @@ class SiteMap {
98 * Returns the pages in the specified section accessible to the 152 * Returns the pages in the specified section accessible to the
99 * specified userClass. 153 * specified userClass.
100 * 154 *
101 - * @param $sectionName the section to retrieve pages for  
102 - * @param $userID the user class to return pages for 155 + * @param string the section to retrieve pages for
103 * @return array the actions for the specified section 156 * @return array the actions for the specified section
104 */ 157 */
105 - function getSection($sectionName, $userID) { 158 + function getSection($sectionName) {
106 // check if the section exists 159 // check if the section exists
107 if (is_array($this->siteMapArray[$sectionName])) { 160 if (is_array($this->siteMapArray[$sectionName])) {
108 // initialise result array 161 // initialise result array
@@ -112,7 +165,7 @@ class SiteMap { @@ -112,7 +165,7 @@ class SiteMap {
112 // lookup groupID for requiredGroupName 165 // lookup groupID for requiredGroupName
113 $reqGrpID = lookupID($default->owl_groups_table, "name", "$requiredGroupName"); 166 $reqGrpID = lookupID($default->owl_groups_table, "name", "$requiredGroupName");
114 // lookup groupIDs for the user 167 // lookup groupIDs for the user
115 - $groupIDs = lookupGroupIDs($userID); 168 + $groupIDs = lookupGroupIDs($_SESSION["userID"]);
116 // loop through the user's groups and check against the requiredGroup 169 // loop through the user's groups and check against the requiredGroup
117 for ($i = 0; $i<count($groupIDs); $i++) { 170 for ($i = 0; $i<count($groupIDs); $i++) {
118 $default->log->debug("getPage current groupid=" . $groupIDs[$i] . "; reqGrpID=$reqGrpID"); 171 $default->log->debug("getPage current groupid=" . $groupIDs[$i] . "; reqGrpID=$reqGrpID");