diff --git a/application/utils.inc.php b/application/utils.inc.php
index 66c08e51d..f926b2c3f 100644
--- a/application/utils.inc.php
+++ b/application/utils.inc.php
@@ -2499,15 +2499,17 @@ SQL;
$aHeaders = static::ParseHeaders($http_response_header);
$sMimeType = array_key_exists('Content-Type', $aHeaders) ? strtolower($aHeaders['Content-Type']) : 'application/x-octet-stream';
// Compute the file extension from the MIME Type
- foreach($aKnownExtensions as $sExtValue => $sMime)
- {
- if ($sMime === $sMimeType)
- {
+ foreach ($aKnownExtensions as $sExtValue => $sMime) {
+ if ($sMime === $sMimeType) {
$sExtension = '.'.$sExtValue;
break;
}
}
}
+ $sPathName = pathinfo($sPath, PATHINFO_FILENAME);
+ if (utils::IsNotNullOrEmptyString($sPathName)) {
+ $sFileName = $sPathName;
+ }
$sFileName .= $sExtension;
}
$oUploadedDoc = new ormDocument($sData, $sMimeType, $sFileName);
diff --git a/core/displayablegraph.class.inc.php b/core/displayablegraph.class.inc.php
index d7e67c94a..f1fdd6e76 100644
--- a/core/displayablegraph.class.inc.php
+++ b/core/displayablegraph.class.inc.php
@@ -16,8 +16,11 @@
// You should have received a copy of the GNU Affero General Public License
// along with iTop. If not, see
use Combodo\iTop\Application\Helper\WebResourcesHelper;
+use Combodo\iTop\Application\UI\Base\Component\Html\Html;
use Combodo\iTop\Application\UI\Base\Component\MedallionIcon\MedallionIcon;
use Combodo\iTop\Application\UI\Base\Component\Panel\Panel;
+use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
+use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
use Combodo\iTop\Renderer\BlockRenderer;
/**
@@ -1412,6 +1415,8 @@ class DisplayableGraph extends SimpleGraph
/**
* Display the graph inside the given page, with the "filter" drawer above it
*
+ * @deprecated 3.1.1 3.2.0 N°3767 Use \DisplayableGraph::DisplayFilterBox() and \DisplayableGraph::DisplayGraph() instead
+ *
* @param WebPage $oP
* @param array $aResults
* @param string $sRelation
@@ -1425,10 +1430,35 @@ class DisplayableGraph extends SimpleGraph
*
* @throws \CoreException
* @throws \DictExceptionMissingString
+ *
*/
function Display(WebPage $oP, $aResults, $sRelation, ApplicationContext $oAppContext, $aExcludedObjects, $sObjClass, $iObjKey, $sContextKey, $aContextParams = array(), bool $bLazyLoading = false)
{
- list($aExcludedByClass, $aAdditionalContexts) = $this->DisplayFiltering($sContextKey, $aContextParams, $aExcludedObjects, $oP, $aResults, $bLazyLoading);
+ $oP->AddSubBlock($this->DisplayFilterBox($oP, $aResults, $bLazyLoading));
+ $this->DisplayGraph($oP, $sRelation, $oAppContext, $aExcludedObjects, $sObjClass, $iObjKey, $sContextKey, $aContextParams, $bLazyLoading);
+ }
+
+ /**
+ * Display only the graph inside the given page, with the parameters of filter box draw with DisplayFilterBox
+ *
+ * @param WebPage $oP
+ * @param string $sRelation
+ * @param ApplicationContext $oAppContext
+ * @param array $aExcludedObjects
+ * @param string $sObjClass
+ * @param int $iObjKey
+ * @param string $sContextKey
+ * @param array $aContextParams
+ * @param bool $bLazyLoading
+ *
+ * @throws \CoreException
+ * @throws \DictExceptionMissingString
+ *
+ * @since 3.1.1 3.2.0 N°3767
+ */
+ function DisplayGraph(WebPage $oP, $sRelation, ApplicationContext $oAppContext, $aExcludedObjects, $sObjClass, $iObjKey, $sContextKey, $aContextParams = array(), bool $bLazyLoading = false): void
+ {
+ list($aExcludedByClass, $aAdditionalContexts) = $this->GetFilteringData($sContextKey, $aContextParams, $aExcludedObjects);
$iGroupingThreshold = utils::ReadParam('g', 5);
@@ -1513,12 +1543,10 @@ class DisplayableGraph extends SimpleGraph
$oP->add_ready_script(" $('#$sId').simple_graph(".json_encode($aParams).");");
} else {
$oP->add_script("function Load(){var aExcluded = []; $('input[name^=excluded]').each( function() {if (!$(this).prop('checked')) { aExcluded.push($(this).val()); }} ); var params= $.extend(".json_encode($aParams).", {excluded_classes: aExcluded}); $('#$sId').simple_graph(params);}");
- $oP->add_ready_script("$('#impacted_objects_lists').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');$('#impacted_groups').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');");
-
+ $oP->add_ready_script("$('#graph').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');$('#impacted_objects_lists').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');$('#impacted_groups').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');");
}
}
- catch(Exception $e)
- {
+ catch (Exception $e) {
$oP->add('
'.$e->getMessage().'
');
}
$oP->add_script(
@@ -1563,23 +1591,41 @@ EOF
* @throws \Twig\Error\LoaderError
* @throws \Twig\Error\RuntimeError
* @throws \Twig\Error\SyntaxError
+ *
+ * @deprecated 3.1.1 3.2.0 N°3767 Use \DisplayableGraph::DisplayFilterBox() and \DisplayableGraph::GetFilteringData() instead
*/
public function DisplayFiltering(string $sContextKey, array $aContextParams, array $aExcludedObjects, WebPage $oP, array $aResults, bool $bLazyLoading = false): array
{
- $aContextDefs = static::GetContextDefinitions($sContextKey, true, $aContextParams);
- $aExcludedByClass = array();
- foreach ($aExcludedObjects as $oObj) {
- if (!array_key_exists(get_class($oObj), $aExcludedByClass)) {
- $aExcludedByClass[get_class($oObj)] = array();
- }
- $aExcludedByClass[get_class($oObj)][] = $oObj->GetKey();
- }
+ $oP->Add($this->DisplayFilterBox($oP, $aResults, $bLazyLoading));
+
+ return $this->GetFilteringData($sContextKey, $aContextParams, $aExcludedObjects);
+ }
+
+ /**
+ * @param \WebPage $oP
+ * @param array $aResults
+ * @param bool $bLazyLoading
+ *
+ * @return UIContentBlock
+ * @throws \CoreException
+ * @throws \DictExceptionMissingString
+ * @throws \ReflectionException
+ * @throws \Twig\Error\LoaderError
+ * @throws \Twig\Error\RuntimeError
+ * @throws \Twig\Error\SyntaxError
+ *
+ * @since 3.1.1 3.2.0 N°3767
+ */
+ public function DisplayFilterBox(WebPage $oP, array $aResults, bool $bLazyLoading = false): UIContentBlock
+ {
$sSftShort = Dict::S('UI:ElementsDisplayed');
- $oP->add("\n");
+ $oBlock = UIContentBlockUIBlockFactory::MakeStandard(null, ['not-printable']);
+
$oUiSearchBlock = new Panel($sSftShort, [], Panel::ENUM_COLOR_SCHEME_CYAN, 'dh_flash');
- $oUiSearchBlock->SetCSSClasses(["ibo-search-form-panel", "display_block"]);
- $oUiSearchBlock->SetIsCollapsible(true);
- $oUiHtmlBlock = new Combodo\iTop\Application\UI\Base\Component\Html\Html(
+ $oUiSearchBlock->SetCSSClasses(["ibo-search-form-panel", "display_block"])
+ ->SetIsCollapsible(true);
+
+ $oUiHtmlBlock = new Html(
<<
@@ -1626,11 +1672,23 @@ EOF
$oUiHtmlBlock->AddHtml("
");
}
$oUiHtmlBlock->AddHtml("\n");
- $oUiHtmlBlock->AddHtml("\n"); // class="not-printable"
$oUiSearchBlock->AddSubBlock($oUiHtmlBlock);
- $oP->AddUiBlock($oUiSearchBlock);
+ $oBlock->AddSubBlock($oUiSearchBlock);
+ return $oBlock;
+ }
+
+ public function GetFilteringData(string $sContextKey, array $aContextParams, array $aExcludedObjects): array
+ {
+ $aContextDefs = static::GetContextDefinitions($sContextKey, true, $aContextParams);
+ $aExcludedByClass = array();
+ foreach ($aExcludedObjects as $oObj) {
+ if (!array_key_exists(get_class($oObj), $aExcludedByClass)) {
+ $aExcludedByClass[get_class($oObj)] = array();
+ }
+ $aExcludedByClass[get_class($oObj)][] = $oObj->GetKey();
+ }
$aAdditionalContexts = array();
foreach ($aContextDefs as $sKey => $aDefinition) {
$aAdditionalContexts[] = array('key' => $sKey, 'label' => Dict::S($aDefinition['dict']), 'oql' => $aDefinition['oql'], 'default' => (array_key_exists('default', $aDefinition) && ($aDefinition['default'] == 'yes')));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php
index b9c243cbb..7da8781fc 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/cs.dict.itop-config-mgmt.php
@@ -28,17 +28,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('CS CZ', 'Czech', 'Čeština', array(
- 'Relation:impacts/Description' => 'Prvky ovlivněné objektem',
- 'Relation:impacts/DownStream' => 'Dopad na',
- 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
- 'Relation:impacts/UpStream' => 'Závislost na',
- 'Relation:impacts/UpStream+' => 'Elements impacting~~',
+ 'Relation:impacts/Description' => 'Prvky ovlivněné objektem',
+ 'Relation:impacts/DownStream' => 'Dopad na',
+ 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
+ 'Relation:impacts/UpStream' => 'Závislost na',
+ 'Relation:impacts/UpStream+' => 'Elements impacting~~',
// Legacy entries
'Relation:depends on/Description' => 'Prvky ovlivňující objekt',
- 'Relation:depends on/DownStream' => 'Závislost na',
- 'Relation:depends on/UpStream' => 'Dopad na',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Závislost na',
+ 'Relation:depends on/UpStream' => 'Dopad na',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php
index 9d74700f6..2eae107c3 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/da.dict.itop-config-mgmt.php
@@ -21,17 +21,18 @@
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('DA DA', 'Danish', 'Dansk', array(
- 'Relation:impacts/Description' => 'Elementer berørt af ...',
- 'Relation:impacts/DownStream' => 'Påvrikning ...',
- 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
- 'Relation:impacts/UpStream' => 'Afhænger af ...',
- 'Relation:impacts/UpStream+' => 'Elements impacting~~',
+ 'Relation:impacts/Description' => 'Elementer berørt af ...',
+ 'Relation:impacts/DownStream' => 'Påvrikning ...',
+ 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
+ 'Relation:impacts/UpStream' => 'Afhænger af ...',
+ 'Relation:impacts/UpStream+' => 'Elements impacting~~',
// Legacy entries
'Relation:depends on/Description' => 'Elementer, som afhænger af dette element',
- 'Relation:depends on/DownStream' => 'Afhænger af ...',
- 'Relation:depends on/UpStream' => 'Påvirker ...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Afhænger af ...',
+ 'Relation:depends on/UpStream' => 'Påvirker ...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
index 12aa22b6a..f2573e38a 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php
@@ -23,18 +23,18 @@
*
*/
Dict::Add('DE DE', 'German', 'Deutsch', array(
- 'Relation:impacts/Description' => 'Elemente betroffen von',
- 'Relation:impacts/DownStream' => 'Auswirkung ...',
- 'Relation:impacts/DownStream+' => 'Elemente betroffen von',
- 'Relation:impacts/UpStream' => 'Hängt ab von ...',
- 'Relation:impacts/UpStream+' => 'Betroffene Elemente',
+ 'Relation:impacts/Description' => 'Elemente betroffen von',
+ 'Relation:impacts/DownStream' => 'Auswirkung ...',
+ 'Relation:impacts/DownStream+' => 'Elemente betroffen von',
+ 'Relation:impacts/UpStream' => 'Hängt ab von ...',
+ 'Relation:impacts/UpStream+' => 'Betroffene Elemente',
// Legacy entries
'Relation:depends on/Description' => 'Elemente, von denen dieses Element abhängt.',
- 'Relation:depends on/DownStream' => 'Hängt ab von ...',
- 'Relation:depends on/UpStream' => 'Wirkt auf ...',
- 'Relation:impacts/LoadData' => 'Daten laden',
- 'Relation:impacts/FilteredData' => 'Daten sind über den Tab "Grafische Ansicht" gefiltert',
- 'Relation:impacts/NoFilteredData' => 'Bitte wählen Sie Objekte im Tab "Grafische Ansicht"',
+ 'Relation:depends on/DownStream' => 'Hängt ab von ...',
+ 'Relation:depends on/UpStream' => 'Wirkt auf ...',
+ 'Relation:impacts/LoadData' => 'Daten laden',
+ 'Relation:impacts/FilteredData' => 'Daten sind über den Tab "Grafische Ansicht" gefiltert',
+ 'Relation:impacts/NoFilteredData' => 'Bitte wählen Sie Objekte ~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php
index a95555975..cf97702a5 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/en.dict.itop-config-mgmt.php
@@ -27,17 +27,18 @@
//
Dict::Add('EN US', 'English', 'English', array(
- 'Relation:impacts/Description' => 'Elements impacted by',
- 'Relation:impacts/DownStream' => 'Impacts...',
- 'Relation:impacts/DownStream+' => 'Elements impacted by',
- 'Relation:impacts/UpStream' => 'Depends on......',
- 'Relation:impacts/UpStream+' => 'Elements impacting',
+ 'Relation:impacts/Description' => 'Elements impacted by',
+ 'Relation:impacts/DownStream' => 'Impacts...',
+ 'Relation:impacts/DownStream+' => 'Elements impacted by',
+ 'Relation:impacts/UpStream' => 'Depends on......',
+ 'Relation:impacts/UpStream+' => 'Elements impacting',
// Legacy entries
'Relation:depends on/Description' => 'Elements impacting',
- 'Relation:depends on/DownStream' => 'Depends on...',
- 'Relation:depends on/UpStream' => 'Impacts...',
+ 'Relation:depends on/DownStream' => 'Depends on...',
+ 'Relation:depends on/UpStream' => 'Impacts...',
'Relation:impacts/LoadData' => 'Load data',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data',
+ 'Relation:impacts/FilteredData' => 'Filtered data',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
index 1387356f9..07d9243d8 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php
@@ -27,17 +27,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
- 'Relation:impacts/Description' => 'Elementos Impactados por',
- 'Relation:impacts/DownStream' => 'Impacto...',
- 'Relation:impacts/DownStream+' => 'Elementos Impactados por',
- 'Relation:impacts/UpStream' => 'Depende de...',
- 'Relation:impacts/UpStream+' => 'Elementos de los cuales depende',
+ 'Relation:impacts/Description' => 'Elementos Impactados por',
+ 'Relation:impacts/DownStream' => 'Impacto...',
+ 'Relation:impacts/DownStream+' => 'Elementos Impactados por',
+ 'Relation:impacts/UpStream' => 'Depende de...',
+ 'Relation:impacts/UpStream+' => 'Elementos de los cuales depende',
// Legacy entries
'Relation:depends on/Description' => 'Elementos de los cuales depende',
- 'Relation:depends on/DownStream' => 'Depende de...',
- 'Relation:depends on/UpStream' => 'Impactos...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Depende de...',
+ 'Relation:depends on/UpStream' => 'Impactos...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php
index 5b6488511..9e3642213 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/fr.dict.itop-config-mgmt.php
@@ -23,17 +23,18 @@
// Class: Organization
//
Dict::Add('FR FR', 'French', 'Français', array(
- 'Relation:impacts/Description' => 'Eléments impactés par',
- 'Relation:impacts/DownStream' => 'Impacte...',
- 'Relation:impacts/DownStream+' => 'Eléments impactés par',
- 'Relation:impacts/UpStream' => 'Dépend de...',
- 'Relation:impacts/UpStream+' => 'Eléments dont dépend',
+ 'Relation:impacts/Description' => 'Eléments impactés par',
+ 'Relation:impacts/DownStream' => 'Impacte...',
+ 'Relation:impacts/DownStream+' => 'Eléments impactés par',
+ 'Relation:impacts/UpStream' => 'Dépend de...',
+ 'Relation:impacts/UpStream+' => 'Eléments dont dépend',
// Legacy entries
'Relation:depends on/Description' => 'Eléments dont dépend',
- 'Relation:depends on/DownStream' => 'Dépend de...',
- 'Relation:depends on/UpStream' => 'Impacte...',
- 'Relation:impacts/LoadData' => 'Charger les données',
- 'Relation:impacts/NoFilteredData' => 'Veuillez sélectionner des objets dans l\'onglet Graph',
+ 'Relation:depends on/DownStream' => 'Dépend de...',
+ 'Relation:depends on/UpStream' => 'Impacte...',
+ 'Relation:impacts/LoadData' => 'Charger les données',
+ 'Relation:impacts/NoFilteredData' => 'Veuillez sélectionner des objets et lancer le chargement des données',
+ 'Relation:impacts/FilteredData' => 'Données filtrées',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
index 0fc49989e..7e39d362c 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php
@@ -20,17 +20,18 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
- 'Relation:impacts/Description' => 'Konfigurációs elem működését befolyásolják',
- 'Relation:impacts/DownStream' => 'Hatás',
- 'Relation:impacts/DownStream+' => 'Konfigurációs elem működését befolyásolják',
- 'Relation:impacts/UpStream' => 'Függőségek',
- 'Relation:impacts/UpStream+' => 'Konfigurációs elemtől függnek',
+ 'Relation:impacts/Description' => 'Konfigurációs elem működését befolyásolják',
+ 'Relation:impacts/DownStream' => 'Hatás',
+ 'Relation:impacts/DownStream+' => 'Konfigurációs elem működését befolyásolják',
+ 'Relation:impacts/UpStream' => 'Függőségek',
+ 'Relation:impacts/UpStream+' => 'Konfigurációs elemtől függnek',
// Legacy entries
'Relation:depends on/Description' => 'Konfigurációs elemtől függnek',
- 'Relation:depends on/DownStream' => 'Függőségek',
- 'Relation:depends on/UpStream' => 'Hatások',
- 'Relation:impacts/LoadData' => 'Adat betöltés',
- 'Relation:impacts/NoFilteredData' => 'kérjük, válassza ki az objektumokat a grafikus nézetben',
+ 'Relation:depends on/DownStream' => 'Függőségek',
+ 'Relation:depends on/UpStream' => 'Hatások',
+ 'Relation:impacts/LoadData' => 'Adat betöltés',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
index 6f0e94f77..839137c45 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php
@@ -20,17 +20,18 @@
* @license http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('IT IT', 'Italian', 'Italiano', array(
- 'Relation:impacts/Description' => 'Elementi impattati da...',
- 'Relation:impacts/DownStream' => 'Impatto...',
- 'Relation:impacts/DownStream+' => 'Elementi impattati da...',
- 'Relation:impacts/UpStream' => 'Dipende da...',
- 'Relation:impacts/UpStream+' => 'Elementi di questo elemento dipende da',
+ 'Relation:impacts/Description' => 'Elementi impattati da...',
+ 'Relation:impacts/DownStream' => 'Impatto...',
+ 'Relation:impacts/DownStream+' => 'Elementi impattati da...',
+ 'Relation:impacts/UpStream' => 'Dipende da...',
+ 'Relation:impacts/UpStream+' => 'Elementi di questo elemento dipende da',
// Legacy entries
'Relation:depends on/Description' => 'Elementi di questo elemento dipende da',
- 'Relation:depends on/DownStream' => 'Dipende da...',
- 'Relation:depends on/UpStream' => 'Impatto...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Dipende da...',
+ 'Relation:depends on/UpStream' => 'Impatto...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
index 404307fee..c3d8b876d 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php
@@ -20,17 +20,18 @@
* @licence http://opensource.org/licenses/AGPL-3.0
*/
Dict::Add('JA JP', 'Japanese', '日本語', array(
- 'Relation:impacts/Description' => 'インパクトを受ける要素',
- 'Relation:impacts/DownStream' => 'インパクト...',
- 'Relation:impacts/DownStream+' => 'インパクトを受ける要素',
- 'Relation:impacts/UpStream' => '依存...',
- 'Relation:impacts/UpStream+' => 'この要素が依存している要素',
+ 'Relation:impacts/Description' => 'インパクトを受ける要素',
+ 'Relation:impacts/DownStream' => 'インパクト...',
+ 'Relation:impacts/DownStream+' => 'インパクトを受ける要素',
+ 'Relation:impacts/UpStream' => '依存...',
+ 'Relation:impacts/UpStream+' => 'この要素が依存している要素',
// Legacy entries
'Relation:depends on/Description' => 'この要素が依存している要素',
- 'Relation:depends on/DownStream' => '依存...',
- 'Relation:depends on/UpStream' => 'インパクト...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => '依存...',
+ 'Relation:depends on/UpStream' => 'インパクト...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
index dd5e96f5c..55edad7e3 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php
@@ -32,17 +32,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
- 'Relation:impacts/Description' => 'Elementen met impact van',
- 'Relation:impacts/DownStream' => 'Impact op...',
- 'Relation:impacts/DownStream+' => 'Elementen geïmpacteerd door',
- 'Relation:impacts/UpStream' => 'Is afhankelijk van...',
- 'Relation:impacts/UpStream+' => 'Elementen met impact op',
+ 'Relation:impacts/Description' => 'Elementen met impact van',
+ 'Relation:impacts/DownStream' => 'Impact op...',
+ 'Relation:impacts/DownStream+' => 'Elementen geïmpacteerd door',
+ 'Relation:impacts/UpStream' => 'Is afhankelijk van...',
+ 'Relation:impacts/UpStream+' => 'Elementen met impact op',
// Legacy entries
'Relation:depends on/Description' => 'Elementen afhankelijk van',
- 'Relation:depends on/DownStream' => 'Is afhankelijk van...',
- 'Relation:depends on/UpStream' => 'Impact op...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Is afhankelijk van...',
+ 'Relation:depends on/UpStream' => 'Impact op...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php
index 57c4beef9..f120a29ac 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pl.dict.itop-config-mgmt.php
@@ -25,17 +25,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('PL PL', 'Polish', 'Polski', array(
- 'Relation:impacts/Description' => 'Elementy, na które ma wpływ',
- 'Relation:impacts/DownStream' => 'Wpływa na...',
- 'Relation:impacts/DownStream+' => 'Elementy, na które ma wpływ',
- 'Relation:impacts/UpStream' => 'Zależy od......',
- 'Relation:impacts/UpStream+' => 'Elementy wpływające',
+ 'Relation:impacts/Description' => 'Elementy, na które ma wpływ',
+ 'Relation:impacts/DownStream' => 'Wpływa na...',
+ 'Relation:impacts/DownStream+' => 'Elementy, na które ma wpływ',
+ 'Relation:impacts/UpStream' => 'Zależy od......',
+ 'Relation:impacts/UpStream+' => 'Elementy wpływające',
// Legacy entries
'Relation:depends on/Description' => 'Elementy wpływające',
- 'Relation:depends on/DownStream' => 'Zależy od...',
- 'Relation:depends on/UpStream' => 'Wpływa na...',
- 'Relation:impacts/LoadData' => 'Załaduj dane',
- 'Relation:impacts/NoFilteredData' => 'proszę wybrać obiekty w widoku graficznym',
+ 'Relation:depends on/DownStream' => 'Zależy od...',
+ 'Relation:depends on/UpStream' => 'Wpływa na...',
+ 'Relation:impacts/LoadData' => 'Załaduj dane',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
index fd3640461..17e5244bc 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php
@@ -26,17 +26,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
- 'Relation:impacts/Description' => 'Elementos impactados por',
- 'Relation:impacts/DownStream' => 'Impacto...',
- 'Relation:impacts/DownStream+' => 'Elementos impactados por',
- 'Relation:impacts/UpStream' => 'Depende de...',
- 'Relation:impacts/UpStream+' => 'Elementos estes, que dependem deste elemento',
+ 'Relation:impacts/Description' => 'Elementos impactados por',
+ 'Relation:impacts/DownStream' => 'Impacto...',
+ 'Relation:impacts/DownStream+' => 'Elementos impactados por',
+ 'Relation:impacts/UpStream' => 'Depende de...',
+ 'Relation:impacts/UpStream+' => 'Elementos estes, que dependem deste elemento',
// Legacy entries
'Relation:depends on/Description' => 'Elementos estes, que dependem deste elemento',
- 'Relation:depends on/DownStream' => 'Depende de...',
- 'Relation:depends on/UpStream' => 'Impactos...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Depende de...',
+ 'Relation:depends on/UpStream' => 'Impactos...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
index 72bc2074a..c47cfa437 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php
@@ -13,17 +13,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('RU RU', 'Russian', 'Русский', array(
- 'Relation:impacts/Description' => 'Элементы, на которые влияет',
- 'Relation:impacts/DownStream' => 'Влияет на...',
- 'Relation:impacts/DownStream+' => 'Элементы, на которые влияет',
- 'Relation:impacts/UpStream' => 'Зависит от...',
- 'Relation:impacts/UpStream+' => 'Элементы, от которых зависит',
+ 'Relation:impacts/Description' => 'Элементы, на которые влияет',
+ 'Relation:impacts/DownStream' => 'Влияет на...',
+ 'Relation:impacts/DownStream+' => 'Элементы, на которые влияет',
+ 'Relation:impacts/UpStream' => 'Зависит от...',
+ 'Relation:impacts/UpStream+' => 'Элементы, от которых зависит',
// Legacy entries
'Relation:depends on/Description' => 'Элементы, от которых зависит',
- 'Relation:depends on/DownStream' => 'Зависит от...',
- 'Relation:depends on/UpStream' => 'Влияет на...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Зависит от...',
+ 'Relation:depends on/UpStream' => 'Влияет на...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
index 3f3b74d83..f69ac860d 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php
@@ -25,17 +25,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
- 'Relation:impacts/Description' => 'Prvky zasiahnuté',
- 'Relation:impacts/DownStream' => 'Impacts...~~',
- 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
- 'Relation:impacts/UpStream' => 'Depends on......~~',
- 'Relation:impacts/UpStream+' => 'Elements impacting~~',
+ 'Relation:impacts/Description' => 'Prvky zasiahnuté',
+ 'Relation:impacts/DownStream' => 'Impacts...~~',
+ 'Relation:impacts/DownStream+' => 'Elements impacted by~~',
+ 'Relation:impacts/UpStream' => 'Depends on......~~',
+ 'Relation:impacts/UpStream+' => 'Elements impacting~~',
// Legacy entries
'Relation:depends on/Description' => 'Prvky, od ktorých závisí tento prvok',
- 'Relation:depends on/DownStream' => 'Depends on...~~',
- 'Relation:depends on/UpStream' => 'Impacts...~~',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Depends on...~~',
+ 'Relation:depends on/UpStream' => 'Impacts...~~',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
index a2b043167..403b4bd8b 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php
@@ -27,17 +27,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
- 'Relation:impacts/Description' => 'Etkilenen kalemler',
- 'Relation:impacts/DownStream' => 'Etkiler...',
- 'Relation:impacts/DownStream+' => 'Etkilenen kalemler',
- 'Relation:impacts/UpStream' => 'Bağımlı olanlar...',
- 'Relation:impacts/UpStream+' => 'Bu kaleme bağımlı olan kalemler',
+ 'Relation:impacts/Description' => 'Etkilenen kalemler',
+ 'Relation:impacts/DownStream' => 'Etkiler...',
+ 'Relation:impacts/DownStream+' => 'Etkilenen kalemler',
+ 'Relation:impacts/UpStream' => 'Bağımlı olanlar...',
+ 'Relation:impacts/UpStream+' => 'Bu kaleme bağımlı olan kalemler',
// Legacy entries
'Relation:depends on/Description' => 'Bu kaleme bağımlı olan kalemler',
- 'Relation:depends on/DownStream' => 'Bağımlı olanlar...',
- 'Relation:depends on/UpStream' => 'Etkiledikleri...',
- 'Relation:impacts/LoadData' => 'Load data~~',
- 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~',
+ 'Relation:depends on/DownStream' => 'Bağımlı olanlar...',
+ 'Relation:depends on/UpStream' => 'Etkiledikleri...',
+ 'Relation:impacts/LoadData' => 'Load data~~',
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',
));
diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
index 2fd47235a..ab83c95b0 100644
--- a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
+++ b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php
@@ -25,18 +25,18 @@
//////////////////////////////////////////////////////////////////////
//
Dict::Add('ZH CN', 'Chinese', '简体中文', array(
- 'Relation:impacts/Description' => '被影响的元素',
- 'Relation:impacts/DownStream' => '影响...',
- 'Relation:impacts/DownStream+' => '被影响的元素',
- 'Relation:impacts/UpStream' => '依赖于...',
- 'Relation:impacts/UpStream+' => '此元素依赖的元素...',
+ 'Relation:impacts/Description' => '被影响的元素',
+ 'Relation:impacts/DownStream' => '影响...',
+ 'Relation:impacts/DownStream+' => '被影响的元素',
+ 'Relation:impacts/UpStream' => '依赖于...',
+ 'Relation:impacts/UpStream+' => '此元素依赖的元素...',
// Legacy entries
'Relation:depends on/Description' => '此元素依赖的元素...',
'Relation:depends on/DownStream' => '依赖于...',
'Relation:depends on/UpStream' => '影响...',
'Relation:impacts/LoadData' => '加载数据',
- 'Relation:impacts/NoFilteredData' => '请在可视化视图标签中选择对象',
-));
+ 'Relation:impacts/NoFilteredData' => 'please select objects and load data~~',
+ 'Relation:impacts/FilteredData' => 'Filtered data~~',));
// Dictionnay conventions
diff --git a/pages/UI.php b/pages/UI.php
index 8c2f31609..260dfd175 100644
--- a/pages/UI.php
+++ b/pages/UI.php
@@ -13,6 +13,7 @@ use Combodo\iTop\Application\UI\Base\Component\Form\Form;
use Combodo\iTop\Application\UI\Base\Component\GlobalSearch\GlobalSearchHelper;
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
+use Combodo\iTop\Application\UI\Base\Component\Title\Title;
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\PageContent\PageContentFactory;
@@ -273,7 +274,6 @@ function DisplayNavigatorListTab($oP, $aResults, $sRelation, $sDirection, $oObj)
$oP->SetCurrentTab('UI:RelationshipList');
$oImpactedObject = UIContentBlockUIBlockFactory::MakeStandard("impacted_objects", ['ibo-is-visible']);
$oP->AddSubBlock($oImpactedObject);
- $oImpactedObject->AddSubBlock(AlertUIBlockFactory::MakeForWarning(Dict::S("Relation:impacts/FilteredData"), '', "alert_filtered_list")->SetIsHidden(true));
$oImpactedObjectList = UIContentBlockUIBlockFactory::MakeStandard("impacted_objects_lists", ['ibo-is-visible']);
$oImpactedObject->AddSubBlock($oImpactedObjectList);
$oImpactedObjectList->AddSubBlock(UIContentBlockUIBlockFactory::MakeStandard("impacted_objects_lists_placeholder", ['ibo-is-visible']));
@@ -1406,64 +1406,62 @@ try
$sDescription = MetaModel::GetRelationDescription($sRelation, $bDirDown).' '.$oObj->GetName();
$oP->SetBreadCrumbEntry($sPageId, $sLabel, $sDescription);
- if ($sRelation == 'depends on') {
- $sRelation = 'impacts';
- $sDirection = 'up';
- }
- if ($sDirection == 'up') {
- $oRelGraph = MetaModel::GetRelatedObjectsUp($sRelation, $aSourceObjects, $iMaxRecursionDepth);
- } else {
- $oRelGraph = MetaModel::GetRelatedObjectsDown($sRelation, $aSourceObjects, $iMaxRecursionDepth);
- }
+ if ($sRelation == 'depends on') {
+ $sRelation = 'impacts';
+ $sDirection = 'up';
+ }
+ if ($sDirection == 'up') {
+ $oRelGraph = MetaModel::GetRelatedObjectsUp($sRelation, $aSourceObjects, $iMaxRecursionDepth);
+ } else {
+ $oRelGraph = MetaModel::GetRelatedObjectsDown($sRelation, $aSourceObjects, $iMaxRecursionDepth);
+ }
- $aResults = $oRelGraph->GetObjectsByClass();
- $oDisplayGraph = DisplayableGraph::FromRelationGraph($oRelGraph, $iGroupingThreshold, ($sDirection == 'down'));
- $oPanel = PanelUIBlockFactory::MakeForClass($sClass, MetaModel::GetRelationDescription($sRelation, $bDirDown).' '.$oObj->GetName());
- $sClassIcon = MetaModel::GetClassIcon($sClass, false);
- if (strlen($sClassIcon) > 0){
- $oPanel->SetIcon($sClassIcon);
- }
+ $aResults = $oRelGraph->GetObjectsByClass();
+ $oDisplayGraph = DisplayableGraph::FromRelationGraph($oRelGraph, $iGroupingThreshold, ($sDirection == 'down'));
+ $sTitle = MetaModel::GetRelationDescription($sRelation, $bDirDown).' '.$oObj->GetName();
+ $sClassIcon = MetaModel::GetClassIcon($sClass, false);
- $oP->AddUiBlock($oPanel);
- $oP->AddTabContainer('Navigator', '', $oPanel);
- $oP->SetCurrentTabContainer('Navigator');
+ $sFirstTab = MetaModel::GetConfig()->Get('impact_analysis_first_tab');
+ $bLazyLoading = MetaModel::GetConfig()->Get('impact_analysis_lazy_loading');
+ $sContextKey = "itop-config-mgmt/relation_context/$sClass/$sRelation/$sDirection";
- $sFirstTab = MetaModel::GetConfig()->Get('impact_analysis_first_tab');
- $bLazyLoading = MetaModel::GetConfig()->Get('impact_analysis_lazy_loading');
- $sContextKey = "itop-config-mgmt/relation_context/$sClass/$sRelation/$sDirection";
-
- // Check if the current object supports Attachments, similar to AttachmentPlugin::IsTargetObject
- $sClassForAttachment = null;
- $iIdForAttachment = null;
- if (class_exists('Attachment')) {
- $aAllowedClasses = MetaModel::GetModuleSetting('itop-attachments', 'allowed_classes', array('Ticket'));
- foreach ($aAllowedClasses as $sAllowedClass) {
- if ($oObj instanceof $sAllowedClass) {
- $iIdForAttachment = $id;
- $sClassForAttachment = $sClass;
- }
+ // Check if the current object supports Attachments, similar to AttachmentPlugin::IsTargetObject
+ $sClassForAttachment = null;
+ $iIdForAttachment = null;
+ if (class_exists('Attachment')) {
+ $aAllowedClasses = MetaModel::GetModuleSetting('itop-attachments', 'allowed_classes', array('Ticket'));
+ foreach ($aAllowedClasses as $sAllowedClass) {
+ if ($oObj instanceof $sAllowedClass) {
+ $iIdForAttachment = $id;
+ $sClassForAttachment = $sClass;
}
}
+ }
- // Display the tabs
- if ($sFirstTab == 'list')
- {
- DisplayNavigatorListTab($oP, $aResults, $sRelation, $sDirection, $oObj);
- $oP->SetCurrentTab('UI:RelationshipGraph');
- $oDisplayGraph->Display($oP, $aResults, $sRelation, $oAppContext, array(), $sClassForAttachment, $iIdForAttachment, $sContextKey, array('this' => $oObj),$bLazyLoading);
- DisplayNavigatorGroupTab($oP);
- }
- else
- {
- $oP->SetCurrentTab('UI:RelationshipGraph');
- $oDisplayGraph->Display($oP, $aResults, $sRelation, $oAppContext, array(), $sClassForAttachment, $iIdForAttachment, $sContextKey, array('this' => $oObj),$bLazyLoading);
- DisplayNavigatorListTab($oP, $aResults, $sRelation, $sDirection, $oObj);
- DisplayNavigatorGroupTab($oP);
- }
+ $oP->AddSubBlock($oDisplayGraph->DisplayFilterBox($oP, $aResults, $bLazyLoading));
+ $oPanel = PanelUIBlockFactory::MakeForClass($sClass, $sTitle);
+ $oPanel->SetIcon($sClassIcon);
- $oP->SetCurrentTab('');
- break;
+ $oP->AddSubBlock($oPanel);
+ $oP->AddTabContainer('Navigator', '', $oPanel);
+ $oP->SetCurrentTabContainer('Navigator');
+
+ // Display the tabs
+ if ($sFirstTab == 'list') {
+ DisplayNavigatorListTab($oP, $aResults, $sRelation, $sDirection, $oObj);
+ $oP->SetCurrentTab('UI:RelationshipGraph');
+ $oDisplayGraph->DisplayGraph($oP, $sRelation, $oAppContext, [], $sClassForAttachment, $iIdForAttachment, $sContextKey, array('this' => $oObj), $bLazyLoading);
+ DisplayNavigatorGroupTab($oP);
+ } else {
+ $oP->SetCurrentTab('UI:RelationshipGraph');
+ $oDisplayGraph->DisplayGraph($oP, $sRelation, $oAppContext, array(), $sClassForAttachment, $iIdForAttachment, $sContextKey, array('this' => $oObj), $bLazyLoading);
+ DisplayNavigatorListTab($oP, $aResults, $sRelation, $sDirection, $oObj);
+ DisplayNavigatorGroupTab($oP);
+ }
+
+ $oP->SetCurrentTab('');
+ break;
///////////////////////////////////////////////////////////////////////////////////////////
diff --git a/pages/ajax.render.php b/pages/ajax.render.php
index a200cce29..2d81e7825 100644
--- a/pages/ajax.render.php
+++ b/pages/ajax.render.php
@@ -1952,7 +1952,8 @@ EOF
$sContextKey = 'itop-tickets/relation_context/'.$sClass.'/'.$sRelation.'/'.$sDirection;
$oAppContext = new ApplicationContext();
- $oGraph->Display($oPage, $aResults, $sRelation, $oAppContext, $aExcludedObjects, $sClass, $iId, $sContextKey, array('this' => $oTicket));
+ $oPage->AddSubBlock($oGraph->DisplayFilterBox($oPage, $aResults));
+ $oGraph->DisplayGraph($oPage, $sRelation, $oAppContext, $aExcludedObjects, $sClass, $iId, $sContextKey, array('this' => $oTicket));
break;
case 'export_build':