Add LSaddon::showTechInfo

This commit is contained in:
Benjamin Renard 2020-09-21 15:47:07 +02:00
parent 5315005382
commit 8f407e9345
17 changed files with 453 additions and 40 deletions

View file

@ -5,10 +5,10 @@
Cette partie décrit la manière de configurer les différents &LSaddons;
actuellement supportés par &LdapSaisie;. Ces addons peuvent avoir un
fichier de configuration et il sera alors stocké dans le dossier
<literal>conf/LSaddons/</literal> et potera le nom
<literal>conf/LSaddons/</literal> et potera le nom
<literal>config.LSaddons.[addon name].php</literal>.
</para>
&conf-LSaddon_asterisk;
&conf-LSaddon_exportSearchResultAsCSV;
&conf-LSaddon_LSaccessRightsMatrixView;
@ -16,5 +16,6 @@
&conf-LSaddon_maildir;
&conf-LSaddon_mailquota;
&conf-LSaddon_phpldapadmin;
&conf-LSaddon_showTechInfo;
</sect1>

View file

@ -6,4 +6,4 @@
<!ENTITY conf-LSaddon_maildir SYSTEM "LSaddon_maildir.docbook">
<!ENTITY conf-LSaddon_mailquota SYSTEM "LSaddon_mailquota.docbook">
<!ENTITY conf-LSaddon_phpldapadmin SYSTEM "LSaddon_phpldapadmin.docbook">
<!ENTITY conf-LSaddon_showTechInfo SYSTEM "LSaddon_showTechInfo.docbook">

View file

@ -14,16 +14,16 @@
<citetitle>Structure du fichier</citetitle>
<![CDATA[// CSV file delimiter
define('LS_EXPORTSEARCHRESULTASCSV_DELIMITER',',');
// CSV file enclosure
define('LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE','"');
// CSV file escape character (available since PHP 5.5.4)
define('LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR','\\');]]>
</programlisting>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>exportSearchResultAsCSV()</literal> comme &customSearchActions;</para>
<literal>exportSearchResultAsCSV()</literal> comme &customSearchActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (
@ -45,6 +45,6 @@ define('LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR','\\');]]>
</programlisting>
<note><simpara>Le label et l'icône fournis dans cet exemple sont traduits
et délivrés avec &LdapSaisie;</simpara></note>
et délivrés avec &LdapSaisie;.</simpara></note>
</sect2>

View file

@ -0,0 +1,33 @@
<sect2 id="config-LSaddon_showTechInfo">
<title>LSaddon_showTechInfo</title>
<para>Cet &LSaddon; fournie une fonction du même nom pouvant être utilisée
comme &customActions; et permettant d'afficher les informations techniques
d'un objet de l'annuaire.</para>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>showTechInfo()</literal> comme &customActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
[...]
);]]>
</programlisting>
<note><simpara>Le label et l'icône fournis dans cet exemple sont traduits et
délivrés avec &LdapSaisie;.</simpara></note>
</sect2>

View file

