<?php

/**------------------------------------------------
*
* Rooty, 2018 <rooty@rooty.me>
*
*
* 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 CoordinationObjManager.php
*
*Ce fichier contient la classe CoordinationObjManager
*
* @author Rooty <www.rooty.me|rooty@rooty.me>
* @link www.rooty.me
* @since 2004/06/05
* @version 0.3
* @package system_coordination
* @copyright Copyright &copy; 2009-2018, 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.
*<p> if ( !defined('SYSTEM_IN') )
* {
* die("Hacking attempt");
* }</p>
*/
if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* Appel à la classe CoordinationObj...
*/
require ($CONF_LIB_PATH."lib/system/system_coordination/coordinationobj.php");

/**
* Classe CoordinationObjManager
*
* <p>Classe de gestion des instances de CoordinationObjs <br>
*   (permet de fabriquer, detruire, mettre à jour des objet CoordinationObjs)<br>
* Cette classe se sert des ressources à sa disposition (dans ./ressource)<br>
* Les Classes de ressource doivent avoir toutes les methodes correspondantes <br>
* aux methodes de la classe intitulés sourceXXX</p>
*
* <p>Est configuré dans data_acces.php : <br>
* - La Source d'information (Db)<br>
* l'objet ressource se sert lui-même des classes d'accés aux données(lib/data_source/...)<br>
* </p>
* @package system_coordination
*/
class CoordinationObjManager extends Manager
{
	//
	// Constructor
	//
/**
*Constructeur de la classe CoordinationObjManager PHP5
*
*<p>Initialise le bon objet (ressource) ... <br>chacun de ces objets doit avoir les mêmes methodes (equivalente aux methodes sourceXXX)</p>
*<p>L'objet CoordinationObjManager ne doit servir qu'a la récuperation des CoordinationObj</p>
* @access public
*/
	function __construct()
	{
	}

###########################################################################
#### Méthodes abstraites
###########################################################################
/**
* doLoadFromId: Charge les donnes depuis la BD
*
*<p>Retourne un tableau contenant les infos de l'objets
*<br>ou faux si n'existe pas;<br>
*Précondition : id doit être un entier
*</p>
* @access public
* @param entier identifiant de la DataObject
* @abstract
* @return tableau
*/
	function doLoadFromId($id)
	{
		return array();
	}

/**
* doLoadFromIds: Charge les donnees depuis la BD
*
*<p>Retourne un tableau de tableau contenant les infos de(s) l'objet(s)
*<br>ou faux si n'existe pas;<br>
*Précondition : id doit être un entier
*</p>
* @access public
* @param tableau tableau d'identifiant de la DataObject
* @abstract
* @return tableau
*/
	function doLoadFromIds($array)
	{
		return array();
	}

/**
* doLoadFromIds: Charge le DataObject depuis la BD
*
*<p>Retourne un tableau contenant les infos de l'objets
*<br>ou faux si n'existe pas;<br>
*Précondition : id doit être un entier
*</p>
* @access public
* @param tableau tableau d'identifiant de noeuds
* @abstract
* @return tableau
*/
	function doLoadFromNodeIds($array)
	{
		return array();
	}

/**
* doLoadFromNodeId: Charge les Objects de coordination depuis la BD
*
*<p>Retourne un tableau contenant les infos des objets
*Précondition : id doit être un entier
*</p>
* @access public
* @abstract 
* @param entier identifiant de l'Object
* @return tableau
*/
	function doLoadFromNodeId($id)
	{
		return array();
	}

/**
* doInsert: Insert la DataObject dans la BD
*<p>Insertion dans la Bd</p>
* @param entier id
* @param date date de création
* @param chaine propriétaire
* @param chaine noeud de création
* @param chaine path vers l'icone
* @param chaine nom de la classe de l'objet
* @param chaine nom de l'objet
* @param chaine resumé de l'objet
* @param chaine contenu de l'objet
* @param chaine mot clé de l'objet
* @param date date de parution
* @param date date d'archivage
* @access public
* @abstract
* @return entier identifiant de la l'insertion
*/
	function doInsert($create, $owner, $noeud, $icone, $contentType, $contentName, $contentResume, $contentData, $contentKeyWord, $contentParution, $contentArchivage)
	{
		return 0;
	}

/**
* doUpdate:Modifie la DataObject dans la BD
*<p>Mise à jour de la DataObject</p>
* @param entier id
* @param date date de création
* @param chaine propriétaire
* @param chaine noeud de création
* @param chaine path vers l'icone
* @param chaine nom de la classe de l'objet
* @param chaine nom de l'objet
* @param chaine resumé de l'objet
* @param chaine contenu de l'objet
* @param chaine mot clé de l'objet
* @param date date de parution
* @param date date d'archivage
* @abstract
* @access public
* @return booleen
*/
	function doUpdate($id, $create, $owner, $noeud, $icone, $contentType, $contentName, $contentResume, $contentData, $contentKeyWord, $contentParution, $contentArchivage)
	{
		return 0;
	}

/**
* doDelete : Detruit la DataObject dans la BD
*
*<p>Suppression de la DataObject à partir de son identifiant</p>
* @param entier identifiant
* @access public
* @abstract
* @return booleen
*/
	function doDelete($id)
	{
		return true;
	}

###########################################################################
#### Méthodes Privées
###########################################################################
/**
* sourceLoadFromId: charge à partir d'un identifiant
*<p>Permet la récupération des infos d'un objet DataObject à partir de son identifiant</p>
*<p>Retourne un tableau contenant les infos de l'objets : ou faux si n'existe pas</p>
* @param identifiant de la DataObject
* @access public
* @return booleen ou tableau
*/
	function sourceLoadFromId($id)
	{
		$tab=$this->doLoadFromId($id);

		# Gestion d'un tableau intermediaire avec la reprise des elements
		# si pas d'erreur d'execution sur la methode
		if (is_array($tab))
		{
			if (!Is_numeric($tab["id"]))
			{
				$systemError=2;
				$classe="DataObject";
				$message="Erreur de Coordination";
				addError($systemError,$classe,$message, __line__, __file__);
				return false;
			}

			if (!Is_date($tab["create"]))
			{
				$systemError=2;
				$classe="DataObject";
				$message="Erreur de Coordination";
				addError($systemError,$classe,$message, __line__, __file__);
				return false;
			}

			if (!Is_numeric($tab["owner"]))
			{
				$systemError=2;
				$classe="DataObject";
				$message="Erreur de Coordination";
				addError($systemError,$classe,$message, __line__, __file__);
				return false;
			}

			$icone=new Chaine($tab["icone"]);
			$tab["icone"]=$icone->SqlToStr();
			$contentType=new Chaine($tab["contentType"]);
			$tab["contentType"]=$contentType->SqlToStr();
			$resume=new Chaine($tab["resume"]);
			$tab["resume"]=$resume->SqlToStr();
			$key=new Chaine($tab["keyWord"]);
			$tab["keyWord"]=$key->SqlToStr();
		}
		return $tab;
	}

/**
* sourceLoadFromIds: charge à partir d'un tableau d'identifiant
*<p>Permet le récupération des infos d'un objet CoordinationObject à partir de son identifiant</p>
*<p>Retourne un tableau contenant les infos de l'objets : ou faux si n'existe pas</p>
* @param tableau identifiant de la DataObject
* @access public
* @return booleen ou tableau
*/
	function sourceLoadFromNodeIds($array)
	{
		$tab=$this->doLoadFromNodeIds($array);
		# Gestion d'un tableau intermediaire avec la reprise des elements
		# si pas d'erreur d'execution sur la methode
		if (is_array($tab))
		{
			$nbEnreg=count($tab);
			for ($i=0; $i<$nbEnreg; $i++)
			{
				$icone=new Chaine($tab[$i]["icone"]);
				$tab[$i]["icone"]=$icone->SqlToStr();
				$contentType=new Chaine($tab[$i]["contentType"]);
				$tab[$i]["contentType"]=$contentType->SqlToStr();
				$resume=new Chaine($tab[$i]["resume"]);
				$tab[$i]["resume"]=$resume->SqlToStr();
				$key=new Chaine($tab[$i]["keyWord"]);
				$tab[$i]["keyWord"]=$key->SqlToStr();
			}
		}
		return $tab;
	}

/**
* sourceLoadFromIds: charge à partir d'un tableau d'identifiant
*<p>Permet le récupération des infos d'un objet CoordinationObject à partir de son identifiant</p>
*<p>Retourne un tableau contenant les infos de l'objets : ou faux si n'existe pas</p>
* @param tableau identifiant de la DataObject
* @access public
* @return booleen ou tableau
*/
	function sourceLoadFromIds($array)
	{
		$tab=$this->doLoadFromIds($array);
		# Gestion d'un tableau intermediaire avec la reprise des elements
		# si pas d'erreur d'execution sur la methode
		if (is_array($tab))
		{
			$nbEnreg=count($tab);
			for ($i=0; $i<$nbEnreg; $i++)
			{
				$icone=new Chaine($tab[$i]["icone"]);
				$tab[$i]["icone"]=$icone->SqlToStr();
				$contentType=new Chaine($tab[$i]["contentType"]);
				$tab[$i]["contentType"]=$contentType->SqlToStr();
				$resume=new Chaine($tab[$i]["resume"]);
				$tab[$i]["resume"]=$resume->SqlToStr();
				$key=new Chaine($tab[$i]["keyWord"]);
				$tab[$i]["keyWord"]=$key->SqlToStr();
			}
		}
		return $tab;
	}

/**
* sourceLoadFromNodeId : charge à partir d'un tableau d'identifiant
*<p>Permet le récupération des infos d'un objet CoordinationObject à partir de son identifiant</p>
*<p>Retourne un tableau contenant les infos de l'objets : ou faux si n'existe pas</p>
* @param entier identifiant de la DataObject
* @access public
* @return booleen ou tableau
*/
	function sourceLoadFromNodeId($Id)
	{
		$tab=$this->doLoadFromNodeId($Id);
		# Gestion d'un tableau intermediaire avec la reprise des elements
		# si pas d'erreur d'execution sur la methode
		if (is_array($tab))
		{
			$nbEnreg=count($tab);
			for ($i=0; $i<$nbEnreg; $i++)
			{
				$icone=new Chaine($tab[$i]["icone"]);
				$tab[$i]["icone"]=$icone->SqlToStr();
				$contentType=new Chaine($tab[$i]["contentType"]);
				$tab[$i]["contentType"]=$contentType->SqlToStr();
				$resume=new Chaine($tab[$i]["resume"]);
				$tab[$i]["resume"]=$resume->SqlToStr();
				$key=new Chaine($tab[$i]["keyWord"]);
				$tab[$i]["keyWord"]=$key->SqlToStr();
			}
		}
		return $tab;
	}

/**
* sourceInsert: Insert la DataObject
*
*<p>Insertion de l'objet DataObject dans la source de données<br>
* indifférement du type de cette source</p>
*<p>Retourne L'identifiant de l'objet insérer<br>
*<br>*</p>
* @param entier id
* @param date date de création
* @param chaine propriétaire
* @param chaine noeud de création
* @param chaine path vers l'icone
* @param chaine nom de la classe de l'objet
* @param chaine nom de l'objet
* @param chaine resumé de l'objet
* @param chaine contenu de l'objet
* @param chaine mot clé de l'objet
* @param date date de parution
* @param date date d'archivage
* @access public
* @return entier
*/
	function sourceInsert($create, $owner, $noeud, $icone, $contentType, $contentName, $contentResume, $contentData, $contentKeyWord, $contentParution, $contentArchivage)
	{
		# Gestion d'un tableau intermediaire avec la reprise des elements
		#create
		if (!Is_date($create))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		if (!is_numeric($owner))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		if (!is_numeric($noeud))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		$ObjIcone=new Chaine($icone);
		$ObjContentType=new Chaine($contentType);
		$ObjContentResume=new Chaine($contentResume);
		$ObjContentKeyWord=new Chaine($contentKeyWord);

		if (!Is_date($contentParution))
		{
			$contentParution="1900-01-01 00:00:00";
		}

		if (!Is_date($contentArchivage))
		{
			$contentArchivage="1900-01-01 00:00:00";
		}

		return $this->doInsert($create, $owner, $noeud, $ObjIcone->StrToSql(), $ObjContentType->StrToSql(), $contentName, $ObjContentResume->StrToSql(), $contentData, $ObjContentKeyWord->StrToSql(), $contentParution, $contentArchivage);

	}

/**
* sourceUpdate: Met à jour la DataObject
*
*<p>Mise à jour de l'objet indifferemment de la source de données</p>
*</p>
*
* @param entier id
* @param date date de création
* @param chaine propriétaire
* @param chaine noeud de création
* @param chaine path vers l'icone
* @param chaine nom de la classe de l'objet
* @param chaine nom de l'objet
* @param chaine resumé de l'objet
* @param chaine contenu de l'objet
* @param chaine mot clé de l'objet
* @param date date de parution
* @param date date d'archivage
* @access public
* @return booleen
*/
	function sourceUpdate($id, $create, $owner, $noeud, $icone, $contentType, $contentName, $contentResume, $contentData, $contentKeyWord, $contentParution, $contentArchivage)
	{
		# Gestion d'un tableau intermediaire avec la reprise des elements
		if (!Is_numeric($id))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		if (!Is_date($create))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		if (!Is_numeric($owner))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		if (!Is_numeric($noeud))
		{
			$systemError=2;
			$classe="DataObject";
			$message="Erreur de Coordination";
			addError($systemError,$classe,$message, __line__, __file__);
			return false;
		}

		$ObjIcone=new Chaine($icone);
		$ObjContentType=new Chaine($contentType);
		$ObjContentResume=new Chaine($contentResume);
		$ObjContentKeyWord=new Chaine($contentKeyWord);

		if (!Is_date($contentParution))
		{
			$contentParution="1900-01-01 00:00:00";
		}

		if (!Is_date($contentArchivage))
		{
			$contentArchivage="1900-01-01 00:00:00";
		}

		return $this->doUpdate($id, $create, $owner, $noeud, $ObjIcone->StrToSql(), $ObjContentType->StrToSql(), $contentName, $ObjContentResume->StrToSql(), $contentData, $ObjContentKeyWord->StrToSql(), $contentParution, $contentArchivage);

	}

/**
* doDelete : Detruit le DataObject
*
*<p>Suppression de l'objet à partir de son identifiant</p>
*
* @param entier identifiant de la DataObject
* @access public
* @return booleen
*/
	function sourceDelete($id)
	{
		return $this->doDelete($id);
	}

###########################################################################
#### Méthodes Public
###########################################################################
/**
* createNewInstance : créer un objet vierge
* @access public
* @return booleen
*/
	function createNewInstance()
	{
		return new CoordinationObj();
	}

/**
* createInstance : récupére l'instance de la session courante
* @param entier identifiant de l'association CoordinationObj
* @access public
* @return object retourne un objet de type CoordinationObj
*/
	function createInstance($id)
	{
		$return = new CoordinationObj();
		$data=$this->sourceLoadFromId($id);

		/* pavé de load*/
		$register=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];

