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'].' › '.$mp_fields['form-config']['label'];
if($method == 'add') $output .= ' › '.$siteLabels['mp-additem'];
if($method == 'edit') $output .= ' › '.$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">√</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">√</span>jeej (mp edit form)</span>';
header('location: ../../');
}
}
}
}
}
?>