/** * 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 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(); // Recurring support // Check if there is a recurring flag in the $session->values; // If there is then we punch in $event->parent_id and $event->parent_type if (isset($data['parent_id'])) { $event->parent_id = $data['parent_id']; $event->parent_type = SOCIAL_TYPE_EVENT; } $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(); //check this event is it create from group $reg = FD::registry(); $reg->load($session->values); $groupId = $reg->get('group_id'); $app = JFactory::getApplication(); // Get the member transfer type value $memberTransferType = $app->input->get('member_transfer', '', 'default'); if ($memberTransferType == 'invite') { if (!empty($groupId)) { // Notify invited or going users $model = FD::model('Groups'); $options = array('exclude' => $my->id, 'state' => SOCIAL_GROUPS_MEMBER_PUBLISHED); $targets = $model->getMembers($groupId, $options); // var_dump($targets);exit; if (!empty($targets)) { $emailOptions = (object) array('title' => 'COM_EASYSOCIAL_EMAILS_EVENT_GUEST_INVITED_SUBJECT', 'template' => 'site/event/guest.invited', 'event' => $event->getName(), 'eventName' => $event->getName(), 'eventAvatar' => $event->getAvatar(), 'eventLink' => $event->getPermalink(false, true), 'invitorName' => $my->getName(), 'invitorLink' => $my->getPermalink(false, true), 'invitorAvatar' => $my->getAvatar()); $systemOptions = (object) array('uid' => $event->id, 'actor_id' => $my->id, 'target_id' => $event->id, 'context_type' => 'events', 'type' => 'events', 'url' => $event->getPermalink(true, false, 'item', false), 'eventId' => $event->id); FD::notify('events.guest.invited', $targets, $emailOptions, $systemOptions); } } } $db = FD::db(); $sql = $db->sql(); $query = "INSERT INTO `#__social_clusters_nodes` (`cluster_id`, `uid`, `type`, `created`, `state`, `owner`, `admin`, `invited_by`)"; $query .= " SELECT '{$eventId}' AS `cluster_id`, a.`uid`, `type`, '{$now}' AS `created`, '{$nodeState}' AS `state`, '0' AS `owner`, a.`admin`, '{$userId}' AS `invited_by`"; $query .= " FROM `#__social_clusters_nodes` as a"; //exclude esad users $query .= " INNER JOIN `#__social_profiles_maps` as upm on a.`uid` = upm.`user_id`"; $query .= " INNER JOIN `#__social_profiles` as up on upm.`profile_id` = up.`id` and up.`community_access` = 1"; $query .= " WHERE a.`cluster_id` = '{$groupId}' AND a.`state` = " . $db->Quote(SOCIAL_GROUPS_MEMBER_PUBLISHED); $query .= " AND a.`type` = " . $db->Quote(SOCIAL_TYPE_USER); $query .= " AND a.`uid` NOT IN (SELECT b.`uid` FROM `#__social_clusters_nodes` as b WHERE b.`cluster_id` = '{$eventId}' AND b.`type` = '" . SOCIAL_TYPE_USER . "')"; $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; }