<?
/*
HPE - News Portal Engine
Copyright (C) 2000-2001 Mike Krus
This program is free software; it 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.
READ LICENSE.TXT IN THE BASE DIRECTORY FOR INFORMATION
ABOUT REDISTRIBUTING THIS SOURCE CODE
*/
require_once ("$HPEinc/xmltree.inc");
class HPEUserInfo
{
var $userid = -1;
var $userlogin = "nobody";
var $name = "";
var $level = 1;
var $nbpages = 0;
var $email = "";
var $lang = "en";
var $theme = 0;
var $ugroup = 0;
var $isadmin = 0;
var $iseditor = 0;
var $iswebmaster = 0;
var $showdesc = 1;
var $showdate = 1;
var $extwin = 0;
var $mailhtml = 1;
var $post2manila = 1;
var $post2radio = 1;
var $post2blogger = 1;
var $webmastertag = "";
var $webmastersite = "";
var $prefpagetype = "newsbox";
var $pages;
var $restrictlang = "";
var $nosmarttags = 0;
var $services = array();
function HPEUserInfo()
{
$this->pages = array();
$this->init(0, false);
}
function makecachepath($id, $ext="xml")
{
global $HPEinc;
global $HPEtheConfig;
global $HPEtheDB;
$cache = "$HPEtheConfig->cachepath/$HPEtheDB->dbtusers/";
$cache .= sprintf("%03d", ($id % 100));
if(!@is_dir($cache)) mkdir($cache, 0777);
if(!@is_writable($cache)) die("Can't write to dir $cache");
$cache .= "/$id.$ext";
return $cache;
}
function init($id, $validate = true)
{
global $HPEtheDB;
global $HPEtheConfig;
global $HPEinc;
$this->nbpages = 0;
$data = "";
if($id)
{
$row = $HPEtheDB->one_array("SELECT * FROM $HPEtheDB->dbtusers WHERE userid=$id;");
if($row)
{
if($row["data"] != "")
$data = $row["data"];
}
else $id = 0;
}
if($data == "")
{
if(file_exists("$HPEtheConfig->localpath/$HPEtheDB->dbtusers.guest.xml"))
$cache = "$HPEtheConfig->localpath/$HPEtheDB->dbtusers.guest.xml";
else $cache = "$HPEinc/$HPEtheDB->dbtusers.guest.xml";
if(file_exists($cache))
{
$cf = fopen($cache, "r");
if($cf)
{
$data = fread($cf, filesize ($cache));
fclose($cf);
$data = str_replace("DEFTHEME", $HPEtheConfig->deftheme, $data);
$data = str_replace("DEFLANG", $HPEtheConfig->deflang, $data);
}
}
}
if($data == "")
{
if($HPEtheConfig->hasemail)
mail($HPEtheConfig->adminemail, "Bad User data for user $id", "Bad User data for user $id", "From: $HPEtheConfig->adminemail");
die("No data for user $id");
}
else $this->UnSerializeFromXML($data);
$this->userid = $id;
if($this->ugroup & HPEUserGrpAdmin)
$this->isadmin = true;
if($this->ugroup & HPEUserGrpEditor)
$this->iseditor = true;
if($this->ugroup & HPEUserGrpWebmaster)
$this->iswebmaster = true;
if(($this->ugroup & HPEUserGrpAdmin) || ($this->ugroup & HPEUserGrpEditor))
$this->level = 9;
elseif($this->userid > 0)
$this->level = 2;
else $this->level = 1;
include $GLOBALS["HPEinc"] . "/lang/en.php";
if($this->lang != "en")
include $GLOBALS["HPEinc"] . "/lang/" . $this->lang . ".php";
}
function ValidateSession()
{
global $HPEtheConfig;
if($HPEtheConfig->adminuser != "" && ereg($HPEtheConfig->adminuser, $this->userlogin))
$this->isadmin = true;
if($this->isadmin)
$this->iseditor = true;
$needsave = 0;
reset($HPEtheConfig->userservices);
while (list ($key, $val) = each ($HPEtheConfig->userservices))
{
if(isset($this->services[$key]))
$res = $HPEtheConfig->userservices[$key]["control"]->ValidateSession($this, $this->services[$key]);
else
$res = $HPEtheConfig->userservices[$key]["control"]->ValidateSession($this, "");
if($res == -1)
break;
if($res == 1)
$needsave = 1;
}
reset($HPEtheConfig->userservices);
if($needsave)
$this->save();
}
function save($passwd = "")
{
if($this->userid == 0) return "";
$this->lang = strtolower($this->lang);
global $HPEinc;
global $HPEtheConfig;
global $HPEtheDB;
@unlink($this->makecachepath($this->userid, "xml"));
$data = &$this->SerializeToXML();
$query = "UPDATE $HPEtheDB->dbtusers SET " .
"name=" . $HPEtheDB->escapeString($this->name) . ", " .
"ugroup=$this->ugroup, " .
"email='$this->email', " .
"data=" . $HPEtheDB->escapeString($data) . ", " .
"modified='" . date("ymd") . "'";
if($passwd != "")
$query .= ", passwd=" . $HPEtheDB->escapeString($passwd);
$query .= " WHERE userid=$this->userid";
$res = $HPEtheDB->query($query);
if($HPEtheDB->iserror($res) || $HPEtheDB->getaffectedrowcount() == 0)
return $HPEtheDB->dberr;
$data = $HPEtheDB->escapeString(serialize($this));
$res = $HPEtheDB->query("UPDATE $HPEtheDB->dbtsessions SET data=$data WHERE userid=$this->userid");
if($HPEtheDB->iserror($res))
return $HPEtheDB->dberr;
return "";
}
function UnSerializeFromXML(&$data)
{
global $HPEtheConfig;
$XMLtree = new XMLtree;
if ($err = $XMLtree->parseString($data))
die("Failed to parse XML: $err<BR><pre><small>" . htmlentities($data) . "</small></pre>\n");
$version = $XMLtree->getAttribute("/user(1)", "version");
if($version == "1.0")
{
$this->lang = strtolower($XMLtree->getAttribute("/user(1)", "lang"));
$this->theme = (int) $XMLtree->getAttribute("/user(1)", "theme");
eval("\$this->ugroup = " . $XMLtree->getAttribute("/user(1)", "group") . ";");
$this->name = $XMLtree->getEltByPath("/user(1)/name(1)");
$this->email = $XMLtree->getEltByPath("/user(1)/email(1)");
$this->userlogin = $XMLtree->getAttribute("/user(1)", "login");
$this->restrictlang = $XMLtree->getAttribute("/user(1)", "exclang");
$this->showdate = strtolower($XMLtree->getAttribute("/user(1)", "showdate"));
$this->showdesc = strtolower($XMLtree->getAttribute("/user(1)", "showdesc"));
$this->extwin = strtolower($XMLtree->getAttribute("/user(1)", "extwin"));
$this->mailhtml = strtolower($XMLtree->getAttribute("/user(1)", "mailhtml"));
$this->nosmarttags = $XMLtree->getAttribute("/user(1)", "nosmarttags");
if($this->nosmarttags == "")
$this->nosmarttags = 1;
$this->nbpages = $XMLtree->getAttribute("/user(1)/pages(1)", "count");
$this->pages = array();
for($i=1; $i<=$this->nbpages; $i++)
{
$pgdata = array();
$pgdata["type"] = $XMLtree->getAttribute("/user(1)/pages(1)/page($i)", "type");
$pgdata["id"] = $XMLtree->getAttribute("/user(1)/pages(1)/page($i)", "id");
$pgdata["title"] = $XMLtree->getAttribute("/user(1)/pages(1)/page($i)", "title");
if(!isset($HPEtheConfig->pagehandlers[$pgdata["type"]]))
die("Unknown page type " . $pgdata["type"]);
$HPEtheConfig->pagehandlers[$pgdata["type"]]["control"]->UnSerializeFromXML($XMLtree,
"/user(1)/pages(1)/page($i)", $pgdata);
// $pgdata["param"] = $XMLtree->toStringByPath("/user(1)/pages(1)/page($i)");
$this->pages[$i-1] = $pgdata;
}
$this->post2blogger = $XMLtree->getAttribute("/user(1)/post(1)/blogger(1)", "state");
$this->post2manila = $XMLtree->getAttribute("/user(1)/post(1)/manila(1)", "state");
$this->post2radio = $XMLtree->getAttribute("/user(1)/post(1)/radiouserland(1)", "state");
$i=1;
while(1)
{
$service = $XMLtree->getAttribute("/user(1)/services(1)/service($i)", "type");
if(empty($service)) break;
if(isset($HPEtheConfig->userservices[$service]))
{
$servicedata = array( "type" => $service );
$HPEtheConfig->userservices[$service]["control"]->UnSerializeFromXML($XMLtree,
"/user(1)/services(1)/service($i)", $servicedata);
$this->services[$service] = $servicedata;
}
$i++;
}
}
}
function SerializeToXML()
{
global $HPEtheConfig;
$data = "<?xml version=\"1.0\" ?>\n";
$data .= "<USER version=\"1.0\" login=\"" . HPEXMLString($this->userlogin) . "\"";
$grpdata = array();
if($this->ugroup & HPEUserGrpAdmin) $grpdata[] = "HPEUserGrpAdmin";
if($this->ugroup & HPEUserGrpWebmaster) $grpdata[] = "HPEUserGrpWebmaster";
if($this->ugroup & HPEUserGrpEditor) $grpdata[] = "HPEUserGrpEditor";
if(count($grpdata)) $data .= " group=\"" . implode("|", $grpdata) . "\"";
else $data .= " group=\"0\"";
$data .= " mailhtml=\"" . ($this->mailhtml ? 1 : 0) . "\"";
$data .= " showdesc=\"" . ($this->showdesc ? 1 : 0) . "\"";
$data .= " showdate=\"" . ($this->showdate ? 1 : 0) . "\"";
$data .= " extwin=\"" . ($this->extwin ? 1 : 0) . "\"";
$data .= " nosmarttags=\"" . ($this->nosmarttags ? 1 : 0) . "\"";
$data .= " exclang=\"" . $this->restrictlang . "\"";
$data .= " theme=\"$this->theme\" lang=\"$this->lang\">\n";
$data .= "\t<NAME>" . HPEXMLString($this->name) . "</NAME>\n";
$data .= "\t<EMAIL>" . HPEXMLString($this->email) . "</EMAIL>\n\n";
$data .="\t<POST>\n";
$data .= "\t\t<BLOGGER state=\"" . ($this->post2blogger ? 1 : 0) . "\" />\n";
$data .= "\t\t<MANILA state=\"" . ($this->post2manila ? 1 : 0) . "\" />\n";
$data .= "\t\t<RADIOUSERLAND state=\"" . ($this->post2radio ? 1 : 0) . "\" />\n";
$data .="\t</POST>\n\n";
if($this->nbpages)
{
$data .= "\t<PAGES count=\"$this->nbpages\">\n";
for($i=0; $i<$this->nbpages; $i++)
$data .= $HPEtheConfig->pagehandlers[$this->pages[$i]["type"]]["control"]->SerializeToXML($this->pages[$i]);
$data .= "\t</PAGES>\n\n";
} else $data .= "\t<PAGES />\n\n";
if(count($this->services))
{
$data .= "\t<SERVICES>\n";
reset($this->services);
while (list ($key, $val) = each ($this->services))
$data .= $HPEtheConfig->userservices[$key]["control"]->SerializeToXML($val);
reset($this->services);
$data .= "\t</SERVICES>\n\n";
} else $data .= "\t<SERVICES />\n\n";
$data .= "</USER>\n";
// die("<pre>" . htmlentities($data) . "</pre>");
return $data;
}
};
function HPEAccessDenied($errmsg = "")
{
global $HPEtheThemeMaker;
echo $HPEtheThemeMaker->TPLRun( "nopriv", array("errmsg" => $errmsg) );
die("");
}
function HPERequireLogin($errmsg = "")
{
global $HPEtheConfig;
global $HPEtheThemeMaker;
global $HPEtheUser;
if($HPEtheUser->userid == 0)
HPEAccessDenied($errmsg);
}
function HPERequireAdmin($errmsg = "")
{
global $HPEtheConfig;
global $HPEtheUser;
global $HPEtheThemeMaker;
if(!$HPEtheUser->isadmin)
HPEAccessDenied($errmsg);
}
function HPELoadSession()
{
global $HPEtheUser;
global $HPEtheDB;
global $HTTP_COOKIE_VARS;
if(isset($HTTP_COOKIE_VARS["HPE_SESSION"]))
{
$data = $HPEtheDB->one_data("SELECT data FROM $HPEtheDB->dbtsessions WHERE session='" . $HTTP_COOKIE_VARS["HPE_SESSION"] . "'");
if($data)
{
$HPEtheUser = unserialize($data);
if($HPEtheUser)
return;
}
}
$HPEtheUser = new HPEUserInfo();
}
function HPELogSession()
{
global $HPEtheDB;
global $HPEtheUser;
global $HPE_SESSION;
$HPEtheDB->query("UPDATE $HPEtheDB->dbtusers SET lastaccess=" . time() . " WHERE userid=$HPEtheUser->userid");
$HPEtheDB->query("UPDATE $HPEtheDB->dbtsessions SET lastaccess=" . time() . " WHERE userid=$HPEtheUser->userid AND session='$HPE_SESSION'");
}
?>