OSDN Git Service

プロフィール用の管理モードを追加した
authorkonekoneko <jbh03215@hotmail.co.jp>
Thu, 15 Nov 2012 08:53:14 +0000 (17:53 +0900)
committerkonekoneko <jbh03215@hotmail.co.jp>
Thu, 15 Nov 2012 08:53:14 +0000 (17:53 +0900)
profile.js
public/profile/admin.ejs [new file with mode: 0644]
public/profile/message.ejs

index 61f4550..d838ade 100644 (file)
@@ -19,6 +19,8 @@ var collection = new ProfileCollection();
 \r
 module.exports = function(app){\r
        app.get("/profile",list_proc);\r
+       app.get("/profile/admin",admin_proc);\r
+       app.post("/profile/admin",admin_postproc);\r
        app.get("/profile/detail",detail_proc);\r
        app.post("/profile/detail",detail_postproc);\r
        app.post("/profile/edit",edit_postproc); \r
@@ -26,8 +28,63 @@ module.exports = function(app){
        app.post("/profile/registor",registor_postproc); \r
 };\r
 \r
+function admin_proc(req, res)\r
+{\r
+       var info = new security.SessionInfomation(true);\r
+       req.session.items = info;\r
+       async.waterfall([\r
+               function(callback){\r
+                       PrepaerListAsync(req,callback);\r
+               }\r
+       ],function(err,result){\r
+               if(err != null)\r
+                       RenderMessage(res,err,info);\r
+               else{\r
+                       result.token = info.token;\r
+                       res.render("profile\\admin",result);\r
+               }\r
+       });\r
+}\r
+\r
+function admin_postproc(req,res)\r
+{\r
+       if(req.session.items.token != req.body.token){\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
+               return;\r
+       }\r
+       async.waterfall([\r
+               function(cb){\r
+                       if(typeof(req.body.removeall) != "undefined")\r
+                               collection.ClearAsync(cb);\r
+                       if(typeof(req.body.remove) != "undefined")\r
+                               collection.RemoveRangeAsync(req.body.names,cb);\r
+               }\r
+       ],function(err,result){\r
+               if(err != null)\r
+                       RenderMessage(res,err,req.session.items);\r
+               else\r
+                       RenderMessage(res,$success_remove,req.session.items);\r
+       });\r
+}\r
+\r
 function list_proc(req, res)\r
 {\r
+       if(typeof(req.session.items) != "undefined")\r
+               req.session.items.admin = false;\r
+       async.waterfall([\r
+               function(cb){\r
+                       PrepaerListAsync(req,cb);\r
+               }\r
+       ],function(err,result){\r
+               if(err != null)\r
+                       RenderMessage(res,err,req.session.items);\r
+               else\r
+                       res.render("profile\\list",result);\r
+       });\r
+}\r
+\r
+function PrepaerListAsync(req,callback)\r
+{\r
        var limit = $db_limit;\r
        var start = 0;\r
        var parttern = "";\r
@@ -48,14 +105,15 @@ function list_proc(req, res)
                }\r
        ],function(err,result){\r
                if(err != null){\r
-                       res.render("profile\\message",{message:err});\r
+                       cb(err,null);\r
                }else{\r
                        var next = start + limit;\r
                        var prev = start - limit;\r
                        if(prev < 0)\r
                                prev = 0;\r
-                       result[0].lastmodified = result[0].lastmodified.toFormat("YYYY/MM/DD HH:MI:SS");\r
-                       res.render("profile\\list",{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
+                       for(var i = 0; i < result.length; i++)\r
+                               result[i].lastmodified = result[i].lastmodified.toFormat("YYYY/MM/DD HH:MI:SS");\r
+                       callback(null,{list:result,search:parttern,next:next,prev:prev,limit:limit});\r
                }\r
        });\r
 }\r
