/** * Creates a new event based on the session. * * @author Jason Rey <*****@*****.**> * @since 1.3 * @access public * @param SocialTableStepSession $session The step session. * @return SocialEvent The SocialEvent object. */ public function createEvent(SocialTableStepSession $session) { FD::import('admin:/includes/event/event'); $event = new SocialEvent(); $event->creator_uid = FD::user()->id; $event->creator_type = SOCIAL_TYPE_USER; $event->category_id = $session->uid; $event->cluster_type = SOCIAL_TYPE_EVENT; $event->created = FD::date()->toSql(); $event->key = md5(JFactory::getDate()->toSql() . FD::user()->password . uniqid()); $params = FD::registry($session->values); // Support for group event if ($params->exists('group_id')) { $group = FD::group($params->get('group_id')); $event->setMeta('group_id', $group->id); } $data = $params->toArray(); $customFields = FD::model('Fields')->getCustomFields(array('visible' => SOCIAL_EVENT_VIEW_REGISTRATION, 'group' => SOCIAL_TYPE_EVENT, 'uid' => $session->uid)); $fieldsLib = FD::fields(); $args = array(&$data, &$event); $callback = array($fieldsLib->getHandler(), 'beforeSave'); $errors = $fieldsLib->trigger('onRegisterBeforeSave', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args, $callback); if (!empty($errors)) { $this->setError($errors); return false; } // Get the current user. $my = FD::user(); $event->state = SOCIAL_CLUSTER_PENDING; // If the event is created by site admin or user doesn't need to be moderated, publish event immediately. if ($my->isSiteAdmin() || !$my->getAccess()->get('events.moderate')) { $event->state = SOCIAL_CLUSTER_PUBLISHED; } // Trigger apps FD::apps()->load(SOCIAL_TYPE_USER); $dispatcher = FD::dispatcher(); $triggerArgs = array(&$event, &$my, true); // @trigger: onEventBeforeSave $dispatcher->trigger(SOCIAL_TYPE_USER, 'onEventBeforeSave', $triggerArgs); $state = $event->save(); if (!$state) { $this->setError($event->getError()); return false; } // Notifies admin when a new event is created if ($event->state === SOCIAL_CLUSTER_PENDING || !$my->isSiteAdmin()) { $this->notifyAdmins($event); } // Recreate the event object SocialEvent::$instances[$event->id] = null; $event = FD::event($event->id); // Create a new owner object $event->createOwner($my->id); // Support for group event if ($event->isGroupEvent()) { // Check for transfer flag to insert group member as event guest $transferMode = isset($data['member_transfer']) ? $data['member_transfer'] : 'invite'; if (!empty($transferMode) && $transferMode != 'none') { $nodeState = SOCIAL_EVENT_GUEST_INVITED; if ($transferMode == 'attend') { $nodeState = SOCIAL_EVENT_GUEST_GOING; } /* insert into jos_social_clusters_nodes (cluster_id, uid, type, created, state, owner, admin, invited_by) select $eventId as cluster_id, uid, type, $now as created, $nodeState as state, 0 as owner, admin, $userId as invited_by from jos_social_clusters_nodes where cluster_id = $groupId and state = 1 and type = 'user' and uid not in (select uid from jos_social_clusters_nodes where cluster_id = $eventId and type = 'user') */ $eventId = $event->id; $groupId = $event->getMeta('group_id'); $userId = $my->id; $now = FD::date()->toSql(); $query = "INSERT INTO `#__social_clusters_nodes` (`cluster_id`, `uid`, `type`, `created`, `state`, `owner`, `admin`, `invited_by`) SELECT '{$eventId}' AS `cluster_id`, `uid`, `type`, '{$now}' AS `created`, '{$nodeState}' AS `state`, '0' AS `owner`, `admin`, '{$userId}' AS `invited_by` FROM `#__social_clusters_nodes` WHERE `cluster_id` = '{$groupId}' AND `state` = '" . SOCIAL_GROUPS_MEMBER_PUBLISHED . "' AND `type` = '" . SOCIAL_TYPE_USER . "' AND `uid` NOT IN (SELECT `uid` FROM `#__social_clusters_nodes` WHERE `cluster_id` = '{$eventId}' AND `type` = '" . SOCIAL_TYPE_USER . "')"; $db = FD::db(); $sql = $db->sql(); $sql->raw($query); $db->setQuery($sql); $db->query(); } } // Trigger the fields again $args = array(&$data, &$event); $fieldsLib->trigger('onRegisterAfterSave', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args); $event->bindCustomFields($data); $fieldsLib->trigger('onRegisterAfterSaveFields', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args); if (empty($event->alias)) { $event->alias = $this->getUniqueAlias($event->getName()); $event->save(); } // @trigger: onEventAfterSave $triggerArgs = array(&$event, &$my, true); $dispatcher->trigger(SOCIAL_TYPE_USER, 'onEventAfterSave', $triggerArgs); return $event; }
/** * Creates a new recurring event based on the post data and parent event. * * @author Jason Rey <*****@*****.**> * @since 1.3 * @access public * @param array $data The post data. * @param SocialEvent $parent The parent event object. * @return SocialEvent The SocialEvent object. */ public function createRecurringEvent($data, $parent) { FD::import('admin:/includes/event/event'); $event = new SocialEvent(); $event->creator_uid = $parent->creator_uid; $event->creator_type = SOCIAL_TYPE_USER; $event->category_id = $parent->category_id; $event->cluster_type = SOCIAL_TYPE_EVENT; $event->created = FD::date()->toSql(); $event->parent_id = $parent->id; $event->parent_type = SOCIAL_TYPE_EVENT; $event->state = SOCIAL_CLUSTER_PUBLISHED; $event->key = md5(JFactory::getDate()->toSql() . FD::user()->password . uniqid()); // Support for group event if (isset($data['group_id'])) { $group = FD::group($data['group_id']); $event->setMeta('group_id', $group->id); } $customFields = FD::model('Fields')->getCustomFields(array('visible' => SOCIAL_EVENT_VIEW_REGISTRATION, 'group' => SOCIAL_TYPE_EVENT, 'uid' => $parent->category_id)); $fieldsLib = FD::fields(); $args = array(&$data, &$event); $fieldsLib->trigger('onRegisterBeforeSave', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args, array($fieldsLib->getHandler(), 'beforeSave')); $state = $event->save(); // Recreate the event object SocialEvent::$instances[$event->id] = null; $event = FD::event($event->id); // Support for group event if ($event->isGroupEvent()) { // Check for transfer flag to insert group member as event guest $transferMode = isset($data['member_transfer']) ? $data['member_transfer'] : 'invite'; if (!empty($transferMode) && $transferMode != 'none') { $nodeState = SOCIAL_EVENT_GUEST_INVITED; if ($transferMode == 'attend') { $nodeState = SOCIAL_EVENT_GUEST_GOING; } /* insert into jos_social_clusters_nodes (cluster_id, uid, type, created, state, owner, admin, invited_by) select $eventId as cluster_id, uid, type, $now as created, $nodeState as state, 0 as owner, admin, $userId as invited_by from jos_social_clusters_nodes where cluster_id = $groupId and state = 1 and type = 'user' and uid not in (select uid from jos_social_clusters_nodes where cluster_id = $eventId and type = 'user') */ $eventId = $event->id; $groupId = $event->getMeta('group_id'); $userId = $parent->creator_uid; $now = FD::date()->toSql(); $query = "INSERT INTO `#__social_clusters_nodes` (`cluster_id`, `uid`, `type`, `created`, `state`, `owner`, `admin`, `invited_by`) SELECT '{$eventId}' AS `cluster_id`, `uid`, `type`, '{$now}' AS `created`, '{$nodeState}' AS `state`, '0' AS `owner`, `admin`, '{$userId}' AS `invited_by` FROM `#__social_clusters_nodes` WHERE `cluster_id` = '{$groupId}' AND `state` = '" . SOCIAL_GROUPS_MEMBER_PUBLISHED . "' AND `type` = '" . SOCIAL_TYPE_USER . "' AND `uid` NOT IN (SELECT `uid` FROM `#__social_clusters_nodes` WHERE `cluster_id` = '{$eventId}' AND `type` = '" . SOCIAL_TYPE_USER . "') AND `uid` != '{$userId}'"; $db = FD::db(); $sql = $db->sql(); $sql->raw($query); $db->setQuery($sql); $db->query(); } } // Trigger the fields again $args = array(&$data, &$event); $fieldsLib->trigger('onRegisterAfterSave', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args); $event->bindCustomFields($data); $fieldsLib->trigger('onRegisterAfterSaveFields', SOCIAL_FIELDS_GROUP_EVENT, $customFields, $args); if (empty($event->alias)) { $event->alias = $this->getUniqueAlias($event->getName()); $event->save(); } $dispatcher = FD::dispatcher(); $my = FD::user(); // @trigger: onEventAfterSave // Put the recurring events in the calendar $triggerArgs = array(&$event, &$my, true); $dispatcher->trigger(SOCIAL_TYPE_USER, 'onEventAfterSave', $triggerArgs); return $event; }