<?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.
*
* Ce fichier contient la classe TextInfo
* @author Initiance <www.initiance.com|martial@initiance.com>
* @since 2004/06/07
* @version 0.2
* @link www.rooty.me
* @package object_coordination
* @subpackage TextInfo
* @copyright Copyright &copy; 2009-2018, Rooty
*/

/**
* Modified by Guillaume Tessier <gui.tessier@wanadoo.fr>
* Since 2005/08/01
* Ajout de deux méthodes (setAllRow4Import et getAllRow4Export) concrètes issues 
* de la classe abstraite "CoordinationObj", ces deux méthodes nous servent à restaurer et 
* sauvegarder des données de l'outil.
*/

/**
* Modified by Comendatore(Tristan) <commendatore@comendatore.net>
* Since 2007/01/02
* Adaptation des appels SQL à la nouvelle structure de BD pour la version 2.0 de Granilm.
*/
if ( !defined('SYSTEM_IN') )
{
 die("Hacking attempt");
}

/**
* Classe TextInfo
*
* classe de gestion de pages de textes de presentation
* @package object_coordination
* @subpackage TextInfo
*/
Class TextInfo extends CoordinationObj
{

	function tabeCreate()
	{
		$tabPictoTabe = array("eye","cogs");
		$tabTabe =  array("TxtTabeView","TxtTabeAdmin");
		$tabAction = array(array("lectureAdmin"), array("actionAdmin"));
		$tabUrlTabe = array(formatUrl($this->getId(), "TextInfo", "lectureAdmin"),formatUrl($this->getId(), "TextInfo", "actionAdmin"));
		printTabeAdmin("TabeB", $tabTabe, $tabUrlTabe, $tabPictoTabe, $tabAction);
	}

/**
* Function permettant de rafficher le contenu pour modification dans la bd
* @access public
* @return chaine chaine vide
*/
	function actionAdmin()
	{
		/*Récupération des messages utilisateurs*/
		addMessageFile("user.ini");
		
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];
		/* fin récupération des codes par defaut */
		
		mxPageTitle("actionAdminTitlePage");
		
		/* Instanciation du wysiwyg */
		$wysiwyg = new Wysi("contentTextInfos", "postTextInfos", "fr_FR", "", $pref="summernote");
		$wysiwyg->includeDependancy();
	
		//$this->tabeCreate();
		$text =getMessage("NoText");

		/* On inclus la template (voir package.template.php) */
		withBlocPath("TextInfo", "actionAdmin");

		/* creation des onglets */
		$this->tabeCreate();

		# Requete sur identifiant de l objet de coordination correspondant
		$sql="SELECT * FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId();
		# Execution de Requete
		$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);

		# Teste si il y a des enregistrements
		if ($GLOBALS['SYSTEM_DATABASE_CONN']->sql_numrows()>0)
		{
			# On récupère les données en variable
			$View = $GLOBALS['SYSTEM_DATABASE_CONN']->sql_fetchrow();
			if($View['textinfo_text_'.$currentCode] != "")
				$text = $View['textinfo_text_'.$currentCode];
			
			# On définit le contenu texte à afficher par le wysiwyg
			$wysiwyg->SetContent($text);
			
			# On affiche le contenu texte à afficher dand le wysiwyg
			$GLOBALS["SYSTEM_TEMPLATE"]->MxText("wysiwyg", $wysiwyg->Display());
			
			# Destruction des resultats
			$GLOBALS['SYSTEM_DATABASE_CONN']->sql_freeresult();
		}else{
			$GLOBALS["SYSTEM_TEMPLATE"]->MxText("wysiwyg",getMessage("NoText"));
		}
		$GLOBALS["SYSTEM_TEMPLATE"]->MxText("currentLang", $currentCode);
		$GLOBALS["SYSTEM_TEMPLATE"]->MxAttribut("urlAction", formatUrl($this->getId(),"TextInfo","execAdmin"));

		return "";
	}

/**
* Function permettant de Lire le contenu pour l'administrateur
* @access public
* @return chaine chaine vide
*/
	function lectureAdmin()
	{
		//$this->tabeCreate();
		$text =getMessage("NoText");

		/* On inclus la template (voir package.template.php) */
		withBlocPath("TextInfo", "lectureAdmin");

		/* creation des onglets */
		$this->tabeCreate();

		# Requete sur identifiant de l objet de coordination correspondant
		$sql="SELECT * FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId();
		# Execution de Requete
		$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);

		# Teste si il y a des enregistrements
		if ($GLOBALS['SYSTEM_DATABASE_CONN']->sql_numrows()>0)
		{
			$View = $GLOBALS['SYSTEM_DATABASE_CONN']->sql_fetchrow();
			if($View['textinfo_text'] != "")
			$text = stripslashes($View['textinfo_text']);
		}
		$GLOBALS["SYSTEM_TEMPLATE"]->MxText("text", $text);

		return "";
	}

