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>
<listitem><para>Création du fichier de classe : Ce fichier contient la
déclaration de la classe PHP correspondant au type de LSobject. Cette classe
étend la classe <emphasis>LSldapObject</emphasis> qui contient pour ainsi dire
toute les méthodes et proprités nécessaires pour les types de LSobject simples
(sans &LSrelation;). Les fichiers des classes sont contenus dans le dossier
<listitem><para>Création du fichier de classe <emphasis>(optionel)</emphasis>
: Ce fichier contient la déclaration de la classe PHP correspondant au type de
LSobject. Cette classe étend la classe <emphasis>LSldapObject</emphasis> qui
contient pour ainsi dire toute les méthodes et proprités nécessaires pour les
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
manière suivante :
<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
de l'adapter en changeant le nom du type d'objet dans l'ensemble du fichier.
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>
</para>
</listitem>
<listitem><simpara>Configurer vos LSobject : Cette partie est certainement la
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><simpara>Configurer si nécessaire les relations entre les objets
appelés &LSrelations;. Cette opération consiste dans un premier temps à écrire
les méthodes PHP nécessaires pour gérer ces relations : pour cela regardez le
fichier de classe du type <emphasis>LSgroup</emphasis>. Il faudra ensuite
déclarer ces relations dans la configuration des types d'LSobjects : Pour plus
de détails, reportez-vous à <link linkend="config-LSobject-LSrelation">la
section concernée</link>.</simpara>
appelés &LSrelations;. Les relations les plus simples (via un attribut de liaison)
pourront être implémentées à l'aide d'un simple paramètrage. Pour des relations,
plus complexes, il sera possible d'implémenter des méthodes personnalisées pour
les gérer. Pour plus de détails, reportez-vous à
<link linkend="config-LSobject-LSrelation">la 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>
</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)) {
return true;
}
$error = 0;
self :: loadLSclass('LSldapObject');
$error = false;
// Load LSldapObject class
if (!self :: loadLSclass('LSldapObject')) {
self :: log_error("loadLSobject($object): fail to load LSldapObject class");
$error = true;
}
// Check LSobject type name
if (!LSldapObject :: isValidTypeName($object)) {
elseif (!LSldapObject :: isValidTypeName($object)) {
self :: log_error("loadLSobject($object): invalid LSobject type name");
$error = 1;
$error = true;
}
elseif (!self :: loadLSclass($object,'LSobjects')) {
self :: log_error("loadLSobject($object): Fail to load LSldapObject class");
$error = 1;
}
elseif (!self :: includeFile( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' )) {
// Load config file
elseif (!self :: includeFile( LS_OBJECTS_DIR . 'config.LSobjects.'.$object.'.php' ) || !isset($GLOBALS['LSobjects'][$object])) {
self :: log_error("loadLSobject($object): Fail to include 'config.LSobjects.$object.php' file");
$error = 1;
$error = true;
}
else {
if (!LSconfig :: set("LSobjects.$object",$GLOBALS['LSobjects'][$object])) {
self :: log_error("loadLSobject($object): Fail to LSconfig :: set('LSobjects.$object', \$GLOBALS['LSobjects'][$object])");
$error = 1;
}
else if (isset($GLOBALS['LSobjects'][$object]['LSaddons'])){
if (is_array($GLOBALS['LSobjects'][$object]['LSaddons'])) {
foreach ($GLOBALS['LSobjects'][$object]['LSaddons'] as $addon) {
if (!self :: loadLSaddon($addon)) {
self :: log_error("loadLSobject($object): Fail to load LSaddon '$addon'");
$error = 1;
}
}
}
else {
if (!self :: loadLSaddon($GLOBALS['LSobjects'][$object]['LSaddons'])) {
self :: log_error("loadLSobject($object): Fail to load LSaddon '".$GLOBALS['LSobjects'][$object]['LSaddons']."'");
$error = 1;
}
// Check config file
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])");
$error = true;
}
// Load LSaddons used by this LSobject type (if configured)
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) {
if (!self :: loadLSaddon($addon)) {
self :: log_error("loadLSobject($object): Fail to load LSaddon '$addon'");
$error = true;
}
}
}
if ($error && $warn) {
LSerror :: addErrorCode('LSsession_04',$object);
return;
// Load or declare corresponding PHP class (if no previous error occured)
if (!$error && !self :: loadLSclass($object, 'LSobjects')) {
self :: log_debug("loadLSobject($object): Fail to load $object class. Implement simple one.");
eval("class $object extends LSldapObject {};");
}
return true;
// Warn on error (is enabled)
if ($error && $warn)
LSerror :: addErrorCode('LSsession_04', $object);
return !$error;
}
/**