Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 3
0
 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);
     }
 }