Annotation of db/prgsrc/drupal/modules/chgk_db/classes/DbPackage.class.php, revision 1.5
1.1 roma7 1: <?php
2:
3: require_once(dirname(__FILE__)."/DbDatabase.class.php");
4: require_once(dirname(__FILE__)."/DbPackage/DbPackageGroup.class.php");
5: require_once(dirname(__FILE__)."/DbPackage/DbPackageTour.class.php");
6: require_once(dirname(__FILE__)."/DbPackage/DbPackageChamp.class.php");
1.5 ! roma7 7: require_once(dirname(__FILE__)."/DbPackage/DbPackageRoot.class.php");
! 8:
1.2 roma7 9: require_once(dirname(__FILE__)."/DbPackage/DbPackageError.class.php");
1.1 roma7 10:
11: class DbPackage {
12:
13: protected $tour;
14: protected $db;
1.5 ! roma7 15: protected $id;
! 16: protected $children = FALSE;
! 17: protected $parent = FALSE;
! 18: const NOSPACES = TRUE;
! 19: private static $tourCache = array();
1.1 roma7 20:
1.5 ! roma7 21: public function __construct($row, $parent = FALSE) {
! 22: $this->setParent($parent);
1.2 roma7 23: $this->db = new DbDatabase();
24: if (is_object($row)) {
25: $this->tour = $row;
26: $this->setId();
27: } else {
28: $this->id = $row;
29: $this->loadFromDatabase();
30: }
1.1 roma7 31: }
32:
33: protected function setId() {
34: $this->id = $this->tour->FileName;
35: }
36:
1.5 ! roma7 37: public static function newRoot() {
! 38: return new DbPackageRoot($row);
! 39: }
! 40:
! 41: public static function newFromRow($row) {
1.1 roma7 42: if (!$row) {
1.2 roma7 43: return new DbPackageError($id);
1.1 roma7 44: } elseif ($row->Type == 'Г' ) {
45: return new DbPackageGroup($row);
46: } elseif ($row->Type == 'Ч' ) {
47: return new DbPackageChamp($row);
48: } elseif ($row->Type == 'Т' ) {
49: return new DbPackageTour($row);
1.5 ! roma7 50: }
! 51: }
! 52:
! 53: public static function newFromQuestionRow($row, $prefix) {
! 54: $tour = new stdClass();
! 55: $tour->Id = $row->{"{$prefix}Id"};
! 56: $tour->Title = $row->{"{$prefix}Title"};
! 57: $tour->FileName = $row->{"{$prefix}FileName"};
! 58: $tour->Type = $row->{"{$prefix}Type"};
! 59: return self::newFromRow($tour);
! 60: }
! 61:
! 62: public static function newFromDb($id) {
! 63: if (self::$tourCache[$id]) return self::$tourCache[$id];
! 64: $db = new DbDatabase;
! 65: $row = $db->getTournament($id);
! 66: $result = self::newFromRow($row);
! 67: self::$tourCache[$id] = $result;
! 68: return $result;
1.1 roma7 69: }
70:
1.2 roma7 71: public function loadFromDatabase() {
72: $this->tour = $this->db->getTournament($this->id);
73: }
1.1 roma7 74: public function getAll() {
75: return false;
76: }
77:
78: protected function getDbId() {
79: return $this->tour->Id;
80: }
81:
82: public function getTitle() {
1.5 ! roma7 83: return $this->tour->Title;
1.1 roma7 84: }
1.5 ! roma7 85:
! 86: public function getFullTitle() {
! 87: return $this->getTitle();
1.2 roma7 88: }
1.5 ! roma7 89:
1.2 roma7 90:
91: public function getLongTitle() {
92: return $this->getTitle();
93: }
1.3 roma7 94: public function getInfo() {
1.4 roma7 95: $info = $this->tour->Info;
96: $info = preg_replace('/(\s+)-+(\s+)/','\1—$2', $info);
97:
98: return $info;
1.3 roma7 99: }
1.4 roma7 100: public function hasEditor() {
1.3 roma7 101: return $this->tour->Editors?TRUE:FALSE;
102: }
1.4 roma7 103: public function hasInfo() {
104: return $this->tour->Info?TRUE:FALSE;
1.3 roma7 105: }
106:
107: public function getEditor() {
108: return $this->tour->Editors;
109: }
110:
111: public function getEditorHtml() {
112: $ed = $this->tour->Editors;
1.4 roma7 113: $ed = preg_replace('/(\s+)-+(\s+)/','\1—$2', $ed);
114:
1.3 roma7 115: if (preg_match('/\,/', $ed)) {
116: $ob = 'Редакторы: ';
117: } else {
118: $ob = 'Редактор: ';
119: }
120: return $ob.$ed;
121: }
1.5 ! roma7 122: public function getFb2() {
! 123: $this->getAll();
! 124: return theme('chgk_db_fb2', $this);
! 125: }
! 126:
! 127: public function loadTree() {
! 128: foreach ($this->getChildren() as $child) {
! 129: $child->loadTree();
! 130: }
! 131: }
! 132:
! 133: public function getChildren() {
! 134: if ($this->children === FALSE ) {
! 135: $this->loadChildren();
! 136: }
! 137: return $this->children;
! 138: }
! 139:
! 140: public function loadChildren() {
! 141: $this->children = array();
! 142: $res = $this->db->getChildrenRes($this->getDbId());
! 143: while ($row = $this->db->fetch_row($res)) {
! 144: $this->children[] = DbPackage::newFromRow($row, $this);
! 145: }
! 146: }
! 147:
! 148:
! 149: public function getImagesBinaries() {
! 150: $images=$this->getImages();
! 151: $result = '';
! 152: foreach ($images as $i) {
! 153: $name = file_directory_path()."/$i";
! 154: $result.="<binary content-type='image/jpeg' id='$i'>";
! 155: $file = fopen($name,'rb');
! 156: $str_file=fread($file,filesize($name));
! 157: $result.=base64_encode($str_file);
! 158: $result.="</binary>";
! 159: fclose($file);
! 160: }
! 161: return $result;
! 162: }
! 163:
! 164: protected function getEditorsForList() {
! 165: $ed = $this->db->getEditors($this->tour->Id);
! 166: if ($ed) {
! 167: $result = array();
! 168: foreach ($ed as $editor) {
! 169: $result[] = $editor->Name." ".$editor->Surname;
! 170: }
! 171: return implode(', ',$result);
! 172: } else {
! 173: return '';
! 174: }
! 175: }
! 176:
! 177: public function getHtmlLinkForList() {
! 178: $result = l($this->getTitle(), $this->getLink());
! 179: return $result;
! 180: }
! 181:
! 182: public function getHtmlLinkForBreadrumb() {
! 183: return l($this->getTitle(), $this->getLink());
! 184: }
! 185:
! 186: public function getLink() {
! 187: return "tour/".$this->id;
! 188: }
! 189:
! 190: public function htmlTree($level = 0) {
! 191: $result = $this->getHtmlLinkForList();
! 192: $children_html = '';
! 193: foreach ($this->getChildren() as $child) {
! 194: if (!self::NOSPACES) {
! 195: $children_html.=str_repeat(' ',$level*4+4);
! 196: }
! 197: $children_html.= "<li>".$child->htmlTree($level+1)."</li>";
! 198: if (!self::NOSPACES) {
! 199: $children_html .= "\n";
! 200: }
! 201: }
! 202: if ($children_html) {
! 203: if (!self::NOSPACES) {
! 204: $result.="\n".str_repeat(' ',$level*4+2);
! 205: }
! 206: $result.="<ul>";
! 207: if (!self::NOSPACES) {
! 208: $result.="\n";
! 209: }
! 210: $result.=$children_html;
! 211: if (!self::NOSPACES) {
! 212: $result .= str_repeat(' ',$level*4+2);
! 213: }
! 214: $result.="</ul>";
! 215: if (!self::NOSPACES) {
! 216: $result.="\n".str_repeat(' ',$level*4);
! 217: }
! 218: }
! 219: return $result;
! 220: }
! 221:
! 222: public function setParent($parent = FALSE) {
! 223: if ($parent) {
! 224: $this->parent = $parent;
! 225: } elseif($this->tour->ParentId) {
! 226: $this->parent = DbPackage::newFromDb($this->tour->ParentId);
! 227: } elseif ($this->tour->ParentId === '0') {
! 228: $this->parent = DbPackage::newRoot();
! 229: }
! 230: }
! 231: public function getParent() {
! 232: if ($this->parent === FALSE) {
! 233: $this->setParent();
! 234: }
! 235: return $this->parent;
! 236: }
! 237:
! 238: public function getPrintVersion() {
! 239: $content = $this->getHtmlContent();
! 240: return theme('chgk_db_print', $this->getLongTitle(),
! 241: $content,
! 242: url($this->getLink(), array('absolute'=>TRUE)));
! 243: }
! 244:
! 245: public function getHtmlContent() {
! 246: return '';
! 247: }
! 248:
! 249: public function getBreadcrumb() {
! 250: $this->loadBranch();
! 251: $result = array();
! 252: for ($current=$this->getParent(); $current; $current=$current->getParent()) {
! 253: array_unshift($result,$current->getHtmlLinkForBreadrumb());
! 254: }
! 255: return $result;
! 256: }
! 257:
! 258: public function hasPrintVersion() {
! 259: return FALSE;
! 260: }
! 261:
! 262: public function hasFb2() {
! 263: return FALSE;
! 264: }
! 265:
! 266:
! 267: private function loadBranch() {
! 268: $parent = $this->getParent();
! 269: if ($parent) $parent->loadBranch();
! 270: }
1.1 roma7 271: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>