AWF API functions
<?php
/*
Copyright (C) 2000-2002 Liquid Bytes (R), Germany. All rights reserved.
http://www.liquidbytes.net/
This file is part of the liquidbytes.net Adaptive Website Framework (AWF)
The author is Michael Mayer (michael@liquidbytes.net)
Last update: 12.01.2002
*/
function getmicrotime () {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
// uncomment this, to log page creation time
define('START', getmicrotime ());
function insert_char ($input, $char, $pos) {
$input = (string) $input;
return(substr($input, 0, $pos).$char.substr($input, $pos));
}
function replace_wildcards ($text, $array) {
if(!is_array($array)) return $text;
global $profile;
if(DISABLE_WILDCARDS == 1 || $profile['editor'] == 1) return $text;
reset($array);
while (list ($key, $value) = each ($array)) {
$text = str_replace('%%'.$key.'%%', $value, $text);
}
return($text);
}
function replace_pattern ($text, $array, $override = false, $mode = 'fast') {
if(!is_array($array)) return $text;
global $profile;
if((DISABLE_WILDCARDS == 1 || $profile['editor'] == 1) && $override = false) return $text;
reset($array);
if($mode == 'fast') {
$text = strtr($text, $array);
}
else {
while (list ($key, $value) = each ($array)) {
// variable?
if($value[0] == '$') {
if(strstr($value, ']')) {
$reg = substr(strstr(substr($value, 1), '['), 1, -1);
$value = $GLOBALS[substr($value, 1, -1 * (strlen($reg) + 2))][$reg];
}
else {
$value = $GLOBALS[substr($value, 1)];
}
}
// replace!
$text = ereg_replace($key, $value, $text);
}
}
return($text);
}
function email_to_string ($email) {
if($email == '') return '';
$search = array ("." => ' '.LANG_DOT.' ', "@" => " at ");
return(strtr($email, $search));
}
function timestamp_to_string ($timestamp = -1, $mode = 'datetime') {
if($timestamp == -1) $timestamp = time();
if($mode == 'datetime') return date(DATETIME_FORMAT, $timestamp);
if($mode == 'time') return date(TIME_FORMAT, $timestamp);
if($mode == 'date') return date(DATE_FORMAT, $timestamp);
}
function isemail ($email, $override = false) {
if(DISABLE_EMAIL_CHECK == 1 && !$override) { return true; }
if(strpos ($email, '@') == false) { return false; }
if(getmxrr (substr(strstr($email, '@'),1), $mxhosts) == false) { return false; }
return true;
}
function url_to_link ($in, $override = false) {
if(DISABLE_URL_TO_LINK == 1 && !$override) return $in;
$out = eregi_replace( "([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<a href=\"\\1://\\2\\3\">\\1://\\2\\3</a>", $in);
$out = eregi_replace( "(([a-z0-9_]|\\-|\\.)+@([^[:space:]]*)([[:alnum:]-]))",
"<a href=\"mailto:\\1\">\\1</a>", $out);
return $out;
}
function add_user ($email, $password, $valid=1) {
$email = addslashes($email);
$password = addslashes($password);
$qres = sql_query ("SELECT email FROM ".TABLE_USERS." WHERE email='$email'");
if(sql_num_rows($qres) == 0) {
sql_free_result($qres);
sql_query ("INSERT INTO ".TABLE_USERS." (email, password, valid, views, last_login, registered)
VALUES ('$email','$password', $valid, 0, ".time().", ".time().")");
return sql_insert_id();
} else { sql_free_result($qres); return false; }
}
function update_user ($email, $password='', $old_email=SESSION_EMAIL, $valid=1) {
$email = addslashes($email);
$password = addslashes($password);
if($password == '') {
$qres = sql_query ("UPDATE ".TABLE_USERS." SET email='".addslashes($email)."', valid=$valid WHERE email='$old_email'");
}
else {
$qres = sql_query ("UPDATE ".TABLE_USERS." SET email='".addslashes($email)."', password='".addslashes($password)."', valid=$valid WHERE email='$old_email'");
}
sql_free_result($qres);
if(sql_affected_rows() > 0) {
return true;
}
else {
$res = sql_query("SELECT id FROM
".TABLE_USERS." WHERE email='$old_email'");
if(sql_num_rows($res) > 0) { return true; }
else { return false; }
}
}
function get_user_email ($user_id = -1) {
if($user_id == -1) {
if(!defined("SESSION_DBID")) { return(false); }
$user_id = SESSION_DBID;
}
$email = sql_query ("SELECT email FROM ".TABLE_USERS." WHERE id=".$user_id);
if(sql_num_rows($email) > 0) {
$prow = sql_fetch_row($email);
sql_free_result($email);
return $prow[0];
}
return "";
}
function get_user_id ($email) {
if(defined(SESSION_EMAIL) && SESSION_EMAIL == $email) return SESSION_DBID;
$user_id = sql_query ("SELECT id FROM ".TABLE_USERS." WHERE email='".addslashes($email)."'");
if(sql_num_rows($user_id) > 0) {
$prow = sql_fetch_row($user_id);
sql_free_result($user_id);
return $prow[0];
}
return -1;
}
function get_user_nickname ($user_id = -1) {
if($user_id == -1 || (defined(SESSION_DBID) && $user_id == SESSION_DBID)) {
global $profile;
if(!isset($profile['nickname'])) $profile['nickname'] = LANG_STRANGER;
return htmlentities($profile[nickname]);
}
$nickname = sql_query ("SELECT value FROM ".TABLE_USERDATA." WHERE user_id=".$user_id." AND name='nickname'");
if(sql_num_rows($nickname) > 0) {
$prow = sql_fetch_row($nickname);
sql_free_result($nickname);
return stripslashes($prow[0]);
}
return email_to_string(get_user_email($user_id));
}
function is_unique_nickname ($name, $user_id = -1) {
if(!is_numeric($user_id) || $user_id == -1) $user_id = 0;
$nickname = sql_query ("SELECT count(*) FROM ".TABLE_USERDATA." WHERE name='nickname' AND value='$name' AND user_id != $user_id");
$row = sql_fetch_row($nickname);
sql_free_result($nickname);
if(is_numeric($row[0]) && $row[0] > 0) { return false; }
else { return true; }
}
function remove_user ($user_id) {
if(!is_numeric($user_id)) return false;
// Delete all messages
sql_query ("DELETE FROM ".TABLE_MESSAGES." WHERE user_id=$user_id");
// Delete profile
sql_query ("DELETE FROM ".TABLE_USERDATA." WHERE user_id=$user_id");
// Delete user
sql_query ("DELETE FROM ".TABLE_USERS." WHERE id=$user_id");
remove_file(get_dir_name('users/public', $user_id, false));
remove_file(get_dir_name('users/private', $user_id, false));
// ok?
if(sql_affected_rows() == 0) { return false; } else { return true; }
}
function set_profile ($name, $value, $user_id = -1) {
if (($name == '' && $value == '') || !is_numeric($user_id))
return false;
if (SESSION_STATUS != 'ok' && $user_id == -1) {
return false;
}
if($user_id == -1) {
$user_id = SESSION_DBID;
global $profile;
$profile[$name] = $value;
}
$value = addslashes($value);
$name = addslashes($name);
if ($value == '' && $name != '') {
sql_query("DELETE FROM ".TABLE_USERDATA." WHERE name='".$name."' AND user_id=".$user_id);
return true;
}
$qresult = sql_query ("UPDATE ".TABLE_USERDATA." SET value='".$value."' WHERE name='".$name."' AND user_id=".$user_id);
if(sql_affected_rows() == 0) {
$res = sql_query("SELECT id FROM ".TABLE_USERDATA." WHERE name='".$name."' AND user_id=".$user_id);
if(sql_num_rows($res) > 0) {
return true; }
else {
sql_query ("INSERT INTO ".TABLE_USERDATA." (name, value, user_id) VALUES ('".$name."', '".$value."', ".$user_id.")");
}
}
return true;
}
function remove_profile ($name, $user_id = -1) {
if ($name == '' || !is_numeric($user_id))
return false;
if (SESSION_STATUS != 'ok' && $user_id == -1) {
return false;
}
if($user_id == -1) {
$user_id = SESSION_DBID;
global $profile;
unset ($profile[$name]);
}
$value = addslashes($value);
$name = addslashes($name);
$qresult = sql_query ("DELETE FROM ".TABLE_USERDATA." WHERE name='".$name."' AND user_id=".$user_id);
return true;
}
function update_nodedata ($node_id, $name, $value, $flavour_id, $datatype = 'notrans') {
global $cache_refresh;
sql_query("UPDATE ".TABLE_NODEDATA." SET value='".addslashes($value)."', datatype='$datatype' WHERE
name='$name' AND node_id=$node_id AND flavour_id=$flavour_id");
$aff_rows = sql_affected_rows();
switch($aff_rows) {
case -1: return false;
case 0 : $res = sql_query("SELECT id FROM
".TABLE_NODEDATA." WHERE name='$name' AND node_id=$node_id AND
(flavour_id=$flavour_id OR flavour_id=0)");
if(sql_num_rows($res) > 0) { return true; }
else { return false; }
default: $cache_refresh[$node_id] = true; return true;
}
}
function add_nodedata ($node_id, $name, $value, $flavour_id, $datatype = 'notrans') {
if(update_nodedata($node_id, $name, $value, $flavour_id, $datatype) == false) {
sql_query("INSERT INTO ".TABLE_NODEDATA." (flavour_id,value,name,node_id,datatype) VALUES
($flavour_id, '".addslashes($value)."', '$name', $node_id, '$datatype')");
global $cache_refresh;
$cache_refresh[$node_id] = true;
return sql_insert_id();
}
}
function delete_nodedata ($node_id, $name, $value, $flavour_id, $datatype = 'notrans') {
sql_query("DELETE FROM ".TABLE_NODEDATA." WHERE name='$name' AND node_id=$node_id AND
flavour_id=$flavour_id");
global $cache_refresh;
$cache_refresh[$node_id] = true;
return true;
}
function create_node ($parent_id, $type_id, $sort_order, $enabled, $published, $description, $key_id=0, $searchable=1, $cacheable=1, $release_date=0, $members_only=0, $expiration_date=0) {
if($searchable != 1) $searchable = 0;
if($cacheable != 1) $cacheable = 0;
if($published != 1) $published = 0;
if($enabled != 1) $enabled = 0;
if($members_only != 1) $members_only = 0;
if($release_date < 0) $release_date = 0;
if($expiration_date < 0) $expiration_date = 0;
sql_query("INSERT INTO ".TABLE_NODES." (sort_order, parent_id, enabled, published,
type_id, description, key_id, searchable, cacheable, release_date, expiration_date, members_only) VALUES
($sort_order, $parent_id, $enabled, $published, $type_id, '".addslashes($description)."', $key_id,
$searchable, $cacheable, $release_date, $expiration_date, $members_only)");
return sql_insert_id();
}
function destroy_node ($id) {
if(!is_numeric($id)) return false;
$qresult = sql_query("SELECT id FROM ".TABLE_NODES." WHERE parent_id=$id");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
destroy_node ($row[0]);
}
sql_free_result($qresult);
}
sql_query("DELETE FROM ".TABLE_NODES." WHERE id=$id");
sql_query("DELETE FROM ".TABLE_NODEDATA." WHERE node_id=$id");
remove_file(get_dir_name('files',$id,false));
remove_file(get_dir_name(INC_PATH.DATA_PATH.'nodes',$id,false));
global $cache_refresh;
$cache_refresh[$id] = true;
return true;
}
function update_node ($node_id, $parent_id, $type_id, $sort_order, $enabled, $published, $description, $key_id=0, $searchable=1, $cacheable=1, $release_date=-1, $members_only=-1, $expiration_date=-1) {
if($searchable != 1) $searchable = 0;
if($cacheable != 1) $cacheable = 0;
if($published != 1) $published = 0;
if($enabled != 1) $enabled = 0;
$optional = '';
if($members_only != -1) { $optional = ", members_only=$members_only"; }
if($release_date > -1) { $optional = ", release_date=$release_date"; }
if($expiration_date > -1) { $optional = ", expiration_date=$expiration_date"; }
sql_query("UPDATE ".TABLE_NODES." SET sort_order=$sort_order, parent_id=$parent_id, enabled=$enabled,
published=$published, type_id=$type_id, description='".addslashes($description)."',
key_id=$key_id, searchable=$searchable, cacheable=$cacheable $optional WHERE id=$node_id");
if(sql_affected_rows() < 1) {
$res = sql_query("SELECT id FROM ".TABLE_NODES."
WHERE id=$node_id");
if(sql_num_rows($res) > 0) { return true; }
else { return false; }
}
else {
global $cache_refresh;
$cache_refresh[$node_id] = true;
return true; }
}
function get_nodedata ($id, $flavour) {
$qresult = sql_query("SELECT name, value, datatype FROM ".TABLE_NODEDATA." WHERE node_id=$id AND (flavour_id=$flavour OR flavour_id=0)");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$document[stripslashes($row[0])] = stripslashes($row[1]);
$document['datatype'][stripslashes($row[0])] = $row[2];
}
sql_free_result($qresult);
}
return $document;
}
function get_node ($id, $flavour, $counter_inc = true) {
global $enabled_filter;
if($counter_inc == true) { global $count_views; } else { $count_views = 0; }
$qresult = sql_query("SELECT parent_id, type_id, published, description, sort_order, enabled, searchable, cacheable, key_id,
release_date, expiration_date, members_only, ssl_only, views FROM ".TABLE_NODES." WHERE id=$id $enabled_filter");
if(sql_num_rows($qresult) > 0) {
$row = sql_fetch_row($qresult);
$document['parent_id'] = $row[0];
$document['type_id'] = $row[1];
$document['published'] = $row[2];
$document['description'] = $row[3];
$document['sort_order'] = $row[4];
$document['enabled'] = $row[5];
$document['searchable'] = $row[6];
$document['cacheable'] = $row[7];
$document['key_id'] = $row[8];
$document['release_date'] = $row[9];
$document['expiration_date'] = $row[10];
$document['members_only'] = $row[11];
$document['ssl_only'] = $row[12];
$document['views'] = $row[13];
sql_free_result($qresult);
if($count_views == 1 && $id == $GLOBALS['id']) sql_query("UPDATE ".TABLE_NODES." SET views=views+1 WHERE id=$id");
$docdata = get_nodedata ($id, $flavour);
return array_merge($document, $docdata);
}
else {
return false;
}
}
function count_children ($type = -1, $flavour = -1, $item_id = -1) {
global $enabled_filter;
if($item_id > 0) { $id = $item_id; } else { $id = $GLOBALS['id']; }
if($type >= 0) { $filter = "AND type_id = $type"; } else { $filter = ''; }
if($flavour != -1) {
$qresult = sql_query("SELECT count(*) FROM ".TABLE_NODES.", ".TABLE_NODEDATA."
WHERE parent_id = $id AND (flavour_id = $flavour OR flavour_id = 0) AND name='title' AND node_id=".TABLE_NODES.".id
$filter $enabled_filter");
}
else {
$qresult = sql_query("SELECT count(*) FROM ".TABLE_NODES." WHERE parent_id = $id $filter $enabled_filter");
}
if(sql_num_rows($qresult) > 0) {
$row = sql_fetch_row($qresult);
sql_free_result($qresult);
return $row[0];
}
else {
return 0;
}
}
function get_children ($offset, $count, $type = -1, $title_only = false, $sort_order = 'DESC', $published = false, $item_id = -1) {
global $flavour;
global $enabled_filter;
$filter = '';
if($type >= 0) $filter .= "AND type_id = $type ";
if($published) $filter .= "AND published = 1 ";
if($item_id >= 0) { $id = $item_id; } else { $id = $GLOBALS['id']; }
if($title_only == true) {
$qresult = sql_query("SELECT DISTINCT node_id, value, type_id, published, key_id FROM ".TABLE_NODES.",
".TABLE_NODEDATA." WHERE parent_id=$id AND name='title' $filter AND node_id=".TABLE_NODES.".id AND
(flavour_id=$flavour OR flavour_id=0) $enabled_filter ORDER BY sort_order $sort_order ".sql_limit($count,$offset));
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$children[$row[0]]['type_id'] = $row[2];
$children[$row[0]]['published'] = $row[3];
$children[$row[0]]['title'] = stripslashes($row[1]);
$children[$row[0]]['key_id'] = $row[4];
}
sql_free_result($qresult);
return($children);
}
}
else {
$qresult = sql_query("SELECT parent_id, type_id, published, description, sort_order, enabled, searchable,
cacheable, key_id, id, release_date, expiration_date, members_only, ssl_only,
views FROM ".TABLE_NODES." WHERE parent_id=$id $enabled_filter $filter
ORDER BY sort_order $sort_order ".sql_limit($count,$offset));
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$document['parent_id'] = $row[0];
$document['type_id'] = $row[1];
$document['published'] = $row[2];
$document['description'] = $row[3];
$document['sort_order'] = $row[4];
$document['enabled'] = $row[5];
$document['searchable'] = $row[6];
$document['cacheable'] = $row[7];
$document['key_id'] = $row[8];
$document['release_date'] = $row[10];
$document['expiration_date'] = $row[11];
$document['members_only'] = $row[12];
$document['ssl_only'] = $row[13];
$document['views'] = $row[14];
$children[$row[9]] = array_merge(get_nodedata($row[9], $flavour), $document);
}
sql_free_result($qresult);
return($children);
}
}
}
function get_sorted_children ($offset, $count, $name, $type = -1, $item_id = -1, $sort_order = 'DESC', $published = false) {
$where = "name='$name'";
if($type != -1) { $where .= " AND type_id=".$type; }
if($published == true) { $where .= " AND published=1"; }
$where .= " ORDER BY value ".$sort_order;
$start = getmicrotime();
global $search_time;
if($item_id != -1) { $id = $item_id; } else { $id = $GLOBALS['id']; }
global $flavour;
$qresult=sql_query("SELECT DISTINCT node_id FROM ".TABLE_NODEDATA.", ".TABLE_NODES." WHERE
node_id = ".TABLE_NODES.".id AND (flavour_id = $flavour OR flavour_id=0) AND parent_id = $id AND $where
".sql_limit($count,$offset));
while($row = sql_fetch_row($qresult)) {
$result = get_node($row[0], $flavour, 0);
if($result != false) $results[$row[0]] = $result;
}
sql_free_result($qresult);
$search_time = number_format(getmicrotime() - $start, 4, ',', '');
if(isset($results)) {
return($results);
}
else {
return(false);
}
}
function get_related ($offset, $count, $type = -1, $title_only = false, $published = false, $parent_id = -1, $no_filter = false) {
global $document;
global $flavour;
global $enabled_filter;
global $id;
if($parent_id < 0) { $parent_id = $document['parent_id']; }
$filter = '';
if($type >= 0) $filter .= "AND type_id = $type ";
if($published) $filter .= "AND published = 1 ";
if($title_only) {
$qresult = sql_query("SELECT DISTINCT node_id, value, type_id, published, key_id FROM ".TABLE_NODES.",
".TABLE_NODEDATA." WHERE parent_id=$parent_id AND name='title' $filter AND
node_id=".TABLE_NODES.".id AND (flavour_id=$flavour OR flavour_id=0) $enabled_filter ORDER BY sort_order DESC ".sql_limit($count,$offset));
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
if($row[0] != $id || $no_filter) {
$related[$row[0]]['type_id'] = $row[2];
$related[$row[0]]['published'] = $row[3];
$related[$row[0]]['title'] = stripslashes($row[1]);
$related[$row[0]]['key_id'] = $row[4];
}
}
sql_free_result($qresult);
return($related);
}
}
else {
$qresult = sql_query("SELECT parent_id, type_id, published, description, sort_order, enabled, searchable,
cacheable, key_id, id, release_date, expiration_date, members_only, ssl_only, views
FROM ".TABLE_NODES." WHERE parent_id=$parent_id $enabled_filter $filter AND
NOT (id = $id) ORDER BY sort_order DESC ".sql_limit($count,$offset));
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$doc['parent_id'] = $row[0];
$doc['type_id'] = $row[1];
$doc['published'] = $row[2];
$doc['description'] = $row[3];
$doc['sort_order'] = $row[4];
$doc['enabled'] = $row[5];
$doc['searchable'] = $row[6];
$doc['cacheable'] = $row[7];
$doc['key_id'] = $row[8];
$doc['release_date'] = $row[10];
$doc['expiration_date']=$row[11];
$doc['members_only'] = $row[12];
$doc['ssl_only'] = $row[13];
$doc['views'] = $row[14];
$related[$row[9]] = array_merge(get_nodedata($row[9], $flavour), $doc);
}
sql_free_result($qresult);
return($related);
}
}
}
function init_published_children () {
if($done) return;
static $done = true;
global $published_children;
$published_children = array();
global $id;
global $flavour;
global $enabled_filter;
$qresult = sql_query("SELECT node_id, name, value, type_id, published, datatype FROM ".TABLE_NODES.",
".TABLE_NODEDATA." WHERE parent_id=$id AND name='title' AND node_id=".TABLE_NODES.".id AND
(flavour_id=$flavour OR flavour_id=0) AND published=1 $enabled_filter ORDER BY sort_order DESC");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$published_children[$row[0]]['type_id'] = $row[3];
$published_children[$row[0]]['published'] = $row[4];
$published_children[$row[0]]['title'] = stripslashes($row[2]);
$published_children[$row[0]]['datatype']['title'] = $row[5];
}
sql_free_result($qresult);
}
}
function init_published_roots () {
if($done) return;
static $done = true;
global $published_roots;
$published_roots = array();
global $enabled_filter;
global $flavour;
$qresult = sql_query("SELECT ".TABLE_NODES.".id, name, value, type_id, datatype FROM ".TABLE_NODES.",
".TABLE_NODEDATA." WHERE parent_id=0 AND node_id=".TABLE_NODES.".id AND published=1
AND (flavour_id=$flavour OR flavour_id=0) AND name='title' $enabled_filter ORDER BY sort_order DESC");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$published_roots[$row[0]]['title'] = stripslashes($row[2]);
$published_roots[$row[0]]['datatype']['title'] = $row[4];
}
sql_free_result($qresult);
}
}
function init_parents () {
if($done) return;
static $done = true;
global $parents;
$parents = array();
global $document;
global $id;
global $root_parent_id;
if($document['parent_id'] == 0) {
$root_parent_id = $id;
return(void);
}
$parent_id = $document[parent_id];
global $flavour;
while($parent_id != 0) {
$qresult = sql_query("SELECT ".TABLE_NODES.".id, name, value, parent_id, type_id, datatype FROM
".TABLE_NODES.", ".TABLE_NODEDATA." WHERE ".TABLE_NODES.".id=$parent_id
AND node_id=$parent_id AND (flavour_id=$flavour OR flavour_id=0) AND name='title'");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$parents[$row[0]]['title'] = stripslashes($row[2]);
$parents[$row[0]]['datatype']['title'] = $row[5];
$root_parent_id = $row[0];
$parents[$row[0]]['parent_id'] = $row[3];
$parent_id = $row[3];
}
sql_free_result($qresult);
}
else { $parent_id = 0; }
}
}
function init_published_related () {
if($done) return;
static $done = true;
global $published_related;
$published_related = array();
global $document;
if($document[parent_id] > 0) {
global $flavour;
global $enabled_filter;
$parent_id = $document[parent_id];
$qresult = sql_query("SELECT node_id, value, type_id, published, datatype FROM ".TABLE_NODES.",
".TABLE_NODEDATA." WHERE parent_id=$parent_id AND node_id=".TABLE_NODES.".id AND
(flavour_id=$flavour OR flavour_id=0) AND name='title' $enabled_filter ORDER BY sort_order DESC");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$published_related[$row[0]]['type_id'] = $row[2];
$published_related[$row[0]]['published'] = $row[3];
$published_related[$row[0]]['title'] = stripslashes($row[1]);
$published_related[$row[0]]['datatype']['title'] = $row[4];
}
sql_free_result($qresult);
return(void);
}
}
}
function init_doctypes () {
if($done) return;
static $done = true;
global $doctypes;
global $docnames;
global $doctemplates;
global $docparents;
global $docvisible;
$doctypes = array();
$docnames = array();
$doctemplates = array();
$docparents = array();
$docvisible = array();
global $profile;
if($profile[editor] == 1) {
$editor = ', description';
global $docdescriptions;
$docdescriptions = array();
}
else { $editor = ''; }
$qresult = sql_query("SELECT type_id, name, template, parent_id, visible $editor FROM ".TABLE_TYPEDATA.",
".TABLE_TYPES." WHERE ".TABLE_TYPES.".id=".TABLE_TYPEDATA.".type_id
AND platform='phpweb' ORDER BY name");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
$doctypes[stripslashes($row[1])] = $row[0];
$docnames[$row[0]] = stripslashes($row[1]);
$doctemplates[$row[0]] = stripslashes($row[2]);
$docvisible[$row[0]] = $row[4];
$docparents[$row[0]] = $row[3];
if($editor != '') { $docdescriptions[$row[0]] = $row[5]; }
}
sql_free_result($qresult);
}
}
function update_node_sortorder ($node_id, $sort_order) {
sql_query("UPDATE ".TABLE_NODES." SET sort_order=$sort_order WHERE id=$node_id");
}
function get_profile ($user_id = -1, $use_groups = true) {
if($user_id == -1) {
if(!defined("SESSION_DBID")) { return(false); }
$user_id = SESSION_DBID;
}
$qprofile = sql_query ("SELECT name, value FROM ".TABLE_USERDATA." WHERE user_id=".$user_id);
if(sql_num_rows($qprofile) > 0) {
while($prow = sql_fetch_row($qprofile)) {
$profile[stripslashes($prow[0])] = stripslashes($prow[1]);
if(substr($prow[0], 0, 6) == 'group_' && $prow[1] == '1' && $use_groups) {
$profile = array_merge(get_group_profile (substr($prow[0], 6)), $profile);
}
}
sql_free_result($qprofile);
}
return $profile;
}
function caching ($buffer) {
global $cache_refresh;
global $id;
if(CACHE_TIME == 0 || isset($cache_refresh[$id])) {
return FALSE;
}
$fp = fopen (CACHE_FILENAME, "w");
fwrite($fp,$buffer);
fclose($fp);
}
function init_modules () {
if($done) return;
static $done = true;
global $modules;
$modules = array();
global $flavour;
global $root_parent_id;
global $parents;
global $profile;
global $id;
if(!isset($parents)) init_parents();
if($profile[editor] && SESSION_STATUS == 'ok') { $cond = 3; }
elseif(SESSION_STATUS == 'ok') { $cond = 2; }
else { $cond = 1; }
// add modules to array
$qresult = sql_query("SELECT name, placement, id, visible, removeable, flavour_id, section_id, document_id, caption FROM
".TABLE_MODULES." WHERE (target = $cond) OR (target = 0) ORDER BY sort_order");
if ($qresult) {
while($row = sql_fetch_row($qresult)) {
if($row[0] && $row[1] && ($row[5] == -1 || $row[5] == $flavour) && ($row[6] == -1
|| $row[6] == $root_parent_id) && ($row[7] == -1 || $row[7] == $id)) {
$modules[$row[2]]['id'] = $row[2];
$modules[$row[2]]['position'] = stripslashes($row[1]);
$modules[$row[2]]['visible'] = stripslashes($row[3]);
$modules[$row[2]]['removeable'] = stripslashes($row[4]);
$modules[$row[2]]['name'] = stripslashes($row[0]);
$modules[$row[2]]['flavour_id'] = stripslashes($row[5]);
$modules[$row[2]]['section_id'] = stripslashes($row[6]);
$modules[$row[2]]['document_id'] = stripslashes($row[7]);
$modules[$row[2]]['caption'] = stripslashes($row[8]);
}
}
sql_free_result($qresult);
}
}
function search_nodes ($where, $limit = 100, $offset = 0) {
$start = getmicrotime();
global $search_time;
if(!$where) {
return(void);
$search_time = 0;
}
global $flavour;
$qresult=sql_query("SELECT DISTINCT node_id FROM ".TABLE_NODEDATA." WHERE $where ".sql_limit($limit,$offset));
while($row = sql_fetch_row($qresult)) {
$result = get_node($row[0], $flavour);
if($result != false && $result[searchable] == 1 && isset($result[title])) $results[$row[0]] = $result;
}
sql_free_result($qresult);
$search_time = Number_format(getmicrotime() - $start, 4, ',', '');
if(isset($results)) {
return($results);
}
else {
return(false);
}
}
function search_children ($where, $limit = 100, $offset = 0, $item_id = -1) {
$start = getmicrotime();
global $search_time;
if(!$where) {
return(void);
$search_time = 0;
}
if($item_id > 0) { $id = $item_id; } else { $id = $GLOBALS['id']; }
global $flavour;
$qresult=sql_query("SELECT DISTINCT node_id FROM ".TABLE_NODEDATA.", ".TABLE_NODES." WHERE
node_id = ".TABLE_NODES.".id AND parent_id = $id AND $where ".sql_limit($limit,$offset));
while($row = sql_fetch_row($qresult)) {
$result = get_node($row[0], $flavour);
if($result != false && $result[searchable] == 1 && isset($result[title])) $results[$row[0]] = $result;
}
sql_free_result($qresult);
$search_time = Number_format(getmicrotime() - $start, 4, ',', '');
if(isset($results)) {
return($results);
}
else {
return(false);
}
}
function cmp_nodes ($a, $b) {
global $cmp_key_name;
if ($a[$cmp_key_name] == $b[$cmp_key_name]) return 0;
return ($a[$cmp_key_name] < $b[$cmp_key_name]) ? -1 : 1;
}
function sort_nodes ($nodes, $name, $reverse = false) {
global $cmp_key_name;
$cmp_key_name = $name;
uasort($nodes, "cmp_nodes");
if($reverse) { $nodes = array_reverse($nodes); }
return $nodes;
}
function remove_message ($message_id, $user_id = -1) {
if($user_id > 0) { $where = 'AND user_id = '.$user_id; }
else { $where = ''; }
sql_query("DELETE FROM ".TABLE_MESSAGES." WHERE id = $message_id $where");
}
function mark_message ($message_id, $user_id = -1) {
if($user_id > 0) { $where = 'AND user_id = '.$user_id; }
else { $where = ''; }
sql_query("UPDATE ".TABLE_MESSAGES." SET delivered = ".time().", status = 1 WHERE id = $message_id $where");
}
function count_messages ($user_id = -1, $type = '', $status = -1, $release_date = 0, $sender_id = -1, $sender = '', $text = '', $expiration_date = 0) {
$where = '';
$pre = '';
if($user_id != -1) { $where .= "user_id = $user_id"; $pre = ' AND '; }
if($type != '') { $where .= $pre."type = '$type'"; $pre = ' AND '; }
if($status != -1) { $where .= $pre."status = $status"; $pre = ' AND '; }
if($release_date > 0) { $where .= $pre."release_date < $release_date"; $pre = ' AND '; }
if($expiration_date > 0) { $where .= $pre."(expiration_date > $expiration_date OR expiration_date = 0)"; $pre = ' AND '; }
if($sender_id != -1) { $where .= $pre."sender_id = $sender_id"; $pre = ' AND '; }
if($sender != '') { $where .= $pre."sender = '$sender'"; $pre = ' AND '; }
if($text != '') { $where .= $pre."text LIKE '$text'"; $pre = ' AND '; }
if($where != '') { $where = 'WHERE '.$where; }
$message_query = sql_query("SELECT count(*) FROM ".TABLE_MESSAGES." $where");
$row = sql_fetch_row($message_query);
sql_free_result($message_query);
return $row[0];
}
function search_messages ($user_id = -1, $type = '', $status = -1, $release_date = 0, $sender_id = -1, $sender = '', $text = '', $mark = false, $sort_dir = 'ASC', $expiration_date = 0) {
$where = '';
$pre = '';
if($sort_dir != 'ASC') $sort_dir = 'DESC';
if($user_id != -1) { $where .= "user_id = $user_id"; $pre = ' AND '; }
if($type != '') { $where .= $pre."type = '$type'"; $pre = ' AND '; }
if($status != -1) { $where .= $pre."status = $status"; $pre = ' AND '; }
if($release_date > 0) { $where .= $pre."release_date < $release_date"; $pre = ' AND '; }
if($expiration_date > 0) { $where .= $pre."(expiration_date > $expiration_date OR expiration_date = 0)"; $pre = ' AND '; }
if($sender_id != -1) { $where .= $pre."sender_id = $sender_id"; $pre = ' AND '; }
if($sender != '') { $where .= $pre."sender = '$sender'"; $pre = ' AND '; }
if($text != '') { $where .= $pre."(message LIKE '%$text%' OR subject LIKE '%$text%')"; $pre = ' AND '; }
if($where != '') { $where = 'WHERE '.$where; }
$message_query = sql_query("SELECT id, user_id, subject, message, sender, sender_id, type, status, created,
delivered, release_date, expiration_date FROM ".TABLE_MESSAGES." $where ORDER BY created $sort_dir");
while($row = sql_fetch_row($message_query)) {
$messages[$row[0]]['user_id'] = $row[1];
$messages[$row[0]]['subject'] = stripslashes($row[2]);
$messages[$row[0]]['message'] = stripslashes($row[3]);
$messages[$row[0]]['sender'] = stripslashes($row[4]);
$messages[$row[0]]['sender_id'] = $row[5];
$messages[$row[0]]['type'] = $row[6];
$messages[$row[0]]['status'] = $row[7];
$messages[$row[0]]['created'] = $row[8];
$messages[$row[0]]['delivered'] = $row[9];
$messages[$row[0]]['release_date'] = $row[10];
$messages[$row[0]]['expiration_date'] = $row[11];
if($mark) mark_message($row[0]);
}
sql_free_result($message_query);
return $messages;
}
function get_message ($message_id, $mark = true) {
$message_query = sql_query("SELECT id, user_id, subject, message, sender, sender_id, type, status, created,
delivered, release_date, expiration_date FROM ".TABLE_MESSAGES." WHERE id = $message_id ORDER BY created");
$row = sql_fetch_row($message_query);
$message['id'] = $row[0];
$message['user_id'] = $row[1];
$message['subject'] = $row[2];
$message['message'] = $row[3];
$message['sender'] = $row[4];
$message['sender_id'] = $row[5];
$message['type'] = $row[6];
$message['status'] = $row[7];
$message['created'] = $row[8];
$message['delivered'] = $row[9];
$message['release_date'] = $row[10];
$message['expiration_date'] = $row[11];
sql_free_result($message_query);
if($mark) mark_message($message_id);
return $message;
}
function send_message ($user_id, $message, $sender_id = -1, $sender = '', $subject = '', $type = 'default', $release_date = 0, $expiration_date = 0) {
$profile = get_profile($user_id);
if($type == 'default') {
if(!isset($profile['im_default']) || $profile['im_default'] == '') {
$type = 'instant';
}
else {
$type = $profile['im_default'];
}
}
switch ($type) {
case 'sms' : break;
case 'icq' :
if($sender_id != -1) {
$from = 'From: '.get_user_nickname($sender_id).' <'.get_user_email($sender_id).'>';
}
else {
$from = 'From: Unknown User <unknown_user@'.$GLOBALS[SERVER_NAME].'>';
}
if(isset($profile['icq']) && is_numeric($profile['icq'])) {
mail($profile['icq'].'@pager.icq.com', $subject, $message, $from);
break;
}
case 'instant' :
sql_query("INSERT INTO ".TABLE_MESSAGES." (user_id, subject, message, sender, sender_id, type,
status, created, release_date, expiration_date) VALUES ($user_id, '".addslashes($subject)."',
'".addslashes($message)."', '".addslashes($sender)."', $sender_id, 'instant', 0, ".time().",
$release_date, $expiration_date)");
if(!isset($profile['im_as_email']) || !$profile['im_as_email'] != '1') break;
case 'email' :
if($sender_id != -1) {
$from = 'From: '.get_user_nickname($sender_id).' <'.get_user_email($sender_id).'>';
}
else {
$from = 'From: Unknown User <unknown_user@'.$GLOBALS[SERVER_NAME].'>';
}
if($time < 1) mail(get_user_email($user_id), $subject, $message, $from);
break;
}
}
function receive_content () {
// establish trust relationship
// insert as XML
// type can be SMTP and HTTP...maybe something else in the future
}
function send_content () {
// establish trust relationship
// maybe we can send all content for free!?
// send as XML over SMTP or HTTP
}
function init_groups () {
if($done) return;
static $done = true;
global $groups;
$groups = array();
$qresult = sql_query("SELECT id, group_name FROM ".TABLE_GROUPS." ORDER BY group_name");
if(sql_num_rows($qresult) == 0) {
sql_free_result($qresult);
return false;
}
while($row = sql_fetch_row($qresult)) {
$groups[$row[0]] = stripslashes($row[1]);
}
sql_free_result($qresult);
return true;
}
function get_group_profile ($group_id, $recursive = true) {
$qresult = sql_query("SELECT name, value FROM ".TABLE_GROUPDATA." WHERE group_id = $group_id");
if(sql_num_rows($qresult) == 0) {
sql_free_result($qresult);
return false;
}
while($row = sql_fetch_row($qresult)) {
$profile[stripslashes($row[0])] = stripslashes($row[1]);
if(substr($row[0], 0, 6) == 'group_' && $row[1] == '1' && $recursive) {
$profile = array_merge(get_group_profile (substr($row[0], 6)), $profile);
}
}
sql_free_result($qresult);
return $profile;
}
function add_group ($group_name) {
sql_query("INSERT INTO ".TABLE_GROUPS." (group_name) VALUES ('".addslashes($group_name)."')");
return sql_insert_id();
}
function remove_group ($group_id, $send_info = true) {
global $groups;
$qresult = sql_query("SELECT user_id FROM ".TABLE_USERDATA." WHERE name='group_".$group_id."' AND value != '0'");
if(sql_num_rows($qresult) > 0) {
while($row = sql_fetch_row($qresult)) {
// Remove user from group
remove_user_from_group ($row[0], $group_id);
if($send_info) {
// send message to all group members
send_message ($row[0], 'Group '.$groups[$group_id].' was removed.', 1);
}
}
sql_free_result($qresult);
}
sql_query("DELETE FROM ".TABLE_GROUPS." WHERE id = $group_id");
sql_query("DELETE FROM ".TABLE_GROUPDATA." WHERE group_id=$group_id");
}
function add_user_to_group ($user_id, $group_id, $send_info = true) {
global $groups;
set_profile('group_'.$group_id, '1', $user_id);
if($send_info) send_message ($user_id, 'You were added to group '.$groups[$group_id].'.', 1);
}
function remove_user_from_group ($user_id, $group_id, $send_info = true) {
global $groups;
remove_profile('group_'.$group_id, $user_id);
if($send_info) send_message ($user_id, 'You were removed from group '.$groups[$group_id].'.', 1);
}
function set_group_profile ($name, $value, $group_id) {
if ($value == '' && $name != '') {
sql_query("DELETE FROM ".TABLE_GROUPDATA." WHERE name='".addslashes($name)."' AND group_id=".$group_id);
return true;
}
$qresult = sql_query ("UPDATE ".TABLE_GROUPDATA." SET value='".addslashes($value)."' WHERE name='".addslashes($name)."' AND group_id=".$group_id);
if(sql_affected_rows($qresult) < 1) {
$res = sql_query("SELECT id FROM ".TABLE_GROUPDATA." WHERE name='".addslashes($name)."' AND group_id=".$group_id);
if(sql_num_rows($res) > 0) {
return true; }
else {
sql_query("INSERT INTO ".TABLE_GROUPDATA." (name, value, group_id) VALUES ('".addslashes($name)."', '".addslashes($value)."', $group_id)");
}
}
return true;
}
function remove_group_profile ($name, $group_id) {
sql_query("DELETE FROM ".TABLE_GROUPDATA." WHERE name='".addslashes($name)."' AND group_id = $group_id");
}
function load_lang ($name, $lang = '') {
if($lang == '') global $lang;
if(file_exists(LANG_PATH.$lang.'/'.$name.'.'.$lang)) {
$filename = LANG_PATH.$lang.'/'.$name.'.'.$lang;
}
elseif(file_exists(LANG_PATH.$lang.'/'.$name.'.'.DEFAULT_LANG)) {
$filename = LANG_PATH.$lang.'/'.$name.'.'.DEFAULT_LANG;
}
else {
return;
}
$lines = file($filename);
// parse file
while (list ($line_num, $line) = each ($lines)) {
$buffer = split(' ', $line);
if(!strstr('#', $buffer[0])) {
$text = trim(strstr($line, ' '));
if(!defined('LANG_'.strtoupper($buffer[0]))) define('LANG_'.strtoupper($buffer[0]), $text);
}
}
}
function html2txt ($content) {
$trans = array_flip(get_html_translation_table(HTML_ENTITIES));
$search = array ("'<script[^>]*?>.*?</script>'si", // Strip out javascript
"'<[\/\!]*?[^<>]*?>'si", // Strip out html tags
"'([\r\n])[\s]+'", // Strip out white space
"'&(quot|#34);'i", // Replace html entities
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i");
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
if(file_exists('inc/data/html_replace.conf')) {
$lines = file('inc/data/html_replace.conf');
while (list ($line_num, $line) = each ($lines)) {
$buffer = split(' ', $line);
$wildcards[$buffer[0]] = trim($buffer[1]);
}
}
$content = str_replace("\n", "", $content);
$content = strtr($content, $wildcards);
$content = str_replace('\tab', " ", $content);
$content = preg_replace ($search, $replace, $content);
$content = str_replace('\nl', "\n", $content);
$content = strtr($content, $trans);
$content = wordwrap($content);
return $content;
}
function write_log () {
// format:
// host timestamp id time user lang flavour design
$fp = fopen('logs/'.date("Y_m").'.log', 'a');
while(!$fp) {
$fp = fopen('logs/'.date("Y_m").'.log', 'a');
usleep(20);
}
if(defined('START')) {
$time = substr((string) (getmicrotime() - START), 0, 6);
}
if(SESSION_DBID > 0) { $user = SESSION_DBID; }
else { $user = '-'; }
global $design;
fwrite($fp, $GLOBALS['REMOTE_ADDR'].' '.time().' '.$GLOBALS['id'].' '.$time.' '.$user.
' '.$GLOBALS['lang'].' '.$GLOBALS['flavour'].' '.$design['name']."\n");
fclose($fp);
}
function awf_error_handler ($errno, $errstr, $errfile, $errline) {
static $mail_sent = false;
switch($errno) {
case 1:
echo '<p><b>Fatal Error. Mail sent to webmaster...</b></p>';
error_log($GLOBALS['REMOTE_ADDR'].' '.time().' '.$GLOBALS['id'].
" FATAL $errno $errstr $errline $errfile\n", 3, 'log/'.date("Y_m").'_error.log');
if(!$mail_sent) {
// send email
$sent_mail = true;
error_log("FATAL ERROR:\nhttp://".$SERVER_NAME.$REQUEST_URI."?id=$id\n\nDate:".date(DATETIME_FORMAT).
"\nError: $errstr\nFile: $errfile\nLine: $errline\n\nhave a nice day ;-)", 1, WEBMASTER_MAIL);
}
break;
case 2:
case 3:
case 4:
error_log($GLOBALS['REMOTE_ADDR'].' '.time().' '.$GLOBALS['id'].
" ERROR $errno $errstr $errline $errfile\n", 3, 'log/'.date("Y_m").'_error.log');
break;
case 5:
case 6:
case 7:
error_log($GLOBALS['REMOTE_ADDR'].' '.time().' '.$GLOBALS['id'].
" WARNING $errno $errstr $errline $errfile\n", 3, 'log/'.date("Y_m").'_error.log');
default: break;
}
}
function transform ($value, $datatype) {
global $id;
global $document;
global $profile;
global $wildcards;
switch ($datatype) {
case 'notrans': return($value);
case 'image_hide': return;
case 'image':
if(file_exists($value) && $image_size = getimagesize($value)) return ('<img src="'.$value.'" '.$image_size[3].' border="0" />');
return '';
case 'image_left':
if(file_exists($value) && $image_size = getimagesize($value)) return ('<img src="'.$value.'" '.$image_size[3].' align="left" border="0" hspace="10" vspace="1" />');
return '';
case 'image_right':
if(file_exists($value) && $image_size = getimagesize($value)) return ('<img src="'.$value.'" '.$image_size[3].' align="right" border="0" hspace="10" vspace="1" />');
return '';
case 'image_popup':
if(file_exists($value)) include(INC_PATH.'misc/show_image.inc'); return '';
return '';
case 'clean': return(trim(strip_tags(replace_pattern(replace_wildcards($value, $profile), $wildcards))));
case 'text': return(url_to_link(replace_pattern(nl2br(replace_wildcards(htmlentities($value), $profile)), $wildcards)));
case 'usertext': return(url_to_link(replace_pattern(nl2br(htmlentities($value)), $wildcards)));
case 'html': return(replace_pattern(replace_wildcards($value, $profile), $wildcards));
case 'extrans': return(nl2br(replace_pattern(replace_wildcards($value, $profile), $wildcards)));
case 'php': return(replace_pattern(eval($value), $wildcards));
case 'datetime': return timestamp_to_string ($value, $mode = 'datetime');
case 'date': return timestamp_to_string ($value, $mode = 'date');
case 'time': return timestamp_to_string ($value, $mode = 'time');
case 'user_id': if($value == '-1') { return LANG_ANONYMOUS_USER; }
else { return '<a href="javascript:sendmessage('.$value.')">'.get_user_nickname($value).'</a>'; }
case 'external': readfile(trim($value)); return '';
case 'html2txt': return html2txt($value);
case 'currency': return number_format($value, DECIMALS, DEC_POINT, THOUSANDS_SEP).' '.CURRENCY_SYM;
case 'xml': return ($value); // TODO!!!
case 'dir_icons': include(INC_PATH.'misc/dir_icons.inc'); return '';
case 'dir_list': include(INC_PATH.'misc/dir_list.inc'); return '';
default: return $value;
}
return $value;
}
function create_editor_input ($title, $value, $type) {
global $id;
global $document;
global $profile;
global $wildcards;
switch ($type) {
case 'area_input' : include (INC_PATH.'misc/area_input.inc'); return true;
case 'onoff_input': include (INC_PATH.'misc/onoff_input.inc'); return true;
case 'text_input' : include (INC_PATH.'misc/text_input.inc'); return true;
case 'image_input': include (INC_PATH.'misc/image_input.inc'); return true;
case 'icon_input' : include (INC_PATH.'misc/icon_input.inc'); return true;
default : break;
}
}
function remove_file ($filename) {
if(!file_exists(BASE_PATH.$filename)) return false;
if(is_dir(BASE_PATH.$filename)) {
$handle=opendir(BASE_PATH.$filename);
while (false != ($file = readdir($handle))) {
if($file != '..' && $file != '.') remove_file ($filename.'/'.$file);
}
rmdir(BASE_PATH.$filename); }
else {
unlink(BASE_PATH.$filename);
}
return true;
}
function clear_cache ($id) {
if(!is_numeric($id) || CACHE_TIME == '0') return false;
remove_file(get_dir_name('cache', $id, false));
}
function get_age ($birthday) {
return floor((time() - $birthday) / 31536000);
}
function get_online_users ($time = 10) {
$time = time() - ($time * 60);
$qres = sql_query("SELECT AVG(views), AVG(registered) FROM ".TABLE_USERS);
$row = sql_fetch_row($qres);
sql_free_result($qres);
$avg_views = $row[0];
$avg_reg_time = time() - $row[1];
$avg_activity = ($avg_views / $avg_reg_time);
$qres = sql_query("SELECT id, email, views, registered, last_login FROM ".TABLE_USERS." WHERE last_login >= ".date(YmdHis, $time)." ORDER BY last_login DESC");
while($row = sql_fetch_row($qres)) {
$users[$row[0]]['email'] = stripslashes($row[1]);
$users[$row[0]]['views'] = $row[2];
$users[$row[0]]['registered'] = $row[3];
$users[$row[0]]['online'] = true;
$users[$row[0]]['activity'] = round((($row[2] / (time() - $row[3])) / (($row[2] / (time() - $row[3])) + $avg_activity)) * 100);
$qres2 = sql_query("SELECT name, value FROM ".TABLE_USERDATA." WHERE user_id = $row[0] AND
( name = 'gender' OR name = 'nickname' OR name = 'birthday' OR name = 'icq')");
while($row2 = sql_fetch_row($qres2)) {
$users[$row[0]][stripslashes($row2[0])] = stripslashes($row2[1]);
}
sql_free_result($qres2);
if(!isset($users[$row[0]]['nickname']) || $users[$row[0]]['nickname'] == '')
$users[$row[0]]['nickname'] = email_to_string($users[$row[0]]['email']);
}
sql_free_result($qres);
return $users;
}
function save_var ($name, $var, $user_id = -1) {
if($user_id != -1) {
$dir = get_dir_name('users/private', $user_id);
}
else {
$dir = INC_PATH.DATA_PATH.'/vars';
}
$fp = fopen($dir.'/'.$name, 'w');
if(!$fp) return false;
fwrite($fp, serialize($var));
fclose($fp);
return true;
}
function load_var ($name, $user_id = -1) {
if($user_id != -1) {
$dir = get_dir_name('users/private', $user_id);
}
else {
$dir = INC_PATH.DATA_PATH.'/vars';
}
if(!file_exists($dir.'/'.$name)) return NULL;
$fp = fopen($dir.'/'.$name, 'r');
if(!$fp) return false;
$var = unserialize(fread($fp, filesize($dir.'/'.$name)));
fclose($fp);
return $var;
}
function get_users ($userlist, $time = 10) {
$time = time() - ($time * 60);
$qres = sql_query("SELECT AVG(views), AVG(registered) FROM ".TABLE_USERS);
$row = sql_fetch_row($qres);
sql_free_result($qres);
$avg_views = $row[0];
$avg_reg_time = time() - $row[1];
$avg_activity = ($avg_views / $avg_reg_time);
while(list($key, $value) = each($userlist)) {
$qres = sql_query("SELECT id, email, views, registered, last_login FROM ".TABLE_USERS." WHERE id = $key");
$row = sql_fetch_row($qres);
$users[$row[0]]['email'] = stripslashes($row[1]);
$users[$row[0]]['views'] = $row[2];
$users[$row[0]]['registered'] = $row[3];
$users[$row[0]]['online'] = ($row[4] >= date(YmdHis, $time));
$users[$row[0]]['activity'] = round((($row[2] / (time() - $row[3])) / (($row[2] / (time() - $row[3])) + $avg_activity)) * 100);
$qres2 = sql_query("SELECT name, value FROM ".TABLE_USERDATA." WHERE user_id = $row[0] AND
( name = 'gender' OR name = 'nickname' OR name = 'birthday' OR name = 'icq')");
while($row2 = sql_fetch_row($qres2)) {
$users[$row[0]][stripslashes($row2[0])] = stripslashes($row2[1]);
}
sql_free_result($qres2);
if(!isset($users[$row[0]]['nickname']) || $users[$row[0]]['nickname'] == '')
$users[$row[0]]['nickname'] = email_to_string($users[$row[0]]['email']);
sql_free_result($qres);
}
return $users;
}
function search_users ($search, $time = 10) {
$qres = sql_query("SELECT user_id FROM ".TABLE_USERDATA." WHERE (name='nickname' OR name='interests' OR name='country') AND value LIKE '%".addslashes($search)."%'");
while($row = sql_fetch_row($qres)) {
$userlist[$row[0]] = 1;
}
return get_users ($userlist, $time);
}
function get_dir_name ($basedir, $id, $create_dir = true) {
if(defined(CONFIG_CREATE_MASK)) { $CONFIG_CREATE_MASK = CONFIG_CREATE_MASK; }
else { $CONFIG_CREATE_MASK = 0700; }
if(!file_exists($basedir) && $create_dir) mkdir($basedir, $CONFIG_CREATE_MASK);
if(!is_numeric($id) || $id < 0) {
if(!file_exists($basedir.'/default') && $create_dir) mkdir($basedir.'/default', $CONFIG_CREATE_MASK);
return ($basedir.'/default');
}
else {
// A maximum of 2^15 files per directory should be allowed on 32 bit os, but we want to split up
// after 3.000 for performance reasons (this means max. 96.000.000 files):
$dir = $basedir.'/'.floor($id / 3000);
if(!file_exists($dir) && $create_dir) mkdir($dir, $CONFIG_CREATE_MASK);
$dir .= '/'.$id;
if(!file_exists($dir) && $create_dir) mkdir($dir, $CONFIG_CREATE_MASK);
return $dir;
}
}
function is_online ($user_id, $time = 10) {
if(!is_numeric($user_id)) return false;
$time = time() - ($time * 60);
$qres = sql_query("SELECT last_login FROM ".TABLE_USERS." WHERE id = $user_id");
$row = sql_fetch_row($qres);
sql_free_result($qres);
return ($row[0] >= date(YmdHis, $time));
}
function user_since ($user_id) {
if(!is_numeric($user_id)) return false;
$qres = sql_query("SELECT registered FROM ".TABLE_USERS." WHERE id = $user_id");
$row = sql_fetch_row($qres);
sql_free_result($qres);
return $row[0];
}
function include_modules ($position) {
global $modules;
global $profile;
if(isset($modules)){
reset($modules);
if(SESSION_STATUS != 'ok') {
while (list ($modid, $value) = each ($modules)) {
include_module($value, 1, $position);
}
}
else {
while (list ($modid, $value) = each ($modules)) {
if($value['removeable'] == 1 && isset($profile['module_'.$modid])) {
$value['visible'] = $profile['module_'.$modid];
}
if(!isset($profile['module_size_'.$modid])) { $profile['module_size_'.$modid] = 1; }
include_module($value, $profile['module_size_'.$modid], $position);
}
}
}
}
function get_url ($id, $params = '') {
if(defined('URL_REWRITE')) {
if($params != '') $params = '?'.$params;
if($id == '') return("index.html$params");
return("$id.html$params");
}
else {
global $PHP_SELF;
if($id == '') {
if($params != '') $params = '?'.$params;
return($PHP_SELF.$params);
}
if($params != '') $params = '&'.$params;
return $PHP_SELF.'?id='.$id.$params;
}
}
function get_cmodule_id ($doctype) {
global $doctypes;
static $cmodules = array();
if(count($cmodules == 0)) $cmodules = load_var('common_cmodules');
if(isset($cmodules[$doctype])) {
return $cmodules[$doctype];
}
else {
$qres = sql_query("SELECT id FROM ".TABLE_NODES." WHERE type_id = ".$doctypes[$doctype]." ORDER BY sort_order LIMIT 1");
if(sql_num_rows($qres) > 0) {
$row = sql_fetch_row($qres);
sql_free_result($qres);
$cmodules[$doctype] = $row[0];
save_var('common_cmodules', $cmodules);
return $row[0];
}
else {
return -1;
}
}
}
include('inc/custom_functions.inc');
?>