Commit 9ff689d7 authored by Liang Ding's avatar Liang Ding

Merge branch '0.5.5' of github.com:b3log/b3log-solo into 0.5.5

parents e1fc0c84 a9286462
...@@ -42,7 +42,7 @@ import org.jsoup.Jsoup; ...@@ -42,7 +42,7 @@ import org.jsoup.Jsoup;
* Article receiver (from B3log Symphony). * Article receiver (from B3log Symphony).
* *
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.1, Oct 12, 2012 * @version 1.0.0.2, Nov 19, 2012
* @since 0.5.5 * @since 0.5.5
*/ */
@RequestProcessor @RequestProcessor
...@@ -131,8 +131,12 @@ public final class ArticleReceiver { ...@@ -131,8 +131,12 @@ public final class ArticleReceiver {
article.put(Common.POST_TO_COMMUNITY, false); article.put(Common.POST_TO_COMMUNITY, false);
article.put(Article.ARTICLE_COMMENTABLE, true); article.put(Article.ARTICLE_COMMENTABLE, true);
article.put(Article.ARTICLE_VIEW_PWD, ""); article.put(Article.ARTICLE_VIEW_PWD, "");
String content = article.getString(Article.ARTICLE_CONTENT);
final String articleId = article.getString(Keys.OBJECT_ID);
content += "<br/><p><i>该文章同步自 <a href='http://symphony.b3log.org/article/" + articleId + "'>B3log 社区</a></i></p>";
article.put(Article.ARTICLE_CONTENT, content);
final String articleId = articleMgmtService.addArticle(requestJSONObject); articleMgmtService.addArticle(requestJSONObject);
ret.put(Keys.OBJECT_ID, articleId); ret.put(Keys.OBJECT_ID, articleId);
ret.put(Keys.MSG, "add article succ"); ret.put(Keys.MSG, "add article succ");
......
...@@ -65,7 +65,7 @@ import org.json.JSONObject; ...@@ -65,7 +65,7 @@ import org.json.JSONObject;
* Comment receiver (from B3log Symphony). * Comment receiver (from B3log Symphony).
* *
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.1, Oct 17, 2012 * @version 1.0.0.2, Nov 19, 2012
* @since 0.5.5 * @since 0.5.5
*/ */
@RequestProcessor @RequestProcessor
...@@ -130,6 +130,7 @@ public final class CommentReceiver { ...@@ -130,6 +130,7 @@ public final class CommentReceiver {
* "comment": { * "comment": {
* "userB3Key": "", * "userB3Key": "",
* "oId": "", * "oId": "",
* "commentSymphonyArticleId": "",
* "commentOnArticleId": "", * "commentOnArticleId": "",
* "commentAuthorName": "", * "commentAuthorName": "",
* "commentAuthorEmail": "", * "commentAuthorEmail": "",
...@@ -177,12 +178,15 @@ public final class CommentReceiver { ...@@ -177,12 +178,15 @@ public final class CommentReceiver {
final String commentName = symphonyCmt.getString("commentAuthorName"); final String commentName = symphonyCmt.getString("commentAuthorName");
final String commentEmail = symphonyCmt.getString("commentAuthorEmail").trim().toLowerCase(); final String commentEmail = symphonyCmt.getString("commentAuthorEmail").trim().toLowerCase();
final String commentURL = "http://" + symphonyCmt.optString("commentAuthorURL"); final String commentURL = "http://" + symphonyCmt.optString("commentAuthorURL");
final String commentContent = symphonyCmt.getString(Comment.COMMENT_CONTENT); final String commentId = symphonyCmt.optString(Keys.OBJECT_ID);
String commentContent = symphonyCmt.getString(Comment.COMMENT_CONTENT);
commentContent += "<br/><p><i>该评论同步自 <a href='http://symphony.b3log.org/article/"
+ symphonyCmt.optString("commentSymphonyArticleId") + "#" + commentId + "'>B3log 社区</a></i></p>";
final String originalCommentId = symphonyCmt.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID); final String originalCommentId = symphonyCmt.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
// Step 1: Add comment // Step 1: Add comment
final JSONObject comment = new JSONObject(); final JSONObject comment = new JSONObject();
JSONObject originalComment = null; JSONObject originalComment = null;
final String commentId = symphonyCmt.optString(Keys.OBJECT_ID);
comment.put(Keys.OBJECT_ID, commentId); comment.put(Keys.OBJECT_ID, commentId);
comment.put(Comment.COMMENT_NAME, commentName); comment.put(Comment.COMMENT_NAME, commentName);
comment.put(Comment.COMMENT_EMAIL, commentEmail); comment.put(Comment.COMMENT_EMAIL, commentEmail);
...@@ -209,7 +213,7 @@ public final class CommentReceiver { ...@@ -209,7 +213,7 @@ public final class CommentReceiver {
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, ""); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, "");
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, ""); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, "");
} }
setCommentThumbnailURL(comment); setCommentThumbnailURL(comment);
ret.put(Comment.COMMENT_THUMBNAIL_URL, comment.getString(Comment.COMMENT_THUMBNAIL_URL)); ret.put(Comment.COMMENT_THUMBNAIL_URL, comment.getString(Comment.COMMENT_THUMBNAIL_URL));
// Sets comment on article.... // Sets comment on article....
......
...@@ -41,7 +41,7 @@ import org.json.JSONObject; ...@@ -41,7 +41,7 @@ import org.json.JSONObject;
* This listener is responsible for sending article to B3log Rhythm. * This listener is responsible for sending article to B3log Rhythm.
* *
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.2.2, Nov 2, 2012 * @version 1.0.2.3, Nov 19, 2012
* @since 0.3.1 * @since 0.3.1
*/ */
public final class ArticleSender extends AbstractEventListener<JSONObject> { public final class ArticleSender extends AbstractEventListener<JSONObject> {
...@@ -95,11 +95,11 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> { ...@@ -95,11 +95,11 @@ public final class ArticleSender extends AbstractEventListener<JSONObject> {
} }
final String blogHost = preference.getString(Preference.BLOG_HOST).toLowerCase(); final String blogHost = preference.getString(Preference.BLOG_HOST).toLowerCase();
// if (blogHost.contains("localhost")) { if (blogHost.contains("localhost")) {
// LOGGER.log(Level.INFO, "Blog Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm", LOGGER.log(Level.INFO, "Blog Solo runs on local server, so should not send this article[id={0}, title={1}] to Rhythm",
// new Object[]{originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE)}); new Object[]{originalArticle.getString(Keys.OBJECT_ID), originalArticle.getString(Article.ARTICLE_TITLE)});
// return; return;
// } }
final HTTPRequest httpRequest = new HTTPRequest(); final HTTPRequest httpRequest = new HTTPRequest();
httpRequest.setURL(ADD_ARTICLE_URL); httpRequest.setURL(ADD_ARTICLE_URL);
......
...@@ -89,11 +89,11 @@ public final class CommentSender extends AbstractEventListener<JSONObject> { ...@@ -89,11 +89,11 @@ public final class CommentSender extends AbstractEventListener<JSONObject> {
} }
final String blogHost = preference.getString(Preference.BLOG_HOST).toLowerCase(); final String blogHost = preference.getString(Preference.BLOG_HOST).toLowerCase();
// if (blogHost.contains("localhost")) { if (blogHost.contains("localhost")) {
// LOGGER.log(Level.INFO, "Blog Solo runs on local server, so should not send this comment[id={0}] to Symphony", LOGGER.log(Level.INFO, "Blog Solo runs on local server, so should not send this comment[id={0}] to Symphony",
// new Object[]{orginalComment.getString(Keys.OBJECT_ID)}); new Object[]{originalComment.getString(Keys.OBJECT_ID)});
// return; return;
// } }
final HTTPRequest httpRequest = new HTTPRequest(); final HTTPRequest httpRequest = new HTTPRequest();
httpRequest.setURL(ADD_COMMENT_URL); httpRequest.setURL(ADD_COMMENT_URL);
......
...@@ -26,6 +26,9 @@ import javax.servlet.http.HttpServletResponse; ...@@ -26,6 +26,9 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringEscapeUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.latke.repository.CompositeFilter;
import org.b3log.latke.repository.CompositeFilterOperator;
import org.b3log.latke.repository.Filter;
import org.b3log.latke.repository.FilterOperator; import org.b3log.latke.repository.FilterOperator;
import org.b3log.latke.repository.PropertyFilter; import org.b3log.latke.repository.PropertyFilter;
import org.b3log.latke.repository.Query; import org.b3log.latke.repository.Query;
...@@ -64,7 +67,7 @@ import org.json.JSONObject; ...@@ -64,7 +67,7 @@ import org.json.JSONObject;
* Feed (Atom/RSS) processor. * Feed (Atom/RSS) processor.
* *
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.1.0.1, Aug 2, 2012 * @version 1.1.0.2, Nov 15, 2012
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -124,9 +127,12 @@ public final class FeedProcessor { ...@@ -124,9 +127,12 @@ public final class FeedProcessor {
feed.setLink("http://" + blogHost + "/blog-articles-feed.do"); feed.setLink("http://" + blogHost + "/blog-articles-feed.do");
feed.setId("http://" + blogHost + "/"); feed.setId("http://" + blogHost + "/");
final List<Filter> filters = new ArrayList<Filter>();
filters.add(new PropertyFilter(Article.ARTICLE_IS_PUBLISHED, FilterOperator.EQUAL, true));
filters.add(new PropertyFilter(Article.ARTICLE_VIEW_PWD, FilterOperator.EQUAL, ""));
final Query query = new Query().setCurrentPageNum(1). final Query query = new Query().setCurrentPageNum(1).
setPageSize(ENTRY_OUTPUT_CNT). setPageSize(ENTRY_OUTPUT_CNT).
setFilter(new PropertyFilter(Article.ARTICLE_IS_PUBLISHED, FilterOperator.EQUAL, true)). setFilter(new CompositeFilter(CompositeFilterOperator.AND, filters)).
addSort(Article.ARTICLE_UPDATE_DATE, SortDirection.DESCENDING). addSort(Article.ARTICLE_UPDATE_DATE, SortDirection.DESCENDING).
setPageCount(1); setPageCount(1);
...@@ -149,7 +155,7 @@ public final class FeedProcessor { ...@@ -149,7 +155,7 @@ public final class FeedProcessor {
final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE)); final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE));
entry.setTitle(title); entry.setTitle(title);
final String summary = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT)) final String summary = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT))
: StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT)); : StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT));
entry.setSummary(summary); entry.setSummary(summary);
final Date updated = (Date) article.get(Article.ARTICLE_UPDATE_DATE); final Date updated = (Date) article.get(Article.ARTICLE_UPDATE_DATE);
entry.setUpdated(updated); entry.setUpdated(updated);
...@@ -249,7 +255,8 @@ public final class FeedProcessor { ...@@ -249,7 +255,8 @@ public final class FeedProcessor {
final JSONObject tagArticleRelation = tagArticleRelations.getJSONObject(i); final JSONObject tagArticleRelation = tagArticleRelations.getJSONObject(i);
final String articleId = tagArticleRelation.getString(Article.ARTICLE + "_" + Keys.OBJECT_ID); final String articleId = tagArticleRelation.getString(Article.ARTICLE + "_" + Keys.OBJECT_ID);
final JSONObject article = articleRepository.get(articleId); final JSONObject article = articleRepository.get(articleId);
if (article.getBoolean(Article.ARTICLE_IS_PUBLISHED)) { // Skips the unpublished article if (article.getBoolean(Article.ARTICLE_IS_PUBLISHED) // Skips the unpublished article
&& Strings.isEmptyOrNull(article.optString(Article.ARTICLE_VIEW_PWD))) { // Skips article with password
articles.add(article); articles.add(article);
} }
} }
...@@ -270,7 +277,7 @@ public final class FeedProcessor { ...@@ -270,7 +277,7 @@ public final class FeedProcessor {
final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE)); final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE));
entry.setTitle(title); entry.setTitle(title);
final String summary = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT)) final String summary = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT))
: StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT)); : StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT));
entry.setSummary(summary); entry.setSummary(summary);
final Date updated = (Date) article.get(Article.ARTICLE_UPDATE_DATE); final Date updated = (Date) article.get(Article.ARTICLE_UPDATE_DATE);
entry.setUpdated(updated); entry.setUpdated(updated);
...@@ -339,9 +346,12 @@ public final class FeedProcessor { ...@@ -339,9 +346,12 @@ public final class FeedProcessor {
channel.setLanguage(language + '-' + country); channel.setLanguage(language + '-' + country);
channel.setDescription(blogSubtitle); channel.setDescription(blogSubtitle);
final List<Filter> filters = new ArrayList<Filter>();
filters.add(new PropertyFilter(Article.ARTICLE_IS_PUBLISHED, FilterOperator.EQUAL, true));
filters.add(new PropertyFilter(Article.ARTICLE_VIEW_PWD, FilterOperator.EQUAL, ""));
final Query query = new Query().setCurrentPageNum(1). final Query query = new Query().setCurrentPageNum(1).
setPageSize(ENTRY_OUTPUT_CNT). setPageSize(ENTRY_OUTPUT_CNT).
setFilter(new PropertyFilter(Article.ARTICLE_IS_PUBLISHED, FilterOperator.EQUAL, true)). setFilter(new CompositeFilter(CompositeFilterOperator.AND, filters)).
addSort(Article.ARTICLE_UPDATE_DATE, SortDirection.DESCENDING). addSort(Article.ARTICLE_UPDATE_DATE, SortDirection.DESCENDING).
setPageCount(1); setPageCount(1);
...@@ -364,7 +374,7 @@ public final class FeedProcessor { ...@@ -364,7 +374,7 @@ public final class FeedProcessor {
final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE)); final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE));
item.setTitle(title); item.setTitle(title);
final String description = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT)) final String description = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT))
: StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT)); : StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT));
item.setDescription(description); item.setDescription(description);
final Date pubDate = (Date) article.get(Article.ARTICLE_UPDATE_DATE); final Date pubDate = (Date) article.get(Article.ARTICLE_UPDATE_DATE);
item.setPubDate(pubDate); item.setPubDate(pubDate);
...@@ -467,7 +477,8 @@ public final class FeedProcessor { ...@@ -467,7 +477,8 @@ public final class FeedProcessor {
final JSONObject tagArticleRelation = tagArticleRelations.getJSONObject(i); final JSONObject tagArticleRelation = tagArticleRelations.getJSONObject(i);
final String articleId = tagArticleRelation.getString(Article.ARTICLE + "_" + Keys.OBJECT_ID); final String articleId = tagArticleRelation.getString(Article.ARTICLE + "_" + Keys.OBJECT_ID);
final JSONObject article = articleRepository.get(articleId); final JSONObject article = articleRepository.get(articleId);
if (article.getBoolean(Article.ARTICLE_IS_PUBLISHED)) { // Skips the unpublished article if (article.getBoolean(Article.ARTICLE_IS_PUBLISHED) // Skips the unpublished article
&& Strings.isEmptyOrNull(article.optString(Article.ARTICLE_VIEW_PWD))) { // Skips article with password
articles.add(article); articles.add(article);
} }
} }
...@@ -488,7 +499,7 @@ public final class FeedProcessor { ...@@ -488,7 +499,7 @@ public final class FeedProcessor {
final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE)); final String title = StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_TITLE));
item.setTitle(title); item.setTitle(title);
final String description = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT)) final String description = isFullContent ? StringEscapeUtils.escapeXml(article.getString(Article.ARTICLE_CONTENT))
: StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT)); : StringEscapeUtils.escapeXml(article.optString(Article.ARTICLE_ABSTRACT));
item.setDescription(description); item.setDescription(description);
final Date pubDate = (Date) article.get(Article.ARTICLE_UPDATE_DATE); final Date pubDate = (Date) article.get(Article.ARTICLE_UPDATE_DATE);
item.setPubDate(pubDate); item.setPubDate(pubDate);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
# #
# Description: B3log Solo language configurations(en_US). # Description: B3log Solo language configurations(en_US).
# Version: 2.1.0.0, Sep 19, 2012 # Version: 2.1.0.1, Nov 14, 2012
# Author: Liang Ding # Author: Liang Ding
# Author: Liyuan Li # Author: Liyuan Li
# Author: Dongxu Wang # Author: Dongxu Wang
...@@ -257,7 +257,7 @@ abstractLabel=Abstract ...@@ -257,7 +257,7 @@ abstractLabel=Abstract
fullContentLabel=Full Content fullContentLabel=Full Content
author1Label=Author: author1Label=Author:
authorLabel=Author authorLabel=Author
keyOfSolo1Label=Solo Key: keyOfSolo1Label=B3log Key:
articleLabel=Article articleLabel=Article
tagArticlesLabel=Tag Articles tagArticlesLabel=Tag Articles
dateArticlesLabel=Archive Date Articles dateArticlesLabel=Archive Date Articles
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
# #
# Description: B3log Solo default language configurations(zh_CN). # Description: B3log Solo default language configurations(zh_CN).
# Version: 2.1.0.6, Sep 7, 2012 # Version: 2.1.0.7, Nov 14, 2012
# Author: Liang Ding # Author: Liang Ding
# Author: Liyuan Li # Author: Liyuan Li
# Author: Dongxu Wang # Author: Dongxu Wang
...@@ -257,7 +257,7 @@ abstractLabel=\u6458\u8981 ...@@ -257,7 +257,7 @@ abstractLabel=\u6458\u8981
fullContentLabel=\u5168\u6587 fullContentLabel=\u5168\u6587
author1Label=\u4f5c\u8005\uff1a author1Label=\u4f5c\u8005\uff1a
authorLabel=\u4f5c\u8005 authorLabel=\u4f5c\u8005
keyOfSolo1Label=Solo Key\uff1a keyOfSolo1Label=B3log Key\uff1a
articleLabel=\u6587\u7ae0 articleLabel=\u6587\u7ae0
tagArticlesLabel=\u6807\u7b7e\u6587\u7ae0\u5217\u8868 tagArticlesLabel=\u6807\u7b7e\u6587\u7ae0\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u6587\u7ae0\u5217\u8868 dateArticlesLabel=\u5b58\u6863\u6587\u7ae0\u5217\u8868
......
...@@ -20,11 +20,11 @@ ...@@ -20,11 +20,11 @@
<a href="#tools/preference/setting">${paramSettingsLabel}</a> <a href="#tools/preference/setting">${paramSettingsLabel}</a>
</div> </div>
</li> </li>
<!--li> <li>
<div id="tabPreference_solo"> <div id="tabPreference_solo">
<a href="#tools/preference/solo">Solo</a> <a href="#tools/preference/solo">B3log</a>
</div> </div>
</li--> </li>
</ul> </ul>
</div> </div>
<div id="tabPreferencePanel" class="sub-tabs-main"> <div id="tabPreferencePanel" class="sub-tabs-main">
......
/* /*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team * Copyright (c) 2009, 2010, 2011, 2012, B3log Team
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/** /**
* index for admin * index for admin
* *
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a> * @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @version 1.0.2.0, Aug 30, 2012 * @version 1.0.2.0, Aug 30, 2012
*/ */
var Admin = function () { var Admin = function () {
this.register = {}; this.register = {};
// 工具栏下的工具 // 工具栏下的工具
this.tools = ['#page-list', '#file-list', '#link-list', '#preference', this.tools = ['#page-list', '#file-list', '#link-list', '#preference',
'#user-list', '#plugin-list', '#others']; '#user-list', '#plugin-list', '#others'];
// 多用户时,一般用户不能使用的功能 // 多用户时,一般用户不能使用的功能
this.adTools = ['link-list', 'preference', 'file-list', 'page-list', this.adTools = ['link-list', 'preference', 'file-list', 'page-list',
'user-list', 'plugin-list', 'others']; 'user-list', 'plugin-list', 'others'];
}; };
$.extend(Admin.prototype, { $.extend(Admin.prototype, {
/* /*
* 登出 * 登出
*/ */
logout: function () { logout: function () {
window.location.href = latkeConfig.servePath + "/logout?goto=" + latkeConfig.servePath; window.location.href = latkeConfig.servePath + "/logout?goto=" + latkeConfig.servePath;
}, },
/* /*
* 根据当前页数设置 hash * 根据当前页数设置 hash
* @currentPage {string} 当前页 * @currentPage {string} 当前页
*/ */
setHashByPage: function (currentPage) { setHashByPage: function (currentPage) {
var hash = window.location.hash, var hash = window.location.hash,
hashList = hash.split("/"); hashList = hash.split("/");
if (/^\d*$/.test(hashList[hashList.length - 1])) { if (/^\d*$/.test(hashList[hashList.length - 1])) {
hashList[hashList.length - 1] = currentPage; hashList[hashList.length - 1] = currentPage;
} else { } else {
hashList.push(currentPage); hashList.push(currentPage);
} }
window.location.hash = hashList.join("/"); window.location.hash = hashList.join("/");
}, },
/* /*
* 设置某个 tab 被选择 * 设置某个 tab 被选择
* @id tab id * @id tab id
*/ */
selectTab: function (id) { selectTab: function (id) {
window.location.hash = "#" + id; window.location.hash = "#" + id;
}, },
/* /*
* 根据当前 hash 解析出当前页数及 hash 数组。 * 根据当前 hash 解析出当前页数及 hash 数组。
*/ */
analyseHash: function () { analyseHash: function () {
var hash = window.location.hash; var hash = window.location.hash;
var tag = hash.substr(1, hash.length - 1); var tag = hash.substr(1, hash.length - 1);
var tagList = tag.split("/"); var tagList = tag.split("/");
var tags = {}; var tags = {};
tags.page = 1, tags.page = 1,
tags.hashList = []; tags.hashList = [];
for (var i = 0; i < tagList.length; i++) { for (var i = 0; i < tagList.length; i++) {
if (i === tagList.length - 1 && (/^\d+$/.test(tagList[i]))) { if (i === tagList.length - 1 && (/^\d+$/.test(tagList[i]))) {
tags.page = tagList[i]; tags.page = tagList[i];
} else { } else {
tags.hashList.push(tagList[i]); tags.hashList.push(tagList[i]);
} }
} }
return tags; return tags;
}, },
/* /*
* 根据当前 hash 设置当前 tab * 根据当前 hash 设置当前 tab
*/ */
setCurByHash: function () { setCurByHash: function () {
var tags = admin.analyseHash(); var tags = admin.analyseHash();
var tab = tags.hashList[1], var tab = tags.hashList[1],
subTab = tags.hashList[2]; subTab = tags.hashList[2];
if (tags.hashList.length === 1) { if (tags.hashList.length === 1) {
tab = tags.hashList[0]; tab = tags.hashList[0];
} }
if (tab === "") { if (tab === "") {
return; return;
} }
// 离开编辑器时进行提示 // 离开编辑器时进行提示
try { try {
// 除更新、发布、取消发布文章,编辑器中无内容外,离开编辑器需进行提示。 // 除更新、发布、取消发布文章,编辑器中无内容外,离开编辑器需进行提示。
if (tab !== "article" && admin.article.isConfirm && if (tab !== "article" && admin.article.isConfirm &&
admin.editorArticle.getContent().replace(/\s/g, '') !== "") { admin.editorArticle.getContent().replace(/\s/g, '') !== "") {
if (!confirm(Label.editorLeaveLabel)) { if (!confirm(Label.editorLeaveLabel)) {
window.location.hash = "#article/article"; window.location.hash = "#article/article";
return; return;
} }
} }
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。 // 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if (tab === "article" && admin.article.isConfirm && if (tab === "article" && admin.article.isConfirm &&
admin.editorArticle.getContent().replace(/\s/g, '') !== "") { admin.editorArticle.getContent().replace(/\s/g, '') !== "") {
return; return;
} }
} catch (e) { } catch (e) {
var $articleContent = $('#articleContent'); var $articleContent = $('#articleContent');
if ($articleContent.length > 0) { if ($articleContent.length > 0) {
if (tab !== "article" && admin.article.isConfirm && if (tab !== "article" && admin.article.isConfirm &&
$articleContent.val().replace(/\s/g, '') !== "") { $articleContent.val().replace(/\s/g, '') !== "") {
if (!confirm(Label.editorLeaveLabel)) { if (!confirm(Label.editorLeaveLabel)) {
window.location.hash = "#article/article"; window.location.hash = "#article/article";
return; return;
} }
} }
// 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。 // 不离开编辑器,hash 需变为 "#article/article",此时不需要做任何处理。
if (tab === "article" && admin.article.isConfirm && if (tab === "article" && admin.article.isConfirm &&
$articleContent.val().replace(/\s/g, '') !== "") { $articleContent.val().replace(/\s/g, '') !== "") {
return; return;
} }
} }
} }
// clear article // clear article
if (tab !== "article" && admin.editorArticle.setContent) { if (tab !== "article" && admin.editorArticle.setContent) {
admin.article.clear(); admin.article.clear();
} }
admin.article.isConfirm = true; admin.article.isConfirm = true;
$("#tabs").tabs("setCurrent", tab); $("#tabs").tabs("setCurrent", tab);
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
if ($("#tabsPanel_" + tab).length === 1) { if ($("#tabsPanel_" + tab).length === 1) {
if ($("#tabsPanel_" + tab).html().replace(/\s/g, "") === "") { if ($("#tabsPanel_" + tab).html().replace(/\s/g, "") === "") {
// 还未加载 HTML // 还未加载 HTML
$("#tabsPanel_" + tab).load("admin-" + tab + ".do", function () { $("#tabsPanel_" + tab).load("admin-" + tab + ".do", function () {
// 页面加载完后,回调初始函数 // 页面加载完后,回调初始函数
if (tab === "article" && admin.article.status.id) { if (tab === "article" && admin.article.status.id) {
// 当文章页面编辑器未初始化时,调用更新文章需先初始化编辑器 // 当文章页面编辑器未初始化时,调用更新文章需先初始化编辑器
admin.register[tab].init.call(admin.register[tab].obj, admin.article.getAndSet); admin.register[tab].init.call(admin.register[tab].obj, admin.article.getAndSet);
} else { } else {
admin.register[tab].init.call(admin.register[tab].obj, tags.page); admin.register[tab].init.call(admin.register[tab].obj, tags.page);
} }
// 页面包含子 tab,需根据 hash 定位到相应的 tab // 页面包含子 tab,需根据 hash 定位到相应的 tab
if (subTab) { if (subTab) {
$("#tab" + tab.substring(0, 1).toUpperCase() + tab.substring(1)). $("#tab" + tab.substring(0, 1).toUpperCase() + tab.substring(1)).
tabs("setCurrent", subTab); tabs("setCurrent", subTab);
} }
// 根据 hash 调用现有的插件函数 // 根据 hash 调用现有的插件函数
admin.plugin.setCurByHash(tags); admin.plugin.setCurByHash(tags);
}); });
} else { } else {
if (tab === "article" && admin.article.status.id) { if (tab === "article" && admin.article.status.id) {
admin.article.getAndSet(); admin.article.getAndSet();
} }
// 已加载过 HTML,只需调用刷新函数 // 已加载过 HTML,只需调用刷新函数
if (admin.register[tab] && admin.register[tab].refresh) { if (admin.register[tab] && admin.register[tab].refresh) {
admin.register[tab].refresh.call(admin.register[tab].obj, tags.page); admin.register[tab].refresh.call(admin.register[tab].obj, tags.page);
} }
// 页面包含子 tab,需根据 hash 定位到相应的 tab // 页面包含子 tab,需根据 hash 定位到相应的 tab
if (subTab) { if (subTab) {
$("#tab" + tab.substring(0, 1).toUpperCase() + tab.substring(1)). $("#tab" + tab.substring(0, 1).toUpperCase() + tab.substring(1)).
tabs("setCurrent", subTab); tabs("setCurrent", subTab);
} }
// 根据 hash 调用现有的插件函数 // 根据 hash 调用现有的插件函数
admin.plugin.setCurByHash(tags); admin.plugin.setCurByHash(tags);
} }
} else { } else {
$("#tipMsg").text("Error: No tab! " + Label.reportIssueLabel); $("#tipMsg").text("Error: No tab! " + Label.reportIssueLabel);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}, },
/* /*
* 初始化整个后台 * 初始化整个后台
*/ */
init: function () { init: function () {
//window.onerror = Util.error; //window.onerror = Util.error;
Util.killIE(); Util.killIE();
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
// 构建 tabs // 构建 tabs
$("#tabs").tabs(); $("#tabs").tabs();
// tipMsg // tipMsg
setInterval(function () { setInterval(function () {
if($("#tipMsg").text() !== "") { if($("#tipMsg").text() !== "") {
setTimeout(function () { setTimeout(function () {
$("#tipMsg").text(""); $("#tipMsg").text("");
}, 7000); }, 7000);
} }
}, 6000); }, 6000);
$("#loadMsg").text(""); $("#loadMsg").text("");
}, },
/* /*
* @description tools and article collapse * @description tools and article collapse
* @param {bom} it 触发事件对象 * @param {bom} it 触发事件对象
*/ */
collapseNav: function (it) { collapseNav: function (it) {
var subNav = $(it).next(); var subNav = $(it).next();
subNav.slideToggle("normal", function () { subNav.slideToggle("normal", function () {
if (this.style.display !== "none") { if (this.style.display !== "none") {
$(it).find(".ico-arrow-down")[0].className = "ico-arrow-up"; $(it).find(".ico-arrow-down")[0].className = "ico-arrow-up";
} else { } else {
$(it).find(".ico-arrow-up")[0].className = "ico-arrow-down"; $(it).find(".ico-arrow-up")[0].className = "ico-arrow-down";
} }
}); });
}, },
/* /*
* 后台及当前页面所需插件初始化完后,对权限进行控制及当前页面属于 tools 时,tools 选项需展开。 * 后台及当前页面所需插件初始化完后,对权限进行控制及当前页面属于 tools 时,tools 选项需展开。
*/ */
inited: function () { inited: function () {
// Removes functions with the current user role // Removes functions with the current user role
if (Label.userRole !== "adminRole") { if (Label.userRole !== "adminRole") {
for (var i = 0; i < this.adTools.length; i++) { for (var i = 0; i < this.adTools.length; i++) {
$("#tabs").tabs("remove", this.adTools[i]); $("#tabs").tabs("remove", this.adTools[i]);
} }
} else { } else {
// 当前 tab 属于 Tools 时,设其展开 // 当前 tab 属于 Tools 时,设其展开
for (var j = 0; j < this.tools.length; j++) { for (var j = 0; j < this.tools.length; j++) {
if ("#" + window.location.hash.split("/")[1] === this.tools[j]) { if ("#" + window.location.hash.split("/")[1] === this.tools[j]) {
$("#tabToolsTitle").click(); $("#tabToolsTitle").click();
break; break;
} }
} }
} }
this.setCurByHash(); this.setCurByHash();
} }
}); });
var admin = new Admin();/* var admin = new Admin();/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team * Copyright (c) 2009, 2010, 2011, 2012, B3log Team
* *
...@@ -3101,326 +3101,326 @@ admin.register["plugin-list"] = { ...@@ -3101,326 +3101,326 @@ admin.register["plugin-list"] = {
"refresh": function () { "refresh": function () {
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}/* }/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team * Copyright (c) 2009, 2010, 2011, 2012, B3log Team
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/** /**
* user list for admin * user list for admin
* *
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a> * @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.1.3, Aug 30, 2012 * @version 1.0.1.3, Aug 30, 2012
*/ */
/* user-list 相关操作 */ /* user-list 相关操作 */
admin.userList = { admin.userList = {
tablePagination: new TablePaginate("user"), tablePagination: new TablePaginate("user"),
pageInfo: { pageInfo: {
currentCount: 1, currentCount: 1,
pageCount: 1, pageCount: 1,
currentPage: 1 currentPage: 1
}, },
userInfo: { userInfo: {
'oId': "", 'oId': "",
"userRole": "" "userRole": ""
}, },
/* /*
* 初始化 table, pagination * 初始化 table, pagination
*/ */
init: function (page) { init: function (page) {
this.tablePagination.buildTable([{ this.tablePagination.buildTable([{
style: "padding-left: 12px;", style: "padding-left: 12px;",
text: Label.commentNameLabel, text: Label.commentNameLabel,
index: "userName", index: "userName",
width: 230 width: 230
}, { }, {
style: "padding-left: 12px;", style: "padding-left: 12px;",
text: Label.commentEmailLabel, text: Label.commentEmailLabel,
index: "userEmail", index: "userEmail",
minWidth: 180 minWidth: 180
}, { }, {
style: "padding-left: 12px;", style: "padding-left: 12px;",
text: Label.administratorLabel, text: Label.administratorLabel,
index: "isAdmin", index: "isAdmin",
width: 120 width: 120
}]); }]);
this.tablePagination.initPagination(); this.tablePagination.initPagination();
this.getList(page); this.getList(page);
$("#userUpdate").dialog({ $("#userUpdate").dialog({
width: 700, width: 700,
height: 190, height: 190,
"modal": true, "modal": true,
"hideFooter": true "hideFooter": true
}); });
}, },
/* /*
* 根据当前页码获取列表 * 根据当前页码获取列表
* @pagNum 当前页码 * @pagNum 当前页码
*/ */
getList: function (pageNum) { getList: function (pageNum) {
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
this.pageInfo.currentPage = pageNum; this.pageInfo.currentPage = pageNum;
var that = this; var that = this;
$.ajax({ $.ajax({
url: latkeConfig.servePath + "/console/users/" + pageNum + "/" + Label.PAGE_SIZE + "/" + Label.WINDOW_SIZE, url: latkeConfig.servePath + "/console/users/" + pageNum + "/" + Label.PAGE_SIZE + "/" + Label.WINDOW_SIZE,
type: "GET", type: "GET",
cache: false, cache: false,
success: function(result, textStatus){ success: function(result, textStatus){
$("#tipMsg").text(result.msg); $("#tipMsg").text(result.msg);
if (!result.sc) { if (!result.sc) {
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
var users = result.users; var users = result.users;
var userData = []; var userData = [];
admin.userList.pageInfo.currentCount = users.length; admin.userList.pageInfo.currentCount = users.length;
admin.userList.pageInfo.pageCount = result.pagination.paginationPageCount; admin.userList.pageInfo.pageCount = result.pagination.paginationPageCount;
if (users.length < 1) { if (users.length < 1) {
$("#tipMsg").text("No user " + Label.reportIssueLabel); $("#tipMsg").text("No user " + Label.reportIssueLabel);
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
for (var i = 0; i < users.length; i++) { for (var i = 0; i < users.length; i++) {
userData[i] = {}; userData[i] = {};
userData[i].userName = users[i].userName; userData[i].userName = users[i].userName;
userData[i].userEmail = users[i].userEmail; userData[i].userEmail = users[i].userEmail;
if ("adminRole" === users[i].userRole) { if ("adminRole" === users[i].userRole) {
userData[i].isAdmin = "&nbsp;" + Label.administratorLabel; userData[i].isAdmin = "&nbsp;" + Label.administratorLabel;
userData[i].expendRow = "<a href='javascript:void(0)' onclick=\"admin.userList.get('" + userData[i].expendRow = "<a href='javascript:void(0)' onclick=\"admin.userList.get('" +
users[i].oId + "', '" + users[i].userRole + "')\">" + Label.updateLabel + "</a>"; users[i].oId + "', '" + users[i].userRole + "')\">" + Label.updateLabel + "</a>";
} else { } else {
userData[i].expendRow = "<a href='javascript:void(0)' onclick=\"admin.userList.get('" + userData[i].expendRow = "<a href='javascript:void(0)' onclick=\"admin.userList.get('" +
users[i].oId + "', '" + users[i].userRole + "')\">" + Label.updateLabel + "</a>\ users[i].oId + "', '" + users[i].userRole + "')\">" + Label.updateLabel + "</a>\
<a href='javascript:void(0)' onclick=\"admin.userList.del('" + users[i].oId + "')\">" + Label.removeLabel + "</a>"; <a href='javascript:void(0)' onclick=\"admin.userList.del('" + users[i].oId + "')\">" + Label.removeLabel + "</a>";
userData[i].isAdmin = Label.commonUserLabel; userData[i].isAdmin = Label.commonUserLabel;
} }
} }
that.tablePagination.updateTablePagination(userData, pageNum, result.pagination); that.tablePagination.updateTablePagination(userData, pageNum, result.pagination);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}); });
}, },
/* /*
* 添加用户 * 添加用户
*/ */
add: function () { add: function () {
if (this.validate()) { if (this.validate()) {
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
$("#tipMsg").text(""); $("#tipMsg").text("");
var requestJSONObject = { var requestJSONObject = {
"userName": $("#userName").val(), "userName": $("#userName").val(),
"userEmail": $("#userEmail").val(), "userEmail": $("#userEmail").val(),
"userPassword": $("#userPassword").val() "userPassword": $("#userPassword").val()
}; };
$.ajax({ $.ajax({
url: latkeConfig.servePath + "/console/user/", url: latkeConfig.servePath + "/console/user/",
type: "POST", type: "POST",
cache: false, cache: false,
data: JSON.stringify(requestJSONObject), data: JSON.stringify(requestJSONObject),
success: function(result, textStatus){ success: function(result, textStatus){
$("#tipMsg").text(result.msg); $("#tipMsg").text(result.msg);
if (!result.sc) { if (!result.sc) {
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
$("#userName").val(""); $("#userName").val("");
$("#userEmail").val(""); $("#userEmail").val("");
$("#userPassword").val(""); $("#userPassword").val("");
if (admin.userList.pageInfo.currentCount === Label.PAGE_SIZE && if (admin.userList.pageInfo.currentCount === Label.PAGE_SIZE &&
admin.userList.pageInfo.currentPage === admin.userList.pageInfo.pageCount) { admin.userList.pageInfo.currentPage === admin.userList.pageInfo.pageCount) {
admin.userList.pageInfo.pageCount++; admin.userList.pageInfo.pageCount++;
} }
var hashList = window.location.hash.split("/"); var hashList = window.location.hash.split("/");
if (admin.userList.pageInfo.pageCount !== parseInt(hashList[hashList.length - 1])) { if (admin.userList.pageInfo.pageCount !== parseInt(hashList[hashList.length - 1])) {
admin.setHashByPage(admin.userList.pageInfo.pageCount); admin.setHashByPage(admin.userList.pageInfo.pageCount);
} }
admin.userList.getList(admin.userList.pageInfo.pageCount); admin.userList.getList(admin.userList.pageInfo.pageCount);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}); });
} }
}, },
/* /*
* 获取用户 * 获取用户
* @id 用户 id * @id 用户 id
*/ */
get: function (id, userRole) { get: function (id, userRole) {
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
$("#userUpdate").dialog("open"); $("#userUpdate").dialog("open");
$.ajax({ $.ajax({
url: latkeConfig.servePath + "/console/user/" + id, url: latkeConfig.servePath + "/console/user/" + id,
type: "GET", type: "GET",
cache: false, cache: false,
success: function(result, textStatus){ success: function(result, textStatus){
$("#tipMsg").text(result.msg); $("#tipMsg").text(result.msg);
if (!result.sc) { if (!result.sc) {
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
var $userEmailUpdate = $("#userEmailUpdate"); var $userEmailUpdate = $("#userEmailUpdate");
$("#userNameUpdate").val(result.user.userName).data("userInfo", { $("#userNameUpdate").val(result.user.userName).data("userInfo", {
'oId': id, 'oId': id,
"userRole": userRole "userRole": userRole
}); });
$userEmailUpdate.val(result.user.userEmail); $userEmailUpdate.val(result.user.userEmail);
if ("adminRole" === userRole) { if ("adminRole" === userRole) {
$userEmailUpdate.attr("disabled", "disabled"); $userEmailUpdate.attr("disabled", "disabled");
} else { } else {
$userEmailUpdate.removeAttr("disabled"); $userEmailUpdate.removeAttr("disabled");
} }
$("#userPasswordUpdate").val(result.user.userPassword); $("#userPasswordUpdate").val(result.user.userPassword);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}); });
}, },
/* /*
* 更新用户 * 更新用户
*/ */
update: function () { update: function () {
if (this.validate("Update")) { if (this.validate("Update")) {
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
$("#tipMsg").text(""); $("#tipMsg").text("");
var userInfo = $("#userNameUpdate").data("userInfo"); var userInfo = $("#userNameUpdate").data("userInfo");
var requestJSONObject = { var requestJSONObject = {
"userName": $("#userNameUpdate").val(), "userName": $("#userNameUpdate").val(),
"oId": userInfo.oId, "oId": userInfo.oId,
"userEmail": $("#userEmailUpdate").val(), "userEmail": $("#userEmailUpdate").val(),
"userRole": userInfo.userRole, "userRole": userInfo.userRole,
"userPassword": $("#userPasswordUpdate").val() "userPassword": $("#userPasswordUpdate").val()
}; };
$.ajax({ $.ajax({
url: latkeConfig.servePath + "/console/user/", url: latkeConfig.servePath + "/console/user/",
type: "PUT", type: "PUT",
cache: false, cache: false,
data: JSON.stringify(requestJSONObject), data: JSON.stringify(requestJSONObject),
success: function(result, textStatus){ success: function(result, textStatus){
$("#userUpdate").dialog("close"); $("#userUpdate").dialog("close");
$("#tipMsg").text(result.msg); $("#tipMsg").text(result.msg);
if (!result.sc) { if (!result.sc) {
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
admin.userList.getList(admin.userList.pageInfo.currentPage); admin.userList.getList(admin.userList.pageInfo.currentPage);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}); });
} }
}, },
/* /*
* 删除用户 * 删除用户
* @id 用户 id * @id 用户 id
*/ */
del: function (id) { del: function (id) {
var isDelete = confirm(Label.confirmRemoveLabel); var isDelete = confirm(Label.confirmRemoveLabel);
if (isDelete) { if (isDelete) {
$("#loadMsg").text(Label.loadingLabel); $("#loadMsg").text(Label.loadingLabel);
$("#tipMsg").text(""); $("#tipMsg").text("");
$.ajax({ $.ajax({
url: latkeConfig.servePath + "/console/user/" + id, url: latkeConfig.servePath + "/console/user/" + id,
type: "DELETE", type: "DELETE",
cache: false, cache: false,
success: function(result, textStatus){ success: function(result, textStatus){
$("#tipMsg").text(result.msg); $("#tipMsg").text(result.msg);
if (!result.sc) { if (!result.sc) {
$("#loadMsg").text(""); $("#loadMsg").text("");
return; return;
} }
var pageNum = admin.userList.pageInfo.currentPage; var pageNum = admin.userList.pageInfo.currentPage;
if (admin.userList.pageInfo.currentCount === 1 && admin.userList.pageInfo.pageCount !== 1 && if (admin.userList.pageInfo.currentCount === 1 && admin.userList.pageInfo.pageCount !== 1 &&
admin.userList.pageInfo.currentPage === admin.userList.pageInfo.pageCount) { admin.userList.pageInfo.currentPage === admin.userList.pageInfo.pageCount) {
admin.userList.pageInfo.pageCount--; admin.userList.pageInfo.pageCount--;
pageNum = admin.userList.pageInfo.pageCount; pageNum = admin.userList.pageInfo.pageCount;
} }
var hashList = window.location.hash.split("/"); var hashList = window.location.hash.split("/");
if (pageNum !== parseInt(hashList[hashList.length - 1])) { if (pageNum !== parseInt(hashList[hashList.length - 1])) {
admin.setHashByPage(pageNum); admin.setHashByPage(pageNum);
} }
admin.userList.getList(pageNum); admin.userList.getList(pageNum);
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}); });
} }
}, },
/* /*
* 验证字段 * 验证字段
* @status 更新或者添加时进行验证 * @status 更新或者添加时进行验证
*/ */
validate: function (status) { validate: function (status) {
if (!status) { if (!status) {
status = ""; status = "";
} }
var userName = $("#userName" + status).val().replace(/(^\s*)|(\s*$)/g, ""); var userName = $("#userName" + status).val().replace(/(^\s*)|(\s*$)/g, "");
if (2 > userName.length || userName.length > 20) { if (2 > userName.length || userName.length > 20) {
$("#tipMsg").text(Label.nameTooLongLabel); $("#tipMsg").text(Label.nameTooLongLabel);
$("#userName" + status).focus(); $("#userName" + status).focus();
}else if ($("#userEmail" + status).val().replace(/\s/g, "") === "") { }else if ($("#userEmail" + status).val().replace(/\s/g, "") === "") {
$("#tipMsg").text(Label.mailCannotEmptyLabel); $("#tipMsg").text(Label.mailCannotEmptyLabel);
$("#userEmail" + status).focus(); $("#userEmail" + status).focus();
} else if(!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($("#userEmail" + status).val())) { } else if(!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($("#userEmail" + status).val())) {
$("#tipMsg").text(Label.mailInvalidLabel); $("#tipMsg").text(Label.mailInvalidLabel);
$("#userEmail" + status).focus(); $("#userEmail" + status).focus();
} else if ($("#userPassword" + status).val().replace(/\s/g, "") === "") { } else if ($("#userPassword" + status).val().replace(/\s/g, "") === "") {
$("#tipMsg").text(Label.passwordEmptyLabel); $("#tipMsg").text(Label.passwordEmptyLabel);
$("#userPassword" + status).focus(); $("#userPassword" + status).focus();
} else { } else {
return true; return true;
} }
return false; return false;
} }
}; };
/* /*
* 注册到 admin 进行管理 * 注册到 admin 进行管理
*/ */
admin.register["user-list"] = { admin.register["user-list"] = {
"obj": admin.userList, "obj": admin.userList,
"init": admin.userList.init, "init": admin.userList.init,
"refresh": function () { "refresh": function () {
$("#loadMsg").text(""); $("#loadMsg").text("");
} }
}/* }/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team * Copyright (c) 2009, 2010, 2011, 2012, B3log Team
* *
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* *
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a> * @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a> * @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.2.3, Aug 24, 2012 * @version 1.0.2.4, Nov 13, 2012
*/ */
/** /**
...@@ -234,23 +234,27 @@ var Util = { ...@@ -234,23 +234,27 @@ var Util = {
* @returns {String} 格式化后的时间 * @returns {String} 格式化后的时间
*/ */
toDate: function (time, format) { toDate: function (time, format) {
var dateTime = new Date(time), var dateTime = new Date(time);
formatDate; var o = {
var year = dateTime.getFullYear(), "M+" : dateTime.getMonth()+1, //month
month = dateTime.getMonth() + 1, "d+" : dateTime.getDate(), //day
date = dateTime.getDate(), "H+" : dateTime.getHours(), //hour
hour = dateTime.getHours() + 1, "m+" : dateTime.getMinutes(), //minute
minute = dateTime.getMinutes() + 1; "s+" : dateTime.getSeconds(), //second
"q+" : Math.floor((dateTime.getMonth()+3)/3), //quarter
switch (format) { "S" : dateTime.getMilliseconds() //millisecond
case "yy-MM-dd HH:mm": }
formatDate = year.toString().substr(2) + "-" + month + "-" + date + " " + hour + ":" + minute;
break; if(/(y+)/.test(format)) {
default: format = format.replace(RegExp.$1, (dateTime.getFullYear()+"").substr(4 - RegExp.$1.length));
break; }
}
for(var k in o) {
return formatDate; if(new RegExp("("+ k +")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
}
}
return format;
} }
}; };
......
...@@ -13,4 +13,4 @@ ...@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
var Util={error:function(){$("#tipMsg").text("Error: "+arguments[0]+" File: "+arguments[1]+"\nLine: "+arguments[2]+" please report this issue on https://github.com/b3log/b3log-solo/issues/new");$("#loadMsg").text("")},killIE:function(){if($.browser.msie){if($.browser.version==="6.0"||$.browser.version==="7.0"){window.location=latkeConfig.servePath+"/kill-browser.html";return}if(window.external&&window.external.twGetRunPath){var path=external.twGetRunPath();if(path&&path.toLowerCase().indexOf("360se")>-1&&window.location.href.indexOf("admin-index")>-1){window.location=latkeConfig.servePath+"/kill-browser.html";return}}}},replaceEmString:function(str){var commentSplited=str.split("[em");if(commentSplited.length===1){return str}str=commentSplited[0];for(var j=1;j<commentSplited.length;j++){var key=commentSplited[j].substr(0,2);str+="<img src='"+latkeConfig.staticServePath+"/skins/"+Label.skinDirName+"/images/emotions/em"+key+".png' alt='"+Label["em"+key+"Label"]+"' title='"+Label["em"+key+"Label"]+"'/>"+commentSplited[j].substr(3)}return str},proessURL:function(url){if(!/^\w+:\/\//.test(url)){url="http://"+url}return url},switchMobile:function(skin){Cookie.createCookie("btouch_switch_toggle",skin,365);setTimeout(function(){location.reload()},1250)},setTopBar:function(){var $top=$("#top");if($top.length===1){var $showTop=$("#showTop");$showTop.click(function(){$top.slideDown();$showTop.hide()});$("#hideTop").click(function(){$top.slideUp();$showTop.show()})}},goTop:function(){var acceleration=acceleration||0.1;var y=$(window).scrollTop();var speed=1+acceleration;window.scrollTo(0,Math.floor(y/speed));if(y>0){var invokeFunction="Util.goTop("+acceleration+")";window.setTimeout(invokeFunction,16)}},goBottom:function(bottom){if(!bottom){bottom=0}window.scrollTo(0,$("body").height()-$(window).height()-bottom)},init:function(){Util.killIE();Util.setTopBar()},clearCache:function(all){var data="";if(all==="all"){data='{"all": "all", "URI": ""}'}else{data='{"all": "all", "URI": "'+window.location.pathname+'"}'}$.ajax({type:"POST",url:latkeConfig.servePath+"/clear-cache.do",cache:false,contentType:"application/json",data:data,success:function(result){window.location.reload()}})},replaceSideEm:function(comments){for(var i=0;i<comments.length;i++){var $comment=$(comments[i]);$comment.html(Util.replaceEmString($comment.html()))}},buildTags:function(id){id=id||"tags";var classes=["tags1","tags2","tags3","tags4","tags5"],bList=$("#"+id+" b").get();var max=parseInt($("#"+id+" b").last().text());var distance=Math.ceil(max/classes.length);for(var i=0;i<bList.length;i++){var num=parseInt(bList[i].innerHTML);for(var j=0;j<classes.length;j++){if(num>j*distance&&num<=(j+1)*distance){bList[i].parentNode.className=classes[j];break}}}$("#"+id).html($("#"+id+" li").get().sort(function(a,b){var valA=$(a).find("span").text().toLowerCase();var valB=$(b).find("span").text().toLowerCase();return valA.localeCompare(valB)}))},toDate:function(time,format){var dateTime=new Date(time),formatDate;var year=dateTime.getFullYear(),month=dateTime.getMonth()+1,date=dateTime.getDate(),hour=dateTime.getHours()+1,minute=dateTime.getMinutes()+1;switch(format){case"yy-MM-dd HH:mm":formatDate=year.toString().substr(2)+"-"+month+"-"+date+" "+hour+":"+minute;break;default:break}return formatDate}};if(!Cookie){var Cookie={readCookie:function(name){var nameEQ=name+"=";var ca=document.cookie.split(";");for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==" "){c=c.substring(1,c.length)}if(c.indexOf(nameEQ)==0){return decodeURIComponent(c.substring(nameEQ.length,c.length))}}return""},eraseCookie:function(name){this.createCookie(name,"",-1)},createCookie:function(name,value,days){var expires="";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString()}document.cookie=name+"="+encodeURIComponent(value)+expires+"; path=/"}}}; var Util={error:function(){$("#tipMsg").text("Error: "+arguments[0]+" File: "+arguments[1]+"\nLine: "+arguments[2]+" please report this issue on https://github.com/b3log/b3log-solo/issues/new");$("#loadMsg").text("")},killIE:function(){if($.browser.msie){if($.browser.version==="6.0"||$.browser.version==="7.0"){window.location=latkeConfig.servePath+"/kill-browser.html";return}if(window.external&&window.external.twGetRunPath){var path=external.twGetRunPath();if(path&&path.toLowerCase().indexOf("360se")>-1&&window.location.href.indexOf("admin-index")>-1){window.location=latkeConfig.servePath+"/kill-browser.html";return}}}},replaceEmString:function(str){var commentSplited=str.split("[em");if(commentSplited.length===1){return str}str=commentSplited[0];for(var j=1;j<commentSplited.length;j++){var key=commentSplited[j].substr(0,2);str+="<img src='"+latkeConfig.staticServePath+"/skins/"+Label.skinDirName+"/images/emotions/em"+key+".png' alt='"+Label["em"+key+"Label"]+"' title='"+Label["em"+key+"Label"]+"'/>"+commentSplited[j].substr(3)}return str},proessURL:function(url){if(!/^\w+:\/\//.test(url)){url="http://"+url}return url},switchMobile:function(skin){Cookie.createCookie("btouch_switch_toggle",skin,365);setTimeout(function(){location.reload()},1250)},setTopBar:function(){var $top=$("#top");if($top.length===1){var $showTop=$("#showTop");$showTop.click(function(){$top.slideDown();$showTop.hide()});$("#hideTop").click(function(){$top.slideUp();$showTop.show()})}},goTop:function(){var acceleration=acceleration||0.1;var y=$(window).scrollTop();var speed=1+acceleration;window.scrollTo(0,Math.floor(y/speed));if(y>0){var invokeFunction="Util.goTop("+acceleration+")";window.setTimeout(invokeFunction,16)}},goBottom:function(bottom){if(!bottom){bottom=0}window.scrollTo(0,$("body").height()-$(window).height()-bottom)},init:function(){Util.killIE();Util.setTopBar()},clearCache:function(all){var data="";if(all==="all"){data='{"all": "all", "URI": ""}'}else{data='{"all": "all", "URI": "'+window.location.pathname+'"}'}$.ajax({type:"POST",url:latkeConfig.servePath+"/clear-cache.do",cache:false,contentType:"application/json",data:data,success:function(result){window.location.reload()}})},replaceSideEm:function(comments){for(var i=0;i<comments.length;i++){var $comment=$(comments[i]);$comment.html(Util.replaceEmString($comment.html()))}},buildTags:function(id){id=id||"tags";var classes=["tags1","tags2","tags3","tags4","tags5"],bList=$("#"+id+" b").get();var max=parseInt($("#"+id+" b").last().text());var distance=Math.ceil(max/classes.length);for(var i=0;i<bList.length;i++){var num=parseInt(bList[i].innerHTML);for(var j=0;j<classes.length;j++){if(num>j*distance&&num<=(j+1)*distance){bList[i].parentNode.className=classes[j];break}}}$("#"+id).html($("#"+id+" li").get().sort(function(a,b){var valA=$(a).find("span").text().toLowerCase();var valB=$(b).find("span").text().toLowerCase();return valA.localeCompare(valB)}))},toDate:function(time,format){var dateTime=new Date(time);var o={"M+":dateTime.getMonth()+1,"d+":dateTime.getDate(),"H+":dateTime.getHours(),"m+":dateTime.getMinutes(),"s+":dateTime.getSeconds(),"q+":Math.floor((dateTime.getMonth()+3)/3),S:dateTime.getMilliseconds()};if(/(y+)/.test(format)){format=format.replace(RegExp.$1,(dateTime.getFullYear()+"").substr(4-RegExp.$1.length))}for(var k in o){if(new RegExp("("+k+")").test(format)){format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length))}}return format}};if(!Cookie){var Cookie={readCookie:function(name){var nameEQ=name+"=";var ca=document.cookie.split(";");for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==" "){c=c.substring(1,c.length)}if(c.indexOf(nameEQ)==0){return decodeURIComponent(c.substring(nameEQ.length,c.length))}}return""},eraseCookie:function(name){this.createCookie(name,"",-1)},createCookie:function(name,value,days){var expires="";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toGMTString()}document.cookie=name+"="+encodeURIComponent(value)+expires+"; path=/"}}};
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment