Skip to content

Commit 19c3ee6

Browse files
committed
Merge pull request #69 from kitan1982/bugfix
UI update
2 parents bc9b7dd + ff4e002 commit 19c3ee6

File tree

7 files changed

+202
-26
lines changed

7 files changed

+202
-26
lines changed

Controller/ForumController.php

+79-21
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Claroline\ForumBundle\Form\SubjectType;
1919
use Claroline\ForumBundle\Form\CategoryType;
2020
use Claroline\ForumBundle\Form\EditTitleType;
21+
use Claroline\ForumBundle\Event\Log\ReadSubjectEvent;
2122
use Claroline\CoreBundle\Library\Resource\ResourceCollection;
2223
use Claroline\CoreBundle\Entity\Workspace\Workspace;
2324
use Claroline\CoreBundle\Entity\User;
@@ -92,7 +93,8 @@ public function openAction(Forum $forum)
9293
'_resource' => $forum,
9394
'isModerator' => $isModerator,
9495
'categories' => $categories,
95-
'hasSubscribed' => $hasSubscribed
96+
'hasSubscribed' => $hasSubscribed,
97+
'workspace' => $forum->getResourceNode()->getWorkspace()
9698
);
9799
}
98100

@@ -132,14 +134,38 @@ public function subjectsAction(Category $category, $page, $max)
132134
$isModerator = $this->authorization->isGranted('moderate', $collection) &&
133135
!$isAnon;
134136

137+
$logs = array();
138+
139+
if (!$isAnon) {
140+
$securityToken = $this->tokenStorage->getToken();
141+
142+
if (!is_null($securityToken)) {
143+
$user = $securityToken->getUser();
144+
$logs = $this->manager->getSubjectsReadingLogs($user, $forum->getResourceNode());
145+
}
146+
}
147+
$lastAccessDates = array();
148+
149+
foreach ($logs as $log) {
150+
$details = $log->getDetails();
151+
$subjectId = $details['subject']['id'];
152+
153+
if (!isset($lastAccessDates[$subjectId])) {
154+
$lastAccessDates[$subjectId] = $log->getDateLog();
155+
}
156+
}
157+
135158
return array(
136159
'pager' => $pager,
137160
'_resource' => $forum,
138161
'canCreateSubject' => $canCreateSubject,
139162
'isModerator' => $isModerator,
140163
'category' => $category,
141164
'max' => $max,
142-
'lastMessages' => $lastMessages
165+
'lastMessages' => $lastMessages,
166+
'workspace' => $forum->getResourceNode()->getWorkspace(),
167+
'lastAccessDates' => $lastAccessDates,
168+
'isAnon' => $isAnon
143169
);
144170
}
145171

@@ -167,7 +193,8 @@ public function subjectFormAction(Category $category)
167193
return array(
168194
'_resource' => $forum,
169195
'form' => $formSubject->createView(),
170-
'category' => $category
196+
'category' => $category,
197+
'workspace' => $forum->getResourceNode()->getWorkspace()
171198
);
172199
}
173200

@@ -193,7 +220,8 @@ public function categoryFormAction(Forum $forum)
193220

194221
return array(
195222
'_resource' => $forum,
196-
'form' => $formCategory->createView()
223+
'form' => $formCategory->createView(),
224+
'workspace' => $forum->getResourceNode()->getWorkspace()
197225
);
198226
}
199227

@@ -283,7 +311,8 @@ public function createSubjectAction(Category $category)
283311

284312
return array(
285313
'form' => $form->createView(),
286-
'_resource' => $forum
314+
'_resource' => $forum,
315+
'workspace' => $forum->getResourceNode()->getWorkspace()
287316
);
288317
}
289318

@@ -314,6 +343,17 @@ public function messagesAction(Subject $subject, $page, $max)
314343
$canPost = $this->authorization->isGranted('post', $collection);
315344
$form = $this->get('form.factory')->create(new MessageType());
316345

346+
if (!$isAnon) {
347+
$securityToken = $this->tokenStorage->getToken();
348+
349+
if (!is_null($securityToken)) {
350+
$user = $securityToken->getUser();
351+
$event = new ReadSubjectEvent($subject);
352+
$event->setDoer($user);
353+
$this->dispatch($event);
354+
}
355+
}
356+
317357
return array(
318358
'subject' => $subject,
319359
'pager' => $pager,
@@ -322,7 +362,8 @@ public function messagesAction(Subject $subject, $page, $max)
322362
'form' => $form->createView(),
323363
'category' => $subject->getCategory(),
324364
'max' => $max,
325-
'canPost' => $canPost
365+
'canPost' => $canPost,
366+
'workspace' => $forum->getResourceNode()->getWorkspace()
326367
);
327368
}
328369

