diff --git a/application/loginwebpage.class.inc.php b/application/loginwebpage.class.inc.php
index 09eaa9073..8361a8904 100644
--- a/application/loginwebpage.class.inc.php
+++ b/application/loginwebpage.class.inc.php
@@ -790,12 +790,13 @@ class LoginWebPage extends NiceWebPage
$oPerson = null;
try
{
- $sOrigin = 'External User provisioning';
+ CMDBObject::SetTrackOrigin('custom-extension');
+ $sInfo = 'External User provisioning';
if (isset($_SESSION['login_mode']))
{
- $sOrigin .= " ({$_SESSION['login_mode']})";
+ $sInfo .= " ({$_SESSION['login_mode']})";
}
- CMDBObject::SetTrackOrigin($sOrigin);
+ CMDBObject::SetTrackInfo($sInfo);
$oPerson = MetaModel::NewObject('Person');
$oPerson->Set('first_name', $sFirstName);
@@ -843,6 +844,14 @@ class LoginWebPage extends NiceWebPage
$oUser = null;
try
{
+ CMDBObject::SetTrackOrigin('custom-extension');
+ $sInfo = 'External User provisioning';
+ if (isset($_SESSION['login_mode']))
+ {
+ $sInfo .= " ({$_SESSION['login_mode']})";
+ }
+ CMDBObject::SetTrackInfo($sInfo);
+
$oUser = MetaModel::GetObjectByName('UserExternal', $sAuthUser, false);
if (is_null($oUser))
{
diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php
index 8a3d06a82..9e769e1ea 100644
--- a/core/dbobjectsearch.class.php
+++ b/core/dbobjectsearch.class.php
@@ -223,9 +223,9 @@ class DBObjectSearch extends DBSearch
public function RenameAlias($sOldName, $sNewName)
{
$bFound = false;
- if (array_key_exists($sOldName, $this->m_aClasses))
+ if (!array_key_exists($sOldName, $this->m_aClasses))
{
- $bFound = true;
+ return false;
}
if (array_key_exists($sNewName, $this->m_aClasses))
{
diff --git a/css/css-variables.scss b/css/css-variables.scss
index 524c792b0..76e3f6183 100644
--- a/css/css-variables.scss
+++ b/css/css-variables.scss
@@ -17,7 +17,7 @@
*/
// Beware the version number MUST be enclosed with quotes otherwise v2.3.0 becomes v2 0.3 .0
-$version: "v2.7.0-1";
+$version: "v2.7.0-2";
$approot-relative: "../../../../../" !default; // relative to env-***/branding/themes/***/main.css
// Base colors
diff --git a/datamodels/2.x/itop-attachments/ajax.itop-attachment.php b/datamodels/2.x/itop-attachments/ajax.itop-attachment.php
index cdcace1cb..b603773f1 100644
--- a/datamodels/2.x/itop-attachments/ajax.itop-attachment.php
+++ b/datamodels/2.x/itop-attachments/ajax.itop-attachment.php
@@ -46,7 +46,7 @@ function RenderAttachments(ajax_page $oPage, $iTransactionId)
: AttachmentPlugIn::IsReadonlyState($oObject, $oObject->GetState(), AttachmentPlugIn::ENUM_GUI_BACKOFFICE);
if ($bEditMode && !$bIsReadOnlyState)
{
- $oAttachmentsRenderer->RenderEditAttachmentsList($aAttachmentsDeleted);
+ $oAttachmentsRenderer->AddAttachmentsListContent(true, $aAttachmentsDeleted);
}
else
{
diff --git a/datamodels/2.x/itop-attachments/renderers.itop-attachments.php b/datamodels/2.x/itop-attachments/renderers.itop-attachments.php
index b91f59670..16c848fbd 100644
--- a/datamodels/2.x/itop-attachments/renderers.itop-attachments.php
+++ b/datamodels/2.x/itop-attachments/renderers.itop-attachments.php
@@ -69,6 +69,14 @@ abstract class AbstractAttachmentsRenderer
*/
const MAX_SIZE_FOR_PREVIEW = 500000;
+ /**
+ * Attachments list container HTML id, that must be generated in {@link RenderEditAttachmentsList}
+ *
+ * @since 2.7.0-2 N°2968 ajax buttons (on especially the #attachment_plugin hidden input) should not be refreshed
+ * so we are refreshing only the content of this container
+ */
+ const ATTACHMENTS_LIST_CONTAINER_ID = 'AttachmentsListContainer';
+
/** @var \WebPage */
protected $oPage;
/**
@@ -129,13 +137,38 @@ abstract class AbstractAttachmentsRenderer
}
/**
+ * Can be overriden to change display order, but must generate an HTML container of ID {@link ATTACHMENTS_LIST_CONTAINER_ID} for JS refresh.
+ *
* @param int[] $aAttachmentsDeleted Attachments id that should be deleted after form submission
*
- * @return string
+ * @return void will print using {@link oPage}
*/
- abstract public function RenderEditAttachmentsList($aAttachmentsDeleted = array());
+ public function RenderEditAttachmentsList($aAttachmentsDeleted = array())
+ {
+ $this->AddUploadButton();
- abstract public function RenderViewAttachmentsList();
+ $this->oPage->add('
');
+ $this->AddAttachmentsListContent(true, $aAttachmentsDeleted);
+ $this->oPage->add('
');
+ }
+
+ /**
+ * Generates the attachments list content
+ *
+ * @param bool $bWithDeleteButton
+ * @param array $aAttachmentsDeleted
+ *
+ * @throws \ArchivedObjectException
+ * @throws \CoreException
+ * @throws \CoreUnexpectedValue
+ * @throws \MySQLException
+ */
+ abstract public function AddAttachmentsListContent($bWithDeleteButton, $aAttachmentsDeleted = array());
+
+ public function RenderViewAttachmentsList()
+ {
+ $this->AddAttachmentsListContent(false, array());
+ }
protected function AddUploadButton()
{
@@ -154,9 +187,9 @@ abstract class AbstractAttachmentsRenderer
$this->oPage->add_ready_script(
<<tbody>tr[id^="display_attachment_"]>td input[name="removed_attachments[]"]'),
aAttachmentsDeletedIds = aAttachmentsDeletedHiddenInputs.map(function() { return $(this).val() }).toArray();
$(sContentNode).block();
@@ -172,6 +205,8 @@ abstract class AbstractAttachmentsRenderer
function(data) {
$(sContentNode).html(data);
$(sContentNode).unblock();
+
+ $('#attachment_plugin').trigger('add_attachment', [dataUpload.result.att_id, dataUpload.result.msg, false]);
}
)
}
@@ -181,20 +216,18 @@ abstract class AbstractAttachmentsRenderer
formData: { operation: 'add', temp_id: '$this->sTransactionId', obj_class: '$sClass' },
dataType: 'json',
pasteZone: null, // Don't accept files via Chrome's copy/paste
- done: function (e, data) {
+ done: function(e, data) {
if(typeof(data.result.error) != 'undefined')
{
if(data.result.error !== '')
{
alert(data.result.error);
- }
- else
- {
- RefreshAttachmentsDisplay();
+ return;
}
}
+ RefreshAttachmentsDisplay(data);
},
- send: function(e, data){
+ send: function(e, data){
// Don't send attachment if size is greater than PHP post_max_size, otherwise it will break the request and all its parameters (\$_REQUEST, \$_POST, ...)
// Note: We loop on the files as the data structures is an array but in this case, we only upload 1 file at a time.
var iTotalSizeInBytes = 0;
@@ -337,16 +370,7 @@ JS;
*/
class TableDetailsAttachmentsRenderer extends AbstractAttachmentsRenderer
{
- /**
- * @param bool $bWithDeleteButton
- * @param array $aAttachmentsDeleted
- *
- * @throws \ArchivedObjectException
- * @throws \CoreException
- * @throws \CoreUnexpectedValue
- * @throws \MySQLException
- */
- private function AddAttachmentsTable($bWithDeleteButton, $aAttachmentsDeleted = array())
+ public function AddAttachmentsListContent($bWithDeleteButton, $aAttachmentsDeleted = array())
{
if ($this->GetAttachmentsCount() === 0)
{
@@ -534,22 +558,4 @@ JS
HTML
);
}
-
- /**
- * @inheritDoc
- */
- public function RenderEditAttachmentsList($aAttachmentsDeleted = array())
- {
- $this->AddUploadButton();
-
- $this->AddAttachmentsTable(true, $aAttachmentsDeleted);
- }
-
- /**
- * @inheritDoc
- */
- public function RenderViewAttachmentsList()
- {
- $this->AddAttachmentsTable(false);
- }
}
diff --git a/pages/ajax.render.php b/pages/ajax.render.php
index 77b5e0dd2..f10099aa1 100644
--- a/pages/ajax.render.php
+++ b/pages/ajax.render.php
@@ -1196,7 +1196,7 @@ EOF
break;
case 'dashboard_editor':
- $sId = utils::ReadParam('id', '', false, 'element_identifier');
+ $sId = utils::ReadParam('id', '', false, 'context_param');
$aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data');
$aExtraParams['dashboard_div_id'] = utils::Sanitize($sId, '', 'element_identifier');
$sDashboardFile = utils::ReadParam('file', '', false, 'raw_data');
diff --git a/test/OQL/OQLToSQLTest.php b/test/OQL/OQLToSQLTest.php
index d12b03f39..dec00c31e 100644
--- a/test/OQL/OQLToSQLTest.php
+++ b/test/OQL/OQLToSQLTest.php
@@ -341,6 +341,7 @@ class OQLToSQLTest extends ItopDataTestCase
);
$aData = array(
+ "SELECT UNION 5.6" => array("SELECT `Organization` AS `Organization` WHERE ((`Organization`.`status` != 'inactive') AND (`Organization`.`id` = '1')) UNION SELECT `Organization` AS `Organization` WHERE ((`Organization`.`id` = '1') AND (`Organization`.`id` = '1'))", array(), array(), array(), null, null, 3, 0),
"SELECT WebServer 150" => array("SELECT `WebServer` FROM WebServer AS `WebServer` WHERE 1", array(), array(), $aAttToLoad150, null, null, 3, 0),
"SELECT WebServer 151" => array("SELECT `WebServer` FROM WebServer AS `WebServer` WHERE 1", array(), array(), array(), null, null, 3, 0),
"SELECT L JOIN 176" => array("SELECT `L` FROM Location AS `L` JOIN Person AS `P` ON `P`.location_id = `L`.id WHERE 1", unserialize('a:1:{s:14:"L.friendlyname";b:1;}'), array(), null, null, 3, 0),