SetDataLabelField($sLabelFields) ->SetDataValueField($sValueField) ->SetDataSearchFields($aSearchFields) ->SetTooltipField($sTooltipField ?? $sLabelFields); if ($sGroupField != null) { $oDataProvider->SetGroupField($sGroupField); } $oSetUIBlock->SetDataProvider($oDataProvider); return $oSetUIBlock; } /** * MakeForAjax. * * Create a dynamic set base on options provided by ajax call. * Options array must contain label, value and search string for each option. * Keys for each entry must be provided but can be the same. * If a group field is provided, options will be grouped according to this setting. * * @param string $sId Block identifier * @param string $sAjaxRoute Ajax route @see \Combodo\iTop\Service\Router\Router * @param array $aAjaxRouteParams Url query parameters * @param string $sLabelFields Field used for label * @param string $sValueField Field used for value * @param array $aSearchFields Fields used for search * @param string|null $sGroupField Field used for grouping * * @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set */ public static function MakeForAjax(string $sId, string $sAjaxRoute, array $aAjaxRouteParams, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null): Set { // Create set ui block $oSetUIBlock = new Set($sId); // Ajax data provider $oDataProvider = new AjaxDataProvider($sAjaxRoute, $aAjaxRouteParams); $oDataProvider ->SetDataLabelField($sLabelFields) ->SetDataValueField($sValueField) ->SetDataSearchFields($aSearchFields) ->SetTooltipField($sLabelFields); if ($sGroupField != null) { $oDataProvider->SetGroupField($sGroupField); } $oSetUIBlock->SetDataProvider($oDataProvider); return $oSetUIBlock; } /** * MakeForOQL. * * Create a oql set base on options provided by OQL call. * Options array must contain label, value and search string for each option. * Keys for each entry must be provided but can be the same. * If a group field is provided, options will be grouped according to this setting. * Default fields are loaded but you can request more. * * @param string $sId Block identifier * @param string $sObjectClass Object class * @param string $sOql OQL to query objects * @param string|null $sWizardHelperJsVarName Wizard helper name * @param array $aFieldsToLoad Additional fields to load on objects * @param string|null $sGroupField Field used for grouping * * @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set */ public static function MakeForOQL(string $sId, string $sObjectClass, string $sOql, string $sWizardHelperJsVarName = null, array $aFieldsToLoad = [], ?string $sGroupField = null): Set { // Create set ui block $oSetUIBlock = new Set($sId); // Renderers $oSetUIBlock->SetOptionsTemplate('application/object/set/option_renderer.html.twig'); $oSetUIBlock->SetItemsTemplate('application/object/set/item_renderer.html.twig'); // OQL data provider $oDataProvider = new AjaxDataProviderForOQL($sObjectClass, $sOql, $sWizardHelperJsVarName, $aFieldsToLoad); if ($sGroupField != null) { $oDataProvider->SetGroupField($sGroupField); } $oDataProvider->SetTooltipField('full_description'); $oSetUIBlock->SetDataProvider($oDataProvider); return $oSetUIBlock; } }