Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
solo
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
solo
Commits
2e131795
Commit
2e131795
authored
Feb 18, 2017
by
Liang Ding
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🔨
#12246
parent
8fae6ef1
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
87 additions
and
43 deletions
+87
-43
src/main/java/org/b3log/solo/processor/CommentProcessor.java
src/main/java/org/b3log/solo/processor/CommentProcessor.java
+48
-33
src/main/java/org/b3log/solo/service/CommentMgmtService.java
src/main/java/org/b3log/solo/service/CommentMgmtService.java
+32
-3
src/main/java/org/b3log/solo/service/CommentQueryService.java
...main/java/org/b3log/solo/service/CommentQueryService.java
+2
-1
src/main/webapp/skins/9IPHP/common-comment.ftl
src/main/webapp/skins/9IPHP/common-comment.ftl
+5
-6
No files found.
src/main/java/org/b3log/solo/processor/CommentProcessor.java
View file @
2e131795
...
...
@@ -29,13 +29,12 @@ import org.b3log.latke.servlet.annotation.RequestProcessor;
import
org.b3log.latke.servlet.renderer.JSONRenderer
;
import
org.b3log.latke.util.Requests
;
import
org.b3log.latke.util.freemarker.Templates
;
import
org.b3log.solo.model.Article
;
import
org.b3log.solo.model.Comment
;
import
org.b3log.solo.model.Common
;
import
org.b3log.solo.model.Page
;
import
org.b3log.solo.model.*
;
import
org.b3log.solo.service.CommentMgmtService
;
import
org.b3log.solo.service.PreferenceQueryService
;
import
org.b3log.solo.service.UserMgmtService
;
import
org.b3log.solo.service.UserQueryService
;
import
org.b3log.solo.util.Skins
;
import
org.json.JSONObject
;
import
javax.inject.Inject
;
...
...
@@ -54,7 +53,7 @@ import java.util.Map;
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author ArmstrongCN
* @version 1.3.2.1
2, Feb 17
, 2017
* @version 1.3.2.1
3, Feb 18
, 2017
* @since 0.3.1
*/
@RequestProcessor
...
...
@@ -89,6 +88,12 @@ public class CommentProcessor {
@Inject
private
UserMgmtService
userMgmtService
;
/**
* Preference query service.
*/
@Inject
private
PreferenceQueryService
preferenceQueryService
;
/**
* Adds a comment to a page.
* <p>
...
...
@@ -122,15 +127,12 @@ public class CommentProcessor {
final
HttpServletResponse
httpServletResponse
=
context
.
getResponse
();
final
JSONObject
requestJSONObject
=
Requests
.
parseRequestJSONObject
(
httpServletRequest
,
httpServletResponse
);
requestJSONObject
.
put
(
Common
.
TYPE
,
Page
.
PAGE
);
fillCommenter
(
requestJSONObject
,
httpServletRequest
,
httpServletResponse
);
final
JSONObject
jsonObject
=
commentMgmtService
.
checkAddCommentRequest
(
requestJSONObject
);
final
JSONRenderer
renderer
=
new
JSONRenderer
();
context
.
setRenderer
(
renderer
);
renderer
.
setJSONObject
(
jsonObject
);
...
...
@@ -149,11 +151,9 @@ public class CommentProcessor {
}
final
String
storedCaptcha
=
(
String
)
session
.
getAttribute
(
CaptchaProcessor
.
CAPTCHA
);
session
.
removeAttribute
(
CaptchaProcessor
.
CAPTCHA
);
if
(!
userQueryService
.
isLoggedIn
(
httpServletRequest
,
httpServletResponse
))
{
final
String
captcha
=
requestJSONObject
.
optString
(
CaptchaProcessor
.
CAPTCHA
);
if
(
null
==
storedCaptcha
||
!
storedCaptcha
.
equals
(
captcha
))
{
...
...
@@ -162,7 +162,6 @@ public class CommentProcessor {
return
;
}
}
try
{
...
...
@@ -171,13 +170,26 @@ public class CommentProcessor {
final
Map
<
String
,
Object
>
dataModel
=
new
HashMap
<>();
dataModel
.
put
(
Comment
.
COMMENT
,
addResult
);
final
String
skinDirName
=
(
String
)
httpServletRequest
.
getAttribute
(
Keys
.
TEMAPLTE_DIR_NAME
);
final
Template
template
=
Templates
.
MAIN_CFG
.
getTemplate
(
"common-comment.ftl"
);
final
StringWriter
stringWriter
=
new
StringWriter
();
template
.
process
(
dataModel
,
stringWriter
);
stringWriter
.
close
();
final
JSONObject
page
=
addResult
.
optJSONObject
(
Page
.
PAGE
);
page
.
put
(
Common
.
COMMENTABLE
,
addResult
.
opt
(
Common
.
COMMENTABLE
));
page
.
put
(
Common
.
PERMALINK
,
addResult
.
opt
(
Common
.
PERMALINK
));
dataModel
.
put
(
Article
.
ARTICLE
,
page
);
// https://github.com/b3log/solo/issues/12246
try
{
final
String
skinDirName
=
(
String
)
httpServletRequest
.
getAttribute
(
Keys
.
TEMAPLTE_DIR_NAME
);
final
Template
template
=
Templates
.
MAIN_CFG
.
getTemplate
(
"common-comment.ftl"
);
final
JSONObject
preference
=
preferenceQueryService
.
getPreference
();
Skins
.
fillLangs
(
preference
.
optString
(
Option
.
ID_C_LOCALE_STRING
),
skinDirName
,
dataModel
);
Keys
.
fillServer
(
dataModel
);
final
StringWriter
stringWriter
=
new
StringWriter
();
template
.
process
(
dataModel
,
stringWriter
);
stringWriter
.
close
();
addResult
.
put
(
"cmtTpl"
,
stringWriter
.
toString
());
}
catch
(
final
Exception
e
)
{
// 1.9.0 向后兼容
}
addResult
.
put
(
"cmtTpl"
,
stringWriter
.
toString
());
addResult
.
put
(
Keys
.
STATUS_CODE
,
true
);
renderer
.
setJSONObject
(
addResult
);
...
...
@@ -223,15 +235,12 @@ public class CommentProcessor {
final
HttpServletResponse
httpServletResponse
=
context
.
getResponse
();
final
JSONObject
requestJSONObject
=
Requests
.
parseRequestJSONObject
(
httpServletRequest
,
httpServletResponse
);
requestJSONObject
.
put
(
Common
.
TYPE
,
Article
.
ARTICLE
);
fillCommenter
(
requestJSONObject
,
httpServletRequest
,
httpServletResponse
);
final
JSONObject
jsonObject
=
commentMgmtService
.
checkAddCommentRequest
(
requestJSONObject
);
final
JSONRenderer
renderer
=
new
JSONRenderer
();
context
.
setRenderer
(
renderer
);
renderer
.
setJSONObject
(
jsonObject
);
...
...
@@ -241,7 +250,6 @@ public class CommentProcessor {
}
final
HttpSession
session
=
httpServletRequest
.
getSession
(
false
);
if
(
null
==
session
)
{
jsonObject
.
put
(
Keys
.
STATUS_CODE
,
false
);
jsonObject
.
put
(
Keys
.
MSG
,
langPropsService
.
get
(
"captchaErrorLabel"
));
...
...
@@ -250,20 +258,16 @@ public class CommentProcessor {
}
final
String
storedCaptcha
=
(
String
)
session
.
getAttribute
(
CaptchaProcessor
.
CAPTCHA
);
session
.
removeAttribute
(
CaptchaProcessor
.
CAPTCHA
);
if
(!
userQueryService
.
isLoggedIn
(
httpServletRequest
,
httpServletResponse
))
{
final
String
captcha
=
requestJSONObject
.
optString
(
CaptchaProcessor
.
CAPTCHA
);
if
(
null
==
storedCaptcha
||
!
storedCaptcha
.
equals
(
captcha
))
{
jsonObject
.
put
(
Keys
.
STATUS_CODE
,
false
);
jsonObject
.
put
(
Keys
.
MSG
,
langPropsService
.
get
(
"captchaErrorLabel"
));
return
;
}
}
try
{
...
...
@@ -271,14 +275,26 @@ public class CommentProcessor {
final
Map
<
String
,
Object
>
dataModel
=
new
HashMap
<>();
dataModel
.
put
(
Comment
.
COMMENT
,
addResult
);
final
JSONObject
article
=
addResult
.
optJSONObject
(
Article
.
ARTICLE
);
article
.
put
(
Common
.
COMMENTABLE
,
addResult
.
opt
(
Common
.
COMMENTABLE
));
article
.
put
(
Common
.
PERMALINK
,
addResult
.
opt
(
Common
.
PERMALINK
));
dataModel
.
put
(
Article
.
ARTICLE
,
article
);
// https://github.com/b3log/solo/issues/12246
try
{
final
String
skinDirName
=
(
String
)
httpServletRequest
.
getAttribute
(
Keys
.
TEMAPLTE_DIR_NAME
);
final
Template
template
=
Templates
.
MAIN_CFG
.
getTemplate
(
"common-comment.ftl"
);
final
JSONObject
preference
=
preferenceQueryService
.
getPreference
();
Skins
.
fillLangs
(
preference
.
optString
(
Option
.
ID_C_LOCALE_STRING
),
skinDirName
,
dataModel
);
Keys
.
fillServer
(
dataModel
);
final
StringWriter
stringWriter
=
new
StringWriter
();
template
.
process
(
dataModel
,
stringWriter
);
stringWriter
.
close
();
addResult
.
put
(
"cmtTpl"
,
stringWriter
.
toString
());
}
catch
(
final
Exception
e
)
{
// 1.9.0 向后兼容
}
final
String
skinDirName
=
(
String
)
httpServletRequest
.
getAttribute
(
Keys
.
TEMAPLTE_DIR_NAME
);
final
Template
template
=
Templates
.
MAIN_CFG
.
getTemplate
(
"common-comment.ftl"
);
final
StringWriter
stringWriter
=
new
StringWriter
();
template
.
process
(
dataModel
,
stringWriter
);
stringWriter
.
close
();
addResult
.
put
(
"cmtTpl"
,
stringWriter
.
toString
());
addResult
.
put
(
Keys
.
STATUS_CODE
,
true
);
renderer
.
setJSONObject
(
addResult
);
...
...
@@ -302,7 +318,6 @@ public class CommentProcessor {
userMgmtService
.
tryLogInWithCookie
(
httpServletRequest
,
httpServletResponse
);
final
JSONObject
currentUser
=
userQueryService
.
getCurrentUser
(
httpServletRequest
);
if
(
null
==
currentUser
)
{
return
;
}
...
...
src/main/java/org/b3log/solo/service/CommentMgmtService.java
View file @
2e131795
...
...
@@ -57,7 +57,7 @@ import org.jsoup.safety.Whitelist;
* Comment management service.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.2.
9, Feb 17
, 2017
* @version 1.3.2.
10, Feb 18
, 2017
* @since 0.3.5
*/
@Service
...
...
@@ -400,7 +400,12 @@ public class CommentMgmtService {
* "commentSharpURL": "",
* "commentContent": "", // processed XSS HTML
* "commentName": "", // processed XSS
* "commentURL": "" // optional
* "commentURL": "", // optional
* "isReply": boolean,
* "page": {},
* "commentOriginalCommentId": "" // optional
* "commentable": boolean,
* "permalink": "" // page.pagePermalink
* }
* </pre>
*
...
...
@@ -408,18 +413,21 @@ public class CommentMgmtService {
*/
public
JSONObject
addPageComment
(
final
JSONObject
requestJSONObject
)
throws
ServiceException
{
final
JSONObject
ret
=
new
JSONObject
();
ret
.
put
(
Common
.
IS_REPLY
,
false
);
final
Transaction
transaction
=
commentRepository
.
beginTransaction
();
try
{
final
String
pageId
=
requestJSONObject
.
getString
(
Keys
.
OBJECT_ID
);
final
JSONObject
page
=
pageRepository
.
get
(
pageId
);
ret
.
put
(
Page
.
PAGE
,
page
);
final
String
commentName
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_NAME
);
final
String
commentEmail
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_EMAIL
).
trim
().
toLowerCase
();
final
String
commentURL
=
requestJSONObject
.
optString
(
Comment
.
COMMENT_URL
);
final
String
commentContent
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_CONTENT
);
final
String
originalCommentId
=
requestJSONObject
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
,
originalCommentId
);
// Step 1: Add comment
final
JSONObject
comment
=
new
JSONObject
();
...
...
@@ -437,6 +445,11 @@ public class CommentMgmtService {
comment
.
put
(
Comment
.
COMMENT_DATE
,
date
);
ret
.
put
(
Comment
.
COMMENT_DATE
,
DateFormatUtils
.
format
(
date
,
"yyyy-MM-dd HH:mm:ss"
));
ret
.
put
(
"commentDate2"
,
date
);
ret
.
put
(
Common
.
COMMENTABLE
,
preference
.
getBoolean
(
Option
.
ID_C_COMMENTABLE
)
&&
page
.
getBoolean
(
Page
.
PAGE_COMMENTABLE
));
ret
.
put
(
Common
.
PERMALINK
,
page
.
getString
(
Page
.
PAGE_PERMALINK
));
if
(!
Strings
.
isEmptyOrNull
(
originalCommentId
))
{
originalComment
=
commentRepository
.
get
(
originalCommentId
);
if
(
null
!=
originalComment
)
{
...
...
@@ -445,6 +458,8 @@ public class CommentMgmtService {
comment
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
ret
.
put
(
Common
.
IS_REPLY
,
true
);
}
else
{
LOGGER
.
log
(
Level
.
WARN
,
"Not found orginal comment[id={0}] of reply[name={1}, content={2}]"
,
originalCommentId
,
commentName
,
commentContent
);
...
...
@@ -522,7 +537,12 @@ public class CommentMgmtService {
* "commentSharpURL": "",
* "commentContent": "", // processed XSS HTML
* "commentName": "", // processed XSS
* "commentURL": "" // optional
* "commentURL": "", // optional
* "isReply": boolean,
* "article": {},
* "commentOriginalCommentId": "", // optional
* "commentable": boolean,
* "permalink": "" // article.articlePermalink
* }
* </pre>
*
...
...
@@ -530,18 +550,21 @@ public class CommentMgmtService {
*/
public
JSONObject
addArticleComment
(
final
JSONObject
requestJSONObject
)
throws
ServiceException
{
final
JSONObject
ret
=
new
JSONObject
();
ret
.
put
(
Common
.
IS_REPLY
,
false
);
final
Transaction
transaction
=
commentRepository
.
beginTransaction
();
try
{
final
String
articleId
=
requestJSONObject
.
getString
(
Keys
.
OBJECT_ID
);
final
JSONObject
article
=
articleRepository
.
get
(
articleId
);
ret
.
put
(
Article
.
ARTICLE
,
article
);
final
String
commentName
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_NAME
);
final
String
commentEmail
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_EMAIL
).
trim
().
toLowerCase
();
final
String
commentURL
=
requestJSONObject
.
optString
(
Comment
.
COMMENT_URL
);
final
String
commentContent
=
requestJSONObject
.
getString
(
Comment
.
COMMENT_CONTENT
);
final
String
originalCommentId
=
requestJSONObject
.
optString
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
);
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_ID
,
originalCommentId
);
// Step 1: Add comment
final
JSONObject
comment
=
new
JSONObject
();
...
...
@@ -561,6 +584,10 @@ public class CommentMgmtService {
comment
.
put
(
Comment
.
COMMENT_DATE
,
date
);
ret
.
put
(
Comment
.
COMMENT_DATE
,
DateFormatUtils
.
format
(
date
,
"yyyy-MM-dd HH:mm:ss"
));
ret
.
put
(
"commentDate2"
,
date
);
ret
.
put
(
Common
.
COMMENTABLE
,
preference
.
getBoolean
(
Option
.
ID_C_COMMENTABLE
)
&&
article
.
getBoolean
(
Article
.
ARTICLE_COMMENTABLE
));
ret
.
put
(
Common
.
PERMALINK
,
article
.
getString
(
Article
.
ARTICLE_PERMALINK
));
ret
.
put
(
Comment
.
COMMENT_NAME
,
commentName
);
ret
.
put
(
Comment
.
COMMENT_CONTENT
,
commentContent
);
...
...
@@ -574,6 +601,8 @@ public class CommentMgmtService {
comment
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
ret
.
put
(
Comment
.
COMMENT_ORIGINAL_COMMENT_NAME
,
originalCommentName
);
ret
.
put
(
Common
.
IS_REPLY
,
true
);
}
else
{
LOGGER
.
log
(
Level
.
WARN
,
"Not found orginal comment[id={0}] of reply[name={1}, content={2}]"
,
new
String
[]{
originalCommentId
,
commentName
,
commentContent
});
...
...
src/main/java/org/b3log/solo/service/CommentQueryService.java
View file @
2e131795
...
...
@@ -49,7 +49,7 @@ import org.json.JSONObject;
* Comment query service.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.0.
8, Jun 28, 2016
* @version 1.3.0.
9, Feb 18, 2017
* @since 0.3.5
*/
@Service
...
...
@@ -234,6 +234,7 @@ public class CommentQueryService {
for
(
final
JSONObject
comment
:
comments
)
{
comment
.
put
(
Comment
.
COMMENT_TIME
,
((
Date
)
comment
.
get
(
Comment
.
COMMENT_DATE
)).
getTime
());
comment
.
put
(
"commentDate2"
,
comment
.
get
(
Comment
.
COMMENT_DATE
));
// 1.9.0 向后兼容
comment
.
put
(
Comment
.
COMMENT_NAME
,
comment
.
getString
(
Comment
.
COMMENT_NAME
));
String
url
=
comment
.
getString
(
Comment
.
COMMENT_URL
);
if
(
StringUtils
.
contains
(
url
,
"<"
))
{
// legacy issue https://github.com/b3log/solo/issues/12091
...
...
src/main/webapp/skins/9IPHP/common-comment.ftl
View file @
2e131795
...
...
@@ -9,17 +9,16 @@
<#else>
<a class="user-name" href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<#if false> comment.isReply
@
<a class="user-name" href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
<#if comment.isReply>
@<a class="user-name" href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
<time class="ft-gray">
{comment.commentDate
?string("yyyy-MM-dd HH:mm")}</time>
<time class="ft-gray">
${comment.commentDate2
?string("yyyy-MM-dd HH:mm")}</time>
<#if
true> article.commentable
<a class="reply-btn" href="javascript:replyTo('${comment.oId}')">{replyLabel}</a>
<#if
article.commentable>
<a class="reply-btn" href="javascript:replyTo('${comment.oId}')">
$
{replyLabel}</a>
</#if>
</div>
<div class="content-reset">
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment