namespace Combodo\iTop\Renderer\Bootstrap\FieldRenderer; use \Dict; use \Combodo\iTop\Renderer\FieldRenderer; use \Combodo\iTop\Renderer\RenderingOutput; /** * Description of BsSimpleFieldRenderer * * @author Guillaume Lajarige */ class BsSimpleFieldRenderer extends FieldRenderer { public function Render() { $oOutput = new RenderingOutput(); $sFieldClass = get_class($this->oField); $sFieldId = 'field_' . spl_object_hash($this->oField); $sFieldMandatoryClass = ($this->oField->GetMandatory()) ? 'form_mandatory' : ''; // TODO : Shouldn't we have a field type so we don't have to maintain FQN classname ? // Rendering field in edition mode if (!$this->oField->GetReadOnly()) { switch ($sFieldClass) { case 'Combodo\\iTop\\Form\\Field\\StringField': $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml(''); } $oOutput->AddHtml('
'); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); break; case 'Combodo\\iTop\\Form\\Field\\TextAreaField': $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml(''); } $oOutput->AddHtml('
'); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); break; case 'Combodo\\iTop\\Form\\Field\\SelectField': $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml(''); } $oOutput->AddHtml('
'); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); break; case 'Combodo\\iTop\\Form\\Field\\RadioField': case 'Combodo\\iTop\\Form\\Field\\CheckboxField': $sFieldType = ($sFieldClass === 'Combodo\\iTop\\Form\\Field\\RadioField') ? 'radio' : 'checkbox'; $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml('
'); } $oOutput->AddHtml('
'); $oOutput->AddHtml('
'); $i = 0; foreach ($this->oField->GetChoices() as $sChoice => $sLabel) { // Note : The test is a double equal on purpose as the type of the value received from the XHR is not always the same as the type of the allowed values. (eg : string vs int) $sCheckedAtt = ($this->oField->IsAmongValues($sChoice)) ? 'checked' : ''; $sCheckedClass = ($this->oField->IsAmongValues($sChoice)) ? 'active' : ''; $oOutput->AddHtml(''); $i++; } $oOutput->AddHtml('
'); $oOutput->AddHtml('
'); break; case 'Combodo\\iTop\\Form\\Field\\HiddenField': $oOutput->AddHtml(''); break; } } // ... and in read-only mode else { // ... specific rendering for fields with mulltiple values if (($this->oField instanceof Combodo\iTop\Form\Field\MultipleChoicesField) && ($this->oField->GetMultipleValuesEnabled())) { // TODO } // ... clasic rendering for fields with only one value else { switch ($sFieldClass) { case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\TextAreaField': $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml(''); } $oOutput->AddHtml('
' . $this->oField->GetCurrentValue() . '
'); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); break; case 'Combodo\\iTop\\Form\\Field\\RadioField': case 'Combodo\\iTop\\Form\\Field\\SelectField': // TODO : This should be check for external key, as we would display it differently $aFieldChoices = $this->oField->GetChoices(); $sFieldValue = (isset($aFieldChoices[$this->oField->GetCurrentValue()])) ? $aFieldChoices[$this->oField->GetCurrentValue()] : Dict::S('UI:UndefinedObject'); $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { $oOutput->AddHtml(''); } $oOutput->AddHtml('
' . $sFieldValue . '
'); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); break; } } } // JS FieldChange trigger (:input are not always at the same depth) switch ($sFieldClass) { case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\TextAreaField': case 'Combodo\\iTop\\Form\\Field\\SelectField': case 'Combodo\\iTop\\Form\\Field\\HiddenField': $oOutput->AddJs( <<AddJs( <<oField->GetValidators() as $oValidator) { $aValidators[$oValidator::GetName()] = array( 'reg_exp' => $oValidator->GetRegExp(), 'message' => Dict::S($oValidator->GetErrorMessage()) ); } $sFormFieldOptions = json_encode(array( 'validators' => $aValidators )); switch ($sFieldClass) { case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\TextAreaField': case 'Combodo\\iTop\\Form\\Field\\SelectField': case 'Combodo\\iTop\\Form\\Field\\HiddenField': case 'Combodo\\iTop\\Form\\Field\\RadioField': case 'Combodo\\iTop\\Form\\Field\\CheckboxField': $oOutput->AddJs( <<