Auto declare simple PHP class for simple LSObject type

On LSsession::loadLSobject(), if PHP class file is not found, a simple 
one will be declare.
This commit is contained in:
Benjamin Renard 2020-09-03 16:00:51 +02:00
parent 406b017023
commit bbaa0a99df
4 changed files with 55 additions and 111 deletions

View file

@ -234,21 +234,19 @@ du dossier d'installation, c'est à dire dans notre exemple
<orderedlist> <orderedlist>
<listitem><para>Création du fichier de classe : Ce fichier contient la <listitem><para>Création du fichier de classe <emphasis>(optionel)</emphasis>
déclaration de la classe PHP correspondant au type de LSobject. Cette classe : Ce fichier contient la déclaration de la classe PHP correspondant au type de
étend la classe <emphasis>LSldapObject</emphasis> qui contient pour ainsi dire LSobject. Cette classe étend la classe <emphasis>LSldapObject</emphasis> qui
toute les méthodes et proprités nécessaires pour les types de LSobject simples contient pour ainsi dire toute les méthodes et proprités nécessaires pour les
(sans &LSrelation;). Les fichiers des classes sont contenus dans le dossier types de LSobject simples. Si votre type de LSobject nécessite des méthodes ou
propriétés particulières, vous pouvez implémenter cette classe. À défaut, une
classe vierge d'adaptation sera automatiquement déclarée.</para>
<para>Les fichiers des classes sont contenus dans le dossier
<emphasis>/includes/class/</emphasis> et portent les noms composés de la <emphasis>/includes/class/</emphasis> et portent les noms composés de la
manière suivante : manière suivante :
<programlisting>class.LSobjects.[nom du type d'LSobject].php</programlisting> <programlisting>class.LSobjects.[nom du type d'LSobject].php</programlisting>
Le plus simple pour cette étape est de copier un des fichiers d'exemple afin </para>
de l'adapter en changeant le nom du type d'objet dans l'ensemble du fichier. </listitem>
Pour cela, le fichier de classe du type <emphasis>LSpeople</emphasis> est le
plus simple car il ne contient que le strict minimum. Pour un fichier de classe
ayant des &LSrelations; à gérer, le fichier de classe <emphasis>LSgroup
</emphasis> contient déjà les méthodes nécéssaires pour gérer ces cas.
</para></listitem>
<listitem><simpara>Configurer vos LSobject : Cette partie est certainement la <listitem><simpara>Configurer vos LSobject : Cette partie est certainement la
plus longue et consiste à déclarer l'ensemble des informations relatives aux plus longue et consiste à déclarer l'ensemble des informations relatives aux
@ -261,12 +259,14 @@ du dossier d'installation, c'est à dire dans notre exemple
</listitem> </listitem>
<listitem><simpara>Configurer si nécessaire les relations entre les objets <listitem><simpara>Configurer si nécessaire les relations entre les objets
appelés &LSrelations;. Cette opération consiste dans un premier temps à écrire appelés &LSrelations;. Les relations les plus simples (via un attribut de liaison)
les méthodes PHP nécessaires pour gérer ces relations : pour cela regardez le pourront être implémentées à l'aide d'un simple paramètrage. Pour des relations,
fichier de classe du type <emphasis>LSgroup</emphasis>. Il faudra ensuite plus complexes, il sera possible d'implémenter des méthodes personnalisées pour
déclarer ces relations dans la configuration des types d'LSobjects : Pour plus les gérer. Pour plus de détails, reportez-vous à
de détails, reportez-vous à <link linkend="config-LSobject-LSrelation">la <link linkend="config-LSobject-LSrelation">la section concernée</link>.</simpara>
section concernée</link>.</simpara> <note><simpara>Pour avoir un exemple de fichier de classe PHP implémentant des
methodes de gestion de &LSrelations; complexes, vous pouvez consulter le fichier
de classe <emphasis>LSgroup</emphasis>.</simpara></note>
</listitem> </listitem>
</orderedlist> </orderedlist>

View file

