/** * @PublicPage * @NoCSRFRequired * * @return TemplateResponse */ public function show() { try { $user = $this->activityManager->getCurrentUserId(); $userLang = $this->config->getUserValue($user, 'core', 'lang'); // Overwrite user and language in the helper $this->l = $this->l10nFactory->get('activity', $userLang); $parser = new PlainTextParser($this->l); $this->helper->setL10n($this->l); $this->helper->setUser($user); $description = (string) $this->l->t('Personal activity feed for %s', $user); $response = $this->data->get($this->helper, $this->settings, $user, 0, self::DEFAULT_PAGE_SIZE, 'desc', 'all'); $data = $response['data']; $activities = []; foreach ($data as $activity) { $activity['subject_prepared'] = $parser->parseMessage($activity['subject_prepared']); $activity['message_prepared'] = $parser->parseMessage($activity['message_prepared']); $activities[] = $activity; } } catch (\UnexpectedValueException $e) { $this->l = $this->l10nFactory->get('activity'); $description = (string) $this->l->t('Your feed URL is invalid'); $activities = [['activity_id' => -1, 'timestamp' => time(), 'subject' => true, 'subject_prepared' => $description]]; } $response = new TemplateResponse('activity', 'rss', ['rssLang' => $this->l->getLanguageCode(), 'rssLink' => $this->urlGenerator->linkToRouteAbsolute('activity.Feed.show'), 'rssPubDate' => date('r'), 'description' => $description, 'activities' => $activities], ''); if ($this->request->getHeader('accept') !== null && stristr($this->request->getHeader('accept'), 'application/rss+xml')) { $response->addHeader('Content-Type', 'application/rss+xml'); } else { $response->addHeader('Content-Type', 'text/xml; charset=UTF-8'); } return $response; }
/** * @expectedException \OutOfBoundsException * @expectedExceptionMessage Invalid user * @expectedExceptionCode 1 */ public function testGetNoUser() { /** @var \OCA\Activity\GroupHelper|\PHPUnit_Framework_MockObject_MockObject $groupHelper */ $groupHelper = $this->getMockBuilder('OCA\\Activity\\GroupHelper')->disableOriginalConstructor()->getMock(); /** @var \OCA\Activity\UserSettings|\PHPUnit_Framework_MockObject_MockObject $settings */ $settings = $this->getMockBuilder('OCA\\Activity\\UserSettings')->disableOriginalConstructor()->getMock(); $this->data->get($groupHelper, $settings, '', 0, 0, 'asc', ''); }
/** * @param array $parameters * @return \OC_OCS_Result */ protected function get(array $parameters) { try { $this->readParameters($parameters); } catch (InvalidFilterException $e) { return new \OC_OCS_Result(null, Http::STATUS_NOT_FOUND); } catch (\OutOfBoundsException $e) { return new \OC_OCS_Result(null, Http::STATUS_FORBIDDEN); } try { $response = $this->data->get($this->helper, $this->settings, $this->user, $this->since, $this->limit, $this->sort, $this->filter, $this->objectType, $this->objectId); } catch (\OutOfBoundsException $e) { // Invalid since argument return new \OC_OCS_Result(null, Http::STATUS_FORBIDDEN); } catch (\BadMethodCallException $e) { // No activity settings enabled return new \OC_OCS_Result(null, Http::STATUS_NO_CONTENT); } $headers = $this->generateHeaders($response['headers'], $response['has_more']); if (empty($response['data'])) { return new \OC_OCS_Result([], Http::STATUS_NOT_MODIFIED, null, $headers); } $preparedActivities = []; foreach ($response['data'] as $activity) { $activity['datetime'] = date('c', $activity['timestamp']); unset($activity['timestamp']); if ($this->loadPreviews) { $activity['previews'] = []; if ($activity['object_type'] === 'files' && !empty($activity['files'])) { foreach ($activity['files'] as $objectId => $objectName) { if ((int) $objectId === 0 || $objectName === '') { // No file, no preview continue; } $activity['previews'][] = $this->getPreview($activity['affecteduser'], (int) $objectId, $objectName); } } else { if ($activity['object_type'] === 'files' && $activity['object_id']) { $activity['previews'][] = $this->getPreview($activity['affecteduser'], (int) $activity['object_id'], $activity['file']); } } } $preparedActivities[] = $activity; } return new \OC_OCS_Result($preparedActivities, 100, null, $headers); }
/** * @expectedException \BadMethodCallException * @expectedExceptionMessage No settings enabled * @expectedExceptionCode 3 */ public function testGetNoSettings() { /** @var \OCA\Activity\GroupHelper|\PHPUnit_Framework_MockObject_MockObject $groupHelper */ $groupHelper = $this->getMockBuilder('OCA\\Activity\\GroupHelper')->disableOriginalConstructor()->getMock(); $groupHelper->expects($this->once())->method('setUser')->with('user1'); /** @var \OCA\Activity\UserSettings|\PHPUnit_Framework_MockObject_MockObject $settings */ $settings = $this->getMockBuilder('OCA\\Activity\\UserSettings')->disableOriginalConstructor()->getMock(); $settings->expects($this->once())->method('getNotificationTypes')->with('user1', 'stream')->willReturn(['settings']); /** @var ActivityManager|\PHPUnit_Framework_MockObject_MockObject $activityManager */ $activityManager = $this->getMockBuilder('OCP\\Activity\\IManager')->disableOriginalConstructor()->getMock(); $activityManager->expects($this->any())->method('filterNotificationTypes')->with(['settings'], 'filter1')->willReturn([]); $activityManager->expects($this->never())->method('getQueryForFilter'); /** @var \OCA\Activity\Data|\PHPUnit_Framework_MockObject_MockObject $data */ $data = new \OCA\Activity\Data($activityManager, \OC::$server->getDatabaseConnection(), $this->session); $data->get($groupHelper, $settings, 'user1', 0, 0, 'asc', 'filter1'); }