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();
}