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を渡すのがよさそう。
以上です!
コメントはまだありません。