4) { if (file_exists("includes/$file.php")) { return $file; } else { $file = substr($file, strpos($file, ".") + 1); } } return "conf"; } function error_handler($errno, $message, $filename, $line, $variables) { $types = array(1 => "error", 2 => "warning", 4 => "parse error", 8 => "notice", 16 => "core error", 32 => "core warning", 64 => "compile error", 128 => "compile warning", 256 => "user error", 512 => "user warning", 1024 => "user notice"); $entry = $types[$errno] .": $message in $filename on line $line."; if (($errno == 1 || $errno == 2 || $errno == 4 || $errno == 256) && error_reporting()) { watchdog("error", $types[$errno] .": $message in $filename on line $line."); print "
$entry"; } } function watchdog($type, $message, $link = NULL) { global $user; db_query("INSERT INTO watchdog (uid, type, message, link, location, hostname, timestamp) VALUES ('$user->uid', '%s', '%s', '%s', '%s', '%s', '%s')", $type, $message, $link, request_uri(), getenv("REMOTE_ADDR"), time()); } function throttle($type, $rate) { if (!user_access("access administration pages")) { if ($throttle = db_fetch_object(db_query("SELECT * FROM watchdog WHERE type = '$type' AND hostname = '". getenv("REMOTE_ADDR") ."' AND ". time() ." - timestamp < $rate"))) { watchdog("warning", "throttle: '". getenv("REMOTE_ADDR") ."' exceeded submission rate - $throttle->type"); die(message_throttle()); } else { watchdog($type, "throttle"); } } } function check_php_setting($name, $value) { if (ini_get($name) != $value) { print "
Note tat the value of PHP's configuration option $name
is incorrect. It should be set to '$value' for Drupal to work properly. Either configure your webserver to support .htaccess
files so Drupal's .htaccess
file can set it to the proper value, or edit your php.ini
file directly. This message will automatically dissapear when the problem has been fixed.
". t("Matching ". $name ."s ranked in order of relevance") .":
"; } else { $output .= "". t("Matching ". $name ."s") .":
"; } foreach ($result as $entry) { $output .= search_item($entry, $name); } } } if (!$output) { $output .= t("Your search yielded no results."); } } return $output; } /** * Display the search form and the resulting data. * * @param $type If set, search only nodes of this type. * Otherwise, search all types. * @param $action Form action. Defaults to module.php?mod=search. * @param $query Query string. Defaults to global $keys. * @param $options != 0: Render additional form fields/text * ("Restrict search to", help text, etc). */ function search_type($type = 0, $action = 0, $query = 0, $options = 0) { global $edit; if ($type) { $edit["type"][$type] = "on"; } return search_form($action, $query, $options) . search_data(); } function drupal_goto($url) { /* ** Translate & to simply & */ $url = str_replace ("&", "&", $url); /* ** It is advised to use "drupal_goto()" instead of PHP's "header()" as ** "drupal_goto()" will append the user's session ID to the URI when PHP ** is compiled with "--enable-trans-sid". */ if (!ini_get("session.use_trans_sid") || !session_id() || strstr($url, $sid)) { header("Location: $url"); } else { $sid = session_name() . "=" . session_id(); if (strstr($url, "?") && !strstr($url, $sid)) { header("Location: $url&". $sid); } else { header("Location: $url?". $sid); } } /* ** The "Location" header sends a REDIRECT status code to the http ** deamon. In some cases this can go wrong, so we make sure none ** of the code /below/ gets executed when we redirect. */ exit(); } /* ** Stores the referer in a persistent variable: */ function referer_save() { global $referer, $HTTP_REFERER; if (!strstr($HTTP_REFERER, request_uri())) { $referer = $HTTP_REFERER; session_register("referer"); } } /* ** Restores the referer from a persistent variable: */ function referer_load() { global $referer; if (session_is_registered("referer")) { return $referer; } else { return 0; } } function check_form($text) { return htmlspecialchars(stripslashes($text)); } function check_query($text) { return addslashes(stripslashes($text)); } function check_input($text) { return addslashes(stripslashes($text)); } function filter($text) { foreach (module_list() as $name) { if (module_hook($name, "filter")) { $text = module_invoke($name, "filter", $text); } } return $text; } function check_output($text) { if ($text) { $text = stripslashes($text); if (strip_tags($text, "
") == $text) {
$text = nl2br($text);
}
}
else {
$text = message_na();
}
return $text;
}
function check_file($filename) {
if (is_uploaded_file($filename)) {
return 1;
}
else {
return 0;
}
}
function format_rss_channel($title, $link, $description, $items, $language = "en", $args = array()) {
// arbitrary elements may be added using the $args associative array
$output .= "\n";
$output .= " ". htmlentities(strip_tags($title)) ." \n";
$output .= " ". htmlentities(strip_tags($link)) ."\n";
$output .= " ". htmlentities($description) ." \n";
$output .= " ". htmlentities(strip_tags($language)) ." \n";
foreach ($args as $key => $value) {
$output .= "<$key>". htmlentities(strip_tags($value)) ."$key>";
}
$output .= $items;
$output .= " \n";
return $output;
}
function format_rss_item($title, $link, $description, $args = array()) {
// arbitrary elements may be added using the $args associative array
$output .= "- \n";
$output .= "
". htmlentities(strip_tags($title)) ." \n";
$output .= " ". htmlentities(strip_tags($link)) ."\n";
$output .= " ". htmlentities(check_output($description)) ." \n";
foreach ($args as $key => $value) {
$output .= "<$key>". htmlentities(strip_tags($value)) ."$key>";
}
$output .= " \n";
return $output;
}
function format_plural($count, $singular, $plural) {
return ($count == 1) ? "$count ". t($singular) : "$count ". t($plural);
}
function format_size($size) {
$suffix = t("bytes");
if ($size > 1024) {
$size = round($size / 1024, 2);
$suffix = t("KB");
}
if ($size > 1024) {
$size = round($size / 1024, 2);
$suffix = t("MB");
}
return t("%size %suffix", array("%size" => $size, "%suffix" => $suffix));
}
function cache_get($key) {
$cache = db_fetch_object(db_query("SELECT data, created FROM cache WHERE cid = '%s'", $key));
$created = $cache->created;
return $cache->data ? $cache : 0;
}
function cache_set($cid, $data, $expire = 0) {
if (db_fetch_object(db_query("SELECT cid FROM cache WHERE cid = '%s'", $cid))) {
db_query("UPDATE cache SET data = '%s', created = %d, expire = %d WHERE cid = '%s'", $data, time(), $expire, $cid);
}
else {
db_query("INSERT INTO cache (cid, data, created, expire) VALUES('%s', '%s', %d, %d)", $cid, $data, time(), $expire);
}
}
function cache_clear_all($cid = NULL) {
if (empty($cid)) {
db_query("DELETE FROM cache WHERE expire <> 0");
}
else {
db_query("DELETE FROM cache WHERE cid = '%s'", $cid);
}
}
function cache_clear_old($cid = NULL) {
if (empty($cid)) {
db_query("DELETE FROM cache WHERE expire < ". time() ." AND expire > 0");
}
else {
db_query("DELETE FROM cache WHERE cid = '%s' AND expire < %s AND expire > 0", $cid, time());
}
}
function page_set_cache() {
global $user, $REQUEST_METHOD;
if (!$user->uid && $REQUEST_METHOD == "GET") {
if ($data = ob_get_contents()) {
cache_set(request_uri(), $data, (time() + variable_get("cache_clear", 120)));
}
}
}
function page_get_cache() {
global $user, $REQUEST_METHOD;
if (!$user->uid && $REQUEST_METHOD == "GET") {
if ($cache = cache_get(request_uri())) {
cache_clear_old();
}
else {
ob_start();
}
}
return $cache;
}
function format_interval($timestamp) {
$units = array("year|years" => 31536000, "week|weeks" => 604800, "day|days" => 86400, "hour|hours" => 3600, "min|min" => 60, "sec|sec" => 1);
foreach ($units as $key=>$value) {
$key = explode("|", $key);
if ($timestamp >= $value) {
$output .= ($output ? " " : "") . format_plural(floor($timestamp / $value), $key[0], $key[1]);
$timestamp %= $value;
}
}
return ($output) ? $output : t("0 sec");
}
function format_date($timestamp, $type = "medium", $format = "") {
global $user;
$timestamp += ($user->timezone) ? $user->timezone - date("Z") : 0;
switch ($type) {
case "small":
$date = date(variable_get("date_format", "m/d/Y - H:i"), $timestamp);
break;
case "medium":
$date = t(date("l", $timestamp)) .", ". date(variable_get("date_format", "m/d/Y - H:i"), $timestamp);
break;
case "large":
$date = t(date("l", $timestamp)) .", ". t(date("F", $timestamp)) ." ". date("d, Y - H:i", $timestamp);
break;
case "custom":
for ($i = strlen($format); $i >= 0; $c = $format[--$i]) {
if (strstr("DFlMSw", $c)) {
$date = t(date($c, $timestamp)) . $date;
}
else if (strstr("AaBdgGhHiIjLmnrstTUWYyZz", $c)) {
$date = date($c, $timestamp) . $date;
}
else {
$date = $c.$date;
}
}
break;
default:
$date = t(date("l", $timestamp)) .", ". date(variable_get("date_format", "m/d/Y - H:i"), $timestamp);
}
return $date;
}
function format_name($object) {
global $PHP_SELF;
if ($object->uid && $object->name) {
if (strstr($PHP_SELF, "admin.php")) {
$output = la($object->name, array("mod" => "user", "op" => "edit", "id" => $object->uid), "", array("title" => t("Administer user profile.")));
}
else {
$output = lm($object->name, array("mod" => "user", "op" => "view", "id" => $object->uid), "", array("title" => t("View user profile.")));
}
}
else {
$output = t(variable_get(anonymous, "Anonymous"));
}
return $output;
}
function format_tag($link, $text) {
return l(($text ? $text : $link), array("title" => $link));
}
function form($form, $method = "post", $action = 0, $options = 0) {
return "\n";
}
function form_item($title, $value, $description = 0) {
return "". ($title ? "$title:
" : "") . $value . ($description ? "
$description" : "") ."
\n";
}
function form_checkbox($title, $name, $value = 1, $checked = 0, $description = 0) {
return form_item(0, " $title", $description);
}
function form_textfield($title, $name, $value, $size, $maxlength, $description = 0) {
return form_item($title, "", $description);
}
function form_password($title, $name, $value, $size, $maxlength, $description = 0) {
return form_item($title, "", $description);
}
function form_textarea($title, $name, $value, $cols, $rows, $description = 0) {
return form_item($title, "", $description);
}
function form_select($title, $name, $value, $options, $description = 0, $extra = 0, $multiple = 0) {
if (count($options) > 0) {
foreach ($options as $key=>$choice) {
$select .= "";
}
return form_item($title, "", $description);
}
}
function form_file($title, $name, $size, $description = 0) {
return form_item($title, "\n", $description);
}
function form_hidden($name, $value) {
return "\n";
}
function form_submit($value) {
return "\n";
}
function form_weight($title = NULL, $name = "weight", $value = 0, $delta = 10, $description = 0, $extra = 0) {
for ($n = (-1*$delta); $n <= $delta; $n++) {
$weights[$n] = $n;
}
return form_select($title, $name, $value, $weights, $description, $extra);
}
/**
* Parse an URL; this function must be follow the changes of a clean url implementation
*
* @param string $url optional, url to parse; default to request_uri()
* @return array $result associative array:
* script => index/node/module/admin
* query => GET variables
*
*/
function drupal_parse_url($url = NULL) {
global $PHP_SELF;
static $cache;
if ($url == NULL) {
$url = $PHP_SELF ."?". getenv("QUERY_STRING");
}
if (!$cache[$url]) {
$parts = parse_url($url);
preg_match("/(\w+?)\.php/", $parts["path"], $found);
$cache[$url]["script"] = $found[1];
parse_str($parts["query"], $cache[$url]["query"]);
$cache[$url]["anchor"] = $parts["fragment"];
}
return $cache[$url];
}
/**
* Build an URL; use this functions when you must write an URL
* for example in a form or a redirect.
*
* @param $args dictionary of arguments to be passed to the script
* @param $script script to be invoked; optional, defaults to node
* @param $anchor optional, anchor name
*/
function drupal_url($args = array(), $script = "node", $anchor = 0) {
static $search, $replace;
if (!$search) {
/*
According to RFC 1738 [3] the special characters "$-_.+!*'()," and the
reserved characters "/:@#?&=" can be used unencoded within an URL
*/
$search = array("%24", "%2B", "%21", "%2A", "%27", "%28", "%29", "%2C", "%2F", "%3A", "%40", "%23", "%3F", "%26", "%3D");
$replace = array("$", "+", "!", "*", "'", "(", ")", ",", "/", ":", "@", "#", "?", "&", "=");
}
$t = array();
foreach ($args as $key => $value) {
$t[] = "$key=". str_replace($search, $replace, urlencode($value));
}
if (count($t)) {
return "$script.php?". implode("&", $t) . ($anchor ? "#$anchor" : "");
}
else {
return "$script.php". ($anchor ? "#$anchor" : "");
}
}
/**
* Build a HTML link; use this functions when you must write a link
* to another drupal page
*
* @param $args dictionary of arguments to be passed to the script
* @param $text text of the link
* @param $anchor optional, anchor name
* @param $script script to be invoked; optional, defaults to node
* @param $attributes optional, dictionary of attributes for the tag such as 'target', 'name', 'class', etc.
*/
function l($text, $args = array(), $script = "node", $anchor = "", $attributes = array()) {
$t = array();
foreach ($attributes as $key => $value) {
$t[] = "$key=\"$value\"";
}
return "$text";
}
function la($text, $args = array(), $anchor = "", $attributes = array()) {
// we don't call l() to avoid another duplication of the array
$t = array();
foreach ($attributes as $key => $value) {
$t[] = "$key=\"$value\"";
}
return "$text";
}
function lm($text, $args = array(), $anchor = "", $attributes = array()) {
// we don't call l() to avoid another duplication of the array
$t = array();
foreach ($attributes as $key => $value) {
$t[] = "$key=\"$value\"";
}
return "$text";
}
function field_get($string, $name) {
ereg(",$name=([^,]+)", ",$string", $regs);
return $regs[1];
}
function field_set($string, $name, $value) {
$rval = ereg_replace(",$name=[^,]+", "", ",$string");
if ($value) {
$rval .= ($rval == "," ? "" : ",") ."$name=$value";
}
return substr($rval, 1);
}
function link_page() {
global $custom_links;
if (is_array($custom_links)) {
return $custom_links;
}
else {
$links[] = l(t("home"), array(), "index", "", array("title" => t("Return to the main page.")));
foreach (module_list() as $name) {
if (module_hook($name, "link")) {
$links = array_merge($links, module_invoke($name, "link", "page"));
}
}
return $links;
}
}
function link_node($node, $main = 0) {
foreach (module_list() as $name) {
if (module_hook($name, "link")) {
$links = array_merge($links, module_invoke($name, "link", "node", $node, $main));
}
}
return $links ? $links : array();
}
function timer_start() {
global $timer;
list($usec, $sec) = explode(" ", microtime());
$timer = (float)$usec + (float)$sec;
}
function timer_print() {
global $timer;
list($usec, $sec) = explode(" ", microtime());
$stop = (float)$usec + (float)$sec;
$diff = $stop - $timer;
print "execution time: $diff sec
";
}
function query_print() {
global $queries;
print "";
print_r($queries);
print "
";
}
function page_header() {
if (variable_get("dev_timer", 0)) {
timer_start();
}
if (variable_get("cache", 0)) {
if ($cache = page_get_cache()) {
$date = gmdate("D, d M Y H:i:s", $cache->created) ." GMT";
header("Last-Modified: $date");
header("ETag: \"$date\"");
if ($headers = getallheaders()) {
// NOTE: the above is an Apache-ism so for the time being we don't send 304 headers to IIS servers.
if ($headers["If-Modified-Since"] == $date && $headers["If-None-Match"] == "\"$date\"") {
header("HTTP/1.0 304 Not Modified");
exit();
}
}
print $cache->data;
exit();
}
}
}
function page_footer() {
if (variable_get("dev_timer", 0)) {
timer_print();
}
if (variable_get("dev_query", 0)) {
query_print();
}
if (variable_get("cache", 0)) {
page_set_cache();
}
}
unset($conf);
$config = conf_init();
include_once "includes/$config.php";
include_once "includes/database.inc";
include_once "includes/xmlrpc.inc";
include_once "includes/module.inc";
include_once "includes/theme.inc";
include_once "includes/pager.inc";
include_once "includes/menu.inc";
// initialize configuration variables, using values from conf.php if available:
$conf = variable_init(isset($conf) ? $conf : array());
// initialize installed modules:
module_init();
// initialize localization system:
$locale = locale_init();
// initialize theme:
$theme = theme_init();
// set error handler:
set_error_handler("error_handler");
?>