namespace Combodo\iTop\Renderer\Console\FieldRenderer; use Combodo\iTop\Form\Validator\MandatoryValidator; use \Dict; use \DBObjectSet; use Combodo\iTop\Renderer\FieldRenderer; use Combodo\iTop\Renderer\RenderingOutput; use Combodo\iTop\Form\Field\SelectObjectField; class ConsoleSelectObjectFieldRenderer extends FieldRenderer { public function Render() { $oOutput = new RenderingOutput(); $oOutput->AddHtml(''); $oOutput->AddHtml(''); if ($this->oField->GetLabel() != '') { $oOutput->AddHtml(''); } $oOutput->AddHtml(''); $oOutput->AddHtml(''); $oOutput->AddHtml('
'); $sEditType = 'none'; if ($this->oField->GetReadOnly()) { $oSearch = $this->oField->GetSearch()->DeepClone(); $oSearch->AddCondition('id', $this->oField->GetCurrentValue()); $oSet = new DBObjectSet($oSearch); $oObject = $oSet->Fetch(); if ($oObject) { $sCurrentLabel = $oObject->Get('friendlyname'); } else { $sCurrentLabel = ''; } $oOutput->AddHtml(''); $oOutput->AddHtml(''.htmlentities($sCurrentLabel, ENT_QUOTES, 'UTF-8').''); } else { $oSearch = $this->oField->GetSearch()->DeepClone(); $oSearch->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', true); $oSet = new \DBObjectSet($oSearch); $oSet->ApplyParameters(); $oSet->OptimizeColumnLoad(array($oSearch->GetClassAlias() => array('friendlyname'))); $sTargetClass = $oSearch->GetClass(); $oAllowedValues = new DBObjectSet($oSearch); $iMaxComboLength = $this->oField->GetMaximumComboLength(); $iCount = $oAllowedValues->Count(); if ($iCount > $iMaxComboLength) { // Auto-complete // $sEditType = 'autocomplete'; $aExtKeyParams = array(); $aExtKeyParams['iFieldSize'] = 10; $aExtKeyParams['iMinChars'] = $this->oField->GetMinAutoCompleteChars(); $sFieldName = $this->oField->GetGlobalId(); $sFieldId = $sFieldName; $sFormPrefix = ''; $oWidget = new \UIExtKeyWidget($sTargetClass, $sFieldId, '', true); $aArgs = array(); $sDisplayStyle = 'select'; $sTitle = $this->oField->GetLabel(); require_once(APPROOT.'application/capturewebpage.class.inc.php'); $oPage = new \CaptureWebPage(); $sHTMLValue = $oWidget->Display($oPage, $iMaxComboLength, false /* $bAllowTargetCreation */, $sTitle, $oSet, $this->oField->GetCurrentValue(), $sFieldId, $this->oField->GetMandatory(), $sFieldName, $sFormPrefix, $aArgs, null, $sDisplayStyle); $oOutput->AddHtml($sHTMLValue); $oOutput->AddHtml($oPage->GetHtml()); $oOutput->AddJs($oPage->GetJS()); $oOutput->AddJs($oPage->GetReadyJS()); foreach ($oPage->GetCSS() as $sCss) { $oOutput->AddCss($sCss); } foreach ($oPage->GetJSFiles() as $sFile) { $oOutput->AddJsFile($sFile); } foreach ($oPage->GetCSSFiles() as $sFile) { $oOutput->AddCssFile($sFile); } } elseif($this->oField->GetControlType() == SelectObjectField::CONTROL_RADIO_VERTICAL) { // Radio buttons (vertical) // $sEditType = 'radio'; $bVertical = true; $idx = 0; $bMandatory = $this->oField->GetMandatory(); $value = $this->oField->GetCurrentValue(); $sId = $this->oField->GetGlobalId(); $oOutput->AddHtml('
'); while ($oObject = $oSet->Fetch()) { $iObject = $oObject->GetKey(); $sLabel = $oObject->Get('friendlyname'); if (($iCount == 1) && $bMandatory) { // When there is only once choice, select it by default $sSelected = ' checked'; } else { $sSelected = ($value == $iObject) ? ' checked' : ''; } $oOutput->AddHtml(" "); if ($bVertical) { $oOutput->AddHtml("
\n"); } $idx++; } $oOutput->AddHtml('
'); $oOutput->AddHtml(""); } else { // Drop-down select // $sEditType = 'select'; $oOutput->AddHtml(''); } $oOutput->AddJs( <<oField->GetGlobalId()}").off("change").on("change", function(){ var me = this; $(this).closest(".field_set").trigger("field_change", { id: $(me).attr("id"), name: $(me).closest(".form_field").attr("data-field-id"), value: $(me).val() }) .closest('.form_handler').trigger('value_change'); }); EOF ); } $oOutput->AddHtml(''); $oOutput->AddHtml('
'); // JS Form field widget construct $aValidators = array(); foreach ($this->oField->GetValidators() as $oValidator) { if ($oValidator::GetName() == 'notemptyextkey') { // The autocomplete widget returns an empty string if the value is undefined (and the select has been aligned with this behavior) $oValidator = new MandatoryValidator(); } $aValidators[$oValidator::GetName()] = array( 'reg_exp' => $oValidator->GetRegExp(), 'message' => Dict::S($oValidator->GetErrorMessage()) ); } $sValidators = json_encode($aValidators); $sFormFieldOptions = <<'); oValidationElement.tooltip({ items: 'span', tooltipClass: 'form_field_error', content: function() { return $(this).find('img').attr('data-tooltip'); // As opposed to the default 'content' handler, do not escape the contents of 'title' } }); } } } EOF ; $oOutput->AddJs( <<AddJs( <<oField->GetGlobalId()}').val();}); EOF ); break; case 'select': $oOutput->AddJs( <<