  		if (!(array_search(strtolower($data["contentType"]), $register)===false))
		{
			$lib_name=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"][array_search(strtolower($data["contentType"]), $register)];
			include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");

			if (class_exists($data["contentType"]))
			{
				$retour= new $data["contentType"]();
				$retour->doLoad($data["id"],$data["create"],$data["owner"], $data["node"], $data["icone"], $data["contentType"], $data["name"], $data["resume"], $data["data"], $data["keyWord"], $data["parution"], $data["archivage"]);
			}
			else
			{
				addError(1,"LoadObject","Aucune classe n'existe !!", __LINE__ , __FILE__);
				$retour = NULL;
			}
		}else{
			addError(1,"LoadObject","Aucune classe n'existe !!", __LINE__ , __FILE__);
			$retour = NULL;
		}
		return $retour;
	}

/**
* getInstanceFromNodeId : récupére l'instance de la session courante
* @param entier identifiant de l'association CoordinationObj
* @access public
* @return object retourne un objet de type CoordinationObj
*/
	function getInstanceFromNodeId($id)
	{
		$k=0;
		$retour=array();
		$data=$this->sourceLoadFromNodeId($id);
		$register=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];

		for ($i=0; $i<count($data); $i++)
		{
			/* pavé de load*/
			if ((array_search(strtolower($data[$i]["contentType"]), $register)!==false))
			{
				$lib_name=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"][array_search(strtolower($data[$i]["contentType"]), $register)];
				include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");
				if (class_exists($data[$i]["contentType"]))
				{
					$return[$k] = new CoordinationObj();
					$retour[$k]= new $data[$i]["contentType"]();
					$retour[$k]->doLoad($data[$i]["id"],$data[$i]["create"],$data[$i]["owner"], $data[$i]["node"], $data[$i]["icone"], $data[$i]["contentType"], $data[$i]["name"], $data[$i]["resume"], $data[$i]["data"], $data[$i]["keyWord"], $data[$i]["parution"], $data[$i]["archivage"]);
					$k++;
				}
				else
				{
					addError(1,"LoadObject","Aucune classe n'existe !!".$data[$i]["contentType"], __LINE__ , __FILE__);
					$retour = NULL;
				}
			}else{
				addError(1,"LoadObject","Aucune classe n'existe !!".$data[$i]["contentType"], __LINE__ , __FILE__);
				$retour = NULL;
			}
		}
		return $retour;
	}

