<?php

/**
 * Module qui gère l'effacement automatique des données inutiles en base de donnée
 * 
 * @author Olivier Arteau
 */

class BDCleanup implements Module {
	private $CLEANUP_RATE = 3600; // 3600 = 1 heures //
	
	public function executerCommande(array $param, StatusObject $status) {
		if (filemtime('logs/bdcleanuplogs.txt')  < time() - $this->CLEANUP_RATE) {
			$bd = BDConnexion::getBDConnexion();
			$time = explode(" ",microtime());
		   	$microtime = floor($time[1]*1000 + $time[0]*1000);
			
			$output = 'Cleanup de la base de donnée effectué à : ';
			$output .= date('d/m/y à H:i:s');
			$output .= "\n";
			
			// Effacement des entrées inutiles de la table message //
			$sql = 'DELETE FROM messages WHERE timestamp < ?';
			$parametre = array($microtime - (PING_TIMEOUT*1000));
			$bd->execQuery($sql, $parametre);
			
			$sql = 'SELECT ROW_COUNT() AS nbDeleted';
			$resultat = $bd->execQuerySelect($sql, array());
			
			$output .= 'Table message : ' . $resultat[0]['nbDeleted'] . ' entrée(s) supprimée(s)' . "\n";
			
			// Effacement des entrées inutiles de la table utilisateur et occupation //
			$sql = 'DELETE utilisateurs u, occupation o FROM occupation o INNER JOIN utilisateurs u WHERE u.id=o.utilisateurID AND u.lastping < ?';
			$parametre = array(time() - PING_TIMEOUT);
			$bd->execQuery($sql, $parametre);
			
			$sql = 'SELECT ROW_COUNT() AS nbDeleted';
			$resultat = $bd->execQuerySelect($sql, array());
			
			$output .= 'Table utilisateurs et occupation : ' . $resultat[0]['nbDeleted'] . ' entrée(s) supprimée(s).' . "\n";
			
			// Effacement des utilisateurs sans occupation //
			$sql = 'DELETE FROM utilisateurs WHERE lastping < ?';
			$parametre = array(time() - PING_TIMEOUT);
			$bd->execQuery($sql, $parametre);
			
			$sql = 'SELECT ROW_COUNT() AS nbDeleted';
			$resultat = $bd->execQuerySelect($sql, array());
			
			$output .= 'Utilisateur(s) sans occupation : ' . $resultat[0]['nbDeleted'] . ' entrée(s) supprimée(s).' . "\n";
			
			// Création d'un log des entrées supprimées //
			$file = fopen('logs/bdcleanuplogs.txt', 'a');
			fwrite($file, $output . "\n------------------------\n");
			fclose($file);
		}
	}
	
    public function onStatusChange(array $param, StatusObject $newStatus) {
    	
    }
    
    public function getCommandesEnregistre() {
    	return array(ALL_COMMANDE);
    }
    
    public function finalize(array $param, StatusObject $status) {
    	
    }
}

PAFServer::getInstance()->enregistrerModule(new BDCleanup());
?>