/**
* Function permettant de modifier le contenu dans la bd et redirection
* @access public
* @return chaine chaine vide
*/
	function execAdmin()
	{
		$text=(isset($_POST['text']))?$_POST['text']:"";
	
		# Requete sur identifiant de l objet de coordination correspondant
		$sql="SELECT * FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId();
		# Execution de Requete
		$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		$status=0;
		
		if ($GLOBALS['SYSTEM_DATABASE_CONN']->sql_numrows()==0)
		{
			# Requete sur identifiant de l objet de coordination correspondant
			$sql="INSERT INTO ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo (textinfo_id, textinfo_text) VALUES (".$this->getId().", '".$text."')";
			# Execution de Requete
			$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		}
		else{
			# Requete sur identifiant de l objet de coordination correspondant
			$sql="UPDATE ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo SET textinfo_text='".$text."' WHERE textinfo_id=".$this->getId();
			# Execution de Requete
			$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		}

		# Redirection vers le formulaire (avec le message)
		systemRedirect(formatUrl($this->getId(),"TextInfo","actionAdmin","datamodified"));
		return "";
	}

/**
* Fonction executee lors de la creation de l'instance
* @access public
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet est cree
* @return chaine chaine vide
*/
	function __execCreateObject($groupId, $nodeId, $tabForbiddenPass)
	{
		parent::__execCreateObject($groupId, $nodeId, $tabForbiddenPass);
		# Creation de l'enregistrement...
		$sql="INSERT INTO ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo VALUES ('', ".$this->getId().")";
		# Execution de Requete
		$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		
		return "";
	}

/**
* Fonction executee lors de la destruction (physique) de l'instance
* @access public
* @param entier groupe de configuration...
* @param entier noeud de configuration endroit ou l'objet a été créé
* @return chaine code message
*/
	function __execDeleteObject($groupId, $nodeId, $tabForbiddenPass)
	{
		parent::__execDeleteObject($groupId, $nodeId, $tabForbiddenPass);
		# Creation de l'enregistrement...
		$sql="INSERT INTO ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId()."";
		# Execution de Requete
		$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		$methods=array("actionLectureInfo"=>"actionLectureInfo","actionAdmin"=>array("lectureAdmin","actionAdmin"));
		Search::delSearch("&oid=".$this->getId(), $this->getContentType(), $methods);
		
		return "TxtDeleteOk";
	}

/**
* __getDataCoordination : recupere un obj DataCoordination<br/>
* @access public
* @return objet DataCoordination
*/
	function __getDataCoordination()
	{
		/* gestion du lib en fonction de la langue courante */
		$currentCode=$GLOBALS["SYSTEM_USER_SESSION"]->langue->getCode();
		$defaultCode=$GLOBALS["SYSTEM_DEFAULT_LANGUAGE_CODE"];

		# Tableau id => nom de la brique
		if ($this->getName($currentCode) != "")
			$name = $this->getName($currentCode);
		else
			$name = $this->getName($defaultCode);

		return new DataTextInfo($this->getId(), $name);
	}

	/**
	* getAllRow4Export : recupere tous les enregistrements utilisés par l'objet de coordination 
	* le tableau est constiué de la nom_du_champ=valeur_du_champ
	* Si aucune donnée n'est Ã  exporter, la méthode return null
	* @access public
	* @param entier id
	* @return tableau Associatif
	*/
	function getAllRow4Export(){
		$datas = array();
		$sql="SELECT * FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId();
        	$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		if ($GLOBALS['SYSTEM_DATABASE_CONN']->sql_numrows()>0){
			$dataReturn = array();
			while($list = $GLOBALS['SYSTEM_DATABASE_CONN']->sql_fetchrow())
				$dataReturn[]=$list;
			$GLOBALS['SYSTEM_DATABASE_CONN']->sql_freeresult();
			$datas[0]["tableName"]=DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo";
			$datas[0]["datas"]=$dataReturn;
			return $datas;
		}
		return null;
	}

	/**
	* setAllRow4Import : Insert les données en provenance du tableau associatif
	* le tableau est constitué de la nom_du_champ=valeur_du_champ
	* Si les enregistrements se sont bien sauvegardés, return true
	* @access public
	* @param boolean
	*/
	function setAllRow4Import($tableau){
		$sql="DELETE FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getId();
        	$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
		
		for($j=0;$j < count($tableau);$j++){
			$tableName = $tableau[$j]["tableName"];
			$tableElem = $tableau[$j]["datas"];

			for($i=0;$i <count($tableElem);$i++){	
				unset($set);
				unset($values);
	
				foreach($tableElem[$i] as $key=>$value){
					if(!is_numeric($key)){
						(!isset($set))?$set=$key:$set.=",".$key;
						(!isset($values))?$values="'".$value."'":$values.=",'".$value."'";
					}
				}
				$sql = "INSERT INTO ".$tableName." (".$set.") VALUES(".$values.")";
				$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);
			}
		}
		return true;
	}
}

