<?php
require_once(dirname(__FILE__)."/DbDatabase.class.php");
require_once(dirname(__FILE__)."/DbPackage/DbPackageGroup.class.php");
require_once(dirname(__FILE__)."/DbPackage/DbPackageTour.class.php");
require_once(dirname(__FILE__)."/DbPackage/DbPackageChamp.class.php");
require_once(dirname(__FILE__)."/DbPackage/DbPackageRoot.class.php");
require_once(dirname(__FILE__)."/DbPackage/DbPackageError.class.php");
class DbPackage {
protected $tour;
protected $db;
protected $id;
protected $children = FALSE;
protected $parent = FALSE;
const NOSPACES = TRUE;
private static $tourCache = array();
public function __construct($row, $parent = FALSE) {
$this->setParent($parent);
$this->db = new DbDatabase();
if (is_object($row)) {
$this->tour = $row;
$this->setId();
} else {
$this->id = $row;
$this->loadFromDatabase();
}
}
protected function setId() {
$this->id = $this->tour->FileName;
}
public static function newRoot() {
return new DbPackageRoot($row);
}
public static function newFromRow($row) {
if (!$row) {
return new DbPackageError($id);
} elseif ($row->Type == 'Г' ) {
return new DbPackageGroup($row);
} elseif ($row->Type == 'Ч' ) {
return new DbPackageChamp($row);
} elseif ($row->Type == 'Т' ) {
return new DbPackageTour($row);
}
}
public static function newFromQuestionRow($row, $prefix) {
$tour = new stdClass();
$tour->Id = $row->{"{$prefix}Id"};
$tour->Title = $row->{"{$prefix}Title"};
$tour->FileName = $row->{"{$prefix}FileName"};
$tour->Type = $row->{"{$prefix}Type"};
return self::newFromRow($tour);
}
public static function newFromDb($id) {
if (self::$tourCache[$id]) return self::$tourCache[$id];
$db = new DbDatabase;
$row = $db->getTournament($id);
$result = self::newFromRow($row);
self::$tourCache[$id] = $result;
return $result;
}
public function loadFromDatabase() {
$this->tour = $this->db->getTournament($this->id);
}
public function getAll() {
return false;
}
protected function getDbId() {
return $this->tour->Id;
}
public function getTitle() {
return $this->tour->Title;
}
public function getFullTitle() {
return $this->getTitle();
}
public function getLongTitle() {
return $this->getTitle();
}
public function getInfo() {
$info = $this->tour->Info;
$info = preg_replace('/(\s+)-+(\s+)/','\1—$2', $info);
return $info;
}
public function hasEditor() {
return $this->tour->Editors?TRUE:FALSE;
}
public function hasInfo() {
return $this->tour->Info?TRUE:FALSE;
}
public function getEditor() {
return $this->tour->Editors;
}
public function getEditorHtml() {
$ed = $this->tour->Editors;
$ed = preg_replace('/(\s+)-+(\s+)/','\1—$2', $ed);
if (preg_match('/\,/', $ed)) {
$ob = 'Редакторы: ';
} else {
$ob = 'Редактор: ';
}
return $ob.$ed;
}
public function getFb2() {
$this->getAll();
return theme('chgk_db_fb2', $this);
}
public function loadTree() {
foreach ($this->getChildren() as $child) {
$child->loadTree();
}
}
public function getChildren() {
if ($this->children === FALSE ) {
$this->loadChildren();
}
return $this->children;
}
public function loadChildren() {
$this->children = array();
$res = $this->db->getChildrenRes($this->getDbId());
while ($row = $this->db->fetch_row($res)) {
$this->children[] = DbPackage::newFromRow($row, $this);
}
}
public function getImagesBinaries() {
$images=$this->getImages();
$result = '';
foreach ($images as $i) {
$name = "/home/znatoki/chgk-db/public_html/images/db/$i";
................
$result.="<binary content-type='image/jpeg' id='$i'>";
$file = fopen($name,'rb');
$str_file=fread($file,filesize($name));
$result.=base64_encode($str_file);
$result.="</binary>";
fclose($file);
}
return $result;
}
protected function getEditorsForList() {
$ed = $this->db->getEditors($this->tour->Id);
if ($ed) {
$result = array();
foreach ($ed as $editor) {
$result[] = $editor->Name." ".$editor->Surname;
}
return implode(', ',$result);
} else {
return '';
}
}
public function getHtmlLinkForList() {
$result = l($this->getTitle(), $this->getLink());
return $result;
}
public function getHtmlLinkForBreadrumb() {
return l($this->getTitle(), $this->getLink());
}
public function getLink() {
return "tour/".$this->id;
}
public function htmlTree($level = 0) {
$result = $this->getHtmlLinkForList();
$children_html = '';
foreach ($this->getChildren() as $child) {
if (!self::NOSPACES) {
$children_html.=str_repeat(' ',$level*4+4);
}
$children_html.= "<li>".$child->htmlTree($level+1)."</li>";
if (!self::NOSPACES) {
$children_html .= "\n";
}
}
if ($children_html) {
if (!self::NOSPACES) {
$result.="\n".str_repeat(' ',$level*4+2);
}
$result.="<ul>";
if (!self::NOSPACES) {
$result.="\n";
}
$result.=$children_html;
if (!self::NOSPACES) {
$result .= str_repeat(' ',$level*4+2);
}
$result.="</ul>";
if (!self::NOSPACES) {
$result.="\n".str_repeat(' ',$level*4);
}
}
return $result;
}
public function setParent($parent = FALSE) {
if ($parent) {
$this->parent = $parent;
} elseif($this->tour->ParentId) {
$this->parent = DbPackage::newFromDb($this->tour->ParentId);
} elseif ($this->tour->ParentId === '0') {
$this->parent = DbPackage::newRoot();
}
}
public function getParent() {
if ($this->parent === FALSE) {
$this->setParent();
}
return $this->parent;
}
public function getPrintVersion() {
$content = $this->getHtmlContent();
return theme('chgk_db_print', $this->getLongTitle(),
$content,
url($this->getLink(), array('absolute'=>TRUE)));
}
public function getHtmlContent() {
return '';
}
public function getBreadcrumb() {
$this->loadBranch();
$result = array();
for ($current=$this->getParent(); $current; $current=$current->getParent()) {
array_unshift($result,$current->getHtmlLinkForBreadrumb());
}
return $result;
}
public function hasPrintVersion() {
return FALSE;
}
public function hasFb2() {
return FALSE;
}
private function getPlayedAt() {
return $this->tour->PlayedAt;
}
public function getYear() {
$date = $this->getPlayedAt();
$ar = explode('-', $date);
return $ar[0];
}
private function loadBranch() {
$parent = $this->getParent();
if ($parent) $parent->loadBranch();
}
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>