<?php // translator ready // addnews ready // mail ready require_once("lib/dump_item.php"); 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); $info = explode(",", $v); $val[0] = $info[0]; $info[0] = $val; } else { //$info = split(",",$val); $info = explode(",",$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 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 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((float)$info[2],2); $max = round((float)$info[3],2); $step = round((float)$info[4],2); if ($step==0) $step=1; rawoutput("<select name='$keyout'>", true); $val = round((float)$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 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 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 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(str_replace("`n", "\n", $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(str_replace("`n", "\n", $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(" <script language='JavaScript'> function prepare_form(id){ var theTable; var theDivs=''; var x=0; var weight=''; for (x in formSections[id]){ theTable = document.getElementById('showFormTable'+x); if (x != $startIndex ){ theTable.style.visibility='hidden'; theTable.style.display='none'; weight=''; }else{ theTable.style.visibility='visible'; theTable.style.display='inline'; weight='color: yellow;'; } theDivs += \"<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>\"; } theDivs += \"<div style='display: block;'> </div>\"; theDivs += \"<input type='hidden' name='showFormTabIndex' value='$startIndex' id='showFormTabIndex'>\"; document.getElementById('showFormSection'+id).innerHTML = theDivs; } function showFormTabClick(formid,sectionid){ var theTable; var theButton; for (x in formSections[formid]){ theTable = document.getElementById('showFormTable'+x); theButton = document.getElementById('showFormButton'+x); if (x == sectionid){ theTable.style.visibility='visible'; theTable.style.display='inline'; theButton.style.fontWeight='normal'; theButton.style.color='yellow'; document.getElementById('showFormTabIndex').value = sectionid; }else{ theTable.style.visibility='hidden'; theTable.style.display='none'; theButton.style.fontWeight='normal'; theButton.style.color=''; } } } formSections = new Array(); </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(" prepare_form($showform_id); </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; } ?>