OSDN Git Service

プロフィールの項目をカスタマイズできるようにした
authorkonekoneko <jbh03215@hotmail.co.jp>
Tue, 27 Nov 2012 18:53:52 +0000 (03:53 +0900)
committerkonekoneko <jbh03215@hotmail.co.jp>
Tue, 27 Nov 2012 18:53:52 +0000 (03:53 +0900)
configure.js
init.sql
profile.js
public/profile/detail.ejs
public/profile/edit.ejs
public/profile/registor.ejs
readme.html

index ce3cb4b..0b716bb 100644 (file)
@@ -1,16 +1,60 @@
 module.exports = {\r
        enable_profile : true,  //プロファイル機能を使用するなら真。そうでないなら、偽\r
+\r
        port : process.env.port || 3000,        //ポート\r
+\r
        redisHost : "localhost",        //redisサーバのアドレス\r
        redisPort : 6379,       //redisサーバのポート\r
        redisPassword : "",     //redisサーバのパスワード\r
+\r
        db_user : "user",       //MySQLサーバーのユーザー名\r
        db_password : "user",   //MySQLサーバーのパスワード\r
        db_host : "localhost",  //MySQLサーバーのアドレス\r
        db_port : 3306, //MySQLサーバーのポート\r
        db_limit : 50,  //一度に表示する件数\r
+\r
        username : "admin",     //管理者用のページにアクセスできるユーザ名\r
        password : "admin",     //管理者用のページにアクセスするのに必要なパスワード\r
+\r
        max_room_number : 3,    //最大ルーム数\r
+\r
        showip : false, //IPアドレスを表示するなら真。そうでないなら、偽\r
+\r
+       //詳細画面に表示するフィールド名と表示名の組み合わせ\r
+       //詳細画面で表示される順番はこの変数によって決まります\r
+       //連想配列の名称と数はinputtype、visiblefield、init.sqlと一致させること\r
+       alias : {\r
+               mailto : "メールアドレス",\r
+               age : "年齢",\r
+               height : "身長",\r
+               weight : "体重",\r
+               gender : "性別",\r
+               race : "種族",\r
+               etc : "備考",\r
+       },\r
+\r
+       //フィールドタイプ\r
+       //text:一行入力\r
+       //textarea:複数行入力を表す\r
+       inputtype : {\r
+               age : "text",\r
+               height : "text",\r
+               weight : "text",\r
+               gender : "text",\r
+               race : "text",\r
+               mailto : "text",\r
+               etc : "textarea",\r
+       },\r
+\r
+       //詳細画面に表示するなら真。そうでないなら偽\r
+       visiblefield : {\r
+               age : true,\r
+               height : true,\r
+               weight : true,\r
+               gender : true,\r
+               race : true,\r
+               mailto : false,\r
+               etc : true,\r
+       }\r
 };\r
+\r
index 058468c..4f7f04a 100644 (file)
--- a/init.sql
+++ b/init.sql
@@ -7,17 +7,24 @@ CREATE DATABASE IF NOT EXISTS webchat DEFAULT CHARSET=utf8;
 use webchat;
 DROP TABLE IF EXISTS list;
 CREATE TABLE list(
+# does not edit
+# from
        name_hash INT UNSIGNED NOT NULL,
        name VARCHAR(64) NOT NULL,
-       age SMALLINT  UNSIGNED DEFAULT 0,
        lastmodified DATETIME,
+       password VARCHAR(32),
+# to
+       mailto VARCHAR(255),
+       age SMALLINT  UNSIGNED DEFAULT 0,
        height SMALLINT  UNSIGNED DEFAULT 0,
        weight SMALLINT  UNSIGNED DEFAULT 0,
        gender VARCHAR(8),
        race VARCHAR(64),
-       password VARCHAR(32),
        etc TEXT,
+# does not edit
+# from
        PRIMARY KEY(name_hash));
+# to
 
 DROP TABLE IF EXISTS ipbanlist;
 CREATE TABLE ipbanlist(ip VARCHAR(64) NOT NULL,
index bac3320..19a4ade 100644 (file)
@@ -128,7 +128,7 @@ function detail_proc(req, res)
                        RenderMessage(res,resource.notfound_name,req.session.items);\r
                else{\r
                        res.setHeader("X-FRAME-OPTIONS","DENY");\r
-                       res.render("profile/detail",{list:result,token:req.session._csrf,admin:req.session.items.admin});\r
+                       res.render("profile/detail",{list:result,alias:config.alias,visiblefield:config.visiblefield,token:req.session._csrf,admin:req.session.items.admin});\r
                }\r
        });\r
 }\r