/**
* Classe DataCoordination
*classe d'echange de donnees pour export ou entre classe
* @package object_coordination
* @subpackage TextInfo
*/
class DataTextInfo extends DataCoordination
{
/**
* @var chaine
* @desc oid du dataInfo
* @access private
*/
var $oid=0;

/**
* @var chaine
* @desc titre de l'enregistrement (=nom de l'instance)
* @access private
*/
var $title="";

/**
* Constructeur PHP4
*/
	function DataTextInfo($oid, $title)
	{
		$this->__construct($oid, $title);
	}

/**
* Constructeur PHP5
*/
	function __construct($oid, $title)
	{
		parent::__construct();
		$this->setOid($oid);
		$this->setTitle($title);
	}

/**
* "Seteur" de l'oid
* @access public
* @param entier
* @return entier
*/
	function setOid($id)
	{
		$this->oid=$id;
	}

/**
* "Getteur" de l'oid
* @access public
* @return entier
*/
	function getOid()
	{
		return $this->oid;
	}

/**
* "Seteur" de title
* @access public
* @param entier
* @return entier
*/
	function setTitle($id)
	{
		$this->title=$id;
	}

/**
* "Getteur" de l'oid
* @access public
* @return chaine
*/
	function getTitle()
	{
		return $this->title;
	}

/**
* retourne un tableau avec toutes les sources d'info recuperables
*Cette methode permet entre autre de recuperer les types d'infos...<br/>
*Dans le cas de la newsletter par exemple, la classe se sert :<br/>
* - d'une liste d'abonnes<br/>
* - d'une liste de mail ou newsletter<br/>
*Le tableau renverra donc array(0=>newsletter, 1=>account)<br/>
* @return tableau
*/
	function getDataSource()
	{
		return array("TextInfo");
	}

/**
* retourne la source d'info par defaut
*Cette methode permet entre autre de recuperer les types d'infos...<br/>
*Dans le cas de la newsletter par exemple, la classe se sert :<br/>
* - d'une liste d'abonnes<br/>
* - d'une liste de mail ou newsletter<br/>
*Le tableau renverra donc array(0=>newsletter, 1=>account)<br/>
* @return tableau
*/
	function getDefaultDataSource()
	{
		$tab=$this->getDataSource();
		if (is_array($tab)) return $tab[0];
		else return "";
	}

/**
* recupere 1 enregistrement avec l'id=id
*le tableau est constiue de la cle + nom de l'info + valeur<br/>
*Des champs sont en plus donnees (balises obligatoires rss):<br/>
* - rssTitle=titre de l'info<br/>
* - rssDescription=description/resume<br/>
* - rssLink=lien du site<br/>
* +
* - id identifiant d'accee unique
* Par defaut la dataSource doit etre la source de donnee principale de l'obj
* @return tableau
*/
	function getRow($id="", $dataSource="")
	{
		$tab["id"]=$this->getOid();
		$tab["rssTitle"]=$this->getTitle();

		# Requete sur identifiant de l objet de coordination correspondant
		$sql="SELECT * FROM ".DATA_ACCES_TABLE_PREFIX.DATA_ACCES_OBJECT_PREFIX."textinfo WHERE textinfo_id=".$this->getOid();

		# Execution de Requete
		$result=$GLOBALS['SYSTEM_DATABASE_CONN']->sql_query($sql);

		# Teste si il y a des enregistrements
		$description="";

		if ($GLOBALS['SYSTEM_DATABASE_CONN']->sql_numrows()>0)
		{
			$View = $GLOBALS['SYSTEM_DATABASE_CONN']->sql_fetchrow();
			if($View['textinfo_text'] != "")
				$description = $View['textinfo_text'];
		}

		$tab["rssDescription"]=$description;
		$tab["rssLink"]="http://www.granilim.org";
		return $tab;
	}

/**
* recupere tous les enregistrement sous forme de tableau
* le tableau est constiue de la cle + nom de l'info + valeur
* Des champs sont en plus donnees (balises obligatoires rss):<br/>
* - rssTitle=titre de l'info<br/>
* - rssDescription=description/resume<br/>
* - rssLink=lien du site<br/>
* +
* - id identifiant d'accee unique
* Par defaut la dataSource doit etre la source de donnee principale de l'obj
* @return tableau
*/
	function getAllRow($dataSource="")
	{
		return array($this->getRow());
	}

/**
* recupere un texte format RSS
* Par defaut la dataSource doit etre la source de donnee principale de l'obj
* @return chaine
*/
	function getRssFile($dataSource="")
	{
		return "";
	}

/**
* recupere un texte format Xml
* Par defaut la dataSource doit etre la source de donnee principale de l'obj
* @return chaine
*/
	function getXmlFile($dataSource="")
	{
		return "";
	}

/**
* recupere un texte format Cvs
* Par defaut la dataSource doit etre la source de donnee principale de l'obj
* @return chaine 
*/
	function getCvsFile($dataSource="")
	{
		return "";
	}
}
?>
