-
Notifications
You must be signed in to change notification settings - Fork 397
/
NestedSetBehavior.php
99 lines (82 loc) · 2.72 KB
/
NestedSetBehavior.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
/**
* This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
namespace Propel\Generator\Behavior\NestedSet;
use Propel\Generator\Model\Behavior;
/**
* Behavior to adds nested set tree structure columns and abilities
*
* @author François Zaninotto
*/
class NestedSetBehavior extends Behavior
{
// default parameters value
protected $parameters = array(
'left_column' => 'tree_left',
'right_column' => 'tree_right',
'level_column' => 'tree_level',
'use_scope' => 'false',
'scope_column' => 'tree_scope',
'method_proxies' => 'false'
);
protected $objectBuilderModifier;
protected $queryBuilderModifier;
/**
* Add the left, right and scope to the current table
*/
public function modifyTable()
{
$table = $this->getTable();
if (!$table->hasColumn($this->getParameter('left_column'))) {
$table->addColumn(array(
'name' => $this->getParameter('left_column'),
'type' => 'INTEGER'
));
}
if (!$table->hasColumn($this->getParameter('right_column'))) {
$table->addColumn(array(
'name' => $this->getParameter('right_column'),
'type' => 'INTEGER'
));
}
if (!$table->hasColumn($this->getParameter('level_column'))) {
$table->addColumn(array(
'name' => $this->getParameter('level_column'),
'type' => 'INTEGER'
));
}
if ('true' === $this->getParameter('use_scope') && !$table->hasColumn($this->getParameter('scope_column'))) {
$table->addColumn(array(
'name' => $this->getParameter('scope_column'),
'type' => 'INTEGER'
));
}
}
public function getObjectBuilderModifier()
{
if (null === $this->objectBuilderModifier) {
$this->objectBuilderModifier = new NestedSetBehaviorObjectBuilderModifier($this);
}
return $this->objectBuilderModifier;
}
public function getQueryBuilderModifier()
{
if (null === $this->queryBuilderModifier) {
$this->queryBuilderModifier = new NestedSetBehaviorQueryBuilderModifier($this);
}
return $this->queryBuilderModifier;
}
public function useScope()
{
return 'true' === $this->getParameter('use_scope');
}
public function getColumnConstant($columnName, $builder)
{
return $builder->getColumnConstant($this->getColumnForParameter($columnName));
}
}