Пример #1
0
 function sort($params)
 {
     if (count($this->dataset)) {
         $this->dataset = lmbArrayHelper::sortArray($this->dataset, $params, false);
         $this->iteratedDataset = null;
     }
     return $this;
 }
Пример #2
0
 function testSortArray()
 {
     $arr = array(array('a' => 1, 'b' => 2), array('a' => 2, 'b' => 1), array('a' => 2, 'b' => 0));
     $res = lmbArrayHelper::sortArray($arr, array('a' => 'DESC', 'b' => 'ASC'));
     $this->assertEqual($res, array(2 => array('a' => 2, 'b' => 0), 1 => array('a' => 2, 'b' => 1), 0 => array('a' => 1, 'b' => 2)));
     $res = lmbArrayHelper::sortArray($arr, array('a' => 'DESC', 'b' => 'ASC'), false);
     $this->assertEqual($res, array(array('a' => 2, 'b' => 0), array('a' => 2, 'b' => 1), array('a' => 1, 'b' => 2)));
 }
 protected function _serializeHttpAttributes()
 {
     $uri = $this->http_request->getUri();
     if (!($query = $uri->getQueryItems())) {
         return '';
     }
     $flat = array();
     lmbArrayHelper::toFlatArray($query, $flat);
     ksort($flat);
     return serialize($flat);
 }
Пример #4
0
 function _checkProperNesting($nodes, $line = '')
 {
     $this->assertEqual(lmbArrayHelper::sortArray($nodes, array('path' => 'ASC')), $nodes);
     $path = lmbArrayHelper::getMinColumnValue('path', $nodes, $index);
     $parent_paths[] = $this->_getParentPath($path);
     $counter = 0;
     foreach ($nodes as $id => $node) {
         $parent_path = $this->_getParentPath($node['path']);
         $this->assertTrue(in_array($parent_path, $parent_paths), 'path is improperly nested: ' . $node['path'] . ' , expected parent not found: ' . $parent_path . ' at line: ' . $line);
         $parent_paths[] = $node['path'];
     }
 }