@@ -64,12 +122,12 @@ function detail_proc(req, res)
 {\r
        if(typeof(req.query.name) == "undefined")\r
        {\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
                return;\r
        }\r
 \r
-       var info = new security.SessionInfomation(false);\r
-       req.session.items = info;\r
+       if(typeof(req.session.items) == "undefined")\r
+               req.session.items = new security.SessionInfomation(false);\r
 \r
        async.waterfall([\r
                function(cb){\r
@@ -77,11 +135,11 @@ function detail_proc(req, res)
                },\r
        ],function(err,result){\r
                if(err != null)\r
-                       res.render("profile\\message",{message:err});\r
+                       RenderMessage(res,err,req.session.items);\r
                else if(result.length == 0)\r
-                       res.render("profile\\message",{message:$notfound_name});\r
+                       RenderMessage(res,$notfound_name,req.session.items);\r
                else{\r
-                       res.render("profile\\detail",{list:result,token:info.token});\r
+                       res.render("profile\\detail",{list:result,token:req.session.items.token});\r
                }\r
        });\r
 }\r
@@ -89,7 +147,7 @@ function detail_proc(req, res)
 function detail_postproc(req, res)\r
 {\r
        if(req.session.items.token != req.body.token){\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
                return;\r
        }\r
        if(typeof(req.body.remove) != "undefined"){\r
@@ -105,11 +163,11 @@ function detail_postproc(req, res)
                        }\r
                ],function(err,result){\r
                        if(err != null)\r
-                               res.render("profile\\message",{message:err});\r
+                               RenderMessage(res,err,req.session.items);\r
                        else if(result == null)\r
-                               res.render("profile\\message",{message:$unmatch_password});\r
+                               RenderMessage(res,$unmatch_password,req.session.items);\r
                        else\r
-                               res.render("profile\\message",{message:$success_remove});\r
+                               RenderMessage(res,$success_remove,req.session.items);\r
                });\r
        }else if(typeof(req.body.edit) != "undefined"){\r
                async.waterfall([\r
@@ -124,27 +182,27 @@ function detail_postproc(req, res)
                        }\r
                ],function(err,result){\r
                        if(err != null){\r
-                               res.render("profile\\message",{message:err});\r
+                               RenderMessage(res,err,req.session.items);\r
                        }else if(result != null){\r
                                res.render("profile\\edit",{list:result,token:req.body.token});\r
                        }else{\r
-                               res.render("profile\\message",{message:$unmatch_password});\r
+                               RenderMessage(res,$unmatch_password,req.session.items);\r
                        }\r
                });\r
        }else{\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
        }\r
 }\r
 \r
 function edit_postproc(req, res)\r
 {\r
        if(req.session.items.token != req.body.token){\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
                return;\r
        }\r
        if(typeof(req.body.name) == "undefined")\r
        {\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
                return;\r
        }else if(typeof(req.body.edit) != "undefined"){\r
                async.waterfall([\r
@@ -153,19 +211,19 @@ function edit_postproc(req, res)
                        }\r
                ],function(err,result){\r
                        if(err != null)\r
-                               res.render("profile\\message",{message:err});\r
+                               RenderMessage(res,err,req.session.items);\r
                        else\r
-                               res.render("profile\\message",{message:$success_edit});\r
+                               RenderMessage(res,$success_edit,req.session.items);\r
                });\r
        }else{\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
        }\r
 }\r
 \r
 function registor_postproc(req, res)\r
 {\r
        if(req.session.items.token != req.body.token){\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage(res,$invaild_parameter,req.session.items);\r
                return;\r
        }\r
        if(typeof(req.body.registor) != "undefined"){\r
@@ -175,20 +233,29 @@ function registor_postproc(req, res)
                        }\r
                ],function(err,result){\r
                        if(err != null)\r
-                               res.render("profile\\message",{message:err});\r
+                               RenderMessage(res,err,req.session.items);\r
                        else\r
-                               res.render("profile\\message",{message:$success_registor});\r
+                               RenderMessage(res,$success_registor,req.session.items);\r
                });\r
        }else{\r
-               res.render("profile\\message",{message:$invaild_parameter});\r
+               RenderMessage($invaild_parameter,req.session.items);\r
        }\r
 }\r
+\r
 function registor_proc(req, res)\r
 {\r
-       var info = new security.SessionInfomation(false);\r
-       req.session.items = info;\r
+       if(typeof(req.session.items) == "undefined")\r
+               req.session.items = new security.SessionInfomation(false);\r
 \r
-       res.render("profile\\registor",{token:info.token});\r
+       res.render("profile\\registor",{token:req.session.items.token});\r
+}\r
+\r
+function RenderMessage(res,msg,info)\r
+{\r
+       if(typeof(info) == "undefined")\r
+               res.render("profile\\message",{message:msg});\r
+       else\r
+               res.render("profile\\message",{message:msg,admin:info.admin});\r
 }\r
 \r
 //\r
