1<?php 2 3/** 4 * OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures 5 * all the essential functionalities required for any enterprise. 6 * Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com 7 * 8 * OrangeHRM is free software; you can redistribute it and/or modify it under the terms of 9 * the GNU General Public License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 * See the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License along with this program; 17 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA 19 */ 20 21/** 22 * Description of UserRoleInterface 23 * 24 * @author Chameera Senarathna 25 */ 26abstract class AbstractUserRole { 27 28 protected $employeeService; 29 protected $systemUserService; 30 protected $operationalCountryService; 31 protected $locationService; 32 protected $projectService; 33 protected $vacancyService; 34 35 protected $userRoleManager; 36 37 protected $employeeNumber; 38 39 protected $roleName; 40 41 public function __construct($roleName, $userRoleManager) { 42 $this->userRoleManager = $userRoleManager; 43 $this->roleName = $roleName; 44 } 45 46 public function getEmployeeNumber() { 47 if(empty($this->employeeNumber)) { 48 $this->employeeNumber = sfContext::getInstance()->getUser()->getEmployeeNumber(); 49 } 50 return $this->employeeNumber; 51 } 52 53 public function setEmployeeNumber($employeeNumber) { 54 $this->employeeNumber = $employeeNumber; 55 } 56 57 public function getSystemUserService() { 58 if (empty($this->systemUserService)) { 59 $this->systemUserService = new SystemUserService(); 60 } 61 return $this->systemUserService; 62 } 63 64 public function setSystemUserService($systemUserService) { 65 $this->systemUserService = $systemUserService; 66 } 67 68 public function getEmployeeService() { 69 70 if (empty($this->employeeService)) { 71 $this->employeeService = new EmployeeService(); 72 } 73 return $this->employeeService; 74 } 75 76 public function setEmployeeService($employeeService) { 77 $this->employeeService = $employeeService; 78 } 79 80 public function getLocationService() { 81 if (empty($this->locationService)) { 82 $this->locationService = new LocationService(); 83 } 84 return $this->locationService; 85 } 86 87 public function setLocationService($locationService) { 88 $this->locationService = $locationService; 89 } 90 91 public function getOperationalCountryService() { 92 if (empty($this->operationalCountryService)) { 93 $this->operationalCountryService = new OperationalCountryService(); 94 } 95 return $this->operationalCountryService; 96 } 97 98 public function setOperationalCountryService($operationalCountryService) { 99 $this->operationalCountryService = $operationalCountryService; 100 } 101 102 /** 103 * Get the Project Data Access Object 104 * @return ProjectService 105 */ 106 public function getProjectService() { 107 if (is_null($this->projectService)) { 108 $this->projectService = new ProjectService(); 109 } 110 return $this->projectService; 111 } 112 113 /** 114 * Set Project Service Access Object 115 * @param ProjectService $projectService 116 * @return void 117 */ 118 public function setProjectService(ProjectService $projectService) { 119 $this->projectService = $projectService; 120 } 121 122 /** 123 * Get VacancyService 124 * @return VacancyService 125 */ 126 public function getVacancyService() { 127 if (is_null($this->vacancyService)) { 128 $this->vacancyService = new VacancyService(); 129 } 130 return $this->vacancyService; 131 } 132 133 /** 134 * Set Vacancy Service 135 * @param VacancyService $vacancyService 136 */ 137 public function setVacancyService(VacancyService $vacancyService) { 138 $this->vacancyService = $vacancyService; 139 } 140 141 142 public function getAccessibleEntities($entityType, $operation = null, $returnType = null, $requiredPermissions = array()) { 143 144 $permitted = $this->areRequiredPermissionsAvailable($requiredPermissions); 145 146 if ($permitted) { 147 switch ($entityType) { 148 case 'Employee': 149 $entities = $this->getAccessibleEmployees($operation, $returnType, $requiredPermissions); 150 break; 151 case 'Project': 152 $entities = $this->getAccessibleProjects($operation, $returnType, $requiredPermissions); 153 break; 154 case 'Vacancy': 155 $entities = $this->getAccessibleVacancies($operation, $returnType, $requiredPermissions); 156 break; 157 158 } 159 } else { 160 $entities = array(); 161 } 162 return $entities; 163 } 164 165 public function getAccessibleEntityProperties($entityType, $properties = array(), $orderField = null, $orderBy = null, $requiredPermissions = array()) { 166 167 $permitted = $this->areRequiredPermissionsAvailable($requiredPermissions); 168 if ($permitted) { 169 switch ($entityType) { 170 case 'Employee': 171 $propertyList = $this->getAccessibleEmployeePropertyList($properties, $orderField, $orderBy, $requiredPermissions); 172 break; 173 } 174 } else { 175 $propertyList = array(); 176 } 177 return $propertyList; 178 } 179 180 public function getAccessibleEntityIds($entityType, $operation = null, $returnType = null, $requiredPermissions = array()) { 181 182 $permitted = $this->areRequiredPermissionsAvailable($requiredPermissions); 183 if ($permitted) { 184 switch ($entityType) { 185 case 'Employee': 186 $ids = $this->getAccessibleEmployeeIds($operation, $returnType, $requiredPermissions); 187 break; 188 case 'SystemUser': 189 $ids = $this->getAccessibleSystemUserIds($operation, $returnType, $requiredPermissions); 190 break; 191 case 'OperationalCountry': 192 $ids = $this->getAccessibleOperationalCountryIds($operation, $returnType, $requiredPermissions); 193 break; 194 case 'UserRole': 195 $ids = $this->getAccessibleUserRoleIds($operation, $returnType, $requiredPermissions); 196 break; 197 case 'Location': 198 $ids = $this->getAccessibleLocationIds($operation, $returnType, $requiredPermissions); 199 break; 200 case 'Project': 201 $ids = $this->getAccessibleProjectIds($operation, $returnType, $requiredPermissions); 202 break; 203 case 'Vacancy': 204 $ids = $this->getAccessibleVacancyIds($operation, $returnType, $requiredPermissions); 205 break; 206 } 207 } else { 208 $ids = array(); 209 } 210 return $ids; 211 } 212 213 public function getEmployeesWithRole($entities = array()) { 214 return array(); 215 } 216 217 public function getAccessibleProjects($operation = null, $returnType = null, $requiredPermissions = array()) { 218 return array(); 219 } 220 221 public function getAccessibleProjectIds($operation = null, $returnType = null, $requiredPermissions = array()) { 222 return array(); 223 } 224 225 public function getAccessibleVacancies($operation = null, $returnType = null, $requiredPermissions = array()) { 226 return array(); 227 } 228 229 public function getAccessibleVacancyIds($operation = null, $returnType = null, $requiredPermissions = array()) { 230 return array(); 231 } 232 233 public abstract function getAccessibleEmployees($operation = null, $returnType = null, $requiredPermissions = array()); 234 235 public abstract function getAccessibleEmployeePropertyList($properties, $orderField, $orderBy, $requiredPermissions = array()); 236 237 public abstract function getAccessibleEmployeeIds($operation = null, $returnType = null, $requiredPermissions = array()); 238 239 public abstract function getAccessibleSystemUserIds($operation = null, $returnType = null, $requiredPermissions = array()); 240 241 public abstract function getAccessibleOperationalCountryIds($operation = null, $returnType = null, $requiredPermissions = array()); 242 243 public abstract function getAccessibleUserRoleIds($operation = null, $returnType = null, $requiredPermissions = array()); 244 245 public abstract function getAccessibleLocationIds($operation = null, $returnType = null, $requiredPermissions = array()); 246 247 protected function areRequiredPermissionsAvailable($requiredPermissions = array()) { 248 $permitted = true; 249 250 foreach ($requiredPermissions as $permissionType => $permissions) { 251 if ($permissionType == BasicUserRoleManager::PERMISSION_TYPE_DATA_GROUP) { 252 foreach ($permissions as $dataGroupName => $requestedResourcePermission) { 253 $dataGroupPermissions = $this->userRoleManager->getDataGroupPermissions($dataGroupName, array(), array($this->roleName)); 254 255 if ($permitted && $requestedResourcePermission->canRead()) { 256 $permitted = $permitted && $dataGroupPermissions->canRead(); 257 } 258 259 if ($permitted && $requestedResourcePermission->canCreate()) { 260 $permitted = $dataGroupPermissions->canCreate(); 261 } 262 263 if ($permitted && $requestedResourcePermission->canUpdate()) { 264 $permitted = $dataGroupPermissions->canUpdate(); 265 } 266 267 if ($permitted && $requestedResourcePermission->canDelete()) { 268 $permitted = $dataGroupPermissions->canDelete(); 269 } 270 } 271 } else if ($permissionType == BasicUserRoleManager::PERMISSION_TYPE_ACTION) { 272 $permitted = true; 273 } 274 } 275 276 return $permitted; 277 } 278 279}