<?php
/*
 LICENSE

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License (GPL)
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 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.  See the
 GNU General Public License for more details.

 To read the license please visit http://www.gnu.org/copyleft/gpl.html
 ----------------------------------------------------------------------
 Original Author of file: Lerider Steven
 Purpose of file: Manage generic actions.
 ----------------------------------------------------------------------
*/
/**
 * 
 * @copyright    AlternC-Team 2002-2013 http://alternc.org/
 */
class m_action {
  /*---------------------------------------------------------------------------*/
  /** Constructor
  */
  function m_action() {
  }
  /*
  * function to set the cration of a file 
  */
  function create_file($file,$content="",$user="root") {
    return $this->set('create_file',$user, array('file'=>$file,'content'=>$content));
  }
  /*
  * function to set the cration of a file 
  */
  function create_dir($dir,$user="root") {
    return $this->set('create_dir',$user, array('dir'=>$dir));
  }
  /*
  * function to delete file / folder
  */
  function del($dir) {
    return $this->set('delete',$user, array('dir'=>$dir));
  }
  /*
  * function returning the first not locked line of the action table 
  */
  function move($src,$dst,$user="root") {
    return $this->set('move',$user, array('src'=>$src, 'dst'=>$dst));
  }
  /*
  * function archiving a directory ( upon account deletion )
  */
  function archive($archive,$dir) {
    global $cuid,$db,$err;
    $db->query("select login from membres where uid=$cuid;");    
    $db->next_record();
    if (!$db->Record["login"]) {
      $err->raise("action",_("Login corresponding to $cuid not found"));
      return false;
    }
    $uidlogin=$cuid."-".$db->Record["login"];

    $BACKUP_DIR="/tmp/backup/";
    //utiliser la function move après avoir construit le chemin
    $today=getdate();
    $dest=$BACKUP_DIR.'/'.$today["year"].'-'.$today["mon"].'/'.$uidlogin.'/'.$dir;
    $this->move($archive,$dest);
  }
  /*
  *function inserting the action in the sql table 
  */
  function set($type,$user,$parameters) {
    global $db,$err;
    
    $serialized=serialize($parameters);
    switch($type){
    case 'create_file':
      //do some shit
      $query="insert into actions values ('','CREATE_FILE','$serialized',now(),'','','$user','');"; 
      break;
    case 'create_dir':
     //do more shit
      $query="insert into actions values ('','CREATE_DIR','$serialized',now(),'','','$user','');"; 
      break;
    case 'move':
     //do more shit
      $query="insert into actions values ('','MOVE','$serialized',now(),'','','$user','');"; 
      break;
    case 'delete':
     //do more shit
      $query="insert into actions values ('','DELETE','$serialized',now(),'','','$user','');"; 
      break;
    default:
      return false;
    }
		if(!$db->query($query)){ 
      $err->raise("action",_("Error setting actions"));
			return false;
    }
    $purge="delete from actions where HOUR(now()) - HOUR(creation) > 1;";
		if(!$db->query($purge)){ 
      $err->raise("action",_("Error purging old actions"));
			return false;
    }
    return true;

  }

  /*
  * function returning the first not locked line of the action table 
  */
  function get_action() {
    global $db,$err;

    $tab=array();
    $db->query('select * from actions where end =0 and begin = 0 order by id limit 1;');
    if ($db->next_record()){
      $tab[]=$db->Record;
      return $tab;
    }else{
      $err->raise("action",_("Error selecting new action"));
      return false;
    }
  }
  /*
  * function locking an entry while it is being executed by the action script
  */
  function begin($id) {
    global $db,$err;
    if($db->query("update actions set begin=now() where id=$id ")){
      $err->raise("action",_("Error in setting locking the action : $id"));
      return false;
    }
    return true;
  }
  /*
  * function locking an entry while it is being executed by the action script
  */
  function finish($id,$return=0) {
    global $db,$err;
    $return=intval($return);
    if($db->query("update actions set end=now(),status=$return where id=$id")){
      $err->raise("action",_("Error unlocking the action : $id"));
      return false;
    }
    return true;
  }
  /*
  * function locking an entry while it is being executed by the action script
  */
  function cancel($id) {
    global $db;
    $this->finish($id, 666);
    return true;
  }

} /* Class action */

?>