rev |
line source |
erjo@1
|
1 <?php if (!defined('APPLICATION')) exit();
|
erjo@1
|
2
|
erjo@1
|
3 /**
|
erjo@1
|
4 * $Object is either a Comment or the original Discussion.
|
erjo@1
|
5 */
|
erjo@1
|
6 function WriteComment($Object, $Sender, $Session, $CurrentOffset, $counter) {
|
erjo@1
|
7 $Author = UserBuilder($Object, 'Insert');
|
erjo@1
|
8 $Type = property_exists($Object, 'CommentID') ? 'Comment' : 'Discussion';
|
erjo@1
|
9 $Sender->EventArguments['Object'] = $Object;
|
erjo@1
|
10 $Sender->EventArguments['Type'] = $Type;
|
erjo@1
|
11 $Sender->EventArguments['Author'] = $Author;
|
erjo@1
|
12 $CssClass = 'Item Comment ' . $counter;
|
erjo@1
|
13 if ($Type == 'Comment') {
|
erjo@1
|
14 $Sender->EventArguments['Comment'] = $Object;
|
erjo@1
|
15 $Id = 'Comment_'.$Object->CommentID;
|
erjo@1
|
16 $Permalink = '/discussion/comment/'.$Object->CommentID.'/#Comment_'.$Object->CommentID;
|
erjo@1
|
17 } else {
|
erjo@1
|
18 $Sender->EventArguments['Discussion'] = $Object;
|
erjo@1
|
19 $CssClass .= ' FirstComment';
|
erjo@1
|
20 $Id = 'Discussion_'.$Object->DiscussionID;
|
erjo@1
|
21 $Permalink = '/discussion/'.$Object->DiscussionID.'/'.Gdn_Format::Url($Object->Name).'/p1';
|
erjo@1
|
22 }
|
erjo@1
|
23 $Sender->Options = '';
|
erjo@1
|
24 $CssClass .= $Object->InsertUserID == $Session->UserID ? ' Mine' : '';
|
erjo@1
|
25 $Sender->FireEvent('BeforeCommentDisplay');
|
erjo@1
|
26 ?>
|
erjo@1
|
27 <li class="<?php echo $CssClass; ?>" id="<?php echo $Id; ?>">
|
erjo@1
|
28 <div class="Comment">
|
erjo@1
|
29 <div class="Meta">
|
erjo@1
|
30 <?php $Sender->FireEvent('BeforeCommentMeta'); ?>
|
erjo@1
|
31 <div class="Author">
|
erjo@1
|
32 <?php
|
erjo@1
|
33 echo UserPhoto($Author);
|
erjo@1
|
34 echo UserAnchor($Author);
|
erjo@1
|
35 ?>
|
erjo@1
|
36 <div class="clear"> </div>
|
erjo@1
|
37 </div>
|
erjo@1
|
38 <span class="DateCreated">
|
erjo@1
|
39 <?php
|
erjo@1
|
40 echo Gdn_Format::Date($Object->DateInserted);
|
erjo@1
|
41 ?>
|
erjo@1
|
42 </span>
|
erjo@1
|
43 <span class="Permalink">
|
erjo@1
|
44 <?php echo Anchor(T('Permalink'), $Permalink, 'Permalink', array('name' => 'Item_'.($CurrentOffset+1), 'rel' => 'nofollow')); ?>
|
erjo@1
|
45 </span>
|
erjo@1
|
46 <?php WriteOptionList($Object, $Sender, $Session); ?>
|
erjo@1
|
47 <div class="CommentInfo">
|
erjo@1
|
48 <?php $Sender->FireEvent('CommentInfo'); ?>
|
erjo@1
|
49 </div>
|
erjo@1
|
50 <?php $Sender->FireEvent('AfterCommentMeta'); ?>
|
erjo@1
|
51 </div>
|
erjo@1
|
52 <div class="Message">
|
erjo@1
|
53 <?php $Sender->FireEvent('BeforeCommentBody'); ?>
|
erjo@1
|
54 <?php
|
erjo@1
|
55 $Object->FormatBody = Gdn_Format::To($Object->Body, $Object->Format);
|
erjo@1
|
56 $Sender->FireEvent('AfterCommentFormat');
|
erjo@1
|
57 $Object = $Sender->EventArguments['Object'];
|
erjo@1
|
58 echo $Object->FormatBody;
|
erjo@1
|
59 ?>
|
erjo@1
|
60 </div><div class="clear"> </div>
|
erjo@1
|
61 <?php $Sender->FireEvent('AfterCommentBody'); ?>
|
erjo@1
|
62 </div>
|
erjo@1
|
63 </li>
|
erjo@1
|
64 <?php
|
erjo@1
|
65 $Sender->FireEvent('AfterComment');
|
erjo@1
|
66 }
|
erjo@1
|
67
|
erjo@1
|
68 function WriteOptionList($Object, $Sender, $Session) {
|
erjo@1
|
69 $EditContentTimeout = C('Garden.EditContentTimeout', -1);
|
erjo@1
|
70 $CanEdit = $EditContentTimeout == -1 || strtotime($Object->DateInserted) + $EditContentTimeout > time();
|
erjo@1
|
71 $TimeLeft = '';
|
erjo@1
|
72 if ($CanEdit && $EditContentTimeout > 0) {
|
erjo@1
|
73 $TimeLeft = strtotime($Object->DateInserted) + $EditContentTimeout - time();
|
erjo@1
|
74 $TimeLeft = $TimeLeft > 0 ? ' ('.Gdn_Format::Seconds($TimeLeft).')' : '';
|
erjo@1
|
75 }
|
erjo@1
|
76
|
erjo@1
|
77 $Sender->Options = '';
|
erjo@1
|
78 $CategoryID = GetValue('CategoryID', $Object);
|
erjo@1
|
79 if(!$CategoryID && property_exists($Sender, 'Discussion'))
|
erjo@1
|
80 $CategoryID = GetValue('CategoryID', $Sender->Discussion);
|
erjo@1
|
81
|
erjo@1
|
82 // Show discussion options if this is the discussion / first comment
|
erjo@1
|
83 if ($Sender->EventArguments['Type'] == 'Discussion') {
|
erjo@1
|
84 // Can the user edit the discussion?
|
erjo@1
|
85 if (($CanEdit && $Session->UserID == $Object->InsertUserID) || $Session->CheckPermission('Vanilla.Discussions.Edit', TRUE, 'Category', $CategoryID))
|
erjo@1
|
86 $Sender->Options .= '<span>'.Anchor(T('Edit'), '/vanilla/post/editdiscussion/'.$Object->DiscussionID, 'EditDiscussion').$TimeLeft.'</span>';
|
erjo@1
|
87
|
erjo@1
|
88 // Can the user announce?
|
erjo@1
|
89 if ($Session->CheckPermission('Vanilla.Discussions.Announce', TRUE, 'Category', $CategoryID))
|
erjo@1
|
90 $Sender->Options .= '<span>'.Anchor(T($Sender->Discussion->Announce == '1' ? 'Unannounce' : 'Announce'), 'vanilla/discussion/announce/'.$Object->DiscussionID.'/'.$Session->TransientKey(), 'AnnounceDiscussion') . '</span>';
|
erjo@1
|
91
|
erjo@1
|
92 // Can the user sink?
|
erjo@1
|
93 if ($Session->CheckPermission('Vanilla.Discussions.Sink', TRUE, 'Category', $CategoryID))
|
erjo@1
|
94 $Sender->Options .= '<span>'.Anchor(T($Sender->Discussion->Sink == '1' ? 'Unsink' : 'Sink'), 'vanilla/discussion/sink/'.$Object->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl), 'SinkDiscussion') . '</span>';
|
erjo@1
|
95
|
erjo@1
|
96 // Can the user close?
|
erjo@1
|
97 if ($Session->CheckPermission('Vanilla.Discussions.Close', TRUE, 'Category', $CategoryID))
|
erjo@1
|
98 $Sender->Options .= '<span>'.Anchor(T($Sender->Discussion->Closed == '1' ? 'Reopen' : 'Close'), 'vanilla/discussion/close/'.$Object->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl), 'CloseDiscussion') . '</span>';
|
erjo@1
|
99
|
erjo@1
|
100 // Can the user delete?
|
erjo@1
|
101 if ($Session->CheckPermission('Vanilla.Discussions.Delete', TRUE, 'Category', $CategoryID))
|
erjo@1
|
102 $Sender->Options .= '<span>'.Anchor(T('Delete Discussion'), 'vanilla/discussion/delete/'.$Object->DiscussionID.'/'.$Session->TransientKey(), 'DeleteDiscussion') . '</span>';
|
erjo@1
|
103 } else {
|
erjo@1
|
104 // And if this is just another comment in the discussion ...
|
erjo@1
|
105
|
erjo@1
|
106 // Can the user edit the comment?
|
erjo@1
|
107 if (($CanEdit && $Session->UserID == $Object->InsertUserID) || $Session->CheckPermission('Vanilla.Comments.Edit', TRUE, 'Category', $Sender->Discussion->CategoryID))
|
erjo@1
|
108 $Sender->Options .= '<span>'.Anchor(T('Edit'), '/vanilla/post/editcomment/'.$Object->CommentID, 'EditComment').$TimeLeft.'</span>';
|
erjo@1
|
109
|
erjo@1
|
110 // Can the user delete the comment?
|
erjo@1
|
111 if ($Session->CheckPermission('Vanilla.Comments.Delete', TRUE, 'Category', $CategoryID))
|
erjo@1
|
112 $Sender->Options .= '<span>'.Anchor(T('Delete'), 'vanilla/discussion/deletecomment/'.$Object->CommentID.'/'.$Session->TransientKey().'/?Target='.urlencode($Sender->SelfUrl), 'DeleteComment') . '</span>';
|
erjo@1
|
113 }
|
erjo@1
|
114
|
erjo@1
|
115 // Allow plugins to add options
|
erjo@1
|
116 $Sender->FireEvent('CommentOptions');
|
erjo@1
|
117 echo $Sender->Options;
|
erjo@1
|
118 } |