<?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 */ ?>