Ejemplo n.º 1
0
 /**
  * Search based on current config
  * @param $query
  * @param array $rules
  * @return array
  */
 public function searchFriend($query, $rules = array())
 {
     $config = CFactory::getConfig();
     $my = CFactory::getUser();
     $nameField = $config->getString('displayname');
     $data = array();
     $myFriends = $my->getFriendIds();
     $allowSelf = true;
     // to allow the own user in the list
     /*
      * type of rules,
      * public = friends only and whoever is in the id
      * private = only those who is in the id array
      */
     if (count($rules) > 1) {
         switch ($rules['case']) {
             case 'all-friends':
                 //return everyone, full list
                 // do nothing since everyone returned is in full list
                 $myFriends = $my->getFriendIds();
                 break;
             case 'private-message-tag':
                 // only return active participant in the conversation
                 $msgModel = CFactory::getModel('inbox');
                 $membersIds = $msgModel->getParticipantsID($rules['message_id'], $my->id);
                 $myFriends = $membersIds;
                 break;
             case 'video-comment-tag':
                 //this is a video and we should return a list of user who has been tagged in the video
                 $tagModel = CFactory::getModel('videotagging');
                 $taggedList = $tagModel->getTaggedList($rules['video_id']);
                 $membersIds = array();
                 foreach ($taggedList as $member) {
                     $membersIds[] = $member->userid;
                 }
                 //for commentors
                 $members = CWallLibrary::getWallUser($rules['video_id'], 'videos');
                 $membersIds = array_merge($membersIds, array_map('current', $members));
                 //we merge people who has been tagged in the video, commented and friends
                 $myFriends = array_merge($myFriends, $membersIds);
                 break;
             case 'photo-comment-tag':
                 $tagModel = CFactory::getModel('phototagging');
                 $taggedList = $tagModel->getTaggedList($rules['photo_id']);
                 $membersIds = array();
                 foreach ($taggedList as $member) {
                     $membersIds[] = $member->userid;
                 }
                 // this is a photo comment tagging rules, not the photo tagging rules, so, include user who has been tagged in photo and whoever commented
                 $members = CWallLibrary::getWallUser($rules['photo_id'], 'photos');
                 $membersIds = array_merge($membersIds, array_map('current', $members));
                 //in this case, we merge people who has been tagged in the photo, commented and friends
                 $myFriends = array_merge($myFriends, $membersIds);
                 break;
             case 'photo-tag':
                 $tagModel = CFactory::getModel('phototagging');
                 $taggedList = $tagModel->getTaggedList($rules['photo_id']);
                 $membersIds = array();
                 foreach ($taggedList as $member) {
                     $membersIds[] = $member->userid;
                 }
                 //in this case, we remove all the member id who already been tagged
                 $myFriends[] = $my->id;
                 $myFriends = array_diff(array_unique($myFriends), $membersIds);
                 break;
             case 'public-comment':
                 //we can get the poster as well
                 $table = JTable::getInstance('Activity', 'CTable');
                 $table->load($rules['activity_id']);
                 $wall = CWallLibrary::getWallUser($rules['activity_id']);
                 $memberIds = array_map('current', $wall);
                 $memberIds[] = $table->actor;
                 //in comment, only my friends or those who have commented can be tagged
                 $myFriends = array_unique(array_merge($memberIds, $myFriends));
                 $allowSelf = false;
                 break;
             case 'group':
                 $groupModel = CFactory::getModel('groups');
                 $approvedMembers = $groupModel->getMembers($rules['group_id'], 0, true, false, true);
                 $membersIds = array();
                 foreach ($approvedMembers as $member) {
                     $membersIds[] = $member->id;
                 }
                 //now, we need to know if this group is private or not
                 $group = JTable::getInstance('Group', 'CTable');
                 $group->load($rules['group_id']);
                 if ($group->approvals) {
                     // can only tag members
                     $myFriends = $membersIds;
                 } else {
                     // can tag friends and members of the group
                     $myFriends = array_unique(array_merge($membersIds, $myFriends));
                 }
                 $allowSelf = false;
                 break;
             case 'discussion':
                 //group discussion
                 // Load models
                 $discussion = JTable::getInstance('Discussion', 'CTable');
                 $discussion->load($rules['discussion_id']);
                 $groupModel = CFactory::getModel('groups');
                 $approvedMembers = $groupModel->getMembers($discussion->groupid, 0, true, false, true);
                 $membersIds = array();
                 foreach ($approvedMembers as $member) {
                     $membersIds[] = $member->id;
                 }
                 //now, we need to know if this group is private or not
                 $group = JTable::getInstance('Group', 'CTable');
                 $group->load($discussion->groupid);
                 if ($group->approvals) {
                     // can only tag members
                     $myFriends = $membersIds;
                 } else {
                     // can tag friends and members of the group
                     $myFriends = array_unique(array_merge($membersIds, $myFriends));
                 }
                 $allowSelf = false;
                 break;
             case 'event':
                 $event = JTable::getInstance('Event', 'CTable');
                 $event->load($rules['event_id']);
                 $eventMembers = $event->getMembers(COMMUNITY_EVENT_STATUS_ATTEND, 0, CC_RANDOMIZE);
                 $membersIds = array();
                 foreach ($eventMembers as $member) {
                     $membersIds[] = $member->id;
                 }
                 if ($event->permission == 1) {
                     // can only tag members
                     $myFriends = $membersIds;
                 } else {
                     $myFriends = array_unique(array_merge($membersIds, $myFriends));
                 }
                 $allowSelf = false;
                 break;
             case 'album':
                 //able to tag any friends.
                 //for commentors
                 $membersIds = array();
                 $members = CWallLibrary::getWallUser($rules['album_id'], 'albums');
                 $membersIds = array_merge($membersIds, array_map('current', $members));
                 //we merge people who has been tagged in the video, commented and friends
                 $myFriends = array_merge($myFriends, $membersIds);
                 break;
         }
     }
     if (isset($rules['case']) && $rules['case'] != '') {
         //we always make sure that we load our own friends only.
         $result = array();
         $friends = array_merge($my->getFriendIds(), array($my->id), $myFriends);
         // add our own id in the list as well
         if (!$allowSelf) {
             //remove self tagging if needed
             $friends = array_diff($friends, array($my->id));
         }
         $friends = array_unique($friends);
         foreach ($friends as $friend) {
             $usr = CFactory::getUser($friend);
             if (!$usr->isBlocked()) {
                 $result[] = $usr;
             }
         }
     }
     return $result;
 }