Commit 27bfba62 authored by Carsten  Rose's avatar Carsten Rose
Browse files

AbstractBuildForm: parentRecords can now overwritten. Rewrite getActionUrl()....

AbstractBuildForm: parentRecords can now overwritten. Rewrite getActionUrl(). Used new HelperFormElement::buildFormElementId(). Fixed error that textarea elements didn't displayed any value. Removed hidden element for checkboxes. Renamed buildHidden() to buildNativeHidden(). New buildHidden() which stores Hidden value in SIP (instead of transferring via form).
BuiltForm*: moved SIP to POST element (builtNewSep() ).
parent 9454cdbd
......@@ -109,18 +109,17 @@ abstract class AbstractBuildForm {
$parentRecords = $this->db->sql($this->formSpec['multiSql']);
foreach ($parentRecords as $row) {
$this->store->setVarArray($row, STORE_PARENT_RECORD);
$this->store->setVarArray($row, STORE_PARENT_RECORD, true);
$html .= $this->elements($row['_id'], $filter);
}
} else {
$html .= $this->elements($this->store->getVar(SIP_RECORD_ID, STORE_SIP), $filter);
}
// $html .= $this->wrapItem(WRAP_SETUP_OUTER, $elementsHtml);
// close the form
$html .= $this->tail();
$html .= $this->doSubrecords();
return $html;
......@@ -179,12 +178,13 @@ abstract class AbstractBuildForm {
/**
* Builds the HTML 'form'-tag inlcuding all attributes and target.
*
* Notice: the SIP will be transferred as POST Parameter.
*
* @return string
* @throws DbException
*/
public function getActionUrl() {
$queryStringArray['s'] = $this->store->getVar(SIP_SIP, STORE_SIP);
$queryStringArray = array();
Support::appendTypo3ParameterToArray($queryStringArray);
......@@ -246,7 +246,7 @@ abstract class AbstractBuildForm {
// Get default value
$value = $formElement['value'] === '' ? $this->store->getVar($formElement['name']) : $value = $formElement['value'];
$htmlFormElementId = $formElement['name'] . ':' . $recordId;
$htmlFormElementId = HelperFormElement::buildFormElementId($formElement['name'], $recordId);
// Construct Marshaller Name
$buildElementFunctionName = 'build' . $this->buildElementFunctionName[$formElement['type']];
......@@ -260,6 +260,9 @@ abstract class AbstractBuildForm {
$html .= $this->$buildRowName($formElement, $elementHtml);
}
// Log / Debug: Last FormElement has been processed.
$this->store->setVar(SYSTEM_FORM_ELEMENT, '', STORE_SYSTEM);
return $html;
}
......@@ -317,22 +320,28 @@ abstract class AbstractBuildForm {
* @throws UserException
*/
public function buildInput(array $formElement, $htmlFormElementId, $value) {
$textarea = '';
$attribute = $this->getAttribute('name', $htmlFormElementId);
$htmlTag = '<input';
$htmlTagClosing = '';
// Check for input type 'textarea'
$colsRows = explode(',', $formElement['size']);
$colsRows = explode(',', $formElement['size'], 2);
if (count($colsRows) === 2) {
// <textarea>
$htmlTag = '<textarea';
$htmlTagClosing = '</textarea>';
$attribute .= $this->getAttribute('cols', $colsRows[0]);
$attribute .= $this->getAttribute('rows', $colsRows[1]);
$textarea = htmlentities($value) . '</textarea>';
} else {
// <input>
if ($formElement['maxLength'] > 0) {
$value = substr($value, 0, $formElement['maxLength']);
}
$attribute .= $this->getAttributeList($formElement, ['type', 'size', 'maxLength']);
$attribute .= $this->getAttribute('value', htmlentities($value), false);
}
// 'maxLength' needs an upper 'L': naming convention for DB tables!
$attribute .= $this->getAttributeList($formElement, ['autocomplete', 'autofocus', 'placeholder']);
......@@ -344,9 +353,7 @@ abstract class AbstractBuildForm {
$attribute .= $this->getAttributeMode($formElement);
$attribute .= $this->getAttribute('value', htmlentities($value), false);
return "$htmlTag $attribute>$htmlTagClosing";
return "$htmlTag $attribute>$textarea";
}
/**
......@@ -643,6 +650,7 @@ abstract class AbstractBuildForm {
* @return string
*/
public function buildCheckboxSingle(array $formElement, $htmlFormElementId, $attribute, $value) {
$html = '';
$attribute .= $this->getAttribute('name', $htmlFormElementId);
$attribute .= $this->getAttribute('value', $formElement['checked'], false);
......@@ -652,7 +660,7 @@ abstract class AbstractBuildForm {
$attribute .= $this->getAttributeList($formElement, ['autofocus']);
$html = $this->buildHidden($formElement, $htmlFormElementId, $formElement['unchecked']);
// $html = $this->buildNativeHidden( $htmlFormElementId, $formElement['unchecked']);
$html .= '<input ' . $attribute . '>';
if (isset($formElement['label2'])) {
......@@ -662,16 +670,6 @@ abstract class AbstractBuildForm {
return $html;
}
/**
* @param array $formElement
* @param $htmlFormElementId
* @param $value
* @return string
*/
public function buildHidden(array $formElement, $htmlFormElementId, $value) {
return '<input type="hidden" name="' . $htmlFormElementId . '" value="' . htmlentities($value) . '">';
}
/**
* @param array $formElement
* @param $htmlFormElementId
......@@ -687,7 +685,7 @@ abstract class AbstractBuildForm {
$attributeBase .= $this->getAttribute('name', $htmlFormElementId);
$html = $this->buildHidden($formElement, $htmlFormElementId, $value);
$html = $this->buildNativeHidden($htmlFormElementId, $value);
$flagFirst = true;
$ii = 0;
......@@ -715,6 +713,33 @@ abstract class AbstractBuildForm {
return $html;
}
/**
* Builds a real HTML hidden form element. Usefull for Checkboxes, Multiple-Select and Radios.
*
* @param $htmlFormElementId
* @param $value
* @return string
*/
public function buildNativeHidden($htmlFormElementId, $value) {
return '<input type="hidden" name="' . $htmlFormElementId . '" value="' . htmlentities($value) . '">';
}
/**
* Submit hidden values by SIP.
*
* Sometimes, it's usefull to precalculate values during formload and to submit them as hidden fields.
* To avoid any manipulation on those fields, the values will be transferred by SIP.
*
* @param array $formElement
* @param $htmlFormElementId
* @param $value
* @return string
*/
public function buildHidden(array $formElement, $htmlFormElementId, $value) {
$this->store->setVar($htmlFormElementId, $value, STORE_SIP, false);
}
/**
* Build HTML 'radio' element.
*
......@@ -744,7 +769,7 @@ abstract class AbstractBuildForm {
$jj = 0;
$flagFirst = true;
$html = $this->buildHidden($formElement, $htmlFormElementId, $value);
$html = $this->buildNativeHidden($htmlFormElementId, $value);
for ($ii = 0; $ii < count($itemValue); $ii++) {
$jj++;
$attribute = $attributeBase;
......@@ -1051,7 +1076,7 @@ abstract class AbstractBuildForm {
$html .= $this->wrap[WRAP_SETUP_IN_FIELDSET][WRAP_SETUP_START];
// child FE's
$sql = SQL_FORM_ELEMENT;
$sql = SQL_FORM_ELEMENT_SPECIFIC_CONTAINER;
$this->feSpecNative = $this->db->sql($sql, ROW_REGULAR, ['yes', $this->formSpec["id"], 'native,container', $formElement['id']]);
HelperFormElement::explodeFieldParameter($this->feSpecNative);
$html .= $this->elements($this->store->getVar(SIP_RECORD_ID, STORE_SIP), FORM_ELEMENTS_NATIVE_SUBRECORD);
......@@ -1067,5 +1092,22 @@ abstract class AbstractBuildForm {
return $html;
}
/**
* Create a new sip, based on latest STORE_SIP Values. Return complete HTML 'hidden' element.
*
* @return string
*/
public function builtNewSip() {
$sipArray = $this->store->getStore(STORE_SIP);
unset($sipArray[SIP_SIP]);
unset($sipArray[SIP_URLPARAM]);
$queryString = Support::arrayToQueryString($sipArray);
$sip = $this->store->getSip();
$sipValue = $sip->queryStringToSip($queryString, RETURN_SIP);
return $this->buildNativeHidden(CLIENT_SIP, $sipValue);
}
}
\ No newline at end of file
......@@ -161,6 +161,11 @@ class BuildFormBootstrap extends AbstractBuildForm {
return $this->formSpec['name'] . '_' . $id;
}
/**
* Simlute Submit Button: http://www.javascript-coder.com/javascript-form/javascript-form-submit.phtml
*
* @return string
*/
private function buildButtons() {
$html = <<<BUTTONS
<div class="col-md-2 ">
......@@ -181,6 +186,7 @@ BUTTONS;
return $html;
}
/**
* Builds the complete HTML '<form ...>'-tag
*
......@@ -200,14 +206,13 @@ BUTTONS;
*/
public function tail() {
$html = '';
// $sip = $this->store->getVar(CLIENT_SIP, STORE_CLIENT);
// $sipName = CLIENT_SIP;
// $html .= $this->buildHidden(array(), $sipName, $sip);
$html .= $this->builtNewSip();
// TODO: bootstrap. See BuildFormTable.tail()
$html .= '</div> <!--class="tab-content" -->'; // <div class="tab-content">
$html .= '<input type="submit" value="Submit">';
$html .= '</form>'; // <form class="form-horizontal" ...
$html .= '</div>'; // <div class="container-fluid">
return $html;
......@@ -225,7 +230,7 @@ BUTTONS;
$tmpStore = $this->feSpecNative;
// child FE's
$sql = SQL_FORM_ELEMENT;
$sql = SQL_FORM_ELEMENT_SPECIFIC_CONTAINER;
$this->feSpecNative = $this->db->sql($sql, ROW_REGULAR, ['yes', $this->formSpec["id"], 'native,container', $formElement['id']]);
HelperFormElement::explodeFieldParameter($this->feSpecNative);
$html = $this->elements($this->store->getVar(SIP_RECORD_ID, STORE_SIP), FORM_ELEMENTS_NATIVE_SUBRECORD);
......
......@@ -85,9 +85,7 @@ class BuildFormPlain extends AbstractBuildForm {
public function tail() {
$html = '';
$sip = $this->store->getVar(CLIENT_SIP, STORE_CLIENT);
$sipName = CLIENT_SIP;
$html .= $this->buildHidden(array(), $sipName, $sip);
$html .= $this->builtNewSip();
$html .= $this->wrapItem(WRAP_SETUP_INPUT, '<input type="submit" value="Submit">');
$html = $this->wrapItem(WRAP_SETUP_ELEMENT, $html);
......
......@@ -111,14 +111,12 @@ class BuildFormTable extends AbstractBuildForm {
public function tail() {
$html = '';
$sip = $this->store->getVar(CLIENT_SIP, STORE_CLIENT);
$sipName = CLIENT_SIP;
$html .= $this->wrapItem(WRAP_SETUP_LABEL, '', false);
$html .= $this->wrapItem(WRAP_SETUP_INPUT, '<input type="submit" value="Submit">');
$html = $this->wrapItem(WRAP_SETUP_ELEMENT, $html);
$html .= '</table>';
$html .= $this->buildHidden(array(), $sipName, $sip);
$html .= $this->builtNewSip();
$html .= '</form>';
return $html;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment