diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 83c1158e4..b8be30a29 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -18,8 +18,12 @@ use Combodo\iTop\Application\UI\Base\Component\FieldSet\FieldSetUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Form\Form; 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\Html\HtmlFactory; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Component\Input\SelectUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\MedallionIcon\MedallionIcon; +use Combodo\iTop\Application\UI\Base\Component\Panel\Panel; use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Title\Title; use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory; @@ -2947,6 +2951,91 @@ EOF } } + /** + * Select the derived class to create + * @param string $sClass + * @param \WebPage $oP + * @param \ApplicationContext $oAppContext + * @param array $sStateCode + * @param array $aPossibleClasses + * + * @return array + * @throws \CoreException + * @throws \DictExceptionMissingString + */ + public static function DisplaySelectClassToCreate(string $sClass, WebPage $oP, ApplicationContext $oAppContext, array $aPossibleClasses, array $aHiddenFields) + { + $sClassLabel = MetaModel::GetName($sClass); + $sTitle = Dict::Format('UI:CreationTitle_Class', $sClassLabel); + + $oP->set_title($sTitle); + $sClassIconUrl = MetaModel::GetClassIcon($sClass, false); + $oPanel = PanelUIBlockFactory::MakeForClass($sClass, $sTitle) + ->SetIcon($sClassIconUrl); + + + $oClassForm = FormUIBlockFactory::MakeStandard(); + $oPanel->AddMainBlock($oClassForm); + + $oClassForm->AddHtml($oAppContext->GetForForm()) + ->AddSubBlock(InputUIBlockFactory::MakeForHidden('checkSubclass', '0')) + ->AddSubBlock(InputUIBlockFactory::MakeForHidden('operation', 'new')); + + foreach ($aHiddenFields as $sKey => $sValue) { + if (is_scalar($sValue)) { + $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden($sKey, $sValue)); + } + } + + $aDefaults = utils::ReadParam('default', array(), false, 'raw_data'); + foreach ($aDefaults as $key => $value) { + if (is_array($value)) { + foreach ($value as $key2 => $value2) { + if (is_array($value2)) { + foreach ($value2 as $key3 => $value3) { + $sValue = utils::EscapeHtml($value3); + $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key][$key2][$key3]", $sValue)); + } + } else { + $sValue = utils::EscapeHtml($value2); + $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key][$key2]", $sValue)); + } + } + } else { + $sValue = utils::EscapeHtml($value); + $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key]", $sValue)); + } + } + + $oClassForm->AddSubBlock(self::DisplayBlockSelectClassToCreate($sClass, $sClassLabel, $aPossibleClasses)); + + $oP->AddSubBlock($oPanel); + } + + /** + * @param string $sClassLabel + * @param array $aPossibleClasses + * @param string $sClass + * + * @return UIContentBlock + * @throws \CoreException + */ + public static function DisplayBlockSelectClassToCreate( string $sClass, string $sClassLabel,array $aPossibleClasses): UIContentBlock + { + $oBlock= UIContentBlockUIBlockFactory::MakeStandard(); + $oBlock->AddSubBlock(HtmlFactory::MakeRaw(Dict::Format('UI:SelectTheTypeOf_Class_ToCreate', $sClassLabel))); + $oSelect = SelectUIBlockFactory::MakeForSelect('class'); + $oBlock->AddSubBlock($oSelect); + asort($aPossibleClasses); + foreach ($aPossibleClasses as $sClassName => $sClassLabel) { + $oSelect->AddOption(SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sClassLabel, ($sClassName == $sClass))); + } + + $oToolbar = ToolbarUIBlockFactory::MakeForAction(); + $oBlock->AddSubBlock($oToolbar); + $oToolbar->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), null, null, true)); + return $oBlock; + } /** * @param \WebPage $oPage * @param string $sClass diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php index 493ba7bce..0f9c44a48 100644 --- a/application/ui.extkeywidget.class.inc.php +++ b/application/ui.extkeywidget.class.inc.php @@ -4,6 +4,8 @@ * @license http://opensource.org/licenses/AGPL-3.0 */ +use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; use Combodo\iTop\Core\MetaModel\FriendlyNameType; require_once(APPROOT.'/application/displayblock.class.inc.php'); @@ -899,26 +901,17 @@ JS } } - $sDialogTitle = ''; - $oPage->add('
'); - $oPage->add('
'); - $sClassLabel = MetaModel::GetName($this->sTargetClass); - $oPage->add('

'.Dict::Format('UI:SelectTheTypeOf_Class_ToCreate', $sClassLabel)); - $oPage->add(''); - $oPage->add(' 

