From 99899f57224fbe656c0db274a6c4e42f1881763a Mon Sep 17 00:00:00 2001 From: "tristan.champomier" Date: Mon, 19 Apr 2021 16:17:43 +0200 Subject: [PATCH] Added system_data nodesettings class --- config/config.data_acces.php.install | 7 + .../db_scripts/mysql/7_create_structure.sql | 16 + lib/system/dependancy.php | 2 + lib/system/system_control/systemcontrol.php | 5 +- .../system_data/nodesettings/nodesettings.php | 385 ++++++++++++++++ .../nodesettings/nodesettingsmanager.php | 423 ++++++++++++++++++ .../nodesettingsmanagerfactory.php | 99 ++++ .../ressource/nodesettingsmanagerdb.php | 365 +++++++++++++++ 8 files changed, 1301 insertions(+), 1 deletion(-) create mode 100755 lib/system/system_data/nodesettings/nodesettings.php create mode 100755 lib/system/system_data/nodesettings/nodesettingsmanager.php create mode 100755 lib/system/system_data/nodesettings/nodesettingsmanagerfactory.php create mode 100755 lib/system/system_data/nodesettings/ressource/nodesettingsmanagerdb.php diff --git a/config/config.data_acces.php.install b/config/config.data_acces.php.install index 424d3ef..8db61e8 100755 --- a/config/config.data_acces.php.install +++ b/config/config.data_acces.php.install @@ -93,6 +93,13 @@ define ('DATA_ACCES_TABLE_LANGUAGE', DATA_ACCES_TABLE_PREFIX ."langue"); define ('DATA_ACCES_MANAGER_NODE', "db"); define ('DATA_ACCES_TABLE_NODE', DATA_ACCES_TABLE_PREFIX ."node"); +########################################################################################## +# Configuration des paramètres des noeuds +########################################################################################## +/* Défini la ressource utilisée par la classe NodeSettings */ +define ('DATA_ACCES_MANAGER_NODE', "db"); +define ('DATA_ACCES_TABLE_NODESETTINGS', DATA_ACCES_TABLE_PREFIX ."nodesettings"); + ########################################################################################## # Configuration des USER ########################################################################################## diff --git a/install/db_scripts/mysql/7_create_structure.sql b/install/db_scripts/mysql/7_create_structure.sql index a929a4c..2cb5f04 100755 --- a/install/db_scripts/mysql/7_create_structure.sql +++ b/install/db_scripts/mysql/7_create_structure.sql @@ -263,6 +263,22 @@ CREATE TABLE `{_PREFIX_}node` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8; #-- -------------------------------------------------------- #-- +#-- Structure de la table `nodesettings` +#-- + +CREATE TABLE `{_PREFIX_}nodesettings` ( + `node_id` int(4) NOT NULL, + `node_email` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL, + `node_mastodon` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_mobilizon` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_matrix` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_peertube` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_nextcloud` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_twitter` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `node_facebook` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +#-- -------------------------------------------------------- +#-- #-- Structure de la table `node_group_user` #-- CREATE TABLE `{_PREFIX_}node_group_user` ( diff --git a/lib/system/dependancy.php b/lib/system/dependancy.php index 454b895..9f79cbf 100755 --- a/lib/system/dependancy.php +++ b/lib/system/dependancy.php @@ -110,6 +110,8 @@ include($CONF_LIB_PATH."lib/system/system_data/userpreference/userpreferencemana include($CONF_LIB_PATH."lib/system/system_data/group/groupmanagerfactory.php"); /* Ce fichier contient la classe Node */ include($CONF_LIB_PATH."lib/system/system_data/node/nodemanagerfactory.php"); +/* Ce fichier contient la classe NodeSettings */ +include($CONF_LIB_PATH."lib/system/system_data/nodesettings/nodesettingsmanagerfactory.php"); /* Classe GroupUser (Liaison entre un groupe et un utilisateur) */ include($CONF_LIB_PATH."lib/system/system_data/right/rightmanagerfactory.php"); /* Classe GroupUser (Liaison entre un groupe et un utilisateur) */ diff --git a/lib/system/system_control/systemcontrol.php b/lib/system/system_control/systemcontrol.php index 4e64c76..520d76c 100755 --- a/lib/system/system_control/systemcontrol.php +++ b/lib/system/system_control/systemcontrol.php @@ -976,9 +976,12 @@ var $currentCoordinationObject=null; /* Creation du Manager groupe */ $GLOBALS["SYSTEM_MANAGER"]["GROUP"]=GroupManagerFactory::createInstance( DATA_ACCES_MANAGER_GROUP ); - /* Creation du Manager Noeud */ + /* Creation du Manager Node */ $GLOBALS["SYSTEM_MANAGER"]["NODE"]=NodeManagerFactory::createInstance( DATA_ACCES_MANAGER_NODE ); + /* Creation du Manager NodSettings */ + $GLOBALS["SYSTEM_MANAGER"]["NODESETTINGS"]=NodeSettingsManagerFactory::createInstance( DATA_ACCES_MANAGER_NODESETTINGS ); + /* Creation du Manager Langue */ $GLOBALS["SYSTEM_MANAGER"]["LANGUAGE"]=LanguageManagerFactory::createInstance( DATA_ACCES_MANAGER_LANGUAGE ); diff --git a/lib/system/system_data/nodesettings/nodesettings.php b/lib/system/system_data/nodesettings/nodesettings.php new file mode 100755 index 0000000..bffc128 --- /dev/null +++ b/lib/system/system_data/nodesettings/nodesettings.php @@ -0,0 +1,385 @@ + +* +* +* This software is protected by copyright, please +* read the file COPYRIGHT. +* 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. Please +* read the file LICENCE. +* +* Fichier NodeSettings.php +* +*Ce fichier contient la classe NodeSettings +* +* @author Rooty +* @link www.rooty.me +* @since 2021/04/19 +* @version 0.1 +* @package system_data +* @subpackage NodeSettings +* @copyright Copyright © 2021, Rooty +*/ + +##################################################################################################### +################################# Parametrage +##################################################################################################### +/** +* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas... +* cette variable est déclarée sur la page d'execution du script. +*

