From a75258315c5e9a174f17e01d554124e52e29d4e7 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 21:23:31 +0000 Subject: [PATCH 01/15] Pass the meetup date to save to DB. --- app/src/Model/Event/Entity/Event.php | 18 ++++++++++++++++-- .../Model/Event/{Event.php => EventModel.php} | 2 +- app/src/Service/EventsService.php | 3 ++- 3 files changed, 19 insertions(+), 4 deletions(-) rename app/src/Model/Event/{Event.php => EventModel.php} (99%) diff --git a/app/src/Model/Event/Entity/Event.php b/app/src/Model/Event/Entity/Event.php index d4f1cde..bf3521f 100644 --- a/app/src/Model/Event/Entity/Event.php +++ b/app/src/Model/Event/Entity/Event.php @@ -20,7 +20,9 @@ class Event private $supporterID; - public function __construct($meetupID, $meetupVenueID, $joindinEventName, $joindinTalkID, $joindinURL, $speakerID, $supporterID) + private $meetupDate; + + public function __construct($meetupID, $meetupVenueID, $joindinEventName, $joindinTalkID, $joindinURL, $speakerID, $supporterID, \DateTime $meetupDate) { $this->meetupID = $meetupID; $this->meetupVenueID = $meetupVenueID; @@ -29,6 +31,7 @@ public function __construct($meetupID, $meetupVenueID, $joindinEventName, $joind $this->joindinURL = $joindinURL; $this->speakerID = $speakerID; $this->supporterID = $supporterID; + $this->meetupDate = $meetupDate; } /** @@ -112,6 +115,16 @@ public function getSupporterID() return $this->supporterID; } + /** + * @return \DateTime + */ + public function getMeetupDate() + { + return $this->meetupDate; + } + + + public static function create(array $params = []) : Event { $class = new self( @@ -121,7 +134,8 @@ public static function create(array $params = []) : Event $params['joindin_talk_id'] ?? null, $params['joindin_url'] ?? null, $params['speaker_id'] ?? null, - $params['supporter_id'] ?? null + $params['supporter_id'] ?? null, + $params['meetup_date'] ?? null ); $class->setId($params['id'] ?? null); diff --git a/app/src/Model/Event/Event.php b/app/src/Model/Event/EventModel.php similarity index 99% rename from app/src/Model/Event/Event.php rename to app/src/Model/Event/EventModel.php index cde2458..9826061 100644 --- a/app/src/Model/Event/Event.php +++ b/app/src/Model/Event/EventModel.php @@ -6,7 +6,7 @@ use PHPMinds\Model\Event\Entity\Venue; use PHPMinds\Model\Event\Entity\Talk; -class Event +class EventModel { private $name; diff --git a/app/src/Service/EventsService.php b/app/src/Service/EventsService.php index 8c8f430..be803e9 100644 --- a/app/src/Service/EventsService.php +++ b/app/src/Service/EventsService.php @@ -225,7 +225,8 @@ public function updateEvents($eventName = null) $this->joindinEventService->getJoindinEvent()->getTalkID(), $this->joindinEventService->getJoindinEvent()->getTalkUrl(), $this->event->getTalk()->getSpeaker()->getId(), - $this->event->getSupporter()->getId() + $this->event->getSupporter()->getId(), + $this->event->getDate() ); $this->eventManager->saveEvent($eventEntity); From d6668d0667658892f8d2923a66504240a794de0e Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 21:23:59 +0000 Subject: [PATCH 02/15] Pass the meetup date to save to DB. --- app/src/Repository/EventsRepository.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/Repository/EventsRepository.php b/app/src/Repository/EventsRepository.php index 8f18ca7..65e782b 100644 --- a/app/src/Repository/EventsRepository.php +++ b/app/src/Repository/EventsRepository.php @@ -19,7 +19,8 @@ class EventsRepository extends RepositoryAbstract 'joindin_talk_id', 'joindin_url', 'speaker_id', - 'supporter_id' + 'supporter_id', + 'meetup_date' ]; /** @@ -32,8 +33,8 @@ public function save(Event $event) return $this->update($event); } - $sql = "INSERT INTO {$this->table} (meetup_id, meetup_venue_id, joindin_event_name, joindin_talk_id, joindin_url, speaker_id, supporter_id) VALUES (" - . ":meetup_id, :meetup_venue_id, :joindin_event_name, :joindin_talk_id, :joindin_url, :speaker_id, :supporter_id" + $sql = "INSERT INTO {$this->table} (meetup_id, meetup_venue_id, joindin_event_name, joindin_talk_id, joindin_url, speaker_id, supporter_id, meetup_date) VALUES (" + . ":meetup_id, :meetup_venue_id, :joindin_event_name, :joindin_talk_id, :joindin_url, :speaker_id, :supporter_id, :meetup_date" . ")"; $stmt = $this->db->prepare($sql); @@ -44,6 +45,7 @@ public function save(Event $event) $stmt->bindParam(":joindin_url", $event->getJoindinURL(), \PDO::PARAM_STR); $stmt->bindParam(":speaker_id", $event->getSpeakerID(), \PDO::PARAM_INT); $stmt->bindParam(":supporter_id", $event->getSupporterID(), \PDO::PARAM_INT); + $stmt->bindParam(":meetup_date", $event->getMeetupDate()->format('Y-m-d H:i:s'), \PDO::PARAM_STR); $stmt->execute(); @@ -56,7 +58,7 @@ public function update(Event $event) $sql = 'UPDATE ' . $this->table . ' SET meetup_venue_id = :meetup_venue_id, joindin_event_name = :joindin_event_name,' . ' joindin_talk_id = :joindin_talk_id, joindin_url = :joindin_url, speaker_id = :speaker_id,' - . ' supporter_id = :supporter_id' + . ' supporter_id = :supporter_id, meetup_date = :meetup_date' . ' WHERE meetup_id = :meetup_id'; $stmt = $this->db->prepare($sql); @@ -67,6 +69,7 @@ public function update(Event $event) $stmt->bindParam(":joindin_url", $event->getJoindinURL(), \PDO::PARAM_STR); $stmt->bindParam(":speaker_id", $event->getSpeakerID(), \PDO::PARAM_INT); $stmt->bindParam(":supporter_id", $event->getSupporterID(), \PDO::PARAM_INT); + $stmt->bindParam(":meetup_date", $event->getMeetupDate()->format('Y-m-d H:i:s'), \PDO::PARAM_STR); return $stmt->execute(); From 8b259e35cc04c4f677d9121173a7df3b88048e59 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 21:25:04 +0000 Subject: [PATCH 03/15] Return latest event as an object combining meetup and local info. --- app/src/Service/EventsService.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/Service/EventsService.php b/app/src/Service/EventsService.php index be803e9..94b456c 100644 --- a/app/src/Service/EventsService.php +++ b/app/src/Service/EventsService.php @@ -53,11 +53,14 @@ public function getMeetupEvent() } /** - * @return array + * @return \PHPMinds\Model\Event\EventModel */ public function getLatestEvent() { - return $this->meetupService->getLatestEvent(); + $event = $this->meetupService->getLatestEvent(); + $eventInfo = $this->eventManager->getDetailsByMeetupID($event['id']); + + return EventFactory::getMergedFromArrays($event, $eventInfo[0]); } /** From 806741f4516fcd684a019dd9d6d1a7d28297de34 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 21:57:20 +0000 Subject: [PATCH 04/15] Get all event details - keyed on meetup id. --- app/src/Repository/EventsRepository.php | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/app/src/Repository/EventsRepository.php b/app/src/Repository/EventsRepository.php index 65e782b..31d28fa 100644 --- a/app/src/Repository/EventsRepository.php +++ b/app/src/Repository/EventsRepository.php @@ -104,6 +104,43 @@ public function getByMeetupID($meetupID) return $stmt->fetchAll(); } + public function getAllEventDetails() + { + $aliasedCols = $this->columns; + + array_walk($aliasedCols, function (&$value, $key, $alias) { + $value = $alias . '.' . $value; + }, 'ev'); + + + $sql = 'SELECT ' . implode(', ', $aliasedCols) + . ', sp.first_name, sp.last_name, sp.email, sp.twitter, sp.avatar' + . ', supp.name AS supporter_name, supp.url AS supporter_url, supp.twitter AS supporter_twitter' + . ', supp.email AS supporter_email, supp.logo AS supporter_logo' + . " FROM {$this->table} AS ev" + . " LEFT JOIN `speakers` AS sp ON sp.id = ev.speaker_id" + . " LEFT JOIN `supporters` AS supp ON supp.id = ev.supporter_id"; + + + $stmt = $this->db->prepare($sql); + + $stmt->execute(); + $stmt->setFetchMode(\PDO::FETCH_ASSOC); + + $events = $stmt->fetchAll(); + + $result = array_reduce($events, function($carry, $item){ + if (is_object($item)) { + $carry[$item->meetup_id] = $item; + } else { + $carry[$item['meetup_id']] = $item; + } + return $carry; + }); + + return $result; + } + public function eventExists($eventName) { $sql = 'SELECT COUNT(*)' From a0f1abfd7fc9b0e9f45dce91e7e8ac554696ecd8 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 22:00:04 +0000 Subject: [PATCH 05/15] Always expecting an array. --- app/src/Repository/EventsRepository.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/Repository/EventsRepository.php b/app/src/Repository/EventsRepository.php index 31d28fa..80f39e6 100644 --- a/app/src/Repository/EventsRepository.php +++ b/app/src/Repository/EventsRepository.php @@ -104,6 +104,9 @@ public function getByMeetupID($meetupID) return $stmt->fetchAll(); } + /** + * @return array + */ public function getAllEventDetails() { $aliasedCols = $this->columns; @@ -130,11 +133,7 @@ public function getAllEventDetails() $events = $stmt->fetchAll(); $result = array_reduce($events, function($carry, $item){ - if (is_object($item)) { - $carry[$item->meetup_id] = $item; - } else { - $carry[$item['meetup_id']] = $item; - } + $carry[$item['meetup_id']] = $item; return $carry; }); From 8fb1315373f3270b24cac4a2724765325fbac95f Mon Sep 17 00:00:00 2001 From: Shaun Hare Date: Mon, 4 Jan 2016 23:00:53 +0000 Subject: [PATCH 06/15] DVO Media Support attribution --- app/src/Service/JoindinService.php | 2 + .../content/supporters-content-dvo.md | 2 + .../content/supporters-content-you.md | 1 - app/templates/content/supporters-content.md | 2 +- app/templates/home.twig | 6 +- public/imgs/dvomedia-logo.svg | 444 ++++++++++++++++++ 6 files changed, 452 insertions(+), 5 deletions(-) create mode 100644 app/templates/content/supporters-content-dvo.md delete mode 100644 app/templates/content/supporters-content-you.md create mode 100644 public/imgs/dvomedia-logo.svg diff --git a/app/src/Service/JoindinService.php b/app/src/Service/JoindinService.php index 96f2fc9..885b7ae 100644 --- a/app/src/Service/JoindinService.php +++ b/app/src/Service/JoindinService.php @@ -134,4 +134,6 @@ public function areEventsApproved(array &$events) return $found; } + + } \ No newline at end of file diff --git a/app/templates/content/supporters-content-dvo.md b/app/templates/content/supporters-content-dvo.md new file mode 100644 index 0000000..6330e61 --- /dev/null +++ b/app/templates/content/supporters-content-dvo.md @@ -0,0 +1,2 @@ +DVO Media has expertise in enterprise web development. +Working either from their office, or on-site to suit clients' needs. diff --git a/app/templates/content/supporters-content-you.md b/app/templates/content/supporters-content-you.md deleted file mode 100644 index f121f82..0000000 --- a/app/templates/content/supporters-content-you.md +++ /dev/null @@ -1 +0,0 @@ -Why not consider supporting our events. diff --git a/app/templates/content/supporters-content.md b/app/templates/content/supporters-content.md index 3fb5cc1..0171167 100644 --- a/app/templates/content/supporters-content.md +++ b/app/templates/content/supporters-content.md @@ -1,3 +1,3 @@ Without our supporters we cannot bring you the great content we do, so we would like to thank those below - who we are pleased to say help us with our location, meet-up drinks and costs of the event. If your interested + who we are pleased to say help us with our location, meet-up drinks,food and costs of the event. If your interested in supporting our event please get in contact. \ No newline at end of file diff --git a/app/templates/home.twig b/app/templates/home.twig index 3c8806c..523dc0b 100644 --- a/app/templates/home.twig +++ b/app/templates/home.twig @@ -79,10 +79,10 @@
- support us + DVO Media Ltd
-