@@ -375,7 +416,8 @@ public function editMessageFormAction(Message $message)
375416
'subject' => $subject,
376417
'form' => $form->createView(),
377418
'message' => $message,
378-
'_resource' => $forum
419+
'_resource' => $forum,
420+
'workspace' => $forum->getResourceNode()->getWorkspace()
379421
);
380422
}
381423

@@ -415,7 +457,8 @@ public function editMessageAction(Message $message)
415457
'subject' => $subject,
416458
'form' => $form->createView(),
417459
'message' => $message,
418-
'_resource' => $forum
460+
'_resource' => $forum,
461+
'workspace' => $forum->getResourceNode()->getWorkspace()
419462
);
420463
}
421464

@@ -442,7 +485,8 @@ public function editCategoryFormAction(Category $category)
442485
return array(
443486
'category' => $category,
444487
'form' => $form->createView(),
445-
'_resource' => $category->getForum()
488+
'_resource' => $forum,
489+
'workspace' => $forum->getResourceNode()->getWorkspace()
446490
);
447491
}
448492

@@ -471,7 +515,7 @@ public function editCategoryAction(Category $category)
471515
$this->manager->editCategory($category, $oldName, $newName);
472516

473517
return new RedirectResponse(
474-
$this->generateUrl('claro_forum_categories', array('forum' => $category->getForum()->getId()))
518+
$this->generateUrl('claro_forum_categories', array('forum' => $forum->getId()))
475519
);
476520
}
477521
}
@@ -516,7 +560,13 @@ public function searchAction(Forum $forum, $page, $search)
516560
{
517561
$pager = $this->manager->searchPager($forum, $search, $page);
518562

519-
return array('pager' => $pager, '_resource' => $forum, 'search' => $search, 'page' => $page);
563+
return array(
564+
'pager' => $pager,
565+
'_resource' => $forum,
566+
'search' => $search,
567+
'page' => $page,
568+
'workspace' => $forum->getResourceNode()->getWorkspace()
569+
);
520570
}
521571

522572
/**
@@ -534,7 +584,8 @@ public function searchAction(Forum $forum, $page, $search)
534584
*/
535585
public function editSubjectFormAction(Subject $subject)
536586
{
537-
$isModerator = $this->authorization->isGranted('moderate', new ResourceCollection(array($subject->getCategory()->getForum()->getResourceNode())));
587+
$forum = $subject->getCategory()->getForum();
588+
$isModerator = $this->authorization->isGranted('moderate', new ResourceCollection(array($forum->getResourceNode())));
538589

539590
if (!$isModerator && $this->tokenStorage->getToken()->getUser() !== $subject->getCreator()) {
540591
throw new AccessDeniedException();
@@ -545,8 +596,9 @@ public function editSubjectFormAction(Subject $subject)
545596
return array(
546597
'form' => $form->createView(),
547598
'subject' => $subject,
548-
'forumId' => $subject->getCategory()->getForum()->getId(),
549-
'_resource' => $subject->getCategory()->getForum()
599+
'forumId' => $forum->getId(),
600+
'_resource' => $forum,
601+
'workspace' => $forum->getResourceNode()->getWorkspace()
550602
);
551603
}
552604

@@ -565,8 +617,9 @@ public function editSubjectFormAction(Subject $subject)
565617
*/
566618
public function editSubjectAction(Subject $subject)
567619
{
620+
$forum = $subject->getCategory()->getForum();
568621
$isModerator = $this->authorization->isGranted(
569-
'moderate', new ResourceCollection(array($subject->getCategory()->getForum()->getResourceNode()))
622+
'moderate', new ResourceCollection(array($forum->getResourceNode()))
570623
);
571624

572625
if (!$isModerator && $this->tokenStorage->getToken()->getUser() !== $subject->getCreator()) {
@@ -589,8 +642,9 @@ public function editSubjectAction(Subject $subject)
589642
return array(
590643
'form' => $form->createView(),
591644
'subjectId' => $subject->getId(),
592-
'forumId' => $subject->getCategory()->getForum()->getId(),
593-
'_resource' => $subject->getCategory()->getForum()
645+
'forumId' => $forum->getId(),
646+
'_resource' => $forum,
647+
'workspace' => $forum->getResourceNode()->getWorkspace()
594648
);
595649
}
596650

@@ -784,7 +838,8 @@ public function moveSubjectFormAction(Subject $subject)
784838
'_resource' => $forum,
785839
'categories' => $categories,
786840
'category' => $category,
787-
'subject' => $subject
841+
'subject' => $subject,
842+
'workspace' => $forum->getResourceNode()->getWorkspace()
788843
);
789844
}
790845

