Hello,
I wanted to know if there is a better way to do this ?

//my old way of getting all my friends but has no pagination.
 class FriendsController extends AppController
 {
        var $name = 'Friends';
        function view($memberId = null)
        {
                if (!isset($memberId) ){
                        $memberId = $this->Authentication->getId();
                }
                $this->pageTitle = "View Friends of " . $memberData["Member"]
["fname"];

                $this->set('memberData',$memberData);
                $this->set('friendList', 
$this->Friend->getFriendList($memberId));
                $this->render();
        }
}
?>
<?php
class Friend extends AppModel {
        var $name = 'Friend';

        function getFriendList($personId = null)
        {
                if (!isset($personId) || empty($personId))
                {
                        return false;
                }
                else
                {
                        $q = "SELECT Member.id, Member.fname, Member.lname, 
Profile.gender,
Profile.primaryPhotoSrc FROM members Member JOIN profiles Profile ON
Member.id = Profile.member_id WHERE Member.id IN ( SELECT
receiver_member_id FROM friends WHERE sender_member_id = '" .
$personId . "') and Member.isActive = '1' order by Member.fname";
                        return $this->query($q);
                }
        }
}
?>

/******** The above is the old way i did it. I want to be able to
paginate my view.
          Is there a better way to do it than the way i have it
below ? ***************/

 <?php
  class FriendsController extends AppController
  {
        var $name = 'Friends';
        var $paginate = array(
                        'fields' => array('Member.id', 'Member.fname',
'Member.lname','Member.modified',
'Profile.gender','Profile.primaryPhotoSrc'),
                        'order' => array('Member.fname' => 'asc'),
                        'limit' => 10
                        );

        function view($memberId = null)
        {
                $friendIdsExtracted = array();
                $memberData = array();

                //I'd like to view person X's friends.
                if (isset($memberId) ){
                        $this->Session->del($this->name.'.friendId');
                        $this->Session->del($this->name.'.friendIdsExtracted');
                }

                //Scenario: I just in to this action with a memberId and I am
currently going
                //through or paging through all of his friends
                if($this->Session->check($this->name.'.friendId')){
                        $memberData = 
$this->Session->read($this->name.'.memberData');
                        $friendId =  
$this->Session->read($this->name.'.friendId');
                        $friendIdsExtracted = $this->Session->read($this-
>name.'.friendIdsExtracted');

                }else{
                        //I just came into this action with a memberId.
                        //and I'd like to see page 1 of all of his friends.

                                if( !isset($memberId) ){
                                        $memberId = $this->Auth->user("id");
                                }
                                $memberData = 
$this->Member->getActiveMemberInfoById($memberId);

                                //if they want to view friends of a non active 
member, return him
to member page.
                                if (empty($memberData) ){
                                        
$this->redirect(array("controller"=>"members",
"action"=>"index"),null,true);
                                }

                                //keeping with the fact that i just came in 
with a memberId and i
am on page1
                                //I want a list of ids that I am a friend with. 
this is similar to
the inner select
                                //i had before : SELECT receiver_member_id FROM 
friends WHERE
sender_member_id = '" . $personId . "'

                                $listofIds = 
$this->Friend->findAll(array("sender_member_id" =>
$memberId), array("receiver_member_id"));

                                //the list of ids returned is like
[0]=>array([Friend]=>array(receiver_member_id=>x)),
                                //manipulate list to show only the ids.
                                $friendIdsExtracted =
Set::extract($listofIds,'{n}.Friend.receiver_member_id');

                                
$this->Session->write($this->name.'.memberData', $memberData);
                                $this->Session->write($this->name.'.friendId', 
$memberId);
                                
$this->Session->write($this->name.'.friendIdsExtracted',
$friendIdsExtracted);
                }

                //this makes the paginate function do a select the above fields 
from
Member where id in (a,b,c,d,e,f,g,h) limit x,y
                $conditions= array("Member.id" => $friendIdsExtracted);

                $this->set('memberData', $memberData);
                $this->set('friendList', $this->paginate('Member', 
$conditions));
        }


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to