From af2ce991eed7d22831aaed980828b624e787470f Mon Sep 17 00:00:00 2001
From: deva <deva>
Date: Fri, 22 Jan 2010 19:51:04 +0000
Subject: Added Discography module

---
 utils/modules/discography.php | 249 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 249 insertions(+)
 create mode 100644 utils/modules/discography.php

diff --git a/utils/modules/discography.php b/utils/modules/discography.php
new file mode 100644
index 0000000..9913113
--- /dev/null
+++ b/utils/modules/discography.php
@@ -0,0 +1,249 @@
+<?php
+/* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+include_once($UTIL_DIR . "/convert.php");
+include_once($UTIL_DIR . "/markdown.php");
+
+function time2str($t)
+{
+	$min = sprintf("%d", floor($t / 60));
+	$sec = $t % 60;
+	return sprintf("%d:%02d", $min ,$sec);
+}
+
+class Track {
+	public $title;
+	public $number;
+	public $playtime;
+	public $previewurl;
+	public $lyrics;
+
+	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 .= "      <div class=\"track\">\n";
+
+		$str .= "        <div class=\"preview\">\n";
+		if($this->previewurl) {
+			$str .= "          <object type=\"application/x-shockwave-flash\" data=\"player_mp3_maxi.swf\" width=\"25\" height=\"12\">\n";
+			$str .= "            <param name=\"movie\" value=\"player_mp3_maxi.swf\"/>\n"; 
+			$str .= "            <param name=\"FlashVars\" value=\"mp3=".$this->previewurl."&amp;showslider=0&amp;width=25&amp;height=12&amp;skin=gfx/chicken.jpg\"/>\n"; 
+			$str .= "          </object>\n";
+		} else {
+		}
+		$str .= "        </div>\n";
+
+		$str .= "        <div class=\"number\">".$this->number.". </div>\n";
+		$str .= "        <div class=\"title\">".$this->title."</div>\n";
+		$str .= "        <div class=\"playtime\">".time2str($this->playtime)."</div>\n";
+		if($this->lyrics) {
+			$str .= "      <a href=\"?page=lyrics&amp;name=morsetsanguis\">Lyrics</a>\n"; 
+		}
+		$str .= "      </div>\n";
+
+		return $str;
+	}
+
+	public function Track($title, $number, $playtime, $previewurl, $lyrics)
+	{
+		$this->title = $title;
+		$this->number = $number;
+		$this->playtime = $playtime;
+		$this->previewurl = $previewurl;
+		$this->lyrics = $lyrics;
+	}
+}
+
+class Disc {
+  public $title;
+  public $releasetime;
+  public $description;
+  public $cover;
+	public $releaser;
+	public $tracks = array();
+
+	public function write($fp)
+	{
+		fwrite($fp, "  <disc title=\"" .
+					 htmlspecialchars($this->title, ENT_QUOTES, "UTF-8") . "\"\n");
+		fwrite($fp, "        releasetime=\"" . $this->releasetime . "\"\n");
+		fwrite($fp, "        description=\"" .
+					 htmlspecialchars($this->description, ENT_QUOTES, "UTF-8") . "\"\n");
+		fwrite($fp, "        cover=\"" . $this->cover . "\"\n");
+		fwrite($fp, "        releaser=\"" . $this->releaser . "\">\n");
+		fwrite($fp, "    <tracks>\n");
+		if($this->tracks) {
+			foreach($this->tracks as $track) {
+				$track->write($fp);
+			}
+		}
+		fwrite($fp, "    </tracks>\n");
+		fwrite($fp, "  </disc>\n");
+	}
+
+	public function show()
+	{
+		$str = "";
+
+		$str .= "  <div class=\"disc\">\n"; 
+		$str .= "    <div class=\"cover\">\n"; 
+		$str .= "      <a href=\"".$this->cover."\">\n";
+		$str .= "        <img alt=\"".$this->title." cover\"\n";
+		$str .= "             src=\"?mode=imagecache&amp;uri=" . $this->cover . "&amp;mw=200&amp;mh=200\"/>\n";
+		$str .= "      </a>\n";
+		$str .= "    </div>\n";
+		$str .= "    <div class=\"record_title\">".$this->title." (".date("Y", $this->releasetime).")</div>\n"; 
+		$str .= "    <div class=\"label\">";		
+		if($this->releasetime > time()) $str .= "To be";
+		else $str .= "Was";
+		$str .= " released on ".$this->releaser.", ".date("F jS Y", $this->releasetime)."</div>\n";
+		$str .= "    <div class=\"traclist_header\">Tracks:</div>\n";
+		$str .= "    <div class=\"tracklist\">\n";
+		$total = 0;
+		if($this->tracks) {
+			foreach($this->tracks as $track) {
+				$str .= $track->show();
+				$total += $track->playtime;
+			}
+		}
+		$str .= "      <div class=\"total_playtime\">Total playtime: ".time2str($total)."</div>\n";
+		$str .= "    </div>\n";
+		$str .= "    <div class=\"description\">".$this->description."</div>\n";
+		$str .= "  </div>\n";
+
+		return $str;
+  }
+	
+	public function addTrack($track)
+	{
+		$key = $track->number;
+		$this->tracks[$key] = $track;
+	}
+
+  public function Disc($title, $releasetime, $description, $cover, $releaser)
+  {
+    $this->title = $title;
+    $this->releasetime = $releasetime;
+    $this->description = $description;
+    $this->cover = $cover;
+    $this->releaser = $releaser;
+  }
+}
+
+class Discography {
+
+  private $file;
+  private $discs = array();
+
+  // Admin config
+  public $admin_title = "Discography";
+  public $admin_submodules = array("Add Disc" => "add",
+																	 "Edit Disc" => "edit",
+																	 "Delete Disc" => "delete");
+  public function admin($sub, $action, $vars)
+  {
+    switch($sub) {
+    case "add":
+      break;
+    case "edit":
+      break;
+    case "delete":
+      break;
+    }
+  }
+
+  public function run($params)
+  {
+		$str = "<div class=\"discography\">\n";
+
+		if($this->discs) {
+			foreach($this->discs as $disc) {
+				$str .= $disc->show();
+			}
+		}
+
+		$str .= "</div>\n";
+
+		return $str;
+  }
+
+  public function add($disc) {
+    $key = $disc->releasetime;
+    $this->discs[$key] = $disc;
+  }
+	
+  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);
+    $discs = $dom->getElementsByTagName('disc');
+
+    foreach($discs as $d) {
+      $disc = new Disc($d->getAttribute('title'),
+											 $d->getAttribute('releasetime'),
+											 $d->getAttribute('description'),
+											 $d->getAttribute('cover'),
+											 $d->getAttribute('releaser'));
+
+			$tracks = $d->getElementsByTagName('track');
+			foreach($tracks as $t) {
+				$lyrics = "";
+				$ls = $t->getElementsByTagName('lyrics');
+				foreach($ls as $l) {
+					$lyrics = $l->textContent;
+				}
+				
+				$track = new Track($t->getAttribute('title'),
+													 $t->getAttribute('number'),
+													 $t->getAttribute('playtime'),
+													 $t->getAttribute('previewurl'),
+													 $lyrics);
+
+				$disc->addTrack($track);
+			}
+
+      $this->add($disc);
+    }
+  }
+
+  public function Discography($file)
+  {
+    $this->file =  $file;
+    if(file_exists($file)) $this->read();
+  }
+
+}
+
+function discography_init()
+{
+  global $DATA_DIR;
+  return new Discography($DATA_DIR . "/discography.xml");
+}
+
+?>
-- 
cgit v1.2.3