Initial commit
This commit is contained in:
902
lotgd-web/lotgd/lib/output.php
Executable file
902
lotgd-web/lotgd/lib/output.php
Executable file
@ -0,0 +1,902 @@
|
||||
<?php
|
||||
/**
|
||||
* Library Functions for page output.
|
||||
* translator ready
|
||||
* addnews ready
|
||||
* mail ready
|
||||
*
|
||||
* @author core_module
|
||||
*/
|
||||
|
||||
$nestedtags=array();
|
||||
$output="";
|
||||
|
||||
$block_new_output = false;
|
||||
|
||||
/**
|
||||
* Block any output statements temporarily
|
||||
*
|
||||
* @param bool $block should output be blocked
|
||||
*/
|
||||
function set_block_new_output($block)
|
||||
{
|
||||
global $block_new_output;
|
||||
$block_new_output = $block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Raw output (unprocessed) appended to the output buffer
|
||||
*
|
||||
* @param string $indata
|
||||
*/
|
||||
function rawoutput($indata) {
|
||||
global $output, $block_new_output;
|
||||
|
||||
if ($block_new_output) return;
|
||||
|
||||
$output .= $indata . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles color and style encoding, and appends to the output buffer ($output)
|
||||
*
|
||||
* @param string|array $indata If an array is passed then the format for sprintf is assumed otherwise a simple string is assumed
|
||||
*
|
||||
* @see sprintf, apponencode
|
||||
*/
|
||||
function output_notl($indata){
|
||||
global $output, $block_new_output;
|
||||
|
||||
if ($block_new_output) return;
|
||||
|
||||
$args = func_get_args();
|
||||
//pop true off the end if we have it
|
||||
$last = array_pop($args);
|
||||
if ($last!==true){
|
||||
array_push($args,$last);
|
||||
$priv = false;
|
||||
}else{
|
||||
$priv = true;
|
||||
}
|
||||
$out = $indata;
|
||||
$args[0]=&$out;
|
||||
//apply variables
|
||||
if (count($args)>1){
|
||||
//special case since we use `% as a color code so often.
|
||||
$out = str_replace("`%","`%%",$out);
|
||||
$out = call_user_func_array("sprintf",$args);
|
||||
}
|
||||
//holiday text
|
||||
if ($priv==false) $out = holidayize($out,'output');
|
||||
//`1`2 etc color & formatting
|
||||
$out = appoencode($out,$priv);
|
||||
//apply to the page.
|
||||
$output.=tlbutton_pop().$out;
|
||||
$output.="\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs a translated, color/style encoded string to the browser.
|
||||
*
|
||||
* @param string|array What to output. If an array is passed then the format used by sprintf is assumed
|
||||
*
|
||||
* @see output_notl
|
||||
*
|
||||
*/
|
||||
function output(){
|
||||
global $block_new_output;
|
||||
|
||||
if ($block_new_output) return;
|
||||
$args = func_get_args();
|
||||
if (is_array($args[0])) $args = $args[0];
|
||||
if (is_bool($args[0]) && array_shift($args)) {
|
||||
$schema= array_shift($args);
|
||||
$args[0] = translate($args[0],$schema);
|
||||
} else {
|
||||
$args[0] = translate($args[0]);
|
||||
}
|
||||
call_user_func_array("output_notl",$args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate debug output for players who have the SU_DEBUG_OUTPUT flag set in the superuser mask
|
||||
*
|
||||
* @param string $text The string to output
|
||||
* @param bool $force If true, force debug output even for non SU/non flagged
|
||||
*/
|
||||
function debug($text, $force=false){
|
||||
global $session, $block_new_output;
|
||||
$temp = $block_new_output;
|
||||
set_block_new_output(false);
|
||||
if ($force || $session['user']['superuser'] & SU_DEBUG_OUTPUT){
|
||||
if (is_array($text)){
|
||||
require_once("lib/dump_item.php");
|
||||
$text = appoencode(dump_item($text),true);
|
||||
}
|
||||
rawoutput("<div class='debug'>$text</div>");
|
||||
}
|
||||
set_block_new_output($temp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the appropriate output based on the LOGD coding system (ie: `b: Bold, `i: Italic)
|
||||
*
|
||||
* @param string $data The string to be output
|
||||
* @param bool $priv Indicates if the passed string ($data) contains HTML
|
||||
* @return string An output (HTML) formatted string
|
||||
*/
|
||||
function appoencode($data,$priv=false){
|
||||
global $nestedtags,$session;
|
||||
$start = 0;
|
||||
$out="";
|
||||
if( ($pos = strpos($data, "`")) !== false) {
|
||||
global $nestedtags;
|
||||
if (!isset($nestedtags['font'])) $nestedtags['font']=false;
|
||||
if (!isset($nestedtags['div'])) $nestedtags['div']=false;
|
||||
if (!isset($nestedtags['i'])) $nestedtags['i']=false;
|
||||
if (!isset($nestedtags['b'])) $nestedtags['b']=false;
|
||||
if (!isset($nestedtags['<'])) $nestedtags['<']=false;
|
||||
if (!isset($nestedtags['>'])) $nestedtags['>']=false;
|
||||
if (!isset($nestedtags['h'])) $nestedtags['h']=false;
|
||||
|
||||
static $colors = array(
|
||||
"1" => "colDkBlue",
|
||||
"2" => "colDkGreen",
|
||||
"3" => "colDkCyan",
|
||||
"4" => "colDkRed",
|
||||
"5" => "colDkMagenta",
|
||||
"6" => "colDkYellow",
|
||||
"7" => "colDkWhite",
|
||||
"~" => "colBlack",
|
||||
"!" => "colLtBlue",
|
||||
"@" => "colLtGreen",
|
||||
"#" => "colLtCyan",
|
||||
"\$" => "colLtRed",
|
||||
"%" => "colLtMagenta",
|
||||
"^" => "colLtYellow",
|
||||
"&" => "colLtWhite",
|
||||
")" => "colLtBlack",
|
||||
"e" => "colDkRust",
|
||||
"E" => "colLtRust",
|
||||
"g" => "colXLtGreen",
|
||||
"G" => "colXLtGreen",
|
||||
"j" => "colMdGrey",
|
||||
"J" => "colMdBlue",
|
||||
"k" => "colaquamarine",
|
||||
"K" => "coldarkseagreen",
|
||||
"l" => "colDkLinkBlue",
|
||||
"L" => "colLtLinkBlue",
|
||||
"m" => "colwheat",
|
||||
"M" => "coltan",
|
||||
"p" => "collightsalmon",
|
||||
"P" => "colsalmon",
|
||||
"q" => "colDkOrange",
|
||||
"Q" => "colLtOrange",
|
||||
"R" => "colRose",
|
||||
"T" => "colDkBrown",
|
||||
"t" => "colLtBrown",
|
||||
"V" => "colBlueViolet",
|
||||
"v" => "coliceviolet",
|
||||
"x" => "colburlywood",
|
||||
"X" => "colbeige",
|
||||
"y" => "colkhaki",
|
||||
"Y" => "coldarkkhaki",
|
||||
);
|
||||
do {
|
||||
++$pos;
|
||||
if ($priv === false){
|
||||
$out .= HTMLEntities(substr($data, $start, $pos - $start - 1), ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
|
||||
} else {
|
||||
$out .= substr($data, $start, $pos - $start - 1);
|
||||
}
|
||||
$start = $pos + 1;
|
||||
if(isset($colors[$data[$pos]])) {
|
||||
if ($nestedtags['font']) $out.="</span>";
|
||||
else $nestedtags['font']=true;
|
||||
$out.="<span class='".$colors[$data[$pos]]."'>";
|
||||
} else {
|
||||
switch($data[$pos]){
|
||||
case "n":
|
||||
$out.="<br>\n";
|
||||
break;
|
||||
case "0":
|
||||
if ($nestedtags['font']) $out.="</span>";
|
||||
$nestedtags['font'] = false;
|
||||
break;
|
||||
case "b":
|
||||
if ($nestedtags['b']){
|
||||
$out.="</b>";
|
||||
$nestedtags['b']=false;
|
||||
}else{
|
||||
$nestedtags['b']=true;
|
||||
$out.="<b>";
|
||||
}
|
||||
break;
|
||||
case "i":
|
||||
if ($nestedtags['i']) {
|
||||
$out.="</i>";
|
||||
$nestedtags['i']=false;
|
||||
}else{
|
||||
$nestedtags['i']=true;
|
||||
$out.="<i>";
|
||||
}
|
||||
break;
|
||||
case "c":
|
||||
if ($nestedtags['div']) {
|
||||
$out.="</div>";
|
||||
$nestedtags['div']=false;
|
||||
}else{
|
||||
$nestedtags['div']=true;
|
||||
$out.="<div align='center'>";
|
||||
}
|
||||
break;
|
||||
case "h":
|
||||
if ($nestedtags['h']) {
|
||||
$out.="</em>";
|
||||
$nestedtags['h']=false;
|
||||
}else{
|
||||
$nestedtags['h']=true;
|
||||
$out.="<em>";
|
||||
}
|
||||
break;
|
||||
case ">":
|
||||
if ($nestedtags['>']){
|
||||
$nestedtags['>']=false;
|
||||
$out.="</div>";
|
||||
}else{
|
||||
$nestedtags['>']=true;
|
||||
$out.="<div style='float: right; clear: right;'>";
|
||||
}
|
||||
break;
|
||||
case "<":
|
||||
if ($nestedtags['<']){
|
||||
$nestedtags['<']=false;
|
||||
$out.="</div>";
|
||||
}else{
|
||||
$nestedtags['<']=true;
|
||||
$out.="<div style='float: left; clear: left;'>";
|
||||
}
|
||||
break;
|
||||
case "H":
|
||||
if ($nestedtags['div']) {
|
||||
$out.="</span>";
|
||||
$nestedtags['div']=false;
|
||||
}else{
|
||||
$nestedtags['div']=true;
|
||||
$out.="<span class='navhi'>";
|
||||
}
|
||||
break;
|
||||
case "w":
|
||||
global $session;
|
||||
if(!isset($session['user']['weapon']))
|
||||
$session['user']['weapon']="";
|
||||
$out.=appoencode($session['user']['weapon'],$priv);
|
||||
break;
|
||||
case "`":
|
||||
$out.="`";
|
||||
++$pos;
|
||||
break;
|
||||
default:
|
||||
$out.="`".$data[$pos];
|
||||
}
|
||||
}
|
||||
} while( ($pos = strpos($data, "`", $pos)) !== false);
|
||||
}
|
||||
if ($priv === false){
|
||||
$out .= HTMLEntities(substr($data, $start), ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
|
||||
} else {
|
||||
$out .= substr($data, $start);
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
$blockednavs = array(
|
||||
'blockpartial'=>array(),
|
||||
'blockfull'=>array(),
|
||||
'blockcat'=>array(),
|
||||
'unblockpartial'=>array(),
|
||||
'unblockfull'=>array()
|
||||
);
|
||||
|
||||
/**
|
||||
* Called to block the display of a nav
|
||||
* if $partial is true, it will block any nav that begins with the given $link.
|
||||
* if $partial is false, it will block only navs that have exactly the given $link.
|
||||
*
|
||||
* @param string $link The URL to block
|
||||
* @param bool $partial
|
||||
*/
|
||||
function blocknav($link,$partial=false){
|
||||
//prevents a script from being able to generate navs on the given $link.
|
||||
global $blockednavs;
|
||||
$p = ($partial?'partial':'full');
|
||||
$blockednavs["block$p"][$link] = true;
|
||||
//eliminate any unblocked navs that match this description.
|
||||
if (isset($blockednavs["unblock$p"][$link])) {
|
||||
unset($blockednavs["unblock$p"][$link]);
|
||||
}
|
||||
if ($partial){
|
||||
reset($blockednavs['unblockpartial']);
|
||||
while (list($key,$val)=each($blockednavs['unblockpartial'])){
|
||||
if (substr($link,0,strlen($val))==$val ||
|
||||
substr($val,0,strlen($link))==$link){
|
||||
unset($blockednavs['unblockpartial'][$val]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlocks a nav from the blocked navs Array
|
||||
* if $partial is true, it will unblock any nav that begins with the given $link.
|
||||
* if $partial is false, it will unblock only navs that have exactly the given $link.
|
||||
*
|
||||
* @param string $link The nav to unblock
|
||||
* @param bool $partial If the passed nav is partial or not
|
||||
*/
|
||||
function unblocknav($link,$partial=false){
|
||||
//prevents a link that was otherwise blocked with blocknav() from
|
||||
//actually being blocked.
|
||||
global $blockednavs;
|
||||
$p = ($partial?'partial':'full');
|
||||
$blockednavs["unblock$p"][$link] = true;
|
||||
//eliminate any blocked navs that match this description.
|
||||
if (isset($blockednavs["block$p"][$link])) {
|
||||
unset($blockednavs["block$p"][$link]);
|
||||
}
|
||||
if ($partial){
|
||||
reset($blockednavs['blockpartial']);
|
||||
while (list($key,$val)=each($blockednavs['blockpartial'])){
|
||||
if (substr($link,0,strlen($val))==$val ||
|
||||
substr($val,0,strlen($link))==$link){
|
||||
unset($blockednavs['blockpartial'][$val]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to block the display of an entire category of navs
|
||||
*
|
||||
* @param string $cat The category to block
|
||||
*/
|
||||
function blocknavcat($cat){
|
||||
//prevents a script from being able to generate navs on the given $cat.
|
||||
global $blockednavs;
|
||||
if(!isset($blockednavs["blockcat"][$cat])) $blockednavs["blockcat"][$cat] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlocks a nav category from the blocked navs Array
|
||||
*
|
||||
* @param string $cat The category to unblock
|
||||
*/
|
||||
function unblocknavcat($cat){
|
||||
//prevents a category that was otherwise blocked with blocknavcat() from
|
||||
//actually being blocked.
|
||||
global $blockednavs;
|
||||
//eliminate any blocked nav cats that match this description.
|
||||
$blockednavs["blockcat"][$cat] = false;
|
||||
}
|
||||
|
||||
function appendcount($link) {
|
||||
global $session;
|
||||
return appendlink($link, "c=" . $session['counter'] . "-" . date("His"));
|
||||
}
|
||||
|
||||
function appendlink($link, $new)
|
||||
{
|
||||
if (strpos($link, "?") !== false) {
|
||||
return $link . '&' . $new;
|
||||
} else {
|
||||
return $link . '?' . $new;
|
||||
}
|
||||
}
|
||||
|
||||
$navsection="";
|
||||
$navbysection = array();
|
||||
$navschema = array();
|
||||
$navnocollapse = array();
|
||||
$block_new_navs = false;
|
||||
|
||||
/**
|
||||
* Allow header/footer code to block/unblock additional navs
|
||||
*
|
||||
* @param bool $block should new navs be blocked
|
||||
*/
|
||||
function set_block_new_navs($block)
|
||||
{
|
||||
global $block_new_navs;
|
||||
$block_new_navs = $block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and/or store a nav banner for the player
|
||||
*
|
||||
* @param string $text the display string for the nav banner
|
||||
* @param collapse $collapse (default true) can the nav section collapse
|
||||
*/
|
||||
function addnavheader($text, $collapse=true,$translate=TRUE)
|
||||
{
|
||||
global $navsection,$navbysection,$translation_namespace;
|
||||
global $navschema,$navnocollapse, $block_new_navs,$notranslate;
|
||||
|
||||
if ($block_new_navs) return;
|
||||
|
||||
if (is_array($text)){
|
||||
$text = "!array!".serialize($text);
|
||||
}
|
||||
$navsection=$text;
|
||||
if (!array_key_exists($text,$navschema))
|
||||
$navschema[$text] = $translation_namespace;
|
||||
//So we can place sections with out adding navs to them.
|
||||
if (!isset($navbysection[$navsection]))
|
||||
$navbysection[$navsection] = array();
|
||||
if ($collapse === false) {
|
||||
$navnocollapse[$text] = true;
|
||||
}
|
||||
if ($translate === false) {
|
||||
if (!isset($notranslate))
|
||||
$notranslate = array();
|
||||
array_push($notranslate,array($text,""));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and/or store the allowed navs or nav banners for the player.
|
||||
* If $link is missing - then a banner will be displayed in the nav list
|
||||
* If $text is missing - the nav will be stored in the allowed navs for the player but not displayed
|
||||
* <B>ALL</B> internal site links that are displayed <B>MUST</B> also call addnav or badnav will occur.
|
||||
*
|
||||
* @param string $text (optional) The display string for the nav or nav banner
|
||||
* @param string $link (optional) The URL of the link
|
||||
* @param bool $priv Indicates if the name contains HTML
|
||||
* @param bool $pop Indicates if the URL should generate a popup
|
||||
* @param string $popsize If a popup - the size of the popup window
|
||||
*
|
||||
* @see badnav, apponencode
|
||||
*/
|
||||
|
||||
function addnav_notl($text,$link=false,$priv=false,$pop=false,$popsize="500x300"){
|
||||
global $navsection,$navbysection,$navschema,$notranslate;
|
||||
global $block_new_navs;
|
||||
|
||||
if ($block_new_navs) return;
|
||||
|
||||
if ($link===false) {
|
||||
// Don't do anything if text is ""
|
||||
if ($text != "") {
|
||||
addnavheader($text,TRUE,FALSE);
|
||||
}
|
||||
}else{
|
||||
$args = func_get_args();
|
||||
if ($text==""){
|
||||
//if there's no text to display, may as well just stick this on
|
||||
//the nav stack now.
|
||||
call_user_func_array("private_addnav",$args);
|
||||
}else{
|
||||
if (!isset($navbysection[$navsection]))
|
||||
$navbysection[$navsection] = array();
|
||||
if (!isset($notranslate))
|
||||
$notranslate = array();
|
||||
array_push($navbysection[$navsection],$args);
|
||||
array_push($notranslate,$args);
|
||||
}
|
||||
}
|
||||
}
|
||||
function addnav($text,$link=false,$priv=false,$pop=false,$popsize="500x300"){
|
||||
global $navsection,$navbysection,$translation_namespace,$navschema;
|
||||
global $block_new_navs;
|
||||
|
||||
if ($block_new_navs) return;
|
||||
|
||||
if ($link===false) {
|
||||
// Don't do anything if text is ""
|
||||
if ($text != "") {
|
||||
addnavheader($text);
|
||||
}
|
||||
}else{
|
||||
$args = func_get_args();
|
||||
if ($text==""){
|
||||
//if there's no text to display, may as well just stick this on
|
||||
//the nav stack now.
|
||||
call_user_func_array("private_addnav",$args);
|
||||
}else{
|
||||
if (!isset($navbysection[$navsection]))
|
||||
$navbysection[$navsection] = array();
|
||||
$t = $args[0];
|
||||
if (is_array($t)) {
|
||||
$t = $t[0];
|
||||
}
|
||||
if (!array_key_exists($t,$navschema))
|
||||
$navschema[$t] = $translation_namespace;
|
||||
array_push($navbysection[$navsection],array_merge($args,array("translate"=>false)));
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determine if a nav/URL is blocked
|
||||
*
|
||||
* @param string $link The nav to check
|
||||
* @return bool
|
||||
*/
|
||||
function is_blocked($link)
|
||||
{
|
||||
global $blockednavs;
|
||||
if (isset($blockednavs['blockfull'][$link])) return true;
|
||||
reset($blockednavs['blockpartial']);
|
||||
while (list($l,$dummy)=each($blockednavs['blockpartial'])){
|
||||
$shouldblock = false;
|
||||
if (substr($link,0,strlen($l))==$l) {
|
||||
if (isset($blockednavs['unblockfull'][$link]) &&
|
||||
$blockednavs['unblockfull'][$link]) return false;
|
||||
reset($blockednavs['unblockpartial']);
|
||||
while (list($l2,$dummy)= each($blockednavs['unblockpartial'])){
|
||||
if (substr($link,0,strlen($l2))==$l2){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine how many navs are available
|
||||
*
|
||||
* @param string $section The nav section to check
|
||||
* @return int
|
||||
*/
|
||||
function count_viable_navs($section)
|
||||
{
|
||||
global $navbysection, $blockednavs;
|
||||
|
||||
if (isset($blockednavs['blockcat'][$section]) && $blockednavs['blockcat'][$section] == true) {
|
||||
return 0;
|
||||
}
|
||||
$count = 0;
|
||||
$val = $navbysection[$section];
|
||||
reset($val);
|
||||
if (count($val) > 0) {
|
||||
while(list($k, $nav) = each($val)) {
|
||||
if (is_array($nav) && count($nav) > 0) {
|
||||
$link = $nav[1]; // [0] is the text, [1] is the link
|
||||
if (!is_blocked($link)) $count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determins if there are any navs for the player
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function checknavs() {
|
||||
global $navbysection, $session;
|
||||
|
||||
// If we already have navs entered (because someone stuck raw links in)
|
||||
// just return true;
|
||||
if (is_array($session['allowednavs']) &&
|
||||
count($session['allowednavs']) > 0) return true;
|
||||
|
||||
// If we have any links which are going to be stuck in, return true
|
||||
reset($navbysection);
|
||||
while(list($key, $val) = each($navbysection)) {
|
||||
if (count_viable_navs($key) > 0) {
|
||||
reset($val);
|
||||
while(list($k, $v) = each($val)) {
|
||||
if (is_array($v) && count($v) > 0) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We have no navs.
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds navs for display
|
||||
*
|
||||
* @return string Output formatted navs
|
||||
*/
|
||||
function buildnavs(){
|
||||
global $navbysection, $navschema, $session, $navnocollapse;
|
||||
reset($navbysection);
|
||||
$builtnavs="";
|
||||
while (list($key,$val)=each($navbysection)){
|
||||
$tkey = $key;
|
||||
$navbanner="";
|
||||
if (count_viable_navs($key)>0){
|
||||
if ($key>"") {
|
||||
if ($session['loggedin']) tlschema($navschema[$key]);
|
||||
if (substr($key,0,7)=="!array!"){
|
||||
$key = unserialize(substr($key,7));
|
||||
}
|
||||
$navbanner = private_addnav($key);
|
||||
if ($session['loggedin']) tlschema();
|
||||
}
|
||||
|
||||
$style = "default";
|
||||
$collapseheader = "";
|
||||
$collapsefooter = "";
|
||||
|
||||
if ($tkey > "" && (!array_key_exists($tkey,$navnocollapse) || !$navnocollapse[$tkey])) {
|
||||
// Generate the collapsable section header
|
||||
$args = array("name"=>"nh-{$key}",
|
||||
"title"=>($key ? $key : "Unnamed Navs"));
|
||||
$args = modulehook("collapse-nav{", $args);
|
||||
if (isset($args['content']))
|
||||
$collapseheader = $args['content'];
|
||||
if (isset($args['style']))
|
||||
$style = $args['style'];
|
||||
if (!($key > "") && $style == "classic") {
|
||||
$navbanner = "<TR><TD>";
|
||||
}
|
||||
}
|
||||
|
||||
reset($val);
|
||||
$sublinks = "";
|
||||
while (list($k,$v)=each($val)){
|
||||
if (is_array($v) && count($v)>0){
|
||||
$sublinks .= call_user_func_array("private_addnav",$v);
|
||||
}//end if
|
||||
}//end while
|
||||
|
||||
// Generate the enclosing collapsable section footer
|
||||
if ($tkey > "" && (!array_key_exists($tkey,$navnocollapse) || !$navnocollapse[$tkey])) {
|
||||
$args = modulehook("}collapse-nav");
|
||||
if (isset($args['content']))
|
||||
$collapsefooter = $args['content'];
|
||||
}
|
||||
|
||||
switch ($style) {
|
||||
case "classic":
|
||||
$navbanner = str_replace("</tr>","",$navbanner);
|
||||
$navbanner = str_replace("</td>","",$navbanner);
|
||||
// Build the nav section
|
||||
$builtnavs .= "{$navbanner}{$collapseheader}<TABLE align='left'>{$sublinks}</TABLE>{$collapsefooter}</TR></TD>\n";
|
||||
break;
|
||||
case "default":
|
||||
default:
|
||||
// Is style isn't set (should the module not be active)
|
||||
// - this catches it
|
||||
// Build the nav section
|
||||
$builtnavs .= "{$navbanner}{$collapseheader}{$sublinks}{$collapsefooter}\n";
|
||||
break;
|
||||
}
|
||||
}//end if
|
||||
}//end while
|
||||
$navbysection = array();
|
||||
return $builtnavs;
|
||||
}//end function
|
||||
|
||||
$accesskeys=array();
|
||||
$quickkeys=array();
|
||||
/**
|
||||
* Private functions (Undocumented)
|
||||
*
|
||||
* @param string $text
|
||||
* @param string $link
|
||||
* @param bool $priv
|
||||
* @param bool $pop
|
||||
* @param bool $popsize
|
||||
* @return mixed
|
||||
*/
|
||||
function private_addnav($text,$link=false,$priv=false,$pop=false,$popsize="500x300"){
|
||||
//don't call this directly please. I'll break your thumbs if you do.
|
||||
global $nav,$session,$accesskeys,$REQUEST_URI,$quickkeys,$navschema,$notranslate;
|
||||
|
||||
if (is_blocked($link)) return false;
|
||||
|
||||
$thisnav = "";
|
||||
$unschema = 0;
|
||||
$translate=true;
|
||||
if (isset($notranslate))
|
||||
if (in_array(array($text,$link),$notranslate)) $translate=false;
|
||||
|
||||
if (is_array($text)){
|
||||
if ($text[0] && $session['loggedin']) {
|
||||
if ($link === false) $schema = "!array!" . serialize($text);
|
||||
else $schema = $text[0];
|
||||
if ($translate) {
|
||||
tlschema($navschema[$schema]);
|
||||
$unschema = 1;
|
||||
}
|
||||
}
|
||||
if ($link != "!!!addraw!!!") {
|
||||
if ($translate) $text[0] = translate($text[0]);
|
||||
$text = call_user_func_array("sprintf",$text);
|
||||
} else {
|
||||
$text = call_user_func_array("sprintf",$text);
|
||||
}
|
||||
}else{
|
||||
if ($text && $session['loggedin'] && $translate) {
|
||||
tlschema($navschema[$text]);
|
||||
$unschema = 1;
|
||||
}
|
||||
if ($link != "!!!addraw!!!" && $text>"" && $translate) $text = translate($text); //leave the hack in here for now, use addnav_notl please
|
||||
}
|
||||
|
||||
$extra="";
|
||||
$ignoreuntil="";
|
||||
if ($link===false){
|
||||
$text = holidayize($text,'nav');
|
||||
$thisnav.=tlbutton_pop().templatereplace("navhead",array("title"=>appoencode($text,$priv)));
|
||||
}elseif ($link === "") {
|
||||
$text = holidayize($text,'nav');
|
||||
$thisnav.=tlbutton_pop().templatereplace("navhelp",array("text"=>appoencode($text,$priv)));
|
||||
} elseif ($link == "!!!addraw!!!") {
|
||||
$thisnav .= $text;
|
||||
}else{
|
||||
if ($text!=""){
|
||||
$extra="";
|
||||
if (strpos($link,"?")){
|
||||
$extra="&c={$session['counter']}";
|
||||
}else{
|
||||
$extra="?c={$session['counter']}";
|
||||
}
|
||||
|
||||
$extra.="-".date("His");
|
||||
//hotkey for the link.
|
||||
$key="";
|
||||
if ($text[1]=="?") {
|
||||
// check to see if a key was specified up front.
|
||||
$hchar = strtolower($text[0]);
|
||||
if ($hchar==' ' || array_key_exists($hchar,$accesskeys) && $accesskeys[$hchar]==1){
|
||||
$text = substr($text,2);
|
||||
$text = holidayize($text,'nav');
|
||||
if ($hchar == ' ') $key = " ";
|
||||
}else{
|
||||
$key = $text[0];
|
||||
$text = substr($text,2);
|
||||
$text = holidayize($text,'nav');
|
||||
$found=false;
|
||||
$text_len = strlen($text);
|
||||
for ($i=0;$i<$text_len; ++$i){
|
||||
$char = $text[$i];
|
||||
if ($ignoreuntil == $char){
|
||||
$ignoreuntil="";
|
||||
}else{
|
||||
if ($ignoreuntil<>""){
|
||||
if ($char=="<") $ignoreuntil=">";
|
||||
if ($char=="&") $ignoreuntil=";";
|
||||
if ($char=="`") $ignoreuntil=$text[$i+1];
|
||||
}else{
|
||||
if ($char==$key) {
|
||||
$found=true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($found==false) {
|
||||
//the hotkey for this link wasn't actually in the
|
||||
//text, prepend it in parens.
|
||||
if (strpos($text, "__") !== false) {
|
||||
$text=str_replace("__", "(".$key.") ", $text);
|
||||
}else{
|
||||
$text="(".strtoupper($key).") ".$text;
|
||||
}
|
||||
$i=strpos($text, $key);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$text = holidayize($text,'nav');
|
||||
}
|
||||
|
||||
if ($key==""){
|
||||
//we have no previously defined key. Look for a new one.
|
||||
for ($i=0;$i<strlen($text); $i++){
|
||||
$char = substr($text,$i,1);
|
||||
if ($ignoreuntil == $char) {
|
||||
$ignoreuntil="";
|
||||
}else{
|
||||
if ((isset($accesskeys[strtolower($char)]) && $accesskeys[strtolower($char)]==1) || (strpos("abcdefghijklmnopqrstuvwxyz0123456789", strtolower($char)) === false) || $ignoreuntil<>"") {
|
||||
if ($char=="<") $ignoreuntil=">";
|
||||
if ($char=="&") $ignoreuntil=";";
|
||||
if ($char=="`") $ignoreuntil=substr($text,$i+1,1);
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!isset($i)) $i=0;
|
||||
if ($i<strlen($text) && $key != ' '){
|
||||
$key=substr($text,$i,1);
|
||||
$accesskeys[strtolower($key)]=1;
|
||||
$keyrep=" accesskey=\"$key\" ";
|
||||
}else{
|
||||
$key="";
|
||||
$keyrep="";
|
||||
}
|
||||
|
||||
if ($key=="" || $key==" "){
|
||||
}else{
|
||||
$pattern1 = "/^" . preg_quote($key, "/") . "/";
|
||||
$pattern2 = "/([^`])" . preg_quote($key, "/") . "/";
|
||||
$rep1 = "`H$key`H";
|
||||
$rep2 = "\$1`H$key`H";
|
||||
$text = preg_replace($pattern1, $rep1, $text, 1);
|
||||
if (strpos($text, "`H") === false) {
|
||||
$text = preg_replace($pattern2, $rep2, $text, 1);
|
||||
}
|
||||
if ($pop){
|
||||
if ($popsize==""){
|
||||
$quickkeys[$key]="window.open('$link')";
|
||||
}else{
|
||||
$quickkeys[$key]=popup($link,$popsize);
|
||||
}
|
||||
}else{
|
||||
$quickkeys[$key]="window.location='$link$extra'";
|
||||
}
|
||||
}
|
||||
$n= templatereplace("navitem",array(
|
||||
"text"=>appoencode($text,$priv),
|
||||
"link"=>HTMLEntities($link.($pop!=true?$extra:""), ENT_COMPAT, getsetting("charset", "ISO-8859-1")),
|
||||
"accesskey"=>$keyrep,
|
||||
"popup"=>($pop==true ? "target='_blank'".($popsize>""?" onClick=\"".popup($link,$popsize)."; return false;\"":"") : "")
|
||||
));
|
||||
$n = str_replace("<a ",tlbutton_pop()."<a ",$n);
|
||||
$thisnav.=$n;
|
||||
}
|
||||
$session['allowednavs'][$link.$extra]=true;
|
||||
$session['allowednavs'][str_replace(" ", "%20", $link).$extra]=true;
|
||||
$session['allowednavs'][str_replace(" ", "+", $link).$extra]=true;
|
||||
if (($pos = strpos($link, "#")) !== false) {
|
||||
$sublink = substr($link, 0, $pos);
|
||||
$session['allowednavs'][$sublink.$extra]=true;
|
||||
}
|
||||
|
||||
}
|
||||
if ($unschema) tlschema();
|
||||
$nav .= $thisnav;
|
||||
return $thisnav;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine how many navs are available
|
||||
*
|
||||
* @return int The number of legal navs
|
||||
*/
|
||||
function navcount(){
|
||||
//returns count of total navs added, be it they are pending addition or
|
||||
//actually added.
|
||||
global $session,$navbysection;
|
||||
$c=count($session['allowednavs']);
|
||||
reset($navbysection);
|
||||
while (list($key,$val)=each($navbysection)){
|
||||
if (is_array($val)) $c+=count($val);
|
||||
}
|
||||
reset($navbysection);
|
||||
return $c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset and wipe the navs
|
||||
*
|
||||
*/
|
||||
function clearnav(){
|
||||
$session['allowednavs']=array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the output and wipe the navs
|
||||
*
|
||||
*/
|
||||
function clearoutput(){
|
||||
global $output,$nestedtags,$header,$nav,$session;
|
||||
|
||||
clearnav();
|
||||
$output="";
|
||||
unset($nestedtags);
|
||||
$header="";
|
||||
$nav="";
|
||||
}
|
||||
|
||||
?>
|
Reference in New Issue
Block a user