public function testGetAll() { // Cleanup Keyword::deleteAll(); for ($i = 0; $i < 100; $i++) { $keyword = new Keyword(); $keyword->heat_level = $i; $keyword->name = md5($i); $keyword->save(); } $keywords = Keyword::getAll(); $this->assertEquals(100, count($keywords)); $keywords = array_values(\Taco\Util\Collection::sortBy($keywords, 'heat_level', SORT_NUMERIC)); foreach ($keywords as $k => $keyword) { $this->assertInstanceOf('Keyword', $keyword); $this->assertEquals($k, $keyword->heat_level); $this->assertEquals(md5($k), $keyword->name); } }
/** * Get terms with conditions * @param array $args * @return array */ public static function getWhere($args = array()) { $instance = Term\Factory::create(get_called_class()); // Allow sorting both by core fields and custom fields // See: http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters $default_args = array('orderby' => $instance->getDefaultOrderBy(), 'order' => $instance->getDefaultOrder(), 'hide_empty' => false); $criteria = array_merge($default_args, $args); // Custom ordering $orderby = null; $order = null; $wordpress_sortable_fields = array('id', 'name', 'count', 'slug', 'term_group', 'none'); if (array_key_exists('orderby', $criteria) && !in_array($criteria['orderby'], $wordpress_sortable_fields)) { $orderby = $criteria['orderby']; $order = array_key_exists('order', $criteria) ? strtoupper($criteria['order']) : 'ASC'; unset($criteria['orderby']); unset($criteria['order']); } $taxonomy = $instance->getTaxonomyKey(); $terms = Term\Factory::createMultiple(get_terms($taxonomy, $criteria)); // We might be done if (!Arr::iterable($terms)) { return $terms; } if (!$orderby) { return $terms; } // Custom sorting that WordPress can't do $field = $instance->getField($orderby); // Make sure we're sorting numerically if appropriate // because WordPress is storing strings for all vals if ($field['type'] === 'number') { foreach ($terms as &$term) { if (!isset($term->{$orderby})) { continue; } if ($term->{$orderby} === '') { continue; } $term->{$orderby} = (double) $term->{$orderby}; } } // Sorting $sort_flag = $field['type'] === 'number' ? SORT_NUMERIC : SORT_STRING; $terms = Collection::sortBy($terms, $orderby, $sort_flag); if (strtoupper($order) === 'DESC') { $terms = array_reverse($terms, true); } // Convert back to string as WordPress stores it if ($field['type'] === 'number') { foreach ($terms as &$term) { if (!isset($term->{$orderby})) { continue; } if ($term->{$orderby} === '') { continue; } $term->{$orderby} = (string) $term->{$orderby}; } } return $terms; }
public function testGetAll() { // Cleanup Person::deleteAll(); for ($i = 0; $i < 100; $i++) { $person = new Person(); $person->age = $i; $person->first_name = md5($i); $person->save(); } $persons = Person::getAll(); $this->assertEquals(100, count($persons)); $persons = array_values(\Taco\Util\Collection::sortBy($persons, 'age')); foreach ($persons as $k => $person) { $this->assertInstanceOf('Person', $person); $this->assertEquals($k, $person->age); $this->assertEquals(md5($k), $person->first_name); } }