Преглед изворни кода

Acl add TableAcl->initFieldsFromConfig, fix SchemaReder tables init

Piotr Labudda пре 10 година
родитељ
комит
8a8e5abd7e
7 измењених фајлова са 157 додато и 627 уклоњено
  1. 1 0
      SE/index.php
  2. 20 0
      SE/se-lib/DBG.php
  3. 0 10
      SE/se-lib/ProcesMenu.php
  4. 1 2
      SE/se-lib/SchemaReader.php
  5. 4 4
      SE/se-lib/SchemaReaderProcess.php
  6. 35 26
      SE/se-lib/TableAcl.php
  7. 96 585
      SE/se-lib/UserAcl.php

+ 1 - 0
SE/index.php

@@ -31,6 +31,7 @@ require_once APP_PATH_ROOT . "/superedit-SEF.php";
 SEF('DEBUG_S');
 
 require_once APP_PATH_LIB . '/' . 'Lib.php';
+Lib::loadClass('DBG');
 Lib::loadClass('V');
 Lib::loadClass('DB');
 Lib::loadClass('User');

+ 20 - 0
SE/se-lib/DBG.php

@@ -0,0 +1,20 @@
+<?php
+
+class DBG {
+
+	/**
+	 * examples:
+	 *   DBG::_('DBG_SCH', '1', "fieldsConfig({$idTable})", $fieldsConfig, __CLASS__, __FUNCTION__, __LINE__ );
+	 */
+	public static function _($reqKey, $reqValue, $label, $variable, $className, $functionName, $lineNumber, $borderColor = 'red') {
+		if ($reqValue == V::get($reqKey, '', $_GET)) {
+			?>
+<pre style="max-height:200px;max-width:800px;overflow:auto;border:1px solid <?php echo $borderColor; ?>;text-align:left;"
+		 ><?php echo "{$label} ({$className}::{$functionName}:{$lineNumber}):\n"; ?>
+<?php print_r($variable);?>
+</pre>
+<?php
+		}
+	}
+
+}

+ 0 - 10
SE/se-lib/ProcesMenu.php

@@ -40,16 +40,6 @@ class ProcesMenu {
 			die('Error Acl');
 		}
 
-		// TODO: TEST
-		if ('' != V::get('DBG', '', $_GET)) {
-			echo '<div style="background:#eeefef;border:2px solid blue;padding:10px;">';
-			//$this->_acl->old();
-			echo '</div>';
-			echo '<div style="background:#eeefef;border:2px solid green;padding:10px;">';
-			$this->_acl->old_fixed();
-			echo '</div>';
-		}
-
 		$this->CRM_PROCES_USERA_UZYTY_MAP = $this->_acl->getUsedProcesMap();
 
 		// TODO: run only if needed

+ 1 - 2
SE/se-lib/SchemaReader.php

@@ -71,8 +71,7 @@ class SchemaReader {
 	public static function buildFromIni($resourceUri, $configData) {
 		$resourceType = V::get('type', '', $configData);
 		if (!$resourceType) {
-			echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r("!resourceType");echo'</pre>';
-			return null;
+			throw new Exception("Wrong resource type - cannot build from ini file");
 		}
 		$className = "SchemaReaderResource{$resourceType}";
 		if (!Lib::loadClass($className)) {

+ 4 - 4
SE/se-lib/SchemaReaderProcess.php

@@ -22,7 +22,7 @@ class SchemaReaderProcess {
 		$this->_version = $config->get('version', 'CONFIG');
 		$this->_date = $config->get('date', 'CONFIG');
 
-		if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$configData (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($configData);echo'</pre>';}
+		DBG::_('DBG_SCH', '1', "configData", $configData, __CLASS__, __FUNCTION__, __LINE__ );
 		$configSections = array_keys($configData);
 		if (in_array('ACCESS', $configSections)) {
 			if (array_key_exists('HAS_ACCESS', $configData['ACCESS'])) {
@@ -49,7 +49,7 @@ class SchemaReaderProcess {
 				}
 			}
 		}
-		if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$this->_steps:1 (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_steps);echo'</pre>';}
+		DBG::_('DBG_SCH', '1', "_steps:1", $this->_steps, __CLASS__, __FUNCTION__, __LINE__ );
 
 		foreach ($configSections as $section) {
 			if ('STEP' == substr($section, 0, 4)) {
@@ -66,7 +66,7 @@ class SchemaReaderProcess {
 				}
 			}
 		}
-		if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$this->_steps:2 (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_steps);echo'</pre>';}
+		DBG::_('DBG_SCH', '1', "_steps:2", $this->_steps, __CLASS__, __FUNCTION__, __LINE__ );
 
 		$this->_resourcesTable = array();
 		foreach ($this->_steps as $step) {
@@ -79,7 +79,7 @@ class SchemaReaderProcess {
 				}
 			}
 		}
-		if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">this->_resourcesTable (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_resourcesTable);echo'</pre>';}
+		DBG::_('DBG_SCH', '1', "_resourcesTable", $this->_resourcesTable, __CLASS__, __FUNCTION__, __LINE__ );
 
 		return true;
 	}

+ 35 - 26
SE/se-lib/TableAcl.php

