. // classes for different kinds of preferences. See prefs.inc abstract class PREF { public $desc; public $tag; // the pref's primary XML tag function __construct($desc, $tag) { $this->desc = $desc; $this->tag = $tag; } abstract function show_value($prefs); abstract function show_form($prefs, $error); abstract function parse_form(&$prefs, &$error); abstract function xml_string($prefs); abstract function xml_parse(&$prefs, $name, $text); abstract function set_default(&$prefs); // multi-column display (read only) // function show_cols($prefs) { global $venues; echo "$this->desc"; $tag = $this->tag; if (isset($prefs->$tag)) { $this->show_value($prefs); } else { echo "---"; } foreach ($venues as $v) { if (isset($prefs->$v) && isset($prefs->$v->$tag)) { $this->show_value($prefs->$v); } else { echo "---"; } } echo "\n"; } // show read-only row // function show($prefs) { echo "$this->desc"; $tag = $this->tag; if (isset($prefs->$tag)) { $this->show_value($prefs); } else { echo "---"; } echo "\n"; } // show form row // function show_form_row($prefs, $error) { $tag = $this->tag; $class = isset($error->$tag)?"fieldname_error":"fieldname"; echo "$this->desc"; $this->show_form($prefs, $error); echo "\n"; } } class PREF_BOOL extends PREF { public $default; public $invert; // show to user in opposite sense function __construct($desc, $tag, $default, $invert=false) { $this->default = $default; $this->invert = $invert; parent::__construct($desc, $tag); } function show_value($prefs) { $tag = $this->tag; $v = $this->invert?!$prefs->$tag:$prefs->$tag; $x = $v?tra("yes"):tra("no"); echo "$x"; } function show_form($prefs, $error) { $tag = $this->tag; if ($this->invert) { $checked = !$prefs->$tag; } else { $checked = $prefs->$tag; } echo "" ."tag " . ($checked?"checked":"") ."> "; } function parse_form(&$prefs, &$error) { $tag = $this->tag; $val = array_key_exists($tag, $_GET); if ($this->invert) $val = !$val; $prefs->$tag = $val; } function xml_string($prefs) { $tag = $this->tag; return "<$tag>" .($prefs->$tag?"1":"0") ."\n"; } function xml_parse(&$prefs, $name, $text) { $tag = $this->tag; if ($name != $tag) return false; $val = (trim($text) != '0'); $prefs->$tag = $val; return true; } function set_default(&$prefs) { $tag = $this->tag; $prefs->$tag = $this->default; } } class NUM_SPEC { public $suffix; public $min; public $max; public $default; public $scale; function __construct($suffix, $min, $max, $default, $scale=1) { if (substr($suffix, 0, 1) == "%") { $this->suffix = $suffix; } else { $this->suffix = " $suffix"; } $this->min = $min; $this->max = $max; $this->default = $default; $this->scale = $scale; } function value_str($v) { $v /= $this->scale; if ($v == 0) { $v = "--- "; } $v .= "$this->suffix "; return $v; } function form_str($tag, $v) { if (is_numeric($v)) { $v /= $this->scale; if ($v == 0) $v = ""; } return " $this->suffix "; } function form_convert($in, &$out, &$error) { $error = false; if ($in == "") $in = 0; if (!is_numeric($in)) { $error = true; $out = $in; return; } $out = $in*$this->scale; if ($out < $this->min || $out > $this->max) { $error = true; } } } class PREF_NUM extends PREF { public $num_spec; function __construct($desc, $tag, $num_spec) { $this->num_spec = $num_spec; parent::__construct($desc, $tag); } function show_value($prefs) { $tag = $this->tag; echo "".$this->num_spec->value_str($prefs->$tag).""; } function show_form($prefs, $error) { $tag = $this->tag; $class = isset($error->$tag)?"fieldvalue_error":"fieldvalue"; echo "" .$this->num_spec->form_str($tag, $prefs->$tag) ." "; } function parse_form(&$prefs, &$error) { $tag = $this->tag; $this->num_spec->form_convert($_GET[$tag], $prefs->$tag, $e); if ($e) $error->$tag = true; } function xml_string($prefs) { $tag = $this->tag; $v = $prefs->$tag; return "<$tag>$v\n"; } function xml_parse(&$prefs, $name, $text) { $tag = $this->tag; if ($name != $tag) return false; $prefs->$tag = $text; return true; } function set_default(&$prefs) { $tag = $this->tag; $prefs->$tag = $this->num_spec->default; } } class PREF_NUM2 extends PREF { public $tag2; public $num_spec1, $num_spec2; function __construct($desc, $tag1, $tag2, $num_spec1, $num_spec2) { $this->tag2 = $tag2; $this->num_spec1 = $num_spec1; $this->num_spec2 = $num_spec2; parent::__construct($desc, $tag1); } function show_value($prefs) { $tag = $this->tag; $tag2 = $this->tag2; echo "" .$this->num_spec1->value_str($prefs->$tag) .$this->num_spec2->value_str($prefs->$tag2) .""; } function show_form($prefs, $error) { $tag = $this->tag; $tag2 = $this->tag2; $class = (isset($error->$tag) || isset($error->$tag2))?"fieldvalue_error":"fieldvalue"; echo "" .$this->num_spec1->form_str($tag, $prefs->$tag) .$this->num_spec2->form_str($tag2, $prefs->$tag2) ." "; } function parse_form(&$prefs, &$error) { $tag = $this->tag; $tag2 = $this->tag2; $this->num_spec1->form_convert($_GET[$tag], $prefs->$tag, $e); if ($e) $error->$tag = true; $this->num_spec2->form_convert($_GET[$tag2], $prefs->$tag2, $e); if ($e) $error->$tag2 = $e; } function xml_string($prefs) { $tag = $this->tag; $tag2 = $this->tag2; return "<$tag>".$prefs->$tag."\n<$tag2>".$prefs->$tag2."\n"; } function xml_parse(&$prefs, $name, $text) { $tag = $this->tag; $tag2 = $this->tag2; if ($name == $tag) { $prefs->$tag = $text; } else if ($name == $tag2) { $prefs->$tag2 = $text; } return false; } function set_default(&$prefs) { $tag = $this->tag; $tag2 = $this->tag2; $prefs->$tag = $this->num_spec1->default; $prefs->$tag2 = $this->num_spec2->default; } } function hour_select($x, $name) { $s = ""; $s = $s. "\n"; return $s; } class PREF_HOUR_RANGE extends PREF { public $tag2; function __construct($desc, $tag, $tag2) { $this->tag2 = $tag2; parent::__construct($desc, $tag); } function show_value($prefs) { $tag = $this->tag; $tag2 = $this->tag2; $h1 = $prefs->$tag; $h2 = $prefs->$tag2; if ($h1 == $h2) { $v = "---"; } else { $v = "$h1:00 ".tra("and")." $h2:00"; } echo "$v"; } function show_form($prefs, $error) { $tag = $this->tag; $tag2 = $this->tag2; echo "" .hour_select($prefs->$tag, $tag) ." " .tra("and") ." " .hour_select($prefs->$tag2, $tag2) ." "; } function parse_form(&$prefs, &$error) { $tag = $this->tag; $tag2 = $this->tag2; $prefs->$tag = $_GET[$tag]; $prefs->$tag2 = $_GET[$tag2]; } function xml_string($prefs) { $tag = $this->tag; $tag2 = $this->tag2; $h1 = $prefs->$tag; $h2 = $prefs->$tag2; if ($h1 == $h2) return ""; return "<$tag>$h1\n<$tag2>$h2\n"; } function xml_parse(&$prefs, $name, $text) { $tag = $this->tag; $tag2 = $this->tag2; if ($name == $tag) { $prefs->$tag = $text; return true; } else if ($name == $tag2) { $prefs->$tag2 = $text; return true; } return false; } function set_default(&$prefs) { $tag = $this->tag; $tag2 = $this->tag2; $prefs->$tag = 0; $prefs->$tag2 = 0; } } ?>