Merge remote-tracking branch 'origin/support/3.2' into develop

# Conflicts:
#	core/kpi.class.inc.php
#	datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml
This commit is contained in:
jf-cbd
2025-06-16 15:03:36 +02:00
21 changed files with 109 additions and 32 deletions

View File

@@ -5020,7 +5020,7 @@ class AttributeCaseLog extends AttributeLongText
} }
else else
{ {
if (strlen($proposedValue) > 0) if (utils::StrLen($proposedValue) > 0)
{ {
//N°5135 - add impersonation information in caselog //N°5135 - add impersonation information in caselog
if (UserRights::IsImpersonated()){ if (UserRights::IsImpersonated()){

View File

@@ -2120,6 +2120,8 @@ class StimulusChecker extends ActionChecker
{ {
var $sState = null; var $sState = null;
public mixed $iState = null;
public function __construct(DBSearch $oFilter, $sState, $iStimulusCode) public function __construct(DBSearch $oFilter, $sState, $iStimulusCode)
{ {
parent::__construct($oFilter, $iStimulusCode); parent::__construct($oFilter, $iStimulusCode);

View File

@@ -151,7 +151,7 @@ Dict::Add('EN US', 'English', 'English', array(
'Class:Change/Stimulus:ev_approve+' => '', 'Class:Change/Stimulus:ev_approve+' => '',
'Class:Change/Stimulus:ev_replan' => 'Replan', 'Class:Change/Stimulus:ev_replan' => 'Replan',
'Class:Change/Stimulus:ev_replan+' => '', 'Class:Change/Stimulus:ev_replan+' => '',
'Class:Change/Stimulus:ev_notapprove' => 'Reject', 'Class:Change/Stimulus:ev_notapprove' => 'Reject approval',
'Class:Change/Stimulus:ev_notapprove+' => '', 'Class:Change/Stimulus:ev_notapprove+' => '',
'Class:Change/Stimulus:ev_implement' => 'Implement', 'Class:Change/Stimulus:ev_implement' => 'Implement',
'Class:Change/Stimulus:ev_implement+' => '', 'Class:Change/Stimulus:ev_implement+' => '',

View File

@@ -151,7 +151,7 @@ Dict::Add('EN GB', 'British English', 'British English', array(
'Class:Change/Stimulus:ev_approve+' => '', 'Class:Change/Stimulus:ev_approve+' => '',
'Class:Change/Stimulus:ev_replan' => 'Replan', 'Class:Change/Stimulus:ev_replan' => 'Replan',
'Class:Change/Stimulus:ev_replan+' => '', 'Class:Change/Stimulus:ev_replan+' => '',
'Class:Change/Stimulus:ev_notapprove' => 'Reject', 'Class:Change/Stimulus:ev_notapprove' => 'Reject approval',
'Class:Change/Stimulus:ev_notapprove+' => '', 'Class:Change/Stimulus:ev_notapprove+' => '',
'Class:Change/Stimulus:ev_implement' => 'Implement', 'Class:Change/Stimulus:ev_implement' => 'Implement',
'Class:Change/Stimulus:ev_implement+' => '', 'Class:Change/Stimulus:ev_implement+' => '',

View File

@@ -139,7 +139,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
'Class:Change/Stimulus:ev_approve+' => '~~', 'Class:Change/Stimulus:ev_approve+' => '~~',
'Class:Change/Stimulus:ev_replan' => 'Replan~~', 'Class:Change/Stimulus:ev_replan' => 'Replan~~',
'Class:Change/Stimulus:ev_replan+' => '~~', 'Class:Change/Stimulus:ev_replan+' => '~~',
'Class:Change/Stimulus:ev_notapprove' => 'Reject~~', 'Class:Change/Stimulus:ev_notapprove' => 'Reject approval~~',
'Class:Change/Stimulus:ev_notapprove+' => '~~', 'Class:Change/Stimulus:ev_notapprove+' => '~~',
'Class:Change/Stimulus:ev_implement' => 'Implement~~', 'Class:Change/Stimulus:ev_implement' => 'Implement~~',
'Class:Change/Stimulus:ev_implement+' => '~~', 'Class:Change/Stimulus:ev_implement+' => '~~',

View File

@@ -323,8 +323,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '', 'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '',
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nom Type', 'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nom Type',
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '', 'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Matériel connectés', 'Class:NetworkDevice/Attribute:connectablecis_list' => 'Matériel connecté',
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Tous les matériels connectés à cet appareil réseau', 'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Tous les équipements connectés à cet appareil réseau',
'Class:NetworkDevice/Attribute:iosversion_id' => 'Version IOS', 'Class:NetworkDevice/Attribute:iosversion_id' => 'Version IOS',
'Class:NetworkDevice/Attribute:iosversion_id+' => '', 'Class:NetworkDevice/Attribute:iosversion_id+' => '',
'Class:NetworkDevice/Attribute:iosversion_name' => 'Nom Version IOS', 'Class:NetworkDevice/Attribute:iosversion_name' => 'Nom Version IOS',
@@ -1597,7 +1597,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
'Class:lnkConnectableCIToNetworkDevice/Attribute:network_port+' => '', 'Class:lnkConnectableCIToNetworkDevice/Attribute:network_port+' => '',
'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port' => 'Port matériel', 'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port' => 'Port matériel',
'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port+' => '', 'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port+' => '',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => 'Type de connection', 'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => 'Type de connexion',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type+' => '', 'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type+' => '',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink' => 'lien descendant', 'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink' => 'lien descendant',
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => 'lien descendant', 'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => 'lien descendant',

View File

@@ -247,8 +247,10 @@
<db_key_field>link_id</db_key_field> <db_key_field>link_id</db_key_field>
<db_final_class_field/> <db_final_class_field/>
<naming> <naming>
<attributes id="error_name"/> <attributes>
<attributes id="functionalci_name"/> <attribute id="error_name"/>
<attribute id="functionalci_name"/>
</attributes>
</naming> </naming>
<style> <style>
<icon/> <icon/>

View File

@@ -21,6 +21,8 @@
namespace Combodo\iTop\Portal\Brick; namespace Combodo\iTop\Portal\Brick;
use Combodo\iTop\DesignElement; use Combodo\iTop\DesignElement;
use Combodo\iTop\Portal\Service\TemplatesProvider\TemplateDefinitionDto;
use Combodo\iTop\Portal\Service\TemplatesProvider\TemplatesRegister;
use DOMFormatException; use DOMFormatException;
/** /**
@@ -46,6 +48,17 @@ class CreateBrick extends PortalBrick
/** @var array $aRules */ /** @var array $aRules */
protected $aRules; protected $aRules;
const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/create/modal.html.twig';
/** @inheritdoc */
public static function RegisterTemplates(TemplatesRegister $oTemplatesRegister): void
{
parent::RegisterTemplates($oTemplatesRegister);
$oTemplatesRegister->RegisterTemplates(self::class,
TemplateDefinitionDto::Create('page', static::TEMPLATES_BASE_PATH . 'create/modal.html.twig')
);
}
/** /**
* Constructor * Constructor
*/ */

View File

@@ -359,7 +359,8 @@ class ObjectFormManager extends FormManager
foreach ($this->aFieldsAtts as $sAttCode => $iFieldFlags) foreach ($this->aFieldsAtts as $sAttCode => $iFieldFlags)
{ {
// handle plugins fields // handle plugins fields
if(array_key_exists($sAttCode, $this->aExtraData) if($this->sMode !== 'apply_stimulus'
&& array_key_exists($sAttCode, $this->aExtraData)
&& array_key_exists('plugin', $this->aExtraData[$sAttCode])){ && array_key_exists('plugin', $this->aExtraData[$sAttCode])){
$sPluginName = $this->aExtraData[$sAttCode]['plugin']; $sPluginName = $this->aExtraData[$sAttCode]['plugin'];
switch($sPluginName){ switch($sPluginName){
@@ -713,7 +714,8 @@ class ObjectFormManager extends FormManager
// fallback Checking if the instance has attachments // fallback Checking if the instance has attachments
// (in case attachment is not explicitly declared in layout) // (in case attachment is not explicitly declared in layout)
if (class_exists('Attachment') && class_exists('AttachmentPlugIn') if ($this->sMode !== 'apply_stimulus'
&& class_exists('Attachment') && class_exists('AttachmentPlugIn')
&& !$this->IsPluginInitialized(AttachmentPlugIn::class) && !$this->IsPluginInitialized(AttachmentPlugIn::class)
&& AttachmentPlugIn::IsAttachmentAllowedForObject($this->oObject)){ && AttachmentPlugIn::IsAttachmentAllowedForObject($this->oObject)){
$this->AddAttachmentField($this->oForm, 'attachments_plugin', $this->aExtraData); $this->AddAttachmentField($this->oForm, 'attachments_plugin', $this->aExtraData);

View File

@@ -0,0 +1,44 @@
{# itop-portal-base/portal/templates/bricks/create/layout.html.twig #}
{# Create brick base layout #}
{% extends 'itop-portal-base/portal/templates/modal/layout.html.twig' %}
{% block pModalTitle %}
{{ sPageTitle|dict_s }}
{% endblock %}
{% block pModalBody %}
<p>{{ 'Brick:Portal:Create:ChooseType'|dict_s }}</p>
<ul id="{{ sLeafClassesListId }}">
{% for aLeafClass in aLeafClasses %}
<li><a href="#" data-target-class="{{ aLeafClass.id }}">{{ aLeafClass.name }}</a></li>
{% endfor %}
</ul>
<script type="text/javascript">
$(document).ready(function(){
$('#{{ sLeafClassesListId }} a').off('click').on('click', function(oEvent){
oEvent.preventDefault();
// Preparing target class url
var sUrl = '{{ app['url_generator'].generate('p_object_create', {sObjectClass : '-sObjectClass-'})|raw }}';
sUrl = sUrl.replace(/-sObjectClass-/, $(this).attr('data-target-class') );
sUrl = CombodoGlobalToolbox.AddParameterToUrl(sUrl, 'ar_token', '{{ ar_token }}');
// Creating a new modal
CombodoModal.OpenModal({
base_modal: {
usage: 'replace',
selector: $(this).closest('.modal'),
},
content: {
endpoint: sUrl,
},
});
});
});
</script>
{% endblock %}
{% block pModalFooter %}
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'Portal:Button:Cancel'|dict_s }}</button>
{% endblock %}

View File

@@ -199,7 +199,7 @@
<profiles> <profiles>
<profile id="117" _delta="define"> <profile id="117" _delta="define">
<name>SuperUser</name> <name>SuperUser</name>
<description>This profil allows all actions which are not Administrator restricted.</description> <description>This profile allows all actions which are not Administrator restricted.</description>
<groups> <groups>
<group id="AdminTools"> <group id="AdminTools">
<actions> <actions>
@@ -268,6 +268,11 @@
<action id="stimulus:ev_plan">allow</action> <action id="stimulus:ev_plan">allow</action>
<action id="stimulus:ev_reject">allow</action> <action id="stimulus:ev_reject">allow</action>
<action id="stimulus:ev_reopen">allow</action> <action id="stimulus:ev_reopen">allow</action>
<action id="stimulus:ev_validate">allow</action>
<action id="stimulus:ev_notapprove">allow</action>
<action id="stimulus:ev_replan">allow</action>
<action id="stimulus:ev_implement">allow</action>
<action id="stimulus:ev_monitor">allow</action>
</actions> </actions>
</group> </group>
<group id="Problem"> <group id="Problem">

View File

@@ -935,7 +935,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
'Class:SynchroAttLinkSet' => 'Synchro Attribut (Linksæt)', 'Class:SynchroAttLinkSet' => 'Synchro Attribut (Linksæt)',
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Række separator', 'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Række separator',
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attribut separator', 'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attribut separator',
'Class:SynchroLog' => 'Synchr Log', 'Class:SynchroLog' => 'Synchro Log',
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Kilde', 'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Kilde',
'Class:SynchroLog/Attribute:start_date' => 'Start Dato', 'Class:SynchroLog/Attribute:start_date' => 'Start Dato',
'Class:SynchroLog/Attribute:end_date' => 'Slut Dato', 'Class:SynchroLog/Attribute:end_date' => 'Slut Dato',

View File

@@ -1018,7 +1018,7 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)', 'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)',
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator', 'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator',
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator', 'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator',
'Class:SynchroLog' => 'Synchr Log', 'Class:SynchroLog' => 'Synchro Log',
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source', 'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source',
'Class:SynchroLog/Attribute:start_date' => 'Start Date', 'Class:SynchroLog/Attribute:start_date' => 'Start Date',
'Class:SynchroLog/Attribute:end_date' => 'End Date', 'Class:SynchroLog/Attribute:end_date' => 'End Date',

View File

@@ -1001,7 +1001,7 @@ The hyperlink is displayed in the tooltip appearing on the “Lock” symbol of
'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)', 'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)',
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator', 'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Rows separator',
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator', 'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Attributes separator',
'Class:SynchroLog' => 'Synchr Log', 'Class:SynchroLog' => 'Synchro Log',
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source', 'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Data Source',
'Class:SynchroLog/Attribute:start_date' => 'Start Date', 'Class:SynchroLog/Attribute:start_date' => 'Start Date',
'Class:SynchroLog/Attribute:end_date' => 'End Date', 'Class:SynchroLog/Attribute:end_date' => 'End Date',

View File

@@ -935,7 +935,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)~~', 'Class:SynchroAttLinkSet' => 'Synchro Attribute (Linkset)~~',
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Разделитель строк', 'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Разделитель строк',
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Разделитель атрибутов', 'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Разделитель атрибутов',
'Class:SynchroLog' => 'Synchr Log~~', 'Class:SynchroLog' => 'Synchro Log~~',
'Class:SynchroLog/Attribute:sync_source_id' => 'Синх.исходные данные', 'Class:SynchroLog/Attribute:sync_source_id' => 'Синх.исходные данные',
'Class:SynchroLog/Attribute:start_date' => 'Стартовать в', 'Class:SynchroLog/Attribute:start_date' => 'Стартовать в',
'Class:SynchroLog/Attribute:end_date' => 'Закончить в', 'Class:SynchroLog/Attribute:end_date' => 'Закончить в',

View File

@@ -935,7 +935,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
'Class:SynchroAttLinkSet' => 'Synchro niteliği (LinkSet)', 'Class:SynchroAttLinkSet' => 'Synchro niteliği (LinkSet)',
'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Satır Ayırıcı', 'Class:SynchroAttLinkSet/Attribute:row_separator' => 'Satır Ayırıcı',
'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Nitelik Ayırıcı', 'Class:SynchroAttLinkSet/Attribute:attribute_separator' => 'Nitelik Ayırıcı',
'Class:SynchroLog' => 'Synchr log', 'Class:SynchroLog' => 'Synchro Log',
'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Veri Kaynağı', 'Class:SynchroLog/Attribute:sync_source_id' => 'Synchro Veri Kaynağı',
'Class:SynchroLog/Attribute:start_date' => 'Başlangıç tarihi', 'Class:SynchroLog/Attribute:start_date' => 'Başlangıç tarihi',
'Class:SynchroLog/Attribute:end_date' => 'Bitiş Tarihi', 'Class:SynchroLog/Attribute:end_date' => 'Bitiş Tarihi',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,4 @@
import { Plugin, type Editor } from 'ckeditor5/src/core.js'; import { Plugin, type Editor } from 'ckeditor5/src/core.js';
import InsertCarriageReturnAfterBlock from "../insert-carriage-return-after-block/insert-carriage-return-after-block.plugin";
/** /**
* DetectChanges Plugin. * DetectChanges Plugin.
* *
@@ -9,5 +8,4 @@ export default class DetectChanges extends Plugin {
constructor(editor: Editor); constructor(editor: Editor);
init(): void; init(): void;
static get pluginName(): string; static get pluginName(): string;
static get requires(): (typeof InsertCarriageReturnAfterBlock)[];
} }

View File

@@ -55,9 +55,11 @@ $oP->SetBreadCrumbEntry('ui-tool-universalsearch', Dict::S('Menu:UniversalSearch
//$sSearchHeaderForceDropdown //$sSearchHeaderForceDropdown
$sSearchHeaderForceDropdown = '<select id="select_class" name="baseClass" onChange="this.form.submit();">'; $sSearchHeaderForceDropdown = '<select id="select_class" name="baseClass" onChange="this.form.submit();">';
$aClassLabels = array(); $aClassLabels = array();
foreach(MetaModel::GetClasses('bizmodel') as $sCurrentClass) foreach (MetaModel::GetClasses('bizmodel, grant_by_profile') as $sCurrentClass) {
{ if ((MetaModel::HasCategory($sCurrentClass, 'grant_by_profile') && UserRights::IsActionAllowed($sCurrentClass, UR_ACTION_BULK_MODIFY))
$aClassLabels[$sCurrentClass] = MetaModel::GetName($sCurrentClass); || (MetaModel::HasCategory($sCurrentClass, 'bizmodel') && UserRights::IsActionAllowed($sCurrentClass, UR_ACTION_BULK_READ))) {
$aClassLabels[$sCurrentClass] = MetaModel::GetName($sCurrentClass);
}
} }
asort($aClassLabels); asort($aClassLabels);
foreach($aClassLabels as $sCurrentClass => $sLabel) foreach($aClassLabels as $sCurrentClass => $sLabel)

View File

@@ -29,9 +29,8 @@ use Combodo\iTop\Application\WebPage\AjaxPage;
use Combodo\iTop\Application\WebPage\ErrorPage; use Combodo\iTop\Application\WebPage\ErrorPage;
use Combodo\iTop\Application\WebPage\iTopWebPage; use Combodo\iTop\Application\WebPage\iTopWebPage;
use Combodo\iTop\Application\WebPage\WebPage; use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Service\Import\CSVImportPageProcessor;
use Combodo\iTop\Core\CMDBChange\CMDBChangeOrigin;
use Combodo\iTop\Renderer\BlockRenderer; use Combodo\iTop\Renderer\BlockRenderer;
use Combodo\iTop\Service\Import\CSVImportPageProcessor;
try { try {
require_once('../approot.inc.php'); require_once('../approot.inc.php');
@@ -83,21 +82,24 @@ try {
* *
* @return \Combodo\iTop\Application\UI\Base\Component\Input\Select\ * @return \Combodo\iTop\Application\UI\Base\Component\Input\Select\
*/ */
function GetClassesSelectUIBlock(string $sName, $sDefaultValue, int $iActionCode): Select function GetClassesSelectUIBlock(string $sName, $sDefaultValue, int $iActionCode, bool $bAdvanced = false): Select
{ {
$oSelectBlock = SelectUIBlockFactory::MakeForSelect($sName, 'select_'.$sName); $oSelectBlock = SelectUIBlockFactory::MakeForSelect($sName, 'select_'.$sName);
$oOption = SelectOptionUIBlockFactory::MakeForSelectOption("", Dict::S('UI:CSVImport:ClassesSelectOne'), false); $oOption = SelectOptionUIBlockFactory::MakeForSelectOption("", Dict::S('UI:CSVImport:ClassesSelectOne'), false);
$oSelectBlock->AddSubBlock($oOption); $oSelectBlock->AddSubBlock($oOption);
$aValidClasses = array(); $aValidClasses = array();
$aClassCategories = array('bizmodel', 'addon/authentication', 'grant_by_profile'); $aClassCategories = array('bizmodel', 'addon/authentication');
if ($bAdvanced) {
$aClassCategories[] = 'grant_by_profile';
}
if (UserRights::IsAdministrator()) { if (UserRights::IsAdministrator()) {
$aClassCategories = array('bizmodel', 'application', 'addon/authentication', 'grant_by_profile'); $aClassCategories[] = 'application';
} }
foreach ($aClassCategories as $sClassCategory) { foreach ($aClassCategories as $sClassCategory) {
foreach (MetaModel::GetClasses($sClassCategory) as $sClassName) { foreach (MetaModel::GetClasses($sClassCategory) as $sClassName) {
if ((is_null($iActionCode) || UserRights::IsActionAllowed($sClassName, $iActionCode)) && if ((is_null($iActionCode) || UserRights::IsActionAllowed($sClassName, $iActionCode)) &&
(!MetaModel::IsAbstract($sClassName))) { (!MetaModel::IsAbstract($sClassName))) {
$sDisplayName = MetaModel::GetName($sClassName); $sDisplayName = ($bAdvanced) ? MetaModel::GetName($sClassName)." ($sClassName)" : MetaModel::GetName($sClassName);
$aValidClasses[$sDisplayName] = SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sDisplayName, ($sClassName == $sDefaultValue)); $aValidClasses[$sDisplayName] = SelectOptionUIBlockFactory::MakeForSelectOption($sClassName, $sDisplayName, ($sClassName == $sDefaultValue));
} }
} }
@@ -333,7 +335,7 @@ try {
$oClassesSelect->AddSubBlock($oDefaultSelect); $oClassesSelect->AddSubBlock($oDefaultSelect);
$aSynchroUpdate = utils::ReadParam('synchro_update', array()); $aSynchroUpdate = utils::ReadParam('synchro_update', array());
} else { } else {
$oClassesSelect = GetClassesSelectUIBlock('class_name', $sClassName, UR_ACTION_BULK_MODIFY); $oClassesSelect = GetClassesSelectUIBlock('class_name', $sClassName, UR_ACTION_BULK_MODIFY, (bool)$bAdvanced);
} }
$oPanel = TitleUIBlockFactory::MakeForPage(Dict::S('UI:Title:CSVImportStep3')); $oPanel = TitleUIBlockFactory::MakeForPage(Dict::S('UI:Title:CSVImportStep3'));
$oPage->AddSubBlock($oPanel); $oPage->AddSubBlock($oPanel);
@@ -398,7 +400,7 @@ try {
$oPage->add_ready_script( $oPage->add_ready_script(
<<<EOF <<<EOF
$('#select_class_name').on('change', function(ev) { DoMapping(); } ); $('#select_class_name').on('change', function(ev) { DoMapping(); } );
$('#advanced').on('click', function(ev) { DoMapping(); } ); $('#advanced').on('click', function(ev) { DoReload(); } );
EOF EOF
); );
if ($sClassName != '') if ($sClassName != '')
@@ -416,6 +418,13 @@ EOF
var aDefaultKeys = new Array(); var aDefaultKeys = new Array();
var aReadOnlyKeys = new Array(); var aReadOnlyKeys = new Array();
function DoReload()
{
$('input[name=step]').val(3);
$('#wizForm').removeAttr('onsubmit'); // No need to perform validation checks when going back
$('#wizForm').submit();
}
function CSVGoBack() function CSVGoBack()
{ {
$('input[name=step]').val(2); $('input[name=step]').val(2);