From 73c47d9461cbfea88c84f3f2b01cdeb2d22c2f87 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Fri, 19 Jun 2015 19:38:23 -0400 Subject: [PATCH] Add RSS feed for users and change address of project feeds --- app/Controller/Feed.php | 56 +++++++++++++++++++ app/Controller/Project.php | 21 ------- app/Model/Acl.php | 4 +- .../{project/feed.php => feed/project.php} | 4 +- app/Template/feed/user.php | 27 +++++++++ app/Template/project/share.php | 2 +- app/Template/project/show.php | 2 +- app/Template/projectinfo/activity.php | 2 +- app/Template/user/share.php | 1 + app/Template/user/show.php | 1 + tests/units/AclTest.php | 2 + 11 files changed, 94 insertions(+), 28 deletions(-) create mode 100644 app/Controller/Feed.php rename app/Template/{project/feed.php => feed/project.php} (86%) create mode 100644 app/Template/feed/user.php diff --git a/app/Controller/Feed.php b/app/Controller/Feed.php new file mode 100644 index 000000000..c08919c21 --- /dev/null +++ b/app/Controller/Feed.php @@ -0,0 +1,56 @@ +request->getStringParam('token'); + $user = $this->user->getByToken($token); + + // Token verification + if (empty($user)) { + $this->forbidden(true); + } + + $projects = $this->projectPermission->getActiveMemberProjects($user['id']); + + $this->response->xml($this->template->render('feed/user', array( + 'events' => $this->projectActivity->getProjects(array_keys($projects)), + 'user' => $user, + ))); + } + + /** + * RSS feed for a project + * + * @access public + */ + public function project() + { + $token = $this->request->getStringParam('token'); + $project = $this->project->getByToken($token); + + // Token verification + if (empty($project)) { + $this->forbidden(true); + } + + $this->response->xml($this->template->render('feed/project', array( + 'events' => $this->projectActivity->getProject($project['id']), + 'project' => $project, + ))); + } +} diff --git a/app/Controller/Project.php b/app/Controller/Project.php index ba039b7d9..faebac38e 100644 --- a/app/Controller/Project.php +++ b/app/Controller/Project.php @@ -394,27 +394,6 @@ class Project extends Base ))); } - /** - * RSS feed for a project (public) - * - * @access public - */ - public function feed() - { - $token = $this->request->getStringParam('token'); - $project = $this->project->getByToken($token); - - // Token verification - if (empty($project)) { - $this->forbidden(true); - } - - $this->response->xml($this->template->render('project/feed', array( - 'events' => $this->projectActivity->getProject($project['id']), - 'project' => $project, - ))); - } - /** * Display a form to create a new project * diff --git a/app/Model/Acl.php b/app/Model/Acl.php index 8cfc71209..909441287 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -21,10 +21,10 @@ class Acl extends Base 'user' => array('google', 'github'), 'task' => array('readonly'), 'board' => array('readonly'), - 'project' => array('feed'), - 'webhook' => '*', 'app' => array('colors'), + 'webhook' => '*', 'ical' => '*', + 'feed' => '*', ); /** diff --git a/app/Template/project/feed.php b/app/Template/feed/project.php similarity index 86% rename from app/Template/project/feed.php rename to app/Template/feed/project.php index 2062e8012..60b7ee96e 100644 --- a/app/Template/project/feed.php +++ b/app/Template/feed/project.php @@ -2,9 +2,9 @@ <?= t('%s\'s activity', $project['name']) ?> - + - url->base() ?> + url->base().$this->url->href('feed', 'project', array('token' => $project['token'])) ?> url->base() ?>assets/img/favicon.png diff --git a/app/Template/feed/user.php b/app/Template/feed/user.php new file mode 100644 index 000000000..b3279a0cf --- /dev/null +++ b/app/Template/feed/user.php @@ -0,0 +1,27 @@ +' ?> + + <?= t('Project activities for %s', $user['name'] ?: $user['username']) ?> + + + + url->base().$this->url->href('feed', 'user', array('token' => $user['token'])) ?> + url->base() ?>assets/img/favicon.png + + + + <?= $e['event_title'] ?> + + + + + + e($e['author']) ?> + + + + ]]> + + + + \ No newline at end of file diff --git a/app/Template/project/share.php b/app/Template/project/share.php index a91465995..6f66c97e8 100644 --- a/app/Template/project/share.php +++ b/app/Template/project/share.php @@ -7,7 +7,7 @@
  • url->link(t('Public link'), 'board', 'readonly', array('token' => $project['token']), false, '', '', true) ?>
  • -
  • url->link(t('RSS feed'), 'project', 'feed', array('token' => $project['token']), false, '', '', true) ?>
  • +
  • url->link(t('RSS feed'), 'feed', 'project', array('token' => $project['token']), false, '', '', true) ?>
  • url->link(t('iCal feed'), 'ical', 'project', array('token' => $project['token']), false, '', '', true) ?>
