<?php
/**
* OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
* all the essential functionalities required for any enterprise.
* Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
*
* OrangeHRM is free software; you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* OrangeHRM 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA
*
*
*/
require_once ROOT_PATH . '/lib/models/hrfunct/EmpRepTo.php';
require_once ROOT_PATH . '/lib/models/hrfunct/EmpInfo.php';
require_once ROOT_PATH . '/lib/models/eimadmin/JobTitle.php';
require_once ROOT_PATH . '/lib/models/eimadmin/ProjectAdminGateway.php';
/**
* Assigns roles at login tells the rest
* of the world if authorized.
*
*/
class authorize {
/**
* Class constants
*
*/
public $roleAdmin = "Admin";
public $roleSupervisor = "Supervisor";
public $roleESS = "ESS";
public $roleProjectAdmin = "ProjectAdmin";
public $roleManager = "Manager";
public $roleDirector = "Director";
public $roleAcceptor = "Acceptor";
public $roleOfferer = "Offerer";
const AUTHORIZE_ROLE_ADMIN = 'Admin';
const AUTHORIZE_ROLE_SUPERVISOR = 'Supervisor';
const AUTHORIZE_ROLE_ESS = 'ESS';
const AUTHORIZE_ROLE_PROJECT_ADMIN = "ProjectAdmin";
const AUTHORIZE_ROLE_MANAGER = 'Manager';
const AUTHORIZE_ROLE_DIRECTOR = 'Director';
const YES = 'Yes';
const NO = 'No';
/**
* class atributes
*
*/
private $employeeID;
private $isAdmin;
private $roles;
public function setEmployeeId($employeeId) {
$this->employeeID = $employeeId;
}
public function getEmployeeId() {
return $this->employeeID;
}
public function setIsAdmin($isAdmin) {
$this->isAdmin = $isAdmin;
}
public function getIsAdmin() {
return $this->isAdmin;
}
public function setRoles($roles) {
$this->roles = $roles;
}
public function getRoles() {
return $this->roles;
}
/**
* Class contructor
*
* @param String $employeeId
* @param String $isAdmin
*/
public function __construct($employeeId, $isAdmin) {
$this->setEmployeeId($employeeId);
$this->setIsAdmin($isAdmin);
$this->setRoles($this->_roles());
}
/**
* Constructs roles
*
* @return boolean[]
*/
private function _roles() {
$roles = null;
$isAdmin = $this->getIsAdmin();
$empId = $this->getEmployeeId();
if ($isAdmin === authorize::YES) {
$roles[$this->roleAdmin] = true;
} else {
$roles[$this->roleAdmin] = false;
}
$roles[$this->roleSupervisor] = $this->_checkIsSupervisor();
$roles[$this->roleProjectAdmin] = $this->_checkIsProjectAdmin();
$roles[$this->roleManager] = $this->_checkIsManager();
$roles[$this->roleDirector] = $this->_checkIsDirector();
$roles[$this->roleAcceptor] = $this->_checkIsAcceptor();
$roles[$this->roleOfferer] = $this->_checkIsOfferer();
if (!empty($empId)) {
$roles[$this->roleESS] = true;
} else {
$roles[$this->roleESS] = false;
}
return $roles;
}
/**
* Check whether there are any subordinates
*
* @return boolean
*/
private function _checkIsSupervisor() {
$id = $this->getEmployeeId();
$objReportTo = new EmpRepTo();
$subordinates = $objReportTo->getEmpSub($id);
if (isset($subordinates[0]) && is_array($subordinates[0])) {
return true;
}
return false;
}
/**
* Check whether the user is a project admin
*
* @param int $projectId Project for which to check. If not given, all projects are checked.
* @return boolean
*/
private function _checkIsProjectAdmin($projectId = null) {
$projectAdmin = false;
$id = $this->getEmployeeId();
if (!empty($id)) {
$gw = new ProjectAdminGateway();
$projectAdmin = $gw->isAdmin($id, $projectId);
}
return $projectAdmin;
}
/**
* Check whether the user is a Manager
*
* @return boolean
*/
private function _checkIsManager() {
$isManager = false;
$id = $this->getEmployeeId();
if (!empty($id)) {
$empInfo = new EmpInfo();
$isManager = $empInfo->isManager($id);
}
return $isManager;
}
/**
* Check whether the user is a Director
*
* @return boolean True if a director, false otherwise
*/
private function _checkIsDirector() {
$isDirector = false;
$id = $this->getEmployeeId();
if (!empty($id)) {
$empInfo = new EmpInfo();
$isDirector = $empInfo->isDirector($id);
}
return $isDirector;
}
/**
* Check whether the user is an Acceptor that can approve job offers
*
* @return boolean True if an acceptor, false otherwise
*/
private function _checkIsAcceptor() {
$isAcceptor = false;
$id = $this->getEmployeeId();
if (!empty($id)) {
$empInfo = new EmpInfo();
$isAcceptor = $empInfo->isAcceptor($id);
}
return $isAcceptor;
}
/**
* Check whether the user is an Offerer that can approve job offers
*
* @return boolean True if an offerer, false otherwise
*/
private function _checkIsOfferer() {
$isOfferer = false;
$id = $this->getEmployeeId();
if (!empty($id)) {
$empInfo = new EmpInfo();
$isOfferer = $empInfo->isOfferer($id);
}
return $isOfferer;
}
/**
* Checks whether an admin
*
* @return boolean
*/
public function isAdmin() {
return $this->_chkRole($this->roleAdmin);
}
/**
* Checks whether an supervisor
*
* @return boolean
*/
public function isSupervisor() {
return $this->_chkRole($this->roleSupervisor);
}
/**
* Checks whether a project admin
*
* @return boolean true if a project admin. False otherwise
*/
public function isProjectAdmin() {
return $this->_chkRole($this->roleProjectAdmin);
}
/**
* Checks whether a Manager
*
* @return boolean true if a Manager. False otherwise
*/
public function isManager() {
return $this->_chkRole($this->roleManager);
}
/**
* Checks whether a Director
*
* @return boolean true if a Director. False otherwise
*/
public function isDirector() {
return $this->_chkRole($this->roleDirector);
}
/**
* Checks whether an Acceptor
*
* @return boolean true if an Acceptor. False otherwise
*/
public function isAcceptor() {
return $this->_chkRole($this->roleAcceptor);
}
/**
* Checks whether an Offerer
*
* @return boolean true if an Offerer. False otherwise
*/
public function isOfferer() {
return $this->_chkRole($this->roleOfferer);
}
/**
* Checks whether an ESS
*
* @return boolean
*/
public function isESS() {
return $this->_chkRole($this->roleESS);
}
/**
* Checks whether the particular employee is
* the supervisor of the subordinate concerned
*
* @param unknown_type $subordinateId
* @return boolean
*/
public function isTheSupervisor($subordinateId) {
$id = $this->getEmployeeId();
$objReportTo = new EmpRepTo();
$subordinates = $objReportTo->getEmpSub($id);
for ($i=0; $i < count($subordinates); $i++) {
if (isset($subordinates[$i]) && is_array($subordinates[$i]) && ($subordinateId == $subordinates[$i][1])) {
return true;
}
}
return false;
}
/**
* Checks whether employee is a project admin of the
* given project.
*
* @param int $projectId The project id
* @return bool true if a project admin, false otherwise
*/
public function isProjectAdminOf($projectId) {
return $this->_checkIsProjectAdmin($projectId);
}
/**
* Test whether element at pos of the array is equal to match
*
* @param Array array
* @param String match
* @param int pos
*/
private function searchArray($array, $match, $pos) {
if ($array[$pos] == $match) {
return true;
}
return false;
}
/**
* Delegates all checks for all is<Role>
* functions
*
* @param String $role
* @return boolean
*/
private function _chkRole($role) {
$roles = $this->getRoles();
if (isset($roles[$role]) && $roles[$role]) {
return true;
}
return false;
}
/**
* Returns the first role out of the array of
* roles sent
*
* @param String[] $roleArr
* @return String/boolean
*/
public function firstRole($roleArr) {
for ($i=0; $i<count($roleArr); $i++) {
if ($this->_chkRole($roleArr[$i])){
return $roleArr[$i];
}
}
return false;
}
public function isActionPermitted($action) {
$permitted = false;
switch ($action) {
case 'TCP' : if (!$this->isAdmin() && !$this->isSupervisor()) {
$permitted = false;
} else {
$permitted = true;
}
break;
case 'CST' : if (!$this->isAdmin() && !$this->isSupervisor()) {
$permitted = false;
} else {
$permitted = true;
}
break;
case 'PAC' : if (!$this->isAdmin() && !$this->isProjectAdmin()) {
$permitted = false;
} else {
$permitted = true;
}
break;
default : if ($this->isAdmin()) {
$permitted = true;
} else {
$permitted = false;
}
break;
}
return $permitted;
}
}
?>