Your Logo here

- {{ "supporters-content-you" | content | raw }} +

DVO Media

+ {{ "supporters-content-dvo" | content | raw }}
diff --git a/public/imgs/dvomedia-logo.svg b/public/imgs/dvomedia-logo.svg new file mode 100644 index 0000000..b446034 --- /dev/null +++ b/public/imgs/dvomedia-logo.svg @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + From 7403deca32b8fa87a7e97a6819d3bbdf78553cd9 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:02:37 +0000 Subject: [PATCH 07/15] Merge meetup formatted response and event details from db to an EventModel object. --- app/src/Factory/EventFactory.php | 49 ++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/app/src/Factory/EventFactory.php b/app/src/Factory/EventFactory.php index c114748..f91137a 100644 --- a/app/src/Factory/EventFactory.php +++ b/app/src/Factory/EventFactory.php @@ -2,8 +2,13 @@ namespace PHPMinds\Factory; +use PHPMinds\Model\Email; +use PHPMinds\Model\Event\Entity\Speaker; +use PHPMinds\Model\Event\Entity\Supporter; use PHPMinds\Model\Event\Entity\Talk; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\Entity\Venue; +use PHPMinds\Model\Event\EventModel; +use PHPMinds\Model\Twitter; use Slim\Http\Request; class EventFactory @@ -16,7 +21,7 @@ public static function getEvent($talkTitle, $talkDescription, $date, $speaker, $ $speaker ); - $event = new Event( + $event = new EventModel( $talk, $date, $venue, @@ -28,4 +33,42 @@ public static function getEvent($talkTitle, $talkDescription, $date, $speaker, $ return $event; } -} \ No newline at end of file + + public static function getMergedFromArrays(array $meetupEvent = [], array $dbEvent = []) + { + $speaker = new Speaker( + $dbEvent['first_name'], $dbEvent['last_name'], + new Email($dbEvent['email']), + new Twitter($dbEvent['twitter']), + $dbEvent['avatar'] + ); + + + $talk = new Talk($meetupEvent['subject'], $meetupEvent['description'], $speaker); + + $venue = new Venue($meetupEvent['venue_name'], $meetupEvent['venue_address']); + + $date = \DateTime::createFromFormat('F jS Y', $meetupEvent['date']); + + $supporter = new Supporter( + $dbEvent['supporter_name'], $dbEvent['supporter_url'], + new Twitter($dbEvent['supporter_twitter']), + new Email($dbEvent['supporter_email']), + $dbEvent['supporter_logo'] + ); + + $event = new EventModel( + $talk, + $date, + $venue, + $supporter + ); + + $event->setName($meetupEvent['group']); + $event->setMindsUrl($meetupEvent['minds_url']); + $event->setMeetupID($meetupEvent['id']); + $event->setMeetupURL($meetupEvent['event_url']); + + return $event; + } +} From afd8e14382aa3e44aeeb43d0172c29e24be88a59 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:05:20 +0000 Subject: [PATCH 08/15] Get events as event model objects. --- app/src/Model/Event/EventManager.php | 8 ++++ app/src/Model/Event/EventModel.php | 70 ++++++++++++++++++++++++++++ app/src/Service/EventsService.php | 27 ++++++----- 3 files changed, 94 insertions(+), 11 deletions(-) diff --git a/app/src/Model/Event/EventManager.php b/app/src/Model/Event/EventManager.php index dce209f..cbcc27a 100644 --- a/app/src/Model/Event/EventManager.php +++ b/app/src/Model/Event/EventManager.php @@ -76,6 +76,14 @@ public function getDetailsByMeetupID($meetupID) return $this->eventsRepo->getByMeetupID($meetupID); } + /** + * @return mixed + */ + public function getAllEventDetails() + { + return $this->eventsRepo->getAllEventDetails(); + } + /** * @param EventEntity $event */ diff --git a/app/src/Model/Event/EventModel.php b/app/src/Model/Event/EventModel.php index 9826061..fbbe54b 100644 --- a/app/src/Model/Event/EventModel.php +++ b/app/src/Model/Event/EventModel.php @@ -31,6 +31,20 @@ class EventModel */ private $supporter; + /** + * @var string + */ + private $mindsUrl; + + /** + * @var + */ + private $meetupID; + + /** + * @var + */ + private $meetupURL; public function __construct(Talk $talk, \DateTime $date, Venue $venue, Supporter $supporter) { @@ -93,6 +107,14 @@ public function getEndDate() return $this->date->add($this->talk->getDuration()); } + /** + * @return string + */ + public function getDateTimeAsString() + { + return $this->date->format('F jS Y'); + } + /** * @return Venue */ @@ -108,4 +130,52 @@ public function getSupporter() : Supporter { return $this->supporter; } + + /** + * @return string + */ + public function getMindsUrl() + { + return $this->mindsUrl; + } + + /** + * @param string $mindsUrl + */ + public function setMindsUrl($mindsUrl) + { + $this->mindsUrl = $mindsUrl; + } + + /** + * @return mixed + */ + public function getMeetupID() + { + return $this->meetupID; + } + + /** + * @param mixed $meetupID + */ + public function setMeetupID($meetupID) + { + $this->meetupID = $meetupID; + } + + /** + * @return mixed + */ + public function getMeetupURL() + { + return $this->meetupURL; + } + + /** + * @param mixed $meetupURL + */ + public function setMeetupURL($meetupURL) + { + $this->meetupURL = $meetupURL; + } } \ No newline at end of file diff --git a/app/src/Service/EventsService.php b/app/src/Service/EventsService.php index 94b456c..6dfd897 100644 --- a/app/src/Service/EventsService.php +++ b/app/src/Service/EventsService.php @@ -2,9 +2,10 @@ namespace PHPMinds\Service; +use PHPMinds\Factory\EventFactory; use PHPMinds\Model\Event\Entity\Speaker; use PHPMinds\Model\Event\Entity\Talk; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Model\Event\EventManager; use PHPMinds\Model\MeetupEvent; @@ -27,7 +28,7 @@ class EventsService protected $joindinEventService; /** - * @var Event + * @var EventModel */ protected $event; @@ -65,21 +66,25 @@ public function getLatestEvent() /** * Get all events except for latest. - * @return array + * @return array of \PHPMinds\Model\Event\EventModel */ public function getPastEvents() { - return $this->meetupService->getPastEvents(); + return $this->meetupService->getPastEvents( + $this->eventManager->getAllEventDetails() + ); } /** * @param $eventID - * @return array + * @return \PHPMinds\Model\Event\EventModel */ public function getEventById($eventID) { - return $this->meetupService->getEventById($eventID); + $event = $this->meetupService->getEventById($eventID); + $eventInfo = $this->eventManager->getDetailsByMeetupID($event['id']); + return EventFactory::getMergedFromArrays($event, $eventInfo[0]); } /** @@ -169,13 +174,13 @@ public function getVenueById($venueID) } /** - * @param Event $event + * @param EventModel $event * @param $userID * @param null $meetupID * @return array * @throws \Exception */ - public function createMainEvents(Event $event, $userID, $meetupID = null) + public function createMainEvents(EventModel $event, $userID, $meetupID = null) { $this->createEvent($event); @@ -203,10 +208,10 @@ public function createMainEvents(Event $event, $userID, $meetupID = null) } /** - * @param Event $event + * @param EventModel $event * @return bool */ - public function createEvent(Event $event) + public function createEvent(EventModel $event) { $this->event = $event; } @@ -309,7 +314,7 @@ public function manageApprovedEvents($userID) 'duration' => 'PT2H' // default to 2 hours ]); - $this->event = new Event( + $this->event = new EventModel( $talk, \DateTime::createFromFormat( "F jS Y g:ia", From abb6cb94be7f2284cef1b43348e8fe7b7d364319 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:07:03 +0000 Subject: [PATCH 09/15] Accessing events as an object in the home action. --- app/src/Action/HomeAction.php | 2 +- app/templates/home.twig | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/Action/HomeAction.php b/app/src/Action/HomeAction.php index 4c40f42..866efd2 100644 --- a/app/src/Action/HomeAction.php +++ b/app/src/Action/HomeAction.php @@ -55,7 +55,7 @@ public function dispatch($request, $response, $args) - $resWithETag = $this->cache->withETag($response, $event['id']); + $resWithETag = $this->cache->withETag($response, $event->getMeetupID()); $this->view->render($response, 'home.twig', ['event' => $event,'previousEvents'=>$previousEvents]); return $resWithETag; diff --git a/app/templates/home.twig b/app/templates/home.twig index 3c8806c..700b5d2 100644 --- a/app/templates/home.twig +++ b/app/templates/home.twig @@ -10,14 +10,14 @@
-

