From 69e481dbc1c0cc28c0acb765aa80419ed5ef3067 Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 26 Mar 2024 11:49:14 +0100 Subject: [PATCH 1/7] Improve Clear function in ExtKeyWidget (#519) --- js/extkeywidget.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/js/extkeywidget.js b/js/extkeywidget.js index 9c792820b..d461c988f 100644 --- a/js/extkeywidget.js +++ b/js/extkeywidget.js @@ -600,12 +600,16 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper }; this.Clear = function () { - $('#'+me.id).val(''); - $('#label_'+me.id).val(''); - $('#label_'+me.id).data('selected_value', ''); - $('#'+me.id).trigger('validate'); - $('#'+me.id).trigger('extkeychange'); - $('#'+me.id).trigger('change'); + if (me.bSelectMode) { + $('#'+me.id)[0].selectize.clear(); + } else { + $('#'+me.id).val(''); + $('#label_'+me.id).val(''); + $('#label_'+me.id).data('selected_value', ''); + $('#'+me.id).trigger('validate'); + $('#'+me.id).trigger('extkeychange'); + $('#'+me.id).trigger('change'); + } }; // Workaround for a ui.jquery limitation: if the content of From 7b999cef50edb79129c98531e79cf64d32536511 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Tue, 26 Mar 2024 09:52:20 +0100 Subject: [PATCH 2/7] Compilation issue --- core/designdocument.class.inc.php | 53 +++++++++++++++++++++++++++++-- setup/modelfactory.class.inc.php | 12 +++---- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/core/designdocument.class.inc.php b/core/designdocument.class.inc.php index 6137f7fd1..b36bd10d1 100644 --- a/core/designdocument.class.inc.php +++ b/core/designdocument.class.inc.php @@ -26,7 +26,6 @@ namespace Combodo\iTop; -use DOMComment; use DOMDocument; use DOMFormatException; use DOMNode; @@ -35,9 +34,7 @@ use DOMXPath; use Exception; use IssueLog; use LogAPI; -use MFDocument; use MFElement; -use ModelFactory; use utils; /** @@ -242,6 +239,56 @@ class DesignElement extends \DOMElement return ''; } + + /** + * Compatibility with PHP8.0 + * + * @return \DOMElement|null + * + * @since 3.1.2 + */ + public function GetFirstElementChild() + { + if (property_exists($this, 'firstElementChild')) { + return $this->firstElementChild; + } + + $oChildNode = $this->firstChild; + while (!is_null($oChildNode)) { + if ($oChildNode instanceof \DOMElement) { + return $oChildNode; + } + $oChildNode = $oChildNode->nextSibling; + } + + return null; + } + + /** + * Compatibility with PHP8.0 + * + * @return \DOMElement|null + * + * @since 3.1.2 + */ + public function GetNextElementSibling() + { + if (property_exists($this, 'nextElementSibling')) { + return $this->nextElementSibling; + } + + $oSibling = $this->nextSibling; + while (!is_null($oSibling)) { + if ($oSibling instanceof \DOMElement) { + return $oSibling; + } + $oSibling = $oSibling->nextSibling; + } + + return null; + + } + /** * Returns the node directly under the given node * @param $sTagName diff --git a/setup/modelfactory.class.inc.php b/setup/modelfactory.class.inc.php index 945f3c703..4009a5afe 100644 --- a/setup/modelfactory.class.inc.php +++ b/setup/modelfactory.class.inc.php @@ -848,7 +848,7 @@ class ModelFactory // Do not continue deeper $oTargetNode = null; } else { - if (!$bSpecifiedMerge && $sMode === self::LOAD_DELTA_MODE_STRICT && ($sSearchId !== '' || is_null($oSourceNode->firstElementChild))) { + if (!$bSpecifiedMerge && $sMode === self::LOAD_DELTA_MODE_STRICT && ($sSearchId !== '' || is_null($oSourceNode->GetFirstElementChild()))) { $iLine = ModelFactory::GetXMLLineNumber($oSourceNode); $sItopNodePath = DesignDocument::GetItopNodePath($oSourceNode); throw new MFException($sItopNodePath.' at line '.$iLine.': could not be found or marked as removed (strict mode)', @@ -889,7 +889,7 @@ class ModelFactory $oTargetParentNode->insertBefore($oCommentNode, $oTargetNode); } // Continue deeper - for ($oSourceChild = $oSourceNode->firstElementChild; !is_null($oSourceChild); $oSourceChild = $oSourceChild->nextElementSibling) { + for ($oSourceChild = $oSourceNode->GetFirstElementChild(); !is_null($oSourceChild); $oSourceChild = $oSourceChild->GetNextElementSibling()) { $this->LoadFlattenDelta($oSourceChild, $oTargetDocument, $oTargetNode, $sMode); } $oTargetNode = null; @@ -898,7 +898,7 @@ class ModelFactory } if ($oTargetNode) { - if (is_null($oSourceNode->firstElementChild) && $oTargetParentNode instanceof MFElement) { + if (is_null($oSourceNode->GetFirstElementChild()) && $oTargetParentNode instanceof MFElement) { // Leaf node if ($sMode === self::LOAD_DELTA_MODE_STRICT && !$oSourceNode->hasAttribute('_rename_from') && trim($oSourceNode->GetText('')) !== '') { $iLine = ModelFactory::GetXMLLineNumber($oSourceNode); @@ -916,7 +916,7 @@ class ModelFactory } } } else { - for ($oSourceChild = $oSourceNode->firstElementChild; !is_null($oSourceChild); $oSourceChild = $oSourceChild->nextElementSibling) { + for ($oSourceChild = $oSourceNode->GetFirstElementChild(); !is_null($oSourceChild); $oSourceChild = $oSourceChild->GetNextElementSibling()) { // Continue deeper $this->LoadFlattenDelta($oSourceChild, $oTargetDocument, $oTargetNode, $sMode); } @@ -1042,7 +1042,7 @@ class ModelFactory } if (!$bIsRoot) { // Hard deletion is necessary - $oClassNode->remove(); + $oClassNode->parentNode->removeChild($oClassNode); } } @@ -1574,7 +1574,7 @@ EOF public function GetClass($sClassName, $bIncludeMetas = false) { // Check if class among XML classes - /** @var \MFElemen|null $oClassNode */ + /** @var \MFElement|null $oClassNode */ $oClassNode = $this->GetNodes("/itop_design/classes/class[@id='$sClassName']")->item(0); // If not, check if class among exposed meta classes (PHP classes) From c29bff4d912ba8feddace20bca54ccac1a1ca7d9 Mon Sep 17 00:00:00 2001 From: Stephen Abello Date: Tue, 26 Mar 2024 11:32:55 +0100 Subject: [PATCH 3/7] =?UTF-8?q?N=C2=B07355=20-=20Fix=20deprecated=20jQuery?= =?UTF-8?q?=20call?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/dashboard.class.inc.php | 2 +- application/shortcut.class.inc.php | 2 +- application/ui.extkeywidget.class.inc.php | 2 +- application/ui.searchformforeignkeys.class.inc.php | 2 +- .../2.x/itop-attachments/renderers.itop-attachments.php | 4 ++-- js/dashboard.js | 2 +- js/dashlet.js | 2 +- js/extkeywidget.js | 2 +- js/icon_select.js | 6 +++--- js/links/links_direct_widget.js | 8 ++++---- js/links/links_widget.js | 4 ++-- js/searchformforeignkeys.js | 2 +- js/tabularfieldsselector.js | 4 ++-- js/utils.js | 2 +- .../block-object-picker-dialog/layout.ready.js.twig | 4 ++-- templates/base/components/datatable/layout.ready.js.twig | 2 +- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/application/dashboard.class.inc.php b/application/dashboard.class.inc.php index 7ad64b7f7..25072a552 100644 --- a/application/dashboard.class.inc.php +++ b/application/dashboard.class.inc.php @@ -480,7 +480,7 @@ abstract class Dashboard CombodoTooltip.InitTooltipFromMarkup($("#attr_auto_reload_sec")); $("#attr_auto_reload_sec").prop('disabled', !$('#attr_auto_reload').is(':checked')); - $('#attr_auto_reload').change( function(ev) { + $('#attr_auto_reload').on('change', function(ev) { $("#attr_auto_reload_sec").prop('disabled', !$(this).is(':checked')); } ); diff --git a/application/shortcut.class.inc.php b/application/shortcut.class.inc.php index e442738b8..e84bb39c5 100644 --- a/application/shortcut.class.inc.php +++ b/application/shortcut.class.inc.php @@ -293,7 +293,7 @@ $("#attr_auto_reload_sec").attr('data-tooltip-content', '$sRateTitle'); CombodoTooltip.InitTooltipFromMarkup($("#attr_auto_reload_sec")); $("#attr_auto_reload_sec").prop('disabled', !$('#attr_auto_reload').is(':checked')); -$('#attr_auto_reload').change( function(ev) { +$('#attr_auto_reload').on('change', function(ev) { $("#attr_auto_reload_sec").prop('disabled', !$(this).is(':checked')); } ); diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php index 3eb0131cd..de82c3d4e 100644 --- a/application/ui.extkeywidget.class.inc.php +++ b/application/ui.extkeywidget.class.inc.php @@ -734,7 +734,7 @@ HTML ], }); $('#fs_{$this->iId}').on('submit.uiAutocomplete', oACWidget_{$this->iId}.DoSearchObjects); - $('#dc_{$this->iId}').resize(oACWidget_{$this->iId}.UpdateSizes); + $('#dc_{$this->iId}').on('resize', oACWidget_{$this->iId}.UpdateSizes); JS ); } diff --git a/application/ui.searchformforeignkeys.class.inc.php b/application/ui.searchformforeignkeys.class.inc.php index b4ecbbca4..8bc9e7911 100644 --- a/application/ui.searchformforeignkeys.class.inc.php +++ b/application/ui.searchformforeignkeys.class.inc.php @@ -99,7 +99,7 @@ HTML }); $('#dlg_{$this->m_iInputId}').dialog('option', {title:'$sTitle'}); $('#SearchFormToAdd_{$this->m_iInputId} form').on('submit.uilinksWizard', oForeignKeysWidget{$this->m_iInputId}.SearchObjectsToAdd); -$('#SearchFormToAdd_{$this->m_iInputId}').resize(oForeignKeysWidget{$this->m_iInputId}.UpdateSizes); +$('#SearchFormToAdd_{$this->m_iInputId}').on('resize', oForeignKeysWidget{$this->m_iInputId}.UpdateSizes); JS ); } diff --git a/datamodels/2.x/itop-attachments/renderers.itop-attachments.php b/datamodels/2.x/itop-attachments/renderers.itop-attachments.php index 4407d68a8..e0ecd4625 100644 --- a/datamodels/2.x/itop-attachments/renderers.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/renderers.itop-attachments.php @@ -276,7 +276,7 @@ abstract class AbstractAttachmentsRenderer e.stopPropagation(); }) - $(document).bind('dragover', function (e) { + $(document).on('dragover', function (e) { var bFiles = false; if (e.dataTransfer && e.dataTransfer.types) { @@ -317,7 +317,7 @@ abstract class AbstractAttachmentsRenderer window.dropZoneCnt++; }); - $(document).bind('dragend dragleave drop', function(event){ + $(document).on('dragend dragleave drop', function(event){ window.dropZoneCnt--; if(window.dropZone && window.dropZoneCnt === 0){ window.dropZone.removeClass('ibo-drag-in'); diff --git a/js/dashboard.js b/js/dashboard.js index 2699e189e..c604d262a 100644 --- a/js/dashboard.js +++ b/js/dashboard.js @@ -291,7 +291,7 @@ $(function() }, // Dirty means: at least one change has not been committed yet is_dirty: function () { - if ($('#dashboard_editor .ui-layout-east .itop-property-field-modified').size() > 0) { + if ($('#dashboard_editor .ui-layout-east .itop-property-field-modified').length > 0) { return true; } else { return false; diff --git a/js/dashlet.js b/js/dashlet.js index 5856f9e58..14f52f860 100644 --- a/js/dashlet.js +++ b/js/dashlet.js @@ -20,7 +20,7 @@ $(function() this.element .addClass('itop-dashlet') - .bind('click.itop-dashlet', function(event) { me._on_click(event); } ); + .on('click.itop-dashlet', function(event) { me._on_click(event); } ); this._update(); }, diff --git a/js/extkeywidget.js b/js/extkeywidget.js index d461c988f..98496b63b 100644 --- a/js/extkeywidget.js +++ b/js/extkeywidget.js @@ -433,7 +433,7 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper me.UpdateSizes(); me.UpdateButtons(); me.ajax_request = null; - $('#count_'+me.id+'_results').change(function () { + $('#count_'+me.id+'_results').on('change', function () { me.UpdateButtons(); }); if (me.bDoSearch) { diff --git a/js/icon_select.js b/js/icon_select.js index 0afd9bf48..ca8d6c15c 100644 --- a/js/icon_select.js +++ b/js/icon_select.js @@ -53,7 +53,7 @@ $(function() }); this.element.after(this.oButton); this.element.addClass( "itop-icon-select" ).button(); - this.element.bind( "reverted.itop-icon-select", function(ev, data) { + this.element.on( "reverted.itop-icon-select", function(ev, data) { var idx = me._find_item(data.previous_value); if (idx != null) { @@ -68,7 +68,7 @@ $(function() this.oButton.after(this.oUploadBtn); } var id = this.element.attr('id'); - $('#event_bus').bind('tabshow.itop-icon-select'+id, function(event) { + $('#event_bus').on('tabshow.itop-icon-select'+id, function(event) { // Compute the offsetX the first time the 'element' becomes visible... var bVisible = me.element.parent().is(':visible'); if ((me.options.offsetX == null) && (bVisible)) @@ -216,7 +216,7 @@ $(function() var me = this; this.oUploadDlg = $('

'+this.options.labels['pick_icon_file']+'

'); this.element.after(this.oUploadDlg); - $('input[type=file]').bind('change', function() { me._do_upload(); }); + $('input[type=file]').on('change', function() { me._do_upload(); }); this.oUploadDlg.dialog({ width: 400, modal: true, diff --git a/js/links/links_direct_widget.js b/js/links/links_direct_widget.js index b65eb6653..7eead55f8 100644 --- a/js/links/links_direct_widget.js +++ b/js/links/links_direct_widget.js @@ -68,7 +68,7 @@ $(function() .after(this.inputToBeRemoved) .after(this.indicator); - this.element.find('.selectList'+this.id).bind('change', function () { + this.element.find('.selectList'+this.id).on('change', function () { me._updateButtons(); }); @@ -206,7 +206,7 @@ $(function() me._onSearchToAdd(); return false; }); - $('#SearchFormToAdd_'+me.id).resize(function () { + $('#SearchFormToAdd_'+me.id).on('resize', function () { me._onSearchDlgUpdateSize(); }); @@ -249,7 +249,7 @@ $(function() } else { - $('#count_'+me.id).change(function() { + $('#count_'+me.id).on('change', function() { var c = this.value; me._onUpdateDlgButtons(c); }); @@ -298,7 +298,7 @@ $(function() $.post(this.options.submit_to, oParams, function(data) { $('#SearchResultsToAdd_'+me.id).html(data); - $('#count_'+me.id).change(function() { + $('#count_'+me.id).on('change', function() { var c = this.value; me._onUpdateDlgButtons(c); }); diff --git a/js/links/links_widget.js b/js/links/links_widget.js index 3e759bb22..6ea6bd71d 100644 --- a/js/links/links_widget.js +++ b/js/links/links_widget.js @@ -162,7 +162,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH if (me.bDoSearch) { me.SearchObjectsToAdd(); } else { - $('#count_'+me.id).change(function () { + $('#count_'+me.id).on('change', function () { let c = this.value; me.UpdateButtons(c); }); @@ -174,7 +174,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.SearchObjectsToAdd = function () { - $('#count_'+me.id).change(function () { + $('#count_'+me.id).on('change', function () { let c = this.value; me.UpdateButtons(c); }); diff --git a/js/searchformforeignkeys.js b/js/searchformforeignkeys.js index 7fe01817b..11dd5c545 100644 --- a/js/searchformforeignkeys.js +++ b/js/searchformforeignkeys.js @@ -206,7 +206,7 @@ function SearchFormForeignKeys(id, sTargetClass, sAttCode, oSearchWidgetElmt, sF $('#fr_'+me.id+' input:radio').on('click', function() { me.UpdateButtons(); }); me.UpdateButtons(); me.ajax_request = null; - $('#count_'+me.id).change(function(){ + $('#count_'+me.id).on('change', function(){ me.UpdateButtons(); }); me.UpdateSizes(); diff --git a/js/tabularfieldsselector.js b/js/tabularfieldsselector.js index a94d63f98..4f702020e 100644 --- a/js/tabularfieldsselector.js +++ b/js/tabularfieldsselector.js @@ -34,11 +34,11 @@ $(function () { this._flatten_fields(this.options.fields); this.sId = this.element.attr('id'); this.element.addClass('itop-tabularfieldsselector'); - this.element.parent().bind('form-part-activate', function () { + this.element.parent().on('form-part-activate', function () { me._update_from_holder(); me._update_preview(); }); - this.element.parent().bind('validate', function () { + this.element.parent().on('validate', function () { me.validate(); }); diff --git a/js/utils.js b/js/utils.js index 7cdbb307a..cb58b6f4e 100644 --- a/js/utils.js +++ b/js/utils.js @@ -195,7 +195,7 @@ function ReloadSearchForm(divId, sClassName, sBaseClass, sContext, sTableId, sEx oDiv.empty(); oDiv.append(data); oDiv.unblock(); - oDiv.parent().resize(); // Inform the parent that the form has just been (potentially) resized + oDiv.parent().trigger('resize'); // Inform the parent that the form has just been (potentially) resized oDiv.find('form.search_form_handler').triggerHandler('itop.search.form.reloaded'); } ); diff --git a/templates/application/links/indirect/block-object-picker-dialog/layout.ready.js.twig b/templates/application/links/indirect/block-object-picker-dialog/layout.ready.js.twig index f3f499edb..1170061ff 100644 --- a/templates/application/links/indirect/block-object-picker-dialog/layout.ready.js.twig +++ b/templates/application/links/indirect/block-object-picker-dialog/layout.ready.js.twig @@ -29,7 +29,7 @@ $('#dlg_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').dialog({ }); -$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }} form').bind('submit.uilinksWizard', oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.SearchObjectsToAdd); -$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').resize(oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.UpdateSizes); +$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }} form').on('submit.uilinksWizard', oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.SearchObjectsToAdd); +$('#SearchFormToAdd_{{ oUIBlock.oUILinksWidget.GetLinkedSetId() }}').on('resize', oWidget{{ oUIBlock.oUILinksWidget.GetInputId() }}.UpdateSizes); {% endapply %} \ No newline at end of file diff --git a/templates/base/components/datatable/layout.ready.js.twig b/templates/base/components/datatable/layout.ready.js.twig index 04bd5b3bb..9250ef84c 100644 --- a/templates/base/components/datatable/layout.ready.js.twig +++ b/templates/base/components/datatable/layout.ready.js.twig @@ -374,7 +374,7 @@ $('body').on('open_creation_modal.object.itop','#{{ oUIBlock.GetId() }}', functi {% endif %} {% if oUIBlock.GetOption('sCountSelector') is not empty %} -$('#{{ sListId }} [name="selectionCount"]').bind('change', function () { +$('#{{ sListId }} [name="selectionCount"]').on('change', function () { $('{{ oUIBlock.GetOption('sCountSelector') }}').val($('#{{ sListId }} [name="selectionCount"]').val()); $('{{ oUIBlock.GetOption('sCountSelector') }}').trigger('change'); }); From 75a01db959a407be3227d7cc15146af3c53a7575 Mon Sep 17 00:00:00 2001 From: Molkobain Date: Tue, 26 Mar 2024 12:04:39 +0100 Subject: [PATCH 4/7] =?UTF-8?q?N=C2=B07194=20-=20Remove=20"external=20link?= =?UTF-8?q?"=20icon=20in=20the=20tooltip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/base/layouts/object/object-details/layout.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base/layouts/object/object-details/layout.html.twig b/templates/base/layouts/object/object-details/layout.html.twig index 3d1a604f7..05b20f7b2 100644 --- a/templates/base/layouts/object/object-details/layout.html.twig +++ b/templates/base/layouts/object/object-details/layout.html.twig @@ -19,7 +19,7 @@ {% endif %} {% if is_backoffice_menu_enabled('DataModelMenu') %} - {{ oUIBlock.GetClassLabel() }} + {{ oUIBlock.GetClassLabel() }} {% else %} {{ oUIBlock.GetClassLabel() }} {% endif %} From 4eed5bdeb9df2df0a4da4aeeae3a1f56f64d2ca4 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Wed, 27 Mar 2024 10:12:21 +0100 Subject: [PATCH 5/7] =?UTF-8?q?N=C2=B07165=20-=20Error=20message=20on=20ap?= =?UTF-8?q?plication=20upgrade=20fatal=20Error=20due=20to=20CSS=20compilat?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/UpdateController.php | 3 +-- .../templates/SelectUpdateFile.ready.js.twig | 13 ++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/datamodels/2.x/itop-core-update/src/Controller/UpdateController.php b/datamodels/2.x/itop-core-update/src/Controller/UpdateController.php index 6f6c08eb1..ac0b9a58e 100644 --- a/datamodels/2.x/itop-core-update/src/Controller/UpdateController.php +++ b/datamodels/2.x/itop-core-update/src/Controller/UpdateController.php @@ -45,6 +45,7 @@ class UpdateController extends Controller $aParams['sFileUploadMaxSize'] = utils::BytesToFriendlyFormat($aParams['iFileUploadMaxSize']); $aParams['sPostMaxSize'] = ini_get('post_max_size'); $aParams['sUploadMaxSize'] = ini_get('upload_max_filesize'); + $aParams['bDontUpgradeIfIntegrityFailed'] = !utils::IsDevelopmentEnvironment(); $oFilter = DBObjectSearch::FromOQL('SELECT ModuleInstallation WHERE parent_id=0 AND name!="datamodel"'); $oSet = new DBObjectSet($oFilter, ['installed' => false]); // Most recent first $aParams['oSet'] = $oSet; @@ -129,7 +130,6 @@ class UpdateController extends Controller $sTransactionId = utils::GetNewTransactionId(); $aParams['sTransactionId'] = $sTransactionId; - $this->AddSaas('css/backoffice/main.scss'); $this->m_sOperation = 'ConfirmUpdate'; $this->DisplaySetupPage($aParams); } @@ -158,7 +158,6 @@ class UpdateController extends Controller 'sAjaxURL' => utils::GetAbsoluteUrlAppRoot().'/pages/UI.php', ]; $this->AddLinkedScript(utils::GetAbsoluteUrlAppRoot().'setup/jquery.progression.js'); - $this->AddSaas('css/backoffice/main.scss'); $this->AddSaas('env-'.utils::GetCurrentEnvironment().'/itop-core-update/css/itop-core-update.scss'); $this->m_sOperation = 'UpdateCoreFiles'; $this->DisplaySetupPage($aParams); diff --git a/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig b/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig index eb1789412..853f8d92e 100644 --- a/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig +++ b/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig @@ -28,10 +28,17 @@ $.ajax({ $("#file-container").removeClass("ibo-is-hidden"); $("#check-in-progress").addClass("ibo-is-hidden"); } else { - $("#check-update").prop("disabled", true); - $("#file").prop("disabled", true); - $('#form-update-outer').slideUp(600); oRequirements.addClass("ibo-is-failure"); + {% if bDontUpgradeIfIntegrityFailed %} + $("#check-update").prop("disabled", true); + $("#file").prop("disabled", true); + $('#form-update-outer').slideUp(600); + {% else %} + $("#check-update").prop("disabled", false); + $("#file").prop("disabled", false); + $("#file-container").removeClass("ibo-is-hidden"); + $("#check-in-progress").addClass("ibo-is-hidden"); + {% endif %} } } }); From a7f3bf9a564e295abfded78a553ead57b8765260 Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Wed, 27 Mar 2024 10:34:48 +0100 Subject: [PATCH 6/7] =?UTF-8?q?N=C2=B07294=20-=20EVENT=5FADD=5FATTACHMENT?= =?UTF-8?q?=5FTO=5FOBJECT=20not=20triggered?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itop-attachments/main.itop-attachments.php | 17 +++++++++++++++++ .../portal/src/Form/ObjectFormManager.php | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/datamodels/2.x/itop-attachments/main.itop-attachments.php b/datamodels/2.x/itop-attachments/main.itop-attachments.php index 764a558e4..ba2a2ea8a 100644 --- a/datamodels/2.x/itop-attachments/main.itop-attachments.php +++ b/datamodels/2.x/itop-attachments/main.itop-attachments.php @@ -265,6 +265,23 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt } } + /** + * + * @see ObjectFormManager::FinalizeAttachments() for the portal version + * + * @param $oObject + * @param $oChange + * + * @return void + * @throws \ArchivedObjectException + * @throws \CoreCannotSaveObjectException + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @throws \DeleteException + * @throws \MySQLException + * @throws \MySQLHasGoneAwayException + * @throws \OQLException + */ protected static function UpdateAttachments($oObject, $oChange = null) { self::$m_bIsModified = false; diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index eb853ab24..5c54148f8 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -1454,6 +1454,8 @@ class ObjectFormManager extends FormManager // Remove attachments that are no longer attached to the current object if (in_array($oAttachment->GetKey(), $aRemovedAttachmentsIds)) { + $aData = ['attachment' => $oAttachment]; + $this->oObject->FireEvent(EVENT_REMOVE_ATTACHMENT_FROM_OBJECT, $aData); $oAttachment->DBDelete(); $aActions[] = self::GetAttachmentActionChangeOp($oAttachment, false); } @@ -1478,6 +1480,8 @@ class ObjectFormManager extends FormManager $oAttachment->Set('temp_id', ''); $oAttachment->DBUpdate(); $aActions[] = self::GetAttachmentActionChangeOp($oAttachment, true); + $aData = ['attachment' => $oAttachment]; + $this->oObject->FireEvent(EVENT_ADD_ATTACHMENT_TO_OBJECT, $aData); } } From 1278c4b196e4bc8faaa750703f1056b1b2ee108d Mon Sep 17 00:00:00 2001 From: Eric Espie Date: Wed, 27 Mar 2024 11:11:55 +0100 Subject: [PATCH 7/7] =?UTF-8?q?N=C2=B07165=20-=20Error=20message=20on=20ap?= =?UTF-8?q?plication=20upgrade=20fatal=20Error=20due=20to=20CSS=20compilat?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itop-core-update/templates/SelectUpdateFile.ready.js.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig b/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig index 853f8d92e..51d1cfdd7 100644 --- a/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig +++ b/datamodels/2.x/itop-core-update/templates/SelectUpdateFile.ready.js.twig @@ -62,7 +62,7 @@ var oGetDBDiskSpace = $.ajax({ method: "POST", url: "{{ sAjaxURL|raw }}", data: { - route: "core_update_ajax.get_d_b_disk_space", + route: "core_update_ajax.get_db_disk_space", maintenance: true }, dataType: "json",