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

This commit is contained in:
Eric Espie
2024-02-27 17:40:56 +01:00
4 changed files with 86 additions and 17 deletions

View File

@@ -269,16 +269,15 @@
<description>An attachment has been added to an object</description>
<replaces>Attachment::AfterUpdate</replaces>
<sources>
<source id="Attachment">Attachment</source>
<source id="cmdbAbstractObject">cmdbAbstractObject</source>
</sources>
<event_data>
<event_datum id="object">
<description>The attachment updated</description>
<description>The object where the attachment is added</description>
<type>DBObject</type>
</event_datum>
<event_datum id="target_object">
<description>The object to which the attachment is linked</description>
<event_datum id="attachment">
<description>The attachment added to the objet</description>
<type>DBObject</type>
</event_datum>
<event_datum id="debug_info">
@@ -291,16 +290,15 @@
<description>An attachment has been removed from an object</description>
<replaces>Attachment::AfterUpdate</replaces>
<sources>
<source id="Attachment">Attachment</source>
<source id="cmdbAbstractObject">cmdbAbstractObject</source>
</sources>
<event_data>
<event_datum id="object">
<description>The attachment updated</description>
<description>The object where the attachment is removed</description>
<type>DBObject</type>
</event_datum>
<event_datum id="target_object">
<description>The object to which the attachment is linked</description>
<event_datum id="attachment">
<description>The attachment removed</description>
<type>DBObject</type>
</event_datum>
<event_datum id="debug_info">

View File

@@ -264,7 +264,6 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt
else
{
$oAttachmentsRenderer->RenderViewAttachmentsList();
}
}
@@ -293,8 +292,8 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt
// Remove attachments that are no longer attached to the current object
if (in_array($oAttachment->GetKey(), $aRemovedAttachmentIds))
{
$aData = ['target_object' => $oObject];
$oAttachment->FireEvent(EVENT_REMOVE_ATTACHMENT_FROM_OBJECT, $aData);
$aData = ['attachment' => $oAttachment];
$oObject->FireEvent(EVENT_REMOVE_ATTACHMENT_FROM_OBJECT, $aData);
$oAttachment->DBDelete();
$aActions[] = self::GetActionChangeOp($oAttachment, false /* false => deletion */);
}
@@ -322,8 +321,8 @@ class AttachmentPlugIn implements iApplicationUIExtension, iApplicationObjectExt
$oAttachment->DBUpdate();
// temporary attachment confirmed, list it in the history
$aActions[] = self::GetActionChangeOp($oAttachment, true /* true => creation */);
$aData = ['target_object' => $oObject];
$oAttachment->FireEvent(EVENT_ADD_ATTACHMENT_TO_OBJECT, $aData);
$aData = ['attachment' => $oAttachment];
$oObject->FireEvent(EVENT_ADD_ATTACHMENT_TO_OBJECT, $aData);
}
}
if (count($aActions) > 0)

View File

@@ -23,16 +23,16 @@
{% if aAction.confirmation is defined %}
// Prepare confirmation title
let sTitle = '{{ 'UI:Datatables:RowActions:ConfirmationDialog'|dict_s }}';
let sTitle = `{{ 'UI:Datatables:RowActions:ConfirmationDialog'|dict_s|escape('js') }}`;
{% if aAction.confirmation.title is defined %}
sTitle = '{{ aAction.confirmation.title|dict_s }}';
sTitle = `{{ aAction.confirmation.title|dict_s|escape('js') }}`;
{% endif %}
sTitle = sTitle.replaceAll('{item}', aRowData['{{ aAction.confirmation.row_data }}']);
// Prepare confirmation message
let sMessage = '{{ 'UI:Datatables:RowActions:ConfirmationMessage'|dict_s }}';
let sMessage = `{{ 'UI:Datatables:RowActions:ConfirmationMessage'|dict_s|escape('js') }}`;
{% if aAction.confirmation.message is defined %}
sMessage = '{{ aAction.confirmation.message|dict_s }}';
sMessage = `{{ aAction.confirmation.message|dict_s|escape('js') }}`;
{% endif %}
sMessage = sMessage.replaceAll('{item}', aRowData['{{ aAction.confirmation.row_data }}']);

View File

@@ -0,0 +1,72 @@
<?php
/**
* @copyright Copyright (C) 2010-2024 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Test\UnitTest\Module\ItopAttachment;
use Combodo\iTop\Service\Events\EventData;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
use MetaModel;
class TestAttachment extends ItopDataTestCase
{
private string $sAddAttachmentName;
private string $sRemoveAttachmentName;
const CREATE_TEST_ORG = true;
public function setUp(): void
{
parent::setUp();
//static::$DEBUG_UNIT_TEST = true;
}
public function testAddAttachment()
{
$this->sAddAttachmentName = '';
$this->sRemoveAttachmentName = '';
$_REQUEST['transaction_id'] = 'test_transaction';
$_REQUEST['attachment_plugin'] = 'in_form';
$oDocument = new \ormDocument('Test', 'text/plain', 'test.txt');
$this->EventService_RegisterListener(EVENT_ADD_ATTACHMENT_TO_OBJECT, [$this, 'OnAddAttachment']);
$this->EventService_RegisterListener(EVENT_REMOVE_ATTACHMENT_FROM_OBJECT, [$this, 'OnRemoveAttachment']);
$oAttachment = MetaModel::NewObject('Attachment', [
'item_class' => 'UserRequest',
'temp_id' => 'test_transaction',
'contents' => $oDocument,
]);
$oAttachment->DBInsert();
$oTicket = $this->CreateTicket(1);
$_REQUEST['removed_attachments'] = [$oAttachment->GetKey()];
$this->InvokeNonPublicStaticMethod(\AttachmentPlugIn::class, 'UpdateAttachments', [$oTicket]);
$this->assertEquals('test.txt', $this->sAddAttachmentName);
$this->assertEquals('test.txt', $this->sRemoveAttachmentName);
}
public function OnAddAttachment(EventData $oData)
{
$this->debug('OnAddAttachment');
$this->assertEquals('UserRequest', get_class($oData->Get('object')));
$oAttachment = $oData->Get('attachment');
/** @var \ormDocument $oDocument */
$oDocument = $oAttachment->Get('contents');
$this->sAddAttachmentName = $oDocument->GetFileName();
}
public function OnRemoveAttachment(EventData $oData)
{
$this->debug('OnRemoveAttachment');
$this->assertEquals('UserRequest', get_class($oData->Get('object')));
$oAttachment = $oData->Get('attachment');
/** @var \ormDocument $oDocument */
$oDocument = $oAttachment->Get('contents');
$this->sRemoveAttachmentName = $oDocument->GetFileName();
}
}