MENU_SELECT_PROCES_DATA = V::get('MENU_SELECT_PROCES_DATA', null, $_SESSION);// URL
$this->_user_id = User::getID();
if (User::isAdmin()) {
$this->_user_id = V::get('_user_id', 0, $_POST, 'int');
if (!$this->_user_id) {
$this->_user_id = User::getID();
}
}
$this->_acl = UsersHelper::getUserAcl($this->_user_id);
if (!$this->_acl) {
die('Error Acl');
}
// TODO: run only if needed
if ('1' == V::get('_CLEAN_CACHE', '', $_POST)) {
$this->_cleanTestsCache();
}
$this->_generateTestResults();
}
static function getInstance() {
static $_instance = null;
if (!$_instance) {
$_instance = new ProcesMenu();
}
return $_instance;
}
function show() {
static $_menu_showed = false;
if (!$_menu_showed) {
$actionName = V::get('_action', 'menu', $_REQUEST);
// podglad testów pracownika
if (User::isAdmin() && $this->_user_id != User::getID()) {
$actionName = 'showMyTests';
}
$actionName .= 'Action';
if (method_exists($this, $actionName)) {
$this->{$actionName}();
}
//$this->show_menu_with_process();
$_menu_showed = true;
}
}
/**
* @return Array
*/
function getUserTests() {
if ($this->_user_id <= 0) {
throw new Exception("User id not set");
}
$testy_arr = array();
$ses_cache_key = 'CRM_PROCES_USERA_WYKONANE_TESTY-' . $this->_user_id;
if (!$this->_isTestsInCache()) {
$usedProcesInitIds = $this->_acl->getUserProcesInitIds();
DBG::_('DBG_PM', '1', "usedProcesInitIds", $usedProcesInitIds, __CLASS__, __FUNCTION__, __LINE__ );
if (!empty($usedProcesInitIds)) {
$testy_arr = ProcesTestyHelper::get_tetsy_stats($this->_user_id, 0, $usedProcesInitIds);
// check if tests are actual - proces steps may change
if (!empty($testy_arr)) {
foreach ($usedProcesInitIds as $k_proces_id) {
$last_test = null;
foreach ($testy_arr as $k_ind => $v_test) {
if ($v_test->ID_PROCES_INIT == $k_proces_id) {
$last_test = $v_test;
$last_test->test_ind = $k_ind;
break;
}
}
if (!$last_test || $last_test->TEST_END == '0000-00-00') {
continue;
}
$max_update_date = $this->_acl->getProcesMaxUpdateDate($k_proces_id);
if ($max_update_date) {
$max_update_date = substr($max_update_date, 0, 10);
$test_end = substr($last_test->TEST_END, 0, 10);
DBG::_('DBG_PM', '1', "P_INIT({$k_proces_id}) max_update_date({$max_update_date}) TEST_END({$last_test->TEST_END}) not actual(" . ($max_update_date > $last_test->TEST_END) . ")", $last_test, __CLASS__, __FUNCTION__, __LINE__ );
if ($max_update_date > $test_end) {
$testy_arr[$last_test->test_ind]->unactual = $max_update_date;
$testy_arr[$last_test->test_ind]->unactualId = $last_test->ID;
}
}
}
}
}
$this->_setTestsCache($testy_arr);
}
return $this->_getTestsFromCache();
}
private function _cleanTestsCache() {
$ses_cache_key = "CRM_PROCES_USERA_WYKONANE_TESTY-{$this->_user_id}";
unset($_SESSION[$ses_cache_key]);
}
private function _isTestsInCache() {
$ses_cache_key = "CRM_PROCES_USERA_WYKONANE_TESTY-{$this->_user_id}";
return isset($_SESSION[$ses_cache_key]);
}
private function _getTestsFromCache() {
$ses_cache_key = "CRM_PROCES_USERA_WYKONANE_TESTY-{$this->_user_id}";
return $_SESSION[$ses_cache_key];
}
private function _setTestsCache($tests) {
$ses_cache_key = "CRM_PROCES_USERA_WYKONANE_TESTY-{$this->_user_id}";
$_SESSION[$ses_cache_key] = $tests;
}
function setError($error) {
$this->error[] = $error;
}
function ifError() {// TODO: RMME
if (!empty($this->error)) {
return true;
}
else {
DEBUG_S(-1,'Wydarzyły się błędy uniemożliwiające kontynuacje pracy modułu',$this->error,__FILE__,__FUNCTION__,__LINE__);
die();
return false;
}
}
function set_current_menu($new_menu) {
$this->MENU_SELECT_PROCES = $new_menu;
}
/**
* Set $_SESSION['MENU_SELECT_PROCES_DATA'] from $this->MENU_SELECT_PROCES_DATA
*/
function set_current_menu_data() {
$_SESSION['MENU_SELECT_PROCES_DATA'] = array();
foreach ($this->MENU_SELECT_PROCES_DATA as $k_ind => $v_arr) {
if (!empty($v_arr)) {
$_SESSION['MENU_SELECT_PROCES_DATA'][$k_ind] = $v_arr;
}
}
}
function showMyTestsAction() {
$this->menuAction();
$userAcl = User::getAcl();
$procesyInitGroup = $this->getUsedProcesInitGroupedList();
if (empty($procesyInitGroup)) {
echo '
' . "Brak przypisanych procesów." . '
';
return;
}
?>
sub as $proces_id => $proces_desc) : ?>
get_ocena_testu($proces_id, 'TEORETYCZNY');
$wynik_teoretyczny_value = $this->get_ocena_testu_value($proces_id, 'TEORETYCZNY');
if ($wynik_teoretyczny == 'BRAK_PYTAN') {
$wynik_teoretyczny_value = '';
}
$wynik_praktyczny = $this->get_ocena_testu($proces_id, 'PRAKTYCZNY');
$wynik_unactual = $this->isTestUnactual($proces_id, 'TEORETYCZNY');
?>
= 4) : $i = 0; ?>
_acl->getUserProcesInitList();
if (empty($procesyInitList)) {
return;
}
$sqlProcesyInitIds = implode(",", array_keys($procesyInitList));
$sql = "select p.`ID`, p.`PARENT_ID`, pp.`DESC` as pp__DESC
from `CRM_PROCES` as p
join `CRM_PROCES` as pp on(pp.`ID`=p.`PARENT_ID`)
where p.`ID` in({$sqlProcesyInitIds})
";
$groupedProcesyInit = array();
$db = DB::getDB();
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
if (!array_key_exists($r->PARENT_ID, $procesyInitGroup)) {
$procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>$r->PARENT_ID, 'label'=>$r->pp__DESC, 'sub'=>array());
}
$procesyInitGroup[$r->PARENT_ID]->sub[$r->ID] = $procesyInitList[$r->ID];
$groupedProcesyInit[] = $r->ID;
}
$ungroupedProcesyInit = array_diff(array_keys($procesyInitList), $groupedProcesyInit);
if (!empty($ungroupedProcesyInit)) {
$procesyInitGroup[$r->PARENT_ID] = (object)array('nr'=>null, 'label'=>"Pozostałe", 'sub'=>array());
foreach ($ungroupedProcesyInit as $nr) {
$procesyInitGroup[$r->PARENT_ID]->sub[$nr] = $procesyInitList[$nr];
}
}
return $procesyInitGroup;
}
function menuAction() {
$testy_teoretyczne = $this->get_actual_tests_count('TEORETYCZNY');
$testy_praktyczne = $this->get_actual_tests_count('PRAKTYCZNY');
$procesy_init_arr = $this->_acl->getUserProcesInitIds();
$proces_cnt = count($procesy_init_arr);
$testy_ok = $this->get_actual_tests_count();
$MojeTestyTitle = "Ilość Procesów: {$proces_cnt}, Aktualnych testów: {$testy_ok}, Teoretycznych: {$testy_teoretyczne}, Praktycznych: {$testy_praktyczne}";
$userAcl = User::getAcl();
$tbls = $userAcl->getTablesAcl();
$urls = $userAcl->getUrls();
$outMenus = array();
$outBtnsMenus = array();
if (!empty($tbls)) {
foreach ($tbls as $kZasobID => $vTblAcl) {
$outMenus[$kZasobID] = $vTblAcl->getLongLabel();
if ($userAcl->getPermsFiltrProcesId()) {
$outBtnsMenus[$kZasobID] = $vTblAcl->getRawLabel();
}
}
}
asort($outMenus);
if ($userAcl->getPermsFiltrProcesId()) {
asort($outBtnsMenus);
}
$outUrls = array();
if (!empty($urls)) {
/**
* [147] => Array(
* [TYPE] => URL
* [DESC] => ?MENU_INIT=DODAJ_REKORDY_MIESZKAN_FUNC
* [OPIS] => Narzedzie do wprowadzania zasobow mieszkan indywidualnych
*/
foreach ($urls as $kZasobID => $vTitle) {
$outUrls[$kZasobID] = $vTitle;
}
}
asort($outUrls);
$active = '';
$script_name = V::get('SCRIPT_NAME', '', $_SERVER);
if (false !== strpos($script_name, 'index.php')) {
$menu_init = V::get('MENU_INIT', '', $_GET);
switch ($menu_init) {
case 'VIEWTABLE_AJAX': $active = 'menu'; break;
case 'VIEWTABLE_KONTAKTY': $active = 'kontakty'; break;
default: {
$fun_init = V::get('FUNCTION_INIT', '', $_GET);
switch ($fun_init) {
case 'MENU_SELECT_PROCES': $active = 'testy_moje'; break;
case 'PRZYPOMNIJ_FUNC': $active = 'przypomnij'; break;
case 'PRZYPOMNIJ': $active = 'przypomnij'; break;
default:
}
}
}
}
else if (false !== strpos($script_name, 'procesy5.php')) {
$task = V::get('task', '', $_GET);
switch ($task) {
case 'CRM_PROCES': $active = 'procesy'; break;
case 'CRM_LISTA_ZASOBOW': $active = 'zasoby'; break;
case 'CRM_WYSWIETL_OBOWIAZKI': $active = 'obowiazki'; break;
case 'CRM_TESTY': $active = 'testy'; break;
case 'CRM_TESTY_WYNIKI': $active = 'testy_wyniki'; break;
case 'CRM_SEARCH': $active = 'search'; break;
default:
// testy_moje ?FUNCTION_INIT=MENU_SELECT_PROCES&MENU_SELECT_PROCES=show_menu_with_process => _action=showMyTests
}
}
/*
* $_SESSION['USER_PROFILE'][section][key] = val;
*/
$userBookmarks = UserBookmarks::getInstance();
$bookmarksJson = array();
$bookmarks = $userBookmarks->getBookmarks();
foreach ($bookmarks as $kZasobID => $vClass) {
if (array_key_exists($kZasobID, $tbls)) {
$bookmarksJson[] = (object)array('id'=>$kZasobID, 'name'=>$tbls[$kZasobID]->getName(), 'label'=>$tbls[$kZasobID]->getRawLabel(), 'opis'=>$tbls[$kZasobID]->getOpis(), 'type'=>'menu', 'class'=>$vClass);
}
else if (array_key_exists($kZasobID, $urls)) {
$bookmarksJson[] = (object)array('id'=>$kZasobID, 'name'=>$urls[$kZasobID], 'type'=>'url', 'class'=>$vClass);
}
}
$userGroupIdsCSV = User::getGroupsIds();
$userGroupIdsCSV = implode(',', $userGroupIdsCSV);
$typeSpecialUserId = null;
if (User::isAdmin()) {
$typeSpecialUserId = TypespecialVariable::getInstance(-1, '__USER_ID');
}
$typeSpecialZasob = TypespecialVariable::getInstance(-1, '__ZASOB');
$treeZasobyFilter = FilterFactory::build('CRM_LISTA_ZASOBOW');
$lastZasobyFiltrIds = $treeZasobyFilter->get_arg('filtr_id');
$typeSpecialProces = TypespecialVariable::getInstance(-1, '__PROCES');
$treeProcesyFilter = FilterFactory::build('CRM_PROCES');
$lastProcesyFiltrIds = $treeProcesyFilter->get_arg('filtr_id');
$menuProcesViewedTblId = 0;
if ('VIEWTABLE_AJAX' == V::get('MENU_INIT', '', $_REQUEST)) {
$menuProcesViewedTblId = V::get('ZASOB_ID', 0, $_REQUEST, 'int');
}
?>