Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
CRAP | |
0.00% |
0 / 153 |
RoleService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
1482.00 | |
0.00% |
0 / 147 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
createRole | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 25 |
|||
updateRole | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
deleteRole | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 20 |
|||
getAllActiveRoles | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
getRole | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
|||
getUserRoles | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
getRolesAccordingToRoleType | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
|||
getRoleByCode | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
<?php | |
namespace com\linways\core\ams\professional\service; | |
use com\linways\base\exception\CoreException; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\common\api\exception\CommonApiException; | |
use com\linways\core\ams\professional\constant\SettingsConstants; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\mapper\RoleServiceMapper; | |
use com\linways\core\ams\professional\request\CreateRoleRequest; | |
use com\linways\core\ams\professional\request\DeleteRoleRequest; | |
use com\linways\core\ams\professional\request\DeleteUserRolesByRoleRequest; | |
use com\linways\core\ams\professional\request\UpdateRoleRequest; | |
/** | |
* | |
* @Date 30/07/20 | |
* @author JithinVijayan <jithin@linways.com> | |
*/ | |
class RoleService extends BaseService | |
{ | |
/** | |
* @var null | |
*/ | |
private static $_instance = null; | |
/** | |
* @var array | |
*/ | |
private $mapper = []; | |
/** | |
* RoleService constructor. | |
*/ | |
private function __construct() | |
{ | |
$this->mapper = RoleServiceMapper::getInstance()->getMapper(); | |
} | |
// ROLE CONST | |
const ROLE_FACULTY = "FACULTY_DEFAULT"; | |
const ROLE_STUDENTS = "STUDENT_DEFAULT"; | |
const ROLE_PARENT = "PARENT_DEFAULT"; | |
// USER TYPES | |
const USER_TYPE_STUDENT = "STUDENT"; | |
const USER_TYPE_STAFF = "STAFF"; | |
const USER_TYPE_PARENT = "PARENT"; | |
/** | |
* Preventing cloning | |
*/ | |
private function __clone() | |
{ | |
} | |
/** | |
* @return RoleService|null | |
*/ | |
public static function getInstance() | |
{ | |
if (!is_object(self::$_instance)) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
/** | |
* @param CreateRoleRequest $request | |
* @return Object|integer | |
* @throws ProfessionalException | |
*/ | |
public function createRole(CreateRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->name)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_NAME, "Invalid role name"); | |
} | |
if (empty($request->code)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_CODE, "Invalid role code"); | |
} | |
if (empty($request->properties)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_CODE, "Invalid role properties"); | |
} | |
$request->properties->haveDepartmentRestriction = $request->properties->haveDepartmentRestriction === "1" ? true : false; | |
$properties = !empty($request->properties) ? "'".json_encode($request->properties)."'" : "NULL"; | |
$sql = "INSERT INTO roles (name, code, userType, description, dynamic_modules_id, properties, created_by, created_date, updated_by, updated_date) | |
VALUES ('$request->name','$request->code', '$request->userType', '$request->description',".($request->dynamicModuleId?"'$request->dynamicModuleId'":'null').", $properties,$request->createdBy,UTC_TIMESTAMP(), | |
$request->updatedBy,UTC_TIMESTAMP())"; | |
try { | |
return $this->executeQueryForObject($sql, true); | |
} catch (\Exception $e) { | |
if ($e->getCode() === CoreException::DUPLICATE_ENTRY) { | |
throw new ProfessionalException($e->getCode(), "This role has been taken. Please try another one"); | |
} | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param UpdateRoleRequest $request | |
* @throws ProfessionalException | |
*/ | |
public function updateRole(UpdateRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->id)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid role details given"); | |
} | |
if (empty($request->name)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_NAME, "Invalid role name"); | |
} | |
// Once role was generated, it cannot be change because role code will be stored in cache so changing role code | |
// if (empty($request->code)) { | |
// throw new ProfessionalException(ProfessionalException::INVALID_ROLE_CODE, "Invalid role code"); | |
// } | |
$sql = "UPDATE roles | |
SET name='$request->name', description='$request->description', userType='$request->userType', | |
updated_by='$request->updatedBy', updated_date=UTC_TIMESTAMP() | |
WHERE id = $request->id"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param DeleteRoleRequest $request | |
* @throws ProfessionalException | |
*/ | |
public function deleteRole(DeleteRoleRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
if (empty($request->id)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid role details given"); | |
} | |
$sql = "DELETE FROM roles WHERE id = $request->id"; | |
try { | |
$deleteRequest = new DeleteUserRolesByRoleRequest(); | |
$deleteRequest->roleId = $request->id; | |
$deleteRequest->createdBy = $request->createdBy; | |
$deleteRequest->updatedBy = $request->updatedBy; | |
$this->beginTransaction(); | |
UserRoleService::getInstance()->deleteUserRolesByRoleId($deleteRequest); | |
$this->executeQuery($sql); | |
$this->commit(); | |
} catch (\Exception $e) { | |
$this->rollBack(); | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @return Object | |
* @throws ProfessionalException | |
*/ | |
public function getAllActiveRoles() | |
{ | |
try { | |
global $GLOBALS; | |
$sql = "SELECT id,name,userType,code,description FROM roles WHERE is_active =1 "; | |
if($GLOBALS['dynamicModuleId']){ | |
$sql .=" AND dynamic_modules_id='".$GLOBALS['dynamicModuleId']."' "; | |
} | |
else{ | |
$sql .="AND dynamic_modules_id is null"; | |
} | |
$roles = $this->executeQueryForList($sql, $this->mapper[RoleServiceMapper::GET_ACTIVE_ROLES]); | |
$defaultRoles = json_decode(CommonService::getInstance()->getSettings(SettingsConstants::V4_PRODUCT_CONFIGURATION, SettingsConstants::V4_DEFINED_ROLES)); | |
$d = array_map(function($r) {return $r->const;},$defaultRoles); | |
foreach ($roles as $key => $role) { | |
$role->isDefaultRole = in_array($role->code, $d) ? true : false; | |
} | |
return $roles; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param $roleId | |
* @return Object | |
* @throws ProfessionalException | |
*/ | |
public function getRole($roleId) | |
{ | |
$roleId = (int)$this->realEscapeString($roleId); | |
if (empty($roleId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid role details given"); | |
} | |
$sql = "SELECT id,code,name,description FROM roles WHERE id =$roleId"; | |
try { | |
return $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param INT $userId | |
* @param String $userType | |
* @return Object | |
* @throws ProfessionalException | |
*/ | |
public function getUserRoles($userId,$userType){ | |
$userId = (int)$this->realEscapeString($userId); | |
$userType = $this->realEscapeString($userType); | |
if (empty($userId)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_ID, "Invalid user details given"); | |
} | |
if (empty($userType)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_USER_TYPE, "Invalid user details given"); | |
} | |
$sql = "SELECT r.id,r.code,r.name,r.description FROM roles r | |
INNER JOIN user_account_roles uar ON uar.role_id = r.id | |
WHERE uar.user_id = '$userId' AND uar.user_type = '$userType' | |
GROUP BY r.id;"; | |
try { | |
return $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param Array $roleTypes | |
* @return Object | |
* @throws ProfessionalException | |
*/ | |
public function getRolesAccordingToRoleType($roleTypes){ | |
$roleTypes = $this->realEscapeArray($roleTypes); | |
if (empty($roleTypes)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_TYPES, "Invalid role details given"); | |
} | |
$sql = "SELECT r.id,r.code,r.name,r.description FROM roles r | |
WHERE r.userType IN ('".implode("','",$roleTypes)."');"; | |
try { | |
return $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* @param $roleId | |
* @return Object | |
* @throws ProfessionalException | |
*/ | |
public function getRoleByCode($code) | |
{ | |
$code = $this->realEscapeString($code); | |
if (empty($code)) { | |
throw new ProfessionalException(ProfessionalException::INVALID_ROLE_ID, "Invalid code details given"); | |
} | |
$sql = "SELECT id,code,name,description FROM roles WHERE code = '$code';"; | |
try { | |
return $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} |