. */ /** * Doctrine_Tree * * @package Doctrine * @subpackage Tree * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.org * @since 1.0 * @version $Revision$ * @author Joe Simms */ class Doctrine_Tree { /** * @param object $table reference to associated Doctrine_Table instance */ protected $table; /** * @param array $options */ protected $options = array(); protected $_baseComponent; /** * constructor, creates tree with reference to table and any options * * @param object $table instance of Doctrine_Table * @param array $options options */ public function __construct($table, $options) { $this->table = $table; $this->options = $options; $this->_baseComponent = $table->getComponentName(); $class = $this->_baseComponent; if ($table->getOption('inheritanceMap')) { $subclasses = $table->getOption('subclasses'); while (in_array($class, $subclasses)) { $class = get_parent_class($class); } $this->_baseComponent = $class; } //echo $this->_baseComponent; } /** * Used to define table attributes required for the given implementation * * @throws Doctrine_Tree_Exception if table attributes have not been defined */ public function setTableDefinition() { throw new Doctrine_Tree_Exception('Table attributes have not been defined for this Tree implementation.'); } /** * this method is used for setting up relations and attributes and should be used by specific implementations * */ public function setUp() { } /** * factory method to return tree instance based upon chosen implementation * * @param object $table instance of Doctrine_Table * @param string $impName implementation (NestedSet, AdjacencyList, MaterializedPath) * @param array $options options * @return object $options instance of Doctrine_Node * @throws Doctrine_Exception if class does not extend Doctrine_Tree */ public static function factory($table, $implName, $options = array()) { $class = 'Doctrine_Tree_' . $implName; if ( ! class_exists($class)) { throw new Doctrine_Exception('The chosen class must extend Doctrine_Tree'); } return new $class($table, $options); } /** * gets tree attribute value * */ public function getAttribute($name) { return isset($this->options[$name]) ? $this->options[$name] : null; } /** * sets tree attribute value * * @param mixed */ public function setAttribute($name, $value) { $this->options[$name] = $value; } /** * Returns the base tree component. */ public function getBaseComponent() { return $this->_baseComponent; } }