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'); ?>
{}
  • getPermsFiltrProcesId() == $proces_id) : ?> Wyłącz filtr uprawnien dla Uruchom filtr uprawnien dla
  • Wykonaj test teoretyczny dla
  • Test teoretyczny: ()
  • Test praktyczny:
  • Uwaga! Test nieaktualny: unactualId) : ?> popraw
    TEST_END; ?> - zakończenie testu
    unactual; ?> - ostatnia zmiana w procesie
    = 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();// typeName => label (order by label) $rawOutMenus = array(); $labelsOutMenus = array(); $outBtnsMenus = array(); $typeNameToIdZasob = array();// $typeName => $idZasob if (!empty($tbls)) { foreach ($tbls as $kZasobID => $vTblAcl) { $tblName = $vTblAcl->getName(); $typeName = "p5_default_db:{$tblName}"; $labelsOutMenus[$typeName] = $vTblAcl->getLongLabel(); $rawOutMenus[$typeName] = strtolower($vTblAcl->getLongRawLabel()); $typeNameToIdZasob[$typeName] = $kZasobID; if ($userAcl->getPermsFiltrProcesId()) { $outBtnsMenus[$typeName] = $vTblAcl->getRawLabel(); } } } asort($rawOutMenus); foreach ($rawOutMenus as $typeName => $rawLongLabel) $outMenus[$typeName] = $labelsOutMenus[$typeName]; 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'; 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'; break; case 'CRM_TESTY__LIST': $active = 'testy'; break; case 'CRM_TESTY__ADD_TEST': $active = 'testy'; break; case 'CRM_TESTY__ADD_KANDYDAT': $active = 'testy'; 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'); } else if ('ViewTableAjax' == V::get('_route', '', $_REQUEST)) { $typeName = V::get('typeName', '', $_REQUEST, 'word'); if (array_key_exists($typeName, $typeNameToIdZasob)) $menuProcesViewedTblId = $typeNameToIdZasob[$typeName]; } ?> getPermsFiltrProcesId()) : ?>
    Wyłącz filtr uprawnień: getPermsFiltrProcesId(); ?> $vName) : ?> $vTitle) : ?>
    _wynik_testu = array();// WYNIK_TESTU_PROCESU $this->_wynik_testu_unactual = array(); $this_CRM_PROCES_USERA_WYKONANE_TESTY = $this->getUserTests(); foreach ($this_CRM_PROCES_USERA_WYKONANE_TESTY as $v_test) { if (isset($this->_wynik_testu[$v_test->ID_PROCES_INIT][$v_test->TEST_TYPE])) { continue;// only first } $this->_wynik_testu[$v_test->ID_PROCES_INIT][$v_test->TEST_TYPE] = $v_test->OCENA; if (!empty($v_test->unactual)) { $x_test = new stdClass(); $x_test->TEST_END = substr($v_test->TEST_END, 0, 10); $x_test->unactual = substr($v_test->unactual, 0, 10); $x_test->unactualId = $v_test->unactualId; $this->_wynik_testu_unactual[$v_test->ID_PROCES_INIT][$v_test->TEST_TYPE] = $x_test; } } } function get_ocena_testu($proces_id, $typ) { $ocena = $this->get_ocena_testu_value($proces_id, $typ); if (!$ocena) { return 'BRAK_TESTU'; } else if ($ocena == -1) { return 'BRAK_PYTAN'; } else if ($ocena == 3) { return 'IDEALNY'; } else if ($ocena < 2) { return 'NIEDOSTATECZNY'; } else if($ocena < 2.5) { return 'DOSTATECZNY'; } else { return 'DOBRY'; } } function get_ocena_testu_value($proces_id, $typ) { if (isset($this->_wynik_testu[$proces_id][$typ])) { return $this->_wynik_testu[$proces_id][$typ]; } return null; } function isTestUnactual($proces_id, $typ) { if (isset($this->_wynik_testu_unactual[$proces_id][$typ])) { return $this->_wynik_testu_unactual[$proces_id][$typ]; } return false; } function get_actual_tests_count($type = null) { $this_CRM_PROCES_USERA_WYKONANE_TESTY = $this->getUserTests(); if ($type == 'TEORETYCZNY') { $testy_teoretyczne = 0; foreach ($this_CRM_PROCES_USERA_WYKONANE_TESTY as $int => $v_test) { if ($v_test->TEST_TYPE=='TEORETYCZNY') { if ($v_test->OCENA > 2.5) $testy_teoretyczne++; } } return $testy_teoretyczne; } else if ($type == 'PRAKTYCZNY') { $testy_praktyczne = 0; foreach ($this_CRM_PROCES_USERA_WYKONANE_TESTY as $int => $v_test) { if ($v_test->TEST_TYPE=='PRAKTYCZNY') { if ($v_test->OCENA > 2.5) $testy_praktyczne++; } } return $testy_praktyczne; } else if ($type == null) { return count($this_CRM_PROCES_USERA_WYKONANE_TESTY); } return 0; } /** * URL: _action=setPermsAll */ function setPermsAllAction() { $userAcl = User::getAcl(); $userAcl->fetchAllPerms(true); $this->menuAction(); } /** * URL: _action=setPermsByProces */ function setPermsByProcesAction() { $procesID = V::get('id_proces', 0, $_GET, 'int'); if ($procesID <= 0) { echo '
    ' . "Brak ID Procesu" . '
    '; return; } $userAcl = User::getAcl(); if ($userAcl->getPermsFiltrProcesId() == $procesID) { $this->menuAction(); echo '
    ' . "Filtr procesu nr {$procesID} jest już uruchomiony" . '
    '; return; } $userAcl = User::getAcl(); if (!$userAcl->canExecuteProcesInit($procesID)) { $this->menuAction(); echo '
    ' . "Brak uprawnień do uruchomienia filtra procesu" . '
    '; SE_Layout::dol(); exit; } $userAcl->fetchProcesPerms($procesID, true); $this->menuAction(); } function show_url_menu() {// TODO: raneme; show all tables and actions by selected proces if in proces perm if (isset($_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'])) { ?>
    Narzędzia
    4680 //$sql='update CRM_TESTY set A_RECORD_CREATE_AUTHOR='smagielm' where A_RECORD_CREATE_AUTHOR='Kandydat.4673'; //$sql='update CRM_TESTY set A_RECORD_UPDATE_AUTHOR='smagielm' where A_RECORD_UPDATE_AUTHOR='Kandydat.4673'; //$sql="update CRM_TESTY set ID_TESTER='4680' where ID_TESTER='4673'"; } }