@@ -813,7 +868,8 @@ public function moveMessageFormAction(Message $message, $page)
813868
'category' => $category,
814869
'subject' => $subject,
815870
'pager' => $pager,
816-
'message' => $message
871+
'message' => $message,
872+
'workspace' => $forum->getResourceNode()->getWorkspace()
817873
);
818874
}
819875

@@ -976,7 +1032,8 @@ public function replyMessageAction(Message $message)
9761032
'subject' => $subject,
9771033
'form' => $form->createView(),
9781034
'message' => $message,
979-
'_resource' => $forum
1035+
'_resource' => $forum,
1036+
'workspace' => $forum->getResourceNode()->getWorkspace()
9801037
);
9811038

9821039
}
@@ -1014,7 +1071,8 @@ public function quoteMessageAction(Message $message)
10141071
'subject' => $subject,
10151072
'form' => $form->createView(),
10161073
'message' => $message,
1017-
'_resource' => $forum
1074+
'_resource' => $forum,
1075+
'workspace' => $forum->getResourceNode()->getWorkspace()
10181076
);
10191077
}
10201078

Event/Log/ReadSubjectEvent.php

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Claroline Connect package.
5+
*
6+
* (c) Claroline Consortium <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Claroline\ForumBundle\Event\Log;
13+
14+
use Claroline\CoreBundle\Event\Log\AbstractLogResourceEvent;
15+
use Claroline\ForumBundle\Entity\Subject;
16+
17+
class ReadSubjectEvent extends AbstractLogResourceEvent
18+
{
19+
const ACTION = 'resource-claroline_forum-read_subject';
20+
21+
/**
22+
* @param Subject $subject
23+
*/
24+
public function __construct(Subject $subject)
25+
{
26+
$details = array(
27+
'subject' => array(
28+
'id' => $subject->getId(),
29+
'title' => $subject->getTitle()
30+
),
31+
'category' => array(
32+
'id' => $subject->getCategory()->getId()
33+
),
34+
'forum' => array(
35+
'id' => $subject->getCategory()->getForum()->getId()
36+
)
37+
);
38+
39+
parent::__construct($subject->getCategory()->getForum()->getResourceNode(), $details);
40+
}
41+
42+
/**
43+
* @return array
44+
*/
45+
public static function getRestriction()
46+
{
47+
return array(self::DISPLAYED_WORKSPACE, self::DISPLAYED_ADMIN);
48+
}
49+
}

Manager/Manager.php

+15
Original file line numberDiff line numberDiff line change
@@ -657,4 +657,19 @@ public function createDefaultPostRights(ResourceNode $node)
657657
}
658658
}
659659
}
660+
661+
public function getSubjectsReadingLogs(
662+
User $user,
663+
ResourceNode $node,
664+
$orderedBy = 'id',
665+
$order = 'DESC'
666+
)
667+
{
668+
return $this->forumRepo->findSubjectsReadingLogs(
669+
$user,
670+
$node,
671+
$orderedBy,
672+
$order
673+
);
674+
}
660675
}

Repository/ForumRepository.php

+26
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Claroline\ForumBundle\Repository;
1313

14+
use Claroline\CoreBundle\Entity\Resource\ResourceNode;
15+
use Claroline\CoreBundle\Entity\User;
1416
use Claroline\ForumBundle\Entity\Forum;
1517
use Claroline\ForumBundle\Entity\Subject;
1618
use Claroline\ForumBundle\Entity\Category;
@@ -269,4 +271,28 @@ public function findNonSelfNotificationsByForum(
269271

270272
return $executeQuery ? $query->getResult() : $query;
271273
}
274+
275+
public function findSubjectsReadingLogs(
276+
User $user,
277+
ResourceNode $node,
278+
$orderedBy = 'id',
279+
$order = 'DESC'
280+
)
281+
{
282+
$dql = "
283+
SELECT l
284+
FROM Claroline\CoreBundle\Entity\Log\Log l
285+
WHERE l.action = 'resource-claroline_forum-read_subject'
286+
AND l.doer = :user
287+
AND l.resourceNode = :node
288+
ORDER BY l.{$orderedBy} {$order}
289+
";
290+
291+
$query = $this->_em->createQuery($dql);
292+
$query->setParameter('user', $user);
293+
$query->setParameter('node', $node);
294+
295+
return $query->getResult();
296+
297+
}
272298
}

Resources/views/Forum/messages.html.twig

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@
4444

4545
{% block section_content %}
4646
<div class="panel-heading">
47-
<h3 class="panel-title">{{ _resource.getResourceNode().getName() }}</h3>
47+
<h3 class="panel-title">
48+
[{{ 'subject'|trans({}, 'forum') }}] {{ subject.getTitle() }}
49+
</h3>
4850
</div>
4951
<div class="panel-body">
5052
<div class="row">

0 commit comments

Comments
 (0)