public static function DisplayFromAttCode($oPage, $sAttCode, $sClass, $sTitle, $oAllowedValues, $value, $iInputId, $bMandatory, $sFieldName = '', $sFormPrefix = '', $aArgs, $bSearchMode = false) { $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); $sTargetClass = $oAttDef->GetTargetClass(); $iMaxComboLength = $oAttDef->GetMaximumComboLength(); $bAllowTargetCreation = $oAttDef->AllowTargetCreation(); if (!$bSearchMode) { $sDisplayStyle = $oAttDef->GetDisplayStyle(); } else { $sDisplayStyle = 'select'; // In search mode, always use a drop-down list } $oWidget = new UIExtKeyWidget($sTargetClass, $iInputId, $sAttCode, $bSearchMode); return $oWidget->Display($oPage, $iMaxComboLength, $bAllowTargetCreation, $sTitle, $oAllowedValues, $value, $iInputId, $bMandatory, $sFieldName, $sFormPrefix, $aArgs, null, $sDisplayStyle); }
protected function DisplaySearchField($sClass, $sAttSpec, $aExtraParams, $sPrefix, $sFieldName = null, $aFilterParams = array()) { if (is_null($sFieldName)) { $sFieldName = str_replace('->', PARAM_ARROW_SEP, $sAttSpec); } $iPos = strpos($sAttSpec, '->'); if ($iPos !== false) { $sAttCode = substr($sAttSpec, 0, $iPos); $sSubSpec = substr($sAttSpec, $iPos + 2); if (!MetaModel::IsValidAttCode($sClass, $sAttCode)) { throw new Exception("Invalid attribute code '{$sClass}/{$sAttCode}' in search specification '{$sAttSpec}'"); } $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); if ($oAttDef->IsLinkSet()) { $sTargetClass = $oAttDef->GetLinkedClass(); } elseif ($oAttDef->IsExternalKey(EXTKEY_ABSOLUTE)) { $sTargetClass = $oAttDef->GetTargetClass(EXTKEY_ABSOLUTE); } else { throw new Exception("Attribute specification '{$sAttSpec}', '{$sAttCode}' should be either a link set or an external key"); } $this->DisplaySearchField($sTargetClass, $sSubSpec, $aExtraParams, $sPrefix, $sFieldName, $aFilterParams); } else { // $sAttSpec is an attribute code // $this->add('<span style="white-space: nowrap;padding:5px;display:inline-block;">'); $sFilterValue = ''; $sFilterValue = utils::ReadParam($sPrefix . $sFieldName, '', false, 'raw_data'); $sFilterOpCode = null; // Use the default 'loose' OpCode $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttSpec); if ($oAttDef->IsExternalKey()) { $sTargetClass = $oAttDef->GetTargetClass(); $sFilterDefName = 'PORTAL_TICKETS_SEARCH_FILTER_' . $sAttSpec; if (defined($sFilterDefName)) { try { $oFitlerWithParams = DBObjectSearch::FromOQL(constant($sFilterDefName)); $sFilterOQL = $oFitlerWithParams->ToOQL(true, $aFilterParams); $oAllowedValues = new DBObjectSet(DBObjectSearch::FromOQL($sFilterOQL), array(), $aFilterParams); } catch (OQLException $e) { throw new Exception("Incorrect filter '{$sFilterDefName}' for attribute '{$sAttcode}': " . $e->getMessage()); } } else { $oAllowedValues = new DBObjectSet(new DBObjectSearch($sTargetClass)); } $iFieldSize = $oAttDef->GetMaxSize(); $iMaxComboLength = $oAttDef->GetMaximumComboLength(); $this->add("<label>" . MetaModel::GetFilterLabel($sClass, $sAttSpec) . ":</label> "); //$oWidget = UIExtKeyWidget::DIsplayFromAttCode($sAttSpec, $sClass, $oAttDef->GetLabel(), $oAllowedValues, $sFilterValue, $sPrefix.$sFieldName, false, '', $sPrefix, ''); //$this->add($oWidget->Display($this, $aExtraParams, true /* bSearchMode */)); $aExtKeyParams = $aExtraParams; $aExtKeyParams['iFieldSize'] = $oAttDef->GetMaxSize(); $aExtKeyParams['iMinChars'] = $oAttDef->GetMinAutoCompleteChars(); // DisplayFromAttCode($this, $sAttCode, $sClass, $sTitle, $oAllowedValues, $value, $iInputId, $bMandatory, $sFieldName = '', $sFormPrefix = '', $aArgs, $bSearchMode = false) $sHtml = UIExtKeyWidget::DisplayFromAttCode($this, $sAttSpec, $sClass, $oAttDef->GetLabel(), $oAllowedValues, $sFilterValue, $sPrefix . $sFieldName, false, $sPrefix . $sFieldName, $sPrefix, $aExtKeyParams, true); $this->add($sHtml); } else { $aAllowedValues = MetaModel::GetAllowedValues_flt($sClass, $sAttSpec, $aExtraParams); if (is_null($aAllowedValues)) { // Any value is possible, display an input box $sSanitizedValue = htmlentities($sFilterValue, ENT_QUOTES, 'UTF-8'); $this->add("<label>" . MetaModel::GetFilterLabel($sClass, $sAttSpec) . ":</label> <input class=\"textSearch\" name=\"{$sPrefix}{$sFieldName}\" value=\"{$sSanitizedValue}\"/>\n"); } else { //Enum field or external key, display a combo $sValue = "<select name=\"{$sPrefix}{$sFieldName}\">\n"; $sValue .= "<option value=\"\">" . Dict::S('UI:SearchValue:Any') . "</option>\n"; foreach ($aAllowedValues as $key => $value) { if ($sFilterValue == $key) { $sSelected = ' selected'; } else { $sSelected = ''; } $sValue .= "<option value=\"{$key}\"{$sSelected}>{$value}</option>\n"; } $sValue .= "</select>\n"; $this->add("<label>" . MetaModel::GetFilterLabel($sClass, $sAttSpec) . ":</label> {$sValue}\n"); } } unset($aExtraParams[$sFieldName]); $this->add('</span> '); $sTip = $oAttDef->GetHelpOnSmartSearch(); if (strlen($sTip) > 0) { $sTip = addslashes($sTip); $sTip = str_replace(array("\n", "\r"), " ", $sTip); // :input does represent in form visible input (INPUT, SELECT, TEXTAREA) $this->add_ready_script("\$(':input[name={$sPrefix}{$sFieldName}]').qtip( { content: '{$sTip}', show: 'mouseover', hide: 'mouseout', style: { name: 'dark', tip: 'leftTop' }, position: { corner: { target: 'rightMiddle', tooltip: 'leftTop' }} } );"); } } }
public static function GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef, $value = '', $sDisplayValue = '', $iId = '', $sNameSuffix = '', $iFlags = 0, $aArgs = array()) { static $iInputId = 0; $sFieldPrefix = ''; $sFormPrefix = isset($aArgs['formPrefix']) ? $aArgs['formPrefix'] : ''; $sFieldPrefix = isset($aArgs['prefix']) ? $sFormPrefix . $aArgs['prefix'] : $sFormPrefix; if ($sDisplayValue == '') { $sDisplayValue = $value; } if (isset($aArgs[$sAttCode]) && empty($value)) { // default value passed by the context (either the app context of the operation) $value = $aArgs[$sAttCode]; } if (!empty($iId)) { $iInputId = $iId; } else { $iInputId = $oPage->GetUniqueId(); } if (!$oAttDef->IsExternalField()) { $bMandatory = 'false'; if (!$oAttDef->IsNullAllowed() || $iFlags & OPT_ATT_MANDATORY) { $bMandatory = 'true'; } $sValidationField = "<span class=\"form_validation\" id=\"v_{$iId}\"></span>"; $sHelpText = htmlentities($oAttDef->GetHelpOnEdition(), ENT_QUOTES, 'UTF-8'); $aEventsList = array(); switch ($oAttDef->GetEditClass()) { case 'Date': $aEventsList[] = 'validate'; $aEventsList[] = 'keyup'; $aEventsList[] = 'change'; if ($iFlags & OPT_ATT_MANDATORY && empty($sDisplayValue)) { $sDisplayValue = date($oAttDef->GetDateFormat()); } $sHTMLValue = "<input title=\"{$sHelpText}\" class=\"date-pick\" type=\"text\" size=\"12\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"" . htmlentities($sDisplayValue, ENT_QUOTES, 'UTF-8') . "\" id=\"{$iId}\"/> {$sValidationField}"; break; case 'DateTime': $aEventsList[] = 'validate'; $aEventsList[] = 'keyup'; $aEventsList[] = 'change'; if ($iFlags & OPT_ATT_MANDATORY && empty($sDisplayValue)) { $sDisplayValue = date($oAttDef->GetDateFormat()); } $sHTMLValue = "<input title=\"{$sHelpText}\" class=\"datetime-pick\" type=\"text\" size=\"20\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"" . htmlentities($sDisplayValue, ENT_QUOTES, 'UTF-8') . "\" id=\"{$iId}\"/> {$sValidationField}"; break; case 'Duration': $aEventsList[] = 'validate'; $aEventsList[] = 'change'; $oPage->add_ready_script("\$('#{$iId}_d').bind('keyup change', function(evt, sFormId) { return UpdateDuration('{$iId}'); });"); $oPage->add_ready_script("\$('#{$iId}_h').bind('keyup change', function(evt, sFormId) { return UpdateDuration('{$iId}'); });"); $oPage->add_ready_script("\$('#{$iId}_m').bind('keyup change', function(evt, sFormId) { return UpdateDuration('{$iId}'); });"); $oPage->add_ready_script("\$('#{$iId}_s').bind('keyup change', function(evt, sFormId) { return UpdateDuration('{$iId}'); });"); $aVal = AttributeDuration::SplitDuration($value); $sDays = "<input title=\"{$sHelpText}\" type=\"text\" style=\"text-align:right\" size=\"3\" name=\"attr_{$sFieldPrefix}{$sAttCode}[d]{$sNameSuffix}\" value=\"{$aVal['days']}\" id=\"{$iId}_d\"/>"; $sHours = "<input title=\"{$sHelpText}\" type=\"text\" style=\"text-align:right\" size=\"2\" name=\"attr_{$sFieldPrefix}{$sAttCode}[h]{$sNameSuffix}\" value=\"{$aVal['hours']}\" id=\"{$iId}_h\"/>"; $sMinutes = "<input title=\"{$sHelpText}\" type=\"text\" style=\"text-align:right\" size=\"2\" name=\"attr_{$sFieldPrefix}{$sAttCode}[m]{$sNameSuffix}\" value=\"{$aVal['minutes']}\" id=\"{$iId}_m\"/>"; $sSeconds = "<input title=\"{$sHelpText}\" type=\"text\" style=\"text-align:right\" size=\"2\" name=\"attr_{$sFieldPrefix}{$sAttCode}[s]{$sNameSuffix}\" value=\"{$aVal['seconds']}\" id=\"{$iId}_s\"/>"; $sHidden = "<input type=\"hidden\" id=\"{$iId}\" value=\"" . htmlentities($value, ENT_QUOTES, 'UTF-8') . "\"/>"; $sHTMLValue = Dict::Format('UI:DurationForm_Days_Hours_Minutes_Seconds', $sDays, $sHours, $sMinutes, $sSeconds) . $sHidden . " " . $sValidationField; $oPage->add_ready_script("\$('#{$iId}').bind('update', function(evt, sFormId) { return ToggleDurationField('{$iId}'); });"); break; case 'Password': $aEventsList[] = 'validate'; $aEventsList[] = 'keyup'; $aEventsList[] = 'change'; $sHTMLValue = "<input title=\"{$sHelpText}\" type=\"password\" size=\"30\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"" . htmlentities($value, ENT_QUOTES, 'UTF-8') . "\" id=\"{$iId}\"/> {$sValidationField}"; break; case 'OQLExpression': case 'Text': $aEventsList[] = 'validate'; $aEventsList[] = 'keyup'; $aEventsList[] = 'change'; $sEditValue = $oAttDef->GetEditValue($value); $aStyles = array(); $sStyle = ''; $sWidth = $oAttDef->GetWidth('width', ''); if (!empty($sWidth)) { $aStyles[] = 'width:' . $sWidth; } $sHeight = $oAttDef->GetHeight('height', ''); if (!empty($sHeight)) { $aStyles[] = 'height:' . $sHeight; } if (count($aStyles) > 0) { $sStyle = 'style="' . implode('; ', $aStyles) . '"'; } if ($oAttDef->GetEditClass() == 'OQLExpression') { $sTestResId = 'query_res_' . $sFieldPrefix . $sAttCode . $sNameSuffix; //$oPage->GetUniqueId(); $sBaseUrl = utils::GetAbsoluteUrlAppRoot() . 'pages/run_query.php?expression='; $sInitialUrl = $sBaseUrl . urlencode($sEditValue); $sAdditionalStuff = "<a id=\"{$sTestResId}\" target=\"_blank\" href=\"{$sInitialUrl}\">" . Dict::S('UI:Edit:TestQuery') . "</a>"; $oPage->add_ready_script("\$('#{$iId}').bind('change keyup', function(evt, sFormId) { \$('#{$sTestResId}').attr('href', '{$sBaseUrl}'+encodeURIComponent(\$(this).val())); } );"); } else { $sAdditionalStuff = ""; } // Ok, the text area is drawn here $sHTMLValue = "<table><tr><td><textarea class=\"resizable\" title=\"{$sHelpText}\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" rows=\"8\" cols=\"40\" id=\"{$iId}\" {$sStyle}>" . htmlentities($sEditValue, ENT_QUOTES, 'UTF-8') . "</textarea>{$sAdditionalStuff}</td><td>{$sValidationField}</td></tr></table>"; break; case 'CaseLog': $aStyles = array(); $sStyle = ''; $sWidth = $oAttDef->GetWidth('width', ''); if (!empty($sWidth)) { $aStyles[] = 'width:' . $sWidth; } $sHeight = $oAttDef->GetHeight('height', ''); if (!empty($sHeight)) { $aStyles[] = 'height:' . $sHeight; } if (count($aStyles) > 0) { $sStyle = 'style="' . implode('; ', $aStyles) . '"'; } $sHeader = '<div class="caselog_input_header"> ' . Dict::S('UI:CaseLogTypeYourTextHere') . '</div>'; $sEditValue = $oAttDef->GetEditValue($value); $sPreviousLog = is_object($value) ? $value->GetAsHTML($oPage, true, array('AttributeText', 'RenderWikiHtml')) : ''; $iEntriesCount = is_object($value) ? count($value->GetIndex()) : 0; $sHidden = "<input type=\"hidden\" id=\"{$iId}_count\" value=\"{$iEntriesCount}\"/>"; // To know how many entries the case log already contains $sHTMLValue = "<div class=\"caselog\" {$sStyle}><table style=\"width:100%;\"><tr><td>{$sHeader}<textarea style=\"border:0;width:100%\" title=\"{$sHelpText}\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" rows=\"8\" cols=\"40\" id=\"{$iId}\">" . htmlentities($sEditValue, ENT_QUOTES, 'UTF-8') . "</textarea>{$sPreviousLog}</td><td>{$sValidationField}</td></tr></table>{$sHidden}</div>"; $oPage->add_ready_script("\$('#{$iId}').bind('keyup change validate', function(evt, sFormId) { return ValidateCaseLogField('{$iId}', {$bMandatory}, sFormId) } );"); // Custom validation function break; case 'HTML': $oWidget = new UIHTMLEditorWidget($iId, $oAttDef, $sNameSuffix, $sFieldPrefix, $sHelpText, $sValidationField, $value, $bMandatory); $sHTMLValue = $oWidget->Display($oPage, $aArgs); break; case 'LinkedSet': if ($oAttDef->IsIndirect()) { $oWidget = new UILinksWidget($sClass, $sAttCode, $iId, $sNameSuffix, $oAttDef->DuplicatesAllowed(), $aArgs); } else { $oWidget = new UILinksWidgetDirect($sClass, $sAttCode, $iId, $sNameSuffix, $aArgs); } $aEventsList[] = 'validate'; $aEventsList[] = 'change'; $oObj = isset($aArgs['this']) ? $aArgs['this'] : null; $sHTMLValue = $oWidget->Display($oPage, $value, array(), $sFormPrefix, $oObj); break; case 'Document': $aEventsList[] = 'validate'; $aEventsList[] = 'change'; $oDocument = $value; // Value is an ormDocument object $sFileName = ''; if (is_object($oDocument)) { $sFileName = $oDocument->GetFileName(); } $iMaxFileSize = utils::ConvertToBytes(ini_get('upload_max_filesize')); $sHTMLValue = "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"{$iMaxFileSize}\" />\n"; $sHTMLValue .= "<input name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}[filename]\" type=\"hidden\" id=\"{$iId}\" \" value=\"" . htmlentities($sFileName, ENT_QUOTES, 'UTF-8') . "\"/>\n"; $sHTMLValue .= "<span id=\"name_{$iInputId}\">{$sFileName}</span><br/>\n"; $sHTMLValue .= "<input title=\"{$sHelpText}\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}[fcontents]\" type=\"file\" id=\"file_{$iId}\" onChange=\"UpdateFileName('{$iId}', this.value)\"/> {$sValidationField}\n"; break; case 'StopWatch': $sHTMLValue = "The edition of a stopwatch is not allowed!!!"; break; case 'List': // Not editable for now... $sHTMLValue = ''; break; case 'One Way Password': $aEventsList[] = 'validate'; $oWidget = new UIPasswordWidget($sAttCode, $iId, $sNameSuffix); $sHTMLValue = $oWidget->Display($oPage, $aArgs); // Event list & validation is handled directly by the widget break; case 'ExtKey': $aEventsList[] = 'validate'; $aEventsList[] = 'change'; $oAllowedValues = MetaModel::GetAllowedValuesAsObjectSet($sClass, $sAttCode, $aArgs); $sFieldName = $sFieldPrefix . $sAttCode . $sNameSuffix; $aExtKeyParams = $aArgs; $aExtKeyParams['iFieldSize'] = $oAttDef->GetMaxSize(); $aExtKeyParams['iMinChars'] = $oAttDef->GetMinAutoCompleteChars(); $sHTMLValue = UIExtKeyWidget::DisplayFromAttCode($oPage, $sAttCode, $sClass, $oAttDef->GetLabel(), $oAllowedValues, $value, $iId, $bMandatory, $sFieldName, $sFormPrefix, $aExtKeyParams); $sHTMLValue .= "<!-- iFlags: {$iFlags} bMandatory: {$bMandatory} -->\n"; break; case 'RedundancySetting': $sHTMLValue = '<table>'; $sHTMLValue .= '<tr>'; $sHTMLValue .= '<td>'; $sHTMLValue .= '<div id="' . $iId . '">'; $sHTMLValue .= $oAttDef->GetDisplayForm($value, $oPage, true); $sHTMLValue .= '</div>'; $sHTMLValue .= '</td>'; $sHTMLValue .= '<td>' . $sValidationField . '</td>'; $sHTMLValue .= '</tr>'; $sHTMLValue .= '</table>'; $oPage->add_ready_script("\$('#{$iId} :input').bind('keyup change validate', function(evt, sFormId) { return ValidateRedundancySettings('{$iId}',sFormId); } );"); // Custom validation function break; case 'String': default: $aEventsList[] = 'validate'; // #@# todo - add context information (depending on dimensions) $aAllowedValues = MetaModel::GetAllowedValues_att($sClass, $sAttCode, $aArgs); $iFieldSize = $oAttDef->GetMaxSize(); if ($aAllowedValues !== null) { // Discrete list of values, use a SELECT or RADIO buttons depending on the config $sDisplayStyle = $oAttDef->GetDisplayStyle(); switch ($sDisplayStyle) { case 'radio': case 'radio_horizontal': case 'radio_vertical': $sHTMLValue = ''; $bVertical = $sDisplayStyle != 'radio_horizontal'; $sHTMLValue = $oPage->GetRadioButtons($aAllowedValues, $value, $iId, "attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}", $bMandatory, $bVertical, $sValidationField); $aEventsList[] = 'change'; break; case 'select': default: $sHTMLValue = "<select title=\"{$sHelpText}\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" id=\"{$iId}\">\n"; $sHTMLValue .= "<option value=\"\">" . Dict::S('UI:SelectOne') . "</option>\n"; foreach ($aAllowedValues as $key => $display_value) { if (count($aAllowedValues) == 1 && $bMandatory == 'true') { // When there is only once choice, select it by default $sSelected = ' selected'; } else { $sSelected = $value == $key ? ' selected' : ''; } $sHTMLValue .= "<option value=\"{$key}\"{$sSelected}>{$display_value}</option>\n"; } $sHTMLValue .= "</select> {$sValidationField}\n"; $aEventsList[] = 'change'; } } else { $sHTMLValue = "<input title=\"{$sHelpText}\" type=\"text\" size=\"30\" maxlength=\"{$iFieldSize}\" name=\"attr_{$sFieldPrefix}{$sAttCode}{$sNameSuffix}\" value=\"" . htmlentities($sDisplayValue, ENT_QUOTES, 'UTF-8') . "\" id=\"{$iId}\"/> {$sValidationField}"; $aEventsList[] = 'keyup'; $aEventsList[] = 'change'; } break; } $sPattern = addslashes($oAttDef->GetValidationPattern()); //'^([0-9]+)$'; if (!empty($aEventsList)) { $sNullValue = $oAttDef->GetNullValue(); if (!is_numeric($sNullValue)) { $sNullValue = "'{$sNullValue}'"; // Add quotes to turn this into a JS string if it's not a number } $sOriginalValue = $iFlags & OPT_ATT_MUSTCHANGE ? json_encode($value) : 'undefined'; $oPage->add_ready_script("\$('#{$iId}').bind('" . implode(' ', $aEventsList) . "', function(evt, sFormId) { return ValidateField('{$iId}', '{$sPattern}', {$bMandatory}, sFormId, {$sNullValue}, {$sOriginalValue}) } );\n"); // Bind to a custom event: validate } $aDependencies = MetaModel::GetDependentAttributes($sClass, $sAttCode); // List of attributes that depend on the current one if (count($aDependencies) > 0) { // Unbind first to avoid duplicate event handlers in case of reload of the whole (or part of the) form $oPage->add_ready_script("\$('#{$iId}').unbind('change.dependencies').bind('change.dependencies', function(evt, sFormId) { return oWizardHelper{$sFormPrefix}.UpdateDependentFields(['" . implode("','", $aDependencies) . "']) } );\n"); // Bind to a custom event: validate } } $oPage->add_dict_entry('UI:ValueMustBeSet'); $oPage->add_dict_entry('UI:ValueMustBeChanged'); $oPage->add_dict_entry('UI:ValueInvalidFormat'); return "<div>{$sHTMLValue}</div>"; }
case 'displayHierarchy': $oPage->SetContentType('text/html'); $sTargetClass = utils::ReadParam('sTargetClass', '', false, 'class'); $sInputId = utils::ReadParam('sInputId', ''); $sFilter = utils::ReadParam('sFilter', '', false, 'raw_data'); $sJson = utils::ReadParam('json', '', false, 'raw_data'); $currValue = utils::ReadParam('value', ''); $bSearchMode = utils::ReadParam('bSearchMode', 'false') == 'true'; if (!empty($sJson)) { $oWizardHelper = WizardHelper::FromJSON($sJson); $oObj = $oWizardHelper->GetTargetObject(); } else { // Search form: no current object $oObj = null; } $oWidget = new UIExtKeyWidget($sTargetClass, $sInputId, '', $bSearchMode); $oWidget->DisplayHierarchy($oPage, $sFilter, $currValue, $oObj); break; //////////////////////////////////////////////////// // ui.linkswidget //////////////////////////////////////////////////// // ui.linkswidget case 'doAddObjects': $oPage->SetContentType('text/html'); $sAttCode = utils::ReadParam('sAttCode', ''); $iInputId = utils::ReadParam('iInputId', ''); $sSuffix = utils::ReadParam('sSuffix', ''); $sRemoteClass = utils::ReadParam('sRemoteClass', $sClass, false, 'class'); $bDuplicates = utils::ReadParam('bDuplicates', 'false') == 'false' ? false : true; $sJson = utils::ReadParam('json', '', false, 'raw_data'); $oWizardHelper = WizardHelper::FromJSON($sJson);
public function GetSiloSelectionForm() { // List of visible Organizations $iCount = 0; $oSet = null; if (MetaModel::IsValidClass('Organization')) { // Display the list of *favorite* organizations... but keeping in mind what is the real number of organizations $aFavoriteOrgs = appUserPreferences::GetPref('favorite_orgs', null); $oSearchFilter = new DBObjectSearch('Organization'); $oSearchFilter->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', true); $oSet = new CMDBObjectSet($oSearchFilter); $iCount = $oSet->Count(); // total number of existing Orgs // Now get the list of Orgs to be displayed in the menu $oSearchFilter = DBObjectSearch::FromOQL(ApplicationMenu::GetFavoriteSiloQuery()); $oSearchFilter->SetModifierProperty('UserRightsGetSelectFilter', 'bSearchMode', true); if (!empty($aFavoriteOrgs)) { $oSearchFilter->AddCondition('id', $aFavoriteOrgs, 'IN'); } $oSet = new CMDBObjectSet($oSearchFilter); // List of favorite orgs } switch ($iCount) { case 0: // No such dimension/silo => nothing to select $sHtml = '<div id="SiloSelection"><!-- nothing to select --></div>'; break; case 1: // Only one possible choice... no selection, but display the value $oOrg = $oSet->Fetch(); $sHtml = '<div id="SiloSelection">' . $oOrg->GetName() . '</div>'; $sHtml .= ''; break; default: $sHtml = ''; $oAppContext = new ApplicationContext(); $iCurrentOrganization = $oAppContext->GetCurrentValue('org_id'); $sHtml = '<div id="SiloSelection">'; $sHtml .= '<form style="display:inline" action="' . utils::GetAbsoluteUrlAppRoot() . 'pages/UI.php">'; //<select class="org_combo" name="c[org_id]" title="Pick an organization" onChange="this.form.submit();">'; $sFavoriteOrgs = ''; $oWidget = new UIExtKeyWidget('Organization', 'org_id', '', true); $sHtml .= $oWidget->Display($this, 50, false, '', $oSet, $iCurrentOrganization, 'org_id', false, 'c[org_id]', '', array('iFieldSize' => 20, 'iMinChars' => MetaModel::GetConfig()->Get('min_autocomplete_chars'), 'sDefaultValue' => Dict::S('UI:AllOrganizations')), null, 'select', false); $this->add_ready_script('$("#org_id").bind("extkeychange", function() { $("#SiloSelection form").submit(); } )'); $this->add_ready_script("\$('#label_org_id').click( function() { \$(this).val(''); \$('#org_id').val(''); return true; } );\n"); // Add other dimensions/context information to this form $oAppContext->Reset('org_id'); // org_id is handled above and we want to be able to change it here ! $oAppContext->Reset('menu'); // don't pass the menu, since a menu may expect more parameters $sHtml .= $oAppContext->GetForForm(); // Pass what remains, if anything... $sHtml .= '</form>'; $sHtml .= '</div>'; } return $sHtml; }