/** * Save a new discussion * @param type $discussion * @return boolean * */ private function _saveDiscussion(&$discussion) { $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $topicId = $jinput->get('topicid', '', 'NONE'); //$jinput->get('topicid' , 'POST'); //JRequest::getVar( 'topicid' , 'POST' ); $postData = JRequest::get('post'); $inputFilter = CFactory::getInputFilter(true, array('b', 'u', 'i', 'li', 'ul', 'ol', 'br', 'div', 'p', 'img', 'a')); $groupid = $jinput->request->get('groupid', '', 'INT'); //JRequest::getVar('groupid' , '' , 'REQUEST'); $my = CFactory::getUser(); $mainframe = JFactory::getApplication(); $groupsModel = $this->getModel('groups'); $group = JTable::getInstance('Group', 'CTable'); $group->load($groupid); $discussion->bind($postData); //CFactory::load( 'helpers' , 'owner' ); $creator = CFactory::getUser($discussion->creator); if ($my->id != $creator->id && !empty($discussion->creator) && !$groupsModel->isAdmin($my->id, $discussion->groupid) && !COwnerHelper::isCommunityAdmin()) { $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error'); return false; } $isNew = is_null($discussion->id) || !$discussion->id ? true : false; if ($isNew) { $discussion->creator = $my->id; } $now = new JDate(); $discussion->groupid = $groupid; $discussion->created = isset($discussion->created) && $discussion->created != '' ? $discussion->created : $now->toSql(); $discussion->lastreplied = isset($discussion->lastreplied) ? $discussion->lastreplied : $discussion->created; $discussion->message = JRequest::getVar('message', '', 'post', 'string', JREQUEST_ALLOWRAW); $discussion->message = $inputFilter->clean($discussion->message); // @rule: do not allow html tags in the title $discussion->title = strip_tags($discussion->title); //CFactory::load( 'libraries' , 'apps' ); $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-groups-discussionform')); $validated = true; if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { $config = CFactory::getConfig(); // @rule: Spam checks if ($config->get('antispam_akismet_discussions')) { //CFactory::load( 'libraries' , 'spamfilter' ); $filter = CSpamFilter::getFilter(); $filter->setAuthor($my->getDisplayName()); $filter->setMessage($discussion->title . ' ' . $discussion->message); $filter->setEmail($my->email); $filter->setURL(CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id)); $filter->setType('message'); $filter->setIP($_SERVER['REMOTE_ADDR']); if ($filter->isSpam()) { $validated = false; $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_DISCUSSIONS_MARKED_SPAM'), 'error'); } } if (empty($discussion->title)) { $validated = false; $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_GROUPS_DISCUSSION_TITLE_EMPTY'), 'error'); } if (empty($discussion->message)) { $validated = false; $mainframe->enqueueMessage(JText::_('COM_COMMUNITY_GROUPS_DISCUSSION_BODY_EMPTY'), 'error'); } if ($validated) { //CFactory::load( 'models' , 'discussions' ); $params = new CParameter(''); $params->set('filepermission-member', JRequest::getInt('filepermission-member', 0)); $discussion->params = $params->toString(); $discussion->store(); if ($isNew) { $group = JTable::getInstance('Group', 'CTable'); $group->load($groupid); // Add logging. $url = CRoute::_('index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $groupid); $act = new stdClass(); $act->cmd = 'group.discussion.create'; $act->actor = $my->id; $act->target = 0; $act->title = ''; //JText::sprintf('COM_COMMUNITY_GROUPS_NEW_GROUP_DISCUSSION' , '{group_url}' , $group->name ); $act->content = $discussion->message; $act->app = 'groups.discussion'; $act->cid = $discussion->id; $act->groupid = $group->id; $act->group_access = $group->approvals; $act->like_id = CActivities::LIKE_SELF; $act->comment_id = CActivities::COMMENT_SELF; $act->like_type = 'groups.discussion'; $act->comment_type = 'groups.discussion'; $params = new CParameter(''); $params->set('action', 'group.discussion.create'); $params->set('topic_id', $discussion->id); $params->set('topic', $discussion->title); $params->set('group_url', 'index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id); $params->set('topic_url', 'index.php?option=com_community&view=groups&task=viewdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id); CActivityStream::add($act, $params->toString()); //@rule: Add notification for group members whenever a new discussion created. $config = CFactory::getConfig(); if ($config->get('groupdiscussnotification') == 1) { $model = $this->getModel('groups'); $members = $model->getMembers($groupid, null); $admins = $model->getAdmins($groupid, null); $membersArray = array(); foreach ($members as $row) { $membersArray[] = $row->id; } foreach ($admins as $row) { $membersArray[] = $row->id; } unset($members); unset($admins); // Add notification //CFactory::load( 'libraries' , 'notification' ); $params = new CParameter(''); $params->set('url', 'index.php?option=com_community&view=groups&task=viewdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id); $params->set('group', $group->name); $params->set('group_url', 'index.php?option=com_community&view=groups&task=viewgroup&groupid=' . $group->id); $params->set('discussion', $discussion->title); $params->set('discussion_url', 'index.php?option=com_community&view=groups&task=viewdiscussion&groupid=' . $group->id . '&topicid=' . $discussion->id); $params->set('user', $my->getDisplayName()); $params->set('subject', $discussion->title); $params->set('message', $discussion->message); CNotificationLibrary::addMultiple('groups_create_discussion', $discussion->creator, $membersArray, JText::sprintf('COM_COMMUNITY_NEW_DISCUSSION_NOTIFICATION_EMAIL_SUBJECT', $group->name), '', 'groups.discussion', $params); } } //add user points //CFactory::load( 'libraries' , 'userpoints' ); CUserPoints::assignPoint('group.discussion.create'); } } else { $validated = false; } return $validated; }