アーカイブ

« 1 ... 3 4 5 (6)

Tyzohブログ - ikarashiさんのエントリ
 ikarashiさんのエントリ配信

2007/07/18
[Secure-SBM:023] コメントの一覧表示

執筆者: ikarashi (10:01 am)
こんにちは,五十嵐です.ブックマークを登録しているユーザとコメントの一覧を作成します.

ユーザの一覧は "/listbookmarkusers" で呼び出します.ブックマークの ID を bookmarkid とすると,"/listbookmarkusers/bookmarkid" という具合に呼び出します.

指定されたブックマークをテーブルから検索し,URL とタイトルを取得します.
    if( my $bdb = $c->model('SecureSBMDB::Bookmark')->find(
                        {
                            bookmark_id => $bookmarkid
                        }       
                )
    ){              
        my $bookmark = {
            url => $bdb->bookmark_uri,
            title => $bdb->bookmark_title
        };
       ...


ブックマークしているユーザを検索し,プロフィールの設定から,ニックネームを公開しているかどうかを確認します.ニックネームが公開されていればニックネームを,そうでなければユーザ ID の番号を変数 $nickname に格納します.コメントも一旦変数 $comment に格納しておきます.
        my %user;
        my @users;
        my $usersnum = 0;
        foreach my $ubdb ($bdb->user_bookmarks->search(
                {
                    -or     =>  \@ORquery,
                    -and    =>  \@ANDquery,
                },
                {
                    join    =>  [qw/
                        user_bookmark_roles
                    /],
                    order_by    =>  'user_bookmark_ts DESC',
                }
                )
        ){
            my $userid = $ubdb->user_id;
            my $profile = $ubdb->user->user_profiles->find({user_id => $userid});

            my $nickname;
            if( $profile->user_profile_nickname_publish == 1 ){
                $nickname = '<ul class="noId"><li>'
                    . $profile->user_profile_nickname
                    . '</li></ul>';
            }else{
                $nickname = '<ul class="onlyId"><li>'
                    . $profile->user_id
                    . '</li></ul>';
            }

            my $comment = $ubdb->user_bookmark_comment;
       ...
    }
発行したい SQL はわかっているのに search() でどのように書くのか,というところでちょっと苦労しました.ロールとの関連性を記述している user_bookmark_roles の指定の仕方.ここが今回のポイントです.

話が前後しますが,ブックマークが public (role_id が 2 番)か,public ではない場合,閲覧しようとしているユーザのロールとを設定し,上の @ORquery に設定しておきます.
    my @ORquery = ({'user_bookmark_roles.role_id' => 2});
    if( $c->user_exists ){
        my $udb = $c->stash->{user};
        foreach my $ur ($udb->user_roles->all){
            push( @ORquery, {'user_bookmark_roles.role_id' => $ur->role_id} );
        }
    }

最後に,一覧するものがあれば stash に格納してテンプレート (View) に渡します.

if( defined $bookmark && $#users > 0 ){ 
    $c->stash->{bookmark} = $bookmark; 
    $c->stash->{publishusers} = \@users; 
    $c->stash->{usersnum} = $#users; 
} 

あとは,テンプレート側で体裁を整えれば終了です.

2007/06/22 記

参考:

Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
ikarashiさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (3894)
Trackback is not accepted now.
印刷用ページ 友達に送る
 
投稿された内容の著作権はコメントの投稿者に帰属します。
サイト内検索
ブログ カレンダー
«  «  2008 3月  »  »
24 25 26 27 28 29 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5