فهرست منبع

Acl Fix ProcesMenu for my tests

Piotr Labudda 10 سال پیش
والد
کامیت
663065c812
3فایلهای تغییر یافته به همراه117 افزوده شده و 250 حذف شده
  1. 68 249
      SE/se-lib/ProcesMenu.php
  2. 1 1
      SE/se-lib/ProcesTestyHelper.php
  3. 48 0
      SE/se-lib/UserAcl.php

+ 68 - 249
SE/se-lib/ProcesMenu.php

@@ -13,9 +13,6 @@ Lib::loadClass('FilterFactory');
 class ProcesMenu {
 
 	var $MENU_SELECT_PROCES;
-	var $CRM_PROCES_USERA_UZYTY_MAP = null;
-	var $CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT;
-	var $CRM_PROCES_USERA_WYKONANE_TESTY;
 	var $_wynik_testu;
 	var $_wynik_testu_unactual;
 	var $error;// errory niedopuszczajace do uruchomienia
@@ -40,10 +37,11 @@ class ProcesMenu {
 			die('Error Acl');
 		}
 
-		$this->CRM_PROCES_USERA_UZYTY_MAP = $this->_acl->getUsedProcesMap();
-
 		// TODO: run only if needed
-		$this->_generate_wyniki_testow();
+		if ('1' == V::get('_CLEAN_CACHE', '', $_POST)) {
+			$this->_cleanTestsCache();
+		}
+		$this->_generateTestResults();
 	}
 
 	static function getInstance() {
@@ -78,53 +76,69 @@ class ProcesMenu {
 	/**
 	 * @return Array
 	 */
-	function get_wykonane_testy() {
-		$testy_arr = array();
-		if ($this->_user_id > 0) {
-			$ses_cache_key = 'CRM_PROCES_USERA_WYKONANE_TESTY-' . $this->_user_id;
-			if ('1' == V::get('_CLEAN_CACHE', '', $_GET)) unset($_SESSION[$ses_cache_key]);// TODO: DBG
-			if (!isset($_SESSION[$ses_cache_key])) {
-				$proces_map = $this->_acl->getUsedProcesMap();
-				if (!empty($proces_map)) {
-					$testy_arr = ProcesTestyHelper::get_tetsy_stats($this->_user_id, 0, array_keys($proces_map));// 30000000 => 0
-
-					// check if tests are actual - proces steps may change
-					if (!empty($testy_arr)) {
-						$procesy_steps = array();
-						foreach ($testy_arr as $v_test) {
-							$procesy_steps[$v_test->ID_PROCES_INIT] = V::get($v_test->ID_PROCES_INIT, null, $proces_map);
-						}
+	function getUserTests() {
+		if ($this->_user_id <= 0) {
+			throw new Exception("User id not set");
+		}
 
-						foreach ($procesy_steps as $k_proces_id => $v_steps_arr) {
-							$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;
+		$testy_arr = array();
+		$ses_cache_key = 'CRM_PROCES_USERA_WYKONANE_TESTY-' . $this->_user_id;
+		if (!$this->_isTestsInCache()) {
+			$usedProcesInitIds = $this->_acl->getUsedUserProcesInitIds();
+			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;
 							}
-							$max_update_date = ProcesTestyHelper::get_max_update_date($v_steps_arr);
-							if ($max_update_date) {
-								$max_update_date = substr($max_update_date, 0, 10);
-								$test_end = substr($last_test->TEST_END, 0, 10);
-								if('1' == V::get('DBG_PM', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">'."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) . ")".' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($last_test);echo'</pre>';}
-								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;
-								}
+						}
+						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;
 							}
 						}
 					}
 				}
-				$_SESSION[$ses_cache_key] = $testy_arr;
 			}
-			return $_SESSION[$ses_cache_key];
+			$this->_setTestsCache($testy_arr);
 		}
-		return $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) {
@@ -190,6 +204,12 @@ class ProcesMenu {
 		$idZasobowUsera = array_keys($userGroups);
 		$idZasobowUsera = reset($idZasobowUsera);
 		?>
+<div class="container" style="margin-top:10px;">
+	<form action="" method="post" class="inline-form">
+		<input type="hidden" name="_CLEAN_CACHE" value="1">
+		<button type="submit" class="btn btn-xs btn-warning pull-right">odśwież</button>
+	</form>
+</div>
 <?php foreach ($procesyInitGroup as $vProcesGroup) : ?>
 <div class="container tbl-wyniki-testow page-header">
 	<h3>
@@ -1059,10 +1079,10 @@ jQuery(document).ready(function() {
 	/**
 	 * Generates wyniki
 	 */
-	function _generate_wyniki_testow() {
+	private function _generateTestResults() {
 		$this->_wynik_testu = array();// WYNIK_TESTU_PROCESU
 		$this->_wynik_testu_unactual = array();
-		$this_CRM_PROCES_USERA_WYKONANE_TESTY = $this->get_wykonane_testy();
+		$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
@@ -1117,7 +1137,7 @@ jQuery(document).ready(function() {
 	}
 
 	function get_actual_tests_count($type = null) {
-		$this_CRM_PROCES_USERA_WYKONANE_TESTY = $this->get_wykonane_testy();
+		$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) {
@@ -1142,207 +1162,6 @@ jQuery(document).ready(function() {
 		return 0;
 	}
 
-	function wylacz_filtr_uprawnien_dla_procesu() {// TODO: RMME => _action=setPermsAll
-		unset($this->MENU_SELECT_PROCES_DATA['uruchom_filtr_uprawnien_dla_procesu']);// usun tryb jednego procesu
-		$this->set_current_menu_data();// zapisz do sesji
-		$this->set_perms_for_process();// domyslnie pusty włącza
-	}
-
-	function uruchom_filtr_uprawnien_dla_procesu() {// TODO: RMME => _action=setPermsByProces
-		$proces_to_filter = V::get('ID_PROCES', '', $_REQUEST);
-		$map = $this->_acl->getUsedProcesMap();
-		if (!in_array($proces_to_filter, $map)) {// TODO: chyba array_key_exists ?
-			$this->setError(" Nie ma takiego procesu dla usera aby ustawic dla niego filtry");
-		}
-		$this->ifError();// ? // TODO: RMME
-
-		//szukam tabeli do ustalenia permow
-		$this->unset_all_perms();
-
-		$this->MENU_SELECT_PROCES_DATA['uruchom_filtr_uprawnien_dla_procesu'] = $proces_to_filter;
-		$this->set_current_menu_data();
-		$this->set_perms_for_process($proces_to_filter);
-		$this->set_current_menu_data();
-		//$this->set_current_menu('show_menu_with_process');
-		//$this->show_menu_with_process();
-	}
-
-	function unset_all_perms() {
-		$dbg_czysc_permy = true;// @from USERS_FIELDS_PROFILE_INIT()
-		foreach ($_SESSION as $ses_col_name => $col_vars) {
-			if (!is_array($col_vars) || empty($col_vars)) continue;
-			if ('_COLUMN' != substr($ses_col_name, -1 * strlen('_COLUMN'))) {
-				continue;
-			}
-			if (empty($col_vars['PERMEDIT'])) continue;
-			if ($dbg_czysc_permy) {
-				foreach ($col_vars['PERMEDIT'] as $col_perm_ind => $col_perm_value) {
-					if ($col_perm_ind != 'ID') {
-						$_SESSION[$ses_col_name]['PERMEDIT'][$col_perm_ind] = "";
-					}
-				}
-			}
-		}
-
-		if (isset($_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'])) {
-			foreach ($_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'] as $zasob => $val) {
-				unset($this->MENU_SELECT_PROCES_DATA['MENU_COLUMN'][$zasob]);
-				unset($_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'][$zasob]);
-			}
-		}
-	}
-
-	function set_perms_for_process($proces_to_filter = null) {// => setPermsByProcesAction
-		if ($proces_to_filter) {
-			$map = $this->_acl->getUsedProcesMap();
-			if (array_key_exists($proces_to_filter, $map)) {
-				$CRM_PROCES_USERA_UZYTY = $map[$proces_to_filter];
-			} else {
-				$CRM_PROCES_USERA_UZYTY = array();
-			}
-		}
-		else {
-			$CRM_PROCES_USERA_UZYTY = $this->_acl->getUsedProcesIds();
-		}
-
-		if (!empty($CRM_PROCES_USERA_UZYTY)) {
-			return;
-		}
-		// ! @2013-02-11 zerzniete z USERS_FIELDS_PROFILE_INIT !
-
-		$CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE = array();
-		$CRM_TREE_WSKAZNIK_NARZEDZIE = array();
-		$TREE_CRM_WSKAZNIK_CONF = array();
-		$TREE_CRM_WSKAZNIK_SORT_PRIO = array();
-
-		$db = DB::getDB();
-		//kopiuje tabele ze wskaznikow
-		$sql = "select t1.`ID_PROCES`
-				, t1.`ID_ZASOB`
-				, replace(t2.`FORM_TREAT`, ',', '') as FORM_TREAT 
-				, t3.`DESC` as ZASOB_DESC
-				, t3.`TYPE`
-				, t4.`DESC` as PARENT_ZASOB_DESC
-				, t4.`TYPE` as PARENT_TYPE
-				, t3.`SORT_PRIO` as z__SORT_PRIO
-				, t3.`OPIS` as ZASOB_OPIS , t1.`ID` as ID_WSKAZNIK
-			from `CRM_WSKAZNIK` as t1
-				left join `CRM_PRZYPADEK` as t2 on (t1.ID_PRZYPADEK=t2.ID)
-				left join `CRM_LISTA_ZASOBOW` as t3 on (t3.ID=t1.ID_ZASOB)
-				left join `CRM_LISTA_ZASOBOW` as t4 on (t4.ID=t3.PARENT_ID)
-			where
-				(
-					( t3.`TYPE`='KOMORKA' and t4.`TYPE`='TABELA' )
-					or (t3.`TYPE`='NARZEDZIE') or (t3.`TYPE`='URL')
-				)
-				and t1.`A_STATUS` in('NORMAL', 'WAITING')
-				and t1.`ID_PROCES` in(" . implode(",", $CRM_PROCES_USERA_UZYTY) . ")
-		";
-		$res = $db->query($sql);
-		if (!$res) {
-			return;
-		}
-		while ($r = $db->fetch($res)) {
-			if ($r->TYPE == 'NARZEDZIE') {
-				if (isset($CRM_TREE_WSKAZNIK_NARZEDZIE[$r->ID_ZASOB])) {
-					$CRM_TREE_WSKAZNIK_NARZEDZIE[$r->ID_ZASOB] .= $r->FORM_TREAT;
-				}
-				else {
-					$CRM_TREE_WSKAZNIK_NARZEDZIE[$r->ID_ZASOB] = $r->FORM_TREAT;
-				}
-				$CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE[$r->ID_PROCES][] = $r->ID_WSKAZNIK;//ustawiam wskaznik od procesu, jak user wybierze proces do roboty, to ja poznam co moze mu sie pojawic
-			}
-			else if ($r->TYPE == 'URL') {
-				$CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE[$r->ID_PROCES][] = $r->ID_WSKAZNIK;//ustawiam wskaznik od procesu, jak user wybierze proces do roboty, to ja poznam co moze mu sie pojawic
-				$_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'][$r->ID_ZASOB]['TYPE'] = $r->TYPE;
-				$_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'][$r->ID_ZASOB]['DESC'] = $r->ZASOB_DESC;
-				$_SESSION['MENU_SELECT_PROCES_DATA']['MENU_COLUMN'][$r->ID_ZASOB]['OPIS'] = $r->ZASOB_OPIS;
-			}
-			else {
-				if ($r->PARENT_TYPE == 'TABELA') {
-					$CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE[$r->ID_PROCES][] = $r->ID_WSKAZNIK;//ustawiam wskaznik od procesu, jak user wybierze proces do roboty, to ja poznam co moze mu sie pojawic
-					if (isset($r->FORM_TREAT)) {
-						if (isset($TREE_CRM_WSKAZNIK_CONF[$r->PARENT_ZASOB_DESC][$r->ZASOB_DESC])) {
-							$TREE_CRM_WSKAZNIK_CONF[$r->PARENT_ZASOB_DESC][$r->ZASOB_DESC] .= $r->FORM_TREAT;
-						}
-						else {
-							$TREE_CRM_WSKAZNIK_CONF[$r->PARENT_ZASOB_DESC][$r->ZASOB_DESC] = $r->FORM_TREAT;
-						}
-						// echo "<br. . . Dodaje dla:".$r->PARENT_ZASOB_DESC." ".$r->ZASOB_DESC." = ".$r->FORM_TREAT;
-					}
-					$TREE_CRM_WSKAZNIK_SORT_PRIO[$r->PARENT_ZASOB_DESC][$r->ZASOB_DESC] = $r->z__SORT_PRIO;
-
-					//@2012-10-10 by SQIX : dodajemy opus kolumny z opisu zasobow
-					if ($r->ZASOB_OPIS) {
-						$_SESSION[$r->PARENT_ZASOB_DESC."_COLUMN"]['DESC_TO_LANG'][$r->ZASOB_DESC] = $r->ZASOB_OPIS;
-					}
-					else if (isset($_SESSION[$r->PARENT_ZASOB_DESC."_COLUMN"]['DESC_TO_LANG'][$r->ZASOB_DESC])
-						&& strlen($_SESSION[$r->PARENT_ZASOB_DESC."_COLUMN"]['DESC_TO_LANG'][$r->ZASOB_DESC]) > 1
-					) {
-						echo "<BR> DODAJ opis dla zasobu ".$r->ID_ZASOB." w postaci <pre>".$_SESSION[$r->PARENT_ZASOB_DESC."_COLUMN"]['DESC_TO_LANG'][$r->ZASOB_DESC]."</pre>";
-					}
-				}
-			}
-		}
-
-		// ! nizej uruchamiamy permy na podstawie wynikow co umozliwialy procesy
-		foreach ($TREE_CRM_WSKAZNIK_CONF as $ses_column_name => $field_perms_arr) {
-			foreach ($field_perms_arr as $k_name => $v_perm) {
-				$v_perm = str_split($v_perm);
-				$v_perm = array_unique($v_perm);
-				$v_perm = implode("", $v_perm);
-
-				//if(isset($_SESSION[$ses_column_name."_COLUMN"]['PERMEDIT'][$k_name]))
-				$_SESSION[$ses_column_name."_COLUMN"]['PERMEDIT'][$k_name] = $v_perm;
-				//else $_SESSION[$ses_column_name."_COLUMN"]['PERMEDIT'][$k_name] = $v_perm."RWX"; //dokladamy permy do istniejacych!!! @2012-10-21- najlepsze na okres przejsciowy do generowania procesow!
-				$debug_perms[]="_SESSION['".$ses_column_name."_COLUMN']['PERMEDIT'][".$k_name."]']=".$v_perm;
-
-				//jezeli jest w kolumnie ID==W , to znaczy, ze mozna dodawac nowy rekord
-				if ($k_name == 'ID' && strstr($v_perm, 'W')) {
-					$_SESSION[$ses_column_name."_COLUMN"]['FUNCPERMEDIT']['NEW_RECORD'] = "RWXC";
-					$_SESSION[$ses_column_name."_COLUMN"]['FUNCPERMEDIT']['TABLE_INSERTDB'] = "RWXC";
-				}
-
-				//jezeli jest funkcja powiazana to uprawnienia dostajemy takie same jak z komorki do tej funkcji!
-				if (isset($_SESSION[$ses_column_name."_COLUMN"]['TYPESPECIAL'][$k_name])) {
-					$debug_perms[]="_SESSION['".$ses_column_name."_COLUMN']['FUNCPERMEDIT']['".$_SESSION[$ses_column_name."_COLUMN"]['TYPESPECIAL'][$k_name]."']=".$v_perm;
-					$_SESSION[$ses_column_name."_COLUMN"]['FUNCPERMEDIT'][$_SESSION[$ses_column_name."_COLUMN"]['TYPESPECIAL'][$k_name]] = $v_perm;
-				}
-			}
-
-			{// sort DESC by ZASOB.SORT_PRIO
-				$desc_to_sort = array();
-				if (!isset($_SESSION[$ses_column_name."_COLUMN"]['DESC'])) {
-					//echo "<br><font color=red>L2375 Brak definicji w systemie opisanej procesami tabeli <b>".$ses_column_name."</b></font>";
-				}
-				else 
-				foreach ($_SESSION[$ses_column_name."_COLUMN"]['DESC'] as $k_ind => $v_val) {
-					$desc_to_sort[$v_val] = $k_ind;
-				}
-
-				$TREE_CRM_WSKAZNIK_SORT_PRIO[$ses_column_name];
-				asort($TREE_CRM_WSKAZNIK_SORT_PRIO[$ses_column_name]);
-
-				$new_desc = array();
-				foreach ($TREE_CRM_WSKAZNIK_SORT_PRIO[$ses_column_name] as $k_name => $v_sort_prio) {
-					if (!isset($desc_to_sort[$k_name])) {
-						//echo "<br><font color=red>Brak spojnosci definicji dla kolumny : ".$ses_column_name."[<b>".$k_name."</b>] </font>";
-					}
-					else {
-						$new_desc[$desc_to_sort[$k_name]] = $k_name;
-					}
-				}
-
-				// add columns
-				foreach ($desc_to_sort as $k_name => $v_ind) {
-					$new_desc[$v_ind] = $k_name;
-				}
-
-				$_SESSION[$ses_column_name."_COLUMN"]['DESC'] = $new_desc;
-			}// sort DESC by ZASOB.SORT_PRIO
-		}
-	}
-
 	/**
 	 * URL: _action=setPermsAll
 	 */

+ 1 - 1
SE/se-lib/ProcesTestyHelper.php

@@ -371,7 +371,7 @@ class ProcesTestyHelper {
 	 * Remove tests which is unactual - proces or step has changed.
 	 * @param $steps_ids
 	 */
-	public static function get_max_update_date($steps_ids) {
+	public static function get_max_update_date($steps_ids) {// TODO: RMME, mved to UserAcl->getProcesMaxUpdateDate
 		$max_update_date = null;
 		$db = DB::getDB();
 		$sql = "select max(p.`A_RECORD_UPDATE_DATE`) as max_update_date

+ 48 - 0
SE/se-lib/UserAcl.php

@@ -536,4 +536,52 @@ SQL;
 SQL;
 	}
 
+	public function getProcesMaxUpdateDate($idProcesInit) {
+		$maxUpdateDate = null;
+		$db = DB::getDB();
+		$sql = <<<SQL
+			select max(p.`A_RECORD_UPDATE_DATE`) as max_update_date
+			from `CRM_PROCES` as p
+			where p.`ID` in(
+				select i.`ID_PROCES`
+					from `CRM_PROCES_idx` i
+					where i.`idx_PROCES_INIT_ID`='{$idProcesInit}'
+			)
+SQL;
+		$res = $db->query($sql);
+		if ($r = $db->fetch($res)) {
+			$maxUpdateDate = $r->max_update_date;
+		}
+		return $maxUpdateDate;
+	}
+
+	public function getUsedUserProcesInitIds() {
+		$usedProcesInitList = $this->getUsedUserProcesInitList();
+		return array_keys($usedProcesInitList);
+	}
+
+	public function getUsedUserProcesInitList() {
+		$filterIdProces = $this->getFilterIdProces();
+		if ($filterIdProces > 0) {
+			return $filterIdProces;
+		}
+
+		$sqlIdProcesListSql = $this->getUsedUserProcesIdsSql();
+		$getUsedProcesInitListSql = <<<SQL
+			select p.`ID`, p.`DESC`
+				from `CRM_PROCES` p
+				where p.`ID` in({$sqlIdProcesListSql})
+					and p.`TYPE`='PROCES_INIT'
+				group by p.`ID`
+				order by p.`SORT_PRIO`
+SQL;
+		$usedProcesInitList = array();
+		$db = DB::getDB();
+		$res = $db->query($getUsedProcesInitListSql);
+		while ($r = $db->fetch($res)) {
+			$usedProcesInitList[$r->ID] = $r->DESC;
+		}
+		return $usedProcesInitList;
+	}
+
 }