diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 4755653f8..a7180508e 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -193,6 +193,7 @@ return array( 'Combodo\\iTop\\Application\\Helper\\CKEditorHelper' => $baseDir . '/sources/Application/Helper/CKEditorHelper.php', 'Combodo\\iTop\\Application\\Helper\\ExportHelper' => $baseDir . '/sources/Application/Helper/ExportHelper.php', 'Combodo\\iTop\\Application\\Helper\\FormHelper' => $baseDir . '/sources/Application/Helper/FormHelper.php', + 'Combodo\\iTop\\Application\\Helper\\ImportHelper' => $baseDir . '/sources/Application/Helper/ImportHelper.php', 'Combodo\\iTop\\Application\\Helper\\SearchHelper' => $baseDir . '/sources/Application/Helper/SearchHelper.php', 'Combodo\\iTop\\Application\\Helper\\Session' => $baseDir . '/sources/Application/Helper/Session.php', 'Combodo\\iTop\\Application\\Helper\\WebResourcesHelper' => $baseDir . '/sources/Application/Helper/WebResourcesHelper.php', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index 64da644bb..aea2e9b27 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -548,6 +548,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f 'Combodo\\iTop\\Application\\Helper\\CKEditorHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/CKEditorHelper.php', 'Combodo\\iTop\\Application\\Helper\\ExportHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/ExportHelper.php', 'Combodo\\iTop\\Application\\Helper\\FormHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/FormHelper.php', + 'Combodo\\iTop\\Application\\Helper\\ImportHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/ImportHelper.php', 'Combodo\\iTop\\Application\\Helper\\SearchHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/SearchHelper.php', 'Combodo\\iTop\\Application\\Helper\\Session' => __DIR__ . '/../..' . '/sources/Application/Helper/Session.php', 'Combodo\\iTop\\Application\\Helper\\WebResourcesHelper' => __DIR__ . '/../..' . '/sources/Application/Helper/WebResourcesHelper.php', diff --git a/pages/ajax.csvimport.php b/pages/ajax.csvimport.php index 2622652e0..a89c9a253 100644 --- a/pages/ajax.csvimport.php +++ b/pages/ajax.csvimport.php @@ -5,9 +5,11 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ +use Combodo\iTop\Application\Helper\ImportHelper; use Combodo\iTop\Application\UI\Base\Component\Alert\AlertUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\Select\Select; use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\TextArea; @@ -387,6 +389,14 @@ EOF } break; + case 'display_classes_select': + $oPage = new AjaxPage(""); + $sClassName = utils::ReadPostedParam('class_name', '', utils::ENUM_SANITIZATION_FILTER_CLASS); + $bAdvanced = utils::ReadPostedParam('advanced', 'false'); + $oClassesSelect = ImportHelper::GetClassesSelectUIBlock('class_name', $sClassName, UR_ACTION_BULK_MODIFY, $bAdvanced === 'true'); + $oPage->AddSubBlock($oClassesSelect); + break; + case 'get_csv_template': $sClassName = utils::ReadParam('class_name'); $sFormat = utils::ReadParam('format', 'csv'); diff --git a/pages/csvimport.php b/pages/csvimport.php index 926e3f4c0..da117ec53 100644 --- a/pages/csvimport.php +++ b/pages/csvimport.php @@ -5,6 +5,7 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ +use Combodo\iTop\Application\Helper\ImportHelper; use Combodo\iTop\Application\UI\Base\Component\Alert\AlertUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\CollapsibleSection\CollapsibleSectionUIBlockFactory; @@ -14,7 +15,6 @@ use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Html\Html; use Combodo\iTop\Application\UI\Base\Component\Input\FileSelect\FileSelectUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; -use Combodo\iTop\Application\UI\Base\Component\Input\Select\Select; use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Input\TextArea; @@ -30,7 +30,6 @@ use Combodo\iTop\Application\WebPage\AjaxPage; use Combodo\iTop\Application\WebPage\ErrorPage; use Combodo\iTop\Application\WebPage\iTopWebPage; use Combodo\iTop\Application\WebPage\WebPage; -use Combodo\iTop\Renderer\BlockRenderer; use Combodo\iTop\Service\Import\CSVImportPageProcessor; try { @@ -52,67 +51,6 @@ try { $oPage = new iTopWebPage(Dict::S('UI:Title:BulkImport')); $oPage->SetBreadCrumbEntry('ui-tool-bulkimport', Dict::S('Menu:CSVImportMenu'), Dict::S('UI:Title:BulkImport+'), '', 'fas fa-file-import', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES); - /** - * Helper function to build a select from the list of valid classes for a given action - * - * @deprecated 3.0.0 use GetClassesSelectUIBlock - * - * @param $sDefaultValue - * @param integer $iWidthPx The width (in pixels) of the drop-down list - * @param integer $iActionCode The ActionCode (from UserRights) to check for authorization for the classes - * - * @param string $sName The name of the select in the HTML form - * - * @return string The HTML fragment corresponding to the select tag - */ - function GetClassesSelect($sName, $sDefaultValue, $iWidthPx, $iActionCode = null) - { - DeprecatedCallsLog::NotifyDeprecatedPhpMethod('use GetClassesSelectUIBlock'); - $oSelectBlock = GetClassesSelectUIBlock($sName, $sDefaultValue, $iActionCode); - - return BlockRenderer::RenderBlockTemplates($oSelectBlock); - } - - /** - * Helper function to build a select from the list of valid classes for a given action - * - * @param string $sName The name of the select in the HTML form - * @param $sDefaultValue - * @param integer $iWidthPx The width (in pixels) of the drop-down list - * @param integer $iActionCode The ActionCode (from UserRights) to check for authorization for the classes - * - * @return \Combodo\iTop\Application\UI\Base\Component\Input\Select\ - */ - function GetClassesSelectUIBlock(string $sName, $sDefaultValue, int $iActionCode, bool $bAdvanced = false): Select - { - $oSelectBlock = SelectUIBlockFactory::MakeForSelect($sName, 'select_'.$sName); - $oOption = SelectOptionUIBlockFactory::MakeForSelectOption("", Dict::S('UI:CSVImport:ClassesSelectOne'), false); - $oSelectBlock->AddSubBlock($oOption); - $aValidClasses = []; - $aClassCategories = ['bizmodel', 'addon/authentication']; - if ($bAdvanced) { - $aClassCategories[] = 'grant_by_profile'; - } - if (UserRights::IsAdministrator()) { - $aClassCategories[] = 'application'; - } - foreach ($aClassCategories as $sClassCategory) { - foreach (MetaModel::GetClasses($sClassCategory) as $sClassName) { - if ((is_null($iActionCode) || UserRights::IsActionAllowed($sClassName, $iActionCode)) && - (!MetaModel::IsAbstract($sClassName))) { - $sDisplayName = ($bAdvanced) ? MetaModel::GetName($sClassName)." ($sClassName)" : MetaModel::GetName($sClassName); - $aValidClasses[$sDisplayName] = SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sDisplayName, ($sClassName == $sDefaultValue)); - } - } - } - ksort($aValidClasses); - foreach ($aValidClasses as $sValue => $oBlock) { - $oSelectBlock->AddSubBlock($oBlock); - } - - return $oSelectBlock; - } - /** * Helper to 'check' an input in an HTML form if the current value equals the value given * @@ -351,7 +289,7 @@ try { $oClassesSelect->AddSubBlock($oDefaultSelect); $aSynchroUpdate = utils::ReadParam('synchro_update', []); } else { - $oClassesSelect = GetClassesSelectUIBlock('class_name', $sClassName, UR_ACTION_BULK_MODIFY, (bool)$bAdvanced); + $oClassesSelect = ImportHelper::GetClassesSelectUIBlock('class_name', $sClassName, UR_ACTION_BULK_MODIFY, (bool)$bAdvanced); } $oPanel = TitleUIBlockFactory::MakeForPage(Dict::S('UI:Title:CSVImportStep3')); $oPage->AddSubBlock($oPanel); @@ -375,11 +313,9 @@ try { $oAdvancedMode->GetInput()->SetIsChecked(($bAdvanced == 1)); $oAdvancedMode->SetBeforeInput(false); $oAdvancedMode->GetInput()->AddCSSClass('ibo-input-checkbox'); + $oAdvancedMode->SetDescription(utils::EscapeHtml(Dict::S('UI:CSVImport:AdvancedMode+'))); $oMulticolumn->AddColumn(ColumnUIBlockFactory::MakeForBlock($oAdvancedMode)); - $oDivAdvancedHelp = UIContentBlockUIBlockFactory::MakeStandard("advanced_help")->AddCSSClass('ibo-is-hidden'); - $oForm->AddSubBlock($oDivAdvancedHelp); - $oDivMapping = UIContentBlockUIBlockFactory::MakeStandard("mapping")->AddCSSClass('mt-5'); $oMessage = AlertUIBlockFactory::MakeForInformation(Dict::S('UI:CSVImport:SelectAClassFirst'))->SetIsClosable(false)->SetIsCollapsible(false); $oDivMapping->AddSubBlock($oMessage); @@ -416,7 +352,7 @@ try { $oPage->add_ready_script( <<add_script( - <<AddTab('tabsTemplate', Dict::S('UI:CSVImport:Tab:Templates')); - $oFieldTemplate = FieldUIBlockFactory::MakeFromObject(Dict::S('UI:CSVImport:PickClassForTemplate'), GetClassesSelectUIBlock('template_class', '', UR_ACTION_BULK_MODIFY)); + $oFieldTemplate = FieldUIBlockFactory::MakeFromObject(Dict::S('UI:CSVImport:PickClassForTemplate'), ImportHelper::GetClassesSelectUIBlock('template_class', '', UR_ACTION_BULK_MODIFY)); $oTabTemplate->AddSubBlock($oFieldTemplate); $oDivTemplate = UIContentBlockUIBlockFactory::MakeStandard("template")->AddCSSClass("ibo-is-visible"); $oTabTemplate->AddSubBlock($oDivTemplate); diff --git a/sources/Application/Helper/ImportHelper.php b/sources/Application/Helper/ImportHelper.php new file mode 100644 index 000000000..c6ffd43df --- /dev/null +++ b/sources/Application/Helper/ImportHelper.php @@ -0,0 +1,65 @@ +AddSubBlock($oOption); + $aValidClasses = []; + $aClassCategories = ['bizmodel', 'addon/authentication']; + if ($bAdvanced) { + $aClassCategories[] = 'grant_by_profile'; + } + if (UserRights::IsAdministrator()) { + $aClassCategories[] = 'application'; + } + foreach ($aClassCategories as $sClassCategory) { + foreach (MetaModel::GetClasses($sClassCategory) as $sClassName) { + if ((is_null($iActionCode) || UserRights::IsActionAllowed($sClassName, $iActionCode)) && + (!MetaModel::IsAbstract($sClassName))) { + $sDisplayName = ($bAdvanced) ? MetaModel::GetName($sClassName)." ($sClassName)" : MetaModel::GetName($sClassName); + $aValidClasses[$sDisplayName] = SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sDisplayName, ($sClassName == $sDefaultValue)); + } + } + } + ksort($aValidClasses); + foreach ($aValidClasses as $sValue => $oBlock) { + $oSelectBlock->AddSubBlock($oBlock); + } + + return $oSelectBlock; + } +}