HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/deensekroon.komma-mediadesign.nl/wwwroot/admin/php/mp_generate_form.php
<?php


/* 
	
	DEENSE KROON

	mp_generate_form.php 
	part of the multipage system
	
	Mike Ontwerpt 2012
	www.mikeontwerpt.nl
	
	functions: 
	- generateForm();
	- validateForm();
	
*/

function generateForm($mp_fields, $method, $editId=0){
	/* access the global sql object */
	global $mysqli;
	
	/* language */
	$siteLabels = getLanguage();	
	
	/* how many fields in array ? */
	$numFields = count($mp_fields) - 1; // -1 because first index is form-config
	
	/* name of this form */
	$formname = $mp_fields['form-config']['linkname'];
	/* create form session */
	if(!isset($_SESSION[$formname]['value'])){
		for($i=0;$i<$numFields;$i++){
			$_SESSION[$formname]['value'][$i] = '';
		}
	}
	/* 
		If edit; fill the session with values 
		When the form is submitted (but not validated) we want to keep the user's values.
		Otherwise we want the values from the database	
	*/
	if($method == 'edit'){
		/*  of the submit btn */
		if(!isset($_POST['sbm_edit'])){
			/* create a session for each field */			
			for($i=0;$i<$numFields;$i++){
				/* some fieldtypes don't have a column */
				if($mp_fields[$i]['type'] != 'submit'){
					//get the column in the database
					$temp = explode('.',$mp_fields[$i]['db']);
					$col = $temp[1];
					//get the value from the database
					$query = 'SELECT '.$col.' FROM '.$temp[0].' WHERE id = '.$editId.' LIMIT 1';
					if($result = $mysqli->query($query)){
						$record = $result->fetch_assoc();
						$val = $record[$col];	
						
						//fill session
						$_SESSION[$formname]['value'][$i] = $val;
					}
				}				
			}
		}
	}
	
	/* start output */
	$output = '';
	
	/* header / title */
	$output .= '<h1>'.$siteLabels['mm-pages'].' &rsaquo; '.$mp_fields['form-config']['label'];
		if($method == 'add') $output .= ' &rsaquo; '.$siteLabels['mp-additem'];
		if($method == 'edit') $output .= ' &rsaquo; '.$siteLabels['mp-edititem'];
	$output .= '</h1>';
	/* 
		---> Start Form <----
		start form in double container, 
		if media, add another double container add the end.
	
	*/	
	$action = $mp_fields['form-config']['action'];
	$output .= '<form action="'.$action.'" method="post">';
	
		$sbm = ''; //submite value
		$output .= '<div class="double-column">';
		
		/* if method == "add" || "edit" --> for each field $output .= label + input */
		if($method == 'add' || $method == 'edit'){
			
			/******     M A I N   I N P U T   L O O P     ******/
			
			for($i=0; $i<$numFields; $i++){
				
				/* get type of current field */
				$type = $mp_fields[$i]['type'];	
				
				/* label */
				if($type != 'submit' && $type != 'timestamp' && $type != 'fixedValue' && $type != 'itemOrder'){
					if(isset($mp_fields[$i]['label'])) $output .= $mp_fields[$i]['label'].'<br />';
				}
				
				switch($type){
				
					case 'text' : 
						$output .= '<div class="single-column">';
							$output .= '<input type="text" name="'.$mp_fields[$i]['linkname'].'" id="'.$mp_fields[$i]['linkname'].'" value="'.$_SESSION[$formname]['value'][$i].'" class="txt"/>';
						$output .= '</div>';
					break;
					case 'wysiwyg' : 
						$output .= '<div class="double-column">';
							$output .= '<textarea name="'.$mp_fields[$i]['linkname'].'" id="'.$mp_fields[$i]['linkname'].'" class="tinymce">'.$_SESSION[$formname]['value'][$i].'</textarea>';
						$output .= '</div>';
					break;
					/*********** DEENSEKROON EXTENTIEN ***********/
					case 'bannertype' : 
						$output .= '<div class="single-column">';
						$output .= '<select name="bannertype">';
							$output .= '<option value="1">Voorpagina</option>';
							$output .= '<option value="2">Middel</option>';
							$output .= '<option value="3">Klein</option>';
							$output .= '<option value="4">Tekstbanner</option>';
						$output .= '</select>';
						$output .= '</div>';
					break;
					/*********** END EXTENTION ***********/
					case 'checkbox' : 
						$output .= '<input type="checkbox" name="cb_'.$mp_fields[$i]['linkname'].'" value="'.$mp_fields[$i]['linkname'].'" />';
					break;

					case 'submit' : 
						if($method == 'add')  	$sbm .= '<input type="submit" name="'.$mp_fields[$i]['linkname'].'-add" value="'.$mp_fields[$i]['label'].'" class="btn176 proceed"/>';
						if($method == 'edit') 	$sbm .= '<input type="hidden" name="editId" value="'.$editId.'"/>';
						if($method == 'edit')	$sbm .= '<input type="submit" name="'.$mp_fields[$i]['linkname'].'-edit" value="'.$mp_fields[$i]['label'].'" class="btn176 proceed"/>';
					break;
				
				} // end switch type
				
				if($mp_fields[$i]['clear'] == 1) $output .= '<div class="clear"></div>';
							 	
			} // end main for loop
		} // end if "add" || "edit" 
		
		/* end double container */
		$output .= '</div>';
		/* if media, add media */
		$output .= '<div class="triple-column">';
			$pageId = $mp_fields['form-config']['pageId'];
			$mediaQuery = 'SELECT media FROM mp_pages WHERE id = "'.$pageId.'" LIMIT 1';
			if($mediaResult = $mysqli->query($mediaQuery)){
				$mediaRecord = $mediaResult->fetch_assoc();
				$media = $mediaRecord['media'];
			
				if($media == 1){
					//add media library
						/* media lib */
						$output .= '<h2>Media library</h2>';
						$output .= '<div class="triple-column" id="lib-holder">';
							//javascript call goes here
						$output .= '</div>';
						$output .= '<script type="text/javascript">getPage("lib-holder","js_media","sessionname=addedit-'.$mp_fields['form-config']['linkname'].'&method=insertAsShortcode");</script>';
				}		
			}
		$output .= '</div>';
		
		/* clear floating form and media */
		$output .= '<div class="clear">';
		
		/* end form with submit button and back button */
		$output .= '<div class="double-column">';
			//add submit output (created in switch above)	
			$output .= $sbm;
			if($method == 'add') 	$sbm .= '<input type="hidden" name="location" value="../"/>';
			if($method == 'edit') 	$sbm .= '<input type="hidden" name="location" value="../../"/>';		
			$output .= '<input type="submit" name="back" value="'.$siteLabels['form-cancel'].'" class="btn176"/>';
		$output .= '</div>';
	
	/* end form */
	$output .= '</form>';
	
	return $output;
}

