Ejemplo n.º 1
0
 public function ajaxCreate($postData, $objResponse)
 {
     $objResponse = new JAXResponse();
     $filter = JFilterInput::getInstance();
     $postData = $filter->clean($postData, 'array');
     //prevent XSS injection
     foreach ($postData as &$data) {
         $data = strip_tags($data);
     }
     $config = CFactory::getConfig();
     $my = CFactory::getUser();
     if (!JRequest::checkToken()) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_INVALID_TOKEN'));
         $objResponse->sendResponse();
     }
     CFactory::load('helpers', 'limits');
     if (CLimitsHelper::exceededEventCreation($my->id)) {
         $eventLimit = $config->get('eventcreatelimit');
         $objResponse->addScriptCall('__throwError', JText::sprintf('COM_COMMUNITY_EVENTS_LIMIT', $eventLimit));
         $objResponse->sendResponse();
     }
     CFactory::load('helpers', 'event');
     $event = JTable::getInstance('Event', 'CTable');
     $event->load();
     $event->bind($postData);
     if ($postData['element'] == 'groups') {
         $event->contentid = $postData['target'];
     }
     $handler = CEventHelper::getHandler($event);
     if (!$handler->creatable()) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_ACCESS_FORBIDDEN'));
         $objResponse->sendResponse();
     }
     // Format startdate and eendate with time before we bind into event object
     $this->_formatStartEndDate($postData);
     if (empty($event->title)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_TITLE_ERROR'));
         $objResponse->sendResponse();
     }
     if (empty($event->location)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_LOCATION_ERR0R'));
         $objResponse->sendResponse();
     }
     // @rule: Start date cannot be empty
     if (empty($event->startdate)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_ERROR'));
         $objResponse->sendResponse();
     }
     // @rule: End date cannot be empty
     if (empty($event->enddate)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_ERROR'));
         $objResponse->sendResponse();
     }
     require_once JPATH_COMPONENT . DS . 'helpers' . DS . 'time.php';
     if (CTimeHelper::timeIntervalDifference($event->startdate, $event->enddate) > 0) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_STARTDATE_GREATER_ERROR'));
         $objResponse->sendResponse();
     }
     // @rule: Event must not end in the past
     $now = new JDate();
     $jConfig = JFactory::getConfig();
     $now->setOffset($jConfig->getValue('offset') + -COMMUNITY_DAY_HOURS);
     if (CTimeHelper::timeIntervalDifference($now->toMySQL(true), $event->enddate) > 0) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_GREATER_ERROR'));
         $objResponse->sendResponse();
     }
     $event->creator = $my->id;
     //@rule: If event moderation is enabled, event should be unpublished by default
     $event->published = $config->get('event_moderation') ? 0 : 1;
     $event->created = JFactory::getDate()->toMySQL();
     $event->contentid = $handler->getContentId();
     $event->type = $handler->getType();
     $event->store();
     // Since this is storing event, we also need to store the creator / admin
     // into the events members table
     $member = JTable::getInstance('EventMembers', 'CTable');
     $member->eventid = $event->id;
     $member->memberid = $event->creator;
     // Creator should always be 1 as approved as they are the creator.
     $member->status = COMMUNITY_EVENT_STATUS_ATTEND;
     // @todo: Setup required permissions in the future
     $member->permission = '1';
     $member->store();
     // Increment the member count
     $event->updateGuestStats();
     $event->store();
     $actor = $my->id;
     $target = 0;
     $content = '';
     $cid = $event->id;
     $app = 'events';
     $act = $handler->getActivity('events.create', $actor, $target, $content, $cid, $app);
     $url = $handler->getFormattedLink('index.php?option=com_community&view=events&task=viewevent&eventid=' . $event->id, false, true, false);
     $act->groupid = $event->type == 'group' ? $event->contentid : null;
     $act->eventid = $event->id;
     $act->location = $event->location;
     $act->comment_id = $event->id;
     $act->comment_type = 'groups.event';
     $act->like_id = $event->id;
     $act->like_type = 'group.event';
     $cat_url = $handler->getFormattedLink('index.php?option=com_community&view=events&task=display&categoryid=' . $event->catid, false, true, false);
     $params = new CParameter('');
     $action_str = 'events.create';
     $params->set('action', $action_str);
     $params->set('event_url', $url);
     $params->set('event_category_url', $cat_url);
     // Add activity logging
     CFactory::load('libraries', 'activities');
     CActivityStream::add($act, $params->toString());
     // add user points
     CFactory::load('libraries', 'userpoints');
     CUserPoints::assignPoint($action_str);
     $this->triggerEvents('onEventCreate', $event);
     $this->cacheClean(array(COMMUNITY_CACHE_TAG_FRONTPAGE, COMMUNITY_CACHE_TAG_EVENTS, COMMUNITY_CACHE_TAG_EVENTS_CAT, COMMUNITY_CACHE_TAG_ACTIVITIES));
     return $event;
 }
