rev |
line source |
erjo@1
|
1 <?php
|
erjo@1
|
2 if (!defined('APPLICATION')) exit();
|
erjo@1
|
3
|
erjo@1
|
4 function WriteDiscussion($Discussion, &$Sender, &$Session, $Alt) {
|
erjo@1
|
5 $CssClass = 'Item';
|
erjo@1
|
6 $CssClass .= $Discussion->Bookmarked == '1' ? ' Bookmarked' : '';
|
erjo@1
|
7 $CssClass .= $Discussion->Closed == '1' ? ' Closed' : '';
|
erjo@1
|
8 $CssClass .= $Alt.' ';
|
erjo@1
|
9 $CssClass .= $Discussion->Announce == '1' ? ' Announcement' : '';
|
erjo@1
|
10 $CssClass .= $Discussion->Dismissed == '1' ? ' Dismissed' : '';
|
erjo@1
|
11 $CssClass .= $Discussion->InsertUserID == $Session->UserID ? ' Mine' : '';
|
erjo@1
|
12 $CssClass .= ($Discussion->CountUnreadComments > 0 && $Session->IsValid()) ? ' New' : '';
|
erjo@1
|
13 $Sender->EventArguments['Discussion'] = &$Discussion;
|
erjo@1
|
14 $First = UserBuilder($Discussion, 'First');
|
erjo@1
|
15 $Last = UserBuilder($Discussion, 'Last');
|
erjo@1
|
16
|
erjo@1
|
17 $Sender->FireEvent('BeforeDiscussionName');
|
erjo@1
|
18
|
erjo@1
|
19 $DiscussionName = Gdn_Format::Text($Discussion->Name);
|
erjo@1
|
20 if ($DiscussionName == '')
|
erjo@1
|
21 $DiscussionName = T('Blank Discussion Topic');
|
erjo@1
|
22
|
erjo@1
|
23 static $FirstDiscussion = TRUE;
|
erjo@1
|
24 if (!$FirstDiscussion)
|
erjo@1
|
25 $Sender->FireEvent('BetweenDiscussion');
|
erjo@1
|
26 else
|
erjo@1
|
27 $FirstDiscussion = FALSE;
|
erjo@1
|
28 ?>
|
erjo@1
|
29 <li class="<?php echo $CssClass; ?> ">
|
erjo@1
|
30 <?php
|
erjo@1
|
31 $Sender->FireEvent('BeforeDiscussionContent');
|
erjo@1
|
32 WriteOptions($Discussion, $Sender, $Session);
|
erjo@1
|
33 ?>
|
erjo@1
|
34 <div class="ItemContent Discussion">
|
erjo@1
|
35 <?php echo Anchor($DiscussionName, '/discussion/'.$Discussion->DiscussionID.'/'.Gdn_Format::Url($Discussion->Name).($Discussion->CountCommentWatch > 0 && C('Vanilla.Comments.AutoOffset') ? '/#Item_'.$Discussion->CountCommentWatch : ''), 'Title'); ?>
|
erjo@1
|
36 <?php $Sender->FireEvent('AfterDiscussionTitle'); ?>
|
erjo@1
|
37 <div class="Meta">
|
erjo@1
|
38 <?php if ($Discussion->Announce == '1') { ?>
|
erjo@1
|
39 <span class="Announcement"><?php echo T('Announcement'); ?></span>
|
erjo@1
|
40 <?php } ?>
|
erjo@1
|
41 <?php if ($Discussion->Closed == '1') { ?>
|
erjo@1
|
42 <span class="Closed"><?php echo T('Closed'); ?></span>
|
erjo@1
|
43 <?php } ?>
|
erjo@1
|
44 <span class="CommentCount"><?php printf(Plural($Discussion->CountComments, '%s comment', '%s comments'), $Discussion->CountComments); ?></span>
|
erjo@1
|
45 <?php
|
erjo@1
|
46 if ($Session->IsValid() && $Discussion->CountUnreadComments > 0)
|
erjo@1
|
47 echo '<strong>'.Plural($Discussion->CountUnreadComments, '%s New', '%s New Plural').'</strong>';
|
erjo@1
|
48
|
erjo@1
|
49 if ($Discussion->LastCommentID != '') {
|
erjo@1
|
50 echo '<span class="LastCommentBy">'.sprintf(T('Most recent by %1$s'), UserAnchor($Last)).'</span>';
|
erjo@1
|
51 echo '<span class="LastCommentDate">'.Gdn_Format::Date($Discussion->LastDate).'</span>';
|
erjo@1
|
52 } else {
|
erjo@1
|
53 echo '<span class="LastCommentBy">'.sprintf(T('Started by %1$s'), UserAnchor($First)).'</span>';
|
erjo@1
|
54 echo '<span class="LastCommentDate">'.Gdn_Format::Date($Discussion->FirstDate).'</span>';
|
erjo@1
|
55 }
|
erjo@1
|
56
|
erjo@1
|
57 if (C('Vanilla.Categories.Use'))
|
erjo@1
|
58 echo Wrap(Anchor($Discussion->Category, '/categories/'.$Discussion->CategoryUrlCode, 'Category'));
|
erjo@1
|
59
|
erjo@1
|
60 $Sender->FireEvent('DiscussionMeta');
|
erjo@1
|
61 ?>
|
erjo@1
|
62 </div>
|
erjo@1
|
63 </div>
|
erjo@1
|
64 </li>
|
erjo@1
|
65 <?php
|
erjo@1
|
66 }
|
erjo@1
|
67
|
erjo@1
|
68 function WriteFilterTabs(&$Sender) {
|
erjo@1
|
69 $Session = Gdn::Session();
|
erjo@1
|
70 $Title = property_exists($Sender, 'Category') && is_object($Sender->Category) ? $Sender->Category->Name : T('All Discussions');
|
erjo@1
|
71 $Bookmarked = T('My Bookmarks');
|
erjo@1
|
72 $MyDiscussions = T('My Discussions');
|
erjo@1
|
73 $MyDrafts = T('My Drafts');
|
erjo@1
|
74 $CountBookmarks = 0;
|
erjo@1
|
75 $CountDiscussions = 0;
|
erjo@1
|
76 $CountDrafts = 0;
|
erjo@1
|
77 if ($Session->IsValid()) {
|
erjo@1
|
78 $CountBookmarks = $Session->User->CountBookmarks;
|
erjo@1
|
79 $CountDiscussions = $Session->User->CountDiscussions;
|
erjo@1
|
80 $CountDrafts = $Session->User->CountDrafts;
|
erjo@1
|
81 }
|
erjo@1
|
82 if (is_numeric($CountBookmarks) && $CountBookmarks > 0)
|
erjo@1
|
83 $Bookmarked .= '<span>'.$CountBookmarks.'</span>';
|
erjo@1
|
84
|
erjo@1
|
85 if (is_numeric($CountDiscussions) && $CountDiscussions > 0)
|
erjo@1
|
86 $MyDiscussions .= '<span>'.$CountDiscussions.'</span>';
|
erjo@1
|
87
|
erjo@1
|
88 if (is_numeric($CountDrafts) && $CountDrafts > 0)
|
erjo@1
|
89 $MyDrafts .= '<span>'.$CountDrafts.'</span>';
|
erjo@1
|
90
|
erjo@1
|
91 ?>
|
erjo@1
|
92 <div class="Tabs DiscussionsTabs">
|
erjo@1
|
93 <ul>
|
erjo@1
|
94 <?php $Sender->FireEvent('BeforeDiscussionTabs'); ?>
|
erjo@1
|
95 <li<?php echo strtolower($Sender->ControllerName) == 'discussionscontroller' && strtolower($Sender->RequestMethod) == 'index' ? ' class="Active"' : ''; ?>><?php echo Anchor(T('All Discussions'), 'discussions'); ?></li>
|
erjo@1
|
96 <?php $Sender->FireEvent('AfterAllDiscussionsTab'); ?>
|
erjo@1
|
97 <?php if ($CountBookmarks > 0 || $Sender->RequestMethod == 'bookmarked') { ?>
|
erjo@1
|
98 <li<?php echo $Sender->RequestMethod == 'bookmarked' ? ' class="Active"' : ''; ?>><?php echo Anchor($Bookmarked, '/discussions/bookmarked', 'MyBookmarks'); ?></li>
|
erjo@1
|
99 <?php
|
erjo@1
|
100 $Sender->FireEvent('AfterBookmarksTab');
|
erjo@1
|
101 }
|
erjo@1
|
102 if ($CountDiscussions > 0 || $Sender->RequestMethod == 'mine') {
|
erjo@1
|
103 ?>
|
erjo@1
|
104 <li<?php echo $Sender->RequestMethod == 'mine' ? ' class="Active"' : ''; ?>><?php echo Anchor($MyDiscussions, '/discussions/mine', 'MyDiscussions'); ?></li>
|
erjo@1
|
105 <?php
|
erjo@1
|
106 }
|
erjo@1
|
107 if ($CountDrafts > 0 || $Sender->ControllerName == 'draftscontroller') {
|
erjo@1
|
108 ?>
|
erjo@1
|
109 <li<?php echo $Sender->ControllerName == 'draftscontroller' ? ' class="Active"' : ''; ?>><?php echo Anchor($MyDrafts, '/drafts', 'MyDrafts'); ?></li>
|
erjo@1
|
110 <?php
|
erjo@1
|
111 }
|
erjo@1
|
112 $Sender->FireEvent('AfterDiscussionTabs');
|
erjo@1
|
113 ?>
|
erjo@1
|
114 </ul>
|
erjo@1
|
115 <?php
|
erjo@1
|
116 if (property_exists($Sender, 'Category') && is_object($Sender->Category)) {
|
erjo@1
|
117 ?>
|
erjo@1
|
118 <div class="SubTab">↳ <?php echo $Sender->Category->Name; ?></div>
|
erjo@1
|
119 <?php
|
erjo@1
|
120 }
|
erjo@1
|
121 ?>
|
erjo@1
|
122 </div>
|
erjo@1
|
123 <?php
|
erjo@1
|
124 }
|
erjo@1
|
125
|
erjo@1
|
126 /**
|
erjo@1
|
127 * Render options that the user has for this discussion.
|
erjo@1
|
128 */
|
erjo@1
|
129 function WriteOptions($Discussion, &$Sender, &$Session) {
|
erjo@1
|
130 if ($Session->IsValid() && $Sender->ShowOptions) {
|
erjo@1
|
131 echo '<div class="Options">';
|
erjo@1
|
132 // Bookmark link
|
erjo@1
|
133 $Title = T($Discussion->Bookmarked == '1' ? 'Unbookmark' : 'Bookmark');
|
erjo@1
|
134 echo Anchor(
|
erjo@1
|
135 '<span class="Star">'
|
erjo@1
|
136 .Img('applications/dashboard/design/images/pixel.png', array('alt' => $Title))
|
erjo@1
|
137 .'</span>',
|
erjo@1
|
138 '/vanilla/discussion/bookmark/'.$Discussion->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl),
|
erjo@1
|
139 'Bookmark' . ($Discussion->Bookmarked == '1' ? ' Bookmarked' : ''),
|
erjo@1
|
140 array('title' => $Title)
|
erjo@1
|
141 );
|
erjo@1
|
142
|
erjo@1
|
143 $Sender->Options = '';
|
erjo@1
|
144
|
erjo@1
|
145 // Dismiss an announcement
|
erjo@1
|
146 if (C('Vanilla.Discussions.Dismiss', 1) && $Discussion->Announce == '1' && $Discussion->Dismissed != '1')
|
erjo@1
|
147 $Sender->Options .= '<li>'.Anchor(T('Dismiss'), 'vanilla/discussion/dismissannouncement/'.$Discussion->DiscussionID.'/'.$Session->TransientKey(), 'DismissAnnouncement') . '</li>';
|
erjo@1
|
148
|
erjo@1
|
149 // Edit discussion
|
erjo@1
|
150 if ($Discussion->FirstUserID == $Session->UserID || $Session->CheckPermission('Vanilla.Discussions.Edit', TRUE, 'Category', $Discussion->CategoryID))
|
erjo@1
|
151 $Sender->Options .= '<li>'.Anchor(T('Edit'), 'vanilla/post/editdiscussion/'.$Discussion->DiscussionID, 'EditDiscussion') . '</li>';
|
erjo@1
|
152
|
erjo@1
|
153 // Announce discussion
|
erjo@1
|
154 if ($Session->CheckPermission('Vanilla.Discussions.Announce', TRUE, 'Category', $Discussion->CategoryID))
|
erjo@1
|
155 $Sender->Options .= '<li>'.Anchor(T($Discussion->Announce == '1' ? 'Unannounce' : 'Announce'), 'vanilla/discussion/announce/'.$Discussion->DiscussionID.'/'.$Session->TransientKey(), 'AnnounceDiscussion') . '</li>';
|
erjo@1
|
156
|
erjo@1
|
157 // Sink discussion
|
erjo@1
|
158 if ($Session->CheckPermission('Vanilla.Discussions.Sink', TRUE, 'Category', $Discussion->CategoryID))
|
erjo@1
|
159 $Sender->Options .= '<li>'.Anchor(T($Discussion->Sink == '1' ? 'Unsink' : 'Sink'), 'vanilla/discussion/sink/'.$Discussion->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl), 'SinkDiscussion') . '</li>';
|
erjo@1
|
160
|
erjo@1
|
161 // Close discussion
|
erjo@1
|
162 if ($Session->CheckPermission('Vanilla.Discussions.Close', TRUE, 'Category', $Discussion->CategoryID))
|
erjo@1
|
163 $Sender->Options .= '<li>'.Anchor(T($Discussion->Closed == '1' ? 'Reopen' : 'Close'), 'vanilla/discussion/close/'.$Discussion->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl), 'CloseDiscussion') . '</li>';
|
erjo@1
|
164
|
erjo@1
|
165 // Delete discussion
|
erjo@1
|
166 if ($Session->CheckPermission('Vanilla.Discussions.Delete', TRUE, 'Category', $Discussion->CategoryID))
|
erjo@1
|
167 $Sender->Options .= '<li>'.Anchor(T('Delete'), 'vanilla/discussion/delete/'.$Discussion->DiscussionID.'/'.$Session->TransientKey().'?Target='.urlencode($Sender->SelfUrl), 'DeleteDiscussion') . '</li>';
|
erjo@1
|
168
|
erjo@1
|
169 // Allow plugins to add options
|
erjo@1
|
170 $Sender->FireEvent('DiscussionOptions');
|
erjo@1
|
171
|
erjo@1
|
172 if ($Sender->Options != '') {
|
erjo@1
|
173 ?>
|
erjo@1
|
174 <ul class="Options">
|
erjo@1
|
175 <li>
|
erjo@1
|
176 <strong><?php echo T('Options'); ?></strong>
|
erjo@1
|
177 <ul>
|
erjo@1
|
178 <?php echo $Sender->Options; ?>
|
erjo@1
|
179 </ul>
|
erjo@1
|
180 </li>
|
erjo@1
|
181 </ul>
|
erjo@1
|
182 <?php
|
erjo@1
|
183 }
|
erjo@1
|
184 echo '</div>';
|
erjo@1
|
185 }
|
erjo@1
|
186 } |