Fix issues with display_start/end_date for sessions - refs #7719

1.10.x
Yannick Warnier 10 years ago
parent b13a4a936c
commit 03910a357d
  1. 37
      main/cron/import_csv.php
  2. 14
      main/inc/lib/api.lib.php
  3. 268
      main/inc/lib/sessionmanager.lib.php
  4. 18
      main/inc/lib/usermanager.lib.php
  5. 32
      main/inc/lib/userportal.lib.php
  6. 63
      main/session/resume_session.php
  7. 83
      main/session/session_add.php
  8. 2
      main/session/session_category_edit.php
  9. 115
      main/session/session_edit.php
  10. 32
      main/user/resume_session.php
  11. 66
      main/webservices/registration.soap.php
  12. 55
      main/webservices/webservice_session.php
  13. 30
      src/Chamilo/CoreBundle/Entity/Session.php
  14. 49
      tests/main/inc/lib/sessionmanager.lib.test.php

@ -1033,12 +1033,8 @@ class ImportCsv
if (empty($sessionId)) {
$result = SessionManager::create_session(
$session['SessionName'],
$dateStart[0],
$dateStart[1],
$dateStart[2],
$dateEnd[0],
$dateEnd[1],
$dateEnd[2],
$dateStart,
$dateEnd,
$this->daysCoachAccessBeforeBeginning,
$this->daysCoachAccessAfterBeginning,
null,
@ -1060,19 +1056,26 @@ class ImportCsv
$sessionInfo = api_get_session_info($sessionId);
$accessBefore = null;
$accessAfter = null;
if (empty($sessionInfo['nb_days_access_before_beginning']) ||
(!empty($sessionInfo['nb_days_access_before_beginning']) &&
$sessionInfo['nb_days_access_before_beginning'] < $this->daysCoachAccessBeforeBeginning)
$start_date_for_coach = new DateTime($sessionInfo['coach_access_start_date']);
$start_date = new DateTime($sessionInfo['access_start_date']);
$start_diff = $start_date->diff($start_date_for_coach)->d;
if (empty($sessionInfo['coach_access_start_date']) ||
(!empty($sessionInfo['coach_access_start_date']) &&
$start_diff < $this->daysCoachAccessBeforeBeginning)
) {
$accessBefore = intval($this->daysCoachAccessBeforeBeginning);
}
$accessAfter = null;
if (empty($sessionInfo['nb_days_access_after_end']) ||
(!empty($sessionInfo['nb_days_access_after_end']) &&
$sessionInfo['nb_days_access_after_end'] < $this->daysCoachAccessAfterBeginning)
$end_date_for_coach = new DateTime($sessionInfo['coach_access_end_date']);
$end_date = new DateTime($sessionInfo['access_end_date']);
$end_diff = $end_date->diff($end_date_for_coach)->d;
if (empty($sessionInfo['coach_access_end_date']) ||
(!empty($sessionInfo['coach_access_end_date']) &&
$end_diff < $this->daysCoachAccessAfterBeginning)
) {
$accessAfter = intval($this->daysCoachAccessAfterBeginning);
}
@ -1082,12 +1085,8 @@ class ImportCsv
$result = SessionManager::edit_session(
$sessionId,
$session['SessionName'],
$dateStart[0],
$dateStart[1],
$dateStart[2],
$dateEnd[0],
$dateEnd[1],
$dateEnd[2],
$dateStart,
$dateEnd,
$accessBefore,
$accessAfter,
null,

@ -2292,7 +2292,7 @@ function api_get_session_visibility(
}
/* If I'm a coach the visibility can change in my favor depending in
the nb_days_access_after_end and nb_days_access_before_beginning */
the coach_access_start_date and coach_access_end_date */
$is_coach = api_is_coach($session_id, $courseId);
if ($is_coach) {
@ -2300,11 +2300,9 @@ function api_get_session_visibility(
if (isset($row['access_end_date']) &&
!empty($row['access_end_date']) &&
$row['access_end_date'] != '0000-00-00' &&
$row['nb_days_access_after_end'] != '0'
$row['coach_access_end_date'] != $row['access_end_date']
) {
$end_date_for_coach = new DateTime(substr($row['access_end_date'], 0 ,10).' 23:59:59');
$number_of_days = "P".intval($row['nb_days_access_after_end']).'D';
$end_date_for_coach->add(new DateInterval($number_of_days));
$end_date_for_coach = new DateTime($row['coach_access_end_date']);
if ($end_date_for_coach->getTimestamp() >= $now) {
$visibility = SESSION_AVAILABLE;
@ -2317,11 +2315,9 @@ function api_get_session_visibility(
if (isset($row['access_start_date']) &&
!empty($row['access_start_date']) &&
$row['access_start_date'] != '0000-00-00' &&
$row['nb_days_access_before_beginning'] != '0'
$row['coach_access_start_date'] != $row['access_start_date']
) {
$start_date_for_coach = new DateTime(substr($row['access_start_date'], 0, 10).' 00:00:00');
$number_of_days = "P".intval($row['nb_days_access_before_beginning']).'D';
$start_date_for_coach->sub(new DateInterval($number_of_days));
$start_date_for_coach = new DateTime($row['coach_access_start_date']);
if ($start_date_for_coach->getTimestamp() < $now) {
$visibility = SESSION_AVAILABLE;
} else {

@ -60,6 +60,8 @@ class SessionManager
* @param string End limit = true if the end date has to be considered
* @param string $fix_name
* @param string $duration
* @param string $displayStartDate
* @param string $displayEndDate
* @param string $description Optional. The session description
* @param int $showDescription Optional. Whether show the session description
* @param array $extrafields
@ -70,9 +72,9 @@ class SessionManager
$sname,
$startDate,
$endDate,
$snb_days_acess_before,
$snb_days_acess_after,
$nolimit,
$coachStartDate,
$coachEndDate,
$noLimit,
$coach_username,
$id_session_category,
$id_visibility,
@ -80,6 +82,8 @@ class SessionManager
$end_limit = true,
$fix_name = false,
$duration = null,
$displayStartDate = '0000-00-00 00:00:00',
$displayEndDate = '0000-00-00 00:00:00',
$description = null,
$showDescription = 0,
$extraFields = array()
@ -105,8 +109,10 @@ class SessionManager
}
$name = Database::escape_string(trim($sname));
$nb_days_acess_before = intval($snb_days_acess_before);
$nb_days_acess_after = intval($snb_days_acess_after);
$coachAccessStartDate = new DateTime($coachStartDate);
$coachAccessEndDate = new DateTime($coachEndDate);
$displayStartDate = new DateTime($displayStartDate);
$displayEndDate = new DateTime($displayEndDate);
$id_session_category = intval($id_session_category);
$id_visibility = intval($id_visibility);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
@ -121,22 +127,22 @@ class SessionManager
$id_coach = Database::result($rs, 0, 'user_id');
}
if (empty($nolimit)) {
if ($noLimit) {
$id_visibility = 1; // by default session visibility is read only
$date_start = "0000-00-00 00:00:00";
$date_end = "0000-00-00 00:00:00";
} else {
$date_start = Database::escape_string($startDate);
$date_end = Database::escape_string($endDate);
} else {
$id_visibility = 1; // by default session visibility is read only
$date_start = "0000-00-00";
$date_end = "0000-00-00";
}
if (empty($end_limit)) {
$date_end = "0000-00-00";
$date_end = "0000-00-00 00:00:00";
$id_visibility = 1; // by default session visibility is read only
}
if (empty($start_limit)) {
$date_start = "0000-00-00";
$date_start = "0000-00-00 00:00:00";
}
if (empty($name)) {
@ -145,13 +151,13 @@ class SessionManager
} elseif (empty($coach_username)) {
$msg = get_lang('CoachIsRequired');
return $msg;
} elseif (!empty($start_limit) && empty($nolimit) && !api_is_valid_date($date_start, 'Y-m-d')) {
} elseif (!empty($start_limit) && empty($noLimit) && !api_is_valid_date($date_start, 'Y-m-d')) {
$msg = get_lang('InvalidStartDate');
return $msg;
} elseif (!empty($end_limit) && empty($nolimit) && !api_is_valid_date($date_end, 'Y-m-d')) {
} elseif (!empty($end_limit) && empty($noLimit) && !api_is_valid_date($date_end, 'Y-m-d')) {
$msg = get_lang('InvalidEndDate');
return $msg;
} elseif (!empty($start_limit) && !empty($end_limit) && empty($nolimit) && $date_start >= $date_end) {
} elseif (!empty($start_limit) && !empty($end_limit) && empty($noLimit) && $date_start >= $date_end) {
$msg = get_lang('StartDateShouldBeBeforeEndDate');
return $msg;
} elseif (!empty($duration) && (!empty($start_limit) || !empty($end_limit))) {
@ -182,8 +188,10 @@ class SessionManager
'access_end_date' => $date_end,
'id_coach' => $id_coach,
'session_admin_id' => api_get_user_id(),
'nb_days_access_before_beginning' => $nb_days_acess_before,
'nb_days_access_after_end' => $nb_days_acess_after,
'coach_access_start_date' => $coachAccessStartDate->format('Y-m-d H:i:s'),
'coach_access_end_date' => $coachAccessEndDate->format('Y-m-d H:i:s'),
'display_start_date' => $displayStartDate->format('Y-m-d H:i:s'),
'display_end_date' => $displayEndDate->format('Y-m-d H:i:s'),
'visibility' => $id_visibility,
'description' => $description,
'show_description' => intval($showDescription)
@ -199,8 +207,8 @@ class SessionManager
if (!empty($duration)) {
$sql = "UPDATE $tbl_session SET
access_start_date = '0000-00-00',
access_end_date = '0000-00-00',
access_start_date = '0000-00-00 00:00:00',
access_end_date = '0000-00-00 00:00:00',
duration = $duration
WHERE id = $session_id";
Database::query($sql);
@ -293,7 +301,7 @@ class SessionManager
$today = api_get_utc_datetime();
$today = api_strtotime($today, 'UTC');
$today = date('Y-m-d', $today);
$today = date('Y-m-d H:i:s', $today);
if (!empty($where_condition)) {
$where_condition = str_replace("( session_active = ':' )", '1=1', $where_condition);
@ -325,13 +333,15 @@ class SessionManager
$sql = "SELECT COUNT(id) as total_rows FROM (
SELECT DISTINCT
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.nb_days_access_before_beginning > 0 AND DATEDIFF(s.access_start_date, '$today') <= s.nb_days_access_before_beginning) OR
(s.nb_days_access_after_end > 0 AND DATEDIFF('$today',s.access_end_date) <= s.nb_days_access_after_end) OR
(s.access_start_date = '0000-00-00' AND s.access_end_date = '0000-00-00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00' = s.access_start_date)
, 1, 0) as session_active,
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.coach_access_start_date < s.access_start_date
AND DATEDIFF('$today', s.coach_access_start_date) >= 0) OR
(s.coach_access_end_date > s.access_end_date
AND DATEDIFF(s.coach_access_end_date, '$today') <= 0) OR
(s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00 00:00:00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00 00:00:00' = s.access_start_date)
, 1, 0) as session_active,
s.id
FROM $tbl_session s
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
@ -348,16 +358,18 @@ class SessionManager
$sql = "SELECT count(id) as total_rows FROM (
SELECT DISTINCT
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.nb_days_access_before_beginning > 0 AND DATEDIFF(s.access_start_date, '$today') <= s.nb_days_access_before_beginning) OR
(s.nb_days_access_after_end > 0 AND DATEDIFF('$today',s.access_end_date) <= s.nb_days_access_after_end) OR
(s.access_start_date = '0000-00-00' AND s.access_end_date = '0000-00-00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00' = s.access_start_date)
, 1, 0)
as session_active,
s.id
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.coach_access_start_date < s.access_start_date
AND DATEDIFF('$today', s.coach_access_start_date) >= 0) OR
(s.coach_access_end_date > s.access_end_date
AND DATEDIFF(s.coach_access_end_date, '$today') <= 0) OR
(s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00 00:00:00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00 00:00:00' = s.access_start_date)
, 1, 0)
as session_active,
s.id
FROM $tbl_session s
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
INNER JOIN $tbl_user u ON s.id_coach = u.user_id
@ -445,15 +457,17 @@ class SessionManager
$select = "SELECT DISTINCT * FROM (SELECT
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.nb_days_access_before_beginning > 0 AND DATEDIFF(s.access_start_date,'" . $today . "' " . ") <= s.nb_days_access_before_beginning) OR
(s.nb_days_access_after_end > 0 AND DATEDIFF('" . $today . "',s.access_end_date) <= s.nb_days_access_after_end) OR
(s.access_start_date = '0000-00-00' AND s.access_end_date = '0000-00-00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00' = s.access_start_date)
, 1, 0)
as session_active,
s.name,
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.coach_access_start_date < s.access_start_date
AND DATEDIFF('$today', s.coach_access_start_date) >= 0) OR
(s.coach_access_end_date > s.access_end_date
AND DATEDIFF(s.coach_access_end_date, '$today') <= 0) OR
(s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR
(s.access_start_date <= '$today' AND '0000-00-00 00:00:00' = s.access_end_date) OR
('$today' <= s.access_end_date AND '0000-00-00 00:00:00' = s.access_start_date)
, 1, 0)
as session_active,
s.name,
nbr_courses,
s.nbr_users,
s.access_start_date,
@ -479,10 +493,10 @@ class SessionManager
}
$query = "$select FROM $tbl_session s
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_user u ON s.id_coach = u.user_id
$courseCondition
$extraJoin
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_user u ON s.id_coach = u.user_id
$courseCondition
$extraJoin
$where $order $limit";
if (api_is_multiple_url_enabled()) {
@ -496,7 +510,7 @@ class SessionManager
ON ar.session_id = s.id AND ar.access_url_id = $access_url_id
$courseCondition
$extraJoin
$where $order $limit";
$where $order $limit";
}
}
@ -1325,15 +1339,11 @@ class SessionManager
* @author Carlos Vargas from existing code
* @param integer id
* @param string name
* @param integer year_start
* @param integer month_start
* @param integer day_start
* @param integer year_end
* @param integer month_end
* @param integer day_end
* @param integer nb_days_acess_before
* @param integer nb_days_acess_after
* @param integer nolimit
* @param string $startDate Access start date
* @param string $endDate Access end date
* @param string $coachStartDate Access start date for coaches
* @param string $coachEndDate Access end date for coaches
* @param bool $noLimit skips the insertion of dates if none was set
* @param integer id_coach
* @param integer id_session_category
* @param int $id_visibility
@ -1349,9 +1359,9 @@ class SessionManager
$name,
$startDate,
$endDate,
$nb_days_acess_before,
$nb_days_acess_after,
$nolimit,
$coachStartDate,
$coachEndDate,
$noLimit = false,
$id_coach,
$id_session_category,
$id_visibility,
@ -1360,37 +1370,37 @@ class SessionManager
$description = null,
$showDescription = 0,
$duration = null,
$displayStartDate = '0000-00-00 00:00:00',
$displayEndDate = '0000-00-00 00:00:00',
$extraFields = array()
) {
$name = trim(stripslashes($name));
$id_coach = intval($id_coach);
$nb_days_acess_before = intval($nb_days_acess_before);
$nb_days_acess_after = intval($nb_days_acess_after);
$coachAccessStartDate = new DateTime($coachStartDate);
$coachAccessEndDate = new DateTime($coachEndDate);
$id_session_category = intval($id_session_category);
$id_visibility = intval($id_visibility);
$displayStartDate = new DateTime($displayStartDate);
$displayEndDate = new DateTime($displayEndDate);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
if (empty($nolimit)) {
if ($noLimit) {
$date_start = '0000-00-00 00:00:00';
$date_end = '0000-00-00 00:00:00';
$id_visibility = 1; //force read only
} else {
$date_start = Database::escape_string($startDate);
$date_end = Database::escape_string($endDate);
} else {
$date_start = "0000-00-00";
$date_end = "0000-00-00";
$id_visibility = 1; //force read only
}
if (!empty($no_end_limit)) {
$date_end = "0000-00-00";
}
if (empty($end_limit)) {
$date_end = "0000-00-00";
if (!$end_limit) {
$date_end = '0000-00-00 00:00:00';
$id_visibility = 1; //force read only
}
if (empty($start_limit)) {
$date_start = "0000-00-00";
if (!$start_limit) {
$date_start = '0000-00-00 00:00:00';
}
if (empty($name)) {
@ -1399,20 +1409,21 @@ class SessionManager
} elseif (empty($id_coach)) {
$msg = get_lang('CoachIsRequired');
return $msg;
} elseif (!empty($start_limit) && empty($nolimit) && !api_is_valid_date($date_start, 'Y-m-d')) {
$msg = get_lang('InvalidStartDate');
} elseif ($start_limit && !api_is_valid_date($date_start, 'Y-m-d H:i')) {
if ($start_limit) {$msg='.';}
$msg .= get_lang('InvalidStartDate');
return $msg;
} elseif (!empty($end_limit) && empty($nolimit) && !api_is_valid_date($date_end, 'Y-m-d')) {
} elseif ($end_limit && !api_is_valid_date($date_end, 'Y-m-d H:i')) {
$msg = get_lang('InvalidEndDate');
return $msg;
} elseif (!empty($start_limit) && !empty($end_limit) && empty($nolimit) && $date_start >= $date_end) {
} elseif ($start_limit && $end_limit && !$noLimit && $date_start >= $date_end) {
$msg = get_lang('StartDateShouldBeBeforeEndDate');
return $msg;
} elseif (!empty($duration) && (!empty($start_limit) || !empty($end_limit))) {
} elseif (!empty($duration) && ($start_limit || $end_limit)) {
return get_lang('ChooseEitherDurationOrTimeLimit');
} else {
$rs = Database::query("SELECT id FROM $tbl_session WHERE name='" . Database::escape_string($name) . "'");
$rs = Database::query("SELECT id FROM $tbl_session WHERE name = '" . Database::escape_string($name) . "'");
$exists = false;
while ($row = Database::fetch_array($rs)) {
if ($row['id'] != $id) {
@ -1429,8 +1440,8 @@ class SessionManager
if (empty($duration)) {
$duration = null;
} else {
$date_start = '0000-00-00';
$date_end = "0000-00-00";
$date_start = '0000-00-00 00:00:00';
$date_end = "0000-00-00 00:00:00";
$duration = intval($duration);
}
$values['duration'] = $duration;
@ -1439,14 +1450,16 @@ class SessionManager
$values['access_start_date'] = $date_start;
$values['access_end_date'] = $date_end;
$values['id_coach'] = $id_coach;
$values['nb_days_access_before_beginning'] = $nb_days_acess_before;
$values['nb_days_access_after_end'] = $nb_days_acess_after;
$values['coach_access_start_date'] = $coachAccessStartDate->format('Y-m-d H:i:s');
$values['coach_access_end_date'] = $coachAccessEndDate->format('Y-m-d H:i:s');
if (!empty($id_session_category)) {
$values['session_category_id'] = $id_session_category;
}
$values['description'] = $description;
$values['show_description'] = intval($showDescription);
$values['visibility'] = $id_visibility;
$values['display_start_date'] = $displayStartDate->format('Y-m-d H:i:s');
$values['display_end_date'] = $displayEndDate->format('Y-m-d H:i:s');
Database::update($tbl_session, $values, array(
'id = ?' => $id
@ -3417,31 +3430,21 @@ class SessionManager
{
$id = intval($id);
$s = self::fetch($id);
$s['year_start'] = substr($s['access_start_date'], 0, 4);
$s['month_start'] = substr($s['access_start_date'], 5, 2);
$s['day_start'] = substr($s['access_start_date'], 8, 2);
$s['year_end'] = substr($s['access_end_date'], 0, 4);
$s['month_end'] = substr($s['access_end_date'], 5, 2);
$s['day_end'] = substr($s['access_end_date'], 8, 2);
$consider_start = true;
if ($s['year_start'] . '-' . $s['month_start'] . '-' . $s['day_start'] == '0000-00-00') {
if ($s['access_start_date'] == '0000-00-00 00:00:00') {
$consider_start = false;
}
$consider_end = true;
if ($s['year_end'] . '-' . $s['month_end'] . '-' . $s['day_end'] == '0000-00-00') {
if ($s['access_end_date'] == '0000-00-00 00:00:00') {
$consider_end = false;
}
$sid = self::create_session(
$s['name'] . ' ' . get_lang('CopyLabelSuffix'),
$s['year_start'],
$s['month_start'],
$s['day_start'],
$s['year_end'],
$s['month_end'],
$s['day_end'],
$s['nb_days_acess_before_beginning'],
$s['nb_days_acess_after_end'],
$s['access_start_date'],
$s['access_end_date'],
$s['coach_access_start_date'],
$s['coach_access_end_date'],
false,
(int)$s['id_coach'],
$s['session_category_id'],
@ -3751,7 +3754,7 @@ class SessionManager
* converted to extra_external_session_id if you set this: array('SessionId' => 'extra_external_session_id')
* @param string $extraFieldId
* @param int $daysCoachAccessBeforeBeginning
* @param int $daysCoachAccessAfterBeginning
* @param int $daysCoachAccessAfterEnd
* @param int $sessionVisibility
* @param array $fieldsToAvoidUpdate
* @param bool $deleteUsersNotInList
@ -3768,7 +3771,7 @@ class SessionManager
$extraFields = array(),
$extraFieldId = null,
$daysCoachAccessBeforeBeginning = null,
$daysCoachAccessAfterBeginning = null,
$daysCoachAccessAfterEnd = null,
$sessionVisibility = 1,
$fieldsToAvoidUpdate = array(),
$deleteUsersNotInList = false,
@ -3799,9 +3802,9 @@ class SessionManager
$extraParameters = null;
if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterBeginning)) {
$extraParameters .= ' , nb_days_access_before_beginning = '.intval($daysCoachAccessBeforeBeginning);
$extraParameters .= ' , nb_days_access_after_end = '.intval($daysCoachAccessAfterBeginning);
if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterEnd)) {
$extraParameters .= ' , coach_access_start_date = DATE_SUB(access_start_date, INTERVAL '.intval($daysCoachAccessBeforeBeginning). ' DAY)';
$extraParameters .= ' , coach_access_end_date = DATE_ADD(access_end_date, INTERVAL '.intval($daysCoachAccessAfterEnd). ' DAY)';
}
if (!is_null($showDescription)) {
@ -3906,7 +3909,7 @@ class SessionManager
if ($i > 1) {
$suffix = ' - ' . $i;
}
$sql = 'SELECT 1 FROM ' . $tbl_session . ' WHERE name="' . $session_name . $suffix . '"';
$sql = 'SELECT 1 FROM ' . $tbl_session . ' WHERE name = "' . $session_name . $suffix . '"';
$rs = Database::query($sql);
if (Database::result($rs, 0, 0)) {
@ -3919,7 +3922,7 @@ class SessionManager
$sessionCondition = '';
if (!empty($session_category_id)) {
$sessionCondition = "session_category_id = '$session_category_id',";
$sessionCondition = " session_category_id = '$session_category_id',";
}
// Creating the session.
@ -4050,20 +4053,19 @@ class SessionManager
$params['show_description'] = isset($sessionInfo['show_description']) ? $sessionInfo['show_description'] : intval($showDescription);
if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterBeginning)) {
if (empty($sessionInfo['nb_days_access_before_beginning']) ||
(!empty($sessionInfo['nb_days_access_before_beginning']) &&
$sessionInfo['nb_days_access_before_beginning'] < $daysCoachAccessBeforeBeginning)
) {
$params['nb_days_access_before_beginning'] = intval($daysCoachAccessBeforeBeginning);
}
if (empty($sessionInfo['nb_days_access_after_end']) ||
(!empty($sessionInfo['nb_days_access_after_end']) &&
$sessionInfo['nb_days_access_after_end'] < $daysCoachAccessAfterBeginning)
) {
$params['nb_days_access_after_end'] = intval($daysCoachAccessAfterBeginning);
}
$dateStart = new DateTime($sessionInfo['access_start_date']);
$dateEnd = new DateTime($sessionInfo['access_end_date']);
$coachStartDate = $dateStart;
$coachEndDate = $dateEnd;
if (!empty($daysCoachAccessBeforeBeginning)) {
$daysBefore = new DateInterval('P' . intval($daysCoachAccessBeforeBeginning) . 'D');
$coachStartDate = $dateStart->sub($daysBefore);
$params['coach_access_start_date'] = $coachStartDate->format('Y-m-d H:i:s');
}
if (!empty($daysCoachAccessAfterEnd)) {
$daysAfter = new DateInterval('P' . intval($daysCoachAccessAfterEnd) . 'D');
$coachEndDate = $dateEnd->add($daysAfter);
$params['coach_access_end_date'] = $coachEndDate->format('Y-m-d H:i:s');
}
Database::update($tbl_session, $params, array('id = ?' => $session_id));
@ -4076,21 +4078,21 @@ class SessionManager
// Delete session-user relation only for students
$sql = "DELETE FROM $tbl_session_user
WHERE session_id = '$session_id' AND relation_type <> " . SESSION_RELATION_TYPE_RRHH;
WHERE session_id = $session_id AND relation_type <> " . SESSION_RELATION_TYPE_RRHH;
Database::query($sql);
$sql = "DELETE FROM $tbl_session_course WHERE session_id = '$session_id'";
$sql = "DELETE FROM $tbl_session_course WHERE session_id = $session_id";
Database::query($sql);
// Delete session-course-user relationships students and coaches.
if ($updateCourseCoaches) {
$sql = "DELETE FROM $tbl_session_course_user
WHERE session_id = '$session_id' AND status in ('0', '2')";
WHERE session_id = $session_id AND status in (0, 2)";
Database::query($sql);
} else {
// Delete session-course-user relation ships *only* for students.
$sql = "DELETE FROM $tbl_session_course_user
WHERE session_id = '$session_id' AND status <> 2";
WHERE session_id = $session_id AND status <> 2";
Database::query($sql);
}
} else {
@ -4117,8 +4119,8 @@ class SessionManager
$userList[] = $user_id;
// Insert new users.
$sql = "INSERT IGNORE INTO $tbl_session_user SET
user_id = '$user_id',
session_id = '$session_id'";
user_id = $user_id,
session_id = $session_id";
Database::query($sql);
if ($debug) {
$logger->addInfo("Sessions - Adding User #$user_id ($user) to session #$session_id");
@ -4173,7 +4175,7 @@ class SessionManager
// Adding the course to a session.
$sql = "INSERT IGNORE INTO $tbl_session_course
SET c_id = '$courseId', session_id='$session_id'";
SET c_id = $courseId, session_id = $session_id";
Database::query($sql);
SessionManager::installCourse($session_id, $courseInfo['real_id']);
@ -4382,7 +4384,7 @@ class SessionManager
}
$access_url_id = api_get_current_access_url_id();
UrlManager::add_session_to_url($session_id, $access_url_id);
$sql = "UPDATE $tbl_session SET nbr_users = '$user_counter', nbr_courses = '$course_counter' WHERE id = '$session_id'";
$sql = "UPDATE $tbl_session SET nbr_users = $user_counter, nbr_courses = $course_counter WHERE id = $session_id";
Database::query($sql);
}
}

@ -2296,8 +2296,8 @@ class UserManager
session_category.name as session_category_name,
session_category.date_start session_category_date_start,
session_category.date_end session_category_date_end,
nb_days_access_before_beginning,
nb_days_access_after_end
coach_access_start_date,
coach_access_end_date
FROM $tbl_session as session
LEFT JOIN $tbl_session_category session_category
@ -2319,13 +2319,13 @@ class UserManager
// User portal filters:
if ($is_time_over) {
// History
if (isset($row['access_end_date']) && $row['access_end_date'] != '0000-00-00') {
if ($row['access_end_date'].' 23:59:59' > $now) {
if (isset($row['access_end_date']) && $row['access_end_date'] != '0000-00-00 00:00:00') {
if ($row['access_end_date'] > $now) {
continue;
}
}
if ($row['access_end_date'] == '0000-00-00') {
if ($row['access_end_date'] == '0000-00-00 00:00:00') {
continue;
}
} else {
@ -2333,8 +2333,8 @@ class UserManager
if (api_is_allowed_to_create_course()) {
// Teachers can access the session depending in the access_coach date
} else {
if (isset($row['access_end_date']) && $row['access_end_date'] != '0000-00-00') {
if ($row['access_end_date'].' 23:59:59' <= $now) {
if (isset($row['access_end_date']) && $row['access_end_date'] != '0000-00-00 00:00:00') {
if ($row['access_end_date'] <= $now) {
continue;
}
}
@ -2403,8 +2403,8 @@ class UserManager
'session_id' => $row['id'],
'access_start_date' => $row['access_start_date'],
'access_end_date' => $row['access_end_date'],
'nb_days_access_before_beginning' => $row['nb_days_access_before_beginning'],
'nb_days_access_after_end' => $row['nb_days_access_after_end'],
'coach_access_start_date' => $row['coach_access_start_date'],
'coach_access_end_date' => $row['coach_access_end_date'],
'courses' => $courseList
);
}

@ -1160,8 +1160,8 @@ class IndexManager
// Courses inside the current session.
$date_session_start = $session['access_start_date'];
$date_session_end = $session['access_end_date'];
$days_access_before_beginning = $session['nb_days_access_before_beginning'];
$days_access_after_end = $session['nb_days_access_after_end'];
$coachAccessStartDate = $session['coach_access_start_date'];
$coachAccessEndDate = $session['coach_access_end_date'];
$session_now = time();
$count_courses_session = 0;
@ -1174,15 +1174,15 @@ class IndexManager
$is_coach_course = api_is_coach($session_id, $course['real_id']);
$allowed_time = 0;
$dif_time_after = 0;
if ($date_session_start != '0000-00-00') {
if ($date_session_start != '0000-00-00 00:00:00') {
if ($is_coach_course) {
$allowed_time = api_strtotime($date_session_start.' 00:00:00') - ($days_access_before_beginning * 86400);
$allowed_time = api_strtotime($coachAccessStartDate);
} else {
$allowed_time = api_strtotime($date_session_start.' 00:00:00');
$allowed_time = api_strtotime($date_session_start);
}
if (!isset($_GET['history'])) {
if ($date_session_end != '0000-00-00') {
$endSessionToTms = api_strtotime($date_session_end.' 23:59:59');
if ($date_session_end != '0000-00-00 00:00:00') {
$endSessionToTms = api_strtotime($date_session_end);
if ($session_now > $endSessionToTms) {
$dif_time_after = $session_now - $endSessionToTms;
$dif_time_after = round($dif_time_after/86400);
@ -1192,7 +1192,7 @@ class IndexManager
}
if ($session_now > $allowed_time &&
$days_access_after_end > $dif_time_after - 1
$coachAccessEndDate > $dif_time_after - 1
) {
// Read only and accessible.
$atLeastOneCourseIsVisible = true;
@ -1296,8 +1296,8 @@ class IndexManager
$date_session_start = $session['access_start_date'];
$date_session_end = $session['access_end_date'];
$days_access_before_beginning = $session['nb_days_access_before_beginning'];
$days_access_after_end = $session['nb_days_access_after_end'];
$coachAccessStartDate = $session['coach_access_start_date'];
$coachAccessEndDate = $session['coach_access_end_date'];
$session_now = time();
$html_courses_session = '';
@ -1313,13 +1313,13 @@ class IndexManager
$allowed_time = 0;
if ($is_coach_course) {
// 24 hours = 86400
if ($date_session_start != '0000-00-00') {
$allowed_time = api_strtotime($date_session_start . ' 00:00:00') - ($days_access_before_beginning * 86400);
if ($date_session_start != '0000-00-00 00:00:00') {
$allowed_time = api_strtotime($coachAccessStartDate);
}
if (!isset($_GET['history'])) {
if ($date_session_end != '0000-00-00') {
if ($date_session_end != '0000-00-00 00:00:00') {
$endSessionToTms = api_strtotime(
$date_session_end . ' 23:59:59'
$date_session_end
);
if ($session_now > $endSessionToTms) {
$dif_time_after = $session_now - $endSessionToTms;
@ -1331,12 +1331,12 @@ class IndexManager
}
} else {
$allowed_time = api_strtotime(
$date_session_start . ' 00:00:00'
$date_session_start
);
}
if ($session_now > $allowed_time &&
$days_access_after_end > $dif_time_after - 1
$coachAccessEndDate > $dif_time_after - 1
) {
if (api_get_setting('hide_courses_in_sessions') == 'false') {
$c = CourseManager:: get_logged_user_course_html(

@ -46,17 +46,20 @@ $sql = 'SELECT
nbr_courses,
nbr_users,
nbr_classes,
DATE_FORMAT(access_start_date,"%d-%m-%Y") as access_start_date,
DATE_FORMAT(access_end_date,"%d-%m-%Y") as access_end_date,
access_start_date,
access_end_date,
lastname,
firstname,
username,
session_admin_id,
nb_days_access_before_beginning,
nb_days_access_after_end,
coach_access_start_date,
coach_access_end_date,
display_start_date,
display_end_date,
session_category_id,
visibility,
show_description, description
show_description,
description
FROM '.$tbl_session.'
LEFT JOIN '.$tbl_user.'
ON id_coach = user_id
@ -120,9 +123,9 @@ switch ($action) {
if (!empty($_GET['class'])) {
$result = Database::query("DELETE FROM $tbl_session_rel_class
WHERE session_id='$sessionId' AND class_id=".intval($_GET['class']));
WHERE session_id = $sessionId AND class_id=".intval($_GET['class']));
$nbr_affected_rows = Database::affected_rows($result);
Database::query("UPDATE $tbl_session SET nbr_classes=nbr_classes-$nbr_affected_rows WHERE id='$sessionId'");
Database::query("UPDATE $tbl_session SET nbr_classes=nbr_classes-$nbr_affected_rows WHERE id = $sessionId");
}
if (!empty($_GET['user'])) {
@ -167,42 +170,38 @@ echo Display::page_subheader(get_lang('GeneralProperties').$url);
</tr>
<?php } ?>
<tr>
<td><?php echo get_lang('Date'); ?> :</td>
<td>
<?php
if ($session['access_start_date'] == '00-00-0000' && $session['access_end_date']== '00-00-0000' )
echo get_lang('NoTimeLimits');
else {
if ($session['access_start_date'] != '00-00-0000') {
$session['access_start_date'] = get_lang('From').' '.$session['access_start_date'];
} else {
$session['access_start_date'] = '';
<td>
<?php echo api_ucfirst(get_lang('SessionDisplayDate')) ?> :
</td>
<td>
<?php echo sprintf(get_lang('FromXUntilY'), $session['display_start_date'], $session['display_end_date']); ?>
</td>
</tr>
<tr>
<td><?php echo get_lang('AccessDates'); ?></td>
<td>
<?php
if ($session['access_start_date'] == '0000-00-00 00:00:00' && $session['access_end_date']== '0000-00-00 00:00:00' )
echo get_lang('NoTimeLimits');
else {
if ($session['access_start_date'] == '0000-00-00 00:00:00') {
$session['access_start_date'] = '';
}
if ($session['access_end_date'] == '00-00-0000') {
if ($session['access_end_date'] == '0000-00-00 00:00:00') {
$session['access_end_date'] ='';
} else {
$session['access_end_date'] = get_lang('Until').' '.$session['access_end_date'];
}
echo $session['access_start_date'].' '.$session['access_end_date'];
echo sprintf(get_lang('FromXUntilY'), $session['access_start_date'], $session['access_end_date']);
}
?>
</td>
</td>
</tr>
<!-- show nb_days_before and nb_days_after only if they are different from 0 -->
<tr>
<td>
<?php echo api_ucfirst(get_lang('DaysBefore')) ?> :
</td>
<td>
<?php echo intval($session['nb_days_access_before_beginning']) ?>
</td>
</tr>
<tr>
<td>
<?php echo api_ucfirst(get_lang('DaysAfter')) ?> :
<?php echo api_ucfirst(get_lang('CoachSessionAccessDates')) ?> :
</td>
<td>
<?php echo intval($session['nb_days_access_after_end']) ?>
<?php echo sprintf(get_lang('FromXUntilY'), $session['coach_access_start_date'], $session['coach_access_end_date']); ?>
</td>
</tr>
<tr>

@ -146,14 +146,23 @@ $defaultBeforeDays = $before ? $before : 0;
$after = api_get_setting('session_days_after_coach_access');
$defaultAfterDays = $after ? $after : 0;
$nb_days_acess_before = $defaultBeforeDays;
$nb_days_acess_after = $defaultAfterDays;
$nb_days_access_before = $defaultBeforeDays;
$nb_days_access_after = $defaultAfterDays;
$thisYear = date('Y');
$thisMonth = date('m');
$thisDay = date('d');
$tool_name = get_lang('AddSession');
$defaultStart = "$thisYear-$thisMonth-$thisDay 00:00:00";
$defaultEnd = date('Y-m-d', strtotime("$thisYear-$thisMonth-$thisDay +364 day")) . ' 23:59:59';
$start = new DateTime($defaultStart);
$end = new DateTime($defaultEnd);
$startDiff = new DateInterval('P' . $nb_days_access_before . 'D');
$endDiff = new DateInterval('P' . $nb_days_access_after . 'D');
$defaultCoachStart = $start->sub($startDiff);
$defaultCoachEnd = $end->add($endDiff);
$urlAction = api_get_self();
$categoriesList = SessionManager::get_all_session_category();
@ -288,34 +297,12 @@ $form->addHtmlEditor(
);
$form->addElement('checkbox', 'show_description', null, get_lang('ShowDescription'));
$form->addElement('text', 'nb_days_acess_before', array('', '', get_lang('DaysBefore')), array(
'input-size' => '2',
'value' => $nb_days_acess_before
));
$form->addElement('text', 'nb_days_acess_after', array('', '', get_lang('DaysAfter')), array(
'input-size' => '2',
'value' => $nb_days_acess_after
));
$form->addElement('checkbox', 'start_limit', '', get_lang('DateStartSession'), array(
'onchange' => 'disable_starttime(this)',
'id' => 'start_limit'
));
$form->addElement('html','<div id="start_date" style="display:none">');
$form->addElement('date_picker', 'access_start_date');
$form->addElement('html','</div>');
$form->addElement('checkbox', 'end_limit', '', get_lang('DateEndSession'), array(
'onchange' => 'disable_endtime(this)',
'id' => 'end_limit'
));
$form->addElement('html', '<div id="end_date" style="display:none">');
$form->addElement('date_picker', 'access_end_date');
$form->addElement('date_time_picker', 'display_start_date', array(get_lang('SessionDisplayStartDate'), get_lang('SessionDisplayStartDateComment')));
$form->addElement('date_time_picker', 'display_end_date', array(get_lang('SessionDisplayEndDate'), get_lang('SessionDisplayEndDateComment')));
$form->addElement('date_time_picker', 'access_start_date', array(get_lang('SessionAccessStartDate'), get_lang('SessionAccessStartDateComment')));
$form->addElement('date_time_picker', 'access_end_date', array(get_lang('SessionAccessEndDate'), get_lang('SessionAccessEndDateComment')));
$form->addElement('date_time_picker', 'coach_access_start_date', array(get_lang('CoachSessionAccessStartDate'), get_lang('CoachSessionAccessStartDateComment')));
$form->addElement('date_time_picker', 'coach_access_end_date', array(get_lang('CoachSessionAccessEndDate'), get_lang('CoachSessionAccessEndDateComment')));
$visibilityGroup = array();
$visibilityGroup[] = $form->createElement('select', 'session_visibility', null, array(
@ -355,14 +342,13 @@ $(function() {
$form->addButtonNext(get_lang('NextStep'));
$formDefaults = array(
'nb_days_acess_before' => $nb_days_acess_before,
'nb_days_acess_after' => $nb_days_acess_after
);
if (!$formSent) {
$formDefaults['access_start_date'] = "$thisYear-$thisMonth-$thisDay";
$formDefaults['access_end_date'] = date('Y-m-d', strtotime("$thisYear-$thisMonth-$thisDay +1 year"));
$formDefaults['display_start_date'] = $defaultStart;
$formDefaults['display_end_date'] = $defaultEnd;
$formDefaults['access_start_date'] = $defaultStart;
$formDefaults['access_end_date'] = $defaultEnd;
$formDefaults['coach_access_start_date'] = $defaultCoachStart->format('Y-m-d H:i:s');
$formDefaults['coach_access_end_date'] = $defaultCoachEnd->format('Y-m-d H:i:s');
} else {
$formDefaults['name'] = api_htmlentities($name, ENT_QUOTES, $charset);
}
@ -373,10 +359,12 @@ if ($form->validate()) {
$params = $form->getSubmitValues();
$name = $params['name'];
$displayStartDate = $params['display_start_date'];
$displayEndDate = $params['display_end_date'];
$startDate = $params['access_start_date'];
$endDate = $params['access_end_date'];
$nb_days_acess_before = $params['nb_days_acess_before'];
$nb_days_acess_after = $params['nb_days_acess_after'];
$coachAccessStartDate = $params['coach_access_start_date'];
$coachAccessEndDate = $params['coach_access_end_date'];
$coach_username = intval($params['coach_username']);
$id_session_category = $params['session_category'];
$id_visibility = $params['session_visibility'];
@ -386,10 +374,9 @@ if ($form->validate()) {
$description = $params['description'];
$showDescription = isset($params['show_description']) ? 1: 0;
if (empty($end_limit) && empty($start_limit)) {
$nolimit = 1;
} else {
$nolimit = null;
$noLimit = true;
if (!empty($end_limit) && !empty($start_limit)) {
$noLimit = false;
}
$extraFields = array();
@ -404,9 +391,9 @@ if ($form->validate()) {
$name,
$startDate,
$endDate,
$nb_days_acess_before,
$nb_days_acess_after,
$nolimit,
$coachAccessStartDate,
$coachAccessEndDate,
$noLimit,
$coach_username,
$id_session_category,
$id_visibility,
@ -414,6 +401,8 @@ if ($form->validate()) {
$end_limit,
false,
$duration,
$displayStartDate,
$displayEndDate,
$description,
$showDescription,
$extraFields
@ -429,7 +418,7 @@ if ($form->validate()) {
Display::display_header($tool_name);
if (!empty($return)) {
Display::display_error_message($return,false);
Display::display_error_message($return,false);
}
echo '<div class="actions">';

@ -89,7 +89,7 @@ if (!empty($return)) {
</tr>
<td colspan="2">
<a href="javascript://" onclick="if(document.getElementById('options').style.display == 'none'){document.getElementById('options').style.display = 'block';}else{document.getElementById('options').style.display = 'none';}"><?php echo get_lang('EditTimeLimit') ?></a>
<div style="display: <?php if($formSent && ($nb_days_acess_before!=0 || $nb_days_acess_after!=0)) echo 'block'; else echo 'none'; ?>;" id="options">
<div style="display: <?php if($formSent && ($coachAccessStartDate!='0000-00-00 00:00:00' || $coachAccessEndDate!='0000-00-00 00:00:00')) echo 'block'; else echo 'none'; ?>;" id="options">
<br>
<div>
<table border="0" cellpadding="5" cellspacing="0" width="100%">

@ -23,8 +23,6 @@ $id = intval($_GET['id']);
SessionManager::protectSession($id);
$infos = SessionManager::fetch($id);
$infos['access_start_date'] = api_format_date($infos['access_start_date'], '%Y-%m-%d');
$infos['access_end_date'] = api_format_date($infos['access_end_date'], '%Y-%m-%d');
$id_coach = $infos['id_coach'];
$tool_name = get_lang('EditSession');
@ -142,52 +140,13 @@ if (!empty($infos['show_description'])) {
}
$form->addElement('checkbox', 'show_description', null, get_lang('ShowDescription'), $chkDescriptionAttributes);
$form->addElement('text', 'nb_days_access_before', array('', '', get_lang('DaysBefore')), array(
'input-size' => '2',
));
$form->addElement('text', 'nb_days_access_after', array('', '', get_lang('DaysAfter')), array(
'input-size' => '2',
));
if ($year_start!="0000") {
$form->addElement('checkbox', 'start_limit', '', get_lang('DateStartSession'), array(
'onchange' => 'disable_starttime(this)',
'id' => 'start_limit',
'checked' => ''
));
$form->addElement('html','<div id="start_date" style="display:block">');
} else {
$form->addElement('checkbox', 'start_limit', '', get_lang('DateStartSession'), array(
'onchange' => 'disable_starttime(this)',
'id' => 'start_limit'
));
$form->addElement('html','<div id="start_date" style="display:none">');
}
$form->addElement('date_picker', 'access_start_date');
$form->addElement('html','</div>');
if ($year_end != "0000") {
$form->addElement('checkbox', 'end_limit', '', get_lang('DateEndSession'), array(
'onchange' => 'disable_endtime(this)',
'id' => 'end_limit',
'checked' => ''
));
$form->addElement('html','<div id="end_date" style="display:block">');
} else {
$form->addElement('checkbox', 'end_limit', '', get_lang('DateEndSession'), array(
'onchange' => 'disable_endtime(this)',
'id' => 'end_limit'
));
$form->addElement('html','<div id="end_date" style="display:none">');
}
$form->addElement('date_picker', 'access_end_date');
$form->addElement('date_time_picker', 'display_start_date', array(get_lang('SessionDisplayStartDate'), get_lang('SessionDisplayStartDateComment')));
$form->addElement('date_time_picker', 'display_end_date', array(get_lang('SessionDisplayEndDate'), get_lang('SessionDisplayEndDateComment')));
$form->addElement('date_time_picker', 'access_start_date', array(get_lang('SessionAccessStartDate'), get_lang('SessionAccessStartDateComment')));
$form->addElement('date_time_picker', 'access_end_date', array(get_lang('SessionAccessEndDate'), get_lang('SessionAccessEndDateComment')));
$form->addElement('date_time_picker', 'coach_access_start_date', array(get_lang('CoachSessionAccessStartDate'), get_lang('CoachSessionAccessStartDateComment')));
$form->addElement('date_time_picker', 'coach_access_end_date', array(get_lang('CoachSessionAccessEndDate'), get_lang('CoachSessionAccessEndDateComment')));
$visibilityGroup = array();
$visibilityGroup[] = $form->createElement(
@ -241,21 +200,27 @@ $form->addButtonUpdate(get_lang('ModifyThisSession'));
$formDefaults = array(
'id_coach' => $infos['id_coach'],
'session_category' => $infos['session_category_id'],
'access_start_date' => $infos['access_start_date'],
'access_end_date' => $infos['access_end_date'],
'session_visibility' => $infos['visibility'],
'description' => $infos['description']
);
if ($formSent) {
$formDefaults['name'] = api_htmlentities($name, ENT_QUOTES, $charset);
$formDefaults['nb_days_access_before'] = api_htmlentities($nb_days_access_before, ENT_QUOTES,$charset);
$formDefaults['nb_days_access_after'] = api_htmlentities($nb_days_access_after, ENT_QUOTES,$charset);
$formDefaults['display_start_date'] = $displayStartDate;
$formDefaults['display_end_date'] = $displayEndDate;
$formDefaults['access_start_date'] = $startDate;
$formDefaults['access_end_date'] = $endDate;
$formDefaults['coach_access_start_date'] = $coachAccessStartDate;
$formDefaults['coach_access_end_date'] = $coachAccessEndDate;
$formDefaults['duration'] = Security::remove_XSS($duration);
} else {
$formDefaults['name'] = Security::remove_XSS($infos['name']);
$formDefaults['nb_days_access_before'] = api_htmlentities($infos['nb_days_access_before_beginning'], ENT_QUOTES, $charset);
$formDefaults['nb_days_access_after'] = api_htmlentities($infos['nb_days_access_after_end'], ENT_QUOTES, $charset);
$formDefaults['display_start_date'] = $infos['display_start_date'];
$formDefaults['display_end_date'] = $infos['display_end_date'];
$formDefaults['access_start_date'] = $infos['access_start_date'];
$formDefaults['access_end_date'] = $infos['access_end_date'];
$formDefaults['coach_access_start_date'] = $infos['coach_access_start_date'];
$formDefaults['coach_access_end_date'] = $infos['coach_access_end_date'];
$formDefaults['duration'] = $duration;
}
@ -265,10 +230,12 @@ if ($form->validate()) {
$params = $form->getSubmitValues();
$name = $params['name'];
$displayStartDate = $params['display_start_date'];
$displayEndDate = $params['display_end_date'];
$startDate = $params['access_start_date'];
$endDate = $params['access_end_date'];
$nb_days_acess_before = $params['nb_days_access_before'];
$nb_days_acess_after = $params['nb_days_access_after'];
$coachAccessStartDate = $params['coach_access_start_date'];
$coachAccessEndDate = $params['coach_access_end_date'];
$id_coach = $params['id_coach'];
$id_session_category = $params['session_category'];
$id_visibility = $params['session_visibility'];
@ -276,13 +243,17 @@ if ($form->validate()) {
$description = $params['description'];
$showDescription = isset($params['show_description']) ? 1: 0;
$end_limit = isset($params['end_limit']);
$start_limit = isset($params['start_limit']);
if (!$end_limit && !$start_limit) {
$nolimit = 1;
} else {
$nolimit = null;
$noLimit = false;
$startLimit = true;
$endLimit = true;
if (empty($startDate) || $startDate == '0000-00-00 00:00:00') {
$startLimit = false;
}
if (empty($endDate) || $endDate == '0000-00-00 00:00:00') {
$endLimit = false;
}
if (!$startLimit && !$endLimit) {
$noLimit = true;
}
$extraFields = array();
@ -298,24 +269,26 @@ if ($form->validate()) {
$name,
$startDate,
$endDate,
$nb_days_acess_before,
$nb_days_acess_after,
$nolimit,
$coachAccessStartDate,
$coachAccessEndDate,
$noLimit,
$id_coach,
$id_session_category,
$id_visibility,
$start_limit,
$end_limit,
$startLimit,
$endLimit,
$description,
$showDescription,
$duration,
$displayStartDate,
$displayEndDate,
$extraFields
);
if ($return == strval(intval($return))) {
header('Location: resume_session.php?id_session=' . $return);
exit();
}
header('Location: resume_session.php?id_session=' . $return);
exit();
}
}
// display the header
@ -333,6 +306,7 @@ function setDisable(select) {
document.forms['edit_session'].elements['session_visibility'].disabled = (select.checked) ? true : false;
document.forms['edit_session'].elements['session_visibility'].selectedIndex = 0;
/*
document.forms['edit_session'].elements['start_limit'].disabled = (select.checked) ? true : false;
document.forms['edit_session'].elements['start_limit'].checked = false;
document.forms['edit_session'].elements['end_limit'].disabled = (select.checked) ? true : false;
@ -343,6 +317,7 @@ function setDisable(select) {
var start_div = document.getElementById('start_date');
start_div.style.display = 'none';
*/
}
function disable_endtime(select) {

@ -32,15 +32,31 @@ if($allowTutors == 'true') {
$table_access_url_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = 'SELECT name, nbr_courses, nbr_users, nbr_classes, DATE_FORMAT(access_start_date,"%d-%m-%Y") as access_start_date, DATE_FORMAT(access_end_date,"%d-%m-%Y") as access_end_date, lastname, firstname, username, session_admin_id, nb_days_access_before_beginning, nb_days_access_after_end, session_category_id, visibility
FROM '.$tbl_session.' LEFT JOIN '.$tbl_user.' ON id_coach = user_id
WHERE '.$tbl_session.'.id='.$id_session;
$sql = 'SELECT
name,
nbr_courses,
nbr_users,
nbr_classes,
DATE_FORMAT(access_start_date,"%d-%m-%Y") as access_start_date,
DATE_FORMAT(access_end_date,"%d-%m-%Y") as access_end_date,
lastname,
firstname,
username,
session_admin_id,
coach_access_start_date,
coach_access_end_date,
session_category_id,
visibility
FROM '.$tbl_session.' LEFT JOIN '.$tbl_user.' ON id_coach = user_id
WHERE '.$tbl_session.'.id='.$id_session;
$rs = Database::query($sql);
$session = Database::store_result($rs);
$session = $session[0];
$sql = 'SELECT name FROM '.$tbl_session_category.' WHERE id = "'.intval($session['session_category_id']).'"';
$sql = 'SELECT name
FROM '.$tbl_session_category.'
WHERE id = '.intval($session['session_category_id']);
$rs = Database::query($sql);
$session_category = '';
@ -158,18 +174,18 @@ if($allowTutors == 'true') {
<!-- show nb_days_before and nb_days_after only if they are different from 0 -->
<tr>
<td>
<?php echo api_ucfirst(get_lang('DaysBefore')) ?> :
<?php echo api_ucfirst(get_lang('CoachSessionAccessStartDate')) ?> :
</td>
<td>
<?php echo intval($session['nb_days_access_before_beginning']) ?>
<?php echo intval($session['coach_access_start_date']) ?>
</td>
</tr>
<tr>
<td>
<?php echo api_ucfirst(get_lang('DaysAfter')) ?> :
<?php echo api_ucfirst(get_lang('CoachSessionAccessEndDate')) ?> :
</td>
<td>
<?php echo intval($session['nb_days_access_after_end']) ?>
<?php echo intval($session['coach_session_access_end_date']) ?>
</td>
</tr>
<tr>

@ -3656,8 +3656,8 @@ function WSCreateSession($params)
$year_end = intval($session_param['year_end']);
$month_end = intval($session_param['month_end']);
$day_end = intval($session_param['day_end']);
$nb_days_acess_before = intval($session_param['nb_days_access_before']);
$nb_days_acess_after = intval($session_param['nb_days_access_after']);
$nb_days_access_before = intval($session_param['nb_days_access_before']);
$nb_days_access_after = intval($session_param['nb_days_access_after']);
$id_coach = $session_param['user_id'];
$nolimit = $session_param['nolimit'];
$original_session_id_name = $session_param['original_session_id_name'];
@ -3676,11 +3676,11 @@ function WSCreateSession($params)
}
if (empty($nolimit)){
$date_start = "$year_start-".(($month_start < 10)?"0$month_start":$month_start)."-".(($day_start < 10)?"0$day_start":$day_start);
$date_end = "$year_end-".(($month_end < 10)?"0$month_end":$month_end)."-".(($day_end < 10)?"0$day_end":$day_end);
$date_start = "$year_start-".(($month_start < 10)?"0$month_start":$month_start)."-".(($day_start < 10)?"0$day_start":$day_start) . ' 00:00:00';
$date_end = "$year_end-".(($month_end < 10)?"0$month_end":$month_end)."-".(($day_end < 10)?"0$day_end":$day_end) . ' 23:59:59';
} else {
$date_start = "000-00-00";
$date_end = "000-00-00";
$date_start = "000-00-00 00:00:00";
$date_end = "000-00-00 00:00:00";
}
if (empty($name)) {
@ -3701,8 +3701,32 @@ function WSCreateSession($params)
$results[] = 0;
continue;
} else {
Database::query("INSERT INTO $tbl_session(name,access_start_date,access_end_date,id_coach,session_admin_id, nb_days_access_before_beginning, nb_days_access_after_end)
VALUES('".addslashes($name)."','$date_start','$date_end','$id_coach',".intval($_user['user_id']).",".$nb_days_acess_before.", ".$nb_days_acess_after.")");
$startDate = new DateTime($date_start);
$endDate = new DateTime($date_end);
$diffStart = new DateInterval($nb_days_access_before);
$diffEnd = new DateInterval($nb_days_access_after);
$coachStartDate = $startDate->sub($diffStart);
$coachEndDate = $endDate->add($diffEnd);
Database::query(
"INSERT INTO $tbl_session(
name,
access_start_date,
access_end_date,
id_coach,
session_admin_id,
coach_access_start_date,
coach_access_end_date
)
VALUES(
'".addslashes($name)."',
'$date_start',
'$date_end',
'$id_coach',
".intval($_user['user_id']).",
'".$coachStartDate->format('Y-m-d H:i:s')."',
'".$coachEndDate->format('Y-m-d H:i:s')."'
)"
);
$id_session = Database::insert_id();
// Save new fieldlabel into course_field table.
@ -3865,8 +3889,8 @@ function WSEditSession($params)
$year_end = intval($session_param['year_end']);
$month_end = intval($session_param['month_end']);
$day_end = intval($session_param['day_end']);
$nb_days_acess_before = intval($session_param['nb_days_access_before']);
$nb_days_acess_after = intval($session_param['nb_days_access_after']);
$nb_days_access_before = intval($session_param['nb_days_access_before']);
$nb_days_access_after = intval($session_param['nb_days_access_after']);
$original_session_id_value = $session_param['original_session_id_value'];
$original_session_id_name = $session_param['original_session_id_name'];
$orig_session_id_value[] = $original_session_id_value;
@ -3905,15 +3929,21 @@ function WSEditSession($params)
$results[] = 0; //StartDateShouldBeBeforeEndDate
continue;
} else {
$startDate = new DateTime($date_start);
$endDate = new DateTime($date_end);
$diffStart = new DateInterval($nb_days_access_before);
$diffEnd = new DateInterval($nb_days_access_after);
$coachStartDate = $startDate->sub($diffStart);
$coachEndDate = $endDate->add($diffEnd);
$sql = "UPDATE $tbl_session SET " .
"name='".addslashes($name)."', " .
"date_start='".$date_start."', " .
"date_end='".$date_end."', " .
"id_coach='". $id_coach."', " .
"session_admin_id='". intval($_user['user_id'])."', " .
"nb_days_access_before_beginning='". $nb_days_acess_before."', " .
"nb_days_access_after_end='". $nb_days_acess_after."'" .
" WHERE id='".$id."'";
"name = '".addslashes($name)."', " .
"date_start = '".$date_start."', " .
"date_end = '".$date_end."', " .
"id_coach = '". $id_coach."', " .
"session_admin_id = '". intval($_user['user_id'])."', " .
"coach_access_start_date = '". $coachStartDate->format('Y-m-d H:i:s') . "', " .
"coach_access_end_date = '". $coachEndDate->format('Y-m-d H:i:s') . "'" .
" WHERE id = '".$id."'";
Database::query($sql);
if (is_array($extra_list) && count($extra_list) > 0) {

@ -37,17 +37,24 @@ class WSSession extends WS
if($user_id instanceof WSError) {
return $user_id;
}
// Build the date
$start_date_array = explode('-', $start_date);
foreach($start_date_array as &$sd_element) {
$sd_element = intval($sd_element);
}
$end_date_array = explode('-', $end_date);
foreach($end_date_array as &$ed_element) {
$ed_element = intval($ed_element);
}
$startDate = new DateTime($start_date);
$endDate = new DateTime($end_date);
$diffStart = new DateInterval($nb_days_access_before);
$diffEnd = new DateInterval($nb_days_access_after);
$coachStartDate = $startDate->sub($diffStart);
$coachEndDate = $endDate->add($diffEnd);
// Try to create the session
$session_id = SessionManager::create_session($name, $start_date_array[0], $start_date_array[1], $start_date_array[2], $end_date_array[0], $end_date_array[1], $end_date_array[2], (int)$nb_days_access_before, (int)$nb_days_access_after, (int)$nolimit, $user_id, 0, (int)$visibility);
$session_id = SessionManager::create_session(
$name,
$start_date,
$end_date,
$coachStartDate->format('Y-m-d H:i:s'),
$coachEndDate->format('Y-m-d H:i:s'),
$nolimit,
$user_id,
0,
$visibility
);
if(!is_int($session_id)) {
return new WSError(301, 'Could not create the session');
} else {
@ -163,16 +170,24 @@ class WSSession extends WS
if($user_id instanceof WSError) {
return $user_id;
}
// Build the date
$start_date_array = explode('-', $start_date);
foreach($start_date_array as &$sd_element) {
$sd_element = intval($sd_element);
}
$end_date_array = explode('-', $end_date);
foreach($end_date_array as &$ed_element) {
$ed_element = intval($ed_element);
}
$result_id = SessionManager::edit_session($session_id, $name, $start_date_array[0], $start_date_array[1], $start_date_array[2], $end_date_array[0], $end_date_array[1], $end_date_array[2], (int)$nb_days_access_before, (int)$nb_days_access_after, (int)$nolimit, $user_id, 0, (int)$visibility);
$startDate = new DateTime($start_date);
$endDate = new DateTime($end_date);
$diffStart = new DateInterval($nb_days_access_before);
$diffEnd = new DateInterval($nb_days_access_after);
$coachStartDate = $startDate->sub($diffStart);
$coachEndDate = $endDate->add($diffEnd);
$result_id = SessionManager::edit_session(
$session_id,
$name,
$start_date,
$end_date,
$coachStartDate->format('Y-m-d H:i:s'),
$coachEndDate->format('Y-m-d H:i:s'),
$nolimit,
$user_id,
0,
$visibility
);
if(!is_int($result_id)) {
return new WSError(302, 'Could not edit the session');
} else {

@ -92,35 +92,7 @@ class Session
* @ORM\Column(name="nbr_classes", type="integer", nullable=true, unique=false)
*/
private $nbrClasses;
/**
* @var \DateTime
*
* @ORM\Column(name="date_start", type="date", nullable=false)
*/
//private $dateStart;
/**
* @var \DateTime
*
* @ORM\Column(name="date_end", type="date", nullable=false)
*/
//private $dateEnd;
/**
* @var boolean
*
* @ORM\Column(name="nb_days_access_before_beginning", type="boolean", nullable=true)
*/
private $nbDaysAccessBeforeBeginning;
/**
* @var boolean
*
* @ORM\Column(name="nb_days_access_after_end", type="boolean", nullable=true)
*/
private $nbDaysAccessAfterEnd;
/**
* @var integer
*

@ -24,21 +24,27 @@ class TestSessionManager extends UnitTestCase {
function testcreate_session() {
global $_user;
$sname='';
$syear_start='';
$smonth_start='';
$sday_start='';
$syear_end='';
$smonth_end='';
$sday_end='';
$snb_days_acess_before='';
$snb_days_acess_after='';
$start='';
$end='';
$coachStart='';
$coachEnd='';
$nolimit='';
$coach_username='';
$id_session_category='';
$id_visibility='';
$id_session=Database::insert_id();
ob_start();
$res=SessionManager::create_session($sname,$syear_start,$smonth_start,$sday_start,$syear_end,$smonth_end,$sday_end,$snb_days_acess_before,$snb_days_acess_after,$nolimit,$coach_username,$id_session_category,$id_visibility);
$res=SessionManager::create_session(
$sname,
$start,
$end,
$coachStart,
$coachEnd,
$nolimit,
$coach_username,
$id_session_category,
$id_visibility
);
$this->assertTrue(is_numeric($id_session));
$this->assertTrue(is_string($res));
ob_end_clean();
@ -75,19 +81,26 @@ class TestSessionManager extends UnitTestCase {
global $_user;
$id=1;
$name='';
$year_start='';
$month_start='';
$day_start='';
$year_end='';
$month_end='';
$day_end='';
$nb_days_acess_before='';
$nb_days_acess_after='';
$start='';
$end='';
$coachStart='';
$coachEnd='';
$nolimit='';
$id_coach='';
$id_session_category='';
$id_visibility='';
$res=SessionManager::edit_session($id,$name,$year_start,$month_start,$day_start,$year_end,$month_end,$day_end,$nb_days_acess_before,$nb_days_acess_after,$nolimit,$id_coach, $id_session_category, $id_visibility);
$res=SessionManager::edit_session(
$id,
$name,
$start,
$end,
$coachStart,
$coachEnd,
$nolimit,
$id_coach,
$id_session_category,
$id_visibility
);
$this->assertTrue(is_numeric($id));
$this->assertTrue(is_string($res));
//var_dump($id);

Loading…
Cancel
Save