[fix] Documents and tweaks m_action

This commit is contained in:
alban 2014-03-23 15:15:33 +01:00
parent ae490904ea
commit 6dd6094b71
1 changed files with 349 additions and 239 deletions

View File

@ -1,258 +1,368 @@
<?php <?php
/* /*
LICENSE LICENSE
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License (GPL) modify it under the terms of the GNU General Public License (GPL)
as published by the Free Software Foundation; either version 2 as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version. of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. 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.
----------------------------------------------------------------------
*/
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 * 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. * 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. * 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} * Copyleft {@link http://alternc.org/ AlternC Team}
* *
* @copyright AlternC-Team 2013-8-13 http://alternc.org/ * @copyright AlternC-Team 2013-8-13 http://alternc.org/
* *
*/ */
class m_action { class m_action {
/*---------------------------------------------------------------------------*/ /* --------------------------------------------------------------------------- */
/** Constructor
*/
function m_action() {
}
/* /** Constructor
* function to set the cration of a file */
*/ function m_action() {
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(); * Plans the cration of a file
if (!$db->Record["login"]) { *
$err->raise("action",_("Login corresponding to $cuid not found")); * @global type $err
return false; * @global type $L_INOTIFY_DO_ACTION
* @return boolean
*/
function do_action() {
global $err, $L_INOTIFY_DO_ACTION;
$err->log("action", "do_action");
if( ! touch($L_INOTIFY_DO_ACTION) ){
return FALSE;
}
return TRUE;
} }
$uidlogin=$cuid."-".$db->Record["login"];
//The path will look like /<archive_del_data>/YYYY-MM/<uid>-<login>/<folder> /**
$today=getdate(); * Plans a file creation
$dest=$BACKUP_DIR.'/'.$today["year"].'-'.$today["mon"].'/'.$uidlogin.'/'.$dir; *
$this->move($archive,$dest); * @param string $file
return true; * @param string $content
} * @param int $user
* @return boolean
*/
function create_file($file, $content = "", $user = "root") {
return $this->set('create_file', $user, array('file' => $file, 'content' => $content));
}
/* /**
*function inserting the action in the sql table * Plans the cration of a dir
*/ *
function set($type,$user,$parameters) { * @param string $dir
global $db,$err; * @param int $user
$err->log("action","set",$type); * @return boolean
*/
function create_dir($dir, $user = "root") {
return $this->set('create_dir', $user, array('dir' => $dir));
}
/**
* Plans a perms fix upon user creation
* @param int $uid
* @param string $user
* @return boolean
*/
function fix_user($uid, $user = "root") {
return $this->set('fix_user', $user, array('uid' => $uid));
}
/**
* Plans a dir fix
*
* @param type $dir
* @param type $user
* @return type
*/
function fix_dir($dir, $user = "root") {
return $this->set('fix_dir', $user, array('dir' => $dir));
}
/**
* Plans a file fix
*
* @param type $file
* @param type $user
* @return type
*/
function fix_file($file, $user = "root") {
return $this->set('fix_file', $user, array('file' => $file));
}
/**
* function to delete file / folder
*
* @param type $dir
* @param type $user
* @return type
*/
function del($dir, $user = "root") {
return $this->set('delete', $user, array('dir' => $dir));
}
/**
* function returning the first not locked line of the action table
*
* @param type $src
* @param type $dst
* @param type $user
* @return type
*/
function move($src, $dst, $user = "root") {
return $this->set('move', $user, array('src' => $src, 'dst' => $dst));
}
/**
*
* function archiving a directory ( upon account deletion )
*
* @global type $cuid
* @global type $db
* @global type $err
* @param type $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 type $dir sub_directory of the archive directory
* @return boolean
*/
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
*
* @global type $db
* @global type $err
* @param type $type
* @param type $user
* @param type $parameters
* @return boolean
*/
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;
}
/**
* This seems to be unused ?
*
* @global type $err
* @global type $db
* @param type $all
* @return boolean
*/
function get_old($all = null) {
global $err, $db;
$purge = "select * from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2;";
$result = $db->query($purge);
if (! $result) {
$err->raise("action", _("Error selecting old actions"));
return false;
}
return $db->num_rows($result) ;
}
/**
*
* @global type $err
* @global type $db
* @param type $all
* @return boolean
*/
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;";
}
$result = $db->query($purge);
if (! $result) {
$err->raise("action", _("Error purging old actions"));
return false;
}
return $db->num_rows($result) ;
}
/**
* function returning the first not locked line of the action table
*
* @global type $db
* @global type $err
* @return boolean or array
*/
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
*
* @global type $db
* @global type $err
* @param type $id
* @return boolean
*/
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
*
* @global type $db
* @global type $err
* @param type $id
* @param type $return
* @return boolean
*/
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;
}
$serialized=serialize($parameters); /**
switch($type){ *
case 'create_file': * @global type $db
$query="insert into actions values ('','CREATE_FILE','$serialized',now(),'','','$user','');"; * @global type $err
break; * @param type $id
case 'create_dir': * @return boolean
$query="insert into actions values ('','CREATE_DIR','$serialized',now(),'','','$user','');"; */
break; function reset_job($id) {
case 'move': global $db, $err;
$query="insert into actions values ('','MOVE','$serialized',now(),'','','$user','');"; if (!$db->query("update actions set end=0,begin=0,status='' where id=$id ;")) {
break; $err->raise("action", _("Error unlocking the action : $id"));
case 'fix_user': return false;
$query="insert into actions values ('','FIX_USER','$serialized',now(),'','','$user','');"; }
break; return true;
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; /**
} * Returns a list of actions marked as executable and ready for execution
*
function get_old($all= null){ * @global type $db
global $err,$db; * @global type $err
* @return boolean
$purge="select * from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2;"; */
if(!$db->query($purge)){ function get_job() {
$err->raise("action",_("Error selecting old actions")); global $db, $err;
return false; $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 purge($all=null){ /**
global $err,$db; * function locking an entry while it is being executed by the action script
if(is_null($all)){ *
$purge="delete from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2 and status = 0;"; * @global type $db
}else{ * @param type $id
$purge="delete from actions where TO_DAYS(curdate()) - TO_DAYS(creation) > 2;"; * @return boolean
} */
if(!$db->query($purge)){ function cancel($id) {
$err->raise("action",_("Error purging old actions")); global $db;
return false; $this->finish($id, 666);
return true;
} }
}
/* }
* function returning the first not locked line of the action table
*/
function get_action() {
global $db,$err;
$tab=array(); /* Class action */
$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 */
?>