<?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 file.php
*
*Ce fichier contient la classe d'accès a un fichier (Lecture et ecriture)
*
* @author Initiance <www.initiance.com|HEURTAUX Christophe|olivier@initiance.com>
* @link www.rooty.me
* @since 2004/04/07
* @version 0.3
* @copyright Copyright &copy; 2009-2018, Rooty
* @package system_data_source
* @subpackage file
*
*/

#####################################################################################################
################################# 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");
}

/**
* classe File
*
* classe de gestion de Fichiers
*
* @package system_data_source
* @subpackage file
*/
class File
{
/**
* @var chaine
* @desc Chemin d'ouverture du fichier
*/
	var $filePath;

/**
* @var Flux
* @desc Flux de fichier ouvert
*/
	var $fileStream;

/**
* @var chaine
* @desc mode d'ouverture du fichier
*/
	var $openMode;

/**
* @var chaine
* @desc contenu d'un fichier
*/
	var $content;

/**
*Constructeur de File
*
*Spécifie le chemin et le mode d'ouverture d'un fichier. (si le mode d'ouverture est en lecture, la lecture du fichier est faite ici).
*
* @param chaine Chemin d'ouverture du fichier
* @param chaine Mode d'ouverture du fichier ("r","r+","a","w","w+",...)
*/
	function __construct($filePath,$openMode="r")
	{
		$this->filePath = $filePath;
		$this->openMode = $openMode;

		$this->fileStream = @fopen($this->filePath,$this->openMode);

		if (file_exists($this->filePath))
		{
			$this->content = file ($this->filePath);
		}
	}

/**
*Inclusion de fichier
*
* effectue un include du fichier courant
* @access public
* @return booleen
*/
	function includeFile()
	{
		include($this->filePath);
		return true;
	}


/**
*Lecture de fichier
*
* Effectue une lecture complete du fichier courant
* @access public
* @return chaine
*/
	function readAll()
	{
		return implode ('', $this->content);
	}

/**
* Lecture de fichier
*
*Lit la ligne spécifiée en parametre
* @access public
* @param entier numero de la ligne
* @return chaine ligne
*/
	function lineRead($nbligne)
	{
		return $this->content[$nbligne];
	}

/**
*Nombre de lignes
*
*Retourne le nombre de lignes du fichier
* @access public
* @return entier nombre de lignes
*/
	function lines()
	{
		return count($this->content);
	}

/**
*Nombre de caracteres
*
*retourne le nombre de caractères du fichier
* @access public
* @return entier nombre de caractères.
*/
	function caracteres()
	{
		return count(implode('',$this->content));
	}

/**
*Taille Fichier
*
* retourne la taille du fichier
* @access public
* @return entier taille en octets
*/
	function fileSize()
	{
		return sizeof($this->fileStream);
	}

/**
*Ajouter une ligne au fichier
*
* Ajoute la ligne spécifiée en parametre a la fin du fichier
*
* @access public
* @param chaine ligne a ajouter .
* @return booléen Ajout réussi
*/
	function addLine($string)
	{
		if ($this->fileStream)
		{
			fseek($this->fileStream,0,SEEK_END);
			return fwrite($this->fileStream,$string.chr(13).chr(10));
		}
		else
		{
			return false;
		}
	}

/**
*Fermer un fichier
*
* Fermeture de flux et désallocation des variables
* @access public
* @return booleen
*/
	function close()
	{
		unset($this->content);
		fclose($this->fileStream);
		return true;
	}
}
?>