diff --git a/app/Template/project/show.php b/app/Template/project/show.php index 4869d8a42..beb5a1faf 100644 --- a/app/Template/project/show.php +++ b/app/Template/project/show.php @@ -10,7 +10,7 @@
  • url->link(t('Public link'), 'board', 'readonly', array('token' => $project['token']), false, '', '', true) ?>
  • -
  • url->link(t('RSS feed'), 'project', 'feed', array('token' => $project['token']), false, '', '', true) ?>
  • +
  • url->link(t('RSS feed'), 'feed', 'project', array('token' => $project['token']), false, '', '', true) ?>
  • url->link(t('iCal feed'), 'ical', 'project', array('token' => $project['token'])) ?>
  • diff --git a/app/Template/projectinfo/activity.php b/app/Template/projectinfo/activity.php index 528cdbee8..d458ea3da 100644 --- a/app/Template/projectinfo/activity.php +++ b/app/Template/projectinfo/activity.php @@ -20,7 +20,7 @@ url->link(t('All projects'), 'project', 'index') ?> -
  • url->link(t('RSS feed'), 'project', 'feed', array('token' => $project['token']), false, '', '', true) ?>
  • +
  • url->link(t('RSS feed'), 'feed', 'project', array('token' => $project['token']), false, '', '', true) ?>
  • url->link(t('iCal feed'), 'ical', 'project', array('token' => $project['token'])) ?>
  • diff --git a/app/Template/user/share.php b/app/Template/user/share.php index 8f333a6be..56dc86758 100644 --- a/app/Template/user/share.php +++ b/app/Template/user/share.php @@ -6,6 +6,7 @@
      +
    • url->link(t('RSS feed'), 'feed', 'user', array('token' => $user['token']), false, '', '', true) ?>
    • url->link(t('iCal feed'), 'ical', 'user', array('token' => $user['token']), false, '', '', true) ?>
    diff --git a/app/Template/user/show.php b/app/Template/user/show.php index 5442e2e73..a9de6d852 100644 --- a/app/Template/user/show.php +++ b/app/Template/user/show.php @@ -33,6 +33,7 @@
      +
    • url->link(t('RSS feed'), 'feed', 'user', array('token' => $user['token']), false, '', '', true) ?>
    • url->link(t('iCal feed'), 'ical', 'user', array('token' => $user['token']), false, '', '', true) ?>
    diff --git a/tests/units/AclTest.php b/tests/units/AclTest.php index 20101d471..c74a90ca6 100644 --- a/tests/units/AclTest.php +++ b/tests/units/AclTest.php @@ -38,6 +38,8 @@ class AclTest extends Base $this->assertTrue($acl->isPublicAction('board', 'readonly')); $this->assertFalse($acl->isPublicAction('board', 'show')); $this->assertTrue($acl->isPublicAction('app', 'colors')); + $this->assertTrue($acl->isPublicAction('feed', 'project')); + $this->assertTrue($acl->isPublicAction('feed', 'user')); } public function testAdminActions()