/** * @param int $calendarId * @param AbstractQuery $query * * @return array */ public function getTasks($calendarId, AbstractQuery $query) { $result = []; $items = $query->getArrayResult(); foreach ($items as $item) { /** @var \DateTime $start */ $start = $item['dueDate']; $end = clone $start; $end = $end->add(new \DateInterval('PT30M')); $result[] = ['calendar' => $calendarId, 'id' => $item['id'], 'title' => $item['subject'], 'description' => $item['description'], 'start' => $start->format('c'), 'end' => $end->format('c'), 'allDay' => false, 'createdAt' => $item['createdAt']->format('c'), 'updatedAt' => $item['updatedAt']->format('c'), 'editable' => false, 'removable' => false]; } $this->reminderManager->applyReminders($result, 'OroCRM\\Bundle\\TaskBundle\\Entity\\Task'); return $result; }
/** * Converts calendar events returned by the given query to form that can be used in API * * @param int $calendarId The target calendar id * @param AbstractQuery $query The query that should be used to get events * * @return array */ public function getCalendarEvents($calendarId, AbstractQuery $query) { $result = []; $rawData = $query->getArrayResult(); foreach ($rawData as $rawDataItem) { $result[] = $this->transformEntity($rawDataItem); } $this->applyAdditionalData($result, $calendarId); foreach ($result as &$resultItem) { $this->applyPermissions($resultItem, $calendarId); } $this->reminderManager->applyReminders($result, 'Oro\\Bundle\\CalendarBundle\\Entity\\CalendarEvent'); return $result; }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testApplyReminders() { $entityClassName = 'Oro\\Bundle\\ReminderBundle\\Tests\\Unit\\Fixtures\\RemindableEntity'; $items = [['id' => 1, 'subject' => 'item1'], ['id' => 2, 'subject' => 'item2'], ['id' => 3, 'subject' => 'item3']]; $query = $this->getMockBuilder('Doctrine\\ORM\\AbstractQuery')->disableOriginalConstructor()->setMethods(['getArrayResult'])->getMockForAbstractClass(); $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock(); $reminderRepo = $this->getReminderRepository(); $this->entityManager->expects($this->once())->method('getRepository')->with('OroReminderBundle:Reminder')->will($this->returnValue($reminderRepo)); $reminderRepo->expects($this->once())->method('findRemindersByEntitiesQueryBuilder')->with($entityClassName, [1, 2, 3])->will($this->returnValue($qb)); $qb->expects($this->once())->method('select')->with('reminder.relatedEntityId, reminder.method, reminder.intervalNumber, reminder.intervalUnit')->will($this->returnSelf()); $qb->expects($this->once())->method('getQuery')->will($this->returnValue($query)); $query->expects($this->once())->method('getArrayResult')->will($this->returnValue([['relatedEntityId' => 3, 'method' => 'email', 'intervalNumber' => 1, 'intervalUnit' => ReminderInterval::UNIT_HOUR], ['relatedEntityId' => 2, 'method' => 'email', 'intervalNumber' => 15, 'intervalUnit' => ReminderInterval::UNIT_MINUTE], ['relatedEntityId' => 2, 'method' => 'flash', 'intervalNumber' => 10, 'intervalUnit' => ReminderInterval::UNIT_MINUTE]])); $this->manager->applyReminders($items, $entityClassName); $this->assertEquals([['id' => 1, 'subject' => 'item1'], ['id' => 2, 'subject' => 'item2', 'reminders' => [['method' => 'email', 'interval' => ['number' => 15, 'unit' => ReminderInterval::UNIT_MINUTE]], ['method' => 'flash', 'interval' => ['number' => 10, 'unit' => ReminderInterval::UNIT_MINUTE]]]], ['id' => 3, 'subject' => 'item3', 'reminders' => [['method' => 'email', 'interval' => ['number' => 1, 'unit' => ReminderInterval::UNIT_HOUR]]]]], $items); }