/**
* createInstanceFromIds : crée une instance à partir des id contenu dans le tableau passé en paramétre
* @param tableau identifiant de l'association CoordinationObj
* @access public
* @return object retourne un objet de type CoordinationObj
*/
	function createInstanceFromIds($array)
	{
		$k=0;
		$retour=array();
		$data=$this->sourceLoadFromIds($array);
		$register=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];
		for ($i=0; $i<count($data); $i++)
		{
			/* pavé de load*/
			if (!(array_search(strtolower($data[$i]["contentType"]), $register)===false))
			{
				$lib_name=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"][array_search(strtolower($data[$i]["contentType"]), $register)];
				include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");

				if (class_exists($data[$i]["contentType"]))
				{
					$return[$k] = new CoordinationObj();
					$retour[$k]= new $data[$i]["contentType"]();

					/* Pas besoin des méta données -> - lourd... */
					$retour[$k]->doLoad($data[$i]["id"],"","", $data[$i]["node"], $data[$i]["icone"], $data[$i]["contentType"], $data[$i]["name"], $data[$i]["resume"], $data[$i]["data"], "", "", "");
					$k++;
				}
				else
				{
					addError(1,"LoadObject","La classe n'existe pas ".strtolower($data[$i]["contentType"]), __LINE__ , __FILE__);
					$retour = NULL;
				}
			}else{
				addError(1,"LoadObject","Aucune classe n'existe !!", __LINE__ , __FILE__);
				$retour = NULL;
			}
		}
		return $retour;
	}

