* 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 "$val"; } 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és au préfixe correspondant : for($i=0;$i<$cnt;$i++) { $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 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 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); } $lo=$mem->user["login"]; $l=substr($lo,0,1); $db->query("UPDATE stats2 SET folder='/var/alternc/html/$l/$lo/$folder', mid='$cuid' WHERE id='$id';"); 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); } $lo=$mem->user["login"]; $l=substr($lo,0,1); if ($quota->cancreate("sta2")) { $db->query("INSERT INTO stats2 (hostname,folder,mid) VALUES ('$hostname','/var/alternc/html/$l/$lo/$dir','$cuid')"); 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 ;) */ function alternc_export_conf() { global $db,$err; $err->log("sta2","export"); $f=$this->get_list_raw(); $str="\n"; foreach ($f as $d) { $str.=" \n"; $str.=" ".($s[hostname])."\n"; $str.=" ".($s[folder])."\n"; $str.=" \n"; } $str.="\n"; return $str; } } /* CLASSE m_sta2 */ ?>