Hatena::ブログ(Diary)

satoru.netの自由帳 このページをアンテナに追加 RSSフィード

131022Tueday

[]openpne 2.x アクセスブロックページで相手のニックネーム&IDを表示させる

相手のプロフページのリンクを踏むと、エラーページにリダイレクトされる仕様なので、

「先にアクセスブロックされると、相手のIDがわからなくて泣き寝入りするしかない!どうにかして!」

というご相談がユーザから着たので対応。

アクセスブロックされたエラーページで相手のニックネーム、IDを表示させるように修正。

まあ、ちょっと詳しい人ならURLみればわかるんだけどねえ。。


1.アクセスブロック時にmember_idのパラメータを付与させてからリダイレクトするように

/webapp/modules/pc/page/f_home.php 28行目あたり

        if (db_member_is_access_block($u, $target_c_member_id)) {
            openpne_redirect('pc', 'page_h_access_block',array("target_c_member_id" => $target_c_member_id));
        }

2.飛んできたパラメータテンプレ変数にセット

/webapp/modules/pc/page/h_access_block.php 14行目あたり

        if($_REQUEST['target_c_member_id'] && preg_match("/^\d+$/",$_REQUEST['target_c_member_id'])){
         $target_c_member = db_member_c_member_with_profile($_REQUEST['target_c_member_id'], 'private');
         $this->set('target_c_member', $target_c_member);
        }

3.validationを設置(数値の改変予防)

/var/www/sites/pocha3.com/webapp/modules/pc/validate/page

[target_c_member_id]
type = "int"
required = 0
min = 1

4.エラーページのテンプレHTML

/var/www/sites/pocha3.com/webapp/modules/pc/templates/h_access_block.tpl 適当なとこに

<div class="block">
<p>大変、申し訳ございません。<br>
({if $target_c_member})
({$target_c_member.nickname})さん (ID:({$target_c_member.c_member_id})) のページにはアクセスできません。</p>
({else})
申し訳ございませんがこのメンバーのページにはアクセスできません。
({/if})
</div>

131021Monday

[]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

7.拒否設定されている場合、権限エラーを出す(ガラケー用は内部処理だけ)

/webapp/modules/ktai/page/f_message_send.php

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

100627Sunday

[][]openpne メール設定

sakuraの専用サーバ(CentOS)を使っていて(最小構成)、

DNS管理はvalue-domainな構成のときのOpenPNEのメール設定の手順。

面倒くさそうだけど、手順どおりにやればDNS浸透(約10分)、作業(5分)くらいでできる。

value-domainのdns設定

ログイン > DNSレコード/URL転送の変更 > (あなたのドメイン)

mx mail 10
a mail [IP]
txt mx v=spf1 a mx ip4:[IP]

openpne設定

config.phpを編集

define('MAIL_SERVER_DOMAIN', 'あなたのドメイン');
define('MAIL_DEBUG_LOG', true);

postfixインストール

sendmailを停止、標準メールサーバpostfixに切り替え。

yum install postfix
/etc/init.d/sendmail stop

/usr/sbin/alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
   1           /usr/sbin/sendmail.postfix
*+ 2           /usr/sbin/sendmail.sendmail

Enter to keep the current selection[+], or type selection number: 1

/sbin/chkconfig postfix  on

postfix設定

openpne用設定ファイル作成

vi /etc/postfix/virtual.openpne

/^get(@.*)?$/ openpne-request
/^p[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^t[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^b[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^bi[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^ci[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^ti[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^bc[0-9]+-[0-9a-z]{12}(@.*)?$/ openpne-request
/^blog(@.*)?$/ openpne-request
postfix設定ファイル編集

vi /etc/postfix/main.cf

myhostname = 設定したいドメイン
mydomain = 設定したいドメイン
myorigin = $mydomain
#inet_interfaces = localhost
inet_interfaces = all
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

message_size_limit = 10485760
virtual_alias_maps = pcre:/etc/postfix/virtual.openpne

openpne用リクエストメールアカウント作成

vi /etc/aliases

...
openpne-request: "|/usr/bin/php [openpneのpath]/bin/mail.php"
...

newaliases

postfix起動

/etc/init.d/postfix restart

動作確認

  • 携帯からメール新規登録できるか
  • 携帯からアクセスして日記が投稿できるか

おまけ:デバッグ

openpneのconfig.phpの中にメール受信時にvar/log/mail.logにログを吐くように設定できるので

define('MAIL_DEBUG_LOG', true);

有効にしてtailで受信できるかエラー内容などを確認しながらやる

[][]openpne 認証文字 簡単にする

デフォルトは6文字の英数字だけど、セキュリティー的にはあれだけど

数字だけ&2文字とかに短くしたいときのやりかたメモ。

/lib/include/kcaptcha/kcaptcha_config.php

#$allowed_symbols = "23456789abcdeghkmnpqrsuvxyz";
#$length = mt_rand(6,7); # random 6 or 7

$allowed_symbols = "0123456789"; #数字だけにする
$length = 2; #2文字固定

結果確認

PCの新規登録画面でこんなふーになればおk

f:id:satoru_net:20100627084721j:image

[][]openpne 画像がでない 解決法

gdインストール忘れ

yum install -y php-gd

.htaccessが動いてない

AllowOverride Allする。sakuraサバーで初期状態だと設定されてない。

<VirtualHost *:80>
...

<Directory />
AllowOverride All
</Directory>

...

</VirtualHost>

過去にもおなじことやってた・・

http://d.hatena.ne.jp/satoru_net/20090401/1238545081

[][]openpneでCall to undefined function mb_language

メモ

sudo yum -y install php-mbstring

で解決

©satoru.net
Mail Twitter