Ejemplo n.º 2
0
 public function ajaxCreate($postData, $objResponse)
 {
     $objResponse = new JAXResponse();
     $filter = JFilterInput::getInstance();
     $postData = $filter->clean($postData, 'array');
     $config = CFactory::getConfig();
     $my = CFactory::getUser();
     if (!JSession::checkToken('post')) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_INVALID_TOKEN'));
         $objResponse->sendResponse();
     }
     //check for user daily limit first, then check for the total limit
     if (CFactory::getConfig()->get("limit_events_perday") <= CFactory::getModel("events")->getTotalToday($my->id)) {
         $eventLimit = CFactory::getConfig()->get("limit_events_perday");
         $objResponse->addScriptCall('__throwError', JText::sprintf('COM_COMMUNITY_EVENTS_DAILY_LIMIT', $eventLimit));
         $objResponse->sendResponse();
     } else {
         if (CLimitsHelper::exceededEventCreation($my->id)) {
             $eventLimit = $config->get('eventcreatelimit');
             $objResponse->addScriptCall('__throwError', JText::sprintf('COM_COMMUNITY_EVENTS_LIMIT', $eventLimit));
             $objResponse->sendResponse();
         }
     }
     //CFactory::load( 'helpers' , 'event' );
     $event = JTable::getInstance('Event', 'CTable');
     $event->load();
     if ($postData['element'] == 'groups') {
         $event->contentid = $postData['target'];
     }
     $handler = CEventHelper::getHandler($event);
     if (!$handler->creatable() || !$my->canCreateEvents()) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_ACCESS_FORBIDDEN'));
         $objResponse->sendResponse();
     }
     // Format startdate and eendate with time before we bind into event object
     $postData = $this->_formatStartEndDate($postData);
     $event->bind($postData);
     if (empty($event->title)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_TITLE_ERROR'));
         $objResponse->sendResponse();
     }
     if (empty($event->location)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_LOCATION_ERR0R'));
         $objResponse->sendResponse();
     }
     // @rule: Start date cannot be empty
     if (empty($event->startdate)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_ERROR'));
         $objResponse->sendResponse();
     }
     // @rule: End date cannot be empty
     if (empty($event->enddate)) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_ERROR'));
         $objResponse->sendResponse();
     }
     require_once JPATH_COMPONENT . '/helpers/time.php';
     if (!isset($postData['allday'])) {
         $postData['allday'] = 0;
     }
     if (CTimeHelper::timeIntervalDifference($event->startdate, $event->enddate) > 0) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_STARTDATE_GREATER_ERROR'));
         $objResponse->sendResponse();
     }
     // @rule: Event must not end in the past
     $now = CTimeHelper::getLocaleDate();
     // if all day event.
     $isToday = false;
     if ($postData['allday'] == '1') {
         $isToday = date("Y-m-d", strtotime($event->enddate)) == date("Y-m-d", strtotime($now->toSql(true))) ? true : $isToday;
     }
     if (CTimeHelper::timeIntervalDifference($now->toSql(true), $event->enddate) > 0 && !$isToday) {
         $objResponse->addScriptCall('__throwError', JText::_('COM_COMMUNITY_EVENTS_ENDDATE_GREATER_ERROR'));
         $objResponse->sendResponse();
     }
     $eventChild = array();
     // check event recurrence limit.
     if (!empty($event->repeat)) {
         $repeatLimit = 'COMMUNITY_EVENT_RECURRING_LIMIT_' . strtoupper($event->repeat);
         if (defined($repeatLimit)) {
             $eventChild = $this->_generateRepeatList($event, $postData);
             if (count($eventChild) > constant($repeatLimit)) {
                 $objResponse->addScriptCall('__throwError', $event->title . ' - ' . sprintf(JText::_('COM_COMMUNITY_EVENTS_REPEAT_LIMIT_ERROR'), constant($repeatLimit)));
             }
         }
     }
     $event->creator = $my->id;
     //@rule: If event moderation is enabled, event should be unpublished by default
     $event->published = $this->isPublished();
     $event->created = JFactory::getDate()->toSql();
     $event->contentid = $handler->getContentId();
     $event->type = $handler->getType();
     $event->store();
     if (!$event->isRecurring()) {
         $this->_saveMember($event);
         // Increment the member count.
         $event->updateGuestStats();
         // Apparently the updateGuestStats does not store the item. Need to store it again.
         $event->store();
     } else {
         $event->parent = $event->id;
     }
     // Save recurring event's child.
     $this->_saveRepeatChild($event, $eventChild, true, $postData);
     CEvents::addEventStream($event);
     // add user points
     CUserPoints::assignPoint('events.create');
     $this->triggerEvents('onEventCreate', $event);
     $this->cacheClean(array(COMMUNITY_CACHE_TAG_FRONTPAGE, COMMUNITY_CACHE_TAG_EVENTS, COMMUNITY_CACHE_TAG_EVENTS_CAT, COMMUNITY_CACHE_TAG_ACTIVITIES));
     return $event;
 }