/**
* createInstancefromnodeids : crée une instance à partir du noeud d'id contenu dans le tableau passé en paramétre
* @param entier identifiant de l'association CoordinationObj
* @access public
* @return object retourne un objet de type CoordinationObj
*/
	function createInstanceFromNodeIds($array)
	{
		$k=0;
		$retour=array();
		$data=$this->sourceLoadFromNodeIds($array);
		$register=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"];

		for ($i=0; $i<count($data); $i++)
		{
			/* pavé de load*/
			if (!(array_search(strtolower($data[$i]["contentType"]), $register)===false))
			{
				$lib_name=$GLOBALS["SYSTEM_REGISTER"]["COORDINATION_OBJ"][array_search(strtolower($data[$i]["contentType"]), $register)];
				include_once($GLOBALS["CONF_LIB_PATH"]."lib/object_coordination/".$lib_name."/".$lib_name.".php");

				if (class_exists(strtolower($data[$i]["contentType"])))
				{
					$return[$k] = new CoordinationObj();
					$retour[$k]= new $data[$i]["contentType"]();
					$retour[$k]->doLoad($data[$i]["id"],"","", $data[$i]["node"], $data[$i]["icone"], $data[$i]["contentType"], $data[$i]["name"], $data[$i]["resume"], $data[$i]["data"], "", "", "");
					$k++;
				}
				else
				{
					addError(1,"LoadObject","Aucune classe n'existe !!", __LINE__ , __FILE__);
					$retour = NULL;
				}
			}else{
				addError(1,"LoadObject","Aucune classe n'existe !!", __LINE__ , __FILE__);
				$retour = NULL;
			}
		}
		return $retour;
	}

