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; }
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; }