<?php

/*
class CRM_PROCES_SIGCONT {

	var $ID_LOG;
	var $log_unserialized;
		function CRM_PROCESS_SIGCONT($ID_LOG,$log_unserialized) {
			$this->ID_LOG=$ID_LOG;
			$this->log_unserialized2=$log_unserialized;
		}


	
		
	
}

*/

	function CRM_PROCES_NAVIGATOR() {
	
		//Process navigator temp
		echo "<table border=1>";
					echo "<tr><td>ID LOG</td><td>ID_PROCES_INIT</td><td>ID_STEP</td><td>ADM_ACCOUNT</td><td>WAIT_FOR_SIGNAL</td></tr>";
		 $sql="select ID,ID_PROCES_INIT,ID_STEP,ADM_ACCOUNT,TYPE  from CRM_PROCES_LOG where ADM_ACCOUNT='TODO_ADMIN_TEST' and TYPE!='EXIT_0'";
		 $res = DB::query($sql) or die('problem ze sql');
		 ////CRM_PROCES_CALL(2207,'INIT','');
		 echo "<form><input type=hidden name=CRM_PROCES_NAVIGATOR_INIT value=1>";
		 		echo "\n<tr><td colspan=5><select name=CRM_PROCES_NAVIGATOR_INIT_NEW_PROCES>";
		 		$sel=DB::query("select `ID`,`DESC` from CRM_PROCES where TYPE='PROCES_INIT' and A_STATUS!='DELETED' ");
		 		 	while ($hh = DB::fetch( $sel )) {
		 		 	echo "\n<option name=".$hh->ID.">".$hh->ID." ".$hh->DESC."</option>";
		 		 	}
		 		 	//	<input type=text name=CRM_PROCES_NAVIGATOR_INIT_NEW_PROCES>
		 		echo "</select></td><td><input type=submit value=Uruchom proces></td></tr>";
		 echo "</form>";
			while ($h = DB::fetch( $res )) {
				echo "\n<tr><td>".$h->ID."</td><td>".$h->ID_PROCES_INIT."</td><td>".$h->ID_STEP."</td><td>".$h->ADM_ACCOUNT."</td><td>";
				if($h->TYPE=='SIGTERM') $mysig='CALL';
				if($h->TYPE=='SIGCONT') $mysig='SIGCONT';
				echo $h->TYPE;
				echo "<a href=?CRM_PROCES_NAVIGATOR_MENU=1&WAIT_FOR_SIGNAL=".$mysig."&ID_LOG=".$h->ID.">";
				echo " Send ".$mysig." to IT! ";
				echo "</a></td></tr>";
			}

		echo "</table>";
		//testuje proces 


	}



	class CRM_PROCES_CALL_cls {		
		var $ID_LOG ;
		var $WAIT_FOR_SIGNAL;
		
		
		
		
		
		function CRM_PROCES_CALL_cls($ID_LOG,$WAIT_FOR_SIGNAL) {
		   $this->ID_LOG=$ID_LOG;
		   $this->WAIT_FOR_SIGNAL=$WAIT_FOR_SIGNAL;
		}


		function CRM_PROCES_CALL_init_new_proces($ID_PROCES) {
		
		
					$zap_sql="insert into CRM_PROCES_LOG ( `TYPE`, `ID_PROCES_INIT`, `ID_STEP`, `ADM_ACCOUNT`) 
					  values ('SIGTERM' , '".$ID_PROCES."', '".self::CRM_PROCESS_CALL_get_proc_w_from_INIT($ID_PROCES)."' ,'TODO_ADMIN_TEST') ";
					$res = DB::query($zap_sql);
					$ID_LOG_new=DB::insert_id();
					$this->ID_LOG_new=$ID_LOG_new;
					DEBUG_S(-3,'CRM_PROCES_CALL_init_new_proces wyzwolilo nowy numer procesu z numerem log ',$ID_LOG_new, __FILE__, __FUNCTION__, __LINE__);	
		}

		function CRM_PROCESS_CALL_get_proc_w_from_INIT($ID_PROCES) { //funkcja wylistowuje jeden pierwszy wskaznik dla procesu
					$sql="select cw.ID
					from CRM_WSKAZNIK as cw 
					where cw.ID_PROCES='".$ID_PROCES."' and cw.A_STATUS!='DELETED'	
					order by cw.SORT_PRIO limit 1";
					DEBUG_S(-3,'sql',$sql, __FILE__, __FUNCTION__, __LINE__);					
			$res = DB::query($sql);
				while ($h = DB::fetch( $res )) {
					return $h->ID;
				}

		}


		
		function CRM_PROCES_CALL_set_process_NEXT_PROCES_STEP($NEXT_PROCES_STEP) {
			$this->NEXT_PROCES_STEP=$NEXT_PROCES_STEP;
		}
		function CRM_PROCES_CALL_set_process_log($log) {
			$this->log=$log;
		}
		function CRM_PROCES_CALL_set_process_NEW_WAIT_FOR_SIGNAL($NEW_WAIT_FOR_SIGNAL) {
			$this->NEW_WAIT_FOR_SIGNAL=$NEW_WAIT_FOR_SIGNAL;
		}

		
		function CRM_PROCES_CALL_set_process_params() {
		    
			$sql="update  CRM_PROCES_LOG set ID='".$this->ID_LOG."' ";
				if(isset($this->NEXT_PROCES_STEP)) $sql.=" , ID_STEP='".$this->NEXT_PROCES_STEP."' ";
				if(isset($this->NEW_WAIT_FOR_SIGNAL)) $sql.=" , TYPE='".$this->NEW_WAIT_FOR_SIGNAL."' ";
				if(isset($this->log)) $sql.=" , log='".mysql_real_escape_string(serialize($this->log))."'";

				// $sql.=" where ID='".$this->ID_LOG."' and TYPE='".$this->WAIT_FOR_SIGNAL."'";// SIGCONT SIGTERM
			$res = DB::query($sql) or die('problem ze sql');
			DEBUG_S(-3,'CRM_PROCES_CALL_set_process_params ',array($this->NEXT_PROCES_STEP,$this->NEW_WAIT_FOR_SIGNAL,$this->log,$sql), __FILE__, __FUNCTION__, __LINE__);					
				
		}
		
		
		function CRM_PROCES_CALL_get_next_process_step() {
		//funkcja wyswietla kolejny numer ID procesu, jaki powinien byc uruchomiony 
			echo "teeest";
			if(!isset($this->ID_STEP)) die('Should firstly init ID_STEP');
			$sql="select ID from CRM_PROCES where PARENT_ID='".$this->ID_STEP."' order by SORT_PRIO limit 1";
			$res = DB::query($sql) or die('problem ze sql');
				while ($h = DB::fetch( $res )) {
					$this->NEXT_PROCES_STEP=$h->ID;
				}
				if(!isset($this->NEXT_PROCES_STEP)) {
					DEBUG_S(-3,'CRM_PROCES_CALL_get_next_process brak kolejnego procesu podrzednego , sprawdzam proces nizej',$sql, __FILE__, __FUNCTION__, __LINE__);					
					$sql="select t2.ID, t2.PARENT_ID ,t2.SORT_PRIO from CRM_PROCES as t1 
						  left join CRM_PROCES as t2 on t2.PARENT_ID=t1.PARENT_ID
						  where t1.ID='".$this->ID_STEP."' 
							and t2.A_STATUS!='DELETED' order by t2.SORT_PRIO ";
					$res = DB::query($sql) or die('problem ze sql');
						$FLAG_nastepny_to_NEXT_ID=false;
						while ($h = DB::fetch( $res )) {
						if($FLAG_nastepny_to_NEXT_ID)$this->NEXT_PROCES_STEP=$h->ID;
						if($h->ID==$this->ID_STEP) $FLAG_nastepny_to_NEXT_ID=true;
					}
					if(DB::num_rows()==0) {
						DEBUG_S(-3,'Brak kolejnego procesu bedziemy robic terminate prawidlowe','', __FILE__, __FUNCTION__, __LINE__);					
						CRM_PROCES_CALL('','EXIT_0',$this->ID_LOG);

					}


				} else if(!isset($this->NEXT_PROCES_STEP)) {
					DEBUG_S(-3,' brak nastepnego procesu - bedziemy robic TERMINATE ',$sql, __FILE__, __FUNCTION__, __LINE__);									
				}
			
			DEBUG_S(-3,'sql ',$sql, __FILE__, __FUNCTION__, __LINE__);					

		
		}

		
				
	 function CRM_PROCES_CALL_get_data_from_log(){
			//funkcja wyzwalana w wielu miejscach dotyczaca odczytu danych proces_log - rozjasnia kod
				    $sql="select ID_STEP , log from CRM_PROCES_LOG where ID='".$this->ID_LOG."' and TYPE='".$this->WAIT_FOR_SIGNAL."' limit 1 ";
				echo $sql;
			    $res = DB::query($sql);
				while ($h = DB::fetch( $res )) {
					$this->ID_STEP=$h->ID_STEP;
					$this->log_unserialized=unserialize($h->log);
				}
				if(!isset($this->ID_STEP)) { DEBUG_S(-3,'BRAK ID_STEP',$sql, __FILE__, __FUNCTION__, __LINE__);	 die(''); }	
				DEBUG_S(-3,'CRM_PROCES_CALL_get_data_from_log',array($this->ID_LOG,$this->WAIT_FOR_SIGNAL), __FILE__, __FUNCTION__, __LINE__);	
		}
	}


