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 global variable folder if set. * If archive_del_data is not set we delete the folder. * @param: $dir : sub_directory of the archive directory */ function archive($archivei,$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 //YYYY-MM/-/ $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 ('','FIXUSER','$serialized',now(),'','','$user','');"; break; case 'fix_file': $query="insert into actions values ('','FIXFILE','$serialized',now(),'','','$user','');"; break; case 'fix_dir': $query="insert into actions values ('','FIXDIR','$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 */ ?>