Annotation of db/prgsrc/drupal/modules/chgk_db/classes/DbPackage.class.php, revision 1.6

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&mdash;$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&mdash;$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) {
1.6     ! roma7     153:           $name = "/home/znatoki/chgk-db/public_html/images/db/$i";
        !           154:        ................
        !           155:           $result.="<binary content-type='image/jpeg' id='$i'>";                               
1.5       roma7     156:           $file = fopen($name,'rb');
                    157:           $str_file=fread($file,filesize($name));
                    158:           $result.=base64_encode($str_file);
                    159:           $result.="</binary>";
                    160:           fclose($file);
                    161:       }
                    162:       return $result;
                    163:   }
                    164: 
                    165:   protected function getEditorsForList() {
                    166:     $ed = $this->db->getEditors($this->tour->Id);
                    167:     if ($ed) {
                    168:        $result = array();    
                    169:        foreach ($ed as $editor) {
                    170:            $result[] = $editor->Name." ".$editor->Surname;
                    171:        }
                    172:        return implode(', ',$result);
                    173:     } else {
                    174:         return '';
                    175:     }
                    176:   }
                    177: 
                    178:   public function getHtmlLinkForList() {
                    179:       $result = l($this->getTitle(), $this->getLink());    
                    180:       return $result;
                    181:   }
                    182: 
                    183:   public function getHtmlLinkForBreadrumb() {
                    184:       return l($this->getTitle(), $this->getLink());
                    185:   }
                    186:  
                    187:   public function getLink() {
                    188:       return "tour/".$this->id;
                    189:   }
                    190: 
                    191:   public function htmlTree($level = 0) {
                    192:       $result = $this->getHtmlLinkForList();
                    193:       $children_html = '';
                    194:       foreach ($this->getChildren() as $child)  {
                    195:           if (!self::NOSPACES) {
                    196:               $children_html.=str_repeat(' ',$level*4+4);
                    197:           }
                    198:           $children_html.= "<li>".$child->htmlTree($level+1)."</li>";
                    199:           if (!self::NOSPACES) {
                    200:             $children_html .= "\n";
                    201:           }
                    202:       }
                    203:       if ($children_html) {
                    204:           if (!self::NOSPACES) {
                    205:               $result.="\n".str_repeat(' ',$level*4+2);
                    206:           }
                    207:           $result.="<ul>";
                    208:           if (!self::NOSPACES) {
                    209:               $result.="\n";
                    210:           }
                    211:           $result.=$children_html;
                    212:           if (!self::NOSPACES) {
                    213:             $result .= str_repeat(' ',$level*4+2);
                    214:           }
                    215:           $result.="</ul>";
                    216:           if (!self::NOSPACES) {        
                    217:             $result.="\n".str_repeat(' ',$level*4);
                    218:           }
                    219:       }
                    220:       return $result;
                    221:   }
                    222: 
                    223:   public function setParent($parent = FALSE) {
                    224:     if ($parent) {
                    225:         $this->parent = $parent;
                    226:     } elseif($this->tour->ParentId) {
                    227:         $this->parent = DbPackage::newFromDb($this->tour->ParentId);
                    228:     } elseif ($this->tour->ParentId === '0') {
                    229:         $this->parent = DbPackage::newRoot();
                    230:     }
                    231:   }
                    232:   public function getParent() {
                    233:     if ($this->parent === FALSE) {
                    234:       $this->setParent();
                    235:     }
                    236:     return $this->parent;
                    237:   }
                    238: 
                    239:   public function getPrintVersion() {
                    240:     $content = $this->getHtmlContent();
                    241:     return theme('chgk_db_print', $this->getLongTitle(),
                    242:             $content,
                    243:             url($this->getLink(), array('absolute'=>TRUE)));
                    244:   }
                    245:  
                    246:   public function getHtmlContent() {
                    247:     return '';
                    248:   }
                    249:   
                    250:   public function getBreadcrumb() {
                    251:     $this->loadBranch();
                    252:     $result = array();
                    253:     for ($current=$this->getParent(); $current; $current=$current->getParent()) {
                    254:       array_unshift($result,$current->getHtmlLinkForBreadrumb()); 
                    255:     }
                    256:     return $result;
                    257:   }
                    258:   
                    259:   public function hasPrintVersion() {
                    260:     return FALSE;
                    261:   }
                    262: 
                    263:   public function hasFb2() {
                    264:     return FALSE;
                    265:   }
                    266: 
1.6     ! roma7     267:   private function getPlayedAt() {
        !           268:     return $this->tour->PlayedAt;
        !           269:   }
        !           270: 
        !           271:   public function getYear() {
        !           272:     $date = $this->getPlayedAt();
        !           273:     $ar = explode('-', $date);
        !           274:     return $ar[0];
        !           275:   }
        !           276: 
1.5       roma7     277:   
                    278:   private function loadBranch() {
                    279:     $parent = $this->getParent();
                    280:     if ($parent) $parent->loadBranch();    
                    281:   }
1.1       roma7     282: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>