예제 #1
0
 /**
  * Add comment to the stream
  *
  * @param int   $actid acitivity id
  * @param string $comment
  * @return obj
  */
 public function ajaxStreamAddComment($actid, $comment, $photoId = 0)
 {
     $filter = JFilterInput::getInstance();
     $actid = $filter->clean($actid, 'int');
     $my = CFactory::getUser();
     $wallModel = CFactory::getModel('wall');
     $rawComment = $comment;
     $json = array();
     $photoId = $filter->clean($photoId, 'int');
     // Pull the activity record and find out the actor
     // only allow comment if the actor is a friend of current user
     $act = JTable::getInstance('Activity', 'CTable');
     $act->load($actid);
     //who can add comment
     $obj = $act;
     if ($act->groupid > 0) {
         $obj = JTable::getInstance('Group', 'CTable');
         $obj->load($act->groupid);
     } else {
         if ($act->eventid > 0) {
             $obj = JTable::getInstance('Event', 'CTable');
             $obj->load($act->eventid);
         }
     }
     //link the actual comment from video page itself to the stream
     if (isset($obj->comment_type) && $obj->comment_type == 'videos.linking') {
         $obj->comment_type = 'videos';
     }
     $params = new CParameter($act->params);
     $batchcount = $params->get('batchcount', 0);
     $wallParam = new CParameter('');
     if ($act->app == 'photos' && $batchcount > 1) {
         $photo = JTable::getInstance('Photo', 'CTable');
         $photo->load($params->get('photoid'));
         $act->comment_type = 'albums';
         $act->comment_id = $photo->albumid;
         $wallParam->set('activityId', $act->id);
     }
     //if photo id is not 0, this wall is appended with a picture
     if ($photoId > 0) {
         //lets check if the photo belongs to the uploader
         $photo = JTable::getInstance('Photo', 'CTable');
         $photo->load($photoId);
         if ($photo->creator == $my->id && $photo->albumid == '-1') {
             $wallParam->set('attached_photo_id', $photoId);
             //sets the status to ready so that it wont be deleted on cron run
             $photo->status = 'ready';
             $photo->store();
         }
     }
     // Allow comment for system post
     $allowComment = false;
     if ($act->app == 'system') {
         $allowComment = !empty($my->id);
     }
     if ($my->authorise('community.add', 'activities.comment.' . $act->actor, $obj) || $allowComment) {
         $table = JTable::getInstance('Wall', 'CTable');
         $table->type = $act->comment_type;
         $table->contentid = $act->comment_id;
         $table->post_by = $my->id;
         $table->comment = $comment;
         $table->params = $wallParam->toString();
         if (preg_match("/\\b(?:(?:https?|ftp):\\/\\/|www\\.)[-a-z0-9+&@#\\/%?=~_|!:,.;]*[-a-z0-9+&@#\\/%=~_|]/i", $comment)) {
             $graphObject = CParsers::linkFetch($comment);
             if ($graphObject) {
                 $graphObject->merge($wallParam);
                 $table->params = $graphObject->toString();
             }
         }
         $table->store();
         $cache = CFactory::getFastCache();
         $cache->clean(array('activities'));
         if ($act->app == 'photos') {
             $table->contentid = $act->id;
         }
         $table->params = new CParameter($table->get('params'));
         $args[] = $table;
         CWall::triggerWallComments($args, false);
         $comment = CWall::formatComment($table);
         $json['html'] = $comment;
         //notification for activity comment
         //case 1: user's activity
         //case 2 : group's activity
         //case 3 : event's activity
         if ($act->groupid == 0 && $act->eventid == 0) {
             // //CFactory::load( 'libraries' , 'notification' );
             $params = new CParameter('');
             $params->set('message', $table->comment);
             $url = 'index.php?option=com_community&view=profile&userid=' . $act->actor . '&actid=' . $actid;
             $params->set('url', $url);
             $params->set('actor', $my->getDisplayName());
             $params->set('actor_url', CRoute::_('index.php?option=com_community&view=profile&userid=' . $my->id));
             $params->set('stream', JText::_('COM_COMMUNITY_SINGULAR_STREAM'));
             $params->set('stream_url', $url);
             if ($my->id != $act->actor) {
                 $command = 'profile_activity_add_comment';
                 /* Notifications to all poster in this activity except myself */
                 $users = $wallModel->getAllPostUsers($act->comment_type, $act->id, $my->id);
                 if (!empty($users)) {
                     if (!in_array($act->actor, $users)) {
                         array_push($users, $act->actor);
                     }
                     $commenters = array_diff($users, array($act->actor));
                     // this will sent notification to the participant only
                     CNotificationLibrary::add('profile_activity_add_comment', $my->id, $commenters, JText::sprintf('COM_COMMUNITY_ACTIVITY_WALL_PARTICIPANT_EMAIL_SUBJECT'), '', 'profile.activityreply', $params);
                     // this will sent a notification to the poster, reason is that the title should be different
                     CNotificationLibrary::add('profile_activity_add_comment', $my->id, $act->actor, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_EMAIL_SUBJECT'), '', 'profile.activityreply', $params);
                 } else {
                     CNotificationLibrary::add('profile_activity_add_comment', $my->id, $act->actor, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_EMAIL_SUBJECT'), '', 'profile.activitycomment', $params);
                 }
             } else {
                 //for activity reply action
                 //get relevent users in the activity
                 $users = $wallModel->getAllPostUsers($act->comment_type, $act->id, $act->actor);
                 if (!empty($users)) {
                     CNotificationLibrary::add('profile_activity_reply_comment', $my->id, $users, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_USER_REPLY_EMAIL_SUBJECT'), '', 'profile.activityreply', $params);
                 }
             }
         } elseif ($act->groupid != 0 && $act->eventid == 0) {
             /* Group activity */
             $params = new CParameter('');
             $params->set('message', $table->comment);
             $url = 'index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $act->groupid . '&actid=' . $actid;
             $params->set('url', $url);
             $params->set('actor', $my->getDisplayName());
             $params->set('actor_url', CRoute::_('index.php?option=com_community&view=profile&userid=' . $my->id));
             $params->set('stream', JText::_('COM_COMMUNITY_SINGULAR_STREAM'));
             $params->set('stream_url', $url);
             if ($my->id != $act->actor) {
                 /**
                  * Adds notification data into the mailq table
                  * @uses Make sure your provide body parameter or email content will be empty
                  * @param type $command
                  * @param null $actorId
                  * @param type $recipients
                  * @param type $subject
                  * @param type $body
                  * @param type $templateFile
                  * @param type $mailParams
                  * @param type $sendEmail
                  * @param type $favicon
                  * @param type $altSubject
                  * @return type
                  */
                 CNotificationLibrary::add('groups_activity_add_comment', $my->id, $act->actor, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_GROUP_EMAIL_SUBJECT'), $table->comment, 'group.activitycomment', $params);
                 $users = $wallModel->getAllPostUsers($act->comment_type, $act->id, $act->actor);
             } else {
                 //for activity reply action
                 //get relevent users in the activity
                 $users = $wallModel->getAllPostUsers($act->comment_type, $act->id, $act->actor);
                 if (!empty($users)) {
                     CNotificationLibrary::add('groups_activity_add_comment', $my->id, $users, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_USER_REPLY_EMAIL_SUBJECT'), $table->comment, 'group.activityreply', $params);
                 }
             }
         } elseif ($act->eventid != 0) {
             $event = JTable::getInstance('Event', 'CTable');
             $event->load($act->eventid);
             $params = new CParameter('');
             $params->set('message', $table->comment);
             $url = 'index.php?option=com_community&view=events&task=viewevent&eventid=' . $act->eventid . '&actid=' . $actid;
             $params->set('url', $url);
             $params->set('actor', $my->getDisplayName());
             $params->set('actor_url', CRoute::_('index.php?option=com_community&view=profile&userid=' . $my->id));
             $params->set('stream', JText::_('COM_COMMUNITY_SINGULAR_STREAM'));
             $params->set('stream_url', $url);
             $params->set('event', $event->title);
             if ($my->id != $act->actor) {
                 CNotificationLibrary::add('events_submit_wall_comment', $my->id, $act->actor, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_EVENT_EMAIL_SUBJECT'), '', 'events.wallcomment', $params);
             } else {
                 //for activity reply action
                 //get relevent users in the activity
                 $users = $wallModel->getAllPostUsers($act->comment_type, $act->id, $act->actor);
                 if (!empty($users)) {
                     CNotificationLibrary::add('events_activity_reply_comment', $my->id, $users, JText::sprintf('COM_COMMUNITY_ACITIVY_WALL_USER_REPLY_EMAIL_SUBJECT'), '', 'event.activityreply', $params);
                 }
             }
         }
         //notifications
         CUserHelper::parseTaggedUserNotification($rawComment, $my, $act, array('type' => 'post-comment'));
         //Add tag
         CTags::add($table);
         // Log user engagement
         CEngagement::log($act->app . '.comment', $my->id);
     } else {
         $json['error'] = 'Permission denied.';
     }
     if (!isset($json['error'])) {
         $json['success'] = true;
     }
     die(json_encode($json));
 }
예제 #2
0
 /**
  * @param $uniqueId
  * @param $message
  * @param $appType
  * @param $creator
  * @param $isOwner
  * @param string $processFunc
  * @param string $templateFile
  * @param int $wallId
  * @param int $photoId to attach photoid in the wall if exists
  * @return stdClass
  */
 public static function saveWall($uniqueId, $message, $appType, &$creator, $isOwner, $processFunc = '', $templateFile = 'wall/content', $wallId = 0, $photoId = 0)
 {
     $my = CFactory::getUser();
     // Add some required parameters, otherwise assert here
     CError::assert($uniqueId, '', '!empty', __FILE__, __LINE__);
     CError::assert($appType, '', '!empty', __FILE__, __LINE__);
     CError::assert($my->id, '', '!empty', __FILE__, __LINE__);
     // Load the models
     $wall = JTable::getInstance('Wall', 'CTable');
     $wall->load($wallId);
     if ($wallId == 0) {
         // Get current date
         $now = JFactory::getDate();
         $now = $now->toSql();
         // Set the wall properties
         $wall->type = $appType;
         $wall->contentid = $uniqueId;
         $wall->post_by = $creator->id;
         $wall->date = $now;
         $wall->published = 1;
         // @todo: set the ip address
         $wall->ip = $_SERVER['REMOTE_ADDR'];
     }
     //if photo id is not 0, this wall is appended with a picture
     if ($photoId > 0) {
         //lets check if the photo belongs to the uploader
         $photo = JTable::getInstance('Photo', 'CTable');
         $photo->load($photoId);
         //save the data into the wall table
         $wallParam = new CParameter($wall->params);
         if ($photo->creator == $my->id && $photo->albumid == '-1') {
             $wallParam->set('attached_photo_id', $photoId);
             //sets the status to ready so that it wont be deleted on cron run
             $photo->status = 'ready';
             $photo->store();
         }
         $wall->params = $wallParam->toString();
     } elseif ($photoId == -1) {
         //if there is nothing, remove the param if applicable
         $wallParam = new CParameter($wall->params);
         //delete from db and files
         $photoModel = CFactory::getModel('photos');
         if ($wallParam->get('attached_photo_id') > 0) {
             $photoTable = $photoModel->getPhoto($wallParam->get('attached_photo_id'));
             $photoTable->delete();
         }
         $wallParam->set('attached_photo_id', 0);
         $wall->params = $wallParam->toString();
     }
     /* URL fetch */
     $graphObject = CParsers::linkFetch($message);
     if ($graphObject) {
         $graphObject->merge(new CParameter($wall->params));
         $wall->params = $graphObject->toString();
     }
     $wall->comment = $message;
     // Store the wall message
     $wall->store();
     // Convert it to array so that the walls can be processed by plugins
     $args = array();
     $args[0] = $wall;
     //Process wall comments
     $comment = new CComment();
     $wallComments = $wall->comment;
     $wall->comment = $comment->stripCommentData($wall->comment);
     // Trigger the wall comments
     CWall::triggerWallComments($args);
     $wallData = new stdClass();
     $wallData->id = $wall->id;
     $wallData->content = CWallLibrary::_getWallHTML($wall, $wallComments, $appType, $isOwner, $processFunc, $templateFile);
     $wallData->content = CStringHelper::replaceThumbnails($wallData->content);
     CTags::add($wall);
     return $wallData;
 }
예제 #3
0
 /**
  * Show a list of all recent items with the given tag
  */
 public function ajaxShowTagged($tag)
 {
     $filter = JFilterInput::getInstance();
     $tag = $filter->clean($tag, 'string');
     $objResponse = new JAXResponse();
     CFactory::load('libraries', 'tags');
     $tags = new CTags();
     $html = $tags->getItemsHTML($tag);
     $objResponse->addScriptCall('cWindowAddContent', $html);
     return $objResponse->sendResponse();
 }