openpne 2.x 友達以外からのメッセージ拒否機能の作成手順メモ
openpne 2.x系でありそうでない「友達以外からのメッセージ拒否設定」を導入したのでメモ。
メッセージ画面に[設定]って項目を作って、設定してる場合、
お友達以外からのメッセージを拒否できる機能っす。
おおまかな手順
1.メッセージページに[設定画面]を追加する
/webapp/modules/pc/templates/h_message_box.tpl
2.バリデーション処理(新規作成)
/webapp/modules/pc/do/h_message_box_setting.php
3.新規変数の許可設定(新規作成)
/webapp/modules/pc/validate/do/h_message_box_setting.ini
4.友達以外からのメッセージ受信するかどうかフラグを追加する
/webapp/lib/util/util.php
5.拒否設定している場合、友達限定フラグを立てる
/webapp/modules/pc/page/f_message_send.php
6.テンプレPC:拒否設定されている場合、ごめんなさいメッセージを出す
/webapp/modules/pc/templates/f_message_send.tpl
1.メッセージページに[設定画面]を追加する
/webapp/modules/pc/templates/h_message_box.tpl
適当な位置に追記
({elseif $box == "setting"}) ({t_form_block _method=get m=pc a=do_h_message_box_setting _attr='name="do_h_message_box_setting"'}) <input type="hidden" name="box" value="({$box})" /> <div id="Center"> <div class="dparts formTable"><div class="parts"> <div class="partsHeading"><h3>設定</h3></div> <div class="block"> <div style="padding:5px"> <table> <tr><td>友達以外からのメッセージ</td> <td><ul> <li><input type="radio" class="input_radio" name="IS_FRIEND_ONLY_MESSAGE" id="is_friend_only_message_1" value="1"({if $C_MEMBER_CONFIG.IS_FRIEND_ONLY_MESSAGE}) checked="checked"({/if}) /><label for="is_friend_only_message_1">受信しない</label></li> <li><input type="radio" class="input_radio" name="IS_FRIEND_ONLY_MESSAGE" id="is_friend_only_message_0" value="0"({if !$C_MEMBER_CONFIG.IS_FRIEND_ONLY_MESSAGE}) checked="checked"({/if}) /><label for="is_friend_only_message_0">受信する</label> </li> </ul></tr> </td></tr> <tr> <td colspan=2 align=center> <input class="input_submit" type=submit value="設定する"> </td> </tr> </table> ({/t_form_block}) </div> </div> </div></div> </div>
同ファイル左メニューのところに挿入
({if $box != "trash"})<li><a href="({t_url m=pc a=page_h_message_box})&box=trash">ごみ箱</a></li> ({else})<li class="looking">ごみ箱</li> ({/if}) ({if $box != "setting"})<li><a href="({t_url m=pc a=page_h_message_box})&box=setting">設定</a></li> ({else})<li class="looking">設定</li> ({/if})
2.メッセージページで設定された内容を処理する
/webapp/modules/pc/do/h_message_box_setting.php (新規作成する)
<?php class pc_do_h_message_box_setting extends OpenPNE_Action { function execute($requests) { $u = $GLOBALS['AUTH']->uid(); $c_message_id = $requests['c_message_id']; $box = $requests['box']; $default_config = util_get_c_member_config_default(); foreach ($requests as $key => $value) { if (!is_null($value) && array_key_exists($key, $default_config)) { db_member_update_c_member_config($u, $key, $value); } } $p = array('box' => $box); openpne_redirect('pc', 'page_h_message_box', $p); } } ?>
3.バリデーション処理
/webapp/modules/pc/validate/do/h_message_box_setting.ini (新規作成する)
[box] type = "string" default = "" [IS_FRIEND_ONLY_MESSAGE] type = "bool"
4.友達以外からのメッセージ受信するかどうかフラグを追加する
/webapp/lib/util/util.php
function util_get_c_member_config_default() { $default_config = array( 'SEND_DIARY_COMMENT_MAIL_KTAI' => 0, 'IS_DISPLAY_NEWDIARY_HOME' => 1, 'IS_DISPLAY_NEWTOPIC_HOME' => 1, 'IS_DISPLAY_NEWDIARY_HOME_KTAI' => 1, 'IS_DISPLAY_NEWTOPIC_HOME_KTAI' => 1, 'IS_DISPLAY_BOOKMARK_DIARY_HOME' => 1, 'IS_DISPLAY_BOOKMARK_BLOG_HOME' => 1, 'IS_DISPLAY_SCHEDULE_HOME' => 1, 'IS_FRIEND_ONLY_MESSAGE' => 0, //←追加 ); return $default_config; }
5.拒否設定している場合、友達限定フラグを立てる
/webapp/modules/pc/page/f_message_send.php
// 友達以外から拒否機能 $C_TARGET_CONFIG = util_get_c_member_config($target_c_member_id); $is_friend = db_friend_is_friend($u, $target_c_member_id); if(!$is_friend && $C_TARGET_CONFIG["IS_FRIEND_ONLY_MESSAGE"] == 1){ $this->set("IS_VIEW_ONLY_FRIEND", 1); }
6.テンプレPC:拒否設定されている場合、ごめんなさいメッセージを出す
/webapp/modules/pc/templates/f_message_send.tpl
({if $IS_VIEW_ONLY_FRIEND}) <div style="text-align:center"> 友達以外からのメッセージはお断りしてます。<br> </div> ({else}) <!-- ※元のフォーム部分のテンプレを囲う --> ... ({/if})
7.拒否設定されている場合、権限エラーを出す(ガラケー用は内部処理だけ)
/webapp/modules/ktai/page/f_message_send.php
// 友達以外から拒否機能 $C_TARGET_CONFIG = util_get_c_member_config($target_c_member_id); $is_friend = db_friend_is_friend($u, $target_c_member_id); if(!$is_friend && $C_TARGET_CONFIG["IS_FRIEND_ONLY_MESSAGE"] == 1){ handle_kengen_error(); }