{{ event.subject }}

-

on {{ event.date_time }}

+

{{ event.getTalk().getTitle() }}

+

on {{ event.getDateTimeAsString }} by {{ event.getTalk().getSpeaker().getFirstName() }} {{ event.getTalk().getSpeaker().getLastName() }} ( {{ event.getTalk().getSpeaker().getTwitter() }} )

-

{{ event.description | raw }}

-

RSVP

+

RSVP

@@ -33,7 +33,7 @@ From 72b3b970fd3fe5c1a1cf431a4437c9a3e7f00f0a Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:07:50 +0000 Subject: [PATCH 10/15] Accessing events as an object in the past events view. --- app/src/Action/PastEventsAction.php | 1 + app/templates/event.twig | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/Action/PastEventsAction.php b/app/src/Action/PastEventsAction.php index 4381be3..1a06c6a 100644 --- a/app/src/Action/PastEventsAction.php +++ b/app/src/Action/PastEventsAction.php @@ -61,6 +61,7 @@ public function eventByYearMonth(Request $request, Response $response, $args) $eventMeta = $this->eventManager->getByYearMonth($year,$month); $event = $this->eventService->getEventById($eventMeta[0]['meetup_id']); + $resWithETag = $this->cache->withETag($response, $eventMeta[0]['meetup_id']); $previousEvents= $this->eventService->getPastEvents(); diff --git a/app/templates/event.twig b/app/templates/event.twig index 3fd4b0f..11644a3 100644 --- a/app/templates/event.twig +++ b/app/templates/event.twig @@ -3,11 +3,12 @@
-