'); + $sDialogTitle = Dict::Format('UI:CreationTitle_Class', $sClassLabel);; + $oBlock = UIContentBlockUIBlockFactory::MakeStandard('ac_create_'.$this->iId,['ibo-is-visible']); + $oPage->AddSubBlock($oBlock); + $oClassForm = FormUIBlockFactory::MakeStandard(); + $oBlock->AddSubBlock($oClassForm); + $oClassForm->AddSubBlock(cmdbAbstractObject::DisplayBlockSelectClassToCreate( $sClassLabel, $this->sTargetClass, $aPossibleClasses)); - $oPage->add('
'); - $oPage->add('
'); - $oPage->add_ready_script("\$('#ac_create_$this->iId').dialog({ width: 'auto', height: 'auto', maxHeight: $(window).height() - 50, autoOpen: false, modal: true, title: '$sDialogTitle'});\n"); - $oPage->add_ready_script("$('#dcr_{$this->iId} form').removeAttr('onsubmit');"); - $oPage->add_ready_script("$('#dcr_{$this->iId} form').on('submit.uilinksWizard', oACWidget_{$this->iId}.DoSelectObjectClass);"); + $oPage->add_ready_script("$('#ac_create_$this->iId').dialog({ width: 'auto', height: 'auto', maxHeight: $(window).height() - 50, autoOpen: false, modal: true, title: '$sDialogTitle'});\n"); + $oPage->add_ready_script("$('#ac_create_{$this->iId} form').removeAttr('onsubmit');"); + $oPage->add_ready_script("$('#ac_create_{$this->iId} form').on('submit.uilinksWizard', oACWidget_{$this->iId}.DoSelectObjectClass);"); } /** diff --git a/pages/UI.php b/pages/UI.php index b20863d1d..227059c07 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -7,12 +7,8 @@ use Combodo\iTop\Application\TwigBase\Twig\TwigHelper; use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Form\Form; -use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\GlobalSearch\GlobalSearchHelper; -use Combodo\iTop\Application\UI\Base\Component\Html\HtmlFactory; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; -use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory; -use Combodo\iTop\Application\UI\Base\Component\Input\SelectUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\QuickCreate\QuickCreateHelper; use Combodo\iTop\Application\UI\Base\Component\Title\Title; @@ -753,54 +749,7 @@ EOF cmdbAbstractObject::DisplayCreationForm($oP, $sRealClass, $oObjToClone, array(), array('wizard_container' => 1, 'keep_source_object' => true)); // wizard_container: Display the title above the form } else { // Select the derived class to create - $sClassLabel = MetaModel::GetName($sClass); - $sClassIconUrl = MetaModel::GetClassIcon($sClass, false); - $sTitle = Dict::Format('UI:CreationTitle_Class', $sClassLabel); - - $oP->set_title($sTitle); - $oPanel = PanelUIBlockFactory::MakeForClass($sClass, $sTitle) - ->SetIcon($sClassIconUrl); - $oP->AddUiBlock($oPanel); - - $oClassForm = FormUIBlockFactory::MakeStandard(); - $oPanel->AddMainBlock($oClassForm); - - $oClassForm->AddSubBlock(HtmlFactory::MakeParagraph(Dict::Format('UI:SelectTheTypeOf_Class_ToCreate', $sClassLabel))) - ->AddHtml($oAppContext->GetForForm()) - ->AddSubBlock(InputUIBlockFactory::MakeForHidden('checkSubclass', '0')) - ->AddSubBlock(InputUIBlockFactory::MakeForHidden('state', $sStateCode)) - ->AddSubBlock(InputUIBlockFactory::MakeForHidden('operation', 'new')); - - $aDefaults = utils::ReadParam('default', array(), false, 'raw_data'); - foreach ($aDefaults as $key => $value) { - if (is_array($value)) { - foreach ($value as $key2 => $value2) { - if (is_array($value2)) { - foreach ($value2 as $key3 => $value3) { - $sValue = utils::EscapeHtml($value3); - $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key][$key2][$key3]", $sValue)); - } - } else { - $sValue = utils::EscapeHtml($value2); - $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key][$key2]", $sValue)); - } - } - } else { - $sValue = utils::EscapeHtml($value); - $oClassForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("default[$key]", $sValue)); - } - } - - $oSelect = SelectUIBlockFactory::MakeForSelect('class'); - $oClassForm->AddSubBlock($oSelect); - asort($aPossibleClasses); - foreach ($aPossibleClasses as $sClassName => $sClassLabel) { - $oSelect->AddOption(SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sClassLabel, ($sClassName == $sClass))); - } - - $oToolbar = ToolbarUIBlockFactory::MakeForAction(); - $oClassForm->AddSubBlock($oToolbar); - $oToolbar->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), null, null, true)); + cmdbAbstractObject::DisplaySelectClassToCreate($sClass, $oP, $oAppContext, $aPossibleClasses,['state' => $sStateCode]); } break;