\n";
$str .= str_replace("\n", " \n", $tail);
return $str;
}
class Track {
public $title;
public $number;
public $playtime;
public $previewurl;
public $lyrics;
public function write($fp)
{
fwrite($fp, " 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, " ".htmlspecialchars($this->lyrics, ENT_QUOTES, "UTF-8")." \n");
fwrite($fp, " \n");
}
public function showLyrics()
{
$str = "";
if($this->lyrics) {
$str .= createNewlines(htmlspecialchars_decode($this->lyrics));
}
return $str;
}
public function show($disc)
{
global $GLOBALS;
$page = $GLOBALS["page"];
$str = "";
$str .= " \n";
$str .= "
\n";
if($this->previewurl) {
$str .= " \n";
$str .= " \n";
$str .= " previewurl."&showslider=0&width=25&height=12&skin=gfx/chicken.jpg\"/>\n";
$str .= " \n";
} else {
}
$str .= " \n";
$str .= "
".$this->number.". \n";
$str .= "
".$this->title." \n";
$str .= "
".time2str($this->playtime)." \n";
if($this->lyrics) {
$str .= "
number."\">Lyrics \n";
}
$str .= "
\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, " 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, " \n");
if($this->tracks) {
foreach($this->tracks as $track) {
$track->write($fp);
}
}
fwrite($fp, " \n");
fwrite($fp, " \n");
}
public function showLyrics($number)
{
$str = "";
if($this->tracks) {
foreach($this->tracks as $track) {
if($track->number == $number) {
$str .= $track->showLyrics();
break;
}
}
}
return $str;
}
public function show()
{
$str = "";
$str .= " \n";
$str .= "
".$this->title." (".date("Y", $this->releasetime).") \n";
$str .= "
\n";
$str .= "
";
if($this->releasetime > time()) $str .= "To be";
else $str .= "Was";
$str .= " released by ".htmlspecialchars_decode($this->releaser)." on ".date("F jS Y", $this->releasetime)." \n";
$str .= " \n";
$str .= "
\n";
$total = 0;
if($this->tracks) {
foreach($this->tracks as $track) {
$str .= $track->show($this->releasetime);
$total += $track->playtime;
}
}
if($this->tracks && sizeof($this->tracks) > 1) {
$str .= " Total playtime: ".time2str($total)." \n";
}
$str .= "
\n";
$str .= "
".Markdown(htmlspecialchars_decode($this->description))." \n";
$str .= "
\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)
{
global $GLOBALS;
$str = "\n";
$lyrics = $GLOBALS["lyrics"];
$number = $GLOBALS["track"];
//foreach($params as $param => $value) {}
if($lyrics && $number) {
if($this->discs) {
foreach($this->discs as $disc) {
if($disc->releasetime == $lyrics) {
$str .= $disc->showLyrics($number);
break;
}
}
}
} else {
if($this->discs) {
foreach($this->discs as $disc) {
$str .= $disc->show();
}
}
}
$str .= "
\n";
return $str;
}
public function add($disc) {
$key = $disc->releasetime;
$this->discs[$key] = $disc;
}
public function getImageSize($cat)
{
switch($cat) {
case "cover":
return new ImageSize($this->coverwidth, $this->coverheight);
default:
die(404);
}
}
public function write()
{
$fp = fopen($this->file, "w");
fwrite($fp, "\n");
fwrite($fp, "\n");
foreach($this->discs as $disc) {
$disc->write($fp);
}
fwrite($fp, " \n");
fclose($fp);
}
private function read()
{
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->load($this->file);
$discography = $dom->documentElement;
$this->coverwidth = $discography->getAttribute('coverwidth');
$this->coverheight = $discography->getAttribute('coverheight');
$discs = $dom->getElementsByTagName('disc');
foreach($discs as $d) {
$description = "";
$dess = $d->getElementsByTagName('description');
foreach($dess as $des) {
$description = $des->textContent;
}
$disc = new Disc($d->getAttribute('title'),
$d->getAttribute('releasetime'),
$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");
}
?>