
Minimal data required title ( text ) abstract (text ) type_id (int) or type (string type name) track_id (int) or track ( string track name) Optional fields social_summary ( text ) attendees_expected_learnt ( text ) * provided only if event is presentation type location (id or name) level (text possible values [N/A, Beginner, Intermediate, Advanced]) * provided only if event is presentation type allow_feedback (int possible values [0,1]) to_record (int possible values [0,1]) tags ( repetitive group: values | delimited) sponsors ( repetitive group : names | delimited ) speakers ( repetitive group: emails | delimited ) start_date (mandatory if is_published is 1) Y-m-d H:i:s format ( summit time zone ) end_date (mandatory if is_published is 1) Y-m-d H:i:s format ( summit time zone ) is_published (int possible values [0,1]) , if this field is set 1 start_date and end_date are mandatories selection_plan (string selection plan name) * provided only if event is presentation type attendees_expected_learnt ( text , only presentations) problem_addressed ( text , only presentations) added endpoint POST /api/v1/summits/{summit_id}/events/csv multipart/form-data * Expected params file send_speaker_email Change-Id: I245d4e1a22e2c5e3c4120c559d0ecb4a5a021c78 Signed-off-by: smarcet <smarcet@gmail.com>
805 lines
25 KiB
PHP
805 lines
25 KiB
PHP
<?php namespace App\Repositories\Summit;
|
|
/**
|
|
* Copyright 2016 OpenStack Foundation
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
**/
|
|
use Doctrine\ORM\Query\ResultSetMapping;
|
|
use Doctrine\ORM\Query\ResultSetMappingBuilder;
|
|
use models\main\Member;
|
|
use models\summit\ISpeakerRepository;
|
|
use models\summit\PresentationSpeaker;
|
|
use models\summit\Summit;
|
|
use App\Repositories\SilverStripeDoctrineRepository;
|
|
use utils\Filter;
|
|
use utils\Order;
|
|
use utils\PagingInfo;
|
|
use utils\PagingResponse;
|
|
/**
|
|
* Class DoctrineSpeakerRepository
|
|
* @package App\Repositories\Summit
|
|
*/
|
|
final class DoctrineSpeakerRepository
|
|
extends SilverStripeDoctrineRepository
|
|
implements ISpeakerRepository
|
|
{
|
|
/**
|
|
* @param Summit $summit
|
|
* @param PagingInfo $paging_info
|
|
* @param Filter|null $filter
|
|
* @param Order|null $order
|
|
* @return PagingResponse
|
|
*/
|
|
public function getSpeakersBySummit(Summit $summit, PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
|
{
|
|
|
|
$extra_filters = '';
|
|
$extra_orders = '';
|
|
$bindings = [];
|
|
|
|
if(!is_null($filter))
|
|
{
|
|
$where_conditions = $filter->toRawSQL([
|
|
'full_name' => 'FullName',
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'email' => 'Email',
|
|
'id' => 'ID'
|
|
]);
|
|
if(!empty($where_conditions)) {
|
|
$extra_filters = " WHERE {$where_conditions}";
|
|
$bindings = array_merge($bindings, $filter->getSQLBindings());
|
|
}
|
|
}
|
|
|
|
if(!is_null($order))
|
|
{
|
|
$extra_orders = $order->toRawSQL(array
|
|
(
|
|
'id' => 'ID',
|
|
'email' => 'Email',
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'full_name' => 'FullName',
|
|
));
|
|
}
|
|
|
|
$query_count = <<<SQL
|
|
SELECT COUNT(DISTINCT(ID)) AS QTY
|
|
FROM (
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND PS.PresentationSpeakerID = S.ID
|
|
)
|
|
UNION
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID
|
|
)
|
|
UNION
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID
|
|
)
|
|
UNION
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT A.ID FROM PresentationSpeakerSummitAssistanceConfirmationRequest A
|
|
WHERE A.SummitID = {$summit->getId()} AND A.SpeakerID = S.ID
|
|
)
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters}
|
|
SQL;
|
|
|
|
|
|
$stm = $this->getEntityManager()->getConnection()->executeQuery($query_count, $bindings);
|
|
|
|
$total = intval($stm->fetchColumn(0));
|
|
|
|
$bindings = array_merge( $bindings, array
|
|
(
|
|
'per_page' => $paging_info->getPerPage(),
|
|
'offset' => $paging_info->getOffset(),
|
|
));
|
|
|
|
$query = <<<SQL
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN File F ON F.ID = S.PhotoID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND PS.PresentationSpeakerID = S.ID
|
|
)
|
|
UNION
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID
|
|
)
|
|
UNION
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID
|
|
)
|
|
UNION
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
IFNULL(S.FirstName, M.FirstName) AS FirstName,
|
|
IFNULL(S.LastName, M.Surname) AS LastName,
|
|
IFNULL(M.Email,R.Email) AS Email,
|
|
CONCAT(IFNULL(S.FirstName, M.FirstName), ' ', IFNULL(S.LastName, M.Surname)) AS FullName,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT A.ID FROM PresentationSpeakerSummitAssistanceConfirmationRequest A
|
|
WHERE A.SummitID = {$summit->getId()} AND A.SpeakerID = S.ID
|
|
)
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters} {$extra_orders} limit :per_page offset :offset;
|
|
SQL;
|
|
|
|
/*$rsm = new ResultSetMapping();
|
|
$rsm->addEntityResult(\models\summit\PresentationSpeaker::class, 's');
|
|
$rsm->addJoinedEntityResult(\models\main\File::class,'p', 's', 'photo');
|
|
$rsm->addJoinedEntityResult(\models\main\Member::class,'m', 's', 'member');
|
|
|
|
$rsm->addFieldResult('s', 'ID', 'id');
|
|
$rsm->addFieldResult('s', 'FirstName', 'first_name');
|
|
$rsm->addFieldResult('s', 'LastName', 'last_name');
|
|
$rsm->addFieldResult('s', 'Bio', 'last_name');
|
|
$rsm->addFieldResult('s', 'SpeakerTitle', 'title' );
|
|
$rsm->addFieldResult('p', 'PhotoID', 'id');
|
|
$rsm->addFieldResult('p', 'PhotoTitle', 'title');
|
|
$rsm->addFieldResult('p', 'PhotoFileName', 'filename');
|
|
$rsm->addFieldResult('p', 'PhotoName', 'name');
|
|
$rsm->addFieldResult('m', 'MemberID', 'id');*/
|
|
|
|
$rsm = new ResultSetMappingBuilder($this->getEntityManager());
|
|
$rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', ['Title' => 'SpeakerTitle']);
|
|
|
|
// build rsm here
|
|
$native_query = $this->getEntityManager()->createNativeQuery($query, $rsm);
|
|
|
|
foreach($bindings as $k => $v)
|
|
$native_query->setParameter($k, $v);
|
|
|
|
$speakers = $native_query->getResult();
|
|
|
|
$last_page = (int) ceil($total / $paging_info->getPerPage());
|
|
|
|
return new PagingResponse($total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $last_page, $speakers);
|
|
}
|
|
|
|
/**
|
|
* @param Summit $summit
|
|
* @param PagingInfo $paging_info
|
|
* @param Filter|null $filter
|
|
* @param Order|null $order
|
|
* @return PagingResponse
|
|
*/
|
|
public function getSpeakersBySummitAndOnSchedule(Summit $summit, PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
|
{
|
|
|
|
$extra_filters = '';
|
|
$extra_events_filters = '';
|
|
$extra_orders = '';
|
|
$bindings = [];
|
|
|
|
if(!is_null($filter))
|
|
{
|
|
$where_conditions = $filter->toRawSQL([
|
|
'full_name' => 'FullName',
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'email' => 'Email',
|
|
'id' => 'ID',
|
|
]);
|
|
|
|
if(!empty($where_conditions)) {
|
|
$extra_filters = " WHERE {$where_conditions}";
|
|
$bindings = array_merge($bindings, $filter->getSQLBindings());
|
|
}
|
|
|
|
$where_event_conditions = $filter->toRawSQL([
|
|
'event_start_date' => 'E.StartDate:datetime_epoch',
|
|
'event_end_date' => 'E.EndDate:datetime_epoch',
|
|
]);
|
|
|
|
if(!empty($where_event_conditions)) {
|
|
$extra_events_filters = " AND {$where_event_conditions}";
|
|
$bindings = array_merge($bindings, $filter->getSQLBindings());
|
|
}
|
|
}
|
|
|
|
if(!is_null($order))
|
|
{
|
|
$extra_orders = $order->toRawSQL(array
|
|
(
|
|
'id' => 'ID',
|
|
'email' => 'Email',
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'full_name' => 'FullName',
|
|
));
|
|
}
|
|
|
|
$query_count = <<<SQL
|
|
SELECT COUNT(DISTINCT(ID)) AS QTY
|
|
FROM (
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND PS.PresentationSpeakerID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
UNION
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
UNION
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters}
|
|
SQL;
|
|
|
|
|
|
$stm = $this->getEntityManager()->getConnection()->executeQuery($query_count, $bindings);
|
|
|
|
$total = intval($stm->fetchColumn(0));
|
|
|
|
$bindings = array_merge( $bindings, array
|
|
(
|
|
'per_page' => $paging_info->getPerPage(),
|
|
'offset' => $paging_info->getOffset(),
|
|
));
|
|
|
|
$query = <<<SQL
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN File F ON F.ID = S.PhotoID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND PS.PresentationSpeakerID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
UNION
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
UNION
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.MemberID,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
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,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
WHERE
|
|
EXISTS
|
|
(
|
|
SELECT E.ID FROM SummitEvent E
|
|
INNER JOIN Presentation P ON E.ID = P.ID
|
|
INNER JOIN Presentation_Speakers PS ON PS.PresentationID = P.ID
|
|
WHERE E.SummitID = {$summit->getId()} AND P.ModeratorID = S.ID AND E.Published = 1 {$extra_events_filters}
|
|
)
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters} {$extra_orders} limit :per_page offset :offset;
|
|
SQL;
|
|
|
|
/*$rsm = new ResultSetMapping();
|
|
$rsm->addEntityResult(\models\summit\PresentationSpeaker::class, 's');
|
|
$rsm->addJoinedEntityResult(\models\main\File::class,'p', 's', 'photo');
|
|
$rsm->addJoinedEntityResult(\models\main\Member::class,'m', 's', 'member');
|
|
|
|
$rsm->addFieldResult('s', 'ID', 'id');
|
|
$rsm->addFieldResult('s', 'FirstName', 'first_name');
|
|
$rsm->addFieldResult('s', 'LastName', 'last_name');
|
|
$rsm->addFieldResult('s', 'Bio', 'last_name');
|
|
$rsm->addFieldResult('s', 'SpeakerTitle', 'title' );
|
|
$rsm->addFieldResult('p', 'PhotoID', 'id');
|
|
$rsm->addFieldResult('p', 'PhotoTitle', 'title');
|
|
$rsm->addFieldResult('p', 'PhotoFileName', 'filename');
|
|
$rsm->addFieldResult('p', 'PhotoName', 'name');
|
|
$rsm->addFieldResult('m', 'MemberID', 'id');*/
|
|
|
|
$rsm = new ResultSetMappingBuilder($this->getEntityManager());
|
|
$rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', ['Title' => 'SpeakerTitle']);
|
|
|
|
// build rsm here
|
|
$native_query = $this->getEntityManager()->createNativeQuery($query, $rsm);
|
|
|
|
foreach($bindings as $k => $v)
|
|
$native_query->setParameter($k, $v);
|
|
|
|
$speakers = $native_query->getResult();
|
|
|
|
$last_page = (int) ceil($total / $paging_info->getPerPage());
|
|
|
|
return new PagingResponse($total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $last_page, $speakers);
|
|
}
|
|
|
|
/**
|
|
* @param PagingInfo $paging_info
|
|
* @param Filter|null $filter
|
|
* @param Order|null $order
|
|
* @return PagingResponse
|
|
*/
|
|
public function getAllByPage(PagingInfo $paging_info, Filter $filter = null, Order $order = null)
|
|
{
|
|
|
|
$extra_filters = '';
|
|
$extra_orders = '';
|
|
$bindings = [];
|
|
|
|
if(!is_null($filter))
|
|
{
|
|
$where_conditions = $filter->toRawSQL([
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'email' => 'Email',
|
|
'id' => 'ID',
|
|
'full_name' => "FullName",
|
|
]);
|
|
if(!empty($where_conditions)) {
|
|
$extra_filters = " WHERE {$where_conditions}";
|
|
$bindings = array_merge($bindings, $filter->getSQLBindings());
|
|
}
|
|
}
|
|
|
|
if(!is_null($order))
|
|
{
|
|
$extra_orders = $order->toRawSQL(array
|
|
(
|
|
'first_name' => 'FirstName',
|
|
'last_name' => 'LastName',
|
|
'email' => 'Email',
|
|
'id' => 'ID',
|
|
'full_name' => "FullName",
|
|
));
|
|
}
|
|
|
|
$query_count = <<<SQL
|
|
SELECT COUNT(DISTINCT(ID)) AS QTY
|
|
FROM (
|
|
SELECT S.ID,
|
|
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
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters}
|
|
SQL;
|
|
|
|
|
|
$stm = $this->getEntityManager()->getConnection()->executeQuery($query_count, $bindings);
|
|
|
|
$total = intval($stm->fetchColumn(0));
|
|
|
|
$bindings = array_merge( $bindings, array
|
|
(
|
|
'per_page' => $paging_info->getPerPage(),
|
|
'offset' => $paging_info->getOffset(),
|
|
));
|
|
|
|
$query = <<<SQL
|
|
SELECT *
|
|
FROM (
|
|
SELECT
|
|
S.ID,
|
|
S.ClassName,
|
|
S.Created,
|
|
S.LastEdited,
|
|
S.Title AS SpeakerTitle,
|
|
S.Bio,
|
|
S.IRCHandle,
|
|
S.AvailableForBureau,
|
|
S.FundedTravel,
|
|
S.Country,
|
|
S.WillingToTravel,
|
|
S.WillingToPresentVideo,
|
|
S.Notes,
|
|
S.TwitterName,
|
|
IFNULL(S.FirstName, M.FirstName) AS FirstName,
|
|
IFNULL(S.LastName, M.Surname) AS LastName,
|
|
IFNULL(M.Email,R.Email) AS Email,
|
|
CONCAT(IFNULL(S.FirstName, M.FirstName), ' ', IFNULL(S.LastName, M.Surname)) AS FullName,
|
|
S.PhotoID,
|
|
S.BigPhotoID,
|
|
M.ID AS MemberID,
|
|
R.ID AS RegistrationRequestID
|
|
FROM PresentationSpeaker S
|
|
LEFT JOIN Member M ON M.ID = S.MemberID
|
|
LEFT JOIN File F ON F.ID = S.PhotoID
|
|
LEFT JOIN SpeakerRegistrationRequest R ON R.SpeakerID = S.ID
|
|
)
|
|
SUMMIT_SPEAKERS
|
|
{$extra_filters} {$extra_orders} limit :per_page offset :offset;
|
|
SQL;
|
|
|
|
/*$rsm = new ResultSetMapping();
|
|
$rsm->addEntityResult(\models\summit\PresentationSpeaker::class, 's');
|
|
$rsm->addJoinedEntityResult(\models\main\File::class,'p', 's', 'photo');
|
|
$rsm->addJoinedEntityResult(\models\main\Member::class,'m', 's', 'member');
|
|
|
|
$rsm->addFieldResult('s', 'ID', 'id');
|
|
$rsm->addFieldResult('s', 'FirstName', 'first_name');
|
|
$rsm->addFieldResult('s', 'LastName', 'last_name');
|
|
$rsm->addFieldResult('s', 'Bio', 'last_name');
|
|
$rsm->addFieldResult('s', 'SpeakerTitle', 'title' );
|
|
$rsm->addFieldResult('p', 'PhotoID', 'id');
|
|
$rsm->addFieldResult('p', 'PhotoTitle', 'title');
|
|
$rsm->addFieldResult('p', 'PhotoFileName', 'filename');
|
|
$rsm->addFieldResult('p', 'PhotoName', 'name');
|
|
$rsm->addFieldResult('m', 'MemberID', 'id');*/
|
|
|
|
$rsm = new ResultSetMappingBuilder($this->getEntityManager());
|
|
$rsm->addRootEntityFromClassMetadata(\models\summit\PresentationSpeaker::class, 's', ['Title' => 'SpeakerTitle']);
|
|
|
|
// build rsm here
|
|
$native_query = $this->getEntityManager()->createNativeQuery($query, $rsm);
|
|
|
|
foreach($bindings as $k => $v)
|
|
$native_query->setParameter($k, $v);
|
|
|
|
$speakers = $native_query->getResult();
|
|
|
|
$last_page = (int) ceil($total / $paging_info->getPerPage());
|
|
|
|
return new PagingResponse($total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $last_page, $speakers);
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
protected function getBaseEntity()
|
|
{
|
|
return PresentationSpeaker::class;
|
|
}
|
|
|
|
/**
|
|
* @param Member $member
|
|
* @return PresentationSpeaker
|
|
*/
|
|
public function getByMember(Member $member)
|
|
{
|
|
return $this->getEntityManager()
|
|
->createQueryBuilder()
|
|
->select("s")
|
|
->from(PresentationSpeaker::class, "s")
|
|
->where("s.member = :member")
|
|
->setParameter("member", $member)
|
|
->setMaxResults(1)
|
|
->getQuery()
|
|
->getOneOrNullResult();
|
|
}
|
|
|
|
/**
|
|
* @param string $email
|
|
* @return PresentationSpeaker|null
|
|
*/
|
|
public function getByEmail(string $email):?PresentationSpeaker
|
|
{
|
|
return $this->getEntityManager()
|
|
->createQueryBuilder()
|
|
->select("s")
|
|
->from(PresentationSpeaker::class, "s")
|
|
->leftJoin("s.member", "m")
|
|
->leftJoin("s.registration_request", "r")
|
|
->where("m.email = :email1 or r.email = :email2")
|
|
->setParameter("email1", trim($email))
|
|
->setParameter("email2", trim($email))
|
|
->setMaxResults(1)
|
|
->getQuery()
|
|
->getOneOrNullResult();
|
|
}
|
|
|
|
|
|
/**
|
|
* @param string $fullname
|
|
* @return PresentationSpeaker|null
|
|
*/
|
|
public function getByFullName(string $fullname): ?PresentationSpeaker
|
|
{
|
|
$speakerFullNameParts = explode(" ", $fullname);
|
|
$speakerLastName = trim(trim(array_pop($speakerFullNameParts)));
|
|
$speakerFirstName = trim(implode(" ", $speakerFullNameParts));
|
|
|
|
return $this->getEntityManager()
|
|
->createQueryBuilder()
|
|
->select("e")
|
|
->from(PresentationSpeaker::class, "e")
|
|
->where("e.first_name = :first_name")
|
|
->andWhere("e.last_name = :last_name")
|
|
->setParameter("first_name",$speakerFirstName)
|
|
->setParameter("last_name", $speakerLastName)
|
|
->setMaxResults(1)
|
|
->getQuery()
|
|
->getOneOrNullResult();
|
|
}
|
|
} |