Example #1
0
 /**
  * @covers BehEh\Sulphur\Filterable::doesNotPass
  */
 public function testDoesNotPass()
 {
     $this->assertTrue($this->filterable->doesNotPass('Title', function ($field, $value) {
         return strlen($value) <= 3;
     }));
     $this->assertTrue($this->filterable->doesNotPass('Title', function ($field, $value) {
         return $field === 'State';
     }));
     $this->assertTrue($this->filterable->doesNotPass('Icon', function ($field, $value) {
         return $value === '12';
     }));
     $this->assertTrue($this->filterable->doesNotPass('foo', function ($field, $value) {
         return $value !== null;
     }));
     $this->assertFalse($this->filterable->doesNotPass('Title', function ($field, $value) {
         return strlen($value) > 5;
     }));
     $this->assertFalse($this->filterable->doesNotPass('Title', function ($field, $value) {
         return $field === 'Title';
     }));
     $this->assertFalse($this->filterable->doesNotPass('Icon', function ($field, $value) {
         return $value === 12;
     }));
     $this->assertFalse($this->filterable->doesNotPass('foo', function ($field, $value) {
         return $value === null;
     }));
 }
 public function filterby()
 {
     // Get a list of filterable classes
     $classes = Filterable::getFilteredClasses();
     $results = ArrayList::create();
     $get_vars = $this->owner->request->getVars();
     $filter_ids = array();
     if (isset($get_vars["filter"])) {
         // First trim uneeded characters from string
         $filter_vars = trim($get_vars["filter"], " :;\t\n\r\v");
         // Now explode the filters stored in our filter var
         $filter_vars = explode(";", $filter_vars);
         // Now get the filter options we need to filter objects by
         foreach ($filter_vars as $single_var) {
             $key_value = explode(":", $single_var);
             $filter_option = FilterOption::get()->filter(array("Parent.URLSegment:nocase" => $key_value[0], "URLSegment:nocase" => $key_value[1]))->first();
             if ($filter_option && $results->exists()) {
                 foreach ($results as $result) {
                     if (!$result->Filters()->find("ID", $filter_option->ID)) {
                         $results->remove($result);
                     }
                 }
             } elseif ($filter_option) {
                 foreach ($classes as $class) {
                     $list = $class::get()->filter("Filters.ID:ExactMatch", $filter_option->ID);
                     if ($list->exists()) {
                         $results->merge($list);
                     }
                 }
             }
         }
     } else {
         foreach ($classes as $class) {
             $list = $class::get();
             if ($list->exists()) {
                 $results->merge($list);
             }
         }
     }
     $results = new PaginatedList($results, $this->owner->request);
     $data = array('Results' => $results);
     $this->owner->extend("updateFilterBy", $data);
     $template = $this->owner->ClassName ? $this->owner->ClassName : "Page";
     return $this->owner->customise($data)->renderWith(array("{$template}_filterby", "FilterBy", "Page"));
 }
 public function __construct()
 {
     parent::__construct();
     $this->_CI =& get_instance();
 }
Example #4
0
 public function __construct($heading)
 {
     $this->setHeading($heading);
     parent::__construct();
 }