1
//------------------------------------------------------------------------------
2
// <copyright company="Tunynet">
3
// Copyright (c) Tunynet Network Technology Co., Ltd. All rights reserved.
4
// </copyright>
5
//------------------------------------------------------------------------------
6
7
using System;
8
using System.Collections;
9
using System.Web;
10
using System.Web.UI.WebControls;
11
12
using SpaceBuilder.Blogs.Components;
13
using SpaceBuilder.Components;
14
using SpaceBuilder.Controls;
15
using SpaceBuilder.Controls.Utils;
16
using SpaceBuilder.Utils;
17
using SpaceBuilder.Security;
18
using SpaceBuilder.Posts.Permissions;
19
using TunyNet.Data.Utils;
20
using TunyNet.Utils;
21
22
namespace SpaceBuilder.Blogs.Controls
23
...{
24
/**//// <summary>
25
/// Displays an interface for managing a blog's comments and traceback.
26
/// </summary>
27
public class BlogFeedbackAdmin : WeblogThemedControl
28
...{
29
Setup#region Setup
30
31
/**//// <summary>
32
/// 验证当前用户身份
33
/// </summary>
34
protected override void Authorize(Weblog w)
35
...{
36
base.Authorize(w);
37
38
if (CurrentUser.IsAnonymous)
39
throw new SBException(SBExceptionType.AccessDenied, "不允许匿名用户访问");
40
41
if (!CurrentUser.IsBlogAdministrator)
42
Permissions.AccessCheck(w, Permission.Post, CurrentUser);
43
}
44
45
ApproveStatusDropDownList approveStatus;
46
Repeater FeedbackList;
47
LinkButton ApproveButton;
48
LinkButton ModerateButton;
49
LinkButton DeleteButton;
50
PostBackPager GridPager;
51
52
protected override void AttachChildControls()
53
...{
54
approveStatus = FindControl("ApproveStatus") as ApproveStatusDropDownList;
55
if (approveStatus != null)
56
...{
57
approveStatus.SelectedIndexChanged += new EventHandler(ApproveStatus_SelectedIndexChanged);
58
approveStatus.AutoPostBack = true;
59
}
60
61
FeedbackList = FindControl("FeedbackList") as Repeater;
62
if (FeedbackList != null)
63
FeedbackList.ItemDataBound += new RepeaterItemEventHandler(FeedbackList_ItemDataBound);
64
65
GridPager = FindControl("GridPager") as PostBackPager;
66
if (GridPager != null)
67
...{
68
GridPager.PageIndexChanged += new PagerEventHandler(GridPager_PageIndexChanged);
69
}
70
71
ApproveButton = FindControl("ApproveButton") as LinkButton;
72
if (ApproveButton != null)
73
ApproveButton.Click += new EventHandler(Approve_Click);
74
75
ModerateButton = FindControl("ModerateButton") as LinkButton;
76
if (ModerateButton != null)
77
ModerateButton.Click += new EventHandler(Moderate_Click);
78
79
DeleteButton = FindControl("DeleteButton") as LinkButton;
80
if (DeleteButton != null)
81
...{
82
DeleteButton.Click += new EventHandler(Delete_Click);
83
DeleteButton.Attributes.Add("onclick", "if ( !confirm('是否删除选中的评论?') ) {return false; } ");
84
}
85
}
86
87
void GridPager_PageIndexChanged(object sender, PagerEventArgs e)
88
...{
89
Bind();
90
}
91
92
protected override void OnLoad(EventArgs e)
93
...{
94
base.OnLoad(e);
95
EnsureChildControls();
96
if (!Page.IsPostBack)
97
...{
98
this.ApproveStatus = (ApproveStatus)SBContext.Current.GetIntFromQueryString("ApproveStatus", -1);
99
approveStatus.SelectedValue = this.ApproveStatus;
100
this.Bind();
101
}
102
}
103
104
private void Bind()
105
...{
106
BlogCommentQuery query = new BlogCommentQuery();
107
query.SectionID = this.CurrentWeblog.SectionID;
108
query.ApproveStatus = approveStatus.SelectedValue;
109
query.SortBy = BlogCommentSortBy.PostDate;
110
query.SortOrder = SortOrder.Descending;
111
query.PageIndex = GridPager.PageIndex;
112
query.PageSize = 20;
113
114
PagingDataSet<BlogPost> pds = BlogPosts.GetComments(query);
115
116
this.GridPager.TotalRecords = pds.TotalRecords;
117
this.GridPager.PageSize = pds.PageSize;
118
119
this.FeedbackList.DataSource = pds.Records;
120
this.FeedbackList.DataBind();
121
122
this.SetPageTitle("管理我的评论");
123
}
124
125
#endregion
126
127
FeedbackList Event Handlers#region FeedbackList Event Handlers
128
129
private void FeedbackList_ItemDataBound(object sender, RepeaterItemEventArgs e)
130
...{
131
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
132
...{
133
BlogPost item = e.Item.DataItem as BlogPost;
134
135
CheckBox selector = e.Item.FindControl("Selector") as CheckBox;
136
if (selector != null)
137
...{
138
selector.Attributes["value"] = item.PostID.ToString();
139
}
140
141
HyperLink Subject = e.Item.FindControl("Subject") as HyperLink;
142
if (Subject != null)
143
...{
144
Subject.Text = HttpUtility.HtmlEncode(item.Subject);
145
Subject.NavigateUrl = BlogUrls.Instance().ShortLink(item.ParentID);
146
}
147
148
Label Body = e.Item.FindControl("Body") as Label;
149
if (Body != null)
150
...{
151
Body.Text = HttpUtility.HtmlEncode(HtmlUtils.TrimHtml(item.Body, 250));
152
//Body.ToolTip = HttpUtility.HtmlEncode(item.Body);
153
Body.ToolTip = HtmlUtils.TrimHtml(item.Body, 1000);
154
}
155
156
Image IsModerated = e.Item.FindControl("IsModerated") as Image;
157
if (IsModerated != null)
158
...{
159
if (item.IsApproved)
160
...{
161
IsModerated.ImageUrl = "~/Utility/Icons/icon_true.gif";
162
IsModerated.ToolTip = "该评论已经通过审核";
163
}
164
else
165
...{
166
IsModerated.ImageUrl = "~/Utility/Icons/icon_false.gif";
167
IsModerated.ToolTip = "该评论未通过审核";
168
}
169
}
170
171
HyperLink PostedBy = e.Item.FindControl("PostedBy") as HyperLink;
172
if (PostedBy != null)
173
...{
174
PostedBy.Text = HttpUtility.HtmlEncode(item.Author);
175
176
if (item.Author != "Anonymous")
177
PostedBy.NavigateUrl = UserUrls.Instance().UserChannelHome(item.UserID, UserDomainMenuType.Profile);
178
}
179
180
Literal DatePosted = e.Item.FindControl("DatePosted") as Literal;
181
if (DatePosted != null)
182
...{
183
DatePosted.Text = Formatter.FormatDate(item.PostDate);
184
}
185
186
if (item.HasTitleUrl)
187
...{
188
HyperLink CommentUrl = e.Item.FindControl("CommentUrl") as HyperLink;
189
if (CommentUrl != null)
190
...{
191
192
if (item.HasTitleUrl)
193
...{
194
CommentUrl.Text = "Url";
195
if (item.TitleUrl.StartsWith("http://") || item.TitleUrl.StartsWith("https://"))
196
...{
197
CommentUrl.NavigateUrl = item.TitleUrl;
198
CommentUrl.ToolTip = item.TitleUrl;
199
}
200
else
201
...{
202
CommentUrl.NavigateUrl = "";
203
}
204
}
205
else
206
CommentUrl.Visible = false;
207
}
208
}
209
210
}
211
}
212
213
#endregion
214
215
Button Click Handlers#region Button Click Handlers
216
217
private void Approve_Click(object sender, EventArgs e)
218
...{
219
Int32[] targetItems = this.GetSelectedPostIDs();
220
this.ApproveItems(targetItems);
221
//ResetData();
222
Bind();
223
}
224
225
private void Moderate_Click(object sender, EventArgs e)
226
...{
227
Int32[] targetItems = this.GetSelectedPostIDs();
228
this.ModerateItems(targetItems);
229
//ResetData();
230
Bind();
231
}
232
233
private void Delete_Click(object sender, EventArgs e)
234
...{
235
Int32[] targetItems = this.GetSelectedPostIDs();
236
this.DeleteItems(targetItems);
237
//ResetData();
238
Bind();
239
}
240
241
/**//// <summary>
242
/// 处理批准状态导航事件
243
/// </summary>
244
protected void ApproveStatus_SelectedIndexChanged(Object sender, EventArgs e)
245
...{
246
//Context.Response.Redirect(BlogUrls.Instance().AdminFeedback(CurrentWeblog.ApplicationKey, approveStatus.SelectedValue), true);
247
this.ApproveStatus = approveStatus.SelectedValue;
248
Bind();
249
}
250
251
#endregion
252
253
Command Implementors#region Command Implementors
254
255
protected void ApproveItems(Int32[] targetItems)
256
...{
257
BlogPosts.ApprovePost(CurrentWeblog.SectionID, targetItems, true);
258
}
259
260
protected void ModerateItems(Int32[] targetItems)
261
...{
262
BlogPosts.ApprovePost(CurrentWeblog.SectionID, targetItems, false);
263
}
264
265
protected void DeleteItems(Int32[] targetItems)
266
...{
267
BlogPosts.DeletePosts(targetItems);
268
}
269
270
#endregion
271
272
/**//// <summary>
273
/// Gets the postIDs of the feedback items selected via the Selector checkbox
274
/// </summary>
275
protected Int32[] GetSelectedPostIDs()
276
...{
277
ArrayList selectedItems = new ArrayList();
278
foreach (RepeaterItem item in this.FeedbackList.Items)
279
...{
280
CheckBox selector = item.FindControl("Selector") as CheckBox;
281
if (selector != null && selector.Checked)
282
...{
283
Int32 postID = Convert.ToInt32(selector.Attributes["value"]);
284
selectedItems.Add(postID);
285
}
286
}
287
Int32[] IDs = new Int32[selectedItems.Count];
288
selectedItems.CopyTo(IDs);
289
return IDs;
290
}
291
292
/**//// <summary>
293
/// Resets the data visible in the control
294
/// </summary>
295
protected void ResetData()
296
...{
297
Context.Response.Redirect(Context.Request.RawUrl, true);
298
}
299
300
属性#region 属性
301
302
private ApproveStatus _approveStatus