OPENPNEで、全員フレンド機能の実装

OPENPNEで、登録した会員は全員、お友達でいいよ!という場合に、ユーザ新規登録時に、フレンドリストを更新しちゃおうという機能。

企業SNSや、特定の目的のみのユーザでSNSを構築する場合、お友達機能は不要なことがあります。

全員、仲間でしょう!というとき。

そんな状況のために、全員をマイフレンドにする機能を実装したので、記録。

環境はOPENPNE3

1.お友達情報は、member_relationshipというテーブルに格納されている。

基本的に、このテーブルを更新するだけでOK。

id 登録順に連番
member_id_to 対象メンバーのID
member_id_from 主体メンバーのID
is_friend 友達かどうか
is_friend_pre 友達承認待ちかどうか
is_access_block アクセスブロックしているかどうか
created_at 作成日時
updated_at 更新日時

ソースは下記

$sql = “select id from `member` where is_active=’1′ and id!=’$myNumber'”;
$result = $db->queryAll($sql);
if (MDB2::isError( $result )) {
die($result->getMessage());
}
print_r($result);
$types = array(‘integer’,’integer’,’integer’, ‘text’, ‘text’);
$table=”member_relationship”;
$prepare=”INSERT INTO $table VALUES (:id, :name, :lang)”;
$sth = $db->prepare(
‘INSERT INTO ‘.$table.’ (
`member_id_to` ,
`member_id_from` ,
`is_friend` ,
`created_at` ,
`updated_at`
) VALUES (:to, :from, :is_friend,:create , :update)’, $types);
if (PEAR::isError($sth)){
echo $sth->getDebugInfo();
exit();
}
foreach($result as $member){
$id=$member[0];
if($myNumber==$id){
continue;
}
print $id.”hello<br>”;
$data[to]=$id;
$data[from]=$myNumber;
$data[is_friend]=1;
$data[create]=date(“Y-m-d H:m:s”);
$data[update]=date(“Y-m-d H:m:s”);
$affectedRows = $sth->execute($data);
}

上記のようなソースでOK.

ただ、これだと、何度も実行した場合に、重複してレコードができてしまう。

その場合、toとfromのセットがUNIQUEじゃないとダメっていうチェックがDBのほうに入ってるから、エラーになるんだけども、気になる人は、しっかりチェックしてからinsertしてください。

2.ユーザ登録時に、自動的に実行する。

これにちょっとハマった。

ユーザ登録時、どこで処理をおこなっているのか、わかりにくかったので。

PNE2系だとぽろぽろ情報がでてくるんだけど、PNE3だとどうも情報が少ないですね。

結論からいうと、lib/action/opMemberAction.class.phpのexecuteRegisterInputに記述してやればOK.

さきほどのソースに、$this->idを渡してあげればOK.

上記ソースをfunction化してあげて、$this->idを渡すのがよさそう。

以上です!

  1. コメントはまだありません。

  1. 2010年 7月7日
    トラックバック先 :SCOTT