예제 #1
0
 public function getOrderObjects(NodeQuery $nodeQuery, $ignoreNone = false)
 {
     $nodeRefs = $nodeQuery->getParameter('NodeRefs.normalized');
     $firstElement = current($nodeRefs)->getElement();
     $offset = $nodeQuery->getOffset() != null ? $nodeQuery->getOffset() : 0;
     $limit = $nodeQuery->getLimit();
     // ORDER BYS
     $arr = array('Title', 'ActiveDate', 'CreationDate', 'SortOrder', 'TreeID');
     $default = $firstElement->getDefaultOrder();
     if (empty($default)) {
         $default = 'ActiveDate DESC';
     }
     if (count($order = explode(' ', $default)) == 2) {
         $field = $order[0];
         $direction = $order[1];
         $defaultSorts = array($field => $direction);
     }
     $dtoSorts = $nodeQuery->getOrderBys();
     if ($dtoSorts == null && !$ignoreNone) {
         $dtoSorts = $defaultSorts;
     }
     $diff = array_diff(array_keys($dtoSorts), array_keys($arr));
     $merged = array_merge($diff, $arr);
     $sorts = array_unique($merged);
     $orderObjects = array();
     $metaCount = 1;
     foreach ($sorts as $name => $column) {
         if (is_int($name)) {
             $name = $column;
         }
         if (isset($dtoSorts[$name])) {
             $direction = $dtoSorts[$name];
             if (strcasecmp($name, 'NodeRefs') === 0) {
                 //$dtoParameterToSortBy = $direction;
                 $nodeRefs = array_slice($nodeRefs, 0, $limit + $offset);
                 $orderObjects[] = new NodeOrderBy('NodeRef', $nodeRefs);
             } else {
                 if (strpos($name, '#') !== false) {
                     //$orderByMeta = new MetaPartial($name);
                     $name = substr($name, strpos($name, '#') + 1);
                     if ($firstElement->getSchema()->hasMetaDef($name)) {
                         $s = $firstElement->getSchema()->getMetaDef($name);
                         $datatype = $s->Datatype;
                         $column = "{$datatype}Value{$metaCount}";
                         $metaCount++;
                         $orderObjects[] = new NodeOrderBy($column, $direction, $name, $datatype);
                     }
                 } else {
                     $orderObjects[] = new NodeOrderBy($column, $direction);
                 }
             }
         }
     }
     return $orderObjects;
 }