@ -30,6 +30,20 @@ $GLOBALS['LSobjects']['LScompany'] = array (
'display_name_format' => '%{ou}',
'label' => 'Companies',
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
'attrs' => array (
/* ----------- start -----------*/

View file

@ -38,6 +38,21 @@ $GLOBALS['LSobjects']['LSgroup'] = array (
),
'display_name_format' => '%{cn}',
'label' => 'Groups',
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
'attrs' => array (
/* ----------- start -----------*/

View file

@ -45,6 +45,20 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'exportSearchResultAsCSV',
),
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
'ioFormat' => array (
'mycsv' => array (
'label' => 'Simple CSV',

View file

@ -31,6 +31,20 @@ $GLOBALS['LSobjects']['LSsysaccount'] = array (
'display_name_format' => '%{uid}',
'label' => 'System accounts',
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
'LSsearch' => array (
'attrs' => array (
'uid',

View file

@ -25,5 +25,6 @@ $GLOBALS['LSaddons']['loads'] = array (
'posix',
'ftp',
'maildir',
'LSaccessRightsMatrixView'
'showTechInfo',
'LSaccessRightsMatrixView',
);

View file

@ -0,0 +1,7 @@
#showTechInfo dl:first-of-type {
margin-left: 1em;
}
dl dt {
font-weight: bold;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

View file

@ -0,0 +1,139 @@
<?php
/*******************************************************************************
* Copyright (C) 2007 Easter-eggs
* http://ldapsaisie.labs.libre-entreprise.org
*
* Author: See AUTHORS file in top-level directory.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
******************************************************************************/
/**
* Check support of showTechInfo addon by LdapSaisie
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean true if LSaccessRightsMatrixView addon is totally supported, false in other case
*/
function LSaddon_showTechInfo_support() {
return True;
}
function showTechInfo($object) {
$dn = $object -> getDn();
// Retreive internal attributes
$internal_attrs = LSldap :: getAttrs(
$dn,
null,
array('objectClass'),
true
);
// Extract object classes
$object_classes = array();
$structural_object_class = null;
if (array_key_exists('objectClass', $internal_attrs)) {
$object_classes = (
is_array($internal_attrs['objectClass'])?
$internal_attrs['objectClass']:
array($internal_attrs['objectClass'])
);
sort($object_classes);
unset($internal_attrs['objectClass']);
if (array_key_exists('structuralObjectClass', $internal_attrs)) {
$structural_object_class = $internal_attrs['structuralObjectClass'];
}
}
// Handle special internal attributes
$special_internal_attributes_label = array(
'structuralObjectClass' => _('Structural object class'),
'createTimestamp' => _('Creation date'),
'creatorsName' => _('Creator DN'),
'modifyTimestamp' => _('Last modification date'),
'modifiersName' => _('Last modifier DN'),
'modifiersName' => _('Last modifier DN'),
'entryCSN' => _('LDAP entry change sequence number'),
'entryUUID' => _('LDAP entry UUID'),
'hasSubordinates' => _('LDAP entry has children'),
);
$datetime_special_internal_attributes = array('createTimestamp', 'modifyTimestamp');
$boolean_special_internal_attributes = array('hasSubordinates');
$special_internal_attributes = array();
foreach($special_internal_attributes_label as $attr => $label) {
if (!array_key_exists($attr, $internal_attrs))
continue;
if (in_array($attr, $datetime_special_internal_attributes)) {
$datetime = date_create_from_format('YmdHisO', $internal_attrs[$attr]);
if ($datetime instanceof DateTime) {
$special_internal_attributes[$attr] = array(
'label' => $label,
'values' => strftime("%Y/%m/%d %T", $datetime -> format('U')),
);
}
else
continue;
}
elseif (in_array($attr, $boolean_special_internal_attributes)) {
if ($internal_attrs[$attr] == 'TRUE')
$value = _('Yes');
elseif ($internal_attrs[$attr] == 'FALSE')
$value = _('No');
else
continue;
$special_internal_attributes[$attr] = array(
'label' => $label,
'values' => $value,
);
}
else {
$special_internal_attributes[$attr] = array(
'label' => $label,
'values' => $internal_attrs[$attr],
);
}
unset($internal_attrs[$attr]);
}
// Sort other internal attributes by name
ksort($internal_attrs);
LStemplate :: assign('pagetitle', getFData(_('%{name}: Technical information'), $object -> getDisplayName()));
$LSview_actions=array();
$LSview_actions['return'] = array (
'label' => _('Go back'),
'url' => 'object/'.$object->getType().'/'.urlencode($dn),
'action' => 'view'
);
LStemplate :: assign('LSview_actions', $LSview_actions);
if (LSsession :: loadLSclass('LSform')) {
LSform :: loadDependenciesDisplayView();
}
LStemplate :: assign('object', $object);
LStemplate :: assign('object_classes', $object_classes);
LStemplate :: assign('structural_object_class', $structural_object_class);
LStemplate :: assign('special_internal_attributes', $special_internal_attributes);
LStemplate :: assign('other_internal_attrs', $internal_attrs);
LStemplate :: addCssFile('showTechInfo.css');
LSsession :: setTemplate('showTechInfo.tpl');
// Display template
LSsession :: displayTemplate();
exit();
}

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: LdapSaisie\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2020-09-11 13:37+0200\n"
"PO-Revision-Date: 2020-09-21 15:46+0200\n"
"Last-Translator: Benjamin Renard <brenard@zionetrix.net>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\n"
@ -344,6 +344,58 @@ msgstr ""
"MAILDIR : Erreur durant la récupération du chemin distant du dossier des "
"mails."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:63
#: templates/default/showTechInfo.tpl:16
msgid "Structural object class"
msgstr "Classe d'objet structurelle"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:64
msgid "Creation date"
msgstr "Date de création"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:65
msgid "Creator DN"
msgstr "DN du créateur"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:66
msgid "Last modification date"
msgstr "Date de dernière modification"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:67
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:68
msgid "Last modifier DN"
msgstr "DN de l'utilisateur ayant modifié en dernier l'objet"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:69
msgid "LDAP entry change sequence number"
msgstr "Numéro séquence de changement de l'entrée LDAP"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:70
msgid "LDAP entry UUID"
msgstr "UUID de l'entrée LDAP"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:71
msgid "LDAP entry has children"
msgstr "L'entrée LDAP as des enfants"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:92
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:60
msgid "Yes"
msgstr "Oui"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:94
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:61
msgid "No"
msgstr "Non"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:114
msgid "%{name}: Technical information"
msgstr "%{name} : Informations techniques"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:118
msgid "Go back"
msgstr "Retour"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.asterisk.php:27
msgid "Asterisk Support : The constant %{const} is not defined."
msgstr "Support Asterisk : La constante %{const} n'est pas définie."
@ -1359,31 +1411,31 @@ msgstr ""
"LSformRule_password : Regex invalide configurée : %{regex}. Vous devez "
"utiliser des regex de type PCRE (commencant par le caractère '/')."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:521
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:530
msgid "LSldap : Error during the LDAP server connection (%{msg})."
msgstr "LSldap : Erreur durant la connexion au serveur LDAP (%{msg})."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:524
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:533
msgid "LSldap : Error during the LDAP search (%{msg})."
msgstr "LSldap : Erreur pendant la recherche LDAP (%{msg})."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:527
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:536
msgid "LSldap : Object type unknown."
msgstr "LSldap : Type d'objet inconnu."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:530
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:539
msgid "LSldap : Error while fetching the LDAP entry."
msgstr "LSldap : Erreur durant la récupération de l'entrée LDAP."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:533
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:542
msgid "LSldap : Error while changing the LDAP entry (DN : %{dn})."
msgstr "LSldap : Erreur durant la modification de l'entrée LDAP (DN : %{dn})."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:536
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:545
msgid "LSldap : Error while deleting empty attributes."
msgstr "LSldap : Erreur durant la suppression des attributs vides."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:539
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:548
msgid "LSldap : Error while changing the DN of the object."
msgstr "LSldap : Erreur pendant la modification du DN de l'objet."
@ -1778,14 +1830,6 @@ msgstr "Envoyer un mail depuis l'interface."
msgid "Reset the choice."
msgstr "Réinitialiser le choix."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:60
msgid "Yes"
msgstr "Oui"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:61
msgid "No"
msgstr "Non"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_rss.php:50
msgid "Display RSS stack."
msgstr "Afficher la file RSS."
@ -2370,10 +2414,18 @@ msgstr "Aucun objet importé"
msgid "No value"
msgstr "Aucune valeur"
#: templates/default/showTechInfo.tpl:11
msgid "Object classes"
msgstr "Classes d'objet"
#: templates/default/import.tpl:19
msgid "Only validate data"
msgstr "Validation des données uniquement"
#: templates/default/showTechInfo.tpl:41
msgid "Other internal attributes"
msgstr "Autres attributs techniques"
#: templates/default/login.tpl:20
msgid "Password"
msgstr "Mot de passe"

View file

@ -319,6 +319,13 @@ $GLOBALS['LSlang'] = array (
"Samba primary group identifier" =>
"Identifiant du groupe primaire Samba",
# LSobjects.LSpeople.customActions.showTechInfo.label
# LSobjects.LSgroup.customActions.showTechInfo.label
# LSobjects.LSsysaccount.customActions.showTechInfo.label
# LSobjects.LScompany.customActions.showTechInfo.label
"Show technical information" =>
"Afficher les informations techniques",
# LSobjects.LSpeople.LSform.dataEntryForm.simple.label
"Simple" =>
"Simple",

View file

@ -272,6 +272,58 @@ msgstr ""
msgid "MAILDIR : Error retrieving remote path of the maildir."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:63
#: templates/default/showTechInfo.tpl:16
msgid "Structural object class"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:64
msgid "Creation date"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:65
msgid "Creator DN"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:66
msgid "Last modification date"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:67
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:68
msgid "Last modifier DN"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:69
msgid "LDAP entry change sequence number"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:70
msgid "LDAP entry UUID"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:71
msgid "LDAP entry has children"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:92
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:60
msgid "Yes"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:94
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:61
msgid "No"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:114
msgid "%{name}: Technical information"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.showTechInfo.php:118
msgid "Go back"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/addons/LSaddons.asterisk.php:27
msgid "Asterisk Support : The constant %{const} is not defined."
msgstr ""
@ -1116,31 +1168,31 @@ msgid ""
"(begining by '/' caracter)."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:521
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:530
msgid "LSldap : Error during the LDAP server connection (%{msg})."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:524
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:533
msgid "LSldap : Error during the LDAP search (%{msg})."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:527
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:536
msgid "LSldap : Object type unknown."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:530
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:539
msgid "LSldap : Error while fetching the LDAP entry."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:533
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:542
msgid "LSldap : Error while changing the LDAP entry (DN : %{dn})."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:536
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:545
msgid "LSldap : Error while deleting empty attributes."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:539
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:548
msgid "LSldap : Error while changing the DN of the object."
msgstr ""
@ -1486,14 +1538,6 @@ msgstr ""
msgid "Reset the choice."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:60
msgid "Yes"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:61
msgid "No"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_rss.php:50
msgid "Display RSS stack."
msgstr ""
@ -2027,10 +2071,18 @@ msgstr ""
msgid "No value"
msgstr ""
#: templates/default/showTechInfo.tpl:11
msgid "Object classes"
msgstr ""
#: templates/default/import.tpl:19
msgid "Only validate data"
msgstr ""
#: templates/default/showTechInfo.tpl:41
msgid "Other internal attributes"
msgstr ""
#: templates/default/login.tpl:20
msgid "Password"
msgstr ""

View file

@ -0,0 +1,64 @@
{extends file='ls:base_connected.tpl'}
{block name="content"}
<div id='showTechInfo'>
<h1>{$pagetitle}</h1>
{include file='ls:LSview_actions.tpl'}
<dl>
<dt>DN</dt>
<dd>{$object->getDn()|escape:"htmlall"}</dd>
{if $object_classes}
<dt>{tr msg='Object classes'}</dt>
<dd>
<ul>
{foreach $object_classes as $class}
{if $structural_object_class == $class}
<li><strong>{$class|escape:"htmlall"}</strong> <img class='LStips' src="{img name='help'}" alt='?' title="{tr msg="Structural object class"|escape:"htmlall"}"/></li>
{else}
<li>{$class|escape:"htmlall"}</li>
{/if}
{/foreach}
</ul>
</dd>
{/if}
{foreach $special_internal_attributes as $attr => $info}
<dt>{$info.label} <img class='LStips' src="{img name='help'}" alt='?' title="{$attr|escape:'htmlall'}"/></dt>
<dd>
{if is_array($info.values)}
<ul>
{foreach $info.values as $value}
<li>{$value|escape:"htmlall"}</li>
{/foreach}
</ul>
{else}
{$info.values|escape:"htmlall"}
{/if}
</dd>
{/foreach}
{if $other_internal_attrs}
<dt>{tr msg="Other internal attributes"}</dt>
<dd>
<dl>
{foreach $other_internal_attrs as $attr => $values}
{if $attr == 'objectClass'}{continue}{/if}
<dt>{$attr|escape:"htmlall"}</dt>
<dd>
{if is_array($values)}
<ul>
{foreach $values as $value}
<li>{$value|escape:"htmlall"}</li>
{/foreach}
</ul>
{else}
{$values|escape:"htmlall"}
{/if}
</dd>
{/foreach}
</dl>
</dd>
{/if}
</dl>
</div>
{/block}