Beispiel #1
0
 /**
  * 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;
 }