Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
77.05% covered (warning)
77.05%
47 / 61
61.54% covered (warning)
61.54%
8 / 13
CRAP
0.00% covered (danger)
0.00%
0 / 1
GetTreeRequest
77.05% covered (warning)
77.05%
47 / 61
61.54% covered (warning)
61.54%
8 / 13
34.17
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
 create
75.61% covered (warning)
75.61%
31 / 41
0.00% covered (danger)
0.00%
0 / 1
16.84
 getClass
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLimit
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOffset
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isShowInstance
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isHideNode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getOpenNodes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getResourceUrisToShow
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getFilters
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setFilters
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getFiltersOptions
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setFiltersOptions
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace oat\tao\model\Tree;
4
5use common_Exception;
6use core_kernel_classes_Class;
7use oat\tao\helpers\TreeHelper;
8use Request;
9use tao_helpers_Uri;
10use oat\generis\model\OntologyRdfs;
11
12class GetTreeRequest
13{
14    public const DEFAULT_LIMIT = 10;
15    public const DEFAULT_ORDERDIR = 'asc';
16
17    /** @var  core_kernel_classes_Class */
18    protected $class;
19
20    /** @var  int */
21    protected $limit;
22
23    /** @var  int */
24    protected $offset;
25
26    /** @var  bool */
27    protected $showInstance;
28
29    /** @var  bool */
30    protected $hideNode;
31
32    /** @var  array */
33    protected $openNodes;
34
35    /** @var  array */
36    protected $resourceUrisToShow;
37
38    /** @var  array */
39    protected $filters = [];
40
41    /** @var  array */
42    protected $filtersOptions = [];
43
44    /**
45     * GetTreeRequest constructor.
46     * @param core_kernel_classes_Class $class
47     * @param int $limit
48     * @param int $offset
49     * @param bool $showInstance
50     * @param bool $hideNode
51     * @param array $openNodes
52     * @param array $resourceUrisToShow
53     * @param array $filtersOptions
54     * @param \core_kernel_classes_Property[] $filters Properties to filter tree resources
55     */
56    public function __construct(
57        $class,
58        $limit,
59        $offset,
60        $showInstance,
61        $hideNode,
62        array $openNodes,
63        array $resourceUrisToShow = [],
64        $filtersOptions = [],
65        array $filters = []
66    ) {
67        $this->class = $class;
68        $this->limit = $limit;
69        $this->offset = $offset;
70        $this->showInstance = $showInstance;
71        $this->hideNode = $hideNode;
72        $this->openNodes = $openNodes;
73        $this->resourceUrisToShow = $resourceUrisToShow;
74        $this->filters = $filters;
75        $this->filtersOptions = $filtersOptions;
76    }
77
78    /**
79     * @param Request $request
80     * @return GetTreeRequest
81     *
82     * @throws common_Exception
83     */
84    public static function create(Request $request)
85    {
86
87        if ($request->hasParameter('classUri')) {
88            $classUri = tao_helpers_Uri::decode($request->getParameter('classUri'));
89            $class = new core_kernel_classes_Class($classUri);
90            $hideNode = true;
91        } elseif ($request->hasParameter('rootNode')) {
92            $class = new core_kernel_classes_Class($request->getParameter('rootNode'));
93            $hideNode = false;
94        } else {
95            throw new common_Exception('Missing node information for ' . __FUNCTION__);
96        }
97
98        $openNodes = [$class->getUri()];
99        $openNodesParameter = $request->getParameter('openNodes');
100        $openParentNodesParameter = $request->getParameter('openParentNodes');
101
102        if ($request->hasParameter('openNodes') && is_array($openNodesParameter)) {
103            $openNodes = array_merge($openNodes, $openNodesParameter);
104        } elseif ($request->hasParameter('openParentNodes') && is_array($openParentNodesParameter)) {
105            $childNodes = $openParentNodesParameter;
106            $openNodes = TreeHelper::getNodesToOpen($childNodes, $class);
107        }
108
109        $limit = $request->hasParameter('limit') ? $request->getParameter('limit') : self::DEFAULT_LIMIT;
110        $offset = $request->hasParameter('offset') ? $request->getParameter('offset') : 0;
111        $showInstance = $request->hasParameter('hideInstances') ? !$request->getParameter('hideInstances') : true;
112        $orderProp = $request->hasParameter('order') ? $request->getParameter('order') : OntologyRdfs::RDFS_LABEL;
113        $orderDir = $request->hasParameter('orderdir') ? $request->getParameter('orderdir') : self::DEFAULT_ORDERDIR;
114
115        $filterProperties = [];
116        if ($request->hasParameter('filterProperties')) {
117            $filterProperties = $request->getParameter('filterProperties');
118            if (!is_array($filterProperties)) {
119                $filterProperties = [];
120            }
121        }
122
123        return new self(
124            $class,
125            $limit,
126            $offset,
127            $showInstance,
128            $hideNode,
129            $openNodes,
130            [],
131            [
132                'order' => [
133                    $orderProp => $orderDir
134                ]
135            ],
136            $filterProperties
137        );
138    }
139
140    /**
141     * @return core_kernel_classes_Class
142     */
143    public function getClass()
144    {
145        return $this->class;
146    }
147
148    /**
149     * @return int
150     */
151    public function getLimit()
152    {
153        return $this->limit;
154    }
155
156    /**
157     * @return int
158     */
159    public function getOffset()
160    {
161        return $this->offset;
162    }
163
164    /**
165     * @return bool
166     */
167    public function isShowInstance()
168    {
169        return $this->showInstance;
170    }
171
172    /**
173     * @return bool
174     */
175    public function isHideNode()
176    {
177        return $this->hideNode;
178    }
179
180    /**
181     * @return array
182     */
183    public function getOpenNodes()
184    {
185        return $this->openNodes;
186    }
187
188    /**
189     * @return array
190     */
191    public function getResourceUrisToShow()
192    {
193        return $this->resourceUrisToShow;
194    }
195
196    /**
197     * @return array
198     */
199    public function getFilters()
200    {
201        return $this->filters;
202    }
203
204    /**
205     * @param array $filters
206     */
207    public function setFilters($filters)
208    {
209        $this->filters = $filters;
210    }
211
212    /**
213     * @return array
214     */
215    public function getFiltersOptions()
216    {
217        return $this->filtersOptions;
218    }
219
220    /**
221     * @param array $filtersOptions
222     */
223    public function setFiltersOptions($filtersOptions)
224    {
225        $this->filtersOptions = $filtersOptions;
226    }
227}