File:  [Local Repository] / db / prgsrc / drupal / modules / chgk_db / classes / DbPackage.class.php
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Sun May 23 09:31:39 2010 UTC (13 years, 11 months ago) by roma7
Branches: MAIN
CVS tags: HEAD
Editors changes

<?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&mdash;$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&mdash;$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>