@@ -286,13 +353,45 @@ function ProfileCollection()
                        }\r
                ],cb);\r
        }\r
+       this.ClearAsync = function(cb){\r
+               async.waterfall([\r
+                       function(callback){\r
+                               pool.acquire(callback);\r
+                       },\r
+                       function(client,callback){\r
+                               client.query("TRUNCATE TABLE list",function(err,result){\r
+                                       callback(err,result,client);\r
+                               });\r
+                       },\r
+                       function(result,client,callback){\r
+                               pool.release(client);\r
+                               callback(null,result);\r
+                       }\r
+               ],cb);\r
+       }\r
+       this.RemoveRangeAsync = function(names,cb){\r
+               async.waterfall([\r
+                       function(callback){\r
+                               pool.acquire(callback);\r
+                       },\r
+                       function(client,callback){\r
+                               var query = client.query("DELETE FROM list WHERE name IN (?)",[names],function(err,result){\r
+                                       callback(err,result,client);\r
+                               });\r
+                       },\r
+                       function(result,client,callback){\r
+                               pool.release(client);\r
+                               callback(null,result);\r
+                       }\r
+               ],cb);\r
+       }\r
        this.RemoveAsync = function(name,cb){\r
                async.waterfall([\r
                        function(callback){\r
                                pool.acquire(callback);\r
                        },\r
                        function(client,callback){\r
-                               client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
+                               var query = client.query("DELETE FROM list WHERE name = ?",[name],function(err,result){\r
                                        callback(err,result,client);\r
                                });\r
                        },\r
diff --git a/public/profile/admin.ejs b/public/profile/admin.ejs
new file mode 100644 (file)
index 0000000..4a8710d
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html>\r
+<html>\r
+<head>\r
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r
+<meta http-equiv="cache-control" content="no-cache">\r
+<title>管理モード</title>\r
+</head>\r
+<body>\r
+<h1>管理モード</h1>\r
+<div id="content">\r
+<form action="/profile/admin" method="GET">\r
+       <select name="field" size="1">\r
+               <option value="name">名前</option>\r
+       </select>\r
+       <input type="text" value="<%= encodeURIComponent(search) %>" name="search"/>\r
+       <input type="submit" value="検索"/>\r
+</form>\r
+<form action="/profile/admin" method="POST">\r
+       <table>\r
+               <tr>\r
+                       <th></th>\r
+                       <th>名前</th>\r
+                       <th>年齢</th>\r
+                       <th>更新日時</th>\r
+               </tr>\r
+       <% for(var i=0; i<list.length; i++) {%>\r
+               <tr>\r
+                       <td><input type="checkbox" name="names[]" value="<%= list[i].name %>"/></td>\r
+                       <td><a href="/profile/detail?name=<%= encodeURIComponent(list[i].name) %>"><%= list[i].name %></a></td>\r
+                       <td><%= list[i].age %></td>\r
+                       <td><%- list[i].lastmodified %></td>\r
+               </tr>\r
+       <% } %>\r
+       </table>\r
+       <input type="hidden" name="token" value="<%= token %>"></input>\r
+       <input type="submit" value="全削除" name="removeall"/>\r
+       <input type="submit" value="削除" name="remove"/>\r
+</form>\r
+<a href="profile?start=<%= prev %>&limit=<%= limit %>&search=<%= encodeURIComponent(search) %>"><前</a>\r
+<a href="profile?start=<%= next %>&limit=<%= limit %>&search=<%= encodeURIComponent(search) %>">次></a>\r
+</div>\r
+</body>\r
+</html>\r
index b2ec31c..79cb6fb 100644 (file)
@@ -9,7 +9,13 @@
 <h1>メッセージ</h1>\r
 <div id="content">\r
        <p><%= message %></p>\r
-       <p><a href="/profile">TOP</a></p>\r
+       <p>\r
+               <% if(admin){ %>\r
+                       <a href="/profile/admin">TOP</a>\r
+               <% }else{ %>\r
+                       <a href="/profile">TOP</a>\r
+               <% } %>\r
+       </p>\r
 </div>\r
 </body>\r
 </html>\r