// ################### NEW CLASS


	class CRM_PROCES_CALL_process_log {		
		var $log_unserialized ;		
		function CRM_PROCES_CALL_process_log($log_unserialized,$ID_STEP,$ID_LOG) {
		   $this->log_unserialized=$log_unserialized;
		   $this->ID_STEP=$ID_STEP;
		   $this->ID_LOG=$ID_LOG;
		}
		
		

		

		function CRM_PROCESS_CALL_list_proc_w() { //funkcja wylistowuje wskazniki z podanego ID_PROCESu (ID_STEP)
					$sql="select replace(cp.FORM_TREAT,',','') as FORM_TREAT, cz.`DESC` as cz_DESC, cz.`OPIS` as cz_OPIS,  cw.ID, cw.PARENT_ID , cw.ID_PROCES , cw.ID_ZASOB, cw.OPIS_ZASOB, cw.TYP, cw.ID_PRZYPADEK, cw.EXPORT_WSKAZNIK 
					from CRM_WSKAZNIK as cw 
					left join CRM_LISTA_ZASOBOW as cz on cz.ID=cw.ID_ZASOB
					left join CRM_PRZYPADEK as cp on cp.ID=cw.ID_PRZYPADEK
					left join CRM_WSKAZNIK as cw_search on cw_search.ID_PROCES=cw.ID_PROCES
					 left join CRM_LISTA_ZASOBOW as cz_search on cz_search.ID=cw_search.ID_ZASOB
					where cw_search.ID='".$this->ID_STEP."' and cw.A_STATUS!='DELETED' and cz_search.PARENT_ID=cz.PARENT_ID	";
					DEBUG_S(-3,'sql',$sql, __FILE__, __FUNCTION__, __LINE__);					
			$res = DB::query($sql);
				while ($h = DB::fetch( $res )) {
//					$RETURN['LISTA'][$h->ID]=$h;
//					$RETURN['LISTA_'.$h->FORM_TREAT][$h->ID]=$h->PARENT_ID;
					$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$h->ID]=$h;
					$this->CRM_PROCESS_CALL_list_proc_w['LISTA_'.$h->FORM_TREAT][$h->ID]=1;//$h->PARENT_ID;
//					$RETURN['LISTA_VAR_STATUS'][$h->ID]['VAR_STATUS']=self::CRM_PROCESS_CALL_translate_VAR_STATUS_from_PARENT_ID($h->ID,$h->PARENT_ID,$h->FORM_TREAT);
					$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$h->ID]['VAR_STATUS']=self::CRM_PROCESS_CALL_translate_VAR_STATUS_from_PARENT_ID($h->ID,$h->PARENT_ID,$h->FORM_TREAT);
				}

			return $RETURN;
		}

		function CRM_PROCES_CALL_group_kroki_p() { 
		//funkcja grupuje wskazniki dotyczace jednego i tego samego parent id - jednej tabeli. 
		//W procesie moze byc kilka zapytan do bazy dotyczacych roznych tabel - trzeba je rozpatrywac indywidualnie
		//funkcja tworzy zmienna array(n1(array_wskazniki_z_jednej_tabeli),n2(array_wskazniki_z_drugiej_tabeli),,,)
		//n1,n2 to liczby kolejne
			$KROK=0;
			
			foreach ($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $wsk=>$wsk_dane) {
					//print_r($wsk);
					//die();
					$CURR=self::CRM_PROCES_CALL_sh_p($wsk);
				if(!isset($LAST)) {
					$LAST=$CURR['PARENT_ZASOB'];
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST][$wsk]=$CURR['ZASOB_KOMORKA'];
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST]['DANE_DO_WYBORU_DLA_USERA_KEY']=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);
					$LISTA_DO_TEJ_SAMEJ_TABELI['KROKI'][$LAST]=$CURR;
					$LISTA_DO_TEJ_SAMEJ_TABELI['DANE_DO_WYBORU_DLA_USERA_KEY'][$wsk]=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);
				} else if($LAST!=$CURR['PARENT_ZASOB']) {
					$KROK++; $LAST=$CURR['PARENT_ZASOB'];
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST][$wsk]=$CURR['ZASOB_KOMORKA'];
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST]['DANE_DO_WYBORU_DLA_USERA_KEY']=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);					
					$LISTA_DO_TEJ_SAMEJ_TABELI['KROKI'][$LAST]=$CURR;
					$LISTA_DO_TEJ_SAMEJ_TABELI['DANE_DO_WYBORU_DLA_USERA_KEY'][$wsk]=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);
				} else if($LAST==$CURR['PARENT_ZASOB']) {
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST][$wsk]=$CURR['ZASOB_KOMORKA'];
					$LISTA_DO_TEJ_SAMEJ_TABELI['TABELA'][$LAST]['DANE_DO_WYBORU_DLA_USERA_KEY']=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);					
					$LISTA_DO_TEJ_SAMEJ_TABELI['KROKI'][$LAST]=$CURR;
					$LISTA_DO_TEJ_SAMEJ_TABELI['DANE_DO_WYBORU_DLA_USERA_KEY'][$wsk]=self::CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($wsk);
					
				}
			
			}
			$this->CRM_PROCES_CALL_group_kroki_p=$LISTA_DO_TEJ_SAMEJ_TABELI;
		//	return $LISTA_DO_TEJ_SAMEJ_TABELI;
		}


		function CRM_PROCES_CALL_sh_p($ID_WSKAZNIKA) { //fukcja pokazuje parent ID zasobu dowiazanego do danego wskaznika
			$res = DB::query("select cz.PARENT_ID , cz.`DESC` from CRM_WSKAZNIK as cw right join CRM_LISTA_ZASOBOW as cz on cz.ID=cw.ID_ZASOB where cw.ID='".$ID_WSKAZNIKA."' and cz.`TYPE`='KOMORKA' ");
				while ($h = DB::fetch( $res )) {
				//	$this->CRM_PROCES_CALL_sh_p['PARENT_ZASOB']=$h->PARENT_ID;
				//	$this->CRM_PROCES_CALL_sh_p['ZASOB_KOMORKA']=$h->DESC;
					$RETURN['PARENT_ZASOB']=$h->PARENT_ID;
					$RETURN['ZASOB_KOMORKA']=$h->DESC;

				}
			$res = DB::query("select cz.`PARENT_ID`, cz.`DESC` from CRM_LISTA_ZASOBOW as cz where cz.ID='".$RETURN['PARENT_ZASOB']."'  ");
				while ($h = DB::fetch( $res )) {
				//	$this->CRM_PROCES_CALL_sh_p['PARENT_DATABASE_CONF_ID']=$h->PARENT_ID;
				//	$this->CRM_PROCES_CALL_sh_p['PARENT_TABLE_NAME']=$h->DESC;
				//	$this->CRM_PROCES_CALL_sh_p['DOTYCZY_WSKAZNIKA']=$ID_WSKAZNIKA;
					
					$RETURN['PARENT_DATABASE_CONF_ID']=$h->PARENT_ID;
					$RETURN['PARENT_TABLE_NAME']=$h->DESC;
					$RETURN['DOTYCZY_WSKAZNIKA']=$ID_WSKAZNIKA;
				}
			return $RETURN;	
		}

	    function CRM_PROCES_CALL_evaluate_possible_variables() { 
	    
	    
			DEBUG_S(-3,'bede ewaluowac wszysktie zmienne w LISTA_VAR_STATUS TO_EVALUATE_FROM_ID',$this, __FILE__, __FUNCTION__, __LINE__);
			//najpierw nadpisuje zmienne z loga
			foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $WSK=>$WSK_VAL){
				if(isset($this->log_unserialized['LISTA'][$WSK])) {
					DEBUG_S(-3,'Nadpisuje zmienna CRM_PROCESS_CALL_list_proc_w[LISTA] z log_unserialized',$WSK, __FILE__, __FUNCTION__, __LINE__);
				 	$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]=$this->log_unserialized['LISTA'][$WSK];
				 	$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]=$this->log_unserialized['LISTA_VAR_STATUS'][$WSK];

				 	
				}
			}
			
			
			//najpierw jade po starych danych pokazanych do usera i je evaluuje - potem robie to po biezacych zmiennych i podstawiam do starych danych 
			foreach ($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'] as $ID_TABELI=>$DANE_DLA_TABELI) {
					foreach($DANE_DLA_TABELI['LISTA_VAR_STATUS'] as $WSK=>$WSK_DANE) { //przegladam zmienne o oznaczonych wlasciwosciach wczesniej zadanych ( z poprzedniego wyzwolenia ) 
						if($WSK_DANE['VAR_STATUS']=='TO_SEARCH') { //znalazlem oczekiwana zmienna do szukania
							$WSK_DESC=$DANE_DLA_TABELI['KOLUMNY'][$WSK]; //ustalam nazwe wskaznika uzywanego wewnetrznie ( zmienna nie moze miec samych cyfr)
							//if($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI])
							//die();
						//	if(isset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI])) //jezeli byly dane przekazane wczesniej IO
						//x1
						//	foreach($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI] as $ROW=>$DANE_WYBRANE) {
							if(count($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI])==1){ 
							  echo "<br> Sprawdzam dla ".$WSK_DESC." ROWS".$ROW." ";
							//	if(isset($DANE_WYBRANE->$WSK_DESC))  { echo " WYbrano dane ".$DANE_WYBRANE->$WSK_DESC;
									DEBUG_S(-3,' odnalazlem wartosc dla poszukiwanej zmiennej z poprzedniego wyzwolenia procesu',array($WSK_DANE,$WSK_DESC,$DANE_WYBRANE->$WSK_DESC), __FILE__, __FUNCTION__, __LINE__);
									//nadpisuje lokalne wartosci, ktore beda potem zapisane do $log
									$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID=key($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI]);
									//$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID=$DANE_WYBRANE->$WSK_DESC; //todo trzeba bedzie wywalic kopiowanie tych danych w dwoch miejscach
									$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']='TO_EVALUATE_FROM_ID_KEY';
									
							//	}
							}
						//x1	}
							
						}
					} 
			} 
			//teraz jade po zmiennych jakie pojawily sie w tym kroku i staram sie je zaevaluowac zmiennymi z loga 
			foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $WSK=>$WSK_VAL) {
					if($this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']=='TO_EVALUATE_FROM_ID') {
						if($this->log_unserialized['LISTA_VAR_STATUS'][$WSK_VAL->PARENT_ID]['VAR_STATUS']=='VALUE') {
								$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID=$this->log_unserialized['LISTA'][$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID]->PARENT_ID;
								$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']='VALUE';
								DEBUG_S(-3,' odnalazlem wartosc dla poszukiwanej zmiennej z poprzedniego kroku',array($WSK,$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS'],$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID), __FILE__, __FUNCTION__, __LINE__);
						 } 	else if($this->log_unserialized['LISTA_VAR_STATUS'][$WSK_VAL->PARENT_ID]['VAR_STATUS']=='TO_EVALUATE_FROM_ID_KEY') {
						 		DEBUG_S(-3,' odnalazlem wartosc dla poszukiwanej zmiennej z poprzedniego kroku w stylu TO_EVALUATE_FROM_ID_KEY ',array($WSK,$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS'],$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID), __FILE__, __FUNCTION__, __LINE__);
								//najpierw sprawdzam czy przypadkiem  kolumna referencyjna nie jest kluczem z tej samej tabeli , w takim wypadku moge po prostu ja przyrownac do rekordu
								if($this->CRM_PROCES_CALL_group_kroki_p['DANE_DO_WYBORU_DLA_USERA_KEY'][$WSK_VAL->PARENT_ID] == $this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK_VAL->PARENT_ID]->cz_DESC )  {
								  	DEBUG_S(-3,' Powiazana wartosc wskaznika jest kluczem, zatem mozemy ja zamienic jako wartosc ','', __FILE__, __FUNCTION__, __LINE__);
								$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID=$this->log_unserialized['LISTA'][$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK]->PARENT_ID]->PARENT_ID;
								$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']='VALUE';

								}
								  else DEBUG_S(-3,' Nalezy pewnie ta zmienna zamienic na wartosc - TODO ','', __FILE__, __FUNCTION__, __LINE__);
						 }

					}
			}

	    }
		
		function CRM_PROCES_CALL_check_if_all_variables_exists_to_call_next_process() {
			$return=true;
			foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $WSK=>$DANE_WSK) {
				DEBUG_S(-3,'4. CRM_PROCES_CALL_check_if_all_variables_exists_to_call_next_process'.$WSK,array($WSK,$DANE_WSK), __FILE__, __FUNCTION__, __LINE__);
				if(($this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']!='VALUE')&&($this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']!='TO_EVALUATE_FROM_ID_KEY')) $return=false;
					//	if($DANE_WSK->PARENT_ID=='0') {
					//		if(!isset($WSKAZNIKI['LISTA'][$WSK]->PARENT_ID)) { 
					//			$LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE=false; //todo czy to wystarczy przy drugim wyzwoleniu ?
					//			echo "\n Ta zmienna bedzie do wybrania/edycji";
					//		  } else if($log_unserialized['WSKAZNIKI']['LISTA'][$WSK]->PARENT_ID=='\'\'') {
					//			$LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE=false; //todo czy to wystarczy przy drugim wyzwoleniu ?
					//			echo "\n Ta zmienna bedzie do wybrania/edycji";  
					//		  } else echo "dupa xxx";
					//	} else if(is_int($DANE_WSK->PARENT_ID)) { //podstawiamy zmienne ze wskaznika - szukamy w unserialized
					//		if(is_array($log_unserialized['WSKAZNIKI']['LISTA'][$DANE_WSK->PARENT_ID]->PARENT_ID)) { //nie mozemy kontynuowac - user musi wybrac jedna zmienna z dostepnych
					//		  die('Warunek TODO nieprzewidziany 143');
					//		} else {
					//			echo "\n Porownuje ".$WSKAZNIKI['LISTA'][$WSK]->PARENT_ID." do ".$log_unserialized['WSKAZNIKI']['LISTA'][$DANE_WSK->PARENT_ID]->PARENT_ID;
					//		   $WSKAZNIKI['LISTA'][$WSK]->PARENT_ID=$log_unserialized['WSKAZNIKI']['LISTA'][$DANE_WSK->PARENT_ID]->PARENT_ID ;
					//		}
					//	} else if(strstr($log_unserialized['WSKAZNIKI']['LISTA'][$DANE_WSK->ID]->PARENT_ID,"'")) {
					//			$WSKAZNIKI['LISTA'][$WSK]->PARENT_ID=$log_unserialized['WSKAZNIKI']['LISTA'][$DANE_WSK->PARENT_ID]->PARENT_ID ;
					//			DEBUG_S(-3,'Jest wartosc ze wskaznika wybrana przez usera - nie trzeba robic zapytania','', __FILE__, __FUNCTION__, __LINE__);						
					//	} else { echo "Nie ma danych dla - trzeba bedzie robic SIGINT ".$DANE_WSK->ID;
					//			$LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE=false;
					//	}
					//}
			
			
			}
			$this->LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE=$return;
			return $return;
		}
		
		function CRM_PROCES_CALL_if_parent_id_X_types_are_true_else_to_call_COND_process() {
					$this->CRM_PROCES_CALL_if_parent_id_X_types_are_true_else_to_call_COND_process=true;
			foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA_X'] as $ID_WSK=>$ID_WSK_WAR ) {
					DEBUG_S(-3,'sprawdzam warunki na X',array($ID_WSK,$ID_WSK_WAR), __FILE__, __FUNCTION__, __LINE__);						
					if($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID>0 ) {
					} else $this->CRM_PROCES_CALL_if_parent_id_X_types_are_true_else_to_call_COND_process=false;  //7.jest blad w tescie, zatem wyzwalamy proces warunkowy 
			}
		}				


		function CRM_PROCES_CALL_check_if_have_variables_to_update_to_db(){
					if(!$this->LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE) die('D230: Brak mozliwosci wyzwolenia funkcji bez uprzedniego upewnienia sie, ze sa wszystkie zmienne kwalifikujace');
					$this->CRM_PROCES_CALL_check_if_have_variables_to_update_to_db=false;
					DEBUG_S(-3,'6c sprawdzam czy nie ma wartosci gotowych z typu RWX ','', __FILE__, __FUNCTION__, __LINE__);
				foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $WSK=>$DANE_WSK) {
					if(isset($this->CRM_PROCESS_CALL_list_proc_w['LISTA_RWX'][$WSK] )&&($this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']=='VALUE')) {
						DEBUG_S(-3,'- jest zmienna gotowa do zapisania do bazy danych',$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK], __FILE__, __FUNCTION__, __LINE__);
						$this->CRM_PROCES_CALL_check_if_have_variables_to_update_to_db=true;
					}
				}	
		}

		function CRM_PROCES_CALL_prepare_sql_update_query(){
				DEBUG_S(-3,'6c-xx przygotowuje zapytanie do bazy danych do wykonania update','', __FILE__, __FUNCTION__, __LINE__);
				foreach($this->CRM_PROCES_CALL_group_kroki_p['TABELA'] as $TAB_ID=>$WSKAZNIK_ID ) {
					$ZAP_SQL_DO_DB[$TAB_ID]['SEL']="update  "."`".$this->CRM_PROCES_CALL_group_kroki_p['KROKI'][$TAB_ID]['PARENT_TABLE_NAME']."` set ";
					foreach($WSKAZNIK_ID as $ID_WSK=>$KOM_NAZWA ) {
						if(isset($this->CRM_PROCESS_CALL_list_proc_w['LISTA_RWX'][$ID_WSK])) {
							if(!isset($ZAP_SQL_DO_DB[$TAB_ID]['SET']))$ZAP_SQL_DO_DB[$TAB_ID]['SET']="`".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_DESC."`='".DB::_($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID)."'";
							else $ZAP_SQL_DO_DB[$TAB_ID]['SET']=", `".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_DESC."`='".DB::_($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID)."'";
						} else if(isset($this->CRM_PROCESS_CALL_list_proc_w['LISTA_R'][$ID_WSK])) {
							if(!isset($ZAP_SQL_DO_DB[$TAB_ID]['WHERE'])) $ZAP_SQL_DO_DB[$TAB_ID]['WHERE']="`".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_DESC."`='".DB::_($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID)."'";
							else $ZAP_SQL_DO_DB[$TAB_ID]['WHERE']=" and `".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_DESC."`='".DB::_($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID)."'";
						}
					}
					$this->CRM_PROCES_CALL_prepare_sql_update_query['ZAP_SQL_DO_DB'][$TAB_ID]['SQL']=$ZAP_SQL_DO_DB[$TAB_ID]['SEL']." ".$ZAP_SQL_DO_DB[$TAB_ID]['SET']." where ".$ZAP_SQL_DO_DB[$TAB_ID]['WHERE'];
					if(!isset($ZAP_SQL_DO_DB[$TAB_ID]['WHERE'])) die('259 FORCE to be safe to set WHERE in UPDATE query');
				}
		}


		function CRM_PROCES_CALL_commit_sql_update_query(){
				foreach($this->CRM_PROCES_CALL_prepare_sql_update_query['ZAP_SQL_DO_DB'] as $TAB_ID=>$SQL_VAL ) {
					DEBUG_S(-3,'6c-xxx Wysylam zapytania do bazy danych z aktualizacja',array($TAB_ID,$SQL_VAL), __FILE__, __FUNCTION__, __LINE__);
					$res = DB::query($SQL_VAL['SQL']) or die('problem ze sql '.$SQL_VAL['SQL']);
				}
				$this->CRM_PROCES_CALL_check_if_have_variables_to_update_to_db=false; //po zrobieniu update mozemy wylaczyc flage wyzwolenia procesu NEXT
		}


		function CRM_PROCES_CALL_check_if_have_variables_to_insert_to_db(){
			if(!$this->LISTA_WSK_R_MA_WSZYSTKIE_ZMIENNE) die('D231: Brak mozliwosci wyzwolenia funkcji bez uprzedniego upewnienia sie, ze sa wszystkie zmienne kwalifikujace');
					$this->CRM_PROCES_CALL_check_if_have_variables_to_insert_to_db=false;
					DEBUG_S(-3,'sprawdzam czy nie ma wartosci gotowych z typu RWXC ','', __FILE__, __FUNCTION__, __LINE__);
				foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $WSK=>$DANE_WSK) {
					if(isset($this->CRM_PROCESS_CALL_list_proc_w['LISTA_RWXC'][$WSK] )&&($this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']=='VALUE')) {
						DEBUG_S(-3,'- jest zmienna gotowa do zapisania do bazy danych',$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$WSK], __FILE__, __FUNCTION__, __LINE__);
						$this->CRM_PROCES_CALL_check_if_have_variables_to_insert_to_db=true;
					}
				}	
		}

		function CRM_PROCES_CALL_user_window_control() {
			//funkcja leci po wszystkich aktualnych tabelach i ustawia USER_WINDOW[CURRENT] jezeli nie ma
			//jezeli jest [USER_REQUEST] to to przetwarza , a tam LIMIT,PAGE

			foreach($this->CRM_PROCES_CALL_group_kroki_p['TABELA'] as $TABLE_ID=>$TAB_ARR) {
					DEBUG_S(-3,'Ustalam WINDOW dla '.$TABLE_ID,'', __FILE__, __FUNCTION__, __LINE__);
					if(!isset($this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID])) {
						$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['CURRENT']['LIMIT']=10;
						$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['CURRENT']['PAGE']=0;

					} 
					
					if(isset($this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['USER_REQUEST'])) {
						if(isset($this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['USER_REQUEST']['LIMIT'])) {
							$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['CURRENT']['LIMIT']=$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['USER_REQUEST']['LIMIT'];
						}
						if(isset($this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['USER_REQUEST']['PAGE'])) {
							$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['CURRENT']['PAGE']=$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TABLE_ID]['USER_REQUEST']['PAGE'];
						}
						
					}
					
			}
		
		}



		function CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT() {
				foreach($this->CRM_PROCES_CALL_group_kroki_p['TABELA'] as $TAB_ID=>$WSKAZNIK_ID ) {
					$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['SEL']="select ";
					if(isset($this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID])) unset($this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]);
					foreach($WSKAZNIK_ID as $ID_WSK=>$KOM_NAZWA ) {
						if(isset($this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FLD'])) $this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FLD'].=", `".$KOM_NAZWA."` as `WSK_".$ID_WSK."`";
						else $this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FLD']=" `".$KOM_NAZWA."` as `WSK_".$ID_WSK."`";
						$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FROM']="`".$this->CRM_PROCES_CALL_group_kroki_p['KROKI'][$TAB_ID]['PARENT_TABLE_NAME']."`";
						$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['PARENT_DATABASE_CONF_ID']=$this->CRM_PROCES_CALL_group_kroki_p['KROKI'][$TAB_ID]['PARENT_DATABASE_CONF_ID'];
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['KOLUMNY'][$ID_WSK]='WSK_'.$ID_WSK;
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['KOLUMNY_WSK']['WSK_'.$ID_WSK]=$ID_WSK;
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['LISTA_R']=$this->CRM_PROCESS_CALL_list_proc_w['LISTA_R'];
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['LISTA_RWX']=$this->CRM_PROCESS_CALL_list_proc_w['LISTA_RWX'];
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['LISTA_RWXC']=$this->CRM_PROCESS_CALL_list_proc_w['LISTA_RWXC'];

						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['INSTRUKCJE_CRM'][$ID_WSK]=$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->OPIS_ZASOB;
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['KOLUMNY_NAZWY_Z_BAZY'][$ID_WSK]=$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_DESC;
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['OPIS_ZASOBU_WSKAZNIKA'][$ID_WSK]=$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->cz_OPIS;
						$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]['LISTA_VAR_STATUS'][$ID_WSK]=$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$ID_WSK];
						//$this->log_unserialized=$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized;
					}
						//dodajemy aby byla jeszcze dodatkowa lista ze zmiennymi 
						foreach($this->CRM_PROCESS_CALL_list_proc_w['LISTA'] as $ID_WSK=>$WSK_OBJ) {
							$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['LISTA'][$ID_WSK]=$WSK_OBJ;
							$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['LISTA_VAR_STATUS'][$ID_WSK]=$this->CRM_PROCESS_CALL_list_proc_w['LISTA_VAR_STATUS'][$ID_WSK];

						}

					foreach($WSKAZNIK_ID as $ID_WSK=>$KOM_NAZWA ) {
						if( !empty($this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID) ) { //jest klucz do wyszukiwania zadany w PARENT_ID
							$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID=str_replace("'","",$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID);
							if(isset($this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['WHERE'])) $this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['WHERE'].=" and `".$KOM_NAZWA."`='".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID."'";
							else $this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['WHERE']=" where `".$KOM_NAZWA."`='".$this->CRM_PROCESS_CALL_list_proc_w['LISTA'][$ID_WSK]->PARENT_ID."'";
						}

					}
					$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['SQL']=$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['SEL']." 
						".$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FLD']." from 
						".$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['FROM']." 
						".$this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'][$TAB_ID]['WHERE'] ." limit ".($this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TAB_ID]['CURRENT']['PAGE']*$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TAB_ID]['CURRENT']['LIMIT']).",".$this->CRM_PROCESS_CALL_list_proc_w['USER_WINDOW'][$TAB_ID]['CURRENT']['LIMIT'];
					
				}

		}
		
		//function CRM_PROCES_CALL_provide_
		
		function CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA($ID_WSKAZNIK){
//			return CRM_PROCES_CALL_provide_KEY_for_type_KOMORKA
			$CRM_PROCES_CALL_sh_p=self::CRM_PROCES_CALL_sh_p($ID_WSKAZNIK);
			$sql="SHOW INDEXES FROM ".$CRM_PROCES_CALL_sh_p['PARENT_TABLE_NAME']." WHERE KEY_NAME =  'PRIMARY' ";
			$res = DB::query($sql);
			while ($h = DB::fetch( $res )) {
				return $h->Column_name;
			}
		
		}

		function CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized() {
			foreach($this->CRM_PROCES_CALL_prepare_data_for_user_for_terminate_it_and_recieve_with_SIGCONT['ZAP_SQL_DO_DB'] as $ID_TABELI=>$ID_TABLE_SQL ) {
				if(isset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI])) unset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI]);		//kasujemy zawartosci poprzednich danych do ekranu		
				DEBUG_S(-3,'ZAP_SQL_DO_DB 2',$ID_TABLE_SQL['SQL'], __FILE__, __FUNCTION__, __LINE__);					
					$res = DB::query($ID_TABLE_SQL['SQL']);
						while ($h = DB::fetch( $res )) {
							$DANE_DLA_USERA_DO_WYBORU[$ID_TABELI][$h->WSK_DANE_DO_WYBORU_DLA_USERA_KEY]=$h;
							$this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI][$h->WSK_DANE_DO_WYBORU_DLA_USERA_KEY]=$h->WSK_DANE_DO_WYBORU_DLA_USERA_KEY;
						}
					$this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$ID_TABELI]=$DANE_DLA_USERA_DO_WYBORU[$ID_TABELI];
