function dump_item($item) { $out = ""; if (is_array($item)) { $temp = $item; } else { $temp = @unserialize($item); } if (is_array($temp)) { $out .= "array(" . count($temp) . ") {<div style='padding-left: 20pt;'>"; while (list($key, $val) = @each($temp)) { $out .= "'{$key}' = '" . dump_item($val) . "'`n"; } $out .= "</div>}"; } else { $out .= $item; } return $out; }
/** * 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) { $trace = debug_backtrace(); if (is_array($text)) { require_once "lib/dump_item.php"; $text = appoencode(dump_item($text), true); } $file1 = $trace[0]['file']; $line1 = $trace[0]['line']; $file2 = $trace[1]['file']; $line2 = $trace[1]['line']; rawoutput("<div class='debug'>{$file1}, line {$line1}, from {$file2}, line {$line2}<br />{$text}</div>"); } set_block_new_output($temp); }
/** * 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); }
function dump_item($item) { $output = ""; if (is_array($item)) { $temp = $item; } else { $temp = unserialize($item); } if (is_array($temp)) { $output .= "array(" . count($temp) . ") {<blockquote>"; while (list($key, $val) = @each($temp)) { $output .= "'{$key}' = '" . dump_item($val) . "'`n"; } $output .= "</blockquote>}"; } else { $output .= $item; } return $output; }
function showform($layout, $row, $nosave = false, $keypref = false) { global $session; static $showform_id = 0; static $title_id = 0; $showform_id++; $formSections = array(); $returnvalues = array(); $extensions = array(); $extensions = modulehook("showformextensions", $extensions); rawoutput("<table width='100%' cellpadding='0' cellspacing='0'><tr><td>"); rawoutput("<div id='showFormSection{$showform_id}'></div>"); rawoutput("</td></tr><tr><td> </td></tr><tr><td>"); rawoutput("<table cellpadding='2' cellspacing='0'>"); $i = 0; while (list($key, $val) = each($layout)) { $pretrans = 0; if ($keypref !== false) { $keyout = sprintf($keypref, $key); } else { $keyout = $key; } if (is_array($val)) { $v = $val[0]; $info = split(",", $v); $val[0] = $info[0]; $info[0] = $val; } else { $info = split(",", $val); } if (is_array($info[0])) { $info[0] = call_user_func_array("sprintf_translate", $info[0]); } else { $info[0] = translate($info[0]); } if (isset($info[1])) { $info[1] = trim($info[1]); } else { $info[1] = ""; } if ($info[1] == "title") { $title_id++; rawoutput("</table>"); $formSections[$title_id] = $info[0]; rawoutput("<table id='showFormTable{$title_id}' cellpadding='2' cellspacing='0'>"); rawoutput("<tr><td colspan='2' class='trhead'>"); output_notl("`b%s`b", $info[0], true); rawoutput("</td></tr>", true); $i = 0; } elseif ($info[1] == "note") { rawoutput("<tr class='" . ($i % 2 ? 'trlight' : 'trdark') . "'><td colspan='2'>"); output_notl("`i%s`i", $info[0], true); $i++; } elseif ($info[1] == "invisible") { // Don't show } else { if (isset($row[$key])) { $returnvalues[$key] = $row[$key]; } rawoutput("<tr class='" . ($i % 2 ? 'trlight' : 'trdark') . "'><td valign='top'>"); output_notl("%s", $info[0], true); rawoutput("</td><td valign='top'>"); $i++; } switch ($info[1]) { case "title": case "note": case "invisible": break; case "theme": // A generic way of allowing a theme to be selected. $skins = array(); $handle = @opendir("templates"); // Template directory open failed if (!$handle) { output("None available"); break; } while (false != ($file = @readdir($handle))) { if (strpos($file, ".htm") > 0) { array_push($skins, $file); } } // No templates installed! if (count($skins) == 0) { output("None available"); break; } natcasesort($skins); //sort them in natural order rawoutput("<select name='{$keyout}'>"); foreach ($skins as $skin) { if ($skin == $row[$key]) { rawoutput("<option value='{$skin}' selected>" . htmlentities(substr($skin, 0, strpos($skin, ".htm")), ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } else { rawoutput("<option value='{$skin}'>" . htmlentities(substr($skin, 0, strpos($skin, ".htm")), ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } } rawoutput("</select>"); break; case "location": // A generic way of allowing the location to be specified for // things which only want to be in one place. There are other // things which would be good to do as well of course, such // as making sure to handle village name changes in the module // that cares about this or what not, but this at least gives // some support. $vloc = array(); $vname = getsetting("villagename", LOCATION_FIELDS); $vloc[$vname] = "village"; $vloc['all'] = 1; $vloc = modulehook("validlocation", $vloc); unset($vloc['all']); reset($vloc); rawoutput("<select name='{$keyout}'>"); foreach ($vloc as $loc => $val) { if ($loc == $row[$key]) { rawoutput("<option value='{$loc}' selected>" . htmlentities($loc, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } else { rawoutput("<option value='{$loc}'>" . htmlentities($loc, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } } rawoutput("</select>"); break; case "checkpretrans": $pretrans = 1; // FALLTHROUGH // FALLTHROUGH case "checklist": reset($info); list($k, $v) = each($info); list($k, $v) = each($info); $select = ""; while (list($k, $v) = each($info)) { $optval = $v; list($k, $v) = each($info); $optdis = $v; if (!$pretrans) { $optdis = translate_inline($optdis); } if (is_array($row[$key])) { if ($row[$key][$optval]) { $checked = true; } else { $checked = false; } } else { //any other ways to represent this? debug("You must pass an array as the value when using a checklist."); $checked = false; } $select .= "<input type='checkbox' name='{$keyout}[{$optval}]' value='1'" . ($checked == $optval ? " checked" : "") . "> " . "{$optdis}" . "<br>"; } rawoutput($select); break; case "radiopretrans": $pretrans = 1; // FALLTHROUGH // FALLTHROUGH case "radio": reset($info); list($k, $v) = each($info); list($k, $v) = each($info); $select = ""; while (list($k, $v) = each($info)) { $optval = $v; list($k, $v) = each($info); $optdis = $v; if (!$pretrans) { $optdis = translate_inline($optdis); } $select .= "<input type='radio' name='{$keyout}' value='{$optval}'" . ($row[$key] == $optval ? " checked" : "") . "> " . "{$optdis}" . "<br>"; } rawoutput($select); break; case "dayrange": $start = strtotime(date("Y-m-d", strtotime("now"))); $end = strtotime($info[2]); $step = $info[3]; // we should really try to avoid an infinite loop here if // they define a time string which equates to 0 :/ $cur = $row[$key]; rawoutput("<select name='{$keyout}'>"); if ($cur && $cur < date("Y-m-d H:i:s", $start)) { rawoutput("<option value='{$cur}' selected>" . htmlentities($cur, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } for ($j = $start; $j < $end; $j = strtotime($step, $j)) { $d = date("Y-m-d H:i:s", $j); rawoutput("<option value='{$d}'" . ($cur == $d ? " selected" : "") . ">" . HTMLEntities("{$d}", ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } if ($cur && $cur > date("Y-m-d H:i:s", $end)) { rawoutput("<option value='{$cur}' selected>" . htmlentities($cur, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } rawoutput("</select>"); break; case "range": $min = (int) $info[2]; $max = (int) $info[3]; $step = (int) (isset($info[4]) ? $info[4] : false); if ($step == 0) { $step = 1; } rawoutput("<select name='{$keyout}'>"); if ($min < $max && ($max - $min) / $step > 300) { $step = max(1, (int) (($max - $min) / 300)); } for ($j = $min; $j <= $max; $j += $step) { rawoutput("<option value='{$j}'" . ($row[$key] == $j ? " selected" : "") . ">" . HTMLEntities("{$j}", ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } rawoutput("</select>"); break; case "floatrange": $min = round((double) $info[2], 2); $max = round((double) $info[3], 2); $step = round((double) $info[4], 2); if ($step == 0) { $step = 1; } rawoutput("<select name='{$keyout}'>", true); $val = round((double) $row[$key], 2); for ($j = $min; $j <= $max; $j = round($j + $step, 2)) { rawoutput("<option value='{$j}'" . ($val == $j ? " selected" : "") . ">" . HTMLEntities("{$j}", ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>", true); } rawoutput("</select>", true); break; case "bitfieldpretrans": $pretrans = 1; // FALLTHROUGH // FALLTHROUGH case "bitfield": //format: //DisplayName,bitfield,disablemask,(highbit,display)+ //1-26-03 added disablemask so this field type can be used // on bitfields other than superuser. reset($info); list($k, $v) = each($info); list($k, $v) = each($info); list($k, $disablemask) = each($info); rawoutput("<input type='hidden' name='{$keyout}" . "[0]' value='1'>", true); while (list($k, $v) = each($info)) { rawoutput("<input type='checkbox' name='{$keyout}" . "[{$v}]'" . (isset($row[$key]) && (int) $row[$key] & (int) $v ? " checked" : "") . ($disablemask & (int) $v ? "" : " disabled") . " value='1'> "); list($k, $v) = each($info); if (!$pretrans) { $v = translate_inline($v); } output_notl("%s`n", $v, true); } break; case "datelength": // However, there was a bug with your translation code wiping // the key name for the actual form. It's now fixed. // ok, I see that, but 24 hours and 1 day are the same // aren't they? $vals = array("1 hour", "2 hours", "3 hours", "4 hours", "5 hours", "6 hours", "8 hours", "10 hours", "12 hours", "16 hours", "18 hours", "24 hours", "1 day", "2 days", "3 days", "4 days", "5 days", "6 days", "7 days", "1 week", "2 weeks", "3 weeks", "4 weeks", "1 month", "2 months", "3 months", "4 months", "6 months", "9 months", "12 months", "1 year"); tlschema("showform"); while (list($k, $v) = each($vals)) { $vals[$k] = translate($v); rawoutput(tlbutton_pop()); } tlschema(); reset($vals); rawoutput("<select name='{$keyout}'>"); while (list($k, $v) = each($vals)) { rawoutput("<option value=\"" . htmlentities($v, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\"" . ($row[$key] == $v ? " selected" : "") . ">" . htmlentities($v, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"); } rawoutput("</select>"); break; case "enumpretrans": $pretrans = 1; // FALLTHROUGH // FALLTHROUGH case "enum": reset($info); list($k, $v) = each($info); list($k, $v) = each($info); $select = ""; $select .= "<select name='{$keyout}'>"; while (list($k, $v) = each($info)) { $optval = $v; list($k, $v) = each($info); $optdis = $v; if (!$pretrans) { $optdis = translate_inline($optdis); } $selected = 0; if (isset($row[$key]) && $row[$key] == $optval) { $selected = 1; } $select .= "<option value='{$optval}'" . ($selected ? " selected" : "") . ">" . HTMLEntities("{$optdis}", ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</option>"; } $select .= "</select>"; rawoutput($select); break; case "password": if (array_key_exists($key, $row)) { $out = $row[$key]; } else { $out = ""; } rawoutput("<input type='password' name='{$keyout}' value='" . HTMLEntities($out, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "'>"); break; case "bool": tlschema("showform"); $yes = translate_inline("Yes"); $no = translate_inline("No"); tlschema(); rawoutput("<select name='{$keyout}'>"); rawoutput("<option value='0'" . ($row[$key] == 0 ? " selected" : "") . ">{$no}</option>"); rawoutput("<option value='1'" . ($row[$key] == 1 ? " selected" : "") . ">{$yes}</option>"); rawoutput("</select>", true); break; case "hidden": if (isset($row[$key])) { rawoutput("<input type='hidden' name='{$keyout}' value=\"" . HTMLEntities($row[$key], ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\">" . HTMLEntities($row[$key], ENT_COMPAT, getsetting("charset", "ISO-8859-1"))); } break; case "viewonly": unset($returnvalues[$key]); if (isset($row[$key])) { output_notl(dump_item($row[$key]), true); } break; case "textarearesizeable": $resize = true; //FALLTHROUGH //FALLTHROUGH case "textarea": $cols = 0; if (isset($info[2])) { $cols = $info[2]; } if (!$cols) { $cols = 70; } $text = ""; if (isset($row[$key])) { $text = $row[$key]; } if (isset($resize) && $resize) { rawoutput("<script type=\"text/javascript\">function increase(target, value){ if (target.rows + value > 3 && target.rows + value < 50) target.rows = target.rows + value;}</script>"); rawoutput("<textarea id='textarea{$key}' class='input' name='{$keyout}' cols='{$cols}' rows='5'>" . htmlentities($text, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</textarea>"); rawoutput("<input type='button' onClick=\"increase(textarea{$key},1);\" value='+' accesskey='+'><input type='button' onClick=\"increase(textarea{$key},-1);\" value='-' accesskey='-'>"); } else { rawoutput("<textarea class='input' name='{$keyout}' cols='{$cols}' rows='5'>" . htmlentities($text, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "</textarea>"); } break; case "int": if (array_key_exists($key, $row)) { $out = $row[$key]; } else { $out = 0; } rawoutput("<input name='{$keyout}' value=\"" . HTMLEntities($out, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\" size='5'>"); break; case "float": rawoutput("<input name='{$keyout}' value=\"" . htmlentities($row[$key], ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\" size='8'>"); break; case "string": $len = 50; $minlen = 50; if (isset($info[2])) { $len = (int) $info[2]; } if ($len < $minlen) { $minlen = $len; } if ($len > $minlen) { $minlen = $len / 2; } if ($minlen > 70) { $minlen = 70; } if (array_key_exists($key, $row)) { $val = $row[$key]; } else { $val = ""; } rawoutput("<input size='{$minlen}' maxlength='{$len}' name='{$keyout}' value=\"" . HTMLEntities($val, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\">"); break; default: if (array_key_exists($info[1], $extensions)) { $func = $extensions[$info[1]]; if (array_key_exists($key, $row)) { $val = $row[$key]; } else { $val = ""; } call_user_func($func, $keyout, $val, $info); } else { if (array_key_exists($key, $row)) { $val = $row[$key]; } else { $val = ""; } rawoutput("<input size='50' name='{$keyout}' value=\"" . HTMLEntities($val, ENT_COMPAT, getsetting("charset", "ISO-8859-1")) . "\">"); } } rawoutput("</td></tr>", true); } rawoutput("</table><br>", true); if ($showform_id == 1) { $startIndex = (int) httppost("showFormTabIndex"); if ($startIndex == 0) { $startIndex = 1; } if (isset($session['user']['prefs']['tabconfig']) && $session['user']['prefs']['tabconfig'] == 0) { } else { rawoutput("\r\n\t\t \t<script language='JavaScript'>\r\n\t\t \tfunction prepare_form(id){\r\n\t\t \t\tvar theTable;\r\n\t\t \t\tvar theDivs='';\r\n\t\t \t\tvar x=0;\r\n\t\t \t\tvar weight='';\r\n\t\t \t\tfor (x in formSections[id]){\r\n\t\t \t\t\ttheTable = document.getElementById('showFormTable'+x);\r\n\t\t \t\t\tif (x != {$startIndex} ){\r\n\t\t\t \t\t\ttheTable.style.visibility='hidden';\r\n\t\t\t \t\t\ttheTable.style.display='none';\r\n\t\t\t \t\t\tweight='';\r\n\t\t\t \t\t}else{\r\n\t\t\t \t\t\ttheTable.style.visibility='visible';\r\n\t\t\t \t\t\ttheTable.style.display='inline';\r\n\t\t\t \t\t\tweight='color: yellow;';\r\n\t\t\t \t\t}\r\n\t\t\t \t\ttheDivs += \"<div id='showFormButton\"+x+\"' class='trhead' style='\"+weight+\"float: left; cursor: pointer; cursor: hand; padding: 5px; border: 1px solid #000000;' onClick='showFormTabClick(\"+id+\",\"+x+\");'>\"+formSections[id][x]+\"</div>\";\r\n\t\t \t\t}\r\n\t\t \t\ttheDivs += \"<div style='display: block;'> </div>\";\r\n\t\t\t\ttheDivs += \"<input type='hidden' name='showFormTabIndex' value='{$startIndex}' id='showFormTabIndex'>\";\r\n\t\t \t\tdocument.getElementById('showFormSection'+id).innerHTML = theDivs;\r\n\t\t \t}\r\n\t\t \tfunction showFormTabClick(formid,sectionid){\r\n\t\t \t\tvar theTable;\r\n\t\t \t\tvar theButton;\r\n\t\t \t\tfor (x in formSections[formid]){\r\n\t\t \t\t\ttheTable = document.getElementById('showFormTable'+x);\r\n\t\t \t\t\ttheButton = document.getElementById('showFormButton'+x);\r\n\t\t \t\t\tif (x == sectionid){\r\n\t\t \t\t\t\ttheTable.style.visibility='visible';\r\n\t\t \t\t\t\ttheTable.style.display='inline';\r\n\t\t \t\t\t\ttheButton.style.fontWeight='normal';\r\n\t\t \t\t\t\ttheButton.style.color='yellow';\r\n\t\t\t\t\t\tdocument.getElementById('showFormTabIndex').value = sectionid;\r\n\t\t \t\t\t}else{\r\n\t\t \t\t\t\ttheTable.style.visibility='hidden';\r\n\t\t \t\t\t\ttheTable.style.display='none';\r\n\t\t \t\t\t\ttheButton.style.fontWeight='normal';\r\n\t\t \t\t\t\ttheButton.style.color='';\r\n\t\t \t\t\t}\r\n\t\t \t\t}\r\n\t\t \t}\r\n\t\t \tformSections = new Array();\r\n\t\t\t</script>"); } } if (isset($session['user']['prefs']['tabconfig']) && $session['user']['prefs']['tabconfig'] == 0) { } else { rawoutput("<script language='JavaScript'>"); rawoutput("formSections[{$showform_id}] = new Array();"); reset($formSections); while (list($key, $val) = each($formSections)) { rawoutput("formSections[{$showform_id}][{$key}] = '" . addslashes($val) . "';"); } rawoutput("\r\n\t\tprepare_form({$showform_id});\r\n\t\t</script>"); } rawoutput("</td></tr></table>"); tlschema("showform"); $save = translate_inline("Save"); tlschema(); if ($nosave) { } else { rawoutput("<input type='submit' class='button' value='{$save}'>"); } return $returnvalues; }