params = $params; } public function onAfterPost($message) { if (JString::strlen($message->message) > $this->params->get('activity_points_limit', 0)) { CFactory::load ( 'libraries', 'userpoints' ); CUserPoints::assignPoint ( 'com_kunena.thread.new' ); } $act = new stdClass (); $act->cmd = 'wall.write'; $act->actor = $message->userid; $act->target = 0; // no target $act->title = JText::_('{actor} ' . JText::sprintf( 'PLG_KUNENA_COMMUNITY_ACTIVITY_POST_TITLE', ' ' . $message->displayField('subject') . '') ); $act->content = $this->buildContent($message); $act->app = 'kunena.thread.post'; $act->cid = $message->thread; $act->access = $this->getAccess($message->getCategory()); // Comments and like support $act->comment_id = $message->thread; $act->comment_type = 'kunena.thread.post'; $act->like_id = $message->thread; $act->like_type = 'kunena.thread.post'; // Do not add private activities if ($act->access > 20) return; CFactory::load ( 'libraries', 'activities' ); $table = CActivityStream::add($act); if(is_object($table)) { $table->like_id = $table->id; $table->store(); } } public function onAfterReply($message) { if (JString::strlen($message->message) > $this->params->get('activity_points_limit', 0)) { CFactory::load ( 'libraries', 'userpoints' ); CUserPoints::assignPoint ( 'com_kunena.thread.reply' ); } // Get users who have subscribed to the topic, excluding current user. $acl = KunenaAccess::getInstance(); $subscribers = $acl->getSubscribers( $message->catid, $message->thread, KunenaAccess::TOPIC_SUBSCRIPTION, false, false, array($message->userid) ); foreach ($subscribers as $userid) { $actor = CFactory::getUser($message->userid); $target = CFactory::getUser($userid); $params = new CParameter(''); $params->set('actorName', $actor->getDisplayName()); $params->set('recipientName', $target->getDisplayName()); $params->set('url', JUri::getInstance()->toString(array('scheme', 'host', 'port')) . $message->getPermaUrl(null)); // {url} tag for activity. Used when hovering over avatar in notification window, as well as in email notification $params->set('title', $message->displayField('subject')); // (title) tag in language file $params->set('title_url' , $message->getPermaUrl() ); // Make the title in notification - linkable $params->set('message', $message->displayField('message')); // (message) tag in language file $params->set('actor', $actor->getDisplayName()); // Actor in the stream $params->set('actor_url', 'index.php?option=com_community&view=profile&userid=' . $actor->id); // Actor Link // Finally, send notifications CNotificationLibrary::add( 'kunena_reply', $actor->id, $target->id, JText::sprintf('PLG_KUNENA_COMMUNITY_ACTIVITY_REPLY_TITLE_ACT'), JText::sprintf('PLG_KUNENA_COMMUNITY_ACTIVITY_REPLY_TEXT'), '', $params ); } /* Activity stream */ $act = new stdClass (); $act->cmd = 'wall.write'; $act->actor = $message->userid; $act->target = 0; // no target $act->title = JText::_ ( '{single}{actor}{/single}{multiple}{actors}{/multiple} ' . JText::sprintf ( 'PLG_KUNENA_COMMUNITY_ACTIVITY_REPLY_TITLE', '' . $message->subject . '' ) ); $act->content = $this->buildContent($message); $act->app = 'kunena.thread.reply'; $act->cid = $message->thread; $act->access = $this->getAccess($message->getCategory()); // Comments and like support $act->comment_id = $message->thread; $act->comment_type = 'kunena.thread.reply'; $act->like_id = $message->thread; $act->like_type = 'kunena.thread.reply'; // Do not add private activities if ($act->access > 20) return; CFactory::load ( 'libraries', 'activities' ); $table = CActivityStream::add($act); if(is_object($table)) { $table->like_id = $table->id; $table->store(); } } public function onAfterThankyou($actor, $target, $message) { CFactory::load ( 'libraries', 'userpoints' ); CUserPoints::assignPoint ( 'com_kunena.thread.thankyou', $target ); $actor = CFactory::getUser($actor); $target = CFactory::getUser($target); //Create CParameter use for params $params = new CParameter(''); $params->set('actorName', $actor->getDisplayName()); $params->set('recipientName', $target->getDisplayName()); $params->set('recipientUrl', 'index.php?option=com_community&view=profile&userid=' . $target->id); // Actor Link $params->set('url', JUri::getInstance()->toString(array('scheme', 'host', 'port')) . $message->getPermaUrl(null)); // {url} tag for activity. Used when hovering over avatar in notification window, as well as in email notification $params->set('title', $message->displayField('subject')); // (title) tag in language file $params->set('title_url' , $message->getPermaUrl() ); // Make the title in notification - linkable $params->set('message', $message->message); // (message) tag in language file $params->set('actor', $actor->getDisplayName()); // Actor in the stream $params->set('actor_url', 'index.php?option=com_community&view=profile&userid=' . $actor->id); // Actor Link // Finally, send notifications CNotificationLibrary::add('kunena_thankyou' , $actor->id , $target->id , JText::sprintf('PLG_KUNENA_COMMUNITY_ACTIVITY_THANKYOU_TITLE_ACT') , JText::sprintf('PLG_KUNENA_COMMUNITY_ACTIVITY_THANKYOU_TEXT') , '' , $params ); $act = new stdClass (); $act->cmd = 'wall.write'; $act->actor = $actor->id; $act->target = $target->id; $act->title = JText::sprintf('PLG_KUNENA_COMMUNITY_ACTIVITY_THANKYOU_WALL', $params->get('actor_url'),$params->get('actor'),$params->get('recipientUrl'),$params->get('recipientName'),$params->get('url'),$params->get('title')); $act->content = NULL; $act->app = 'kunena.message.thankyou'; $act->cid = $target->id; $act->access = $this->getAccess($message->getCategory()); // Comments and like support $act->comment_id = $target->id; $act->comment_type = 'kunena.message.thankyou'; $act->like_id = $target->id; $act->like_type = 'kunena.message.thankyou'; // Do not add private activities if ($act->access > 20) return; CFactory::load ( 'libraries', 'activities' ); $table = CActivityStream::add($act); if(is_object($table)) { $table->like_id = $table->id; $table->store(); } } public function onAfterDeleteTopic($target) { CFactory::load ( 'libraries', 'activities' ); CActivityStream::remove('kunena.thread.post', $target->id); // TODO: Need get replied id CActivityStream::remove('kunena.thread.replied', $target->id); } protected function getAccess($category) { // Activity access level: 0 = public, 20 = registered, 30 = friend, 40 = private $accesstype = $category->accesstype; if ($accesstype != 'joomla.group' && $accesstype != 'joomla.level') { // Private return 40; } // FIXME: Joomla 2.5 can mix up groups and access levels if (($accesstype == 'joomla.level' && $category->access == 1) || ($accesstype == 'joomla.group' && ($category->pub_access == 1 || $category->admin_access == 1))) { // Public $access = 0; } elseif (($accesstype == 'joomla.level' && $category->access == 2) || ($accesstype == 'joomla.group' && ($category->pub_access == 2 || $category->admin_access == 2))) { // Registered $access = 20; } else { // Other groups (=private) $access = 40; } return $access; } private function buildContent($message) { $parent = new stdClass(); $parent->forceSecure = true; $parent->forceMinimal = true; $content = KunenaHtmlParser::parseBBCode($message->message, $parent, $this->params->get('activity_stream_limit', 0)); // Add readmore permalink $content .= '

' . JText::_('COM_KUNENA_READMORE') . ''; return $content; } }