/**
* deleteInstance : detruit l'objet physique
* @param object objet CoordinationObj à effacer
* @access public
* @return object objetCoordinationObj mis à jour
*/
	function deleteInstance($obj)
	{
		$return = false;
		if ((strtolower(get_class($obj))=="coordinationobj") || (strtolower(get_parent_class($obj))=="coordinationobj") )
		{
			/* Récupération des infos */
			$this->CallSystemPlugin("__deleteCoordinationObj", $obj);
			$return=$this->sourceDelete($obj->getId());
			return $obj;
		}
		return $obj;
	}

/**
* updateInstance : met à jour l'objet
* @param object objet CoordinationObj à modifier
* @access public
* @return object objetCoordinationObj mis à jour
*/
	function updateInstance($obj)
	{
		$return = false;
		if ( ((strtolower(get_class($obj))=="coordinationobj") || (strtolower(get_parent_class($obj))=="coordinationobj")) && ($obj->isLoaded()==true))
		{
			/* Récupération des infos */
			$id=$this->sourceUpdate($obj->getId(), $obj->create, $obj->owner, $obj->getNode(), $obj->getIcone(), $obj->getContentType(), $obj->getXmlName(), $obj->getResume(), $obj->getAllData(), $obj->getKeyWord(), $obj->getParution(), $obj->getArchivage());
			$this->CallSystemPlugin("__updateCoordinationObj", $obj);
			return $obj;
		}
		/* Erreur */
		$systemError=3;
		$classe="CoordinationObjManager";
		$message="Erreur objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		return $obj;
	}