@ -1,30 +0,0 @@
<?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.
******************************************************************************/
/**
* Objet Ldap company
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LScompany extends LSldapObject {
// ~
}

View file

@ -1,30 +0,0 @@
<?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.
******************************************************************************/
/**
* Objet Ldap people
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSpeople extends LSldapObject {
// ~
}

View file

@ -445,48 +445,52 @@ class LSsession {
if(class_exists($object)) { if(class_exists($object)) {
return true; return true;
} }
$error = 0; $error = false;
self :: loadLSclass('LSldapObject'); // Load LSldapObject class
if (!self :: loadLSclass('LSldapObject')) {
self :: log_error("loadLSobject($object): fail to load LSldapObject class");
$error = true;
}
// Check LSobject type name // Check LSobject type name
if (!LSldapObject :: isValidTypeName($object)) { elseif (!LSldapObject :: isValidTypeName($object)) {
self :: log_error("loadLSobject($object): invalid LSobject type name"); self :: log_error("loadLSobject($object): invalid LSobject type name");
$error = 1; $error = true;
} }
elseif (!self :: loadLSclass($object,'LSobjects')) { // Load config file
self :: log_error("loadLSobject($object): Fail to load LSldapObject class"); elseif (!self :: includeFile( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' ) || !isset($GLOBALS['LSobjects'][$object])) {
$error = 1;
}
elseif (!self :: includeFile( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' )) {
self :: log_error("loadLSobject($object): Fail to include 'config.LSobjects.$object.php' file"); self :: log_error("loadLSobject($object): Fail to include 'config.LSobjects.$object.php' file");
$error = 1; $error = true;
} }
else { // Check config file
if (!LSconfig :: set("LSobjects.$object",$GLOBALS['LSobjects'][$object])) { elseif (!isset($GLOBALS['LSobjects'][$object]) || !is_array($GLOBALS['LSobjects'][$object])) {
self :: log_error("loadLSobject($object): \$GLOBALS['LSobjects'][$object] is not declared after loaded config file (or is not an array).");
$error = true;
}
// Set LSobject type configuration
elseif (!LSconfig :: set("LSobjects.$object", $GLOBALS['LSobjects'][$object])) {
self :: log_error("loadLSobject($object): Fail to LSconfig :: set('LSobjects.$object', \$GLOBALS['LSobjects'][$object])"); self :: log_error("loadLSobject($object): Fail to LSconfig :: set('LSobjects.$object', \$GLOBALS['LSobjects'][$object])");
$error = 1; $error = true;
} }
else if (isset($GLOBALS['LSobjects'][$object]['LSaddons'])){ // Load LSaddons used by this LSobject type (if configured)
if (is_array($GLOBALS['LSobjects'][$object]['LSaddons'])) { else if (isset($GLOBALS['LSobjects'][$object]['LSaddons'])) {
if (!is_array($GLOBALS['LSobjects'][$object]['LSaddons']))
$GLOBALS['LSobjects'][$object]['LSaddons'] = array($GLOBALS['LSobjects'][$object]['LSaddons']);
foreach ($GLOBALS['LSobjects'][$object]['LSaddons'] as $addon) { foreach ($GLOBALS['LSobjects'][$object]['LSaddons'] as $addon) {
if (!self :: loadLSaddon($addon)) { if (!self :: loadLSaddon($addon)) {
self :: log_error("loadLSobject($object): Fail to load LSaddon '$addon'"); self :: log_error("loadLSobject($object): Fail to load LSaddon '$addon'");
$error = 1; $error = true;
} }
} }
} }
else { // Load or declare corresponding PHP class (if no previous error occured)
if (!self :: loadLSaddon($GLOBALS['LSobjects'][$object]['LSaddons'])) { if (!$error && !self :: loadLSclass($object, 'LSobjects')) {
self :: log_error("loadLSobject($object): Fail to load LSaddon '".$GLOBALS['LSobjects'][$object]['LSaddons']."'"); self :: log_debug("loadLSobject($object): Fail to load $object class. Implement simple one.");
$error = 1; eval("class $object extends LSldapObject {};");
} }
} // Warn on error (is enabled)
} if ($error && $warn)
} LSerror :: addErrorCode('LSsession_04', $object);
if ($error && $warn) { return !$error;
LSerror :: addErrorCode('LSsession_04',$object);
return;
}
return true;
} }
/** /**