diff options
Diffstat (limited to 'utils/modules/reviews.php')
-rw-r--r-- | utils/modules/reviews.php | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/utils/modules/reviews.php b/utils/modules/reviews.php new file mode 100644 index 0000000..8fa97b5 --- /dev/null +++ b/utils/modules/reviews.php @@ -0,0 +1,221 @@ +<?php /* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ + +global $UTIL_DIR; + +include_once($UTIL_DIR . "/convert.php"); +include_once($UTIL_DIR . "/markdown.php"); + +// See: http://www.loc.gov/standards/iso639-2/php/code_list.php +function lang2text($lang) +{ + + if(function_exists('locale_get_display_language')) + return locale_get_display_language($lang, 'en'); + + switch($lang) { + case "en": return "english"; + case "da": return "danish"; + case "nl": return "dutch"; + case "bul": return "bulgarian"; + case "fr": return "french"; + case "it": return "italian"; + default: return "unknown"; + } +} + +class Text { + public $text; + public $lang; + public $original; + + public function show() + { + $str = ""; + + $prefix = "Original"; + if(!$this->original) $prefix = "Translated"; + + $str .= "<div class=\"header\"><h3>".$prefix." ".lang2text($this->lang)." text</h3></div>\n"; + $str .= markdown($this->text) . "\n"; + return $str; + } + + public function Text($text, $lang, $original) + { + $this->text = $text; + $this->lang = $lang; + $this->original = $original; + } +} + +class Review { + public $title; + public $id; + public $src; + public $url; + public $texts = array(); + + public function write($fp) + { +/* + fwrite($fp, " <track title=\"" . + htmlspecialchars($this->title, ENT_QUOTES, "UTF-8") . "\"\n"); + fwrite($fp, " number=\"" . $this->number . "\"\n"); + fwrite($fp, " playtime=\"" . $this->playtime . "\"\n"); + fwrite($fp, " previewurl=\"" . $this->previewurl . "\">\n"); + fwrite($fp, " <lyrics>".htmlspecialchars($this->lyrics, ENT_QUOTES, "UTF-8")."</lyrics>\n"); + fwrite($fp, " </track>\n"); +*/ + } + + public function show() + { + $str = ""; + + // $str .= $this->id . "\n"; + $str .= "<div class=\"header\"><h2>".$this->title."</h2></div>\n"; + $str .= "<p>Origin: <em>".$this->src."</em> <a href=\"".$this->url."\">".$this->url."</a></p>\n"; + + foreach($this->texts as $text) { + if($text->original) { + $str .= $text->show(); + break; + } + } + + foreach($this->texts as $text) { + if(!$text->original) { + $str .= $text->show(); + } + } + + return $str; + } + + public function showRef() + { + $str = ""; + $str .= "<a href=\"?page=reviews&rid=". + $this->id."\">".$this->title." from ".$this->src."</a>\n"; + return $str; + } + + public function add($text) + { + array_push($this->texts, $text); + } + + public function Review($id, $title, $src, $url) + { + $this->id = $id; + $this->title = $title; + $this->src = $src; + $this->url = $url; + } +} + +class Reviews { + + private $file; + private $reviews = array(); + + // Admin config + public $admin_title = "Reviews"; + public $admin_submodules = array(); + + public function admin($sub, $action, $vars) + { + switch($sub) { + case "delete": + break; + } + } + + public function run($params) + { + global $GLOBALS; + $str = ""; + foreach($this->reviews as $review) { + if($GLOBALS['rid'] == $review->id) { + $str .= $review->show(); + } + } + + return $str; + } + + public function get($id) + { + return $this->reviews[$id]; + } + + public function showRef($id) + { + if(!$this->reviews[$id]) return ""; + return $this->reviews[$id]->showRef(); + } + + public function add($review) { + $key = $review->id; + $this->reviews[$key] = $review; + } + + public function write() + { + /* + $fp = fopen($this->file, "w"); + fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + + fwrite($fp, "<discography>\n"); + foreach($this->discs as $disc) { + $disc->write($fp); + } + fwrite($fp, "</discography>\n"); + + fclose($fp); + */ + } + + private function read() + { + $dom = new DomDocument; + $dom->preserveWhiteSpace = FALSE; + $dom->load($this->file); + + $discography = $dom->documentElement; + + $revs = $dom->getElementsByTagName('review'); + + foreach($revs as $rev) { + $review = new Review($rev->getAttribute('id'), + $rev->getAttribute('title'), + $rev->getAttribute('src'), + $rev->getAttribute('url')); + + $ts = $rev->getElementsByTagName('text'); + foreach($ts as $t) { + $text = new Text($t->textContent, + $t->getAttribute('lang'), + $t->getAttribute('original')); + $review->add($text); + } + + $this->add($review); + } + } + + public function Reviews($file) + { + $this->file = $file; + if(file_exists($file)) $this->read(); + } + +} + +function reviews_init() +{ + global $DATA_DIR; + return new Reviews($DATA_DIR . "/reviews.xml"); +} + +?> |