2006-04-26 12:28:53 +00:00
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
$Id: m_sta2.php,v 1.10 2005/12/18 09:51:32 benjamin Exp $
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
AlternC - Web Hosting System
|
|
|
|
|
Copyright (C) 2002 by the AlternC Development Team.
|
|
|
|
|
http://alternc.org/
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
Based on:
|
|
|
|
|
Valentin Lacambre's web hosting softwares: http://altern.org/
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
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: Benjamin Sonntag
|
|
|
|
|
Purpose of file: Manage raw apache log availability for the users
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This class manages raw Apache log file for the end users.
|
|
|
|
|
*
|
|
|
|
|
* This class allow each AlternC's account to get its raw apache log
|
|
|
|
|
* file put in its user space every day. <br>
|
|
|
|
|
* The file is stored in the user space and will grow from time to time...
|
|
|
|
|
*
|
|
|
|
|
* @copyright AlternC's Team 2002-2005 http://alternc.org/
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
class m_sta2 {
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/**
|
|
|
|
|
* Constructor, dummy
|
|
|
|
|
*/
|
|
|
|
|
function m_sta2() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Hook function that returns the quota names for this class
|
|
|
|
|
*
|
|
|
|
|
* @return string the quota names for this class
|
|
|
|
|
*/
|
|
|
|
|
function alternc_quota_names() {
|
|
|
|
|
return "sta2";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Returns the list of domains and/or subdomains for this account
|
|
|
|
|
*
|
|
|
|
|
* @return array returns an array with all the domains / subdomains for this account.
|
|
|
|
|
*/
|
|
|
|
|
function host_list() {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$r=array();
|
|
|
|
|
$db->query("SELECT domaine,sub FROM sub_domaines WHERE compte='$cuid' ORDER BY domaine,sub;");
|
|
|
|
|
while ($db->next_record()) {
|
|
|
|
|
if ($db->f("sub")) {
|
|
|
|
|
$r[]=$db->f("sub").".".$db->f("domaine");
|
|
|
|
|
} else {
|
|
|
|
|
$r[]=$db->f("domaine");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $r;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Draw option html tags of ths allowed domains / subdomains for the account.
|
|
|
|
|
*
|
|
|
|
|
* @param $current string The current selected value in the list
|
|
|
|
|
*/
|
|
|
|
|
function select_host_list($current) {
|
|
|
|
|
$r=$this->host_list();
|
|
|
|
|
reset($r);
|
|
|
|
|
while (list($key,$val)=each($r)) {
|
|
|
|
|
if ($current==$val) $c=" selected=\"selected\""; else $c="";
|
|
|
|
|
echo "<option$c>$val</option>";
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Hook function that delete a user's raw stats.
|
|
|
|
|
*/
|
|
|
|
|
function alternc_del_member() {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$err->log("sta2","del_member");
|
|
|
|
|
$db->query("DELETE FROM stats2 WHERE mid='$cuid';");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Hook function that delete a user's domain, called by m_dom.
|
|
|
|
|
* @param string $dom is the domain that is to be deleted.
|
|
|
|
|
*/
|
|
|
|
|
function alternc_del_domain($dom) {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$err->log("sta2","del_dom",$dom);
|
|
|
|
|
// Suppression des stats apache brutes :
|
|
|
|
|
$db->query("SELECT * FROM stats2 WHERE mid='$cuid' AND hostname like '%$dom'");
|
|
|
|
|
$cnt=0;
|
|
|
|
|
$t=array();
|
|
|
|
|
while ($db->next_record()) {
|
|
|
|
|
$cnt++;
|
|
|
|
|
$t[]=$db->f("hostname");
|
|
|
|
|
}
|
|
|
|
|
// on d<>truit les jeux de stats associ<63>s au pr<70>fixe correspondant :
|
2012-06-25 07:59:29 +00:00
|
|
|
|
for($i=0;$i<$cnt;$i++) {
|
2006-04-26 12:28:53 +00:00
|
|
|
|
$db->query("DELETE FROM stats2 WHERE mid='$cuid' AND hostname='".$t[$i]."';");
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Returns an array with the user's raw stat list
|
|
|
|
|
* The returned array is as follow :
|
|
|
|
|
* $r[0-n]["id"] = Id of the raw stat set.
|
|
|
|
|
* $r[0-n]["hostname"]= Domain
|
|
|
|
|
* $r[0-n]["folder"]= Destination's folder (in the user space)
|
|
|
|
|
*
|
|
|
|
|
* @return array Returns the array or FALSE if an error occured.
|
|
|
|
|
*/
|
|
|
|
|
function get_list_raw() {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$err->log("sta2","get_list_raw");
|
|
|
|
|
$r=array();
|
|
|
|
|
$db->query("SELECT id, hostname, folder FROM stats2 WHERE mid='$cuid' ORDER BY hostname;");
|
|
|
|
|
if ($db->num_rows()) {
|
|
|
|
|
while ($db->next_record()) {
|
|
|
|
|
// We skip /var/alternc/html/u/user
|
2012-08-21 17:04:24 +00:00
|
|
|
|
// FIXME: utiliser ALTERNC_HTML au lieu de /var/alternc/html/
|
2006-04-26 12:28:53 +00:00
|
|
|
|
preg_match("/^\/var\/alternc\/html\/.\/[^\/]*\/(.*)/", $db->f("folder"),$match);
|
|
|
|
|
$r[]=array(
|
|
|
|
|
"id"=>$db->f("id"),
|
|
|
|
|
"hostname"=>$db->f("hostname"),
|
|
|
|
|
"folder"=>$match[1]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return $r;
|
|
|
|
|
} else {
|
|
|
|
|
$err->raise("sta2",2);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Get the details of a raw statistic set.
|
|
|
|
|
*
|
|
|
|
|
* This function returns the details of a raw statistic set (raw logs)
|
|
|
|
|
* The returned value is an associative array as follow :
|
|
|
|
|
* $ret["id"] = raw stat id.
|
|
|
|
|
* $ret["hostname"] = the domain we get the raw log.
|
|
|
|
|
* $ret["folder"] = the destination folder for the logs (inside the user space)
|
|
|
|
|
* @param $id string The raw stat number we want details of.
|
|
|
|
|
* @return array returns an array with the raw log parameters or FALSE if an error occured.
|
|
|
|
|
*/
|
|
|
|
|
function get_stats_details_raw($id) {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$err->log("sta2","get_stats_details_raw",$id);
|
|
|
|
|
$r=array();
|
|
|
|
|
$db->query("SELECT id, hostname, folder FROM stats2 WHERE mid='$cuid' AND id='$id';");
|
|
|
|
|
if ($db->num_rows()) {
|
|
|
|
|
$db->next_record();
|
|
|
|
|
// We skip /var/alternc/html/u/user
|
2012-08-21 17:04:24 +00:00
|
|
|
|
// FIXME: utiliser ALTERNC_HTML au lieu de /var/alternc/html/
|
2006-04-26 12:28:53 +00:00
|
|
|
|
preg_match("/^\/var\/alternc\/html\/.\/[^\/]*\/(.*)/", $db->f("folder"),$match);
|
|
|
|
|
return array(
|
|
|
|
|
"id"=>$db->f("id"),
|
|
|
|
|
"hostname"=> $db->f("hostname"),
|
|
|
|
|
"folder"=>$match[1]
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
$err->raise("sta2",3);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Edit a raw statistic set.
|
|
|
|
|
*
|
|
|
|
|
* This function edit a raw statistic set.
|
|
|
|
|
* $folder is the new destination folder inside the user space where the log
|
|
|
|
|
* file will be put.
|
|
|
|
|
* @param $id integer The raw statistic number we are changing
|
|
|
|
|
* @param $folder string new destination folder
|
|
|
|
|
* @return boolean TRUE if the set has been changed, FALSE if an error occured.
|
|
|
|
|
*/
|
|
|
|
|
function put_stats_details_raw($id,$folder) {
|
|
|
|
|
global $db,$err,$bro,$mem,$cuid;
|
|
|
|
|
$err->log("sta2","put_stats_details_raw",$id);
|
|
|
|
|
$db->query("SELECT count(*) AS cnt FROM stats2 WHERE id='$id' and mid='$cuid';");
|
|
|
|
|
$db->next_record();
|
|
|
|
|
if (!$db->f("cnt")) {
|
|
|
|
|
$err->raise("sta2",3);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// TODO : replace with ,1 on convertabsolute call, and delete "/Var/alternc.../" at the query. ???
|
|
|
|
|
$folder=$bro->convertabsolute($folder);
|
|
|
|
|
if (substr($folder,0,1)=="/") {
|
|
|
|
|
$folder=substr($folder,1);
|
|
|
|
|
}
|
2012-08-21 17:04:24 +00:00
|
|
|
|
$db->query("UPDATE stats2 SET folder='".getuserpath()."/$folder', mid='$cuid' WHERE id='$id';");
|
2006-04-26 12:28:53 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Delete a raw statistic set
|
|
|
|
|
*
|
|
|
|
|
* This function erase the raw statistic set pointed to by $id.
|
|
|
|
|
* The raw log files that may be present in the folder will NOT be deleted.
|
|
|
|
|
* @param $id integer is the set that has to be deleted.
|
|
|
|
|
* @return boolean TRUE if the raw stat has been deleted, FALSE if an error occured.
|
|
|
|
|
*/
|
|
|
|
|
function delete_stats_raw($id) {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
$err->log("sta2","delete_stats_raw",$id);
|
|
|
|
|
$db->query("SELECT hostname FROM stats2 WHERE id='$id' and mid='$cuid';");
|
|
|
|
|
if (!$db->num_rows()) {
|
|
|
|
|
$err->raise("sta2",3);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
$db->next_record();
|
|
|
|
|
$db->query("DELETE FROM stats2 WHERE id='$id'");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Create a new raw statistic set (raw log)
|
|
|
|
|
* This function create a new raw log set for the current user.
|
|
|
|
|
* The raw statistics allow any user to get its raw apache log put daily in
|
|
|
|
|
* one of its folders in its user space.
|
|
|
|
|
* @param $hostname string this is the domain name (hosted by the current user)
|
|
|
|
|
* for which we want raw logs
|
|
|
|
|
* @param $dir string this is the folder where we will put the raw log files.
|
|
|
|
|
* @return boolean TRUE if the set has been created, or FALSE if an error occured.
|
|
|
|
|
*/
|
|
|
|
|
function add_stats_raw($hostname,$dir) {
|
|
|
|
|
global $db,$err,$quota,$bro,$mem,$cuid;
|
|
|
|
|
$err->log("sta2","add_stats_raw",$hostname);
|
|
|
|
|
// TODO : utiliser le second param de convertabsolute pour simplification.
|
|
|
|
|
$dir=$bro->convertabsolute($dir);
|
|
|
|
|
if (substr($dir,0,1)=="/") {
|
|
|
|
|
$dir=substr($dir,1);
|
|
|
|
|
}
|
|
|
|
|
if ($quota->cancreate("sta2")) {
|
2012-08-21 17:04:24 +00:00
|
|
|
|
$db->query("INSERT INTO stats2 (hostname,folder,mid) VALUES ('$hostname','".getuserpath()."/$dir','$cuid')");
|
2006-04-26 12:28:53 +00:00
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
$err->raise("sta2",1);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/** Quota computing Hook function
|
|
|
|
|
* This is the quota computing hook function for sta2. It computes the
|
|
|
|
|
* used quota of raw stats for the current user.
|
|
|
|
|
* @param $name string name of the quota
|
|
|
|
|
* @return integer the number of service used or false if an error occured
|
|
|
|
|
* @access private
|
|
|
|
|
*/
|
|
|
|
|
function alternc_get_quota($name) {
|
|
|
|
|
global $db,$err,$cuid;
|
|
|
|
|
if ($name=="sta2") {
|
|
|
|
|
$err->log("sta2","get_quota");
|
|
|
|
|
$db->query("SELECT COUNT(*) AS cnt FROM stats2 WHERE mid='$cuid'");
|
|
|
|
|
$db->next_record();
|
|
|
|
|
return $db->f("cnt");
|
|
|
|
|
} else return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------- */
|
|
|
|
|
/**
|
|
|
|
|
* Exporte toutes les informations states brutes du compte.
|
|
|
|
|
* @access private
|
|
|
|
|
* EXPERIMENTAL 'sid' function ;)
|
|
|
|
|
*/
|
2012-02-28 14:48:45 +00:00
|
|
|
|
function alternc_export_conf() {
|
2006-04-26 12:28:53 +00:00
|
|
|
|
global $db,$err;
|
|
|
|
|
$err->log("sta2","export");
|
2012-02-28 14:48:45 +00:00
|
|
|
|
$f=$this->get_list_raw();
|
2006-04-26 12:28:53 +00:00
|
|
|
|
$str="<sta2>\n";
|
|
|
|
|
foreach ($f as $d) {
|
|
|
|
|
$str.=" <stats>\n";
|
2012-02-28 14:48:45 +00:00
|
|
|
|
$str.=" <hostname>".($s[hostname])."</hostname>\n";
|
|
|
|
|
$str.=" <folder>".($s[folder])."</folder>\n";
|
2006-04-26 12:28:53 +00:00
|
|
|
|
$str.=" </stats>\n";
|
|
|
|
|
}
|
|
|
|
|
$str.="</sta2>\n";
|
|
|
|
|
return $str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} /* CLASSE m_sta2 */
|
|
|
|
|
|
2012-02-28 14:48:45 +00:00
|
|
|
|
?>
|