mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 02:58:43 +02:00
Compare commits
6 Commits
develop
...
feature/71
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb00253363 | ||
|
|
908fd72c1f | ||
|
|
29d77f8092 | ||
|
|
994ee4ffad | ||
|
|
974eafbf4a | ||
|
|
1bb3fe5e0a |
@@ -1408,14 +1408,14 @@ class ObjectController extends BrickController
|
|||||||
protected function PrepareObjectInformation(DBObject $oObject, $aAttCodes = array())
|
protected function PrepareObjectInformation(DBObject $oObject, $aAttCodes = array())
|
||||||
{
|
{
|
||||||
$sObjectClass = get_class($oObject);
|
$sObjectClass = get_class($oObject);
|
||||||
$aObjectData = array(
|
$aObjectData = [
|
||||||
'id' => $oObject->GetKey(),
|
'id' => $oObject->GetKey(),
|
||||||
'name' => $oObject->GetName(),
|
'name' => $oObject->GetName(),
|
||||||
'attributes' => array(),
|
'attributes' => [],
|
||||||
);
|
];
|
||||||
|
|
||||||
// Retrieving attributes definitions
|
// Retrieving attributes definitions
|
||||||
$aAttDefs = array();
|
$aAttDefs = [];
|
||||||
foreach ($aAttCodes as $sAttCode)
|
foreach ($aAttCodes as $sAttCode)
|
||||||
{
|
{
|
||||||
if ($sAttCode === 'id')
|
if ($sAttCode === 'id')
|
||||||
@@ -1429,13 +1429,30 @@ class ObjectController extends BrickController
|
|||||||
// Preparing attribute data
|
// Preparing attribute data
|
||||||
foreach ($aAttDefs as $oAttDef)
|
foreach ($aAttDefs as $oAttDef)
|
||||||
{
|
{
|
||||||
$aAttData = array(
|
$aAttData = [
|
||||||
'att_code' => $oAttDef->GetCode(),
|
'object_class' => $sObjectClass,
|
||||||
);
|
'object_id' => $oObject->GetKey(),
|
||||||
|
'attribute_code' => $oAttDef->GetCode(),
|
||||||
|
'attribute_type' => get_class($oAttDef),
|
||||||
|
];
|
||||||
|
|
||||||
|
// - Value raw
|
||||||
|
// For simple fields, we get the raw (stored) value as well
|
||||||
|
$bExcludeRawValue = false;
|
||||||
|
foreach (ApplicationHelper::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude)
|
||||||
|
{
|
||||||
|
if (is_a($oAttDef, $sAttDefClassToExclude, true))
|
||||||
|
{
|
||||||
|
$bExcludeRawValue = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$aAttData['value_raw'] = ($bExcludeRawValue === false) ? $oObject->Get($oAttDef->GetCode()) : null;
|
||||||
|
|
||||||
|
|
||||||
if ($oAttDef->IsExternalKey())
|
if ($oAttDef->IsExternalKey())
|
||||||
{
|
{
|
||||||
$aAttData['value'] = $oObject->GetAsHTML($oAttDef->GetCode().'_friendlyname');
|
$aAttData['value_html'] = $oObject->GetAsHTML($oAttDef->GetCode().'_friendlyname');
|
||||||
|
|
||||||
// Checking if user can access object's external key
|
// Checking if user can access object's external key
|
||||||
if ($this->oSecurityHelper->IsActionAllowed(UR_ACTION_READ, $oAttDef->GetTargetClass()))
|
if ($this->oSecurityHelper->IsActionAllowed(UR_ACTION_READ, $oAttDef->GetTargetClass()))
|
||||||
@@ -1467,14 +1484,14 @@ class ObjectController extends BrickController
|
|||||||
{
|
{
|
||||||
$sUrl = $oAttDef->Get('default_image');
|
$sUrl = $oAttDef->Get('default_image');
|
||||||
}
|
}
|
||||||
$aAttData['value'] = '<img src="'.$sUrl.'" />';
|
$aAttData['value_html'] = '<img src="'.$sUrl.'" />';
|
||||||
}
|
}
|
||||||
elseif ($oAttDef instanceof AttributeEnum) {
|
elseif ($oAttDef instanceof AttributeEnum) {
|
||||||
$aAttData['value'] = $oAttDef->GetAsPlainText($oObject->Get($oAttDef->GetCode()));
|
$aAttData['value_html'] = $oAttDef->GetAsPlainText($oObject->Get($oAttDef->GetCode()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$aAttData['value'] = $oAttDef->GetAsHTML($oObject->Get($oAttDef->GetCode()));
|
$aAttData['value_html'] = $oAttDef->GetAsHTML($oObject->Get($oAttDef->GetCode()));
|
||||||
|
|
||||||
if ($oAttDef instanceof AttributeFriendlyName)
|
if ($oAttDef instanceof AttributeFriendlyName)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div id="{{ sFormId }}">
|
<div id="{{ sFormId }}">
|
||||||
{#<div class="form_alerts"></div>#}
|
{#<div class="form_alerts"></div>#}
|
||||||
<div class="form_fields">
|
<div class="form_fields">
|
||||||
<table id="{{ sTableId }}" class="table table-striped table-bordered responsive" cellspacing="0" width="100%">
|
<table id="{{ sTableId }}" class="object-list table table-striped table-bordered responsive" cellspacing="0" width="100%">
|
||||||
<tbody>
|
<tbody>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -66,22 +66,35 @@
|
|||||||
"title": oColumnProperties[sKey].title,
|
"title": oColumnProperties[sKey].title,
|
||||||
"defaultContent": "",
|
"defaultContent": "",
|
||||||
"type": "html",
|
"type": "html",
|
||||||
"data": "attributes."+sKey+".att_code",
|
"data": "attributes."+sKey+".attribute_code",
|
||||||
"render": function(data, type, row){
|
"render": function(attribute_code, type, row){
|
||||||
var cellElem;
|
var cellElem;
|
||||||
|
var metadataNames = ['object_class', 'object_id', 'attribute_code', 'attribute_type', 'value_raw'];
|
||||||
|
|
||||||
// Preparing the cell data
|
// Preparing the cell data
|
||||||
if(row.attributes[data].url !== undefined)
|
if(row.attributes[attribute_code].url !== undefined)
|
||||||
{
|
{
|
||||||
cellElem = $('<a></a>');
|
cellElem = $('<a></a>');
|
||||||
cellElem.attr('target', '_blank').attr('href', row.attributes[data].url);
|
cellElem.attr('target', '_blank').attr('href', row.attributes[attribute_code].url);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cellElem = $('<span></span>');
|
cellElem = $('<span></span>');
|
||||||
}
|
}
|
||||||
cellElem.attr('data-object-id', row.id).html('<span>' + row.attributes[data].value + '</span>');
|
//Add markup
|
||||||
|
for(var sPropName in row.attributes[attribute_code])
|
||||||
|
{
|
||||||
|
var propValue = row.attributes[attribute_code][sPropName];
|
||||||
|
if(sPropName === 'value_html')
|
||||||
|
{
|
||||||
|
cellElem.html(propValue);
|
||||||
|
}
|
||||||
|
else if(metadataNames.indexOf(sPropName) > -1)
|
||||||
|
{
|
||||||
|
cellElem.attr('data-'+sPropName.replace('_', '-'), propValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return cellElem.prop('outerHTML');
|
return cellElem.prop('outerHTML');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -92,7 +105,6 @@
|
|||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
showTableLoader();
|
showTableLoader();
|
||||||
|
|
||||||
// Note : Those options should be externalized in an library so we can use them on any DataTables for the portal.
|
// Note : Those options should be externalized in an library so we can use them on any DataTables for the portal.
|
||||||
// We would just have to override / complete the necessary elements
|
// We would just have to override / complete the necessary elements
|
||||||
oTable = $('#{{ sTableId }}').DataTable({
|
oTable = $('#{{ sTableId }}').DataTable({
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ use ApplicationContext;
|
|||||||
use AttributeFriendlyName;
|
use AttributeFriendlyName;
|
||||||
use Combodo\iTop\Form\Field\DateTimeField;
|
use Combodo\iTop\Form\Field\DateTimeField;
|
||||||
use Combodo\iTop\Form\Field\Field;
|
use Combodo\iTop\Form\Field\Field;
|
||||||
|
use Combodo\iTop\Portal\Helper\ApplicationHelper;
|
||||||
use Combodo\iTop\Renderer\Bootstrap\BsFieldRendererMappings;
|
use Combodo\iTop\Renderer\Bootstrap\BsFieldRendererMappings;
|
||||||
use Combodo\iTop\Renderer\FieldRenderer;
|
use Combodo\iTop\Renderer\FieldRenderer;
|
||||||
use Combodo\iTop\Renderer\RenderingOutput;
|
use Combodo\iTop\Renderer\RenderingOutput;
|
||||||
@@ -192,7 +193,7 @@ EOF
|
|||||||
"render": function(data, type, row)
|
"render": function(data, type, row)
|
||||||
{
|
{
|
||||||
var oCheckboxElem = $('{$sSelectionInputHtml}');
|
var oCheckboxElem = $('{$sSelectionInputHtml}');
|
||||||
if(row.limited_access)
|
if(row.limited_access)
|
||||||
{
|
{
|
||||||
oCheckboxElem.html('-');
|
oCheckboxElem.html('-');
|
||||||
}
|
}
|
||||||
@@ -221,7 +222,8 @@ EOF
|
|||||||
"className": {$sIsEditable} && aColumnProperties.mandatory ? 'mandatory' : '',
|
"className": {$sIsEditable} && aColumnProperties.mandatory ? 'mandatory' : '',
|
||||||
"render": function(data, type, row){
|
"render": function(data, type, row){
|
||||||
var cellElem;
|
var cellElem;
|
||||||
|
var metadataNames = ['object_class', 'object_id', 'attribute_code', 'attribute_type', 'value_raw'];
|
||||||
|
|
||||||
// Preparing the cell data
|
// Preparing the cell data
|
||||||
if(data.url !== undefined)
|
if(data.url !== undefined)
|
||||||
{
|
{
|
||||||
@@ -232,8 +234,19 @@ EOF
|
|||||||
{
|
{
|
||||||
cellElem = $('<span></span>');
|
cellElem = $('<span></span>');
|
||||||
}
|
}
|
||||||
cellElem.html('<span>' + data.value + '</span>');
|
for(var sPropName in row.attributes[data.prefix+data.attribute_code])
|
||||||
|
{
|
||||||
|
var propValue = row.attributes[data.prefix+data.attribute_code][sPropName];
|
||||||
|
if(sPropName === 'value_html')
|
||||||
|
{
|
||||||
|
cellElem.html(propValue);
|
||||||
|
}
|
||||||
|
else if(metadataNames.indexOf(sPropName) > -1)
|
||||||
|
{
|
||||||
|
cellElem.attr('data-'+sPropName.replace('_', '-'), propValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return cellElem.prop('outerHTML');
|
return cellElem.prop('outerHTML');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -242,7 +255,6 @@ EOF
|
|||||||
for(sKey in oColumnProperties_{$this->oField->GetGlobalId()})
|
for(sKey in oColumnProperties_{$this->oField->GetGlobalId()})
|
||||||
{
|
{
|
||||||
aColumnProperties = oColumnProperties_{$this->oField->GetGlobalId()}[sKey];
|
aColumnProperties = oColumnProperties_{$this->oField->GetGlobalId()}[sKey];
|
||||||
|
|
||||||
// Level main column
|
// Level main column
|
||||||
aColumnsDefinition.push({
|
aColumnsDefinition.push({
|
||||||
"width": "auto",
|
"width": "auto",
|
||||||
@@ -254,7 +266,8 @@ EOF
|
|||||||
"data": "attributes." + sKey,
|
"data": "attributes." + sKey,
|
||||||
"className": aColumnProperties.mandatory ? 'mandatory' : '',
|
"className": aColumnProperties.mandatory ? 'mandatory' : '',
|
||||||
"render": function(data, type, row){
|
"render": function(data, type, row){
|
||||||
var cellElem;
|
var cellElem;
|
||||||
|
var metadataNames = ['object_class', 'object_id', 'attribute_code', 'attribute_type', 'value_raw'];
|
||||||
|
|
||||||
// Preparing the cell data
|
// Preparing the cell data
|
||||||
if(data.url !== undefined)
|
if(data.url !== undefined)
|
||||||
@@ -266,7 +279,19 @@ EOF
|
|||||||
{
|
{
|
||||||
cellElem = $('<span></span>');
|
cellElem = $('<span></span>');
|
||||||
}
|
}
|
||||||
cellElem.html('<span>' + data.value + '</span>');
|
|
||||||
|
for(var sPropName in row.attributes[data.attribute_code])
|
||||||
|
{
|
||||||
|
var propValue = row.attributes[data.attribute_code][sPropName];
|
||||||
|
if(sPropName === 'value_html')
|
||||||
|
{
|
||||||
|
cellElem.html(propValue);
|
||||||
|
}
|
||||||
|
else if(metadataNames.indexOf(sPropName) > -1)
|
||||||
|
{
|
||||||
|
cellElem.attr('data-'+sPropName.replace('_', '-'), propValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return cellElem.prop('outerHTML');
|
return cellElem.prop('outerHTML');
|
||||||
},
|
},
|
||||||
@@ -799,7 +824,6 @@ JS
|
|||||||
static::TransferFieldRendererGlobalOutput($oFieldOutput, $oOutput);
|
static::TransferFieldRendererGlobalOutput($oFieldOutput, $oOutput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -821,14 +845,30 @@ JS
|
|||||||
|
|
||||||
if ($sAttCode !== 'id') {
|
if ($sAttCode !== 'id') {
|
||||||
|
|
||||||
// Prepare attribute properties
|
|
||||||
$aAttProperties = array(
|
|
||||||
'att_code' => $sAttCode,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Retrieve attribute definition
|
// Retrieve attribute definition
|
||||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||||
|
|
||||||
|
// Prepare attribute properties
|
||||||
|
$aAttProperties = [
|
||||||
|
'prefix'=> $sAttribueKeyPrefix,
|
||||||
|
'object_class' => $sClass,
|
||||||
|
'object_id' => $oItem->GetKey(),
|
||||||
|
'attribute_code' => $sAttCode,
|
||||||
|
'attribute_type' => get_class($oAttDef),
|
||||||
|
];
|
||||||
|
// - Value raw
|
||||||
|
// For simple fields, we get the raw (stored) value as well
|
||||||
|
$bExcludeRawValue = false;
|
||||||
|
foreach (ApplicationHelper::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude)
|
||||||
|
{
|
||||||
|
if (is_a($oAttDef, $sAttDefClassToExclude, true))
|
||||||
|
{
|
||||||
|
$bExcludeRawValue = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$aAttProperties['value_raw'] = ($bExcludeRawValue === false) ? $oItem->Get($sAttCode) : null;
|
||||||
|
|
||||||
// External key specific
|
// External key specific
|
||||||
if ($bIsEditable) {
|
if ($bIsEditable) {
|
||||||
|
|
||||||
@@ -847,23 +887,23 @@ JS
|
|||||||
$oFieldOutput = $oFieldRenderer->Render();
|
$oFieldOutput = $oFieldRenderer->Render();
|
||||||
$aAttProperties['js_inline'] = $oFieldOutput->GetJs();
|
$aAttProperties['js_inline'] = $oFieldOutput->GetJs();
|
||||||
$aAttProperties['css_inline'] = $oFieldOutput->GetCss();
|
$aAttProperties['css_inline'] = $oFieldOutput->GetCss();
|
||||||
$aAttProperties['value'] = $oFieldOutput->GetHtml();
|
$aAttProperties['value_html'] = $oFieldOutput->GetHtml();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ($oAttDef->IsExternalKey()) {
|
} else if ($oAttDef->IsExternalKey()) {
|
||||||
|
|
||||||
/** @var \AttributeExternalKey $oAttDef */
|
/** @var \AttributeExternalKey $oAttDef */
|
||||||
$aAttProperties['value'] = $oItem->Get($sAttCode.'_friendlyname');
|
$aAttProperties['value_html'] = $oItem->Get($sAttCode.'_friendlyname');
|
||||||
|
|
||||||
// Checking if user can access object's external key
|
// Checking if user can access object's external key
|
||||||
$sObjectUrl = ApplicationContext::MakeObjectUrl($sClass, $oItem->Get($sAttCode));
|
$sObjectUrl = ApplicationContext::MakeObjectUrl($oAttDef->GetTargetClass(), $oItem->Get($sAttCode));
|
||||||
if (!empty($sObjectUrl)) {
|
if (!empty($sObjectUrl)) {
|
||||||
$aAttProperties['url'] = $sObjectUrl;
|
$aAttProperties['url'] = $sObjectUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // Others attributes
|
} else { // Others attributes
|
||||||
|
|
||||||
$aAttProperties['value'] = $oAttDef->GetAsHTML($oItem->Get($sAttCode));
|
$aAttProperties['value_html'] = $oAttDef->GetAsHTML($oItem->Get($sAttCode));
|
||||||
|
|
||||||
if ($oAttDef instanceof AttributeFriendlyName) {
|
if ($oAttDef instanceof AttributeFriendlyName) {
|
||||||
// Checking if user can access object
|
// Checking if user can access object
|
||||||
|
|||||||
Reference in New Issue
Block a user