{{ event.date_time }} saw

-

{{ event.subject }}

+

{{ event.getDateTimeAsString }} saw

+

{{ event.getTalk().getTitle() }}

+

by {{ event.getTalk().getSpeaker().getFirstName() }} {{ event.getTalk().getSpeaker().getLastName() }} ( {{ event.getTalk().getSpeaker().getTwitter() }} )

-

{{ event.description | raw }}

Give Feedback

@@ -23,7 +24,7 @@ From b7d4cefad676e70cac4c6053f7884052409d9aff Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:08:33 +0000 Subject: [PATCH 11/15] Key meetup id on default getAll method. --- app/src/Repository/RepositoryAbstract.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/Repository/RepositoryAbstract.php b/app/src/Repository/RepositoryAbstract.php index ce08aa8..5a94b12 100644 --- a/app/src/Repository/RepositoryAbstract.php +++ b/app/src/Repository/RepositoryAbstract.php @@ -45,6 +45,16 @@ public function getAll($returnType = \PDO::FETCH_OBJ) $sql = "SELECT {$this->getColumns()} ". "FROM {$this->table} "; - return $this->db->query($sql)->fetchAll($returnType); + $events = $this->db->query($sql)->fetchAll($returnType); + $result = array_reduce($events, function($carry, $item){ + if (is_object($item)) { + $carry[$item->meetup_id] = $item; + } else { + $carry[$item['meetup_id']] = $item; + } + return $carry; + }); + + return $result; } } From 7ba5e8b546b03cd8c0103206e455add3c3c91056 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:09:32 +0000 Subject: [PATCH 12/15] [Refactor] Changed name of Event to EventModel for more readability. --- app/src/Model/JoindinEvent.php | 10 +++++----- app/src/Model/MeetupEvent.php | 14 +++++++------ app/src/Service/JoindinService.php | 12 ++++++------ app/src/Service/MeetupService.php | 25 +++++++++++++++++------- tests/phpunit/Helper.php | 4 ++-- tests/phpunit/Model/JoindinEventTest.php | 4 ++-- tests/phpunit/Model/MeetupEventTest.php | 4 ++-- tests/phpunit/Service/EventsService.php | 4 ++-- 8 files changed, 45 insertions(+), 32 deletions(-) diff --git a/app/src/Model/JoindinEvent.php b/app/src/Model/JoindinEvent.php index 0448a11..49ebcc8 100644 --- a/app/src/Model/JoindinEvent.php +++ b/app/src/Model/JoindinEvent.php @@ -3,7 +3,7 @@ namespace PHPMinds\Model; use PHPMinds\Config\JoindinConfig; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Repository\FileRepository; class JoindinEvent @@ -96,10 +96,10 @@ public function getUrl($action = 'events', $end = '/') } /** - * @param Event $event + * @param EventModel $event * @return array */ - public function getCreateEventPayload(Event $event) + public function getCreateEventPayload(EventModel $event) { return [ 'name' => $event->getName(), @@ -113,11 +113,11 @@ public function getCreateEventPayload(Event $event) } /** - * @param Event $event + * @param EventModel $event * @param string $language * @return array */ - public function getCreateEventTitlePayload(Event $event, $language = 'English - UK') + public function getCreateEventTitlePayload(EventModel $event, $language = 'English - UK') { $speakers = [$event->getTalk()->getSpeaker()->getFirstName() . ' ' . $event->getTalk()->getSpeaker()->getLastName()]; diff --git a/app/src/Model/MeetupEvent.php b/app/src/Model/MeetupEvent.php index 35eec63..2ba9c9a 100644 --- a/app/src/Model/MeetupEvent.php +++ b/app/src/Model/MeetupEvent.php @@ -5,7 +5,7 @@ use PHPMinds\Config\MeetupConfig; use PHPMinds\Model\Event\Entity\Talk; use PHPMinds\Model\Event\Entity\Venue; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; class MeetupEvent { @@ -110,17 +110,19 @@ public function formatResponse(array $event = []) 'time' => $eventTime, 'location' => $eventLocation, 'venue_id' => $venue['id'] ?? '', - 'event_url' => $eventUrl, - 'description' => $eventDescription, - 'minds_url'=>$mindsUrl + 'venue_name' => $venue['name'] ?? '', + 'venue_address' => $venue['address_1'] ?? '', + 'event_url' => $eventUrl, + 'description' => $eventDescription, + 'minds_url' => $mindsUrl ]; } /** - * @param Event $event + * @param EventModel $event * @return array */ - public function getCreateEventPayload(Event $event) + public function getCreateEventPayload(EventModel $event) { // x-www-form-urlencoded // have not tried using json diff --git a/app/src/Service/JoindinService.php b/app/src/Service/JoindinService.php index 96f2fc9..5219703 100644 --- a/app/src/Service/JoindinService.php +++ b/app/src/Service/JoindinService.php @@ -3,7 +3,7 @@ namespace PHPMinds\Service; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Model\JoindinEvent; class JoindinService @@ -20,7 +20,7 @@ class JoindinService protected $joindinEvent; /** - * @var Event + * @var EventModel */ private $event; @@ -32,9 +32,9 @@ public function __construct($httpClient, JoindinEvent $joindinEvent) } /** - * @param Event $event + * @param EventModel $event */ - public function setEvent(Event $event) + public function setEvent(EventModel $event) { $this->event = $event; } @@ -65,12 +65,12 @@ public function createEvent($userID) } /** - * @param Event $event + * @param EventModel $event * @param $userID * @param string $language * @return \Psr\Http\Message\ResponseInterface */ - public function createTalk(Event $event, $userID, $language = 'English - UK') + public function createTalk(EventModel $event, $userID, $language = 'English - UK') { $response = $this->httpClient->post( $this->joindinEvent->getUrl('events/' . $this->joindinEvent->getJoindinEventID() .'/talks'), diff --git a/app/src/Service/MeetupService.php b/app/src/Service/MeetupService.php index 46e873d..a501c19 100644 --- a/app/src/Service/MeetupService.php +++ b/app/src/Service/MeetupService.php @@ -5,8 +5,9 @@ use DMS\Service\Meetup\MeetupKeyAuthClient; use PHPMinds\Config\MeetupConfig; +use PHPMinds\Factory\EventFactory; use PHPMinds\Model\Event\Entity\Venue; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Model\MeetupEvent; class MeetupService @@ -76,23 +77,33 @@ public function getLatestEvent() * get all events apart form last one in array * @return array */ - public function getPastEvents() + public function getPastEvents($savedEvents = null) { $pastEvents = []; $events = $this->getEvents(['status' => 'past']); foreach($events as $event){ - $pastEvents[] = $this->meetupEvent->formatResponse($event); - + if (!is_null($savedEvents)) { + if (isset($savedEvents[$event['id']])) { + + $pastEvents[] = EventFactory::getMergedFromArrays( + $this->meetupEvent->formatResponse($event), + $savedEvents[$event['id']] + ); + } + } else { + $pastEvents[] = $this->meetupEvent->formatResponse($event); + } } - return $pastEvents ?? []; + + return $pastEvents; } /** - * @param Event $event + * @param EventModel $event * @return \Psr\Http\Message\ResponseInterface */ - public function createMeetup(Event $event) + public function createMeetup(EventModel $event) { $eventArgs = array_merge([ 'group_urlname' => $this->config->groupUrlName], diff --git a/tests/phpunit/Helper.php b/tests/phpunit/Helper.php index 1fca2c0..517ba69 100644 --- a/tests/phpunit/Helper.php +++ b/tests/phpunit/Helper.php @@ -8,7 +8,7 @@ use PHPMinds\Model\Event\Entity\Supporter; use PHPMinds\Model\Event\Entity\Talk; use PHPMinds\Model\Event\Entity\Venue; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Model\Twitter; class Helper extends \PHPUnit_Framework_TestCase @@ -72,7 +72,7 @@ function(){ $supporter = new Supporter('a big fan', 'youareawso.me', $twitter, $email, 'http://nolo.go'); - return new Event( + return new EventModel( $talk, \DateTime::createFromFormat( "d/m/Y H:i", diff --git a/tests/phpunit/Model/JoindinEventTest.php b/tests/phpunit/Model/JoindinEventTest.php index 8aa1e70..ebcb1b1 100644 --- a/tests/phpunit/Model/JoindinEventTest.php +++ b/tests/phpunit/Model/JoindinEventTest.php @@ -4,7 +4,7 @@ use PHPMinds\Model\JoindinEvent; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; class JoindinEventTest extends \PHPMinds\Tests\Helper @@ -15,7 +15,7 @@ class JoindinEventTest extends \PHPMinds\Tests\Helper protected $joindinEvent; /** - * @var Event + * @var EventModel */ protected $event; diff --git a/tests/phpunit/Model/MeetupEventTest.php b/tests/phpunit/Model/MeetupEventTest.php index 81e054b..e448229 100644 --- a/tests/phpunit/Model/MeetupEventTest.php +++ b/tests/phpunit/Model/MeetupEventTest.php @@ -2,7 +2,7 @@ namespace PHPMinds\Tests\Model; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; class MeetupEventTest extends \PHPMinds\Tests\Helper @@ -14,7 +14,7 @@ class MeetupEventTest extends \PHPMinds\Tests\Helper protected $meetupEvent; /** - * @var Event + * @var EventModel */ protected $event; diff --git a/tests/phpunit/Service/EventsService.php b/tests/phpunit/Service/EventsService.php index 8eff175..fc0591b 100644 --- a/tests/phpunit/Service/EventsService.php +++ b/tests/phpunit/Service/EventsService.php @@ -9,7 +9,7 @@ use PHPMinds\Model\Event\Entity\Talk; use PHPMinds\Model\Event\Entity\Venue; use PHPMinds\Model\JoindinEvent; -use PHPMinds\Model\Event\Event; +use PHPMinds\Model\Event\EventModel; use PHPMinds\Model\Twitter; class EventsServiceTest extends \PHPUnit_Framework_TestCase @@ -105,7 +105,7 @@ protected function getEvent() $supporter = new Supporter('a big fan', 'youareawso.me', $twitter, $email, 'http://nolo.go'); $supporter->setId(350); - return new Event( + return new EventModel( $talk, $startDate, $startTime, From c290916d3284554aa8e6947478559ec6eebf4d24 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:47:27 +0000 Subject: [PATCH 13/15] Service getAll returns events as objects. --- app/src/Service/EventsService.php | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/Service/EventsService.php b/app/src/Service/EventsService.php index 6dfd897..482f5bc 100644 --- a/app/src/Service/EventsService.php +++ b/app/src/Service/EventsService.php @@ -88,11 +88,26 @@ public function getEventById($eventID) } /** - * @return array + * @return \PHPMinds\Model\Event\EventModel */ public function getAll() { - return $this->meetupService->getAll(); + $events = $this->meetupService->getAll(); + $eventDetails = $this->eventManager->getAllEventDetails(); + + $result = []; + foreach ($events as $event) { + + if (isset($eventDetails[$event['id']])) { + + $result[] = EventFactory::getMergedFromArrays( + $event, + $eventDetails[$event['id']] + ); + } + } + + return $result; } /** From 229e8635617f5adc188496b5208e76df3435f389 Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Mon, 4 Jan 2016 23:48:48 +0000 Subject: [PATCH 14/15] Tidied up to use event model objects. --- app/src/Action/AdminDashboardAction.php | 5 +---- app/templates/admin/dashboard.twig | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/src/Action/AdminDashboardAction.php b/app/src/Action/AdminDashboardAction.php index 6bb2ba1..33f84e9 100644 --- a/app/src/Action/AdminDashboardAction.php +++ b/app/src/Action/AdminDashboardAction.php @@ -39,11 +39,8 @@ public function __construct(Twig $view, LoggerInterface $logger, EventsService $ public function dispatch($request, $response, $args) { - $events = $this->eventService->getAll(); - $speakers = $this->eventManager->getSpeakers(); - $venues = $this->eventService->getVenues(); - $this->eventService->mergeEvents($events, $speakers, $venues); + $events = $this->eventService->getAll(); $this->view->render($response, 'admin/dashboard.twig', [ 'events' => $events diff --git a/app/templates/admin/dashboard.twig b/app/templates/admin/dashboard.twig index 8babae7..fac6fc6 100644 --- a/app/templates/admin/dashboard.twig +++ b/app/templates/admin/dashboard.twig @@ -19,9 +19,9 @@ {% for event in events %} - {{ event.date }} - {{ event.subject }} - {{ event.speaker }} + {{ event.getDateTimeAsString }} + {{ event.getTalk().getTitle() }} + {{ event.getTalk().getSpeaker().getFirstName() }} {{ event.getTalk().getSpeaker().getLastName() }} {% endfor %} From 7129819a73ce79c6aa674772aece90204c46311c Mon Sep 17 00:00:00 2001 From: Antonis Pavlakis Date: Tue, 5 Jan 2016 00:02:13 +0000 Subject: [PATCH 15/15] Event info shows pending when joindin talk has not been created. --- app/templates/admin/event-info.twig | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/templates/admin/event-info.twig b/app/templates/admin/event-info.twig index cd83799..ba16837 100644 --- a/app/templates/admin/event-info.twig +++ b/app/templates/admin/event-info.twig @@ -24,17 +24,19 @@
{{ meetup_event.subject }}
-

This event has been scheduled for {{ meetup_event.date_time }}

+

This event has been scheduled for {{ meetup_event.getDateTimeAsString }}

-

The event on meetup can be found at: {{ meetup_event.event_url }}

+

The event on meetup can be found at: {{ meetup_event.getMeetupURL }}

{% if not event_info.joindin_url %} -

A joind.in talk was not found. Create one

+

A joind.in talk was not found. Create one

+ {% elseif not event_info.joindin_talk_id %} +

Joind.in Talk [Pending]

{% else %}

A talk has also been created on Joind.in and can be found at: {{ event_info.joindin_url }}

{% endif %} -

It will be held at: {{ meetup_event.location }}

+

It will be held at: {{ meetup_event.getVenue().getAddress() }}

{% endif %}