mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°7194 - Add link to datamodel class schema on object details (#613)
This commit is contained in:
@@ -125,9 +125,7 @@ class ApplicationMenu
|
|||||||
*/
|
*/
|
||||||
public static function CheckMenuIdEnabled($sMenuId)
|
public static function CheckMenuIdEnabled($sMenuId)
|
||||||
{
|
{
|
||||||
self::LoadAdditionalMenus();
|
if (self::IsMenuIdEnabled($sMenuId) === false)
|
||||||
$oMenuNode = self::GetMenuNode(self::GetMenuIndexById($sMenuId));
|
|
||||||
if (is_null($oMenuNode) || !$oMenuNode->IsEnabled())
|
|
||||||
{
|
{
|
||||||
require_once(APPROOT.'/setup/setuppage.class.inc.php');
|
require_once(APPROOT.'/setup/setuppage.class.inc.php');
|
||||||
$oP = new ErrorPage(Dict::S('UI:PageTitle:FatalError'));
|
$oP = new ErrorPage(Dict::S('UI:PageTitle:FatalError'));
|
||||||
@@ -138,6 +136,19 @@ class ApplicationMenu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $sMenuId
|
||||||
|
*
|
||||||
|
* @return bool true if the menu exists and current user is allowed to see the menu
|
||||||
|
* @since 3.2.0
|
||||||
|
*/
|
||||||
|
public static function IsMenuIdEnabled($sMenuId):bool
|
||||||
|
{
|
||||||
|
self::LoadAdditionalMenus();
|
||||||
|
$oMenuNode = self::GetMenuNode(self::GetMenuIndexById($sMenuId));
|
||||||
|
return is_null($oMenuNode) === false && $oMenuNode->IsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main function to add a menu entry into the application, can be called during the definition
|
* Main function to add a menu entry into the application, can be called during the definition
|
||||||
* of the data model objects
|
* of the data model objects
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ $ibo-object-details--header-right--padding-right--is-sticking: $ibo-spacing-300
|
|||||||
|
|
||||||
.ibo-object-details--status + .ibo-object-details--object-class {
|
.ibo-object-details--status + .ibo-object-details--object-class {
|
||||||
margin-left: 0.5rem;
|
margin-left: 0.5rem;
|
||||||
|
display: inline-flex; /* To avoid having spaces around the class name due to the indentation */
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
content: "(";
|
content: "(";
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Erzeuge eine neues Objekt (der gleichen Klasse, wie das angezeigte Objekt)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Erzeuge eine neues Objekt (der gleichen Klasse, wie das angezeigte Objekt)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Speichere das angezeigte Objekt',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Speichere das angezeigte Objekt',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Erstellung eines Objekts',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Erstellung eines Objekts',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -10,4 +10,5 @@ Dict::Add('EN US', 'English', 'English', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Crear un nuevo objeto (con la misma clase que el objeto mostrado)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Crear un nuevo objeto (con la misma clase que el objeto mostrado)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Guardar objeto mostrado',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Guardar objeto mostrado',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('FR FR', 'French', 'Français', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Créer un nouvel objet (avec la même classe que l\'objet affiché)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Créer un nouvel objet (avec la même classe que l\'objet affiché)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Enregistrer l\'objet affiché',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Enregistrer l\'objet affiché',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation d\'un objet',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation d\'un objet',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Schéma du modèle de données de la classe',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Új objektum létrehozása (a megjelenített objektummal azonos osztályú)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Új objektum létrehozása (a megjelenített objektummal azonos osztályú)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Megjelenített objektum mentése',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Megjelenített objektum mentése',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Crea un nuovo oggetto (con la stessa classe dell\'oggetto visualizzato)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Crea un nuovo oggetto (con la stessa classe dell\'oggetto visualizzato)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Salva oggetto visualizzato',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Salva oggetto visualizzato',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creazione di un oggetto',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creazione di un oggetto',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Maak een nieuw object (van dezelfde klasse als het getoonde object)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Maak een nieuw object (van dezelfde klasse als het getoonde object)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Bewaar huidig object',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Bewaar huidig object',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Objecten schema van deze klasse',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Utwórz nowy obiekt (z tą samą klasą co wyświetlany obiekt)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Utwórz nowy obiekt (z tą samą klasą co wyświetlany obiekt)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Zapisz wyświetlany obiekt',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Zapisz wyświetlany obiekt',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Criar um novo objeto (com a mesma classe do objeto atual)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Criar um novo objeto (com a mesma classe do objeto atual)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Salvar objeto atual',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Salvar objeto atual',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Создать новый объект (того же класса, что и просматриваемый объект)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Создать новый объект (того же класса, что и просматриваемый объект)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Сохранить просматриваемый объект',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Сохранить просматриваемый объект',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => 'Create a new object (with same class as displayed object)~~',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => 'Save displayed object~~',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => 'Creation of an object~~',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
|
|||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => '创建新对象 (与当前对象相同)',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:NewObject' => '创建新对象 (与当前对象相同)',
|
||||||
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => '保存当前对象',
|
'UI:Layout:ObjectDetails:KeyboardShortcut:SaveObject' => '保存当前对象',
|
||||||
'UI:Layout:ObjectDetails:New:Modal:Title' => '创建对象',
|
'UI:Layout:ObjectDetails:New:Modal:Title' => '创建对象',
|
||||||
|
'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' => 'Class data model schema~~',
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
namespace Combodo\iTop\Application\TwigBase\Twig;
|
namespace Combodo\iTop\Application\TwigBase\Twig;
|
||||||
|
|
||||||
|
|
||||||
|
use ApplicationMenu;
|
||||||
use AttributeDate;
|
use AttributeDate;
|
||||||
use AttributeDateTime;
|
use AttributeDateTime;
|
||||||
use AttributeText;
|
use AttributeText;
|
||||||
@@ -182,6 +183,13 @@ class Extension
|
|||||||
return utils::GetAbsoluteUrlModulesRoot();
|
return utils::GetAbsoluteUrlModulesRoot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Function to check if current user can access to the given menu
|
||||||
|
// Usage in twig: {% if is_backoffice_menu_enabled('DataModelMenu') %}
|
||||||
|
/** @since 3.2.0 */
|
||||||
|
$aFunctions[] = new TwigFunction('is_backoffice_menu_enabled', function ($sMenuId) {
|
||||||
|
return ApplicationMenu::IsMenuIdEnabled($sMenuId);
|
||||||
|
});
|
||||||
|
|
||||||
// Function to render a UI block (HTML, inline CSS, inline JS) and its sub blocks directly in the TWIG
|
// Function to render a UI block (HTML, inline CSS, inline JS) and its sub blocks directly in the TWIG
|
||||||
// Usage in twig: {{ render_block(oBlock) }}
|
// Usage in twig: {{ render_block(oBlock) }}
|
||||||
/** @since 3.0.0 */
|
/** @since 3.0.0 */
|
||||||
|
|||||||
@@ -17,6 +17,12 @@
|
|||||||
<span class="ibo-object-details--status-label" data-role="ibo-object-details--status-label">{{ oUIBlock.GetStatusLabel() }}</span>
|
<span class="ibo-object-details--status-label" data-role="ibo-object-details--status-label">{{ oUIBlock.GetStatusLabel() }}</span>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="ibo-object-details--object-class" data-role="ibo-object-details--object-class">{{ oUIBlock.GetClassLabel() }}</span>
|
<span class="ibo-object-details--object-class" data-role="ibo-object-details--object-class">
|
||||||
|
{% if is_backoffice_menu_enabled('DataModelMenu') %}
|
||||||
|
<a href="{{ get_absolute_url_app_root() }}pages/schema.php?operation=details_class&class={{ oUIBlock.GetClassName() }}" target="_blank" data-tooltip-content="{{ 'UI:Layout:ObjectDetails:DatamodelSchemaLink:Tooltip' | dict_s }} <i class='fas fa-external-link-alt'></i>" data-tooltip-html-enabled="true">{{ oUIBlock.GetClassLabel() }}</a>
|
||||||
|
{% else %}
|
||||||
|
{{ oUIBlock.GetClassLabel() }}
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
{{ parent() }}
|
{{ parent() }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user