function validateForm($mp_fields, $method, $editId=0){
	/* access the global sql object */
	global $mysqli;
	
	/* language */
	$siteLabels = getLanguage();	
	
	/* how many fields in array ? */
	$numFields = count($mp_fields) - 1; // -1 because first index is form-config
	
	/* name of this form */
	$formname = $mp_fields['form-config']['linkname'];
	
	if($method == 'add' || $method == 'edit'){
		
		/* M A I N   F O R   L O O P */
				
		for($i=0; $i< $numFields ; $i++){
			/* get input */
			
			/* switch type */
			$type = $mp_fields[$i]['type'];
			switch($type){
				case 'text': 
				case 'wysiwyg': 
					/* prepare for database */
					$val = $_POST[$mp_fields[$i]['linkname']];
					$dbVal = inDatabase($val);
					if(!empty($dbVal) || !$mp_fields[$i]['required']){ 
						$_SESSION[$formname]['value'][$i] = $dbVal; 
					}
					else{	 //feedback fill in required fields	
							$errors[] = $siteLabels['fm-emptyrequiredfields']; 
					}
				break;
				case 'checkbox': 
					if(isset($_POST['cb_'.$mp_fields[$i]['linkname']])){
						$_SESSION[$formname]['value'][$i] = 1;
					}
					else{
						$_SESSION[$formname]['value'][$i] = 0;
					}
				break;
				/*********** DEENSEKROON EXTENTIEN ***********/
				case 'bannertype' : 
						$_SESSION[$formname]['value'][$i] = $_POST['bannertype'];
				break;
				/*********** END EXTENTIEN ***********/
				case 'timestamp': $_SESSION[$formname]['value'][$i] = time();
				break;
				case 'fixedValue': $_SESSION[$formname]['value'][$i] = $mp_fields[$i]['value'];
				break;
				case 'itemOrder':
					if($method == 'add'){
						/* latestOrder ++ */
						$result = $mysqli->query('SELECT '.$mp_fields[$i]['linkname'].' FROM '.$mp_fields['form-config']['linkname'].' ORDER by '.$mp_fields[$i]['linkname'].' DESC LIMIT 1');
						$record = $result->fetch_assoc();
						$itemOrder = $record[$mp_fields[$i]['linkname']];
						$itemOrder++;
						$_SESSION[$formname]['value'][$i] = $itemOrder;
					}
					if($method == 'edit'){
						/* current order of this item */
						$result = $mysqli->query('SELECT '.$mp_fields[$i]['linkname'].' FROM '.$mp_fields['form-config']['linkname'].' WHERE id = '.$editId.' LIMIT 1');
						$record = $result->fetch_assoc();
						$itemOrder = $record[$mp_fields[$i]['linkname']];
						$_SESSION[$formname]['value'][$i] = $itemOrder;
					}
				break;
				case 'route':
					// Find name
					foreach($mp_fields as $key => $field)
					{
						if($field['linkname'] == 'title')
						{
							$name = $_SESSION[$formname]['value'][$key];
							break;
						}
					}
					// Check if found
					if( ! isset($name))
					{
						$errors[] = 'Niet mogelijk om een route te genereren.';
						break;
					}

					// Create RouteService
					include_once($_SERVER['DOCUMENT_ROOT'] . '/App/Routes/RouteService.php');
					include_once($_SERVER['DOCUMENT_ROOT'] . '/App/Routes/RouteRepository.php');
					$routeService = new \App\Routes\RouteService();
					$routeRepo = new \App\Routes\RoutesRepository();

					// Get route
					$route = new \StdClass();
					$route->route_nl = inDatabase($routeService->createBrandRoute($name));
					$route->route_en = inDatabase($routeService->createBrandRoute($name));

					// Is route unique ?
					if($editId ?
							$routeRepo->unique($route, $editId, 'brand') :
							$routeRepo->unique($route))
					{

						$_SESSION[$formname]['value'][$i] = $route;
					}
					else
					{
						$errors[] = 'De route is niet uniek, kies een andere titel';
					}
				break;
			}
		}// end forloop
		
		// VALID ?
		if(isset($errors)){
			displayErrors($errors);
			return generateForm($mp_fields, $method, $editId);
		}
		else{
			//handle database
			
			//CASE ADD: Create an INSERT QUERY
			if($method == 'add'){

				//start the insert string 
				$insertQuery = 'INSERT INTO '.$mp_fields['form-config']['linkname'].' (';
				
				#2.1 look for the field names
				for($n=0; $n < $numFields ; $n++){
					//avoid types that don't have a db field
					if($mp_fields[$n]['type'] != 'submit' && $mp_fields[$n]['type'] != 'route'){
						$temp = explode('.',$mp_fields[$n]['db']);
						//create an insert string 
						$insertQuery .= $temp[1];
						//add a ,
						$insertQuery .= ',';	
					}
				}
				//get rid of the last comma
				$insertQuery = substr($insertQuery, 0, strlen($insertQuery)-1);
				//finish first part, start second; the values
				$insertQuery .= ') VALUES(';
				
				#2.2 look for the values
				for($n=0; $n< $numFields ; $n++){
					if($mp_fields[$n]['type'] != 'submit' && $mp_fields[$n]['type'] != 'route'){
						//avoid types that don't have a db field
						$dbString = $mp_fields[$n]['db'];
						$temp = explode('.',$dbString);
						//create an insert string 
						$insertQuery .= '"'.$_SESSION[$formname]['value'][$n].'"';
						//add a ,
						$insertQuery .= ',';
					}
				}
				//get rid of the last comma
				$insertQuery = substr($insertQuery, 0, strlen($insertQuery)-1);
				//finish the string
				$insertQuery .= ');';

				//run the query
				if($mysqli->query($insertQuery)){
					//create an item id for the status and optional image inserts
					$itemId = $mysqli->insert_id;

					// Search for route
					foreach ($mp_fields as $key => $field) {

						// Found route
						if (isset($field['type']) && $field['type'] == 'route')
						{
							include_once($_SERVER['DOCUMENT_ROOT'] . '/App/Routes/RouteRepository.php');
							$routeRepo = new \App\Routes\RoutesRepository();
							// Store route
							$routeRepo->store($_SESSION[$formname]['value'][$key],$itemId,'brand');
						}

					}

					$statusQuery = 'INSERT INTO content_status(itemId, linkname, active, timest) VALUES("'.$itemId.'", "'.$mp_fields['form-config']['linkname'].'", "1",'.time().')';
					if($mysqli->query($statusQuery)){
						unset($_SESSION[$formname]['value']);
						//display feedback
						$_SESSION['feed-msg'] = '<span class="fm-suc"><span class="fm-suc-v">&radic;</span>jeej (mp add form)</span>';
						header('location: ../');
					}	
				}
				else
				{
					echo 'Er is helaas iets misgegaan...';
					dd($mysqli->error_list);
				}
			}
			else if ($method == 'edit'){
			//CASE EDIT: Create an UPDATE QUERY
				//start the insert string 
				$updateQuery = 'UPDATE '.$mp_fields['form-config']['linkname'].' SET ';
				
				#2.1 look for the field names
				for($n=0; $n < $numFields ; $n++){
					//avoid types that don't have a db field
					if($mp_fields[$n]['type'] != 'submit' && $mp_fields[$n]['type'] != 'timestamp' && $mp_fields[$n]['type'] != 'fixedValue' && $mp_fields[$n]['type'] != 'route'){
						$temp = explode('.',$mp_fields[$n]['db']);
						//create an update string 
						$updateQuery .= $temp[1].'="'.$_SESSION[$formname]['value'][$n].'",';
					}
				}
				//get rid of the last comma
				$updateQuery = substr($updateQuery, 0, strlen($updateQuery)-1);
				$updateQuery .= ' WHERE id='.$editId.' LIMIT 1;';
													
				//run the query
				if($mysqli->query($updateQuery)){

					// Search for route
					foreach ($mp_fields as $key => $field) {
						if (isset($field['type']) && $field['type'] == 'route')
						{
							include_once($_SERVER['DOCUMENT_ROOT'] . '/App/Routes/RouteService.php');
							$routeService = new \App\Routes\RouteService();
							// Update route
							$routeService->update($_SESSION[$formname]['value'][$key],$editId,'brand');
						}
					}

					unset($_SESSION[$formname]['value']);
					//display feedback
					$_SESSION['feed-msg'] = '<span class="fm-suc"><span class="fm-suc-v">&radic;</span>jeej (mp edit form)</span>';
					header('location: ../../');
				}
			}
		}		
	}
}


?>