diff --git a/DependencyInjection/ChillActivityExtension.php b/DependencyInjection/ChillActivityExtension.php index 613fa7493..9567514aa 100644 --- a/DependencyInjection/ChillActivityExtension.php +++ b/DependencyInjection/ChillActivityExtension.php @@ -78,9 +78,10 @@ class ChillActivityExtension extends Extension implements PrependExtensionInterf { $container->prependExtensionConfig('security', array( 'role_hierarchy' => array( - ActivityVoter::UPDATE => array(ActivityVoter::SEE), - ActivityVoter::CREATE => array(ActivityVoter::SEE), - ActivityVoter::DELETE => array(ActivityVoter::SEE) + ActivityVoter::UPDATE => array(ActivityVoter::SEE_DETAILS), + ActivityVoter::CREATE => array(ActivityVoter::SEE_DETAILS), + ActivityVoter::DELETE => array(ActivityVoter::SEE_DETAILS), + ActivityVoter::SEE_DETAILS => array(ActivityVoter::SEE) ) )); } diff --git a/Resources/views/Timeline/activity_person_context.html.twig b/Resources/views/Timeline/activity_person_context.html.twig index 686219619..21b704f6d 100644 --- a/Resources/views/Timeline/activity_person_context.html.twig +++ b/Resources/views/Timeline/activity_person_context.html.twig @@ -1,3 +1,5 @@ +{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %} +

{{ activity.date|localizeddate('long', 'none') }} / {{ 'Activity'|trans }}

@@ -9,5 +11,20 @@ ) }} {{ 'Show the activity'|trans }} + {% if is_granted(constant('Chill\\ActivityBundle\\Security\\Authorization\\ActivityVoter::SEE_DETAILS'), activity) %} +
+
{{ 'Remark'|trans }}
+
{% if activity.remark is empty %}{{ 'No remarks'|trans }}{% else %}
{{ activity.remark|nl2br }}
{% endif %}
+ +
{{ 'Reasons'|trans }}
+ {%- if activity.reasons is empty -%} +
{{ 'No reason associated'|trans }}
+ {%- else -%} +
{% for r in activity.reasons %}{{ m.reason(r) }} {% endfor %}
+ {%- endif -%} + +
+ {% endif %} +
diff --git a/Security/Authorization/ActivityStatsVoter.php b/Security/Authorization/ActivityStatsVoter.php index 66788041a..dc8832635 100644 --- a/Security/Authorization/ActivityStatsVoter.php +++ b/Security/Authorization/ActivityStatsVoter.php @@ -21,7 +21,7 @@ namespace Chill\ActivityBundle\Security\Authorization; use Chill\MainBundle\Security\Authorization\AbstractChillVoter; use Chill\MainBundle\Security\Authorization\AuthorizationHelper; -use Chill\MainBundle\Security\ProvideRoleInterface; +use Chill\MainBundle\Security\ProvideRoleHierarchyInterface; use Chill\MainBundle\Entity\Center; /** @@ -29,7 +29,7 @@ use Chill\MainBundle\Entity\Center; * * @author Julien Fastré */ -class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleInterface +class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleHierarchyInterface { const STATS = 'CHILL_ACTIVITY_STATS'; const LISTS = 'CHILL_ACTIVITY_LIST'; @@ -74,4 +74,8 @@ class ActivityStatsVoter extends AbstractChillVoter implements ProvideRoleInterf return $this->getSupportedAttributes(); } + public function getRolesWithHierarchy() + { + return [ 'Activity' => $this->getRoles() ]; + } } diff --git a/Security/Authorization/ActivityVoter.php b/Security/Authorization/ActivityVoter.php index 4836b5665..b4d0feb2f 100644 --- a/Security/Authorization/ActivityVoter.php +++ b/Security/Authorization/ActivityVoter.php @@ -32,6 +32,7 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn { const CREATE = 'CHILL_ACTIVITY_CREATE'; const SEE = 'CHILL_ACTIVITY_SEE'; + const SEE_DETAILS = 'CHILL_ACTIVITY_SEE_DETAILS'; const UPDATE = 'CHILL_ACTIVITY_UPDATE'; const DELETE = 'CHILL_ACTIVITY_DELETE'; @@ -48,7 +49,8 @@ class ActivityVoter extends AbstractChillVoter implements ProvideRoleHierarchyIn protected function getSupportedAttributes() { - return array(self::CREATE, self::SEE, self::UPDATE, self::DELETE); + return array(self::CREATE, self::SEE, self::UPDATE, self::DELETE, + self::SEE_DETAILS); } protected function getSupportedClasses()