259 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?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.
 | 
						|
 ----------------------------------------------------------------------
 | 
						|
*/
 | 
						|
/**
 | 
						|
* This class manage actions to be performed on the file system on behalf of alternc Classes
 | 
						|
* It primary use is to store the actions to be performed ( creating file or folder, deleting, setting permissions etc..) in the action sql table. 
 | 
						|
* The script /usr/lib/alternc/do_actions.php handled by cron and incron is then used to perform those actions.
 | 
						|
* 
 | 
						|
* Copyleft {@link http://alternc.org/ AlternC Team}
 | 
						|
* 
 | 
						|
* @copyright    AlternC-Team 2013-8-13 http://alternc.org/
 | 
						|
* 
 | 
						|
*/
 | 
						|
class m_action {
 | 
						|
  /*---------------------------------------------------------------------------*/
 | 
						|
  /** Constructor
 | 
						|
  */
 | 
						|
  function m_action() {
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  * function to set the cration of a file 
 | 
						|
  */
 | 
						|
  function do_action(){
 | 
						|
    global $err, $L_INOTIFY_DO_ACTION;
 | 
						|
    $err->log("action","do_action");
 | 
						|
    touch($L_INOTIFY_DO_ACTION);
 | 
						|
  }
 | 
						|
 | 
						|
  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 set the perms upon user creation
 | 
						|
  */
 | 
						|
  function fix_user($uid,$user="root") {
 | 
						|
    return $this->set('fix_user',$user, array('uid'=>$uid));
 | 
						|
  }
 | 
						|
  /*
 | 
						|
  * function to set the cration of a file 
 | 
						|
  */
 | 
						|
  function fix_dir($dir,$user="root") {
 | 
						|
    return $this->set('fix_dir',$user, array('dir'=>$dir));
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  * function to set the cration of a file 
 | 
						|
  */
 | 
						|
  function fix_file($file,$user="root") {
 | 
						|
    return $this->set('fix_file',$user, array('file'=>$file));
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  * function to delete file / folder
 | 
						|
  */
 | 
						|
  function del($dir,$user="root") {
 | 
						|
    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 )
 | 
						|
  * @param: $archive : directory to archive within the archive_del_data folder if set in variable sql table.
 | 
						|
  * If archive_del_data is not set we delete the folder.
 | 
						|
  * @param: $dir : sub_directory of the archive directory
 | 
						|
  */
 | 
						|
  function archive($archive,$dir="html") {
 | 
						|
    global $cuid,$db,$err;
 | 
						|
 | 
						|
    $arch=variable_get('archive_del_data');
 | 
						|
    if(empty($arch)) {
 | 
						|
      $this->del($archive);
 | 
						|
      return true; 
 | 
						|
    }
 | 
						|
    $BACKUP_DIR=$arch;
 | 
						|
    $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"];
 | 
						|
 | 
						|
    //The path will look like /<archive_del_data>/YYYY-MM/<uid>-<login>/<folder>
 | 
						|
    $today=getdate();
 | 
						|
    $dest=$BACKUP_DIR.'/'.$today["year"].'-'.$today["mon"].'/'.$uidlogin.'/'.$dir;
 | 
						|
    $this->move($archive,$dest);
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  *function inserting the action in the sql table 
 | 
						|
  */
 | 
						|
  function set($type,$user,$parameters) {
 | 
						|
    global $db,$err;
 | 
						|
    $err->log("action","set",$type);
 | 
						|
    
 | 
						|
    $serialized=serialize($parameters);
 | 
						|
    switch($type){
 | 
						|
    case 'create_file':
 | 
						|
      $query="insert into actions values ('','CREATE_FILE','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'create_dir':
 | 
						|
      $query="insert into actions values ('','CREATE_DIR','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'move':
 | 
						|
      $query="insert into actions values ('','MOVE','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'fix_user':
 | 
						|
      $query="insert into actions values ('','FIX_USER','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'fix_file':
 | 
						|
      $query="insert into actions values ('','FIX_FILE','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'fix_dir':
 | 
						|
      $query="insert into actions values ('','FIX_DIR','$serialized',now(),'','','$user','');"; 
 | 
						|
      break;
 | 
						|
    case 'delete':
 | 
						|
      $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;
 | 
						|
    }
 | 
						|
    $this->do_action();
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
  
 | 
						|
  function get_old($all= null){
 | 
						|
    global $err,$db;
 | 
						|
 | 
						|
    $purge="select * from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2;";
 | 
						|
		if(!$db->query($purge)){ 
 | 
						|
      $err->raise("action",_("Error selecting  old actions"));
 | 
						|
			return false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  function purge($all=null){
 | 
						|
    global $err,$db;
 | 
						|
    if(is_null($all)){
 | 
						|
      $purge="delete from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2 and status = 0;";
 | 
						|
    }else{
 | 
						|
      $purge="delete from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2;";
 | 
						|
   }
 | 
						|
		if(!$db->query($purge)){ 
 | 
						|
      $err->raise("action",_("Error purging old actions"));
 | 
						|
			return false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  * 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{
 | 
						|
      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 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;
 | 
						|
    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 reset_job($id) {
 | 
						|
    global $db,$err;
 | 
						|
    if(!$db->query("update actions set end=0,begin=0,status='' where id=$id ;")){
 | 
						|
      $err->raise("action",_("Error unlocking the action : $id"));
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  function get_job() {
 | 
						|
    global $db,$err;
 | 
						|
		$tab=array();
 | 
						|
    $db->query("Select * from actions where begin !=0 and end = 0 ;");
 | 
						|
    if ($db->next_record()){
 | 
						|
      $tab[]=$db->Record;
 | 
						|
      return $tab;
 | 
						|
    }else{
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /*
 | 
						|
  * 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 */
 | 
						|
 | 
						|
?>
 |