ソースを参照

Add society leaving

Matt Coles 9 年 前
コミット
06229fbd98
共有3 個のファイルを変更した81 個の追加1 個の削除を含む
  1. 58 1
      presenters/society-controller.js
  2. 21 0
      routes/society/leave-society.js
  3. 2 0
      utils/route-manager.js

+ 58 - 1
presenters/society-controller.js

@@ -174,6 +174,63 @@ module.exports = {
174 174
   },
175 175
 
176 176
   leave_society: function (soc_name, auth, complete) {
177
-    // permissions_controller.user_is_in_society(auth, soc_name, function)
177
+    permissions_controller.user_is_in_society(auth, soc_name, function(user_in_soc) {
178
+      if (user_in_soc) {
179
+        soc_name = soc_name.toLowerCase();
180
+        user_controller.get_user_from_auth(auth, function (username) {
181
+          var user_query = "user:" + username;
182
+          var soc_query = "society:" + soc_name.toLowerCase();
183
+          redis.hget(user_query, "societies", function (err, result) {
184
+            if (result) {
185
+              result = JSON.parse(result);
186
+              var idx = result.indexOf(soc_name);
187
+              if (idx > -1) {
188
+                result.splice(idx, 1);
189
+              }
190
+              redis.hset(user_query, "societies", JSON.stringify(result));
191
+            } else {
192
+              console.error("Error could not find society to remove.");
193
+            }
194
+          });
195
+          redis.hget(soc_query, "users", function (err, result) {
196
+            if (result) {
197
+              result = JSON.parse(result);
198
+              var idx = result.indexOf(username);
199
+              if (idx > -1) {
200
+                result.splice(idx, 1);
201
+              }
202
+              redis.hset(soc_query, "users", JSON.stringify(result));
203
+            } else {
204
+              console.error("Error could not find society user list.");
205
+            }
206
+          });
207
+          permissions_controller.user_can_manage_society(auth, soc_name, function (isadmin) {
208
+            if (isadmin) {
209
+              redis.hget(soc_query, "admins", function (err, result) {
210
+                if (result) {
211
+                  result = JSON.parse(result);
212
+                  var idx = result.indexOf(username);
213
+                  if (idx > -1) {
214
+                    result.splice(idx, 1);
215
+                  }
216
+                  redis.hset(soc_query, "admins", JSON.stringify(result));
217
+                } else {
218
+                  console.error("Error could not find society admin list.");
219
+                }
220
+              });
221
+            }
222
+          });
223
+          complete({
224
+            "success": 1,
225
+            "error": 0
226
+          });
227
+        });
228
+      } else {
229
+        complete({
230
+          "success": 0,
231
+          "error": 1
232
+        });
233
+      }
234
+    });
178 235
   }
179 236
 }

+ 21 - 0
routes/society/leave-society.js

@@ -0,0 +1,21 @@
1
+var society_controller = require("./../../presenters/society-controller.js");
2
+
3
+module.exports = {
4
+  perform: function (a,b) {
5
+    perform(a,b);
6
+  }
7
+}
8
+
9
+var perform = function (req, res) {
10
+  var soc_name = req.body.society || req.query.society;
11
+  var auth_key = req.body.auth || req.query.auth;
12
+
13
+  if (soc_name && auth_key) {
14
+    society_controller.leave_society(soc_name, auth_key, function (response) {
15
+      res.send(response);
16
+    });
17
+  } else {
18
+    res.send({"success": 0,
19
+              "error": 2});
20
+  }
21
+};

+ 2 - 0
utils/route-manager.js

@@ -7,6 +7,7 @@ var user_view = require("../routes/user/view.js");
7 7
 var soc_create = require("../routes/society/create-society.js");
8 8
 var soc_view = require("../routes/society/view-society.js");
9 9
 var soc_join = require("../routes/society/join-society.js");
10
+var soc_leave = require("../routes/society/leave-society.js");
10 11
 var soc_events = require("../routes/events/view-all-society-events.js");
11 12
 var event_create = require("../routes/events/create-society-event.js");
12 13
 var event_view = require("../routes/events/view-society-events.js");
@@ -26,6 +27,7 @@ router.all('/society/create/', soc_create.perform);
26 27
 router.all('/society/view/(:societyid)?', soc_view.perform);
27 28
 router.all('/society/view/:societyid/events/', soc_events.perform);
28 29
 router.all('/society/join/', soc_join.perform);
30
+router.all('/society/leave/', soc_leave.perform);
29 31
 
30 32
 router.all('/events/create/', event_create.perform);
31 33
 router.all('/events/view/:eventid', event_view.perform);