\n"; $str .= "
" . htmlspecialchars_decode($this->name, ENT_QUOTES) . "
\n"; $str .= " \"member\"image."\"/>\n"; $str .= "
Member since: " . $this->startyear . "
\n"; foreach($this->tags as $name => $val) { $str .= "
\n"; $str .= "
".$name."
\n"; $str .= "
".$val."
\n"; $str .= "
\n"; } $str .= "\n"; return $str; } public function write($fp) { fwrite($fp, " id . "\"\n"); fwrite($fp, " name=\"" . $this->name . "\"\n"); fwrite($fp, " image=\"" . $this->image . "\"\n"); fwrite($fp, " startyear=\"" . $this->startyear . "\"\n"); fwrite($fp, " stopyear=\"" . $this->stopyear . "\">\n"); foreach($this->tags as $name => $val) { fwrite($fp, " \n"); } fwrite($fp, " \n"); } public function Member($id, $name, $image, $startyear, $stopyear, $tags) { $this->id = $id; $this->name = $name; $this->image = $image; $this->startyear = $startyear; $this->stopyear = $stopyear; $this->tags = $tags; } } class Members { private $file; private $members = array(); // Admin config public $admin_title = "Members"; public $admin_submodules = array("Add Member" => "add", "Edit Member" => "edit"); public function admin_add($action, $vars) { global $MEMBERS_DIR; switch($action) { case "add": $tags = array(); $member = new Member($this->getNextID(), $vars["name"], $vars["image"], $vars["startyear"], $vars["stopyear"], $tags); echo "\"" .$member->name . "\" has now been added."; $this->add($member); $this->write(); break; case "preview": $tags = array(); $member = new Member($this->getNextID(), $vars["name"], $vars["image"], $vars["startyear"], $vars["stopyear"], $tags); echo "
\n"; echo "
\n"; echo $member->show(); echo "
\n"; echo "
\n"; echo "

Looking ok?

"; $form = new Form("add"); $form->addWidget(new Hidden($vars)); $form->addWidget(new Button("yes")); $form->render(); $form = new Form("retry"); $form->addWidget(new Hidden($vars)); $form->addWidget(new Button("no")); $form->render(); break; case "retry": $name = $vars["name"]; $image = $vars["image"]; $startyear = $vars["startyear"]; $stopyear = $vars["stopyear"]; $tags = array(); default: $form = new Form("preview"); $form->addWidget(new LineEdit("Name", "name", $name)); $form->addWidget(new LineEdit("Start Year", "startyear", $startyear)); $form->addWidget(new LineEdit("Stop Year (if no longer a member)", "stopyear", $stopyear)); $form->addWidget(new ImageComboBox("Image", "image", $image, new Icons($MEMBERS_DIR."/"))); $form->addWidget(new Button("Add member")); $form->render(); break; } } public function admin($sub, $action, $vars) { switch($sub) { case "add": $this->admin_add($action, $vars); break; case "edit": // $this->admin_edit($action, $vars); break; } } public function run($params) { $str = ""; foreach($this->members as $member) { $str .= $member->show(); } return $str; } public function add($member) { $key = $member->id; $this->members[$key] = $member; } public function getNextID() { $maxid = -1; foreach($this->members as $member) { if($member->id > $maxid) $maxid = $member->id; } return $maxid + 1; } public function write() { $fp = fopen($this->file, "w"); fwrite($fp, "\n"); fwrite($fp, "\n"); foreach($this->members as $member) { $member->write($fp); } fwrite($fp, "\n"); fclose($fp); } private function read() { $dom = new DomDocument; $dom->preserveWhiteSpace = FALSE; $dom->load($this->file); $params = $dom->getElementsByTagName('member'); foreach ($params as $param) { $tags = array(); $ps = $param->getElementsByTagName('tag'); foreach ($ps as $p) { $tags[$p->getAttribute('name')] = $p->getAttribute('value'); } $member = new Member($param->getAttribute('id'), $param->getAttribute('name'), $param->getAttribute('image'), $param->getAttribute('startyear'), $param->getAttribute('stopyear'), $tags); $this->add($member); } } public function Members($file) { $this->file = $file; if(file_exists($file)) $this->read(); } } function members_init() { global $DATA_DIR; return new Members($DATA_DIR . "/members.xml"); } ?>