/** * Create a session * @author Carlos Vargas <*****@*****.**>, from existing code * @param string $name * @param string $startDate (YYYY-MM-DD hh:mm:ss) * @param string $endDate (YYYY-MM-DD hh:mm:ss) * @param string $displayStartDate (YYYY-MM-DD hh:mm:ss) * @param string $displayEndDate (YYYY-MM-DD hh:mm:ss) * @param string $coachStartDate (YYYY-MM-DD hh:mm:ss) * @param string $coachEndDate (YYYY-MM-DD hh:mm:ss) * @param mixed $coachId If integer, this is the session coach id, if string, the coach ID will be looked for from the user table * @param integer $sessionCategoryId ID of the session category in which this session is registered * @param integer $visibility Visibility after end date (0 = read-only, 1 = invisible, 2 = accessible) * @param bool $fixSessionNameIfExists * @param string $duration * @param string $description Optional. The session description * @param int $showDescription Optional. Whether show the session description * @param array $extraFields * @param int $sessionAdminId Optional. If this sessions was created by a session admin, assign it to him * @param boolean $sendSubscritionNotification Optional. * Whether send a mail notification to users being subscribed * @todo use an array to replace all this parameters or use the model.lib.php ... * @return mixed Session ID on success, error message otherwise * */ public static function create_session($name, $startDate, $endDate, $displayStartDate, $displayEndDate, $coachStartDate, $coachEndDate, $coachId, $sessionCategoryId, $visibility = 1, $fixSessionNameIfExists = false, $duration = null, $description = null, $showDescription = 0, $extraFields = array(), $sessionAdminId = 0, $sendSubscritionNotification = false) { $em = Database::getManager(); /* if (is_array($_configuration[$access_url_id]) && isset($_configuration[$access_url_id]['hosting_limit_sessions']) && $_configuration[$access_url_id]['hosting_limit_sessions'] > 0 ) { $num = self::count_sessions(); if ($num >= $_configuration[$access_url_id]['hosting_limit_sessions']) { api_warn_hosting_contact('hosting_limit_sessions'); return get_lang('PortalSessionsLimitReached'); } }*/ $name = trim($name); $sessionCategoryId = intval($sessionCategoryId); $visibility = intval($visibility); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); if (empty($name)) { $msg = get_lang('SessionNameIsRequired'); return $msg; } elseif (empty($coachId)) { $msg = get_lang('CoachIsRequired'); return $msg; } elseif (!empty($startDate) && !api_is_valid_date($startDate, 'Y-m-d H:i') && !api_is_valid_date($startDate, 'Y-m-d H:i:s')) { $msg = get_lang('InvalidStartDate'); return $msg; } elseif (!empty($endDate) && !api_is_valid_date($endDate, 'Y-m-d H:i') && !api_is_valid_date($endDate, 'Y-m-d H:i:s')) { $msg = get_lang('InvalidEndDate'); return $msg; } elseif (!empty($startDate) && !empty($endDate) && $startDate >= $endDate) { $msg = get_lang('StartDateShouldBeBeforeEndDate'); return $msg; } else { $ready_to_create = false; if ($fixSessionNameIfExists) { $name = self::generateNextSessionName($name); if ($name) { $ready_to_create = true; } else { $msg = get_lang('SessionNameAlreadyExists'); return $msg; } } else { $rs = Database::query("SELECT 1 FROM {$tbl_session} WHERE name='" . $name . "'"); if (Database::num_rows($rs)) { $msg = get_lang('SessionNameAlreadyExists'); return $msg; } $ready_to_create = true; } if ($ready_to_create) { $sessionAdminId = !empty($sessionAdminId) ? $sessionAdminId : api_get_user_id(); $session = new Session(); $session->setName($name)->setVisibility($visibility)->setDescription($description)->setShowDescription($showDescription)->setSendSubscriptionNotification($sendSubscritionNotification)->setSessionAdminId($sessionAdminId); if (!empty($coachId)) { $coach = UserManager::getManager()->find($coachId); if ($coach) { $session->setGeneralCoach($coach); } } if (!empty($startDate)) { $session->setAccessStartDate(new \DateTime($startDate)); } if (!empty($endDate)) { $session->setAccessEndDate(new \DateTime($endDate)); } if (!empty($displayStartDate)) { $session->setDisplayStartDate(new \DateTime($displayStartDate)); } if (!empty($displayEndDate)) { $session->setDisplayEndDate(new \DateTime($displayEndDate)); } if (!empty($coachStartDate)) { $session->setCoachAccessStartDate(new \DateTime($coachStartDate)); } if (!empty($coachEndDate)) { $session->setCoachAccessEndDate(new \DateTime($coachEndDate)); } if (!empty($sessionCategoryId)) { $session->setCategory($sessionCategoryId); } $duration = intval($duration); if (!empty($duration)) { $session->setDuration($duration); $session->setAccessStartDate(null); $session->setAccessEndDate(null); $session->setDisplayStartDate(null); $session->setDisplayEndDate(null); $session->setCoachAccessStartDate(null); $session->setCoachAccessEndDate(null); } else { $session->setDuration(0); } $url = $em->getRepository('ChamiloCoreBundle:AccessUrl')->find(api_get_current_access_url_id()); $accessRelSession = new \Chamilo\CoreBundle\Entity\AccessUrlRelSession(); $accessRelSession->setUrl($url); $session->addUrls($accessRelSession); $em->persist($session); $em->flush(); $session_id = $session->getId(); if (!empty($session_id)) { $extraFields['item_id'] = $session_id; $sessionFieldValue = new ExtraFieldValue('session'); $sessionFieldValue->saveFieldValues($extraFields); /* Sends a message to the user_id = 1 $user_info = api_get_user_info(1); $complete_name = $user_info['firstname'].' '.$user_info['lastname']; $subject = api_get_setting('platform.site_name').' - '.get_lang('ANewSessionWasCreated'); $message = get_lang('ANewSessionWasCreated')." <br /> ".get_lang('NameOfTheSession').' : '.$name; api_mail_html($complete_name, $user_info['email'], $subject, $message); * */ //Adding to the correct URL $access_url_id = api_get_current_access_url_id(); UrlManager::add_session_to_url($session_id, $access_url_id); // add event to system log $user_id = api_get_user_id(); Event::addEvent(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, api_get_utc_datetime(), $user_id); } return $session_id; } } }