Overview

Namespaces

  • App
    • Components
    • Interfaces
    • Lib
      • Files
      • Forms
        • Controls
      • Html
      • Repair
      • Statics
    • Model
    • Modules
      • BaseModule
        • Presenters
      • PartnersModule
        • Presenters
      • ProductModule
        • Presenters
      • SaleModule
        • Model
        • Presenters
      • SettingsModule
        • Model
        • Presenters
      • StoreModule
        • Model
        • Presenters
    • Presenters
    • Router
  • PHP

Classes

  • DateTime
  • SplFileInfo

Interfaces

  • ArrayAccess
  • Countable
  • Exception
  • Iterator
  • Traversable
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Download
 1: <?php
 2: 
 3: /**
 4:  * Project sberp
 5:  *
 6:  * @file Rebuild 
 7:  * @author Jaromír Polášek
 8:  * @version 0.7.1.FORM
 9:  * Encoding UTF-8
10:  */
11: 
12: namespace App\Lib;
13: 
14: use Nette\Database\Table\ActiveRow,
15:     App\Model\Database,
16:     App\Interfaces as I,
17:     App\Lib\Statics\Cons;
18: 
19: /**
20:  * Knihovna pro opravu struktury databáze
21:  */
22: class TreeRebuild extends Tree implements I\IData, I\ITree {
23: 
24:     /**
25:      * Předá parametry předkovy se zakázaným testem a konkrétním kořenovým uzlem
26:      * @param string $tableName
27:      * @param \App\Model\Database $database
28:      * @param \Nette\Database\Table\ActiveRow $masterNode
29:      */
30:     public function __construct($tableName, Database $database, $masterNode) {
31:     parent::__construct($tableName, $database, false, $masterNode);
32:     }
33: 
34:     /**
35:      * Přepočet stromu. Volá rekurzivní funkci. Posíláme parametr $left jako 1, 
36:      * tedy první položku stromu. Vrací počet uzlů
37:      * @return integer
38:      */
39:     public function rebuildTree() {
40:     return ($this->masterNode) ?  $this->rebuildTreeWorker($this->masterNode, 1) / 2 : false ;
41:     }
42: 
43:     /**
44:      * Rekurzivní přepočet stromu. Vrací pravou hodnotu uzlu
45:      * @param Nette\Database\Table\ActiveRow $parent
46:      * @param integer $left
47:      * @param integer $depth
48:      * @return integer
49:      */
50:     private function rebuildTreeWorker(ActiveRow $parent, $left, $depth = 0) {
51:     $right = $left + 1;
52:     $childs = $this->getCopy()->where(Cons::COLUMN_PARENT, $parent->id);
53:     foreach ($childs as $row) {
54:         $right = $this->rebuildTreeWorker($row, $right, $depth + 1);
55:     }
56:     $update = array(Cons::COLUMN_LEFT => $left, Cons::COLUMN_RIGHT => $right, Cons::COLUMN_DEPTH => $depth);
57:     $parent->update($update);
58:     return $right + 1;
59:     }
60: }
sberp API API documentation generated by ApiGen