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.=""; $file = fopen($name,'rb'); $str_file=fread($file,filesize($name)); $result.=base64_encode($str_file); $result.=""; 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.= "
  • ".$child->htmlTree($level+1)."
  • "; if (!self::NOSPACES) { $children_html .= "\n"; } } if ($children_html) { if (!self::NOSPACES) { $result.="\n".str_repeat(' ',$level*4+2); } $result.=""; 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(); } }