if ( !defined('SYSTEM_IN') ) +* { +* die("Hacking attempt"); +* }

+*/ +if ( !defined('SYSTEM_IN') ) +{ + die("Hacking attempt"); +} + +/** +* Classe NodeSettings +* +*

Classe de gestion des Noeuds de l'arborescence

+* +* @package system_data +* @subpackage NodeSettings +*/ +class NodeSettings +{ + +/**#@+ +* @access private +*/ + +/** +* @var entier +* @desc contient l'id numerique du Noeud +*/ +var $id = null; + +/** +* @var chaine +* @desc chaine email +*/ +var $email = null; + +/** +* @var chaine +* @desc chaine mastodon +*/ +var $mastodon= null; + +/** +* @var chaine +* @desc chaine mobilizon +*/ +var $mobilizon= null; + +/** +* @var chaine +* @desc chaine matrix +*/ +var $matrix= null; + +/** +* @var chaine +* @desc chaine peertube +*/ +var $peertube= null; + +/** +* @var chaine +* @desc chaine nextcloud +*/ +var $nextcloud= null; + +/** +* @var chaine +* @desc chaine twitter +*/ +var $twitter= null; + +/** +* @var chaine +* @desc chaine facebook +*/ +var $facebook= null; + +/**#@-*/ + +/** +* Constructeur de la classe NodeSettings PHP5 +*

Initialise la classe NodeSettings

+* @access public +*/ + function __construct() + { + $this->id =null; + } + +/** +* "getteur" de l'attribut Id. +* @access public +* @return entier Id du Noeud +*/ + function getId() + { + return $this->id; + } + +/** +* "setteur" de l'attribut Id. +* @access public +* @param entier Id du Noeud +* @return booleen +*/ + function setId($id) + { + if (!is_numeric($id)) + return false; + + $this->id=$id; + return true; + } + +/** +* "getteur" de l'attribut email +* @access public +* @return chaine email +*/ + function getEmail() + { + return $this->email; + } + +/** +* "setteur" de l'attribut email +* @access public +* @param chaine email +* @return booleen +*/ + function setEmail($email) + { + if (!is_string($email)) + return false; + + $this->email=$email; + return true; + } + +/** +* "getteur" de l'attribut Mastodon. +* @access public +* @return chaine Mastodon +*/ + function getMastodon() + { + return $this->mastodon; + } + +/** +* "setteur" de l'attribut Mastodon. +* @access public +* @param entier mastodon +* @return booleen +*/ + function setMastodon($mastodon) + { + if (!is_string($mastodon)) + return false; + + $this->mastodon=$mastodon; + return true; + } + +/** +* "getteur" de l'attribut Mobolizon. +* @access public +* @return chaine Mobilizon +*/ + function getMobilizon() + { + return $this->mobilizon; + } + +/** +* "setteur" de l'attribut Mobilizon. +* @access public +* @param chaine mobilizon +* @return booleen +*/ + function setMobilizon($mobilizon) + { + if (!is_string($mobilizon)) + return false; + + $this->mobilizon=$mobilizon; + return true; + } + +/** +* "getteur" de l'attribut matrix. +* @access public +* @param chaine matrix +* @return chaine matrix +*/ + function getMatrix() + { + return $this->matrix; + } + +/** +* "setteur" de l'attribut matrix. +* @access public +* @param chaine matrix +* @return booleen +*/ + function setMatrix($matrix) + { + if (!is_string($mobilizon)) + return false; + + $this->matrix=$matrix; + return true; + } + +/** +* "getteur" de l'attribut peertube. +* @access public +* @return chaine peertube +*/ + function getPeertube() + { + return $this->peertube; + } + +/** +* "setteur" de l'attribut peertube. +* @access public +* @param chaine peertube +* @return booleen +*/ + function setPeertube($peertube) + { + if (!is_string($peertube)) + return false; + + $this->peertube=$peertube; + return true; + } + +/** +* "getteur" de l'attribut nextcloud. +* @access public +* @return chaine nextcloud +*/ + function getNextcloud() + { + return $this->nextcloud; + } + +/** +* "setteur" de l'attribut nextcloud. +* @access public +* @param chaine nextcloud +* @return booleen +*/ + function setNextcloud($nextcloud) + { + if (!is_string($nextcloud)) + return false; + + $this->nextcloud=$nextcloud; + return true; + } + +/** +* "getteur" de l'attribut twitter. +* @access public +* @return chaine twitter +*/ + function getTwitter() + { + return $this->twitter; + } + +/** +* "setteur" de l'attribut twitter. +* @access public +* @param chaine twitter +* @return booleen +*/ + function setTwitter($twitter) + { + if (!is_string($twitter)) + return false; + + $this->twitter=$twitter; + return true; + } + +/** +* "getteur" de l'attribut facebook. +* @access public +* @return chaine facebook +*/ + function getFacebook() + { + return $this->facebook; + } + +/** +* "setteur" de l'attribut facebook. +* @access public +* @param chaine facebook +* @return booleen +*/ + function setFacebook($facebook) + { + if (!is_string($facebook)) + return false; + + $this->facebook=$facebook; + return true; + } + +/** +* doload : load de l'objet de l'objet NodeSettings. +* +* @access public +* @param entier identifiant numérique du Node +* @param chaine libelle du NodeSettings +*/ + function doLoad($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + $this->setId($id); + $this->setEmail($email); + $this->setMastodon($mastodon); + $this->setMobilizon($mobilizon); + $this->setMatrix($matrix); + $this->setPeertube($peertube); + $this->setNextcloud($nextcloud); + $this->setTwitter($twitter); + $this->setFacebook($facebook); + return true; + } + +/** +* isLoaded: Verifie que l'ID est affecté +* +*

après un load depuis la base, l'id de l'objet est affecté, cette fonction le verifie

+* @access public +* @return booleen +*/ + function isLoaded() + { + return (is_numeric($this->id) && ($this->id != 0) ) ?true:false; + } +} +?> diff --git a/lib/system/system_data/nodesettings/nodesettingsmanager.php b/lib/system/system_data/nodesettings/nodesettingsmanager.php new file mode 100755 index 0000000..71d0f08 --- /dev/null +++ b/lib/system/system_data/nodesettings/nodesettingsmanager.php @@ -0,0 +1,423 @@ + +* +* +* This software is protected by copyright, please +* read the file COPYRIGHT. +* 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. Please +* read the file LICENCE. +* +* Fichier NodeSettingsManager.php +* +* Ce fichier contient la classe NodeSettingsManager +* +* @author Rooty +* @link www.rooty.me +* @since 2021/04/19 +* @version 0.1 +* @package system_data +* @subpackage NodeSettings +* @copyright Copyright © 2021, Rooty +*/ + +##################################################################################################### +################################# Parametrage +##################################################################################################### + +/** +* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas... +* cette variable est déclarée sur la page d'execution du script. +*

