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':