2001-12-01 15:20:48 +00:00
< ? php
// $Id$
function conf_init () {
global $HTTP_HOST , $REQUEST_URI ;
/*
** Try finding a matching configuration file by stripping the website ' s
** URI from left to right . If no configuration file is found , return a
** default value 'conf' .
*/
2002-01-27 14:58:45 +00:00
$file = strtolower ( strtr ( $HTTP_HOST . substr ( $REQUEST_URI , 0 , strrpos ( $REQUEST_URI , " / " )), " /: " , " .. " ));
2001-12-01 15:20:48 +00:00
while ( strlen ( $file ) > 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 ) && error_reporting ()) {
watchdog ( " error " , $types [ $errno ] . " : $message in $filename on line $line . " );
print $entry ;
}
}
function watchdog ( $type , $message ) {
global $user ;
db_query ( " INSERT INTO watchdog (uid, type, message, location, hostname, timestamp) VALUES (' $user->uid ', ' " . check_input ( $type ) . " ', ' " . check_input ( $message ) . " ', ' " . check_input ( getenv ( " REQUEST_URI " )) . " ', ' " . check_input ( 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 " );
}
}
}
2001-12-30 16:16:38 +00:00
function array2object ( $node ) {
if ( is_array ( $node )) {
foreach ( $node as $key => $value ) {
$object -> $key = $value ;
}
}
else {
$object = $node ;
}
return $object ;
}
function object2array ( $node ) {
if ( is_object ( $node )) {
foreach ( $node as $key => $value ) {
$array [ $key ] = $value ;
}
}
else {
$array = $node ;
}
return $array ;
}
2002-04-14 20:46:41 +00:00
function path_uri ( $brief = 0 ) {
2001-12-01 15:20:48 +00:00
global $HTTP_HOST , $REQUEST_URI ;
2002-04-14 20:46:41 +00:00
$path = $HTTP_HOST . substr ( $REQUEST_URI , 0 , strrpos ( $REQUEST_URI , " / " )) . " / " ;
if ( ! $brief ) {
$path = " http:// " . $path ;
}
return $path ;
2001-12-01 15:20:48 +00:00
}
function path_img () {
// use "http://your-image-server.com/ if you want to host images on a seperate server.
return " ./images/ " ;
}
function message_access () {
return t ( " You are not authorized to access to this page. " );
}
function message_na () {
return t ( " n/a " );
}
function message_throttle () {
return t ( " You exceeded the maximum submission rate. Please wait a few minutes and try again. " );
}
2001-12-27 15:27:44 +00:00
function locale_init () {
global $languages , $user ;
return ( $languages ? (( $user -> uid && $user -> language ) ? $user -> language : key ( $languages )) : 0 );
}
function t ( $string ) {
global $languages ;
return ( $languages && function_exists ( " locale " ) ? locale ( $string ) : $string );
}
function variable_init ( $conf = array ()) {
$result = db_query ( " SELECT * FROM variable " );
while ( $variable = db_fetch_object ( $result )) {
if ( ! isset ( $conf [ $variable -> name ])) {
$conf [ $variable -> name ] = $variable -> value ;
}
}
return $conf ;
}
function variable_get ( $name , $default , $object = 0 ) {
global $conf ;
return isset ( $conf [ $name ]) ? $conf [ $name ] : $default ;
}
function variable_set ( $name , $value ) {
global $conf ;
db_query ( " DELETE FROM variable WHERE name = ' " . check_query ( $name ) . " ' " );
db_query ( " INSERT INTO variable (name, value) VALUES (' " . check_query ( $name ) . " ', ' " . check_query ( $value ) . " ') " );
$conf [ $name ] = $value ;
}
function variable_del ( $name ) {
global $conf ;
db_query ( " DELETE FROM variable WHERE name = ' " . check_query ( $name ) . " ' " );
unset ( $conf [ $name ]);
}
2002-03-05 20:15:17 +00:00
/**
* Format a single result entry of a search query :
*
* @ param $item a single search result as returned by < module > _search of type
2002-04-14 20:46:41 +00:00
* array ( " count " => ... , " link " => ... , " title " => ... ,
2002-03-05 20:15:17 +00:00
* " user " => ... , " date " => ... , " keywords " => ... )
* @ param $type module type of this item
*/
2001-12-27 15:27:44 +00:00
function search_item ( $item , $type ) {
2002-03-05 20:15:17 +00:00
$output .= " <b> " . $item [ " count " ] . " <u><a href= \" " . $item [ " link " ] . " \" > " . $item [ " title " ] . " </a></u></b><br /> " ;
2001-12-27 15:27:44 +00:00
$output .= " <small> $type " . ( $item [ " user " ] ? " - " . $item [ " user " ] : " " ) . " " . ( $item [ " date " ] ? " - " . format_date ( $item [ " date " ], " small " ) : " " ) . " </small> " ;
$output .= " <br /><br /> " ;
return $output ;
}
2002-03-05 20:15:17 +00:00
/**
* Render a generic search form .
*
* " Generic " means " universal usable " - that is , usable not only from
2002-04-14 20:46:41 +00:00
* module . php ? mod = search , but also as a simple seach box ( without
* " Restrict search to " , help text , etc ) from theme ' s header etc .
* This means : provide options to only conditionally render certain
2002-03-05 20:15:17 +00:00
* parts of this form .
*
* @ param $action Form action . Defaults to module . php ? mod = search .
* @ param $query Query string . Defaults to global $keys .
2002-04-14 20:46:41 +00:00
* @ param $options != 0 : Render additional form fields / text
2002-03-05 20:15:17 +00:00
* ( " Restrict search to " , help text , etc ) .
*/
2001-12-27 15:27:44 +00:00
function search_form ( $action = 0 , $query = 0 , $options = 0 ) {
global $keys ;
if ( ! $action ) {
$action = " module.php?mod=search " ;
}
if ( ! $query ) {
$query = $keys ;
}
2002-03-05 20:15:17 +00:00
$output .= " <br /><input type= \" text \" size= \" 50 \" value= \" " . check_form ( $keys ) . " \" name= \" keys \" /> " ;
$output .= " <input type= \" submit \" value= \" " . t ( " Search " ) . " \" /> \n " ;
2001-12-27 15:27:44 +00:00
if ( $options != 0 ) {
$output .= " <br /> " ;
$output .= t ( " Restrict search to " ) . " : " ;
foreach ( module_list () as $name ) {
if ( module_hook ( $name , " search " )) {
2002-03-05 20:15:17 +00:00
$output .= " <input type= \" checkbox \" name= \" edit[type][ $name ] \" " . ( $edit [ " type " ][ $name ] ? " checked= \" checked \" " : " " ) . " /> " . t ( $name );
2001-12-27 15:27:44 +00:00
}
}
2002-03-05 20:15:17 +00:00
// TODO: (link to) search hints
2001-12-27 15:27:44 +00:00
}
2002-03-05 20:15:17 +00:00
$form .= " <br /> " ;
2001-12-27 15:27:44 +00:00
return form ( $output , " post " , $action );
}
/*
2002-03-05 20:15:17 +00:00
* Collect the search results :
*/
2001-12-27 15:27:44 +00:00
function search_data () {
global $keys , $edit ;
$keys = check_input ( $keys );
if ( $keys ) {
foreach ( module_list () as $name ) {
if ( module_hook ( $name , " search " ) && ( ! $edit [ " type " ] || $edit [ " type " ][ $name ]) && ( $result = module_invoke ( $name , " search " , check_query ( $keys )))) {
2002-03-05 20:15:17 +00:00
if ( $name == " node " || $name == " comment " ) {
$output .= " <b>Matching " . $name . " s ranked in order of relevance</b><br /> " ;
}
else {
$output .= " <b>Matching " . $name . " s</b><br /> " ;
}
2001-12-27 15:27:44 +00:00
foreach ( $result as $entry ) {
$output .= search_item ( $entry , $name );
}
}
}
2002-03-05 20:15:17 +00:00
if ( ! $output ) {
2001-12-27 15:27:44 +00:00
$output .= t ( " Your search yielded no results. " );
}
}
return $output ;
}
2002-03-05 20:15:17 +00:00
/**
* Display the search form and the resulting data .
*
2002-04-14 20:46:41 +00:00
* @ param $type If set , search only nodes of this type .
2002-03-05 20:15:17 +00:00
* Otherwise , search all types .
* @ param $action Form action . Defaults to module . php ? mod = search .
* @ param $query Query string . Defaults to global $keys .
2002-04-14 20:46:41 +00:00
* @ param $options != 0 : Render additional form fields / text
2002-03-05 20:15:17 +00:00
* ( " Restrict search to " , help text , etc ) .
*/
2001-12-27 15:27:44 +00:00
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 ();
}
2002-04-14 20:46:41 +00:00
function drupal_str_replace ( $from , $to , $subject ) {
/*
** Multiple item replace which works for * all * PHP versions
** ( PHP 4.05 + supports this natively using similar syntax ) .
** $from and $to should be same sized arrays , $subject is the
** source text .
*/
for ( $i = 0 ; $i < count ( $from ); $i ++ ) {
$subject = str_replace ( $from [ $i ], $to [ $i ], $subject );
}
return $subject ;
}
2001-12-01 15:20:48 +00:00
function drupal_goto ( $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 ( SID == " " || strstr ( $url , SID )) {
header ( " Location: $url " );
}
else 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 , $REQUEST_URI ;
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_export ( $text ) {
return htmlspecialchars ( stripslashes ( $text ));
}
function check_code ( $text ) {
return $text ;
}
function check_preview ( $text ) {
return check_output ( check_input ( $text ));
}
function check_query ( $text ) {
return addslashes ( stripslashes ( $text ));
}
function filter ( $text ) {
foreach ( module_list () as $name ) {
2002-03-05 20:15:17 +00:00
if ( module_hook ( $name , " filter " )) {
$text = module_invoke ( $name , " filter " , $text );
}
2001-12-01 15:20:48 +00:00
}
return $text ;
}
function check_input ( $text ) {
return check_query ( $text );
}
function check_output ( $text , $nl2br = 0 ) {
2001-12-30 16:16:38 +00:00
return ( $text ) ? ( $nl2br ? str_replace ( " \r " , " " , str_replace ( " \n " , " <br /> " , stripslashes ( $text ))) : stripslashes ( $text )) : message_na ();
2001-12-01 15:20:48 +00:00
}
function check_file ( $filename ) {
if ( is_uploaded_file ( $filename )) {
return 1 ;
}
else {
return 0 ;
}
}
function format_info ( $body , $block ) {
return " <table><tr><td><table align= \" right \" border= \" 1 \" width= \" 180 \" ><tr><td> $block </td></tr></table> $body </td></tr></table> \n " ;
}
function format_rss_channel ( $title , $link , $description , $items , $language = " en " ) {
$output .= " <channel> \n " ;
$output .= " <title> " . htmlentities ( strip_tags ( $title )) . " </title> \n " ;
$output .= " <link> " . htmlentities ( strip_tags ( $link )) . " </link> \n " ;
$output .= " <description> " . htmlentities ( $description ) . " </description> \n " ;
$output .= " <language> " . htmlentities ( strip_tags ( $language )) . " </language> \n " ;
$output .= $items ;
$output .= " </channel> \n " ;
return $output ;
}
function format_rss_item ( $title , $link , $description ) {
$output .= " <item> \n " ;
$output .= " <title> " . htmlentities ( strip_tags ( $title )) . " </title> \n " ;
$output .= " <link> " . htmlentities ( strip_tags ( $link )) . " </link> \n " ;
$output .= " <description> " . htmlentities ( $description ) . " </description> \n " ;
$output .= " </item> \n " ;
return $output ;
}
function format_plural ( $count , $singular , $plural ) {
return ( $count == 1 ) ? " $count " . t ( $singular ) : " $count " . t ( $plural );
}
function format_size ( $size ) {
$suffix = " bytes " ;
if ( $size > 1024 ) {
$size = round ( $size / 1024 , 2 );
$suffix = " KB " ;
}
if ( $size > 1024 ) {
$size = round ( $size / 1024 , 2 );
$suffix = " MB " ;
}
return " $size $suffix " ;
}
2002-01-05 16:28:34 +00:00
function cache_get ( $key ) {
$cache = db_fetch_object ( db_query ( " SELECT data FROM cache WHERE cid = ' " . check_query ( $key ) . " ' " ));
return $cache -> data ? $cache -> data : 0 ;
}
function cache_set ( $cid , $data , $expire = 0 ) {
if ( db_fetch_object ( db_query ( " SELECT cid FROM cache WHERE cid = ' " . check_query ( $cid ) . " ' " ))) {
2002-01-05 17:01:33 +00:00
db_query ( " UPDATE cache SET data = ' " . check_query ( $data ) . " ' WHERE cid = ' " . check_query ( $cid ) . " ' " );
2002-01-05 16:28:34 +00:00
}
else {
db_query ( " INSERT INTO cache (cid, data, expire) VALUES(' " . check_query ( $cid ) . " ', ' " . check_query ( $data ) . " ', ' " . check_query ( $expire ) . " ') " );
}
2001-12-01 15:20:48 +00:00
}
2002-01-05 16:28:34 +00:00
function cache_del ( $cid ) {
db_query ( " DELETE FROM cache WHERE cid = ' " . check_query ( $cid ) . " ' " );
}
function cache_clear () {
db_query ( " DELETE FROM cache WHERE expire < " . time () . " AND expire > 0 " );
}
function page_set_cache () {
2001-12-01 15:20:48 +00:00
global $user , $REQUEST_URI , $REQUEST_METHOD ;
if ( ! $user -> uid && $REQUEST_METHOD == " GET " ) {
2002-01-05 16:28:34 +00:00
if ( $data = ob_get_contents ()) {
cache_set ( $REQUEST_URI , $data , ( time () + variable_get ( " cache_clear " , 30 )));
2001-12-01 15:20:48 +00:00
}
}
}
2002-01-05 16:28:34 +00:00
function page_get_cache () {
2001-12-01 15:20:48 +00:00
global $user , $REQUEST_URI , $REQUEST_METHOD ;
if ( ! $user -> uid && $REQUEST_METHOD == " GET " ) {
2002-01-05 16:28:34 +00:00
if ( $cache = cache_get ( $REQUEST_URI )) {
cache_clear ();
}
else {
ob_start ();
2001-12-01 15:20:48 +00:00
}
}
2002-01-05 16:28:34 +00:00
return $cache ? $cache : 0 ;
2001-12-01 15:20:48 +00:00
}
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 : " 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 ( " m/d/y - H:i " , $timestamp );
break ;
case " medium " :
$date = t ( date ( " l " , $timestamp )) . " , " . date ( " 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 ( " AaBdgGhHiIjLmnrstTUYyZz " , $c )) {
$date = date ( $c , $timestamp ) . $date ;
}
else {
$date = $c . $date ;
}
}
break ;
default :
$date = t ( date ( " l " , $timestamp )) . " , " . date ( " m/d/Y - H:i " , $timestamp );
}
return $date ;
}
function format_name ( $object ) {
2001-12-05 18:54:14 +00:00
global $PHP_SELF ;
2001-12-01 15:20:48 +00:00
if ( $object -> uid && $object -> name ) {
2001-12-05 18:54:14 +00:00
if ( strstr ( $PHP_SELF , " admin.php " )) {
$output = " <a href= \" admin.php?mod=user&op=edit&id= $object->uid\ " > $object -> name </ a > " ;
}
else {
$output = " <a href= \" module.php?mod=user&op=view&id= $object->uid\ " > $object -> name </ a > " ;
}
2001-12-01 15:20:48 +00:00
}
else {
2001-12-05 18:54:14 +00:00
$output = variable_get ( anonymous , " Anonymous " );
2001-12-01 15:20:48 +00:00
}
2001-12-05 18:54:14 +00:00
return $output ;
2001-12-01 15:20:48 +00:00
}
function format_email ( $address ) {
return ( $address ) ? " <a href= \" mailto: $address\ " > $address </ A > " : message_na();
}
function format_url ( $address , $description = 0 ) {
$description = ( $description ) ? $description : $address ;
return ( $address ) ? " <a href= \" $address\ " > " . check_output( $description ) . " </ a > " : message_na();
}
function format_tag ( $link , $text ) {
return " '<a href= \" node.php?title='. urlencode(' $link ') .' \" >'. (' $text ' ? ' $text ' : ' $link ') .'</a>' " ;
}
function form ( $form , $method = " post " , $action = 0 , $options = 0 ) {
global $REQUEST_URI ;
return " <form action= \" " . ( $action ? $action : $REQUEST_URI ) . " \" method= \" $method\ " " . ( $options ? " $options " : " " ) . " > \n $form </ form > \n " ;
}
function form_item ( $title , $value , $description = 0 ) {
2001-12-20 22:00:00 +00:00
return " <p> " . ( $title ? " <b> $title :</b><br /> " : " " ) . $value . ( $description ? " <br /><small><i> $description </i></small> " : " " ) . " </p> \n " ;
2001-12-01 15:20:48 +00:00
}
2001-12-20 21:44:46 +00:00
function form_checkbox ( $title , $name , $value = 1 , $checked = 0 , $description = 0 ) {
return form_item ( 0 , " <input type= \" checkbox \" name= \" edit[ $name ] \" value= \" " . $value . " \" " . ( $checked ? " checked= \" checked \" " : " " ) . " /> $title " , $description );
2001-12-01 15:20:48 +00:00
}
function form_textfield ( $title , $name , $value , $size , $maxlength , $description = 0 ) {
return form_item ( $title , " <input maxlength= \" $maxlength\ " name = \ " edit[ $name ] \" size= \" $size\ " value = \ " " . check_form ( $value ) . " \" /> " , $description );
}
function form_password ( $title , $name , $value , $size , $maxlength , $description = 0 ) {
return form_item ( $title , " <input type= \" password \" maxlength= \" $maxlength\ " name = \ " edit[ $name ] \" size= \" $size\ " value = \ " " . check_form ( $value ) . " \" /> " , $description );
}
function form_textarea ( $title , $name , $value , $cols , $rows , $description = 0 ) {
return form_item ( $title , " <textarea wrap= \" virtual \" cols= \" $cols\ " rows = \ " $rows\ " name = \ " edit[ $name ] \" > " . check_form ( $value ) . " </textarea> " , $description );
}
2002-04-14 20:46:41 +00:00
function form_select ( $title , $name , $value , $options , $description = 0 , $extra = 0 , $multiple = 0 ) {
2001-12-01 15:20:48 +00:00
if ( count ( $options ) > 0 ) {
2002-04-14 20:46:41 +00:00
foreach ( $options as $key => $choice ) {
2002-01-27 14:58:45 +00:00
$select .= " <option value= \" $key\ " " . (is_array( $value ) ? (in_array( $key , $value ) ? " selected = \ " selected \" " : " " ) : ( $key == $value ? " selected= \" selected \" " : " " )) . " > " . check_form ( $choice ) . " </option> " ;
}
2002-04-14 20:46:41 +00:00
return form_item ( $title , " <select name= \" edit[ $name ] " . ( $multiple ? " [] " : " " ) . " \" " . ( $multiple ? " multiple " : " " ) . ( $extra ? " $extra " : " " ) . " > $select </select> " , $description );
2001-12-01 15:20:48 +00:00
}
}
function form_file ( $title , $name , $size , $description = 0 ) {
return form_item ( $title , " <input type= \" file \" name= \" edit[ $name ] \" size= \" $size\ " /> \n " , $description );
}
function form_hidden ( $name , $value ) {
return " <input type= \" hidden \" name= \" edit[ $name ] \" value= \" " . check_form ( $value ) . " \" /> \n " ;
}
function form_submit ( $value ) {
return " <input type= \" submit \" name= \" op \" value= \" " . check_form ( $value ) . " \" /> \n " ;
}
function field_get ( $string , $name ) {
ereg ( " , $name =([^,]+) " , " , $string " , $regs );
return $regs [ 1 ];
}
function field_set ( $string , $name , $value ) {
$rval = ereg_replace ( " , $name =[^,]+ " , " " , " , $string " );
2002-03-05 20:15:17 +00:00
if ( $value ) {
$rval .= ( $rval == " , " ? " " : " , " ) . " $name = $value " ;
}
2001-12-01 15:20:48 +00:00
return substr ( $rval , 1 );
}
function field_merge ( $a , $b ) {
foreach ( explode ( " , " , $b ) as $data ) {
$entry = explode ( " = " , $data );
$a = field_set ( $a , $entry [ 0 ], $entry [ 1 ]);
}
return $a ;
}
function link_page () {
2002-04-02 09:45:57 +00:00
global $custom_links ;
2002-04-14 20:46:41 +00:00
2002-04-02 09:45:57 +00:00
if ( is_array ( $custom_links )) {
return $custom_links ;
}
else {
$links [] = " <a href= \" index.php \" > " . t ( " home " ) . " </a> " ;
2002-04-14 20:46:41 +00:00
foreach ( module_list () as $name ) {
2002-04-02 09:45:57 +00:00
if ( module_hook ( $name , " link " )) {
$links = array_merge ( $links , module_invoke ( $name , " link " , " page " ));
2002-04-14 20:46:41 +00:00
}
2001-12-01 15:20:48 +00:00
}
2002-04-02 09:45:57 +00:00
return $links ;
2001-12-01 15:20:48 +00:00
}
2002-04-14 20:46:41 +00:00
}
2001-12-01 15:20:48 +00:00
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 ;
2001-12-30 16:16:38 +00:00
list ( $usec , $sec ) = explode ( " " , microtime ());
$timer = ( float ) $usec + ( float ) $sec ;
2001-12-01 15:20:48 +00:00
}
function timer_print () {
global $timer ;
2001-12-30 16:16:38 +00:00
list ( $usec , $sec ) = explode ( " " , microtime ());
$stop = ( float ) $usec + ( float ) $sec ;
$diff = $stop - $timer ;
print " <pre>execution time: $diff sec</pre> " ;
2001-12-23 21:47:02 +00:00
}
function query_print () {
global $queries ;
print " <pre> " ;
print_r ( $queries );
print " </pre> " ;
2001-12-01 15:20:48 +00:00
}
function page_header () {
if ( variable_get ( " dev_timer " , 0 )) {
timer_start ();
}
if ( variable_get ( " cache " , 0 )) {
2002-01-05 16:28:34 +00:00
if ( $data = page_get_cache ()) {
2001-12-01 15:20:48 +00:00
print $data ;
exit ();
}
}
}
function page_footer () {
if ( variable_get ( " dev_timer " , 0 )) {
timer_print ();
}
2001-12-23 21:47:02 +00:00
if ( variable_get ( " dev_query " , 0 )) {
query_print ();
}
2001-12-01 15:20:48 +00:00
if ( variable_get ( " cache " , 0 )) {
2002-01-05 16:28:34 +00:00
page_set_cache ();
2001-12-01 15:20:48 +00:00
}
}
$config = conf_init ();
unset ( $conf );
2002-01-27 14:58:45 +00:00
2001-12-01 15:20:48 +00:00
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 " ;
// initialize configuration variables:
$conf = variable_init ( $conf );
// initialize installed modules:
module_init ();
// initialize localization system:
$locale = locale_init ();
// initialize theme:
$theme = theme_init ();
// set error handler:
set_error_handler ( " error_handler " );
?>