Fix on Filters
* added filter to get events endpoints Change-Id: If5ea9738540b6e7083770fd7a209f70ace0740a1
This commit is contained in:
parent
42a7e3607c
commit
dbda548174
@ -29,6 +29,7 @@ use services\model\ISummitService;
|
||||
use utils\Filter;
|
||||
use utils\FilterParser;
|
||||
use utils\FilterParserException;
|
||||
use utils\OrderParser;
|
||||
use utils\PagingInfo;
|
||||
use utils\PagingResponse;
|
||||
|
||||
@ -162,6 +163,7 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
|
||||
}
|
||||
|
||||
$filter = null;
|
||||
|
||||
if (Input::has('filter')) {
|
||||
$filter = FilterParser::parse(Input::get('filter'), array
|
||||
(
|
||||
@ -176,6 +178,20 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
|
||||
));
|
||||
}
|
||||
|
||||
$order = null;
|
||||
|
||||
if (Input::has('order'))
|
||||
{
|
||||
$order = OrderParser::parse(Input::get('order'), array
|
||||
(
|
||||
'title',
|
||||
'start_date',
|
||||
'end_date',
|
||||
'id',
|
||||
'created',
|
||||
));
|
||||
}
|
||||
|
||||
if(is_null($filter)) $filter = new Filter();
|
||||
|
||||
$filter->addFilterCondition(FilterParser::buildFilter('location_id','==', $location_id));
|
||||
@ -185,7 +201,7 @@ final class OAuth2SummitLocationsApiController extends OAuth2ProtectedController
|
||||
$filter->addFilterCondition(FilterParser::buildFilter('published','==', 1));
|
||||
}
|
||||
|
||||
return $this->event_repository->getAllByPage(new PagingInfo($page, $per_page), $filter);
|
||||
return $this->event_repository->getAllByPage(new PagingInfo($page, $per_page), $filter, $order);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -20,6 +20,7 @@ use models\summit\ISummitRepository;
|
||||
use models\summit\Summit;
|
||||
use utils\Filter;
|
||||
use utils\FilterParser;
|
||||
use utils\Order;
|
||||
use utils\PagingInfo;
|
||||
use utils\PagingResponse;
|
||||
|
||||
@ -97,11 +98,12 @@ class RetrieveAllSummitEventsBySummitStrategy extends RetrieveSummitEventsStrate
|
||||
/**
|
||||
* @param PagingInfo $paging_info
|
||||
* @param Filter|null $filter
|
||||
* @param Order|null $order
|
||||
* @return PagingResponse
|
||||
*/
|
||||
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null)
|
||||
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
||||
{
|
||||
return $this->events_repository->getAllByPage($paging_info, $filter);
|
||||
return $this->events_repository->getAllByPage($paging_info, $filter, $order);
|
||||
}
|
||||
|
||||
}
|
@ -16,6 +16,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use models\summit\ISummitEventRepository;
|
||||
use utils\Filter;
|
||||
use utils\Order;
|
||||
use utils\PagingInfo;
|
||||
use utils\PagingResponse;
|
||||
|
||||
@ -42,11 +43,12 @@ class RetrieveAllSummitEventsStrategy extends RetrieveSummitEventsStrategy
|
||||
/**
|
||||
* @param PagingInfo $paging_info
|
||||
* @param Filter|null $filter
|
||||
* @param Order|null $order
|
||||
* @return PagingResponse
|
||||
*/
|
||||
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null)
|
||||
public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
||||
{
|
||||
return $this->event_repository->getAllByPage($paging_info, $filter);
|
||||
return $this->event_repository->getAllByPage($paging_info, $filter, $order);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,6 +40,4 @@ final class RetrievePublishedSummitEventsBySummitStrategy extends RetrieveAllSum
|
||||
$filter->addFilterCondition(FilterParser::buildFilter('published','==','1'));
|
||||
return $filter;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -13,6 +13,8 @@
|
||||
**/
|
||||
use models\exceptions\ValidationException;
|
||||
use utils\Filter;
|
||||
use utils\Order;
|
||||
use utils\OrderParser;
|
||||
use utils\PagingResponse;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Input;
|
||||
@ -59,7 +61,7 @@ abstract class RetrieveSummitEventsStrategy
|
||||
|
||||
return $this->retrieveEventsFromSource
|
||||
(
|
||||
new PagingInfo($page, $per_page), $this->buildFilter()
|
||||
new PagingInfo($page, $per_page), $this->buildFilter(), $this->buildOrder()
|
||||
);
|
||||
}
|
||||
|
||||
@ -73,12 +75,32 @@ abstract class RetrieveSummitEventsStrategy
|
||||
}
|
||||
return $filter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|Order
|
||||
*/
|
||||
protected function buildOrder(){
|
||||
$order = null;
|
||||
if (Input::has('order'))
|
||||
{
|
||||
$order = OrderParser::parse(Input::get('order'), array
|
||||
(
|
||||
'title',
|
||||
'start_date',
|
||||
'end_date',
|
||||
'id',
|
||||
'created',
|
||||
));
|
||||
}
|
||||
return $order;
|
||||
}
|
||||
/**
|
||||
* @param PagingInfo $paging_info
|
||||
* @param Filter|null $filter
|
||||
* @param Order|null $order
|
||||
* @return PagingResponse
|
||||
*/
|
||||
abstract public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null);
|
||||
abstract public function retrieveEventsFromSource(PagingInfo $paging_info, Filter $filter = null, Order $order = null);
|
||||
|
||||
/**
|
||||
* @return array
|
||||
|
@ -153,7 +153,7 @@ abstract class PresentationMaterial extends SilverstripeBaseModel
|
||||
protected $display_on_site;
|
||||
|
||||
/**
|
||||
* @ORM\Column(name="Order", type="integer")
|
||||
* @ORM\Column(name="`Order`", type="integer")
|
||||
* @var int
|
||||
*/
|
||||
protected $order;
|
||||
|
@ -293,7 +293,6 @@ class SummitEvent extends SilverstripeBaseModel
|
||||
*/
|
||||
protected $head_count;
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
use models\utils\IBaseRepository;
|
||||
use utils\Filter;
|
||||
use utils\Order;
|
||||
use utils\PagingInfo;
|
||||
use utils\PagingResponse;
|
||||
|
||||
@ -31,10 +32,11 @@ interface ISummitEventRepository extends IBaseRepository
|
||||
|
||||
/**
|
||||
* @param PagingInfo $paging_info
|
||||
* @param Filter $filter
|
||||
* @param Filter|null $filter
|
||||
* @param Order|null $order
|
||||
* @return PagingResponse
|
||||
*/
|
||||
public function getAllByPage(PagingInfo $paging_info, Filter $filter);
|
||||
public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null);
|
||||
|
||||
/**
|
||||
* @param int $event_id
|
||||
|
@ -19,6 +19,7 @@ use models\summit\SummitEvent;
|
||||
use repositories\SilverStripeDoctrineRepository;
|
||||
use utils\DoctrineJoinFilterMapping;
|
||||
use utils\Filter;
|
||||
use utils\Order;
|
||||
use utils\PagingInfo;
|
||||
use utils\PagingResponse;
|
||||
use Doctrine\ORM\Query\Expr\Join;
|
||||
@ -55,10 +56,11 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
|
||||
|
||||
/**
|
||||
* @param PagingInfo $paging_info
|
||||
* @param Filter $filter
|
||||
* @param Filter|null $filter
|
||||
* @param Order|null $order
|
||||
* @return PagingResponse
|
||||
*/
|
||||
public function getAllByPage(PagingInfo $paging_info, Filter $filter)
|
||||
public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
||||
{
|
||||
$class = count($filter->getFilter('speaker')) > 0? \models\summit\Presentation::class : \models\summit\SummitEvent::class;
|
||||
$query = $this->getEntityManager()->createQueryBuilder()
|
||||
@ -69,7 +71,7 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
|
||||
|
||||
$filter->apply2Query($query, array
|
||||
(
|
||||
'title' => 'e.title',
|
||||
'title' => 'e.title:json_string',
|
||||
'published' => 'e.published',
|
||||
'start_date' => 'e.start_date:datetime_epoch',
|
||||
'end_date' => 'e.end_date:datetime_epoch',
|
||||
@ -118,9 +120,23 @@ final class DoctrineSummitEventRepository extends SilverStripeDoctrineRepository
|
||||
));
|
||||
}
|
||||
|
||||
if (!is_null($order)) {
|
||||
|
||||
$order->apply2Query($query, array
|
||||
(
|
||||
'title' => 'e.title',
|
||||
'id' => 'e.id',
|
||||
'start_date' => 'e.start_date',
|
||||
'end_date' => 'e.end_date',
|
||||
'created' => 'e.created',
|
||||
));
|
||||
} else {
|
||||
//default order
|
||||
$query = $query->addOrderBy("e.start_date",'ASC');
|
||||
$query = $query->addOrderBy("e.end_date", 'ASC');
|
||||
}
|
||||
|
||||
$query= $query
|
||||
->addOrderBy("e.start_date",'ASC')
|
||||
->addOrderBy("e.end_date", 'ASC')
|
||||
->setFirstResult($paging_info->getOffset())
|
||||
->setMaxResults($paging_info->getPerPage());
|
||||
|
||||
|
@ -1660,8 +1660,8 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
|
||||
{
|
||||
$params = array
|
||||
(
|
||||
'id' => 6,
|
||||
'presentation_id' => 6838
|
||||
'id' => 7,
|
||||
'presentation_id' => 15404
|
||||
);
|
||||
|
||||
$headers = array
|
||||
@ -1672,8 +1672,10 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
|
||||
|
||||
$video_data = array
|
||||
(
|
||||
'you_tube_id' => 'nrGk0AuFd_9',
|
||||
'name' => 'Fostering Full Equality, Organized by the Women of OpenStack!',
|
||||
'you_tube_id' => 'cpHa7kSOur0',
|
||||
'name' => 'test video',
|
||||
'description' => 'test video',
|
||||
'display_on_site' => true,
|
||||
);
|
||||
|
||||
$response = $this->action
|
||||
@ -1755,4 +1757,75 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
|
||||
$this->assertTrue(!is_null($notifications));
|
||||
}
|
||||
|
||||
public function testGetAllScheduledEvents(){
|
||||
|
||||
$params = array
|
||||
(
|
||||
'id' => 7,
|
||||
'page' => 1,
|
||||
'per_page' => 10,
|
||||
'filter' => array
|
||||
(
|
||||
'title=@Lightning',
|
||||
),
|
||||
);
|
||||
|
||||
$headers = array
|
||||
(
|
||||
"HTTP_Authorization" => " Bearer " .$this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
);
|
||||
|
||||
$response = $this->action
|
||||
(
|
||||
"GET",
|
||||
"OAuth2SummitEventsApiController@getScheduledEvents",
|
||||
$params,
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(200);
|
||||
|
||||
$events = json_decode($content);
|
||||
$this->assertTrue(!is_null($events));
|
||||
}
|
||||
|
||||
public function testGetAllScheduledEventsUsingOrder(){
|
||||
|
||||
$params = array
|
||||
(
|
||||
'id' => 7,
|
||||
'page' => 1,
|
||||
'per_page' => 5,
|
||||
'filter' => '',
|
||||
'order' => '+title'
|
||||
);
|
||||
|
||||
$headers = array
|
||||
(
|
||||
"HTTP_Authorization" => " Bearer " .$this->access_token,
|
||||
"CONTENT_TYPE" => "application/json"
|
||||
);
|
||||
|
||||
$response = $this->action
|
||||
(
|
||||
"GET",
|
||||
"OAuth2SummitEventsApiController@getScheduledEvents",
|
||||
$params,
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
$headers
|
||||
);
|
||||
|
||||
$content = $response->getContent();
|
||||
$this->assertResponseStatus(200);
|
||||
|
||||
$events = json_decode($content);
|
||||
$this->assertTrue(!is_null($events));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user