Пример #5
0
 function _doSort($tree_array, &$sorted_tree_array, $sort_params, $parent_id, $id_hash, $parent_hash)
 {
     $children = array();
     foreach ($tree_array as $index => $item) {
         if ($item[$parent_hash] == $parent_id) {
             $children[] = $item;
             unset($tree_array[$index]);
         }
     }
     if (!($count = sizeof($children))) {
         return;
     }
     $children = lmbArrayHelper::sortArray($children, $sort_params);
     if (!$sorted_tree_array) {
         $sorted_tree_array = $children;
     } else {
         $ids = lmbArrayHelper::getColumnValues($id_hash, $sorted_tree_array);
         $offset = array_search($parent_id, $ids) + 1;
         array_splice($sorted_tree_array, $offset, 0, $children);
     }
     for ($i = 0; $i < $count; $i++) {
         lmbTreeHelper::_doSort($tree_array, $sorted_tree_array, $sort_params, $children[$i][$id_hash], $id_hash, $parent_hash);
     }
 }
 function toString()
 {
     $flat = array();
     $query = '';
     lmbArrayHelper::toFlatArray($this->__request, $flat);
     foreach ($flat as $key => $value) {
         if (is_object($value)) {
             continue;
         }
         $query .= $key . '=' . urlencode($value) . '&';
     }
     //TODO: this is quite ugly but it works...
     $uri = clone $this->__uri;
     $uri->removeQueryItems();
     return rtrim($uri->toString() . '?' . rtrim($query, '&'), '?');
 }
 function rewind()
 {
     foreach ($this->attach_relations as $relation_name => $params) {
         if (!in_array($relation_name, array_keys($this->loaded_attaches))) {
             $relation_type = $this->base_object->getRelationType($relation_name);
             $relation_info = $this->base_object->getRelationInfo($relation_name);
             $relation_class = $relation_info['class'];
             $relation_object = new $relation_class(null, $this->conn);
             switch ($relation_type) {
                 case lmbActiveRecord::HAS_ONE:
                 case lmbActiveRecord::MANY_BELONGS_TO:
                     $ids = lmbArrayHelper::getColumnValues($this->prefix . $relation_info['field'], $this->iterator);
                     if (!count($ids)) {
                         $this->loaded_attaches[$relation_name] = array();
                     } else {
                         $attached_objects = lmbActiveRecord::findByIds($relation_class, $ids, $params, $this->conn);
                         $this->loaded_attaches[$relation_name] = lmbCollection::toFlatArray($attached_objects, $key_field = $relation_object->getPrimaryKeyName(), $export_each = false);
                     }
                     break;
                 case lmbActiveRecord::BELONGS_TO:
                     $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator);
                     if (!count($ids)) {
                         $this->loaded_attaches[$relation_name] = array();
                     } else {
                         $criteria = lmbSQLCriteria::in($relation_info['field'], $ids);
                         $params['criteria'] = isset($params['criteria']) ? $params['criteria']->addAnd($criteria) : $criteria;
                         $attached_objects = lmbActiveRecord::find($relation_class, $params, $this->conn);
                         $this->loaded_attaches[$relation_name] = lmbCollection::toFlatArray($attached_objects, $key_field = $relation_info['field'], $export_each = false);
                     }
                     break;
                 case lmbActiveRecord::HAS_MANY:
                     if (!isset($params['sort'])) {
                         $params['sort'] = $relation_object->getDefaultSortParams();
                     }
                     $params['sort'] = array($relation_info['field'] => 'ASC') + $params['sort'];
                     $query = lmbAROneToManyCollection::createFullARQueryForRelation($relation_info, $this->conn, $params);
                     $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator);
                     $this->loaded_attaches[$relation_name] = array();
                     if (!count($ids)) {
                         break;
                     }
                     $query->addCriteria(lmbSQLCriteria::in($relation_info['field'], $ids));
                     $attached_objects = $query->fetch();
                     foreach ($attached_objects as $attached_object) {
                         $this->loaded_attaches[$relation_name][$attached_object->get($relation_info['field'])][] = $attached_object;
                     }
                     break;
                 case lmbActiveRecord::HAS_MANY_TO_MANY:
                     if (!isset($params['sort'])) {
                         $params['sort'] = $relation_object->getDefaultSortParams();
                     }
                     $params['sort'] = array($relation_info['field'] => 'ASC') + $params['sort'];
                     $query = lmbARManyToManyCollection::createFullARQueryForRelation($relation_info, $this->conn, $params);
                     $query->addField($relation_info['table'] . '.' . $relation_info['field'], "link__id");
                     $ids = lmbArrayHelper::getColumnValues($this->prefix . $this->base_object->getPrimaryKeyName(), $this->iterator);
                     $this->loaded_attaches[$relation_name] = array();
                     if (!count($ids)) {
                         break;
                     }
                     $query->addCriteria(lmbSQLCriteria::in($relation_info['field'], $ids));
                     $attached_objects = $query->fetch();
                     foreach ($attached_objects as $attached_object) {
                         $this->loaded_attaches[$relation_name][$attached_object->get("link__id")][] = $attached_object;
                     }
                     break;
             }
         }
     }
     parent::rewind();
 }
Пример #8
0
 static function arrayMapRecursive($in_func, &$in_array)
 {
     foreach (array_keys($in_array) as $key) {
         $value =& $in_array[$key];
         if (is_array($value)) {
             lmbArrayHelper::arrayMapRecursive($in_func, $value);
         } else {
             $value = call_user_func_array($in_func, array($value));
         }
     }
     return $in_array;
 }
Пример #9
0
 /**
  * Returns flat query_string
  *
  */
 function getQueryString()
 {
     $query_string = '';
     $query_items = array();
     $flat_array = array();
     lmbArrayHelper::toFlatArray($this->query_items, $flat_array);
     ksort($flat_array);
     foreach ($flat_array as $key => $value) {
         if ($value != '' || is_null($value)) {
             $query_items[] = $key . '=' . urlencode($value);
         } else {
             $query_items[] = $key;
         }
     }
     if ($query_items) {
         $query_string = implode('&', $query_items);
     }
     return $query_string;
 }