if ( !defined('SYSTEM_IN') ) +* { +* die("Hacking attempt"); +* }

+*/ +if ( !defined('SYSTEM_IN') ) +{ + die("Hacking attempt"); +} + + +/** +* Appel à la classe Node... +*/ +require ($CONF_LIB_PATH."lib/system/system_data/nodesettings/nodesettings.php"); + +/** +* Classe NodeSettingsManager +* +*

Classe de gestion des instances de Nodes
+* (permet de fabriquer, detruire, mettre à jour des objet Nodes)
+* Cette classe se sert des ressources à sa disposition (dans ./ressource)
+* Les Classes de ressource doivent avoir toutes les methodes correspondantes
+* aux methodes de la classe intitulés sourceXXX

+* +*

Est configuré dans data_acces.php :
+* - La Source d'information (Db)
+* l'objet ressource se sert lui-même des classes d'accés aux données(lib/data_source/...)
+*

+* @package system_data +* @subpackage NodeSettings +*/ +class NodeSettingsManager extends Manager +{ + + // + // Constructor + // +/** +* Constructeur de la classe NodeSettingsManager PHP5 +* +* @access public +*/ + function __construct() + { + } + + +########################################################################### +#### Méthodes abstraites +########################################################################### + +/** +* doLoadFromId : charge les paramètres du Noeud +* +*

Chargement depuis la source de données

+*

Cette méthode a pour but d'être surchargée et de gérer les accés aux données

+* @param entier identifiant de du noeud +* @access public +* @abstract +* @return tableau tableau des éléments de paramètres d'un Noeud +*/ + function doLoadFromId($id) + { + return array(); + } + +/** +* doUpdate : Update des paramètres du Noeud +* +*

Insertion dans la source de données

+*

Cette méthode a pour but d'être surchargée et de gérer les accés aux données

+* @param entier identifiant du Noeud père +* @param chaine libelle du Noeud +* @param chaine icone du Noeud +* @access public +* @abstract +* @return entier +*/ + function doUpdate($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + return 0; /* entier */ + } + +/** +* doInsert : Insert des paramètres du Noeud +* +*

Insertion dans la source de données

+*

Cette méthode a pour but d'être surchargée et de gérer les accés aux données

+* @param entier identifiant du Noeud père +* @param chaine libelle du Noeud +* @param chaine icone du Noeud +* @access public +* @abstract +* @return entier +*/ + function doInsert($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + return true; + } + +/** +* doDelete : Detruit les paramètres du Noeud +* +*

Suppression de l'objet à partir de son identifiant et dans la source de données

+*

Cette méthode a pour but d'être surchargée et de gérer les accés aux données

+* @param entier identifiant de du noeud +* @access public +* @abstract +* @return booleen +*/ + function doDelete($id) + { + return true; + } + +########################################################################### +#### Methodes privee +########################################################################### + +/** +* sourceLoadFromId: charge à partir d'un identifiant +* +*

Permet le récupération des infos d'un objet Node à partir de son identifiant

+*

Cette méthode gére le formatage des données avant leur passage à la source de données (methode doXXX equivalente)

+*

Retourne un tableau contenant les infos de l'objet
+*
ou faux si n'existe pas

+* @param identifiant du Noeud +* @access private +* @return tableau +*/ + function sourceLoadFromId($id) + { + $tab=$this->doLoadFromId($id); + # Gestion d'un tableau intermediaire avec la reprise des elements + if (!is_array($tab)) + { + /* Erreur */ + $systemError=1; + $classe="Node"; + $message="Erreur dans NodeSettingsManager"; + addError($systemError,$classe,$message, __line__, __file__); + return array(); + }else{ + if (!Is_numeric($tab["id"])) + { + /* Erreur */ + $systemError=1; + $classe="Node"; + $message="Erreur dans NodeSettingsManager"; + addError($systemError,$classe,$message, __line__, __file__); + return array(); + }else{ + return $tab; + } + } + } + +/** +* sourceInsert: Insert le Noeud +* +*

Insertion de l'objet Noeud dans la source de données
+* indifférement du type de cette source

+*

Cette méthode gére le formatage des données avant leur passage à la source de données (methode doXXX equivalente)

+*

Retourne L'identifiant de l'objet inséré

+* @param entier identifiant du Noeud père +* @param chaine libelle du Noeud +* @param chaine icone du Noeud +* @access private +* @return entier +*/ + function sourceInsert($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + # Gestion d'un tableau intermediaire avec la reprise des elements + if (!is_numeric($id)) + { + /* Erreur */ + $systemError=1; + $classe="Node"; + $message="Erreur dans NodeSettingsManager"; + addError($systemError,$classe,$message, __line__, __file__); + return false; + } + return $this->doInsert($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook); + } + +/** +* sourceUpdate: Met à jour le Noeud +* +*

Mise à jour de l'objet indifferemment de la source de données

+*

Cette méthode gére le formatage des données avant leur passage à la source de données (methode doXXX equivalente)

+* @param entier identifiant du Noeud père +* @param chaine libelle du Noeud +* @param chaine icone du Noeud +* @access private +* @return booleen +*/ + function sourceUpdate($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + # Gestion d'un tableau intermediaire avec la reprise des elements + if (!Is_numeric($id)) + { + /* Erreur */ + $systemError=1; + $classe="Node"; + $message="Erreur dans NodeSettingsManager"; + addError($systemError,$classe,$message, __line__, __file__); + return false; + } + + return $this->doUpdate($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook); + } + +/** +* sourceDelete: Detruit le Noeud +* +*

Suppression de l'objet à partir de son identifiant

+*

Cette méthode gére le formatage des données avant leur passage à la source de données (methode doXXX equivalente)

+* @param entier identifiant de du noeud +* @access private +* @return booleen +*/ + function sourceDelete($id) + { + return $this->doDelete($id); + } + +########################################################################### +#### Methodes public +########################################################################### + +/** +* createNewInstance : créer un objet vierge +* +* @access public +* @return objet +*/ + function createNewInstance() + { + return new NodeSettings(); + } +/** +* createInstance : récupere l'objet avec l'identifiant $id +* +* @param entier identifiant de l'association Node +* @access public +* @return object retourne un objet de type Node +*/ + function createInstance($id) + { + $return = new NodeSettings(); + if (is_numeric($id)) + { + /* Récupération des infos */ + $tab=$this->sourceLoadFromId($id); + if (is_array($tab) && isset($tab["id"]) && is_numeric($tab["id"])) + { + /* création et alimentation de l'objet */ + $return->doLoad($tab["id"], $tab["email"], $tab["mastodon"], $tab["mobilizon"], $tab["matrix"], $tab["peertube"], $tab["nextcloud"], $tab["twitter"], $tab["facebook"]); + }else{ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur id inexistant ".$id; + addError($systemError, $classe, $message, __line__, __file__); + } + }else{ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur id invalide ".$id; + addError($systemError, $classe, $message, __line__, __file__); + } + return $return; + } + +/** +* deleteInstance : detruit l'objet physique +* +* @param object objet Node à effacer +* @access public +* @return object objetNode mis à jour +*/ + function deleteInstance($obj) + { + $return = false; + if ( strtolower(get_class($obj))=="nodesettings" ) + { + if($obj->isLoaded()==true) + { + /* Récupération des infos */ + $this->CallSystemPlugin("__deleteNodeSettings", $obj); + $return=$this->sourceDelete($obj->getId()); + $obj->setId(0); + return $obj; + } + } + /* Erreur */ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur objet invalide "; + addError($systemError, $classe, $message, __line__, __file__); + + return $obj; + } + +/** +* updateInstance : met à jour l'objet +* +* @param object objet Node à modifier +* @access public +* @return object objetNode mis à jour +*/ + function updateInstance($obj) + { + $return = false; + if ((strtolower(get_class($obj))=="nodesettings") && ($obj->isLoaded()==true)) + { + /* Récupération des infos */ + $id=$this->sourceUpdate($obj->getId(), $obj->getEmail(), $obj->getMastodon(), $obj->Mobilizon(), $obj->getMatrix(), $obj->getPeertube(), $obj->getNextcloud(), $obj->getTwitter(), $obj->getFacebook()); + $this->CallSystemPlugin("__updateNodeSettings", $obj); + return $obj; + } + /* Erreur */ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur objet invalide "; + addError($systemError, $classe, $message, __line__, __file__); + + return $obj; + } +/** +* insertInstance : créer enregistre l'objet +* +*

affecte l'id de l'objet si nécessaire

+* @param object objet Node à inserer +* @access public +* @return object objetNode mis à jour +*/ + function insertInstance($obj) + { + if ((strtolower(get_class($obj))==strtolower("NodeSettings"))) + { + if ($obj->isLoaded()==false) + { + /* Récupération des infos */ + $id=$this->sourceInsert($obj->getEmail(), $obj->getMastodon(), $obj->Mobilizon(), $obj->getMatrix(), $obj->getPeertube(), $obj->getNextcloud(), $obj->getTwitter(), $obj->getFacebook()); + $obj->setId($id); + $this->CallSystemPlugin("__insertNodeSettings", $obj); + return $obj; + } + } + /* Erreur */ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur objet invalide "; + addError($systemError, $classe, $message, __line__, __file__); + + return $obj; + } +/** +* saveInstance : créer enregistre l'objet +* +* @param object objet Node à sauvegarder +* @access public +* @return object objetNode mis à jour +*/ + function saveInstance($obj) + { + if ((strtolower(get_class($obj))==strtolower("NodeSettings"))) + { + if ($obj->isLoaded()==false) + { + $return=$this->insertInstance($obj); + }else{ + $return=$this->updateInstance($obj); + } + return $return; + } + + /* Erreur */ + $systemError=3; + $classe="NodeSettingsManager"; + $message="Erreur objet invalide "; + addError($systemError, $classe, $message, __line__, __file__); + $return=$obj; + + return $return; + } +} +?> diff --git a/lib/system/system_data/nodesettings/nodesettingsmanagerfactory.php b/lib/system/system_data/nodesettings/nodesettingsmanagerfactory.php new file mode 100755 index 0000000..ac4e5c0 --- /dev/null +++ b/lib/system/system_data/nodesettings/nodesettingsmanagerfactory.php @@ -0,0 +1,99 @@ + +* +* +* This software is protected by copyright, please +* read the file COPYRIGHT. +* 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. Please +* read the file LICENCE. +* +* Fichier NodeSettingsManagerFactory.php +* +*Ce fichier contient la classe NodeSettingsManagerFactory +* +* @author Rooty +* @link www.rooty.me +* @since 2021/04/19 +* @version 0.1 +* @package system_data +* @subpackage Node +* @copyright Copyright © 2021, Rooty +*/ + +##################################################################################################### +################################# Parametrage +##################################################################################################### +/** +* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas... +* cette variable est déclarée sur la page d'execution du script. +*

if ( !defined('SYSTEM_IN') ) +* { +* die("Hacking attempt"); +* }

+*/ +if ( !defined('SYSTEM_IN') ) +{ + die("Hacking attempt"); +} + +/** +* Appel à la classe Node... +*/ +require ($CONF_LIB_PATH."lib/system/system_data/nodesettings/nodesettingsmanager.php"); + +/** +* Classe NodeSettingsManagerFactory +* +*

Permet la creation du bon Manager

+* @package system_data +* @subpackage NodeSettings +*/ +class NodeSettingsManagerFactory extends Factory +{ +/** +* createInstance : créer l'instance du gestionnaire de Noeud et renvoi celle-ci +* +* @param chaine type de ressource... +* @access public +* @return object +*/ + function createInstance($type) + { + global $CONF_LIB_PATH; + if (NodeSettingsManagerFactory::isValidType($type)) + { + /* inclusion de la lib corresspondante (utilisation du include_once pour que celle-ci ne soit chargé qu'une seule fois) */ + include_once($CONF_LIB_PATH."lib/system/system_data/nodesettings/ressource/nodesettingsmanager".$type.".php"); + $className="NodeSettingsManager".$type; + $Tmp= new $className(); + return $Tmp; + }else{ + /* Erreur */ + $systemError=1; + $classe="NodeSettingsManager"; + $message="Erreur objet invalide "; + addError($systemError, $classe, $message, __line__, __file__); + return false; + } + } + +/** +* isValidType : test si le type est valide ou non +* +* @param chaine type de ressource... +* @access private +* @return object +*/ + function isValidType($type) + { + global $CONF_LIB_PATH; + return (file_exists($CONF_LIB_PATH."lib/system/system_data/nodesettings/ressource/nodesettingsmanager".$type.".php"))? true:false; + } +} +?> diff --git a/lib/system/system_data/nodesettings/ressource/nodesettingsmanagerdb.php b/lib/system/system_data/nodesettings/ressource/nodesettingsmanagerdb.php new file mode 100755 index 0000000..d2f44f0 --- /dev/null +++ b/lib/system/system_data/nodesettings/ressource/nodesettingsmanagerdb.php @@ -0,0 +1,365 @@ + +* +* +* This software is protected by copyright, please +* read the file COPYRIGHT. +* 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. Please +* read the file LICENCE. +* +* Fichier NodeSettingsManagerDb.php +* +* Ce fichier contient la classe NodeSettingsManagerDb +* +* @author Rooty +* @link www.rooty.me +* @since 2021/04/19 +* @version 0.1 +* @package system_data +* @subpackage NodeSettings +* @copyright Copyright © 2021, Rooty +*/ + +##################################################################################################### +################################# Parametrage +##################################################################################################### +/** +* declaration du system... si cette variable n'est pas définie, les fichier inclus ne marche pas... +* cette variable est déclarée sur la page d'execution du script. +*

if ( !defined('SYSTEM_IN') ) +* { +* die("Hacking attempt"); +* }

+*/ +if ( !defined('SYSTEM_IN') ) +{ + die("Hacking attempt"); +} + +/** +* Classe NodeSettingsManagerDb +* +* classe de gestion des Nodes pour une do de données database (type gérés par database)

+* Sont configuré dans config_data_acces.php:
+* - La do d'information
+* (actuellement seul DB possible->Pour ajouter une do reproduire NodeNodeSettingsManagerDb)
+* - Le Nom de la Table
+* - La configuration (Paramétrage des dos de do de données) est faite dans config_data_do.php
+* - La declaration de la connexion est faite à partir de config_system.php +* +* @package system_data +* @subpackage NodeSettings +*/ +class NodeSettingsManagerDb extends NodeManager +{ + +/** +* @var chaine +* @access private +* @desc ID de la Node +*/ +var $table = ""; + +/** +* @var object +* @access private +* @desc objet database +*/ +var $conn = null; + + // + // Constructor + // + +/** +* Constructeur de la classe NodeSettingsManagerDb PHP4 +* +*

Initialise la NodeSettingsManagerDb

+* @access public +*/ + function NodeSettingsManagerDb() + { + $this->__construct(); + } + +/** +* Constructeur de la classe NodeSettingsManagerDb PHP5 +* +*

Initialise la NodeSettingsManagerDb

+* @access public +*/ + function __construct() + { + $this->setTable( DATA_ACCES_TABLE_NODESETTINGS ); /* Appel à la constant correspondant */ + $this->initSqlAttribut(); /* initialisation des noms de champs */ + $this->setConn($GLOBALS['SYSTEM_DATABASE_CONN']); + } + +/** +* getTable : recupere le nom de la table utilisée +* @access public +* @return chaine +*/ + function getTable() + { + return $this->table; + } + +/** +* setTable : recupere le nom de la table utilisée +* @access public +* @param chaine nom de la table +* @return chaine +*/ + function setTable($chaine) + { + if (!is_string($chaine)) + return false; + + $this->table=$chaine; + return true; + } + +/** +* getTable : recupere le nom de la table utilisée +* @access public +* @return chaine +*/ + function getConn() + { + return $this->conn; + } + +/** +* setTable : recupere le nom de la table utilisée +* @access public +* @param object objet classe "database" +* @return chaine +*/ + function setConn(&$obj) + { + if (!is_object($obj)) + return false; + + $this->conn=&$obj; + return true; + } + +/** +* doLoadFromId: Charge le Noeud depuis la BD +* +*

Retourne un tableau contenant les infos de l'objet

+* @access private +* @param entier identifiant du Noeud +* @return tableau +*/ + function doLoadFromId($id) + { + $sql = "SELECT * FROM ".$this->getTable()." WHERE ".$this->getSqlName("id")."=".$id; +// $sql.= " AND ".$this->getSqlName("domain")."=".$_SERVER["SERVER_NAME"]; + + # Requete + $result=$this->conn->sql_query($sql); + + if ($this->conn->sql_numrows()==0) + { + $systemError=1; + $classe="NodeSettings"; + $message="Erreur du load from id dans l'objet FetchNodeSettingsManagerDb LoadFromId, avec l'id=".$id; + addError($systemError,$classe,$message, __line__, __file__); + return array(); + } + + $tab=$this->conn->sql_fetchrow(); + $tab=$this->translateArray($tab); + + # Destruction des éléments + $this->conn->sql_freeresult(); + return $tab; + } + +/** +* doInsert: Insert le Noeud dans la BD +* +*

Insertion dans la Bd

+* @param entier identifiant du pére +* @param chaine libelle de du noeud +* @param chaine icone de du noeud +* @access private +* @return entier +*/ + function doInsert($email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + $sql="INSERT INTO ".$this->getTable()." (" + .$this->getSqlName("email").", " + .$this->getSqlName("mastodon").", " + .$this->getSqlName("mobilizon").", " + .$this->getSqlName("matrix").", " + .$this->getSqlName("peertube").", " + .$this->getSqlName("nextcloud").", " + .$this->getSqlName("twitter").", " + .$this->getSqlName("facebook").") VALUES ("; + $sql.="'".$email."', '".$mastodon."', '".$mobilizon."', '".$matrix."', '".$peertube."', '".$nextcloud."', '".$twitter."', '".$facebook."')"; + + # Requete + $result=$this->conn->sql_query($sql); + + if ($this->conn->sql_affectedrows()==0) + { + $systemError=1; + $classe="NodeSettings"; + $message="Erreur d'INSERTION dans FetchNodeSettingsManagerDb avec le courriel".$email."\n".$sql; + addError($systemError,$classe,$message, __line__, __file__); + return 0; + } + $retour=$this->conn->sql_nextid(); + return $retour; + } + +/** +* doUpdate : Modifie le Noeud dans la BD +* +*

Mise à jour de la Node

+* @param entier identifiant +* @param entier identifiant du pére +* @param chaine libelle de du noeud +* @param chaine icone de du noeud +* @access private +* @return booleen +*/ + function doUpdate($id, $email, $mastodon, $mobilizon, $matrix, $peertube, $nextcloud, $twitter, $facebook) + { + $sql="UPDATE ".$this->getTable()." SET " + .$this->getSqlName("id")."='".$id."', " + .$this->getSqlName("email")."='".$email."', " + .$this->getSqlName("mastodon")."='".$mastodon."', " + .$this->getSqlName("mobilizon")."='".$mobilizon."', " + .$this->getSqlName("matrix")."='".$matrix."', " + .$this->getSqlName("peertube")."='".$peertube."', " + .$this->getSqlName("nextcloud")."='".$nextcloud."', " + .$this->getSqlName("twitter")."='".$twitter."', " + .$this->getSqlName("facebook")."='".$facebook."' WHERE "; + $sql.=$this->getSqlName("id")."=".$id; + + # Requete + $result=$this->conn->sql_query($sql); + $retour=$id; + return $retour; + } + +/** +* doDelete : Detruit le Noeud dans la BD +* +*

Suppression du noeud à partir de son identifiant

+* @param entier identifiant du Noeud +* @access private +* @return booleen +*/ + function doDelete($id) + { + $sql="DELETE FROM ".$this->getTable()." WHERE ".$this->getSqlName("id")."=".$id; + + # Requete + $result=$this->conn->sql_query($sql); + + if ($this->conn->sql_affectedrows()==0) + { + $systemError=1; + $classe="Node"; + $message="Erreur de SUPPRESSION dans FetchNodeSettingsManagerDb avec l'id ".$id; + addError($systemError,$classe,$message, __line__, __file__); + return false; + } + return true; + } + + ////////////////////////////////////////////////////////////////////////// + // + // Utilitaires pour la gestion des compatibilités BD + // + ///////////////////////////////////////////////////////////////////////// +/** +* translateKey : change les cles du tableau resultant d'une requete en tableau de données pour l'objet +* +*

Supprime le nom de la table dans les noms de champs renvoyés par la BD
+* garde la compatibilité avec les version précédentes

+* @param array tableau sql +* @access private +* @return array tableau des attributs +*/ + function translateArray($sqlArray) + { + /* Cas nouvelle BD systeme */ + $result["id"] =$sqlArray[$this->getSqlName('id')]; + $result["email"] =$sqlArray[$this->getSqlName("email")]; + $result["mastodon"] =$sqlArray[$this->getSqlName("mastodon")]; + $result["mobilizon"] =$sqlArray[$this->getSqlName("mobilizon")]; + $result["matrix"] =$sqlArray[$this->getSqlName("matrix")]; + $result["peertube"] =$sqlArray[$this->getSqlName("peertube")]; + $result["nextcloud"] =$sqlArray[$this->getSqlName("nextcloud")]; + $result["twitter"] =$sqlArray[$this->getSqlName("twitter")]; + $result["facebook"] =$sqlArray[$this->getSqlName("facebook")]; + return $result; + } + +/** +* initSqlAttributName : recupere le nom d'un attribut a partir d'une cle +* +*

En fonction de la version sql, on trouvera ici la correspondance entre le nom attribut de l'objet et son nom en BD
+* cette methode permet de garder la compatibilité avec les version précédentes

+* @param chaine nom de l'attribut recherche +* @access private +* @return booleen +*/ + function initSqlAttribut() + { + if(defined('DATA_ACCES_TABLE_VERSION')) + { + if( DATA_ACCES_TABLE_VERSION == 1) + { + $this->sqlAttributArray["id"] ="node_id"; + $this->sqlAttributArray["email"] ="node_email"; + $this->sqlAttributArray["mastodon"] ="node_mastodon"; + $this->sqlAttributArray["mobilizon"] ="node_mobilizon"; + $this->sqlAttributArray["matrix"] ="node_matrix"; + $this->sqlAttributArray["peertube"] ="node_peertube"; + $this->sqlAttributArray["nextcloud"] ="node_nextcloud"; + $this->sqlAttributArray["twitter"] ="node_twitter"; + $this->sqlAttributArray["facebook"] ="node_facebook"; + return true; + } + } + $this->sqlAttributArray["id"] ="id"; + $this->sqlAttributArray["email"] ="email"; + $this->sqlAttributArray["mastodon"] ="mastodon"; + $this->sqlAttributArray["mobilizon"] ="mobilizon"; + $this->sqlAttributArray["matrix"] ="matrix"; + $this->sqlAttributArray["peertube"] ="peertube"; + $this->sqlAttributArray["nextcloud"] ="nextcloud"; + $this->sqlAttributArray["twitter"] ="twitter"; + $this->sqlAttributArray["facebook"] ="facebook"; + return true; + } + +/** +* getSqlName : recupere le nom du champ a partir d'une cle +* +*

En fonction de la version sql, on trouvera ici la correspondance entre le nom attribut de l'objet et son nom en BD
+* Cette methode permet de garder la compatibilite avec les version précédentes
+* Elle s'appuie sur le tableau associatif $this->sqlAttributArray genere par initSqlAttributArray

+* @param chaine nom de l'attribut recherche +* @access private +* @return chaine nom du champ sql +*/ + function getSqlName($attribut) + { + return ( (isset($this->sqlAttributArray[$attribut]))?$this->sqlAttributArray[$attribut]:$attribut ); + } +} +?>