@@ -176,7 +176,7 @@ function detail_postproc(req, res)
                                RenderMessage(res,err,req.session.items);\r
                        }else if(result != null){\r
                                res.setHeader("X-FRAME-OPTIONS","DENY");\r
-                               res.render("profile/edit",{list:result,token:req.session._csrf});\r
+                               res.render("profile/edit",{list:result,token:req.session._csrf,alias:config.alias,inputtype:config.inputtype});\r
                        }else{\r
                                RenderMessage(res,resource.unmatch_password,req.session.items);\r
                        }\r
@@ -235,7 +235,7 @@ function registor_proc(req, res)
                req.session.items = new security.SessionInfomation(false);\r
 \r
        res.setHeader("X-FRAME-OPTIONS","DENY");\r
-       res.render("profile/registor",{token:req.session._csrf});\r
+       res.render("profile/registor",{token:req.session._csrf,alias:config.alias,inputtype:config.inputtype});\r
 }\r
 \r
 function RenderMessage(res,msg,info)\r
@@ -277,32 +277,11 @@ function ProfileCollection()
                pool.query("SELECT * FROM list WHERE name_hash = ? and name = ?",[murmurhash.v3(name),name],cb);\r
        }\r
        this.AddAsync = function(data,cb){\r
-               var item = {\r
-                       name_hash:murmurhash.v3(data.name),\r
-                       name:data.name,\r
-                       age:data.age,\r
-                       gender:data.gender,\r
-                       height:data.height,\r
-                       weight:data.weight,\r
-                       race:data.race,\r
-                       password:md5_hex(data.password),\r
-                       lastmodified:new Date(),\r
-                       etc:data.etc\r
-               };\r
+               var item = GetItem(data);\r
                pool.query("INSERT INTO list SET ?",[item],cb);\r
        }\r
        this.UpdatAsync = function(name,data,newpassword,cb){\r
-               var item = {\r
-                       name_hash:murmurhash.v3(data.name),\r
-                       name:data.name,\r
-                       age:data.age,\r
-                       gender:data.gender,\r
-                       height:data.height,\r
-                       weight:data.weight,\r
-                       race:data.race,\r
-                       lastmodified:new Date(),\r
-                       etc:data.etc\r
-               };\r
+               var item = GetItem(data);\r
                if(newpassword != null)\r
                        item.password = md5_hex(newpassword);\r
                pool.query("UPDATE list SET ? WHERE name = ?",[item,name],cb);\r
@@ -330,5 +309,18 @@ function ProfileCollection()
                md5.update(src, 'utf8');\r
        return md5.digest('hex');\r
        }\r
+\r
+       function GetItem(data)\r
+       {\r
+               var item = {\r
+                       name_hash:murmurhash.v3(data.name),\r
+                       name:data.name,\r
+                       password:md5_hex(data.password),\r
+                       lastmodified:new Date(),\r
+               };\r
+               for(var key in config.alias)\r
+                       item[key] = data[key];\r
+               return item;\r
+       }\r
 }\r
 \r
