public static function logHit($query) { // create or update log $existing = SearchLog::get()->filter(array('Query' => $query))->first(); if ($existing) { $existing->Count = $existing->Count + 1; $existing->write(); } else { $log = new SearchLog(); $log->Query = $query; $log->Count = 1; $log->write(); } }
public function testLogging() { /** @var Member $m1 */ $m1 = $this->objFromFixture('Member', 'm1'); $m1->logOut(); $this->assertEquals(0, SearchLog::get()->count()); // Searching for nothing should not leave a record ShopSearch::inst()->search(array()); $this->assertEquals(0, SearchLog::get()->count()); // Searching should leave a log record ShopSearch::inst()->search(array('q' => 'green')); $this->assertEquals(1, SearchLog::get()->count()); $log = SearchLog::get()->last(); $this->assertEquals('green', $log->Query); $this->assertEquals(2, $log->NumResults); $this->assertEquals(0, $log->MemberID); // If we log in as a customer, the search log should register that $m1->logIn(); ShopSearch::inst()->search(array('q' => 'purple')); $this->assertEquals(2, SearchLog::get()->count()); $log = SearchLog::get()->last(); $this->assertEquals('purple', $log->Query); $this->assertEquals(1, $log->NumResults); $this->assertEquals($m1->ID, $log->MemberID); $m1->logOut(); // Refining a search several times should leave us a crumb trail $s = ShopSearch::inst(); $r = $s->search(array('q' => 'green')); $this->assertNotNull($r->SearchBreadcrumbs, 'Search crumb exists'); $this->assertEquals(1, $r->SearchBreadcrumbs->count(), 'Search crumb should have 1 entry'); $this->assertEquals('Search: green', $r->SearchBreadcrumbs->first()->Title, 'Search crumb label should be correct'); $r = $s->search(array('q' => 'green', '__ps' => $r->SearchLogID, '__t' => 'Model: ABC', 'f' => array('Model' => 'ABC'))); $this->assertEquals(2, $r->SearchBreadcrumbs->count(), 'Search crumb should have 2 entries'); $this->assertEquals('Search: green', $r->SearchBreadcrumbs->first()->Title, 'Search crumb should contain previous search'); $this->assertEquals('Model: ABC', $r->SearchBreadcrumbs->last()->Title, 'Search crumb should contain current search'); $r = $s->search(array('q' => 'green', '__ps' => $r->SearchLogID, '__t' => 'Price: $10.50', 'f' => array('Model' => 'ABC', 'Price' => '10.50'))); $this->assertEquals(3, $r->SearchBreadcrumbs->count(), 'Search crumb should have 3 entries'); $this->assertEquals('Search: green', $r->SearchBreadcrumbs->first()->Title, 'Search crumb should contain first search'); $this->assertEquals('Model: ABC', $r->SearchBreadcrumbs->offsetGet(1)->Title, 'Search crumb should contain previous search'); $this->assertEquals('Price: $10.50', $r->SearchBreadcrumbs->last()->Title, 'Search crumb should contain current search'); $r = $s->search(array('q' => 'purple')); $this->assertEquals(1, $r->SearchBreadcrumbs->count(), 'Search crumb should reset'); }
public function sourceRecords($params, $sort, $limit) { return SearchLog::get(); }