Files
iTop/sources/Application/UI/Base/Component/Input/Set/SetUIBlockFactory.php
Stephen Abello ceba1ad1e9 N°7157 - Allow users to unsubscribe from notification channels (#611)
* N°7157 - Allow users to unsubscribe from notification channels

* Fix type hinting

* Add missing dict entries

* Allows to subscribe/unsubscribe from notifications individually

* Refactor NotificationsService to singleton pattern

* Refactor NotificationsRepository to singleton pattern and rename methods to a more functional naming

* Add PHPDoc and type hints

* Dump autoloaders

* Replace modals with toasts

* Add dict entry

---------

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
2024-02-19 09:25:47 +01:00

154 lines
5.7 KiB
PHP

<?php
/**
* Copyright (C) 2013-2023 Combodo SARL
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
namespace Combodo\iTop\Application\UI\Base\Component\Input\Set;
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\Set\DataProvider\AjaxDataProvider;
use Combodo\iTop\Application\UI\Base\Component\Input\Set\DataProvider\AjaxDataProviderForOQL;
use Combodo\iTop\Application\UI\Base\Component\Input\Set\DataProvider\SimpleDataProvider;
/**
* Class SetUIBlockFactory
*
* @api
*
* @since 3.1.0
* @package Combodo\iTop\Application\UI\Base\Component\Input\Set
*/
class SetUIBlockFactory extends AbstractUIBlockFactory
{
/** @inheritDoc */
public const TWIG_TAG_NAME = 'UISet';
/** @inheritDoc */
public const UI_BLOCK_CLASS_NAME = Set::class;
/**
* MakeForSimple.
*
* Create a simple set base on a static array of options.
* 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 array $aOptions Array containing options
* @param string $sLabelFields Field used for label rendering
* @param string $sValueField Field used for option value
* @param array $aSearchFields Fields used for searching
* @param string|null $sGroupField Field used for grouping
*
* @return \Combodo\iTop\Application\UI\Base\Component\Input\Set\Set
*/
public static function MakeForSimple(string $sId, array $aOptions, string $sLabelFields, string $sValueField, array $aSearchFields, ?string $sGroupField = null, ?string $sTooltipField = null): Set
{
// Create set ui block
$oSetUIBlock = new Set($sId);
// Simple data provider
$oDataProvider = new SimpleDataProvider($aOptions);
$oDataProvider
->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;
}
}