index 26d0c4b..9f4c3cb 100644 (file)
@@ -17,32 +17,12 @@ $(function(){
 <h1>詳細画面</h1>\r
 <div id="content">\r
        <h2><%= list[0].name %></h2>\r
-       <table>\r
-               <tr>\r
-                       <td>年齢</td>\r
-                       <td><%= list[0].age %></td>\r
-               </tr>\r
-               <tr>\r
-                       <td>性別</td>\r
-                       <td><%= list[0].gender %></td>\r
-               </tr>\r
-               <tr>\r
-                       <td>身長</td>\r
-                       <td><%= list[0].height %></td>\r
-               </tr>\r
-               <tr>\r
-                       <td>体重</td>\r
-                       <td><%= list[0].weight %></td>\r
-               </tr>\r
-               <tr>\r
-                       <td>種族</td>\r
-                       <td><%= list[0].race %></td>\r
-               </tr>\r
-       </table>\r
-       <div id="etc">\r
-               <h3>詳細</h3>\r
-               <p><%= list[0].etc %></p>\r
-       </div>\r
+       <% for(var key in alias) {%>\r
+               <% if(typeof alias[key] != "undefined" && visiblefield[key]) {%>\r
+                       <h3><%= alias[key] %></h3>\r
+                       <p><%- list[0][key] %></p>\r
+               <% } %>\r
+       <% } %>\r
        <form action="/profile/detail" method="POST">\r
                <input type="hidden" name="_csrf" value="<%= token %>"></input>\r
                <input type="hidden" value="<%= list[0].name %>" name="name"/>\r
index 084eb2c..f207dcd 100644 (file)
                                <td><input type="text" value="<%= list[0].name %>" name="name"/></td>\r
                        </tr>\r
                        <tr>\r
-                               <td>性別</td>\r
-                               <td><input type="text" value="<%=list[0].gender %>" name="gender"/></td>\r
-                       </tr>\r
-                       <tr>\r
                                <td>パスワード</td>\r
                                <td>\r
                                        <input type="text" value="" name="password"/><br/>\r
                                        <input type="checkbox" name="updatepw" value="true">パスワードを更新する</input>\r
                                </td>\r
                        </tr>\r
+               <% for(var key in alias) {%>\r
                        <tr>\r
-                               <td>年齢</td>\r
-                               <td><input type="text" value="<%= list[0].age %>" name="age"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>身長</td>\r
-                               <td><input type="text" value="<%= list[0].height %>" name="height"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>体重</td>\r
-                               <td><input type="text" value="<%= list[0].weight %>" name="weight"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>種族</td>\r
-                               <td><input type="text" value="<%= list[0].race %>" name="race"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>備考</td>\r
-                               <td><textarea name="etc" rows="4" cols="50"><%= list[0].etc %></textarea></td>\r
+                               <% if(typeof alias[key] != "undefined") {%>\r
+                                       <td><%= alias[key] %></td>\r
+                                       <td>\r
+                                       <% if(inputtype[key] == "text" || inputtype[key] == "hiddentext"){ %>\r
+                                               <input type="text" value="<%= list[0][key] %>" name="<%= key %>"/>\r
+                                       <% }else if(inputtype[key] == "textarea"){ %>\r
+                                               <textarea name="<%= key %>" rows="4" cols="50"><%= list[0][key] %></textarea>\r
+                                       <% } %>\r
+                                       </td>\r
+                               <% } %>\r
                        </tr>\r
+               <% } %>\r
                </table>\r
                <input type="hidden" name="_csrf" value="<%= token %>"></input>\r
                <input type="submit" value="編集" name="edit"/>\r
index 96ec685..e8b749f 100644 (file)
                                <td>パスワード</td>\r
                                <td><input type="text" value="" name="password"/></td>\r
                        </tr>\r
-                       <tr>\r
-                               <td>性別</td>\r
-                               <td><input type="text" value="" name="gender"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>年齢</td>\r
-                               <td><input type="text" value="" name="age"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>身長</td>\r
-                               <td><input type="text" value="" name="height"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>体重</td>\r
-                               <td><input type="text" value="" name="weight"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>種族</td>\r
-                               <td><input type="text" value="" name="race"/></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>備考</td>\r
-                               <td><textarea name="etc" rows="4" cols="50"></textarea></td>\r
-                       </tr>\r
+               <% for(var key in alias) {%>\r
+                       <tr>\r
+                               <% if(typeof alias[key] != "undefined" && typeof inputtype[key] != "undefined") {%>\r
+                                       <td><%= alias[key] %></td>\r
+                                       <td>\r
+                                       <% if(inputtype[key] == "text"){ %>\r
+                                               <input type="text" value="" name="<%= key %>"/>\r
+                                       <% }else if(inputtype[key] == "textarea"){ %>\r
+                                               <textarea name="<%= key %>" rows="4" cols="50"></textarea>\r
+                                       <% } %>\r
+                                       </td>\r
+                               <% } %>\r
+                       </tr>\r
+               <% } %>\r
                </table>\r
                <input type="hidden" name="_csrf" value="<%= token %>"></input>\r
                <input type="submit" value="登録" name="registor"/>\r
index 88a17e9..dfc2776 100644 (file)
@@ -70,6 +70,8 @@
        <p>例:$profile_link=http://localhost/profile.cgi?name=%n</p>\r
        <h2>コマンドの追加方法</h2>\r
        <p>WebChatでは必要に応じて外部コマンドを追加することができます。追加する場合はchat.ejsのcommandparser.jsを呼び出している行よりも後に追加してください。そうでない場合、正常に動作しないことがあります</p>\r
+       <h2>プロフィールに項目を追加する方法</h2>\r
+       <p>init.sqlとconfigure.jsを編集することで項目を増減させることができます。なお、Don't editで囲まれた部分は削除しないでください。削除すると正常に動作しなくなります</p>\r
        <h2>トラブルシューティング</h2>\r
        <h3>500 Redis connection to [サイト名] failed - connect ECONNREFUSEDと表示される</h3>\r
        <p>Redisサーバーが起動していない。もしくは$redisHost,$redisPort,$redisPasswordの設定が間違っていることが考えられます</p>\r