1
|
|
|
<?php namespace XoopsModules\Smartobject; |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Contains the classes responsible for displaying a tree table filled with records of SmartObjects |
5
|
|
|
* |
6
|
|
|
* @license GNU |
7
|
|
|
* @author marcan <[email protected]> |
8
|
|
|
* @link http://smartfactory.ca The SmartFactory |
9
|
|
|
* @package SmartObject |
10
|
|
|
* @subpackage SmartObjectTable |
11
|
|
|
*/ |
12
|
|
|
|
13
|
|
|
use XoopsModules\Smartobject; |
14
|
|
|
|
15
|
|
|
//require_once SMARTOBJECT_ROOT_PATH . 'class/smartobjecttable.php'; |
|
|
|
|
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* SmartObjectTreeTable class |
19
|
|
|
* |
20
|
|
|
* Class representing a tree table for displaying SmartObjects |
21
|
|
|
* |
22
|
|
|
* @package SmartObject |
23
|
|
|
* @author marcan <[email protected]> |
24
|
|
|
* @link http://smartfactory.ca The SmartFactory |
25
|
|
|
*/ |
26
|
|
|
class TreeTable extends Smartobject\BaseSmartObjectTable |
27
|
|
|
{ |
28
|
|
|
/** |
29
|
|
|
* SmartObjectTreeTable constructor. |
30
|
|
|
* @param PersistableObjectHandler $objectHandler |
31
|
|
|
* @param bool $criteria |
32
|
|
|
* @param array $actions |
33
|
|
|
* @param bool $userSide |
34
|
|
|
*/ |
35
|
|
|
public function __construct( |
36
|
|
|
PersistableObjectHandler $objectHandler, |
37
|
|
|
$criteria = false, |
38
|
|
|
$actions = ['edit', 'delete'], |
39
|
|
|
$userSide = false |
40
|
|
|
) { |
41
|
|
|
$this->SmartObjectTable($objectHandler, $criteria, $actions, $userSide); |
42
|
|
|
$this->_isTree = true; |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
/** |
46
|
|
|
* Get children objects given a specific parentid |
47
|
|
|
* |
48
|
|
|
* @var int $parentid id of the parent which children we want to retreive |
49
|
|
|
* @return array of SmartObject |
50
|
|
|
*/ |
51
|
|
|
public function getChildrenOf($parentid = 0) |
52
|
|
|
{ |
53
|
|
|
return isset($this->_objects[$parentid]) ? $this->_objects[$parentid] : false; |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* @param $object |
58
|
|
|
* @param int $level |
59
|
|
|
*/ |
60
|
|
|
public function createTableRow($object, $level = 0) |
61
|
|
|
{ |
62
|
|
|
$aObject = []; |
63
|
|
|
|
64
|
|
|
$i = 0; |
65
|
|
|
|
66
|
|
|
$aColumns = []; |
67
|
|
|
$doWeHaveActions = false; |
|
|
|
|
68
|
|
|
|
69
|
|
|
foreach ($this->_columns as $column) { |
70
|
|
|
$aColumn = []; |
71
|
|
|
|
72
|
|
View Code Duplication |
if (0 == $i) { |
|
|
|
|
73
|
|
|
$class = 'head'; |
74
|
|
|
} elseif (0 == $i % 2) { |
75
|
|
|
$class = 'even'; |
76
|
|
|
} else { |
77
|
|
|
$class = 'odd'; |
78
|
|
|
} |
79
|
|
|
|
80
|
|
|
if ($column->_customMethodForValue && method_exists($object, $column->_customMethodForValue)) { |
81
|
|
|
$method = $column->_customMethodForValue; |
82
|
|
|
$value = $object->$method(); |
83
|
|
View Code Duplication |
} else { |
|
|
|
|
84
|
|
|
/** |
85
|
|
|
* If the column is the identifier, then put a link on it |
86
|
|
|
*/ |
87
|
|
|
if ($column->getKeyName() == $this->_objectHandler->identifierName) { |
88
|
|
|
$value = $object->getItemLink(); |
89
|
|
|
} else { |
90
|
|
|
$value = $object->getVar($column->getKeyName()); |
91
|
|
|
} |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
$space = ''; |
95
|
|
|
if ($column->getKeyName() == $this->_objectHandler->identifierName) { |
96
|
|
|
for ($i = 0; $i < $level; ++$i) { |
97
|
|
|
$space .= '--'; |
98
|
|
|
} |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
if ('' !== $space) { |
102
|
|
|
$space .= ' '; |
103
|
|
|
} |
104
|
|
|
|
105
|
|
|
$aColumn['value'] = $space . $value; |
106
|
|
|
$aColumn['class'] = $class; |
107
|
|
|
$aColumn['width'] = $column->getWidth(); |
108
|
|
|
$aColumn['align'] = $column->getAlign(); |
109
|
|
|
$aColumn['key'] = $column->getKeyName(); |
110
|
|
|
|
111
|
|
|
$aColumns[] = $aColumn; |
112
|
|
|
++$i; |
113
|
|
|
} |
114
|
|
|
|
115
|
|
|
$aObject['columns'] = $aColumns; |
116
|
|
|
|
117
|
|
|
$class = 'even' === $class ? 'odd' : 'even'; |
|
|
|
|
118
|
|
|
$aObject['class'] = $class; |
119
|
|
|
|
120
|
|
|
$actions = []; |
121
|
|
|
|
122
|
|
|
// Adding the custom actions if any |
123
|
|
|
foreach ($this->_custom_actions as $action) { |
124
|
|
|
if (method_exists($object, $action)) { |
125
|
|
|
$actions[] = $object->$action(); |
126
|
|
|
} |
127
|
|
|
} |
128
|
|
|
|
129
|
|
|
// require_once SMARTOBJECT_ROOT_PATH . 'class/smartobjectcontroller.php'; |
130
|
|
|
$controller = new ObjectController($this->_objectHandler); |
131
|
|
|
|
132
|
|
View Code Duplication |
if (in_array('edit', $this->_actions)) { |
|
|
|
|
133
|
|
|
$actions[] = $controller->getEditItemLink($object, false, true); |
134
|
|
|
} |
135
|
|
View Code Duplication |
if (in_array('delete', $this->_actions)) { |
|
|
|
|
136
|
|
|
$actions[] = $controller->getDeleteItemLink($object, false, true); |
137
|
|
|
} |
138
|
|
|
$aObject['actions'] = $actions; |
139
|
|
|
|
140
|
|
|
$this->_tpl->assign('smartobject_actions_column_width', count($actions) * 30); |
141
|
|
|
$aObject['id'] = $object->id(); |
142
|
|
|
$this->_aObjects[] = $aObject; |
143
|
|
|
|
144
|
|
|
$childrenObjects = $this->getChildrenOf($object->id()); |
145
|
|
|
|
146
|
|
|
$this->_hasActions = $this->_hasActions ? true : count($actions) > 0; |
147
|
|
|
|
148
|
|
|
if ($childrenObjects) { |
|
|
|
|
149
|
|
|
++$level; |
150
|
|
|
foreach ($childrenObjects as $subObject) { |
151
|
|
|
$this->createTableRow($subObject, $level); |
152
|
|
|
} |
153
|
|
|
} |
154
|
|
|
} |
155
|
|
|
|
156
|
|
|
public function createTableRows() |
157
|
|
|
{ |
158
|
|
|
$this->_aObjects = []; |
159
|
|
|
|
160
|
|
|
if (count($this->_objects) > 0) { |
161
|
|
|
foreach ($this->getChildrenOf() as $object) { |
162
|
|
|
$this->createTableRow($object); |
163
|
|
|
} |
164
|
|
|
|
165
|
|
|
$this->_tpl->assign('smartobject_objects', $this->_aObjects); |
166
|
|
|
} else { |
167
|
|
|
$colspan = count($this->_columns) + 1; |
168
|
|
|
$this->_tpl->assign('smartobject_colspan', $colspan); |
169
|
|
|
} |
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
/** |
173
|
|
|
* @return mixed |
174
|
|
|
*/ |
175
|
|
|
public function fetchObjects() |
176
|
|
|
{ |
177
|
|
|
$ret = $this->_objectHandler->getObjects($this->_criteria, 'parentid'); |
178
|
|
|
|
179
|
|
|
return $ret; |
180
|
|
|
} |
181
|
|
|
} |
182
|
|
|
|
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.