@@ -672,32 +672,10 @@ class TableAcl {
 		if (empty($this->_fields)) {
 			$this->_types = array();// clear _types @see $this->isInitialized
 			$userAcl = User::getAcl();
-			$permFields = $userAcl->getPermsForTable($this->_zasobID);
-			//echo'<pre>INIT::$permFields('.$this->_zasobID.') fields('.count($this->_fields).') ';print_r($permFields);echo'</pre>';
-			foreach ($permFields as $idField => $fld) {
-				//echo'<pre>INIT::$permField('.$fld->ID_CELL.') hasFld('.$this->hasField($fld->ID_CELL).') ';echo'</pre>';
-				if (!$this->hasField($fld->ID_CELL)) {
-					//echo'<pre>INIT::$permField('.$fld->ID_CELL.') addFld('.$fld->ID_CELL . ', ' . $fld->CELL_NAME . ', ' . $fld->CELL_DESC . ', ' . $fld->SORT_PRIO . ', ' . $fld->CELL_LABEL.') ';echo'</pre>';
-					$this->addField($fld->ID_CELL, $fld->CELL_NAME, $fld->CELL_DESC, $fld->SORT_PRIO, $fld->CELL_LABEL);
-				}
-				//echo'<pre>INIT::$permField('.$fld->ID_CELL.') hasFld('.$this->hasField($fld->ID_CELL).') ';echo'</pre>';
-				{// TODO: convert to legacy perms
-					$fld->FORM_TREAT = '';
-					if ($fld->PERM_R > 0) $fld->FORM_TREAT .= 'R';
-					if ($fld->PERM_W > 0) $fld->FORM_TREAT .= 'W';
-					if ($fld->PERM_X > 0) $fld->FORM_TREAT .= 'X';
-					if ($fld->PERM_C > 0) $fld->FORM_TREAT .= 'C';
-					if ($fld->PERM_S > 0) $fld->FORM_TREAT .= 'S';
-					if ($fld->PERM_O > 0) $fld->FORM_TREAT .= 'O';
-					if ($fld->PERM_V > 0) $fld->FORM_TREAT .= 'V';
-					if ($fld->PERM_E > 0) $fld->FORM_TREAT .= 'E';
-				}
-				//echo'<pre>INIT::$permField('.$fld->ID_CELL.') ';print_r($fld);echo'</pre>';
-				if (!empty($fld->FORM_TREAT)) {
-					$this->setFieldPerms($fld->ID_CELL, $fld->FORM_TREAT);
-				}
-			}
-			//echo'<pre>INIT::$this('.$this->_zasobID.') fields('.count($this->_fields).') ';print_r($this);echo'</pre>';
+			$fieldsConfig = $userAcl->getPermsForTable($this->_zasobID);
+			DBG::_('DBG_SCH', '1', "INIT::\$fieldsConfig({$this->_zasobID}) fields(".count($this->_fields).")", $fieldsConfig, __CLASS__, __FUNCTION__, __LINE__ );
+			$this->initFieldsFromConfig($fieldsConfig);
+			//DBG::_('DBG_SCH', '1', "INIT::\$fieldsConfig({$this->_zasobID}) fields(".count($this->_fields).")", $this, __CLASS__, __FUNCTION__, __LINE__ );
 		}
 
 		if ($this->isInitialized() && $force == false) {
@@ -723,6 +701,37 @@ class TableAcl {
 		$this->save();
 	}
 
+	public function initFieldsFromConfig($fieldsConfig) {
+		foreach ($fieldsConfig as $idField => $vFieldConfig) {
+			if ((int)$idField <= 0) {
+				DBG::_('DBG_SCH', '1', "BUG key must be integer - skipping '{$idField}'", $vFieldConfig, __CLASS__, __FUNCTION__, __LINE__ );
+				trigger_error("BUG " . __CLASS__ . "->" . __FUNCTION__ . "(\$fieldsConfig) key must be integer - skipping '{$idField}'", E_USER_NOTICE);
+				continue;
+			}
+			//echo'<pre>INIT::$permField('.$vFieldConfig->ID_CELL.') hasFld('.$this->hasField($vFieldConfig->ID_CELL).') ';echo'</pre>';
+			if (!$this->hasField($vFieldConfig['ID_CELL'])) {
+				//echo'<pre>INIT::$permField('.$vFieldConfig['ID_CELL'].') addFld('.$vFieldConfig['ID_CELL'] . ', ' . $vFieldConfig['CELL_NAME'] . ', ' . $vFieldConfig['CELL_DESC'] . ', ' . $vFieldConfig['SORT_PRIO'] . ', ' . $vFieldConfig['CELL_LABEL'].') ';echo'</pre>';
+				$this->addField($vFieldConfig['ID_CELL'], $vFieldConfig['CELL_NAME'], $vFieldConfig['CELL_DESC'], $vFieldConfig['SORT_PRIO'], $vFieldConfig['CELL_LABEL']);
+			}
+			//echo'<pre>INIT::$permField('.$vFieldConfig['ID_CELL'].') hasFld('.$this->hasField($vFieldConfig['ID_CELL']).') ';echo'</pre>';
+			if (!isset($vFieldConfig['FORM_TREAT'])) {// TODO: convert to legacy perms
+				$vFieldConfig['FORM_TREAT'] = '';
+				if ($vFieldConfig['PERM_R'] > 0) $vFieldConfig['FORM_TREAT'] .= 'R';
+				if ($vFieldConfig['PERM_W'] > 0) $vFieldConfig['FORM_TREAT'] .= 'W';
+				if ($vFieldConfig['PERM_X'] > 0) $vFieldConfig['FORM_TREAT'] .= 'X';
+				if ($vFieldConfig['PERM_C'] > 0) $vFieldConfig['FORM_TREAT'] .= 'C';
+				if ($vFieldConfig['PERM_S'] > 0) $vFieldConfig['FORM_TREAT'] .= 'S';
+				if ($vFieldConfig['PERM_O'] > 0) $vFieldConfig['FORM_TREAT'] .= 'O';
+				if ($vFieldConfig['PERM_V'] > 0) $vFieldConfig['FORM_TREAT'] .= 'V';
+				if ($vFieldConfig['PERM_E'] > 0) $vFieldConfig['FORM_TREAT'] .= 'E';
+			}
+			//echo'<pre>INIT::$permField('.$vFieldConfig['ID_CELL'].') ';print_r($vFieldConfig);echo'</pre>';
+			if (!empty($vFieldConfig['FORM_TREAT'])) {
+				$this->setFieldPerms($vFieldConfig['ID_CELL'], $vFieldConfig['FORM_TREAT']);
+			}
+		}
+	}
+
 	private function _fixProjectType() {
 		$tblName = $this->getName();
 		$fldName = 'M_DIST_TYPE';

+ 96 - 585
SE/se-lib/UserAcl.php

@@ -97,7 +97,7 @@ class UserAcl {
 		return $this->_proces_tree_flat;
 	}
 
-	private function _createUsedProcesMap() {
+	private function _createUsedProcesMap() {// TODO: RM
 		if (!empty($this->_proces_used_ids)) {
 			return;
 		}
@@ -139,12 +139,12 @@ class UserAcl {
 		$this->_cache_save('_proces_used_map', $this->_proces_used_map);
 	}
 
-	public function getUsedProcesMap() {
+	public function getUsedProcesMap() {// TODO: RM, used in ProcesMenu (testy) - use view instead
 		$this->_createUsedProcesMap();
 		return $this->_proces_used_map;
 	}
 
-	public function getUsedProcesIds($procesID = null) {
+	public function getUsedProcesIds($procesID = null) {// TODO: RM, used in ProcesMenu
 		$this->_createUsedProcesMap();
 		$usedProcesListIds = $this->_proces_used_ids;
 
@@ -159,7 +159,7 @@ class UserAcl {
 		return $usedProcesListIds;
 	}
 
-	public function getUsedProcesInitIds($zasobId = 0) {// function admin_fetch_CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT() {
+	public function getUsedProcesInitIds($zasobId = 0) {// TODO: RM, used in ProcesMenu
 		if ($zasobId > 0) {
 			$pInitListRaw = $this->getProcesInitList($zasobId);
 			if (!empty($pInitListRaw)) {
@@ -173,7 +173,7 @@ class UserAcl {
 		}
 	}
 
-	public function getUsedProcesInitList() {
+	public function getUsedProcesInitList() {// TODO: RM, used in ProcesMenu
 		if (!empty($this->_proces_init_used)) {
 			return $this->_proces_init_used;
 		}
@@ -192,458 +192,7 @@ class UserAcl {
 		return $this->_proces_init_used;
 	}
 
-	function old_fixed() {
-		if ($this->_user_id < 0) {
-			// TODO: set error brak user_id
-			return false;
-		}
-
-		$groups = $this->fetchGroups();
-		if (empty($groups)) {
-			// TODO: set error brak grup
-			// echo '<p style="color:red">' . "Brak przypisanego stanowiska!" . " Zaktualizuj je <a href='procesy5.php?task=USER_EDIT&_user_id=".$_SESSION['ADM_ID']."&_p=0'>tutaj w menu</a> </p>";
-			return false;
-		}
-
-		$ID_ZASOBOW_USERA = array_keys($groups);
-		echo '<p>' . "1. ID_ZASOBOW_USERA: [" . implode(', ', $ID_ZASOBOW_USERA) . "]"  .'</p>';
-
-		$ID_PROCESOW_USERA = $this->getProcesIds();
-
-		echo '<p>' . "2. ID_PROCESOW_USERA: [" . implode(', ', $ID_PROCESOW_USERA) . "]"  .'</p>';
-
-		// ! zapisuje cala tabele procesow do arraya (i procesy powiazane GOTO z IF_TRUE_GOTO_FLAG=1)
-		$CRM_PROCESS_TREE = $this->getProcesTree();// [PARENT_ID] = ID
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">3. CRM_PROCESS_TREE (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCESS_TREE);echo'</pre>';
-
-		$CRM_PROCES_USERA_UZYTY = $this->getUsedProcesIds();
-		$CRM_PROCES_USERA_UZYTY_MAP = $this->getUsedProcesMap();
-		echo '<p>' . "4. CRM_PROCES_USERA_UZYTY: [" . implode(', ', $CRM_PROCES_USERA_UZYTY) . "]"  .'</p>';
-		if (empty($CRM_PROCES_USERA_UZYTY)) {
-			// TODO: brak procesow usera
-			return false;
-		}
-
-		$db = DB::getDB();
-
-		//$TREE_CRM_WSKAZNIK = array();
-		$CRM_TREE_WSKAZNIK_NARZEDZIE = array();
-		//$TREE_CRM_WSKAZNIK_DESC = array();
-		$TREE_CRM_WSKAZNIK_CONF = array();
-		$TREE_CRM_WSKAZNIK_SORT_PRIO = array();
-
-		// ! dla sciezek procesow wyszukuje powiazanych zasobow aby dac im permy
-	$zap_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($zap_sql);
-		while ($r = $db->fetch($res)) {
-			if ($r->TYPE == 'NARZEDZIE') { //@2012-10-15 walka z warningami sqix
-				  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 {
-				//$TREE_CRM_WSKAZNIK[$r->ID_ZASOB] .= $r->FORM_TREAT;
-				//$TREE_CRM_WSKAZNIK_DESC[$r->ID_ZASOB] = $r->ZASOB_DESC;
-
-				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)) { //@2012-10-15 walka z warningami sqix
-						  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>";
-				}
-			}
-		}
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">5. TREE_CRM_WSKAZNIK_CONF (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($TREE_CRM_WSKAZNIK_CONF);echo'</pre>';
-
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY ('.count($CRM_PROCES_USERA_UZYTY).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY_MAP ('.count($CRM_PROCES_USERA_UZYTY_MAP).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY_MAP);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_TREE_WSKAZNIK_NARZEDZIE ('.count($CRM_TREE_WSKAZNIK_NARZEDZIE).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_TREE_WSKAZNIK_NARZEDZIE);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE ('.count($CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE);echo'</pre>';
-
-		// ! tutaj poszukamy co jest proces_init tylko z CRM_PROCES_USERA_UZYTY_MAP
-		if (!empty($CRM_PROCES_USERA_UZYTY_MAP)) {
-			$sql="select `ID`,`DESC` from `CRM_PROCES` where `TYPE`='PROCES_INIT' and ID in (".implode(",", array_keys($CRM_PROCES_USERA_UZYTY_MAP)).") ";
-			$res = $db->query($sql);
-			$CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT = array();
-			while($r = $db->fetch($res)) {
-				$CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT[] = $r->ID;
-			}
-		}
-
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT ('.count($CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT);echo'</pre>';
-
-	}
-
-	function old() {
-		if ($this->_user_id < 0) return false;
-
-	echo '<p>{User id: '.$this->_user_id.'}</p>';
-
-		$db = DB::getDB();
-
-		$ID_ZASOBOW_USERA = array();
-		// ! szukam jakimi user jestem zasobami - jakie stanowiska - wlaczenie uprawnien w oparciu o uprawnienia z SE!!
-		$zap_sql = "select up.`ID_ZASOB`
-			from  `ADMIN_USERS` AS u
-				left join `CRM_AUTH_PROFILE` AS up on(up.`REMOTE_ID`=u.`ID` and up.`REMOTE_TABLE`='ADMIN_USERS') 
-			where
-				up.`A_STATUS` in('WAITING','NORMAL')
-				and u.`ID`='{$this->_user_id}'
-		";
-
-		//Indeksuje kto co moze zrobic
-		//szukam procesów
-		$res = $db->query($zap_sql);
-		while ($r = $db->fetch($res)) {
-			$ID_ZASOBOW_USERA[] = $r->ID_ZASOB;
-		}
-		echo '<p>' . "1. ID_ZASOBOW_USERA: [" . implode(', ', $ID_ZASOBOW_USERA) . "]"  .'</p>';
-
-	if (empty($ID_ZASOBOW_USERA)) {
-		echo '<p style="color:red">' . "Brak przypisanego stanowiska!" . " Zaktualizuj je <a href='procesy5.php?task=USER_EDIT&_user_id=".$_SESSION['ADM_ID']."&_p=0'>tutaj w menu</a> </p>";
-	}
-	else {
-		$ID_PROCESOW_USERA = array();
-		$zap_sql="select p.`ID`
-			from `CRM_PROCES` as p
-				left join `CRM_WSKAZNIK` as w on(p.`ID`=w.`ID_PROCES`)
-			where
-				w.`ID_ZASOB` in(" . implode(",", $ID_ZASOBOW_USERA) . ")
-				and w.`A_STATUS` in('NORMAL', 'WAITING')
-				and p.`A_STATUS` in('NORMAL', 'WAITING')
-		";
-		$res = $db->query($zap_sql);
-		while ($r = $db->fetch($res)) {
-			$ID_PROCESOW_USERA [$r->ID]= true;
-		}
-		$ID_PROCESOW_USERA = array_keys($ID_PROCESOW_USERA);
-
-		echo '<p>' . "2. ID_PROCESOW_USERA: [" . implode(', ', $ID_PROCESOW_USERA) . "]"  .'</p>';
-
-		// ! zapisuje cala tabele procesow do arraya (i procesy powiazane GOTO z IF_TRUE_GOTO_FLAG=1)
-		$CRM_PROCESS_TREE = array();// [PARENT_ID] = ID
-		$zap_sql = "select p.`ID`, p.`PARENT_ID` from `CRM_PROCES` as p where p.`A_STATUS` in('WAITING','NORMAL')
-					 union select p.`IF_TRUE_GOTO` as ID, p.`ID` as PARENT_ID from `CRM_PROCES` as p where p.`A_STATUS` in('WAITING','NORMAL') and p.IF_TRUE_GOTO>0 and p.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN'
-					 ";
-					 //	union select '83','122'		  union select p.`ID` as ID, p.`IF_TRUE_GOTO` as PARENT_ID from `CRM_PROCES` as p where p.`A_STATUS` in('WAITING','NORMAL') and p.IF_TRUE_GOTO>0 
-					//union select '83','122'	
-					//union select '83','2025'	
-		$res = $db->query($zap_sql);
-		while ($r = $db->fetch($res)) {
-			$CRM_PROCESS_TREE[$r->PARENT_ID][] = $r->ID;
-		}
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">3. CRM_PROCESS_TREE (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCESS_TREE);echo'</pre>';
-
-		$CRM_PROCES_USERA_UZYTY = array();
-		$CRM_PROCES_USERA_UZYTY_MAP = array();
-		// ! rekursywnie szukam sciezek procesow powiazanych dla usera procesow
-		foreach ($ID_PROCESOW_USERA as $PU) {
-			$CRM_PROCES_USERA_UZYTY [$PU] = true;
-			if(isset($CRM_PROCES_USERA_UZYTY_FIND))
-			unset($CRM_PROCES_USERA_UZYTY_FIND);
-			$CRM_PROCES_USERA_UZYTY_FIND = $this->find_in_tree_parent_rec_old($CRM_PROCESS_TREE, $PU,'init');
-			if(is_array($CRM_PROCES_USERA_UZYTY_FIND)) {
-				$CRM_PROCES_USERA_UZYTY [$PU] = true; //trzeba dodac sam proces, bo go brakuje w indeksach
-				$CRM_PROCES_USERA_UZYTY_MAP[$PU][]=$PU; //trzeba dodac sam proces, bo go brakowalo w indeksach
-				foreach ($CRM_PROCES_USERA_UZYTY_FIND as $INDEX=>$PU1){
-					$CRM_PROCES_USERA_UZYTY [$PU1] = true;
-					$CRM_PROCES_USERA_UZYTY_MAP[$PU][]=$PU1; //tworze mape procesow od glownego w dol
-				}
-			}
-		}
-		$CRM_PROCES_USERA_UZYTY = array_keys($CRM_PROCES_USERA_UZYTY);
-
-		echo '<p>' . "4. CRM_PROCES_USERA_UZYTY: [" . implode(', ', $CRM_PROCES_USERA_UZYTY) . "]"  .'</p>';
-
-		unset($CRM_PROCESS_TREE);// ???
-
-		//$TREE_CRM_WSKAZNIK = array();
-		$CRM_TREE_WSKAZNIK_NARZEDZIE = array();
-		//$TREE_CRM_WSKAZNIK_DESC = array();
-		$TREE_CRM_WSKAZNIK_CONF = array();
-		$TREE_CRM_WSKAZNIK_SORT_PRIO = array();
-
-		// ! dla sciezek procesow wyszukuje powiazanych zasobow aby dac im permy
-	$zap_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) . ")
-		";
-		if(sizeof($CRM_PROCES_USERA_UZYTY)>0) {
-		$res = $db->query($zap_sql);
-		while ($r = $db->fetch($res)) {
-			if ($r->TYPE == 'NARZEDZIE') { //@2012-10-15 walka z warningami sqix
-				  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 {
-				//$TREE_CRM_WSKAZNIK[$r->ID_ZASOB] .= $r->FORM_TREAT;
-				//$TREE_CRM_WSKAZNIK_DESC[$r->ID_ZASOB] = $r->ZASOB_DESC;
-
-				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)) { //@2012-10-15 walka z warningami sqix
-						  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>";
-				}
-			}
-		}
-		}
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">5. TREE_CRM_WSKAZNIK_CONF (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($TREE_CRM_WSKAZNIK_CONF);echo'</pre>';
-
-if(0) {// OFF TEST - nie ustalaj permów SE
-		$dbg_set_permy = true;
-		// !  inicjalizuje uprawnienia
-		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>"; //@2012-10-15 sqix walka z warningami
-				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; //@2012-10-15 walka z warningami sqix
-				}
-				// 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
-
-		}
-		unset($dbg_set_permy);
-}// if(0) - OFF TEST - nie ustalaj permów SE
-
-	$_SESSION['CRM_PROCES_USERA_UZYTY'] = $CRM_PROCES_USERA_UZYTY;
-	$_SESSION['CRM_PROCES_USERA_UZYTY_MAP'] = $CRM_PROCES_USERA_UZYTY_MAP;
-	$_SESSION['CRM_LISTA_ZASOBOW_TREE'] = $CRM_TREE_WSKAZNIK_NARZEDZIE;//zapisanie jakie zasoby user ma dostepne!!! TODO
-	$_SESSION['CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE'] = $CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE;//zapisanie jakie zasoby user ma dostepne!!! TODO
-
-	// ! tutaj poszukamy co jest proces_init tylko z CRM_PROCES_USERA_UZYTY_MAP
-	if (count($CRM_PROCES_USERA_UZYTY_MAP) > 0) {
-		$sql="select `ID`,`DESC` from `CRM_PROCES` where `TYPE`='PROCES_INIT' and ID in (".implode(",", array_keys($CRM_PROCES_USERA_UZYTY_MAP)).") ";
-		$res = $db->query($sql);
-		$CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT = array();
-		while($r = $db->fetch($res)) {
-			$CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT[] = $r->ID;
-		}
-		$_SESSION['CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT']=$CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT;
-	}
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY ('.count($CRM_PROCES_USERA_UZYTY).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY_MAP ('.count($CRM_PROCES_USERA_UZYTY_MAP).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY_MAP);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_TREE_WSKAZNIK_NARZEDZIE ('.count($CRM_TREE_WSKAZNIK_NARZEDZIE).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_TREE_WSKAZNIK_NARZEDZIE);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE ('.count($CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_WSKAZNIK_PROCES_WSKAZNIK_TREE);echo'</pre>';
-echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">6. CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT ('.count($CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT).') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($CRM_PROCES_USERA_UZYTY_MAP_PROCES_INIT);echo'</pre>';
-
-	}
-	
-	// ! po ustawieniu permow
-
-
-	
-	//nie wiem czy to tu wstawic czy wyzej ??? proba inicjalizacji tabel na bazie uzytych tabel::
-						//zerzniete z MENU by PIOTR by sqix
-					foreach($_SESSION as $COLUMN_INDEX=>$COLUMN_VAR) {
-							if(substr($COLUMN_INDEX,-7)=='_COLUMN') {
-								$prems_ok = false;
-								if (isset($COLUMN_VAR['PERMEDIT'])) {
-									$fields_deafult_R = array('ID','A_RECORD_CREATE_DATE','A_RECORD_CREATE_AUTHOR','A_RECORD_UPDATE_DATE','A_RECORD_UPDATE_AUTHOR');
-									foreach ($COLUMN_VAR['PERMEDIT'] as $k_field => $v_perm) {
-										if (in_array($k_field, $fields_deafult_R)) {
-											continue;
-								
-										}
-										if (false !== strpos($v_perm, 'R')) {
-											$prems_ok = true;
-					
-										}
-									}
-								}
-								if ($prems_ok) {
-									if(substr($COLUMN_INDEX,-12)!='_HIST_COLUMN')  { // jezeli nie jest kolumna HIST!!
-									 	 $RELATIVEDB_TRG_COLUMN_PARM=""; //parametr do przekazanie do funkcji dla extracolumn wirtualnych
-										  if(is_array($COLUMN_VAR))
-											if(isset($COLUMN_VAR['RELATIVEDB']))
-											 if(isset($COLUMN_VAR['RELATIVEDB']['TRG_COLUMN']))
-									 	 	foreach($COLUMN_VAR['RELATIVEDB']['TRG_COLUMN'] as $VCOLUMN=>$VCOLUMN_VAR) {
-									 	 		if(empty($RELATIVEDB_TRG_COLUMN_PARM)) $RELATIVEDB_TRG_COLUMN_PARM=$VCOLUMN;
-									 	 		else  $RELATIVEDB_TRG_COLUMN_PARM.=" ".$VCOLUMN;									 	 
-									 	 	}
-										 SEF('USERS_COLUMN_INIT2');
-										 if(!in_array(substr($COLUMN_INDEX,0,(strlen($COLUMN_INDEX)-7)),$special_tables_ignore_init)) {
-										 //if(!isset($_SESSION[$COLUMN_INDEX]['DESC'])) { 
-									 	 	USERS_COLUMN_INIT2(substr($COLUMN_INDEX,0,(strlen($COLUMN_INDEX)-7)),$RELATIVEDB_TRG_COLUMN_PARM,'N','');
-									 	 }
-									}
-					
-								}
-						    }
-						}
-	}
-
-	/**
-	 * @param str $when_finish - 'init', 'recurs'
-	 */
-	function find_in_tree_parent_rec_old(&$tree, $parent_id, $when_finish, &$items_array = array(), $dbg = false, $rec_limit = 1) {
-		global $special_tables_ignore_init;//,$find_in_tree_parent_rec_return;
-		static $find_in_tree_parent_rec_return;
-
-		if ($dbg) { echo '<p style="margin:0;">' . "find_in_tree_parent_rec_old(tree, $parent_id, $when_finish, ret, $dbg, $rec_limit) find_in_tree_parent_rec_return: [" . implode(', ', $find_in_tree_parent_rec_return) . "] found(" . in_array($parent_id, $find_in_tree_parent_rec_return) . ")"  .'</p>'; }
-
-		if ($when_finish == 'init') {
-			//zerujemy zmienne
-			$find_in_tree_parent_rec_return = array();
-		}
-		else {
-			if (in_array($parent_id, $find_in_tree_parent_rec_return)) {
-				return null;
-			}
-			if (count($find_in_tree_parent_rec_return) > 50) {
-				die('Proces Loop limit!');
-			}
-		}
-
-		$ret = array();
-		$crm_proces_usera_uzyty = array();
-		$ret_array = array();
-		if (isset($tree[$parent_id])) {
-			foreach ($tree[$parent_id] as $IND => $CHILD) {
-				if (in_array($CHILD, $find_in_tree_parent_rec_return)) {
-					continue;
-				}
-
-				$crm_proces_usera_uzyty[] = $CHILD;
-				if ($dbg) { echo '<p style="margin:0;">' . "-- find_in_tree_parent_rec_old(tree, $parent_id, $when_finish, ret, $dbg, $rec_limit) crm_proces_usera_uzyty: [" . implode(', ', $crm_proces_usera_uzyty) . "]"  .'</p>'; }
-				// TODO: $ret_array będize mial tylko wartosci z ostatniego wyszukiwania
-				$ret_array = $this->find_in_tree_parent_rec_old($tree, $CHILD, 'recurs', $items_array, $dbg, $rec_limit);
-			}
-		}
-		if (!empty($ret_array)) {
-			foreach ($ret_array as $proces_id) {
-				$ret[] = $proces_id;
-			}
-		}
-		if (!empty($crm_proces_usera_uzyty)) {
-			foreach ($crm_proces_usera_uzyty as $index => $proces_id) {
-				$find_in_tree_parent_rec_return[] = $proces_id;
-				$ret[] = $proces_id;
-			}
-		}
-		//kiedy jest ostatnia petla wyswietlamy wynik drzewa
-		if ($when_finish == 'init') {
-			if ($dbg) { echo '<p style="margin:0;color:green;">' . "---- find_in_tree_parent_rec_old find_in_tree_parent_rec(..., $parent_id, $when_finish, ret, $dbg, $rec_limit) ret: [" . implode(', ', $find_in_tree_parent_rec_return) . "]"  .'</p>'; }
-			return $find_in_tree_parent_rec_return;
-		}
-		else {
-			if ($dbg) { echo '<p style="margin:0;">' . "---- return find_in_tree_parent_rec_old(..., $parent_id, $when_finish, ret, $dbg, $rec_limit) ret: [" . implode(', ', $ret) . "]"  .'</p>'; }
-			return $ret;
-		}
-	}
-
-	function find_in_tree_parent_rec(&$tree, $parent_id, &$ret_array = array(), $dbg = false, $rec_limit = 1) {
+	function find_in_tree_parent_rec(&$tree, $parent_id, &$ret_array = array(), $dbg = false, $rec_limit = 1) {// TODO: RM used in _createUsedProcesMap
 		if ($dbg) { echo '<p style="margin:0;">' . "find_in_tree_parent_rec(tree, $parent_id, ret, $dbg, $rec_limit) find_in_tree_parent_rec_return: [" . implode(', ', $find_in_tree_parent_rec_return) . "] found(" . in_array($parent_id, $ret_array) . ")"  .'</p>'; }
 
 		if (isset($tree[$parent_id])) {
@@ -765,12 +314,12 @@ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:
 	 * Check if perms are only for one proces.
 	 * @returns int or false
 	 */
-	public function getPermsFiltrProcesId() {
+	public function getPermsFiltrProcesId() {// TODO: RMME mved to getFilterIdProces
+		return $this->getFilterIdProces();
+	}
+	public function getFilterIdProces() {
 		$procesID = $this->_cache_read('permsByProcesID');
-		if ($procesID > 0) {
-			return $procesID;
-		}
-		return false;
+		return ($procesID > 0)? $procesID : false;
 	}
 
 	public function fetchAllPerms($force = false) {
@@ -787,161 +336,87 @@ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:
 	private function _fetchPerms($type, $force = false) {
 		$db = DB::getDB();
 
-		$foundTools = array();// TODO: rename to $foundTools
-		$foundUrls = array();// TODO: old ['MENU_SELECT_PROCES_DATA']['MENU_COLUMN']
-		$foundTbls = array();// TODO: old $CRM_WSKAZNIK_PROCES_WSKAZNIK_TABELA_KONFIG, $TREE_CRM_WSKAZNIK_CONF, ...
-		$foundMap = array();
 		$procesID = 0;// if 0 - All, alse perms by procesID
+		$foundUrls = array();
+		$foundTbls = array();
 
 		if ($force) {
-			if (!$procesID) {
-				$foundMap = $this->_cache_read('foundMap');
-			}
 			$this->_cache_clear();
 		}
 
-		$usedProcesListIds = array();
 		$schemaReader = new SchemaReader();
 		if ($type == 'All') {
 			$schemaReader->getAll();
-			$usedProcesListIds = $this->getUsedProcesIds();
 		} else if (is_numeric($type) && $type > 0) {
 			$procesID = (int)$type;
-			$usedProcesListIds = $this->getUsedProcesIds($procesID);
-		}
-		if (empty($usedProcesListIds)) {
-			return;
 		}
 
-		IF('123'==V::get('DBG_ACL','',$_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$usedProcesListIds (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): [';echo implode(',', $usedProcesListIds);echo']</pre>';}
-		{// fetch from schema files
+		{// TODO: fetch from schema files
 		if ($schemaReader->hasProcessConfigs()) {
 			foreach ($schemaReader->getProcessConfigs() as $process) {
-				if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">process (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($process);echo'</pre>';}
+				DBG::_('DBG_SCH', '1', "process", $process, __CLASS__, __FUNCTION__, __LINE__ );
 				if ($process->hasAccess()) {
 					$tables = $process->getTables();
-					if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$tables (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($tables);echo'</pre>';}
-					foreach ($tables as $table) {
-						$tblUri = $table->getUri();
+					DBG::_('DBG_SCH', '1', "tables", $tables, __CLASS__, __FUNCTION__, __LINE__ );
+					foreach ($tables as $vTable) {
+						$tblUri = $vTable->getUri();
 						$zasobTblInfo = ProcesHelper::getZasobTableInfoByUri($tblUri);
-						if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">table('.$table->getLabel().') $zasobTblInfo (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($zasobTblInfo);echo'</pre>';}
+						DBG::_('DBG_SCH', '1', "table(" . $vTable->getLabel() . ")", $zasobTblInfo, __CLASS__, __FUNCTION__, __LINE__ );
 						if ($zasobTblInfo) {
-
-							if (!array_key_exists($zasobTblInfo->ID, $foundTbls)) {
-								$tblAcl = new TableAcl($zasobTblInfo->ID);
-								$tblAcl->setDB($zasobTblInfo->P__ID);
-								$tblAcl->setName($zasobTblInfo->DESC);// $table->getName()
-								$tblAcl->setLabel($zasobTblInfo->DESC_PL);// $table->getLabel()
-								$tblAcl->setOpis($zasobTblInfo->OPIS);// $table->getDescription()
-								$foundTbls[$zasobTblInfo->ID] = $tblAcl;
+							$idTable = $zasobTblInfo->ID;
+							// TODO: use $vTableAcl = TableAcl::buildInstance($idTable, $tableConfig);
+							// TODO: then $vTableAcl->init();// to save table fields
+
+							if (!array_key_exists($idTable, $foundTbls)) {
+								$tableConfig = array();
+								$tableConfig['ID_TABLE'] = $idTable;
+								$tableConfig['db'] = $zasobTblInfo->P__ID;
+								$tableConfig['name'] = $zasobTblInfo->DESC;
+								$tableConfig['label'] = $zasobTblInfo->DESC_PL;
+								$tableConfig['opis'] = $zasobTblInfo->OPIS;
+								$foundTbls[$idTable] = $tableConfig;
 							}
+							$tableAcl = TableAcl::buildInstance($idTable, $foundTbls[$idTable]);
 
-							$fldsInfo = ProcesHelper::getZasobTableFieldsInfo($zasobTblInfo->ID);
-							foreach ($table->getFields() as $field) {
+							$fieldsConfig = array();
+							$fldsInfo = ProcesHelper::getZasobTableFieldsInfo($idTable);
+							foreach ($vTable->getFields() as $field) {
 								$fldInfo = V::get($field->getName(), null, $fldsInfo);
 								if ($fldInfo) {
-									if (!$foundTbls[$zasobTblInfo->ID]->hasField($r->ID_ZASOB)) {
-										$foundTbls[$zasobTblInfo->ID]->addField($fldInfo->ID, $fldInfo->DESC, $fldInfo->OPIS, $fldInfo->SORT_PRIO, $fldInfo->DESC_PL);
+									if (!array_key_exists($fldInfo->ID, $fieldsConfig)) {//if (!$tableAcl->hasField($fldInfo->ID)) {
+										$fieldsConfig[$fldInfo->ID] = array();
+										$fieldsConfig[$fldInfo->ID]['ID_CELL'] = $fldInfo->ID;
+										$fieldsConfig[$fldInfo->ID]['CELL_NAME'] = $fldInfo->DESC;
+										$fieldsConfig[$fldInfo->ID]['CELL_DESC'] = $fldInfo->OPIS;
+										$fieldsConfig[$fldInfo->ID]['SORT_PRIO'] = $fldInfo->SORT_PRIO;
+										$fieldsConfig[$fldInfo->ID]['CELL_LABEL'] = $fldInfo->DESC_PL;
+										$fieldsConfig[$fldInfo->ID]['FORM_TREAT'] = '';
+										//$tableAcl->addField($fldInfo->ID, $fldInfo->DESC, $fldInfo->OPIS, $fldInfo->SORT_PRIO, $fldInfo->DESC_PL);
 									}
 
-									$foundTbls[$zasobTblInfo->ID]->setFieldPerms($fldInfo->ID, $field->getPerms());
+									// TODO: $field->getPerms() -> PERM_R, PERM_W, ... etc.?
+									$fieldsConfig[$fldInfo->ID]['FORM_TREAT'] .= $field->getPerms();//$tableAcl->setFieldPerms($fldInfo->ID, $field->getPerms());
 								}
 							}
+							$tableAcl->initFieldsFromConfig($fieldsConfig);
+							DBG::_('DBG_SCH', '1', "fieldsConfig({$idTable})", $fieldsConfig, __CLASS__, __FUNCTION__, __LINE__);
+							$tableAcl->save();
+							DBG::_('DBG_SCH', '1', "tableAcl({$idTable})", $tableAcl, __CLASS__, __FUNCTION__, __LINE__);
 						}
 					}
 				}
 			}
+		} else {
+			DBG::_('DBG_SCH', '1', "NO \$schemaReader->hasProcessConfigs()", null, __CLASS__, __FUNCTION__, __LINE__);
 		}
-		if('1' == V::get('DBG_SCH', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$foundTbls (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($foundTbls);echo'</pre>';}
+		DBG::_('DBG_SCH', '1', "foundTbls", $foundTbls, __CLASS__, __FUNCTION__, __LINE__);
 		}// fetch from schema files
 
-		{// fetch from DB
-		$sql = "select t1.`ID_PROCES`
-				, t1.`ID` as ID_WSKAZNIK
-				, t1.`ID_ZASOB`
-				, replace(t2.`FORM_TREAT`, ',', '') as FORM_TREAT
-				, t3.`DESC` as ZASOB_DESC
-				, t3.`DESC_PL` as ZASOB_DESC_PL
-				, t3.`OPIS` as ZASOB_OPIS 
-				, t3.`SORT_PRIO` as z__SORT_PRIO
-				, t3.`TYPE`
-				, t4.`DESC` as PARENT_ZASOB_DESC
-				, t4.`DESC_PL` as PARENT_ZASOB_DESC_PL
-				, t4.`OPIS` as PARENT_ZASOB_OPIS
-				, t4.`TYPE` as PARENT_TYPE
-				, t4.`ID` as ZASOB_PARENT_ID
-				, t5.`ID` as ID_BAZY_KONFIG
-			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)
-				left join `CRM_LISTA_ZASOBOW` as t5 on (t5.ID=t4.PARENT_ID)
-			where
-				(
-					( t3.`TYPE`='KOMORKA' and t4.`TYPE`='TABELA' )
-					or (t3.`TYPE`='URL')
-		--			or (t3.`TYPE`='NARZEDZIE')
-				)
-				and t1.`A_STATUS` in('NORMAL', 'WAITING')
-				and t1.`ID_PROCES` in(" . implode(",", $usedProcesListIds) . ")
-		";
-		$res = $db->query($sql);
-		while ($r = $db->fetch($res)) {
-			if ($r->TYPE == 'URL') {
-				$foundUrls[$r->ID_ZASOB] = $r->ZASOB_OPIS;
-			}
-			else if ($r->TYPE == 'NARZEDZIE') {
-				if (!array_key_exists($r->ID_ZASOB, $foundTools)) {
-					$foundTools[$r->ID_ZASOB] .= $r->FORM_TREAT;
-				}
-				else {
-					$foundTools[$r->ID_ZASOB] = $r->FORM_TREAT;
-				}
-			}
-			else {
-				if ($r->PARENT_TYPE == 'TABELA') {
-					// t3 - KOMORKA, t4 - TABELA, t5 - DATABASE
-					if (!array_key_exists($r->ZASOB_PARENT_ID, $foundTbls)) {
-						$foundTbls[$r->ZASOB_PARENT_ID] = new TableAcl($r->ZASOB_PARENT_ID);
-						$foundTbls[$r->ZASOB_PARENT_ID]->setDB($r->ID_BAZY_KONFIG);
-						$foundTbls[$r->ZASOB_PARENT_ID]->setName($r->PARENT_ZASOB_DESC);
-						$foundTbls[$r->ZASOB_PARENT_ID]->setLabel($r->PARENT_ZASOB_DESC_PL);
-						$foundTbls[$r->ZASOB_PARENT_ID]->setOpis($r->PARENT_ZASOB_OPIS);
-					}
-
-					if (!$foundTbls[$r->ZASOB_PARENT_ID]->hasField($r->ID_ZASOB)) {
-						$foundTbls[$r->ZASOB_PARENT_ID]->addField($r->ID_ZASOB, $r->ZASOB_DESC, $r->ZASOB_OPIS, $r->z__SORT_PRIO, $r->ZASOB_DESC_PL);
-					}
-
-					if (!empty($r->FORM_TREAT)) {
-						$foundTbls[$r->ZASOB_PARENT_ID]->setFieldPerms($r->ID_ZASOB, $r->FORM_TREAT);
-					}
-
-					if (!$procesID) {
-						$foundMap[$r->ZASOB_PARENT_ID][$r->ID_PROCES] = true;
-					}
-				}
-			}
-		}
-		}// fetch from DB
-
-		// build $foundMap
-		if (!$procesID) {
-			$map = $this->getUsedProcesMap();
-			foreach ($foundMap as $kTblId => $vMap) {
-				foreach ($vMap as $kProcesId => $vProcesInitId) {
-					foreach ($map as $kPInitId => $vStepIds) {
-						if (in_array($kProcesId, $vStepIds)) {
-							$foundMap[$kTblId][$kProcesId] = $kPInitId;
-							break;
-						}
-					}
-				}
-			}
-		}
+		$this->setFilterIdProces($procesID);//$this->_cache_save('permsByProcesID', $procesID);
 
 		if (1) {
 			$sqlIdProcesListSql = $this->getUsedUserProcesIdsSql();
+
 			$userAccessForTables = array();
 			$sql = <<<SQL
 			select tpvg.`ID_TABLE`
@@ -959,14 +434,39 @@ SQL;
 			while ($h = $db->fetch_assoc($res)) {
 				$userAccessForTables[$h['ID_TABLE']] = $h;
 			}
-			//echo'<pre>$userAccessForTables ';print_r($userAccessForTables);echo'</pre>';
-			$foundTbls = $userAccessForTables;
+			DBG::_('DBG_SCH', '1', "userAccessForTables", $userAccessForTables, __CLASS__, __FUNCTION__, __LINE__ );
+			foreach ($userAccessForTables as $idTable => $tableConfig) {
+				if (!array_key_exists($idTable, $foundTbls)) {
+					$foundTbls[$idTable] = $tableConfig;
+				}
+			}
+
+			$userAccessForUrls = array();
+			$sql = <<<SQL
+			select upvg.`ID_URL`
+				, upvg.`URL_LINK` as `link`
+				, upvg.`URL_LABEL` as `label`
+				, upvg.`URL_DESC` as `opis`
+			from `CRM_PROCES_idx_URL_TO_PROCES_VIEW` as upvg
+			where upvg.`ID_PROCES` in({$sqlIdProcesListSql})
+			group by upvg.`ID_URL`
+SQL;
+			//echo'<pre>$userAccessForUrls - $sql ';print_r($sql);echo'</pre>';
+			$db = DB::getDB();
+			$res = $db->query($sql);
+			while ($h = $db->fetch_assoc($res)) {
+				$userAccessForUrls[$h['ID_URL']] = $h;
+			}
+			//echo'<pre>$userAccessForUrls ';print_r($userAccessForUrls);echo'</pre>';
+			//TODO: $foundUrls = $userAccessForUrls;
 		}
 
 		$this->_cache_save('foundUrls', $foundUrls);
 		$this->_cache_save('foundTables', $foundTbls);
+	}
+
+	public function setFilterIdProces($procesID) {
 		$this->_cache_save('permsByProcesID', $procesID);
-		$this->_cache_save('foundMap', $foundMap);
 	}
 
 	public function getPermsForTable($idTable) {
@@ -1005,8 +505,9 @@ SQL;
 		$userPermsForTable = array();
 		$db = DB::getDB();
 		$res = $db->query($tableCellToProcesSql);
-		while ($r = $db->fetch($res)) {
-			$userPermsForTable[$r->ID_CELL] = $r;
+		while ($h = $db->fetch_assoc($res)) {
+			$idCell = $h['ID_CELL'];
+			$userPermsForTable[$idCell] = $h;
 		}
 		return $userPermsForTable;
 	}
@@ -1018,6 +519,15 @@ SQL;
 	}
 
 	public function getUsedUserProcesIdsSql() {
+		$filterIdProces = $this->getFilterIdProces();
+		if ($filterIdProces > 0) {
+			return <<<SQL
+				select i.`ID_PROCES`
+					from `CRM_PROCES_idx` i
+					where i.`idx_PROCES_INIT_ID`='{$filterIdProces}'
+SQL;
+		}
+
 		$idUserGroupList = $this->getUsedUserGroupIds();
 		$sqlIdUserGroupList = implode(",", $idUserGroupList);
 		// TODO: acl filtr by proces id
@@ -1027,4 +537,5 @@ SQL;
 				where gi.`ID_GROUP` in({$sqlIdUserGroupList})
 SQL;
 	}
+
 }