//					$log_unserialized['WSKAZNIKI'][$ID_TABELI]=$DANE_DLA_USERA_DO_WYBORU[$ID_TABELI];

				}
				DEBUG_S(-3,'Testpoint2',$this, __FILE__, __FUNCTION__, __LINE__);

		}

		function CRM_PROCES_CALL_provide_VALUE_for_type_KOMORKA_and_TO_EVALUATE_FROM_ID_KEY($WSK) {
			
		}

		function CRM_PROCES_SIGCONT_check_if_column_isnot_rwx(){
					DEBUG_S(-3,' sprawdzam oraz odpalam MENU do wybru w razie czego. CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized:',array($this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized,$this->log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY']), __FILE__, __FUNCTION__, __LINE__);					

						$this->JEST_POTRZEBA_AKCJI_USERA=false;
						$this->CRM_PROCES_SIGCONT_check_if_column_isnot_rwx=false;
							foreach ($this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized['DANE_DLA_USERA_DO_WYBORU'] as $TABLE_DO_WYBORU=>$ROWS_IN_TABLE ) {
						//echo $TABLE_DO_WYBORU." ";
						//trzeba sprawdzic czy kolumna nie jest do ZAPISU _ RWX - wtedy jest potrzebna akcja 
							foreach($ROWS_IN_TABLE as $ID_ROW=>$ROW_ARR) {
								foreach ($ROW_ARR as $ROW_WSK=>$ROW_WSK_VAL) {
									$tst_KOLUMNY=$this->log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE_DO_WYBORU]['KOLUMNY_WSK'][$ROW_WSK];
									if(isset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE_DO_WYBORU]['LISTA_RWX'][$tst_KOLUMNY])) {
									$this->CRM_PROCES_SIGCONT_check_if_column_isnot_rwx=true;
									}
								}
							}
						//if($log_unserialized[$TABLE_DO_WYBORU]['LISTA_RWX'][])
						if((count($ROWS_IN_TABLE)>1)||($this->CRM_PROCES_SIGCONT_check_if_column_isnot_rwx)) { 
							CRM_PROCES_CALL_show_SIGCONT_menu($this->CRM_PROCES_CALL_from_prepared_data_load_sql_to_log_unserialized,$TABLE_DO_WYBORU,$this->ID_LOG);
							$this->JEST_POTRZEBA_AKCJI_USERA=true;
						}
					}
		
		
		
		}




		

			
			function CRM_PROCES_CALL_cleanup_last_step_data_from_log() {
			 	foreach($this->CRM_PROCES_CALL_group_kroki_p['KROKI'] as $TAB_ID=>$VAL_TAB) {
			 		unset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TAB_ID]);
					unset($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TAB_ID]);

			 		
			 	
			 	}
			
			//	foreach($this->log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$this->])
			}
			

		

		

		
	
			

		
		
		

		

		

		
		function CRM_PROCESS_CALL_translate_VAR_STATUS_from_PARENT_ID($ID_WSKAZNIK,$PARENT_ID,$FORM_TREAT){
			//funkcja do tlumaczenia zawartosci podanej do pola PARENT_ID, moga tam byc takie wartosci jak :
			// 'WARTOSC' - oznacza to gotowa wartosc do przetworzenia => VALUE
			// 1762 - oznacza to wartosc wskaznika do przetworzenia => TO_EVALUATE_FROM_ID
			// =${1762}+12 - oznacza dzialanie do wykonania => TO_EVALUATE
			 //pierw sprawdzamy czy juz zmienna nie zostala zrobiona na VALUE

			 if(isset($this->log_unserialized['LISTA'][$ID_WSKAZNIK]->VAR_STATUS)) {
			 	return $this->log_unserialized['LISTA'][$ID_WSKAZNIK]->VAR_STATUS ;
			 } else if($PARNET_ID[0]=="'") { //pierwszy znak apostrof
				return 'VALUE';
			 } else if(empty($PARENT_ID)) { //pusto
				if($FORM_TREAT=='R') { //jezeli jest to do odczytu - to ta wartosc jest dowolna do wyszukania
				return 'TO_SEARCH';
				} else if($FORM_TREAT=='RWX') { //jezei RWX to ta wartosc jest do dowolnego uzupelnienia
				 return 'TO_SET_BY_USER';
				}
			 } else if(is_int($PARENT_ID)) { return 'TO_EVALUATE_FROM_ID';
			 } else if(isset($this->log_unserialized['LISTA'][$PARENT_ID])) { return 'TO_EVALUATE_FROM_ID';
			 } else if(!empty($PARENT_ID)) { return 'VALUE'; //todo wierzymy, ze jest to wartosc gotowa nie do evaluate
			 } else {
			 	DEBUG_S(-3,'CRM_PROCESS_CALL_translate_VAR_STATUS_from_PARENT_ID nieznany typ zmiennej w PARENT_ID wskaznika - brakuje sposobu przetwarzania! ',array($ID_WSKAZNIK,$PARENT_ID,$FORM_TREAT), __FILE__, __FUNCTION__, __LINE__);
			    die('Dupa2');
			 }

		}

		
		
		
		

		

		

		
		
		

		
		
		
		
	}








		

		function CRM_PROCES_CALL_show_SIGCONT_menu($log_unserialized,$log_unserialized_TABLE,$ID_LOG) {
		//funkcja pokaze wszysktie dostepne zmienne z danego loga - aby user mogl wybrac jedna dostepna
				echo "";
			DEBUG_S(-3,'CRM_PROCES_CALL_show_SIGCONT_menu',array($ID_LOG,$log_unserialized_TABLE,$log_unserialized), __FILE__, __FUNCTION__, __LINE__);
			echo "\n<form method=post><input type=hidden name=CRM_PROCES_CALL_show_SIGCONT_menu_call value=1><input type=hidden name=ID_LOG value=".$ID_LOG.">
			<input type=hidden name=TABLE value=".$log_unserialized_TABLE.">
			<table border=1 cellspacing=0 celpadding=0><tr><td></td>";
				foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$log_unserialized_TABLE]['KOLUMNY_NAZWY_Z_BAZY'] as $KEY_COLUMN=>$VAL_COLUMN) {
					echo "<td>".$VAL_COLUMN."</td>";
				}
			echo "</tr>\n<tr><td></td>";
				foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$log_unserialized_TABLE]['OPIS_ZASOBU_WSKAZNIKA'] as $KEY_COLUMN=>$VAL_COLUMN) {
					echo "<td>".$VAL_COLUMN."</td>";
				}
			echo "</tr>\n<tr><td></td>";
				foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$log_unserialized_TABLE]['INSTRUKCJE_CRM'] as $KEY_COLUMN=>$VAL_COLUMN) {
					echo "<td>".$VAL_COLUMN."</td>";
				}
				
			echo "</tr>\n<tr><td></td>";
				foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$log_unserialized_TABLE]['LISTA_VAR_STATUS'] as $KEY_COLUMN=>$VAL_COLUMN) {
					echo "<td>";
					if($VAL_COLUMN['VAR_STATUS']=='TO_SET_BY_USER') {
					echo "<input type=text name=".$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$log_unserialized_TABLE]['KOLUMNY'][$KEY_COLUMN]." value=";
					echo $log_unserialized['LISTA'][$KEY_COLUMN]->PARENT_ID;
					echo "><input type=submit>"; //<input type=text name="
					}
					else echo $log_unserialized['LISTA'][$KEY_COLUMN]->PARENT_ID;
					echo "</td>";
				}
	
			echo "</tr>\n";
			
				foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$log_unserialized_TABLE] as $ROW_ID=>$ROW_VAL){
					echo "\n<tr>";
					echo "<td><a href=?CRM_PROCES_CALL_show_SIGCONT_menu_call=1&ID_LOG=".$ID_LOG."&TABLE=".$log_unserialized_TABLE."&ROW_ID=".$ROW_ID.">Wybierz</a></td>";
					foreach($ROW_VAL as $ROW_VAL_IND=>$ROW_VAL_VAL) {
						echo "<td>".$ROW_VAL_VAL."</td>";
					}
					echo "\n</tr>";
				}

			echo "</table></form>";
		
		}

		function CRM_PROCES_CALL_show_SIGCONT_menu_call($ID_LOG,$TABLE,$PIPE,$log_unserialized,$ID_STEP) {
		//funkcja przyjmujaca zmienne od CRM_PROCES_CALL_show_SIGCONT_menu
			DEBUG_S(-3,'CRM_PROCES_CALL_show_SIGCONT_menu_call',array($log_unserialized,$ID_LOG,$TABLE,$PIPE), __FILE__, __FUNCTION__, __LINE__);	
			//	$CRM_PROCES_CALL_cls=new CRM_PROCES_CALL_cls($ID_LOG,'SIGCONT');
			//	$CRM_PROCES_CALL_cls->CRM_PROCES_CALL_get_data_from_log();
			//	$log_unserialized=$CRM_PROCES_CALL_cls->log_unserialized;
			//	$ID_STEP=$CRM_PROCES_CALL_cls->ID_STEP;
 				DEBUG_S(-3,'log_unserialized',$log_unserialized, __FILE__, __FUNCTION__, __LINE__);
				if(count($log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TABLE])>1) {
					foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TABLE] as $ROWID=>$VAL) { //przyjmowanie wiersza przy select
						if($ROWID!=$PIPE['ROW_ID']) unset($log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TABLE][$ROWID]);
					}
				}
				//przyjmowanie wartosci przy insert/set
				foreach($log_unserialized['LISTA_VAR_STATUS'] as $WSK=>$WSK_ARR) {
				echo "..test.".$WSK;
					if($WSK_ARR['VAR_STATUS']=='TO_SET_BY_USER') {
						echo $log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]." --";
						 if(isset($PIPE[$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]])) {
 							DEBUG_S(-3,'Przejmuje zmienna do wprowadzenia INSERT/UPDATE ',$PIPE[$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]], __FILE__, __FUNCTION__, __LINE__);
								$log_unserialized['LISTA_VAR_STATUS'][$WSK]['VAR_STATUS']='VALUE';
								$log_unserialized['LISTA'][$WSK]->PARENT_ID=$PIPE[$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]];

								foreach($log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TABLE] as $ID_ROWU_CNT=>$VAL_ROWU_CNT) {
									$log_unserialized['DANE_DLA_USERA_DO_WYBORU'][$TABLE][$ID_ROWU_CNT]->$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]=$PIPE[$log_unserialized['DANE_DLA_USERA_DO_WYBORU_KOLUMNY'][$TABLE]['KOLUMNY'][$WSK]];								
								}
						}
					}
				}
				DEBUG_S(-3,'log_unserialized ( po odjeciu niepotrzebnych linii)',$log_unserialized, __FILE__, __FUNCTION__, __LINE__);
				
				return $log_unserialized;

					//$sql="update  CRM_PROCES_LOG set log='".mysql_real_escape_string(serialize($log_unserialized))."', WAIT_FOR_SIGNAL='SIGCONT' where ID='".$ID_LOG."' and WAIT_FOR_SIGNAL='SIGCONT'";// SIGCONT SIGTERM
					//$res = DB::query($sql) or die('problem ze sql');
					//DEBUG_S(-3,'zapisujemy dane do log po odjeciu niepotrzebnych linii ',$sql, __FILE__, __FUNCTION__, __LINE__);					
				//CRM_PROCES_CALL('','SIGCONT',$ID_LOG);


		
		} 
		
	



?>
