<?php

	// Wenn $functions['style'] auf text gesetzt ist, dann zeige Text an, ansonsten Images
function sIT_functions_feld($functions, $key_wert, $tr_id=false)
{
	$images=true;
	if (array_key_exists('style', $functions))
	{
		if ($functions['style']==='text') $images=false;
	}
	if (array_key_exists('delete', $functions) && $functions['delete'])
	{
		if ($images) echo "<img onclick='view_line(\"".$key_wert."\", true)' src='sITeditor/images/sIT_delete.png'>";
		else echo "<button onclick='view_line(\"".$key_wert."\", true)'>Delete</button>";
		//echo "<button onclick='confirm_delete_line(\"".$key_wert."\")'>Del</button>";
	}
	if (array_key_exists('edit', $functions) && $functions['edit'])
	{
		if ($images) echo "<img onclick='edit_line_dialog(\"".$key_wert."\", false, true, \"".$tr_id."\")' src='sITeditor/images/sIT_edit.png'>";
		else echo "<button onclick='edit_line_dialog(\"".$key_wert."\", false, true, \"".$tr_id."\")'>Edit</button>";
	}
	if (array_key_exists('copy', $functions) && $functions['copy'])
	{
		if ($images) echo "<img onclick='edit_line_dialog(\"".$key_wert."\", true)' src='sITeditor/images/sIT_copy.png'>";
		else echo "<button onclick='edit_line_dialog(\"".$key_wert."\", true)'>Copy</button>";
	}
	if (array_key_exists('view', $functions) && $functions['view'])
	{
		if ($images) echo "<img onclick='view_line(\"".$key_wert."\")' src='sITeditor/images/sIT_view.png'>";
		else echo "<button onclick='view_line(\"".$key_wert."\")'>View</button>";
	}
}


	// Funktion zeigt jede Zeile als datenzeile an
	// wurde ausgelagert, damit mittels javascript dann die einzelne Zeile angezeigt werden kann
	// damit es nicht flackert
	// Rückgabewert: $tr_id .... die ID der HTML Zeile
	function zeige_datenzeile_an($tabelle, $row, $key, $konfiguration)
	{
		$tr_id='row-'.$tabelle.'_'.$row[$key];
		log_to_file("tr_id :".$tr_id);
		echo "<tr  id='row-".$tabelle."_".$row[$key]."'>";
		//log_to_file("Zeige Datenzeile an: ".$row[$key]);
		// Hier das Steuerfeld anzeigen - löschen etc.
		
		echo "<td >";
		
		sIT_functions_feld($konfiguration['functions'], $row[$key], $tr_id);
		echo "</td>";
		
		foreach ($konfiguration['fields'] as $feld)
		{
			// und jetzt die einzelnen Felder
			if (in_array('table_list', $feld['view_options']))
			{
				$feldname=$feld['feldname'];
				$css=get_css_for_field($feld, 'css_table_list');
				
				echo "<td class='".$tabelle."_".$feldname."' $css>";
				
				switch ($feld['type'])
				{
					case 'text':
						sIT_text_feld($feld['feldname'], $row, $feld);
					break;
					case 'time':
						sIT_text_feld($feld['feldname'], $row, $feld);
					break;
					case 'textarea':
						sIT_text_feld($feld['feldname'], $row, $feld);
					break;
					case 'array_lookup':
						sIT_array_lookup_feld($feld['feldname'], $row, $feld);
					break;
					case 'table_lookup':
						sIT_table_lookup_feld($feld['feldname'], $row, $feld);
					break;
					case 'iframe_dialog':
						//hier den key mitgeben, feldname ist bei iframe_dialog egal
						sIT_iframe_dialog_feld($key, $row, $feld, $tr_id);
					break;
					case 'ajax_function':
						//hier den key mitgeben, feldname ist bei iframe_dialog egal
						sIT_ajax_function_feld($key, $row, $feld);
					break;
					case 'dummy':
						sIT_dummy_feld($key, $row, $feld);
					break;
					default:
						echo "Fehler - unbekannter Typ ".$feld['type'];
				}
				echo "</td>";
			}
		}
		echo "</tr>";
		return($tr_id);
	}

	// Funktion gibt eine Zeile der Tabelle zurück mit ID $id
	// damit eine Zeile nachgeladen werden kann!!
	function zeige_eine_einzelne_datenzeile_an($konfiguration, $id)
	{
		$tr_id=false;
		$tabelle=$konfiguration['table'];
		$key=$konfiguration['key'];
		
		$filter = get_filter($konfiguration);
		if (empty($filter)) $filter="WHERE 1=1 ";
		$sql="SELECT * from $tabelle $filter AND $key='$id'";
		log_to_file("Lade zeile $id nach - Table: ".$sql);
		$Q1=mysql_query($sql);
		if (! $Q1) 
		{
			echo "<br>Fehler: ".mysql_error();
			echo "<br>Befehl: ".$sql;
			log_to_file("Fehler: ".mysql_error());
		}
		while ($row=mysql_fetch_assoc($Q1))
		{
			$tr_id=zeige_datenzeile_an($tabelle, $row, $key, $konfiguration);
		}
		log_to_file("Zeile wurde angezeigt: $tr_id");
		return($tr_id);
	}

	if (!function_exists("log_to_file"))
	{
		function log_to_file($string, $logfile=false, $tee=false)
		{
			if ($tee) echo $string.PHP_EOL;
			
			if (!$logfile) 
			{
				$logfile = "log/logfile.log";
				if (!file_exists("log")) mkdir ("log");
			}	
			$zeit=date("Y-m-d H:i:s");
			$myfile = file_put_contents($logfile, $zeit."\t".$string.PHP_EOL , FILE_APPEND | LOCK_EX);
		}
	}
	
	// Funktion gibt bei einem String mit AS den linken oder den rechten teil zurück
	// wenn kein AS vorkommt, dann gibt er den String zurück
	function get_string_with_as($string, $left_or_right)
	{
		$pos=stripos($string, " as ");
		if ($pos !== false) 
		{
			if ($left_or_right ==='left')
			{
				$return=substr($string,0,$pos);
			}
			else 
			{
				$return=substr($string,$pos+4);
			}

		}
		else $return=$string;
		return($return);
	}
	
	function get_tablesorter_default_filter_for_field($feld)
	{
		$return="";

		if (array_key_exists('tablesorter_default_filter',$feld))
		{
			$return="data-value='".$feld['tablesorter_default_filter']."'";
		}
		return($return);
	}
	
	//checke ob das Feld das Feld ist, das gefiltert ist
	function ist_feld_gefiltert($feld_konfiguration, $filter)
	{
		//var_dump($feld_konfiguration);
		//var_dump($filter);
		$return=false;
		// Nur wenn der Filter auf = gestellt ist gefiltert zurückgeben, bei großer oder kleiner nicht
		if ($filter!==false AND $filter['operator']==='=')
		{
			if ($feld_konfiguration['feldname']===$filter['field'])
			{
				$return=true;
			}
		}
		return($return);
	}
	
	// gib den Wert vom Filter zurück - macht nur sinn, wenn der operator auf = ist.!
	function get_wert_von_filter($filter)
	{
		$return=false;
		if ($filter!==false)
		{
			if (array_key_exists('filter_value',$filter))
			{
				$return=$filter['filter_value'];
			}
		}
		return($return);
	}
	
	// gib den default Wert zurück!
	function get_default_value($konfiguration_feld)
	{
		$return="";
		if(array_key_exists('default_value',$konfiguration_feld))
		{
			$return=$konfiguration_feld['default_value'];
		}
			
		return($return);
	}
	
	// schaut ob disabled und/oder readonly gesetzt wurde!
	function check_disabled_wert($konfiguration_feld, $filter=false)
	{
		$disabled="";
		if (array_key_exists('disabled', $konfiguration_feld) && $konfiguration_feld['disabled']===true)
		{
			$disabled=" disabled ";
		}
		if (array_key_exists('readonly', $konfiguration_feld) && $konfiguration_feld['readonly']===true)
		{
			$disabled.=" readonly ";
		}
		else
		if (ist_feld_gefiltert($konfiguration_feld, $filter))
		{
			$disabled.=" readonly ";
		}
		
		return ($disabled);
	}

	// Sucht die konfiguration Filter heraus und macht den WHERE String
	function get_filter($konfiguration)
	{
		$filter_string="WHERE true ";
		if (array_key_exists('filter', $konfiguration))
		{
			$feld=$konfiguration['filter']['field'];
			$operator=$konfiguration['filter']['operator'];
			$value=$konfiguration['filter']['filter_value'];
			$filter_string.="AND $feld $operator $value";
		}
		
		if (array_key_exists('sql_filter', $konfiguration))
		{
			$filter_string=$konfiguration['sql_filter'];
		}
		
		return($filter_string);
		// Ergenis z.B. WHERE true AND geloescht = 0 - where true wird immer angegeben
	}
	
	function get_user_search_filter($konfiguration)
	{
		$filter_string="";
		if (array_key_exists('user_search_filter', $konfiguration))
		{
			foreach($konfiguration['user_search_filter']['fields'] as $feld)
			{
				$operator="LIKE";
				$value=$konfiguration['user_search_filter']['default_filter_value'];
				$filter_string.=" OR $feld $operator '%$value%'";
			}
			$filter_string=" AND (false $filter_string)";	// IN Klammern setzen
		}
		
		return($filter_string);
		// Ergebnis sieht z.b. so aus: AND (false OR telefon1 LIKE '%1%' OR telefon2 LIKE '%1%')
	}
	
	// gibt die css zurück
	// $target: 'css_table_list' 	: Table Übersicht Liste
	//			'css_edit'		 	: gilt für edit und copy
	//			'css_view'			: gilt für view und delete
	//			'css_edit_row'		: gilt für edit und zwar für <tr $css>
	function get_css_for_field($feld, $target)
	{
		$css="";
		if (array_key_exists('css_option', $feld))
		{
			// Hier das css vom Header raussuchen
			if ($target==='css_table_list')
			{
				if (array_key_exists('css_table_list', $feld['css_option']))
				{
					$css=$feld['css_option']['css_table_list'];
				}
			}
			if ($target==='css_edit')
			{
				if (array_key_exists('css_edit', $feld['css_option']))
				{
					$css=$feld['css_option']['css_edit'];
				}
			}
			if ($target==='css_edit_row')
			{
				if (array_key_exists('css_edit_row', $feld['css_option']))
				{
					$css=$feld['css_option']['css_edit_row'];
				}
			}
			if ($target==='css_view')
			{
				if (array_key_exists('css_view', $feld['css_option']))
				{
					$css=$feld['css_option']['css_view'];
				}
			}
			
			// Wenn davor nichts gefunden wurde, dann schau das default css an
			if($css==="")
			{
				if (array_key_exists('css', $feld['css_option']))
				{
					$css=$feld['css_option']['css'];
				}
			}
			if($css!=="") $css="style='".$css."'";
		}
		

		return($css);
	}
	
	function sIT_text_feld($feldname, $row, $konfiguration_feld)
	{
		if (array_key_exists('transform_value', $konfiguration_feld) && array_key_exists('table_list', $konfiguration_feld['transform_value']) )
		{
			// Befehl zusammenbauen - schaut dann so aus:
			// z.b. $value=number_format("2.5000001",2, ".", "");
			$befehl=$konfiguration_feld['transform_value']['table_list'];
			//$befehl=utf8_decode($befehl);
			$befehl=str_ireplace("§§value§§",$row[$feldname],$befehl);
			$befehl='$value='.$befehl;
			//echo $befehl;
			eval($befehl);
		}
		else $value=$row[$feldname];
		echo $value;
	}
	
	function sIT_dummy_feld($feldname, $row, $konfiguration_feld)
	{
		echo "";
	}
	
	function sIT_javascript_feld($key, $row, $konfiguration_feld)
	{
		echo "<script>";
		echo $konfiguration_feld['javascript'];
		echo "</script>";
	}
	
	function sIT_ajax_function_feld($key, $row, $konfiguration_feld)
	{
		$key_wert=$row[$key];
		$php_file=$konfiguration_feld['php_file'];
		//echo $key_wert;
		$php_file=str_replace("§§id§§", $key_wert, $php_file );
		if (array_key_exists('image', $konfiguration_feld))
		{
			$image=$konfiguration_feld['image'];
			echo "<img src='".$image."' onclick='run_ajax(\"".$php_file."\")'>";
		} 
		else
		{
			$button_text=$konfiguration_feld['button_text'];
			echo "<button onclick='run_ajax(\"".$php_file."\")'>$button_text</button>";
		}
	}
	
	function sIT_iframe_dialog_feld($key, $row, $konfiguration_feld, $tr_id=false)
	{
		$key_wert=$row[$key];
		$button_text=$konfiguration_feld['button_text'];
		$php_file=$konfiguration_feld['php_file'];
		//echo $key_wert;
		$php_file=str_replace("§§id§§", $key_wert, $php_file );
		echo "<button onclick='open_iframe(\"".$php_file."\", false, \"".$tr_id."\")'>$button_text</button>";
	}

	function sIT_array_lookup_feld($feldname, $row, $konfiguration_feld)
	{
		$feld_wert=$row[$feldname];
		$ergebnis_array=$konfiguration_feld['lookup_array'];
		echo $ergebnis_array[$feld_wert];
	}

	function sIT_table_lookup_feld($feldname, $row, $konfiguration_feld)
	{
		$feld_wert=$row[$feldname];
		if (!empty($feld_wert))
		{
			$ergebnis_array=$konfiguration_feld['lookup_table'];
			//var_dump($ergebnis_array);
			
			if (array_key_exists('lookup_show_fields_glue',$ergebnis_array)) $glue=$ergebnis_array['lookup_show_fields_glue'];
				else $glue=" ";
			if (array_key_exists('lookup_join',$ergebnis_array)) $join=$ergebnis_array['lookup_join'];
				else $join=" ";
			$table=$ergebnis_array['table'];
			$lookup_field=$ergebnis_array['lookup_field'];
			$lookup_show_fields=$ergebnis_array['lookup_show_fields'];
			//print_r($lookup_show_fields);
			$lookup_show_fields_text=implode(",", $lookup_show_fields);
			$lookup_field_as=$lookup_field;
			$pos=stripos($lookup_field_as, " as ");
			if ($pos !== false) 
			{
				// 14.06.2019 - beim WHERE String nicht dne as Wert nehmen, sondern den vorigen WERT 
				// für den where string muss der erste Teil genommen werden products.NAME
				//$lookup_field_as=substr($lookup_field_as,$pos+4);
				$lookup_field_as=substr($lookup_field_as,0,$pos);
			}

			$sql="SELECT $lookup_show_fields_text FROM $table $join WHERE $lookup_field_as='".$feld_wert."'";
			$Q1=mysql_query($sql);
			if (!$Q1) 
			{
				echo "Fehler  : ".mysql_error().". ";
				echo "Command : ".$sql;
			}
			else
			{
				while ($row=mysql_fetch_assoc($Q1))
				{
					$result=implode($glue, $row);
					echo $result;
				}
			}
		}
	}
	
	function sIT_editor_view_user_search_filter($konfiguration)
	{
		if (isset($_REQUEST['konfiguration']))
		{
			$konfiguration_neu=unserialize(base64_decode($_REQUEST['konfiguration']));
			//var_dump($konfiguration_neu);
			if(isset($_REQUEST['user_search_filter_input']))
			{
				$konfiguration['user_search_filter']['default_filter_value']=$_REQUEST['user_search_filter_input'];
				//echo "filter geändert auf ".$_REQUEST['user_search_filter_input'];
			}
		}
		
		if (array_key_exists('user_search_filter', $konfiguration))
		{
			//$dateiname=basename(__FILE__);  // Sollte eigentlich immer sITeditor.php ergeben
			$dateiname=$_SERVER["SCRIPT_NAME"];
			$alt_text="Suche in :".implode(", ", $konfiguration['user_search_filter']['fields']);
			echo '<div id="user_search_filter_container">';
			echo '<FORM id="user_search_filter_form" action="'.$dateiname.'" method="POST" >';
			echo '<INPUT type="hidden" name="konfiguration" id="konfiguration" value="'.base64_encode(serialize($konfiguration)).'">';
			echo '<div id="user_search_filter">
					Filter: 
					<input type="text" name="user_search_filter_input" value="'.$konfiguration['user_search_filter']['default_filter_value'].'" title="'.$alt_text.'">
					</div>';
			echo '<input type="submit" value="Suchen">';
			echo '</FORM>';
			echo '<div>';
		}
		return($konfiguration);
	}

?>