/**
* insertInstance : créer enregistre l'objet
*<p>affecte l'id de l'objet si nécessaire</p>
* @param object objet CoordinationObj à inserer
* @access public
* @return object objetCoordinationObj mis à jour
*/
	function insertInstance($obj)
	{
		if ( (strtolower(get_class($obj)=="coordinationobj")) || (strtolower(get_parent_class($obj))=="coordinationobj") )
		{
			if ($obj->isLoaded()==false)
			{
				/* Récupération des infos */
				$id=$this->sourceInsert($obj->create, $obj->owner, $obj->getNode(), $obj->getIcone(), $obj->getContentType(), $obj->getXmlName(), $obj->getResume(), $obj->getAllData(), $obj->getKeyWord(), $obj->getParution(), $obj->getArchivage());
				$obj->setId($id);
				$this->CallSystemPlugin("__insertCoordinationObj", $obj);
				return $obj;
			}
		}
		/* Erreur */
		$systemError=3;
		$classe="CoordinationObjManager";
		$message="Erreur objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		return $obj;
	}

/**
* saveInstance : créer enregistre l'objet
* @param object objet CoordinationObj à sauvegarder
* @access public
* @return object objetCoordinationObj mis à jour
*/
	function saveInstance($obj)
	{
		if ((strtolower(get_class($obj)=="coordinationobj")) || (strtolower(get_parent_class($obj))=="coordinationobj"))
		{
			if ($obj->isLoaded()==true)
			{
				$return=$this->insertInstance($obj);
			}else{
				$return=$this->updateInstance($obj);
			}
			return $return;
		}
		/* Erreur */
		$systemError=3;
		$classe="CoordinationObjManager";
		$message="Erreur objet invalide ";
		addError($systemError, $classe, $message, __line__, __file__);
		$return=$obj;
		return $return;
	}
}
?>
