Wiki source code of IdeaVoteService

Last modified by Andrey Che on 2018/12/10 14:09

Show last authors
1 {{groovy}}
2 import org.xwiki.velocity.tools.JSONTool;
3 import org.apache.commons.lang3.StringUtils;
4
5 def lock = "lock"
6 def result = new HashMap();
7 try {
8 if(request.page && request.action) {
9 synchronized(lock) {
10 def mydoc = xwiki.getDocument(request.page);
11 if(!mydoc.isNew() && null != mydoc.getObject("Ideas.IdeasClass") && xcontext.user != "XWiki.XWikiGuest") {
12 def doRemove = false;
13 def doRemoveagainst = false;
14 // Action : Add a supporter (vote)
15 if(request.action == "addVote") {
16 mydoc.use("Ideas.IdeasClass");
17 def userList = mydoc.getValue("supporters");
18 def userListSup = mydoc.getValue("against");
19 def nbvotes = mydoc.getValue("nbvotes");
20 def nbopp = mydoc.getValue("nbagainst");
21 if(StringUtils.contains(userList, xwiki.checkAuth().toString())) {
22 doRemove = true;
23 }
24 else {
25 // Add user in userList
26 if (StringUtils.contains(userListSup, xwiki.checkAuth().toString())){
27 doRemoveagainst = true;
28 result.put("remove", true);
29 result.put("nbopp", nbopp - 1);
30 }
31 userList = userList + "," + xwiki.checkAuth();
32 mydoc.set("supporters", userList);
33 // Increase vote by one
34 if(!nbvotes) {
35 nbvotes = 1;
36 } else {
37 nbvotes = nbvotes + 1;
38 }
39 mydoc.set("nbvotes", nbvotes);
40 // Save document
41 mydoc.saveWithProgrammingRights();
42 result.put("result", true);
43 result.put("nbvotes", nbvotes);
44 }
45 }
46 else if(request.action == "addVoteOpp") {
47 mydoc.use("Ideas.IdeasClass");
48 def userList = mydoc.getValue("against");
49 def userListSup = mydoc.getValue("supporters");
50 def nbvotes = mydoc.getValue("nbagainst");
51 def nbopp = mydoc.getValue("nbvotes");
52 if(StringUtils.contains(userList, xwiki.checkAuth().toString())) {
53 doRemoveagainst = true;
54 }
55 else {
56 // Add user in userList
57 if (StringUtils.contains(userListSup, xwiki.checkAuth().toString())){
58 doRemove = true;
59 result.put("remove", true);
60 result.put("nbopp", nbopp - 1);
61 }
62 if (userList == null){
63 userList = "," + xwiki.checkAuth();
64 }
65 else{
66 userList = userList + "," + xwiki.checkAuth();
67 }
68 mydoc.set("against", userList);
69 // Increase vote by one
70 if(!nbvotes) {
71 nbvotes = 1;
72 } else {
73 nbvotes = nbvotes + 1;
74 }
75 mydoc.set("nbagainst", nbvotes);
76 // Save document
77 mydoc.saveWithProgrammingRights();
78 result.put("result", true);
79 result.put("nbagainst", nbvotes);
80 }
81 }
82 // Action : Remove a supporter (vote)
83 if(request.action == "removeVote" || doRemove){
84 // Remove user from user list
85 def userList = mydoc.getValue("supporters");
86 def nbvotes = mydoc.getValue("nbvotes");
87 def theUser = xwiki.checkAuth();
88 def newUserList = StringUtils.replaceOnce(userList, ","+theUser.toString(), "");
89 newUserList = StringUtils.replaceOnce(newUserList , theUser.toString()+",", "");
90 newUserList = StringUtils.replaceOnce(newUserList , theUser.toString(), "");
91 mydoc.set("supporters", newUserList);
92 // Decrease vote by one
93 nbvotes = nbvotes - 1;
94 mydoc.set("nbvotes", nbvotes);
95 // Save document
96 mydoc.saveWithProgrammingRights();
97 result.put("result", true);
98 result.put("nbvotes", nbvotes);
99 }
100 else if(doRemoveagainst){
101 // Remove user from user list
102 def userList = mydoc.getValue("against");
103 def nbvotes = mydoc.getValue("nbagainst");
104 def theUser = xwiki.checkAuth();
105 def newUserList = StringUtils.replaceOnce(userList, ","+theUser.toString(), "");
106 newUserList = StringUtils.replaceOnce(newUserList , theUser.toString()+",", "");
107 newUserList = StringUtils.replaceOnce(newUserList , theUser.toString(), "");
108 mydoc.set("against", newUserList);
109 // Decrease vote by one
110 nbvotes = nbvotes - 1;
111 mydoc.set("nbagainst", nbvotes);
112 // Save document
113 mydoc.saveWithProgrammingRights();
114 result.put("result", true);
115 result.put("nbagainst", nbvotes);
116 }
117 } else if (xcontext.user == "XWiki.XWikiGuest") {
118 result.put("result", false);
119 result.put("msg", services.localization.render('ideas.message.guess'));
120 } else {
121 result.put("result", false);
122 result.put("msg", services.localization.render('ideas.message.error'));
123 }
124 }
125 } else {
126 result.put("result", false);
127 result.put("msg", "Dev error : Missing parameters")
128 }
129
130 // Format JSON response
131 response.setContentType("application/json");
132 def json = new JSONTool();
133 println json.serialize(result);
134 }
135 catch (Exception exception) {
136 println "Message : " + exception.getMessage();
137 println "StackTrace : " + exception.printStackTrace();
138 }
139 {{/groovy}}