<?php class LineEdit { public $label, $name, $value; function LineEdit($label, $name, $value = "") { $this->label = $label; $this->name = $name; $this->value = $value; } function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label ."</div>\n"; $str .= $indent . " <div class=\"widget\"><input name=\"vars[".$this->name."]\" value=\"".$this->value."\"/></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class LineEditPwd { public $label, $name, $value; function LineEditPwd($label, $name, $value = "") { $this->label = $label; $this->name = $name; $this->value = $value; } function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label ."</div>\n"; $str .= $indent . " <div class=\"widget\"><input name=\"vars[".$this->name."]\" value=\"".$this->value."\" type=\"password\"/></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class FileUpload { public $label, $name, $accept; public function FileUpload($label, $name, $accept = "*") { $this->label = $label; $this->name = $name; $this->accept = $accept; } public function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label . "</div>\n"; $str .= $indent . " <div class=\"widget\"><input type=\"file\" name=\"" . $this->name. "\" accept=\"". $this->accept ."\"/></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class Button { public $label; public function Button($label) { $this->label = $label; } public function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\"></div>\n"; $str .= $indent . " <div class=\"widget\"><button type=\"submit\">". $this->label."</button></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class CheckBox { public $label, $name, $value; public function CheckBox($label, $name, $value = "") { $this->label = $label; $this->name = $name; $this->value = $value; } public function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label ."</div>\n"; $str .= $indent . " <div class=\"widget\"><input type=\"checkbox\" name=\"vars[".$this->name."]\" value=\"".$this->value."\"/></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class ComboBox { public $label, $name, $value, $values; public function ComboBox($label, $name, $value, $values) { $this->label = $label; $this->name = $name; $this->value = $value; $this->values = $values; } public function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">".$this->label."</div>\n"; $str .= $indent . " <div class=\"widget\">\n"; $str .= $indent . " <select name=\"vars[".$this->name."]\">\n"; foreach($this->values as $k => $v) { if($v != $this->value) $str .= $indent . " <option value=\"".$v."\">".$k."</option>\n"; else $str .= $indent . " <option value=\"".$v."\" selected>".$k."</option>\n"; } $str .= $indent . " </select>\n"; $str .= $indent . " </div>\n"; $str .= $indent . "</div>\n"; return $str; } } class Hidden { public $values; public function Hidden($values) { $this->values = $values; } public function render($indent = "") { $str = ""; foreach($this->values as $key => $value) { $str .= $indent . "<input type=\"hidden\" name=\"vars[".$key."]\" value=\"".$value."\"/>\n"; } return $str; } } class TextEdit { public $label, $name, $value; function TextEdit($label, $name, $value = "", $lines = "20") { $this->label = $label; $this->name = $name; $this->value = $value; $this->lines = $lines; } function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label ."</div>\n"; $str .= $indent . " <div class=\"widget\"><textarea rows=\"".$this->lines."\" class=\"textedit\" name=\"vars[".$this->name."]\">".$this->value."</textarea></div>\n"; $str .= $indent . "</div>\n"; return $str; } } class DateTimeEdit { public $label, $name, $timestamp; function DateTimeEdit($label, $name, $timestamp = 0) { $this->label = $label; $this->name = $name; $this->timestamp = $timestamp; } function render($indent = "") { if($this->timestamp == 0) $t = time(); else $t = $this->timestamp; $second = date('s',$t); $minute = date('i',$t); $hour = date('G',$t); $day = date('d',$t); $month = date('m',$t); $year = date('Y',$t); $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">".$this->label."</div>\n"; $str .= $indent . " <div class=\"widget\">\n"; $str .= $indent . " <input style=\"width: 50px;\" name=\"vars[".$this->name."_year]\" value=\"".$year."\"/>"; $str .= "/<input style=\"width: 30px;\" name=\"vars[".$this->name."_month]\" value=\"".$month."\"/>"; $str .= "/<input style=\"width: 30px;\" name=\"vars[".$this->name."_day]\" value=\"".$day."\"/>"; $str .= " - "; $str .= "<input style=\"width: 30px;\" name=\"vars[".$this->name."_hour]\" value=\"".$hour."\"/>"; $str .= ":<input style=\"width: 30px;\" name=\"vars[".$this->name."_minute]\" value=\"".$minute."\"/>"; $str .= ":<input style=\"width: 30px;\" name=\"vars[".$this->name."_second]\" value=\"".$second."\"/>\n"; $str .= $indent . " </div>\n"; $str .= $indent . "</div>\n"; return $str; } public function toTimestamp($t, $name) { $timestring = sprintf("%d", $t[$name."_year"]) ."/". sprintf("%d", $t[$name."_month"]) ."/". sprintf("%d", $t[$name."_day"]) ." ". sprintf("%d", $t[$name."_hour"]) .":". sprintf("%02d", $t[$name."_minute"]).":". sprintf("%02d", $t[$name."_second"]); return strtotime($timestring); } } class ImageComboBox { public $label, $name, $value, $values; public function ImageComboBox($label, $name, $value, $values) { $this->label = $label; $this->name = $name; $this->value = $value; $this->values = $values; } public function render($indent = "") { $selheight = 64; $height = $selheight * 0.8; if(get_class($this->values) == "Icons") $numicons = sizeof($this->values->icons); else $numicons = sizeof($this->values); $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">".$this->label."</div>\n"; $str .= $indent . " <div class=\"widget\">\n"; $str .= $indent . " <script type=\"text/javascript\">\n"; $str .= $indent . " function setSelection(value)\n"; $str .= $indent . " {\n"; $str .= $indent . " document.getElementById('".$this->name."').value = value\n"; $str .= $indent . " var container = document.getElementById('icons');\n"; $str .= $indent . " var icons = document.getElementsByName('icon');\n"; $str .= $indent . " for(i = 0; i < icons.length; i++) {\n"; $str .= $indent . " if(icons[i].alt == value) icons[i].height = ".$selheight.";\n"; $str .= $indent . " else icons[i].height = ".$height.";\n"; // $str .= $indent . " if(icons[i].src == value) icons[i].style.border = '10px blue';\n"; // $str .= $indent . " else { icons[i].style.border = '0px' }\n"; $str .= $indent . " }\n"; $str .= $indent . " }\n"; $str .= $indent . " </script>\n"; $str .= $indent . " <div style=\"width:300px;overflow:auto;height:".($selheight+24)."px;\">\n"; $str .= $indent . " <div id=\"icons\" style=\"text-align: left; height: ".$selheight."px; width:".(($height+8)*($numicons-1)+$selheight)."px; display: block;\">\n"; $str .= $indent . " <input id=\"".$this->name."\" name=\"vars[".$this->name."]\" type=\"hidden\" value=\"\"/>\n"; if(get_class($this->values) == "Icons") { foreach($this->values->icons as $icon) { $str .= $indent . " <img name=\"icon\" alt=\"".$icon->file."\" src=\"".$icon->prefix.$icon->file."\" onclick=\"setSelection('".$icon->file."')\"/>\n"; } } else { foreach($this->values as $k => $v) { $str .= $indent . " <img name=\"icon\" alt=\"".$v."\" src=\"".$v."\" onclick=\"setSelection('".$v."')\"/>\n"; } } $str .= $indent . " </div>\n"; // box $str .= $indent . " </div>\n"; // overflow $str .= $indent . " <script type=\"text/javascript\">setSelection('".$this->value."');</script>\n"; $str .= $indent . " </div>\n"; // widget $str .= $indent . "</div>\n"; // input return $str; } } class ListEditor { public $label, $name, $namewidget, $valuewidget, $values; public function ListEditor($label, $name, $namewidget, $valuewidget, $values = array()) { $this->label = $label; $this->name = $name; $this->namewidget = $namewidget; $this->valuewidget = $valuewidget; $this->values = $values; } public function render($indent = "") { $str = $indent . "<script type=\"text/javascript\">\n"; $str .= $indent . "//<!--\n"; $str .= $indent . "function deleteItem()\n"; $str .= $indent . "{\n"; $str .= $indent . " var items = document.getElementById('items');\n"; $str .= $indent . " var selIndex = items.selectedIndex;\n"; $str .= $indent . " if(selIndex < 0) return;\n"; $str .= $indent . " var item = items.options.item(selIndex);\n"; $str .= $indent . " items.removeChild(item);\n"; $str .= $indent . "}\n"; $str .= $indent . "\n"; $str .= $indent . "function addItem()\n"; $str .= $indent . "{\n"; $str .= $indent . " var items = document.getElementById('items');\n"; $str .= $indent . " var item_names = document.getElementsByName('vars[".$this->namewidget->name."]');\n"; $str .= $indent . " var item_values = document.getElementsByName('vars[".$this->valuewidget->name."]');\n"; $str .= $indent . " var item_name = item_names[0].value;\n"; $str .= $indent . " var item_value = item_values[0].value;\n"; $str .= $indent . " var item = document.createElement('option');\n"; $str .= $indent . " item.value = item_value + ':' + item_name;\n"; $str .= $indent . " item.innerHTML = item_value + ':' + item_name;\n"; $str .= $indent . " items.appendChild(item);\n"; $str .= $indent . "}\n"; $str .= $indent . "\n"; $str .= $indent . "function move(mod)\n"; $str .= $indent . "{\n"; $str .= $indent . " var items = document.getElementById('items');\n"; $str .= $indent . " var idx = items.selectedIndex;\n"; $str .= $indent . "\n"; $str .= $indent . " if(idx < 0 || idx + mod < 0 || idx + mod > items.length - 1) return;\n"; $str .= $indent . "\n"; $str .= $indent . " var tmp_value = items.options[idx].value;\n"; $str .= $indent . " var tmp_innerHTML = items.options[idx].innerHTML;\n"; $str .= $indent . "\n"; $str .= $indent . " items.options[idx].value = items.options[idx + mod].value;\n"; $str .= $indent . " items.options[idx].innerHTML = items.options[idx + mod].innerHTML;\n"; $str .= $indent . " items.options[idx + mod].value = tmp_value;\n"; $str .= $indent . " items.options[idx + mod].innerHTML = tmp_innerHTML;\n"; $str .= $indent . "\n"; $str .= $indent . " items.selectedIndex += mod;\n"; $str .= $indent . "}\n"; $str .= $indent . "\n"; $str .= $indent . "function moveUp()\n"; $str .= $indent . "{\n"; $str .= $indent . " move(-1)\n"; $str .= $indent . "}\n"; $str .= $indent . "\n"; $str .= $indent . "function moveDown()\n"; $str .= $indent . "{\n"; $str .= $indent . " move(1)\n"; $str .= $indent . "}\n"; $str .= $indent . "\n"; $str .= $indent . "function selectAll()\n"; $str .= $indent . "{\n"; $str .= $indent . " var items = document.getElementById('items');\n"; $str .= $indent . " var len = items.length;\n"; $str .= $indent . " var data = '';\n"; $str .= $indent . " for(i = 0; i < len; i++) {\n"; $str .= $indent . " items.options[i].selected = true;\n"; $str .= $indent . " }\n"; $str .= $indent . "}\n"; $str .= $indent . "//-->\n"; $str .= $indent . "</script>\n"; $str .= $indent . "<select multiple size=\"8\" id=\"items\" name=\"".$this->name."[]\">\n"; if(sizeof($this->values)) { foreach($this->values as $key => $val) { $str .= $indent . " <option value=\"".$key.":".$val."\">".$key.":".$val."</option>\n"; } } $str .= $indent . "</select><br/>\n"; $str .= $indent . "<div class=\"button\" button onclick=\"moveUp()\">/\</div><br/>\n"; $str .= $indent . "<div class=\"button\" onclick=\"moveDown()\">\/</div><br/>\n"; $str .= $this->namewidget->render($indent); $str .= $this->valuewidget->render($indent); $str .= "<div class=\"button\" onclick=\"addItem()\">+</div><br/>\n"; $str .= $indent . "<div class=\"button\" onclick=\"deleteItem()\">-</div><br/>\n"; return $str; } public function splitValues($values) { $out = array(); foreach($values as $value) { $vals = explode(":", $value); $out[$vals[0]]=$vals[1]; } return $out; } } class MultiList { public $label, $name, $values; function MultiList($label, $name, $values = "") { $this->label = $label; $this->name = $name; $this->values = $values; } function render($indent = "") { $str = $indent . "<div class=\"input\">\n"; $str .= $indent . " <div class=\"label\">". $this->label ."</div>\n"; $str .= $indent . " <div class=\"widget\">\n"; $str .= $indent . " <select multiple size=\"8\" id=\"items\" name=\"".$this->name."[]\">\n"; if(sizeof($this->values)) { foreach($this->values as $value => $active) { if($active == true) $sel = " selected=\"true\""; else $sel = ""; $str .= $indent . " <option value=\"".$value."\"".$sel.">".$value."</option>\n"; } } $str .= $indent . " </select>\n"; $str .= $indent . " </div>\n"; $str .= $indent . "</div>\n"; return $str; } } class Form { public $widgets = array(); public $action; public $hasFileUpload = false; public $hasListEditor = false; public function addWidget($widget) { if(get_class($widget) == "FileUpload") $this->hasFileUpload = true; if(get_class($widget) == "ListEditor") $this->hasListEditor = true; array_push($this->widgets, $widget); } public function render($indent = "") { global $m, $s; $str = $indent . "<form method=\"post\"\n"; if($this->hasFileUpload) $str .= $indent . " enctype=\"multipart/form-data\"\n"; if($this->hasListEditor) $str .= $indent . " onsubmit=\"selectAll();\"\n"; $str .= $indent . " action=\"?page=admin&m=".$m."&s=".$s."&a=".$this->action."\">\n"; foreach($this->widgets as $widget) { $str .= $widget->render($indent . " "); } $str .= $indent . "</form>\n"; echo $str; } public function Form($action) { $this->action = $action; } } ?>