1515namespace APY \DataGridBundle \Grid \Source ;
1616
1717use APY \DataGridBundle \Grid \Column \Column ;
18+ use APY \DataGridBundle \Grid \Helper \ColumnsIterator ;
1819use APY \DataGridBundle \Grid \Row ;
1920use APY \DataGridBundle \Grid \Rows ;
2021use Doctrine \ODM \MongoDB \Query \Builder as QueryBuilder ;
22+ use MongoDB \BSON \Regex ;
2123
2224class Document extends Source
2325{
@@ -84,7 +86,7 @@ public function initialise($container)
8486 {
8587 $ this ->manager = $ container ->get ('doctrine.odm.mongodb.document_manager ' );
8688 $ this ->odmMetadata = $ this ->manager ->getClassMetadata ($ this ->documentName );
87- $ this ->class = $ this ->odmMetadata ->getReflectionClass ()->name ;
89+ $ this ->class = $ this ->odmMetadata ->getReflectionClass ()->getName () ;
8890
8991 $ mapping = $ container ->get ('grid.mapping.manager ' );
9092 $ mapping ->addDriver ($ this , -1 );
@@ -127,24 +129,22 @@ protected function normalizeOperator($operator)
127129 protected function normalizeValue ($ operator , $ value )
128130 {
129131 switch ($ operator ) {
130- case Column::OPERATOR_EQ :
131- return $ value ;
132132 case Column::OPERATOR_NEQ :
133- return new \ MongoRegex ( ' / ^(?! ' . $ value . '$).*$/ i ' );
133+ return new Regex ( ' ^(?! ' . $ value . '$).*$ ' , ' i ' );
134134 case Column::OPERATOR_LIKE :
135- return new \ MongoRegex ( ' / ' . $ value . ' / i ' );
135+ return new Regex ( $ value, ' i ' );
136136 case Column::OPERATOR_NLIKE :
137- return new \ MongoRegex ( ' / ^((?! ' . $ value . ').)*$/ i ' );
137+ return new Regex ( ' ^((?! ' . $ value . ').)*$ ' , ' i ' );
138138 case Column::OPERATOR_RLIKE :
139- return new \ MongoRegex ( ' / ^ ' . $ value . ' / i ' );
139+ return new Regex ( ' ^ ' . $ value, ' i ' );
140140 case Column::OPERATOR_LLIKE :
141- return new \ MongoRegex ( ' / ' . $ value . '$/ i ' );
141+ return new Regex ( $ value . '$ ' , ' i ' );
142142 case Column::OPERATOR_SLIKE :
143- return new \ MongoRegex ( ' / ' . $ value . ' / ' );
143+ return new Regex ( $ value, ' ' );
144144 case Column::OPERATOR_RSLIKE :
145- return new \ MongoRegex ( ' / ^ ' . $ value . ' / ' );
145+ return new Regex ( ' ^ ' . $ value, ' ' );
146146 case Column::OPERATOR_LSLIKE :
147- return new \ MongoRegex ( ' / ' . $ value . '$/ ' );
147+ return new Regex ( $ value . '$ ' , ' ' );
148148 case Column::OPERATOR_ISNULL :
149149 return false ;
150150 case Column::OPERATOR_ISNOTNULL :
@@ -181,7 +181,7 @@ protected function getQueryBuilder()
181181 }
182182
183183 /**
184- * @param \APY\DataGridBundle\Grid\Column\Column[] $columns
184+ * @param ColumnsIterator $columns
185185 * @param int $page Page Number
186186 * @param int $limit Rows Per Page
187187 * @param int $gridDataJunction Grid data junction
@@ -192,14 +192,13 @@ public function execute($columns, $page = 0, $limit = 0, $maxResults = null, $gr
192192 {
193193 $ this ->query = $ this ->getQueryBuilder ();
194194
195+ $ validColumns = [];
195196 foreach ($ columns as $ column ) {
196197
197198 //checks if exists '.' notation on referenced columns and build query if it's filtered
198199 $ subColumn = explode ('. ' , $ column ->getId ());
199200 if (count ($ subColumn ) > 1 && isset ($ this ->referencedMappings [$ subColumn [0 ]])) {
200201 $ this ->addReferencedColumnn ($ subColumn , $ column );
201- //must remove this referenced subColumn from processing
202- $ columns ->offsetUnset ($ columns ->key ());
203202
204203 continue ;
205204 }
@@ -228,6 +227,8 @@ public function execute($columns, $page = 0, $limit = 0, $maxResults = null, $gr
228227 }
229228 }
230229 }
230+
231+ $ validColumns [] = $ column ;
231232 }
232233
233234 if ($ page > 0 ) {
@@ -250,6 +251,8 @@ public function execute($columns, $page = 0, $limit = 0, $maxResults = null, $gr
250251 //execute and get results
251252 $ result = new Rows ();
252253
254+ // I really don't know if Cursor is the right type returned (I mean, every single type).
255+ // As I didn't find out this information, I'm gonna test it with Cursor returned only.
253256 $ cursor = $ this ->query ->getQuery ()->execute ();
254257
255258 $ this ->count = $ cursor ->count ();
@@ -258,7 +261,7 @@ public function execute($columns, $page = 0, $limit = 0, $maxResults = null, $gr
258261 $ row = new Row ();
259262 $ properties = $ this ->getClassProperties ($ resource );
260263
261- foreach ($ columns as $ column ) {
264+ foreach ($ validColumns as $ column ) {
262265 if (isset ($ properties [strtolower ($ column ->getId ())])) {
263266 $ row ->setField ($ column ->getId (), $ properties [strtolower ($ column ->getId ())]);
264267 }
@@ -296,6 +299,7 @@ protected function addReferencedColumnn(array $subColumn, Column $column)
296299 $ cursor = $ helperQuery ->getQuery ()->execute ();
297300
298301 foreach ($ cursor as $ resource ) {
302+ // Is this case possible? I don't think so
299303 if ($ cursor ->count () > 0 ) {
300304 $ this ->query ->select ($ subColumn [0 ]);
301305 }
@@ -362,6 +366,12 @@ protected function getClassProperties($obj)
362366 return $ result ;
363367 }
364368
369+ /**
370+ * @param string $class
371+ * @param string $group
372+ *
373+ * @return array
374+ */
365375 public function getFieldsMetadata ($ class , $ group = 'default ' )
366376 {
367377 $ result = [];
@@ -501,6 +511,11 @@ public function populateSelectFilters($columns, $loop = false)
501511 }
502512 }
503513
514+ /**
515+ * @param array $ids
516+ *
517+ * @throws \Exception
518+ */
504519 public function delete (array $ ids )
505520 {
506521 $ repository = $ this ->getRepository ();
@@ -518,11 +533,17 @@ public function delete(array $ids)
518533 $ this ->manager ->flush ();
519534 }
520535
536+ /**
537+ * @return \Doctrine\ODM\MongoDB\DocumentRepository
538+ */
521539 public function getRepository ()
522540 {
523541 return $ this ->manager ->getRepository ($ this ->documentName );
524542 }
525543
544+ /**
545+ * @return string
546+ */
526547 public function getHash ()
527548 {
528549 return $ this ->documentName ;
0 commit comments