Added featured speakers filter

Change-Id: Ib2beba7846da780529ac13f13da851e254582f58
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2020-10-30 12:58:47 -03:00
parent 86850f8cb4
commit 655256f9cd
5 changed files with 119 additions and 89 deletions

View File

@ -11,6 +11,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use App\Models\Foundation\Summit\Repositories\ISelectionPlanRepository;
use Exception;
use Illuminate\Support\Facades\Input;
@ -34,6 +35,7 @@ use services\model\ISummitService;
use utils\PagingInfo;
use Illuminate\Http\Request as LaravelRequest;
use utils\PagingResponse;
/**
* Class OAuth2SummitSpeakersApiController
* @package App\Http\Controllers
@ -135,26 +137,25 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
if (is_null($summit)) return $this->error404();
return $this->_getAll(
function(){
function () {
return [
'first_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
];
},
function(){
function () {
return [
'first_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
];
},
function()
{
function () {
return [
'first_name',
'last_name',
@ -162,15 +163,15 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
'email',
];
},
function($filter) use($summit){
function ($filter) use ($summit) {
return $filter;
},
function(){
function () {
return $this->serializer_type_selector->getSerializerType();
},
null,
null,
function ($page, $per_page, $filter, $order, $applyExtraFilters) use($summit) {
function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
return $this->speaker_repository->getSpeakersBySummit
(
$summit,
@ -197,30 +198,31 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
if (is_null($summit)) return $this->error404();
return $this->_getAll(
function(){
function () {
return [
'first_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
'event_start_date' => ['>', '<', '<=', '>=', '=='],
'event_end_date' => ['>', '<', '<=', '>=', '=='],
'event_end_date' => ['>', '<', '<=', '>=', '=='],
'featured' => ['=='],
];
},
function(){
function () {
return [
'first_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
'event_start_date' => 'sometimes|date_format:U',
'event_end_date' => 'sometimes|date_format:U',
'featured' => 'sometimes|required|string|in:true,false',
];
},
function()
{
function () {
return [
'first_name',
'last_name',
@ -228,15 +230,15 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
'email',
];
},
function($filter) use($summit){
function ($filter) use ($summit) {
return $filter;
},
function(){
function () {
return $this->serializer_type_selector->getSerializerType();
},
null,
null,
function ($page, $per_page, $filter, $order, $applyExtraFilters) use($summit) {
function ($page, $per_page, $filter, $order, $applyExtraFilters) use ($summit) {
return $this->speaker_repository->getSpeakersBySummitAndOnSchedule
(
$summit,
@ -260,26 +262,25 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
public function getAll()
{
return $this->_getAll(
function(){
function () {
return [
'first_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
'last_name' => ['=@', '=='],
'email' => ['=@', '=='],
'id' => ['=='],
'full_name' => ['=@', '=='],
];
},
function(){
function () {
return [
'first_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
'last_name' => 'sometimes|string',
'email' => 'sometimes|string',
'id' => 'sometimes|integer',
'full_name' => 'sometimes|string',
];
},
function()
{
function () {
return [
'first_name',
'last_name',
@ -287,15 +288,15 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
'email',
];
},
function($filter){
function ($filter) {
return $filter;
},
function(){
function () {
return $this->serializer_type_selector->getSerializerType();
},
null,
null,
function ($page, $per_page, $filter, $order, $applyExtraFilters) {
function ($page, $per_page, $filter, $order, $applyExtraFilters) {
return $this->speaker_repository->getAllByPage
(
new PagingInfo($page, $per_page),
@ -323,8 +324,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$current_member = $this->resource_server_context->getCurrentUser();
$serializer_type = SerializerRegistry::SerializerType_Public;
// if speaker profile belongs to current member
if (!is_null($current_member)){
if($speaker->getMemberId() == $current_member->getId())
if (!is_null($current_member)) {
if ($speaker->getMemberId() == $current_member->getId())
$serializer_type = SerializerRegistry::SerializerType_Private;
}
@ -355,7 +356,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $summit_id
* @return mixed
*/
public function getMySummitSpeaker($summit_id){
public function getMySummitSpeaker($summit_id)
{
try {
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
if (is_null($summit)) return $this->error404();
@ -375,7 +377,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
[
'summit_id' => $summit_id,
'published' => Request::input('published', false),
'summit' => $summit
'summit' => $summit
]
)
);
@ -513,8 +515,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$current_member = $this->resource_server_context->getCurrentUser();
$serializer_type = SerializerRegistry::SerializerType_Public;
// if speaker profile belongs to current member
if (!is_null($current_member)){
if($speaker->getMemberId() == $current_member->getId() || $speaker->canBeEditedBy($current_member))
if (!is_null($current_member)) {
if ($speaker->getMemberId() == $current_member->getId() || $speaker->canBeEditedBy($current_member))
$serializer_type = SerializerRegistry::SerializerType_Private;
}
@ -695,7 +697,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
}
}
public function addMySpeakerPhoto(LaravelRequest $request){
public function addMySpeakerPhoto(LaravelRequest $request)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -703,7 +706,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getByMember($current_member);
if (is_null($speaker)) return $this->error404();
return $this->addSpeakerPhoto($request, $speaker->getId());
return $this->addSpeakerPhoto($request, $speaker->getId());
} catch (ValidationException $ex1) {
Log::warning($ex1);
@ -838,7 +841,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getById($speaker_id);
if (is_null($speaker)) return $this->error404();
if(!$speaker->canBeEditedBy($current_member)){
if (!$speaker->canBeEditedBy($current_member)) {
return $this->error403();
}
@ -1040,7 +1043,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return mixed
*/
public function addSpeakerToMyPresentation($presentation_id, $speaker_id){
public function addSpeakerToMyPresentation($presentation_id, $speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1066,7 +1070,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return mixed
*/
public function addModeratorToMyPresentation($presentation_id, $speaker_id){
public function addModeratorToMyPresentation($presentation_id, $speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1092,7 +1097,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return mixed
*/
public function removeSpeakerFromMyPresentation($presentation_id, $speaker_id){
public function removeSpeakerFromMyPresentation($presentation_id, $speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1118,7 +1124,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return mixed
*/
public function removeModeratorFromMyPresentation($presentation_id, $speaker_id){
public function removeModeratorFromMyPresentation($presentation_id, $speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1143,7 +1150,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
public function requestSpeakerEditPermission($speaker_id){
public function requestSpeakerEditPermission($speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1170,7 +1178,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $speaker_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
public function getSpeakerEditPermission($speaker_id){
public function getSpeakerEditPermission($speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
if (is_null($current_member)) return $this->error403();
@ -1198,7 +1207,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $hash
* @return \Illuminate\Http\JsonResponse|mixed
*/
public function approveSpeakerEditPermission($speaker_id, $hash){
public function approveSpeakerEditPermission($speaker_id, $hash)
{
try {
$request = $this->service->approveSpeakerEditPermission($hash, $speaker_id);
return response()->view('speakers.edit_permissions.approved', [], 200);
@ -1219,7 +1229,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
* @param $hash
* @return \Illuminate\Http\JsonResponse|mixed
*/
public function declineSpeakerEditPermission($speaker_id, $hash){
public function declineSpeakerEditPermission($speaker_id, $hash)
{
try {
$request = $this->service->rejectSpeakerEditPermission($hash, $speaker_id);
@ -1251,7 +1262,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getById($speaker_id);
if (is_null($speaker)) return $this->error404();
if(!$speaker->canBeEditedBy($current_member)){
if (!$speaker->canBeEditedBy($current_member)) {
return $this->error403();
}
@ -1279,7 +1290,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
}
}
public function deleteSpeakerPhoto($speaker_id){
public function deleteSpeakerPhoto($speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
@ -1288,7 +1300,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getById($speaker_id);
if (is_null($speaker)) return $this->error404();
if(!$speaker->canBeEditedBy($current_member)){
if (!$speaker->canBeEditedBy($current_member)) {
return $this->error403();
}
@ -1311,7 +1323,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
}
}
public function addSpeakerBigPhoto(LaravelRequest $request, $speaker_id){
public function addSpeakerBigPhoto(LaravelRequest $request, $speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
@ -1320,7 +1333,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getById($speaker_id);
if (is_null($speaker)) return $this->error404();
if(!$speaker->canBeEditedBy($current_member)){
if (!$speaker->canBeEditedBy($current_member)) {
return $this->error403();
}
@ -1348,7 +1361,8 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
}
}
public function deleteSpeakerBigPhoto($speaker_id){
public function deleteSpeakerBigPhoto($speaker_id)
{
try {
$current_member = $this->resource_server_context->getCurrentUser();
@ -1357,7 +1371,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
$speaker = $this->speaker_repository->getById($speaker_id);
if (is_null($speaker)) return $this->error404();
if(!$speaker->canBeEditedBy($current_member)){
if (!$speaker->canBeEditedBy($current_member)) {
return $this->error403();
}

View File

@ -357,6 +357,7 @@ SQL;
'last_name' => 'LastName',
'email' => 'Email',
'id' => 'ID',
'featured' => 'Featured'
]);
if(!empty($where_conditions)) {
@ -375,6 +376,13 @@ SQL;
}
}
foreach ($bindings as $key => $value){
if($value == 'true')
$bindings[$key] = 1;
if($value == 'false')
$bindings[$key] = 0;
}
if(!is_null($order))
{
$extra_orders = $order->toRawSQL(array
@ -394,7 +402,8 @@ FROM (
IFNULL(S.FirstName, M.FirstName) AS FirstName,
IFNULL(S.LastName, M.Surname) AS LastName,
CONCAT(IFNULL(S.FirstName, M.FirstName), ' ', IFNULL(S.LastName, M.Surname)) AS FullName,
IFNULL(M.Email, R.Email) AS Email
IFNULL(M.Email, R.Email) AS Email,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
@ -411,7 +420,8 @@ FROM (
IFNULL(S.FirstName, M.FirstName) AS FirstName,
IFNULL(S.LastName, M.Surname) AS LastName,
CONCAT(IFNULL(S.FirstName, M.FirstName), ' ', IFNULL(S.LastName, M.Surname)) AS FullName,
IFNULL(M.Email, R.Email) AS Email
IFNULL(M.Email, R.Email) AS Email,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
@ -428,7 +438,8 @@ FROM (
IFNULL(S.FirstName, M.FirstName) AS FirstName,
IFNULL(S.LastName, M.Surname) AS LastName,
CONCAT(IFNULL(S.FirstName, M.FirstName), ' ', IFNULL(S.LastName, M.Surname)) AS FullName,
IFNULL(M.Email, R.Email) AS Email
IFNULL(M.Email, R.Email) AS Email,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
@ -446,9 +457,11 @@ SUMMIT_SPEAKERS
SQL;
$stm = $this->getEntityManager()->getConnection()->executeQuery($query_count, $bindings);
$stm = $this->getEntityManager()->getConnection()->prepare($query_count);
$stm->execute($bindings);
$res = $stm->fetchAll(\PDO::FETCH_COLUMN);
$total = intval($stm->fetchColumn(0));
$total = count($res) > 0 ? $res[0] : 0;
$bindings = array_merge( $bindings, array
(
@ -481,7 +494,8 @@ FROM (
IFNULL(M.Email,R.Email) AS Email,
S.PhotoID,
S.BigPhotoID,
R.ID AS RegistrationRequestID
R.ID AS RegistrationRequestID,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN File F ON F.ID = S.PhotoID
@ -517,7 +531,8 @@ FROM (
IFNULL(M.Email,R.Email) AS Email,
S.PhotoID,
S.BigPhotoID,
R.ID AS RegistrationRequestID
R.ID AS RegistrationRequestID,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
@ -552,7 +567,8 @@ FROM (
IFNULL(M.Email,R.Email) AS Email,
S.PhotoID,
S.BigPhotoID,
R.ID AS RegistrationRequestID
R.ID AS RegistrationRequestID,
EXISTS(SELECT 1 FROM Summit_FeaturedSpeakers WHERE Summit_FeaturedSpeakers.PresentationSpeakerID = S.ID AND Summit_FeaturedSpeakers.SummitID = {$summit->getId()}) AS Featured
FROM PresentationSpeaker S
LEFT JOIN Member M ON M.ID = S.MemberID
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID

View File

@ -46,8 +46,8 @@ abstract class BrowserKitTestCase extends BaseTestCase
*/
protected function prepareForTests()
{
Artisan::call('doctrine:migrations:migrate', ["--connection" => 'config']);
Artisan::call('doctrine:migrations:migrate', ["--connection" => 'model']);
// Artisan::call('doctrine:migrations:migrate', ["--connection" => 'config']);
// Artisan::call('doctrine:migrations:migrate', ["--connection" => 'model']);
//Mail::pretend(true);
$this->seed('TestSeeder');
}

View File

@ -91,11 +91,11 @@ trait InsertMemberTestData
*/
protected static function insertMemberTestData(string $current_group_slug){
DB::setDefaultConnection("model");
DB::table("Group_Members")->delete();
DB::table("Group")->delete();
DB::table("Member")->delete();
DB::table("PresentationSpeaker")->delete();
// DB::setDefaultConnection("model");
//DB::table("Group_Members")->delete();
//DB::table("Group")->delete();
//DB::table("Member")->delete();
//DB::table("PresentationSpeaker")->delete();
self::$em = Registry::getManager(SilverstripeBaseModel::EntityManager);
if (!self::$em ->isOpen()) {
@ -122,7 +122,7 @@ trait InsertMemberTestData
self::$member->setFirstName("Sebastian");
self::$member->setLastName("Marcet");
self::$member->setEmailVerified(true);
self::$member->setUserExternalId("1");
self::$member->setUserExternalId(mt_rand());
self::$member->add2Group(self::$group);
self::$member2 = new Member();
@ -131,7 +131,7 @@ trait InsertMemberTestData
self::$member2->setFirstName("Sebastian");
self::$member2->setLastName("Marcet Summit Admin");
self::$member2->setEmailVerified(true);
self::$member2->setUserExternalId("2");
self::$member2->setUserExternalId(mt_rand());
self::$member2->add2Group(self::$group2);

View File

@ -496,14 +496,14 @@ final class OAuth2SpeakersApiTest extends ProtectedApiTest
$this->assertTrue(!is_null($speakers));
}
public function testGetSpeakersOnSchedule($summit_id = 23)
public function testGetSpeakersOnSchedule($summit_id = 31)
{
$params = [
'id' => $summit_id,
'page' => 1,
'per_page' => 10,
'filter' => ['start_date>=1509753600','end_date<=1509839999']
'filter' => ['featured==true']
];
$headers = [