Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
CRAP | |
0.00% |
0 / 155 |
MenuService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
992.00 | |
0.00% |
0 / 155 |
__construct | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
loadProductConfiguration | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 15 |
|||
getMenuConfigFromCache | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
setMenuConfigInCache | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
canShow | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 45 |
|||
getMenuItems | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 15 |
|||
getParentMenuItems | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 16 |
|||
getSubmenuItems | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 16 |
|||
getMenuCodeByMenuAction | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 17 |
|||
getExternalLinks | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
<?php | |
namespace com\linways\core\ams\professional\service; | |
use com\linways\base\cache\LinCache; | |
use com\linways\core\ams\professional\dto\constant\PackageType; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\constant\StudentExcludedMenu; | |
use com\linways\core\ams\professional\constant\StaffExcludedMenu; | |
use com\linways\core\ams\professional\constant\UserType; | |
class MenuService extends BaseService | |
{ | |
// /Condition 1 - Presence of a static member variable | |
private static $_instance = null; | |
private $packageType; | |
private $staffModuleMenus = []; | |
private $linCache = null; | |
// /Condition 2 - Locked down the constructor | |
private function __construct() | |
{ | |
$this->linCache = new LinCache(); | |
try { | |
$this->loadProductConfiguration(); | |
} catch (ProfessionalException $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
// Prevent any oustide instantiation of this class | |
// /Condition 3 - Prevent any object or instance of that class to be cloned | |
private function __clone() | |
{ | |
} | |
// Prevent any copy of this object | |
// /Condition 4 - Have a single globally accessible static method | |
public static function getInstance() | |
{ | |
if (!is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null ) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
/** | |
* load product package type configurations | |
* | |
* @param string $forceToLoad | |
* - set true to load confiuration again | |
* @throws ProfessionalException | |
*/ | |
public function loadProductConfiguration($forceToLoad = false) | |
{ | |
$packageConfig = CommonService::getInstance()->getActiveProductConfig(); | |
//Check package config already configured or not.if no throw exception | |
if (empty($packageConfig)) { | |
throw new ProfessionalException(ProfessionalException::ACTIVE_PRODUCT_CONFIG_NOT_FOUND, "Active product configuration not found."); | |
} else { | |
$this->packageType = $packageConfig->packageType; | |
//Load staffModuleMenus from cache | |
$this->staffModuleMenus = $this->getMenuConfigFromCache($packageConfig->packageType); | |
//If not loaded from memcache load again | |
if ($forceToLoad || empty($this->staffModuleMenus)) { | |
require_once DOCUMENT_ROOT . $packageConfig->menuConfigPath; | |
$this->staffModuleMenus = empty($staffModuleMenus) ? [] : $staffModuleMenus; | |
$this->packageType = $packageConfig->packageType; | |
$this->setMenuConfigInCache($this->packageType, $this->staffModuleMenus); | |
} | |
} | |
} | |
/** | |
* Load menu config from memcache if already set | |
* @param unknown $key | |
* @return NULL|unknown | |
*/ | |
public function getMenuConfigFromCache($key) | |
{ | |
return $this->linCache->getValue($key); | |
} | |
/** | |
* Set menu config in memcache | |
* @param unknown $key | |
* @param unknown $value | |
*/ | |
public function setMenuConfigInCache($key, $value) | |
{ | |
$this->linCache->setValue($key, $value); | |
} | |
/** | |
* Can show the current menu/action.This method return true or false depends on the package type . | |
* If the menu/action is not present in packageType (eg.lite) return false else true | |
* | |
* @param string $menu | |
* @return boolean | |
*/ | |
public function canShow($menu) | |
{ | |
$allMenus = $this->staffModuleMenus; | |
if($_SESSION['studentID'] && $_SESSION['deptID']){ | |
$StudentMenuReflectionClass = new StudentExcludedMenu(); | |
$excludedMenus = array_values($StudentMenuReflectionClass->getConstants()); | |
$allMenus = array_filter($this->staffModuleMenus, function($m) use ($excludedMenus){ | |
return !in_array($m,$excludedMenus); | |
}); | |
// $allMenus = array_map(function($m) use($excludedMenus){ | |
// return !in_array($m,$excludedMenus)?$m; | |
// },$this->staffModuleMenus); | |
// $allMenus = []; | |
// foreach ($this->staffModuleMenus as $key => $m) { | |
// if(!in_array($m,$excludedMenus)){ | |
// $allMenus [] = $m ; | |
// }else{ | |
// $a = $m ; | |
// } | |
// } | |
// $allMenus = array_diff($this->staffModuleMenus,$includeClusterIds); | |
// $allMenus = array_diff($this->allMenus,) | |
} | |
if($_SESSION['staffID'] && $_SESSION['deptID']){ | |
$staffMenuReflectionClass = new StaffExcludedMenu(); | |
$excludedMenus = array_values($staffMenuReflectionClass->getConstants()); | |
$allMenus = array_filter($this->staffModuleMenus, function($m) use ($excludedMenus){ | |
return !in_array($m,$excludedMenus); | |
}); | |
} | |
$staffLeaveManagementModules = [ | |
'PROFILE_LEAVE_MANGMNT', | |
'PROFILE_LEAVE_MANGMNT_DETAILS', | |
'PROFILE_LEAVE_MANGMNT_APPLY', | |
'PROFILE_LEAVE_MANGMNT_APPLIED_LEAVES', | |
'PROFILE_LEAVE_MANGMNT_RECOMMENDORAPPROVE', | |
'PROFILE_LEAVE_MANGMNT_RECOMMENDORAPPROVED', | |
'PROFILE_LEAVE_MANGMNT_BULK_APPROVE', | |
'PROFILE_LEAVE_MANGMNT_LEAVE_REPROT', | |
'PROFILE_LEAVE_MANGMNT_SHIFT_CHANGE_REQUEST', | |
'PROFILE_LEAVE_MANGMNT_PUNCH_TIME_REQUEST', | |
'PROFILE_LEAVE_MANGMNT_APPLIED_REQUEST', | |
'PROFILE_LEAVE_MANGMNT_RECOMMENDORAPPROVE_REQUEST', | |
'PROFILE_LEAVE_MANGMNT_RECOMMENDORAPPROVED_REQUEST', | |
'PROFILE_LEAVE_MANGMNT_MONTHLY_LEAVE_REPORT', | |
'PROFILE_MY_ATTENDANCE' | |
]; | |
$leaveReports = [ | |
'QUICK_REPORT_LEAVE_REPORT', | |
'QUICK_REPORT_ATTENDNACE', | |
'QUICK_REPORT_LEAVE_REPORT_APPLIED', | |
'CONSOLIDATED_LEAVE_REPORT', | |
'LEAVE_REPORT_BALANCE', | |
'LEAVE_REPORT_LOP', | |
'REQUEST_REPORT', | |
'QUICK_REPORT_CONSOLIDATED_LEAVE_REPORT' | |
]; | |
$allMenus = array_merge($allMenus, $staffLeaveManagementModules); | |
$allMenus = array_merge($allMenus, $leaveReports); | |
return in_array(strtoupper($menu), $allMenus); | |
// $canShow = false; | |
// // switch ($this->packageType) { | |
// // case PackageType::LITE : | |
// // $canShow = in_array ( strtoupper ( $menu ), $this->staffModuleMenus ); | |
// // break; | |
// // case PackageType::PROFESSIONAL : | |
// // // TO DO : menu visibility implementation | |
// // $canShow = true; | |
// // break; | |
// // case PackageType::ENTERPRISE : | |
// // // TO DO : menu visibility implementation | |
// // $canShow = true; | |
// // break; | |
// // default : | |
// // $canShow = true; | |
// // break; | |
// // } | |
// return $canShow; | |
} | |
/** | |
* Function to get side menu corresponds to admin, staff according to their typeId (DB Table - 'menu') | |
* @param Integer $menuId - specifies the type of menu ('Admin Menu', 'Staff Batch Menu', 'Staff Profile Menu', ... ) | |
* @return Array $menuItems | |
* @author Vishnu M | |
*/ | |
public function getMenuItems($menuId) | |
{ | |
$menuId = $this->realEscapeString($menuId); | |
$menuItems = []; | |
$sql = "SELECT id, display_name, code, parent_id, menu_id, is_active, order_no, url, auth_permissions, menu, actions, show_in_menu FROM menu_items WHERE menu_id = " . $menuId . " AND is_active = 1 ORDER BY order_no ASC"; | |
try { | |
$menus = $this->executeQueryForList($sql); | |
foreach ($menus as $menu) { | |
$menu->submenu = $this->getSubmenuItems($menu->id); | |
$menuItems[$menu->id] = $menu; | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $menuItems; | |
} | |
/** | |
* Function to get side menu corresponds to admin, staff according to their typeId (DB Table - 'menu') | |
* @param Integer $menuId - specifies the type of menu ('Admin Menu', 'Staff Batch Menu', 'Staff Profile Menu', ... ) | |
* @return Array $menuItems | |
* @throws ProfessionalException | |
* @author Vishnu M | |
*/ | |
public function getParentMenuItems($menuId) | |
{ | |
$menuId = $this->realEscapeString($menuId); | |
$menuItems = []; | |
$sql = "SELECT id, display_name, code, parent_id, menu_id, is_active, order_no, url, auth_permissions, menu, actions, show_in_menu | |
FROM menu_items WHERE menu_id = " . $menuId . " AND is_active = 1 AND parent_id IS NULL ORDER BY order_no ASC"; | |
try { | |
$menus = $this->executeQueryForList($sql); | |
foreach ($menus as $menu) { | |
$menu->submenu = $this->getSubmenuItems($menu->id); | |
$menuItems[$menu->id] = $menu; | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $menuItems; | |
} | |
public function getSubmenuItems($parentId) | |
{ | |
$parentId = $this->realEscapeString($parentId); | |
$menuItems = []; | |
$sql = "SELECT id, display_name, code, parent_id, menu_id, is_active, order_no, url, auth_permissions, menu, actions, show_in_menu | |
FROM menu_items WHERE is_active = 1 AND parent_id = " . $parentId . " ORDER BY order_no ASC"; | |
try { | |
$subMenus = $this->executeQueryForList($sql); | |
foreach ($subMenus as $submenu) { | |
$submenu->submenu = $this->getSubmenuItems($submenu->id); | |
$menuItems[$submenu->id] = $submenu; | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $menuItems; | |
} | |
public function getMenuCodeByMenuAction($menuId, $menu, $action = NULL) | |
{ | |
$menuCode = null; | |
$menu = $this->realEscapeString($menu); | |
$menuId = $this->realEscapeString($menuId); | |
$action = $this->realEscapeString($action); | |
try { | |
$sql = "SELECT code FROM menu_items WHERE menu_id = " . $menuId . " AND menu = '" . $menu . "' AND FIND_IN_SET ( '" . $action . "', actions )"; | |
$menuCode = $this->executeQueryForObject($sql)->code; | |
if (empty($menuCode)) { | |
$sql = "SELECT GROUP_CONCAT(code) as code FROM menu_items WHERE menu_id = " . $menuId . " AND menu = '" . $menu . "'"; | |
$menuCode = $this->executeQueryForObject($sql)->code; | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $menuCode; | |
} | |
/** | |
* Get label icon and url for external modules | |
* @return object $externalLinkItems | |
*/ | |
public function getExternalLinks($userType = UserType::STAFF) | |
{ | |
$query = "SELECT id,label,icon,url | |
from v4_external_links where userType = '$userType'"; | |
try { | |
$externalLinkItems = $this->executeQueryForList($query); | |
return $externalLinkItems; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} |