summaryrefslogtreecommitdiff
path: root/utils/modules
diff options
context:
space:
mode:
authordeva <deva>2009-04-29 17:41:35 +0000
committerdeva <deva>2009-04-29 17:41:35 +0000
commitb7e798b69cc03587b1154bade5e2b007815e564b (patch)
tree4bacb7827e9ab236076f29ca38262d709815e976 /utils/modules
parent2c544b1da614a6cbc8ec6a1afd5ca1644953d1ef (diff)
Initial work on members module.
Diffstat (limited to 'utils/modules')
-rw-r--r--utils/modules/members.php208
1 files changed, 208 insertions, 0 deletions
diff --git a/utils/modules/members.php b/utils/modules/members.php
new file mode 100644
index 0000000..db0966d
--- /dev/null
+++ b/utils/modules/members.php
@@ -0,0 +1,208 @@
+<?php
+/* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+include_once($UTIL_DIR . "/convert.php");
+include_once($UTIL_DIR . "/forms.php");
+include_once($UTIL_DIR . "/markdown.php");
+
+class Member {
+ public $id;
+ public $name;
+ public $image;
+ public $startyear;
+ public $stopyear;
+ public $tags = array("Favoritkage" => "Æbletærte");
+
+ public function show()
+ {
+ global $MEMBERS_DIR;
+ $str = "<div class=\"member_entry\">\n";
+ $str .= " <div class=\"member_name\">" . htmlspecialchars_decode($this->name, ENT_QUOTES) . "</div>\n";
+ $str .= " <img alt=\"member\" class=\"member_image\" src=\"" . $MEMBERS_DIR."/".$this->image."\"/>\n";
+ $str .= " <div class=\"member_startyear\">Member since: " . $this->startyear . "</div>\n";
+ foreach($this->tags as $name => $val) {
+ $str .= " <div class=\"member_tag\">\n";
+ $str .= " <div class=\"member_tag_name\">".$name."</div>\n";
+ $str .= " <div class=\"member_tag_value\">".$val."</div>\n";
+ $str .= " </div>\n";
+ }
+ $str .= "</div>\n";
+ return $str;
+ }
+
+ public function write($fp)
+ {
+ fwrite($fp, " <member id=\"" . $this->id . "\"\n");
+ fwrite($fp, " name=\"" . $this->name . "\"\n");
+ fwrite($fp, " image=\"" . $this->image . "\"\n");
+ fwrite($fp, " startyear=\"" . $this->startyear . "\"\n");
+ fwrite($fp, " stopyear=\"" . $this->stoptyear . "\">\n");
+ foreach($this->tags as $name => $val) {
+ fwrite($fp, " <tag name=\"".$name."\" value=\"".$val."\"/>\n");
+ }
+ fwrite($fp, " </member>\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;
+ $this->tags = array("Favoritkage" => "F&oslash;tex snegl");
+ }
+}
+
+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 "<div class=\"preview\">\n";
+ echo "<div class=\"content\">\n";
+ echo $member->show();
+ echo "</div>\n";
+ echo "</div>\n";
+ echo "<p>Looking ok?</p>";
+ $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, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+
+ fwrite($fp, "<members>\n");
+ foreach($this->members as $member) {
+ $member->write($fp);
+ }
+ fwrite($fp, "</members>\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");
+}
+?>