Skip to content
Snippets Groups Projects
Commit f8fe801c authored by David Siegfried's avatar David Siegfried Committed by Jan-Hendrik Willms
Browse files

move sem-week calculation to php, closes #1147

Closes #1147

Merge request studip/studip!762
parent 200d9685
No related branches found
No related tags found
No related merge requests found
......@@ -42,6 +42,44 @@ class Semester extends \RESTAPI\RouteMap
return $this->paginated($json, $total);
}
/**
* Returns the semester week as string for a given string
*
* @get /semester/:timestamp/week
*/
public function getSemesterWeek(int $timestamp)
{
$semester = \Semester::findByTimestamp($timestamp);
if (!$semester) {
return null;
}
$timestamp = strtotime('today', $timestamp);
$week_begin_timestamp = strtotime('monday this week', $semester->vorles_beginn);
$end_date = $semester->vorles_ende;
$i = 0;
$result = [
'semester_name' => (string)$semester->name,
'week_number' => sprintf(_('KW %u'), date('W', $timestamp)),
'current_day' => strftime('%x', $timestamp)
];
while ($week_begin_timestamp < $end_date) {
$next_week_timestamp = strtotime('+1 week', $week_begin_timestamp);
if ($week_begin_timestamp <= $timestamp && $timestamp < $next_week_timestamp) {
$result['sem_week'] = sprintf(
_('%u. Vorlesungswoche (ab %s)'),
$i + 1,
strftime('%x', $week_begin_timestamp));
break;
}
$i += 1;
$week_begin_timestamp = $next_week_timestamp;
}
return $result;
}
/**
* Returns a single semester.
*
......
......@@ -19,13 +19,10 @@
<?= htmlReady($resource->name) ?>
<? endif ?>
<span id="booking-plan-header-semrow">
<strong>
<span id="booking-plan-header-semname"></span>
<span id="booking-plan-header-semweek-part">
<?= _('Vorlesungswoche') ?>
<span id="booking-plan-header-semweek"></span>
</span>
</strong>
<strong><span id="booking-plan-header-semname"></span> </strong>
<span id="booking-plan-header-semweek-part">
<span id="booking-plan-header-semweek"></span>
</span>
</span>
</span>
<? if ($resource->getProperty('room_administrator')): ?>
......
......@@ -50,9 +50,10 @@
<?= htmlReady($resource->name) ?>
<? endif ?>
<span id="booking-plan-header-semrow">
<strong>
<?= _('Semester') ?>
<span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
<strong>
<?= _('Semester') ?>
<span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
</strong>
<span id="booking-plan-header-semspan">
<? if (Request::get("semester_timerange") == 'fullsem') : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
......@@ -60,7 +61,6 @@
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
<? endif ?>
</span>
</strong>
</span>
</div>
<? if ($resource->getProperty('room_administrator')): ?>
......
......@@ -32,14 +32,14 @@
<strong>
<?= _('Semester') ?>
<span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
<span id="booking-plan-header-semspan">
<? if (Request::get("semester_timerange") == 'fullsem') : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->beginn), date('d.m.Y', $semester->ende)); ?>
<? else : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
<? endif ?>
</span>
</strong>
<span id="booking-plan-header-semspan">
<? if (Request::get("semester_timerange") == 'fullsem') : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->beginn), date('d.m.Y', $semester->ende)); ?>
<? else : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
<? endif ?>
</span>
</span>
</div>
<? if ($resource->getProperty('room_administrator')): ?>
......
......@@ -18,18 +18,14 @@
<div>
<?= _('Raumgruppe') ?>
<span id="booking-plan-header-roomgroup"><?= htmlReady($clipboard->name) ?></span>
<strong>
<?= _('KW') ?>
<span id="booking-plan-header-calweek"></span>
(<span id="booking-plan-header-calbegin"></span>)
<span id="booking-plan-header-semrow">
<span id="booking-plan-header-semname"></span>
<span id="booking-plan-header-semweek-part">
<?= _('Vorlesungswoche') ?>
<span id="booking-plan-header-semweek"></span>
</span>
<span id="booking-plan-header-calweek"></span>
<span id="booking-plan-header-calbegin"></span>
<span id="booking-plan-header-semrow">
<strong><span id="booking-plan-header-semname"></span></strong>
<span id="booking-plan-header-semweek-part">
<span id="booking-plan-header-semweek"></span>
</span>
</strong>
</span>
</div>
</section>
......
......@@ -24,14 +24,14 @@
<strong>
<?= _('Semester')?>
<span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
<span id="booking-plan-header-semspan">
<? if (Request::get("semester_timerange") == 'fullsem') : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
<? else : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
<? endif ?>
</span>
</strong>
<span id="booking-plan-header-semspan">
<? if (Request::get("semester_timerange") == 'fullsem') : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
<? else : ?>
<?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
<? endif ?>
</span>
</span>
</div>
</section>
......
<?php
class ActivateSemesterRoutes extends Migration
{
public function description()
{
return "Activates all semester routes";
}
public function up()
{
require_once 'app/routes/Semester.php';
RESTAPI\ConsumerPermissions::get()->activateRouteMap(new RESTAPI\Routes\Semester());
}
}
......@@ -519,37 +519,31 @@ class Fullcalendar
}
},
datesRender (info) {
var activeRange = info.view.props.dateProfile.activeRange;
var start = activeRange.start;
var end = activeRange.end;
let activeRange = info.view.props.dateProfile.activeRange;
let timestamp = activeRange.start.getTime() / 1000;
if ($(info.el).hasClass('institute-plan')) {
$('.fc-slats tr:odd .fc-widget-content:not(.fc-axis)').remove();
}
if ($('.booking-plan-header').length) {
end.setDate(end.getDate());
let semester = $('.booking-plan-header').data('semester');
let sem_start = null;
let sem_end = null;
if (semester) {
sem_start = semester.seminars_begin;
sem_end = semester.seminars_end;
}
if (sem_start && (start.getTime() / 1000 < sem_start || start.getTime() / 1000 > sem_end)) {
sem_start = null;
sem_end = null;
} else if (sem_start) {
STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
}
$('#booking-plan-header-calweek').text(start.getWeekNumber());
$('#booking-plan-header-calbegin').text(start.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + start.toLocaleDateString('de-DE'));
$('#booking-plan-header-calend').text(end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + end.toLocaleDateString('de-DE'));
if (!sem_start || !sem_end) {
STUDIP.Resources.updateBookingPlanSemesterByView(activeRange);
STUDIP.api.GET(`semester/${timestamp}/week`).done((data) => {
if (data) {
$('#booking-plan-header-semname').text(data.semester_name);
if (data.sem_week) {
$('#booking-plan-header-semweek').text(data.sem_week);
$('#booking-plan-header-semweek-part').show();
} else {
$('#booking-plan-header-semweek').text('');
$('#booking-plan-header-semweek-part').hide();
}
$('#booking-plan-header-semrow').show();
$('#booking-plan-header-calweek').text(data.week_number);
$('#booking-plan-header-calbegin').text('(' + data.current_day + ')');
} else {
$('#booking-plan-header-semrow').hide();
$('#booking-plan-header-semweek-part').hide();
}
}
})
},
resourceRender (renderInfo) {
if ($(renderInfo.view.context.calendar.el).hasClass('room-group-booking-plan')) {
......
......@@ -704,76 +704,6 @@ class Resources
STUDIP.Resources.updateEventUrlsInCalendar(info.event);
}
static updateBookingPlanSemesterByView(activeRange, api_url = 'api.php/semesters') {
let semester = null;
jQuery.ajax(
STUDIP.URLHelper.getURL(api_url),
{
method: 'get',
dataType: 'json',
success: function (data) {
if (data) {
Object.values(data.collection).forEach(item => {
if (activeRange.start.getTime() / 1000 >= item.begin && activeRange.start.getTime() / 1000 < item.end) {
semester = item;
}
});
if (!semester) {
if (data.pagination && data.pagination.links && data.pagination.links.next != api_url) {
semester = STUDIP.Resources.updateBookingPlanSemesterByView(activeRange, data.pagination.links.next);
}
}
}
STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
}
}
);
}
static updateBookingPlanDateInfos(plan_begin, plan_end, semester = null)
{
if (semester) {
let show_lecture_week = false;
let fake_plan_end = new Date(plan_end.getTime() - 1000);
if (plan_begin.getUTCDay() == fake_plan_end.getUTCDay()) {
show_lecture_week = (plan_begin.getTime() / 1000 + 43200) >= semester.seminars_begin && (plan_begin.getTime() / 1000) < semester.seminars_end;
} else {
show_lecture_week = (plan_end.getTime() / 1000 + 43200) >= semester.seminars_begin && (plan_end.getTime() / 1000) < semester.seminars_end;
}
$(".booking-plan-header").data('semester', semester);
$("#booking-plan-header-semname").text(semester.title);
if (show_lecture_week) {
let lecture_week_start = new Date((semester.seminars_begin + 43200) * 1000);
let lecture_week_start_day = lecture_week_start.getDay();
if (lecture_week_start_day == 0) {
//Sunday is 7, not 0!
lecture_week_start_day = 7;
}
lecture_week_start_day--;
let normal_sem_week_begin = semester.seminars_begin - (lecture_week_start_day * 86400);
let sem_week = Math.floor((plan_end.getTime() / 1000 - 10800 - normal_sem_week_begin) / 604800) + 1;
if (sem_week > 0) {
$("#booking-plan-header-semweek").text(sem_week);
$("#booking-plan-header-semweek-part").show();
} else {
$("#booking-plan-header-semweek-part").hide();
}
} else {
$("#booking-plan-header-semweek-part").hide();
}
$("#booking-plan-header-semrow").show();
} else {
$(".booking-plan-header").data('semester', null);
$('#booking-plan-header-semrow').hide();
}
$('#booking-plan-header-calweek').text(plan_begin.getWeekNumber());
$('#booking-plan-header-calbegin').text(plan_begin.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_begin.toLocaleDateString('de-DE'));
$('#booking-plan-header-calend').text(plan_end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_end.toLocaleDateString('de-DE'));
}
static toggleRequestMarked(source_node)
{
if (!source_node) {
......
@media print {
#booking-plan-header-semrow-line #booking-plan-header-semweek-part,
#booking-plan-header-semweek-part,
#booking-plan-header-resource-name-line,
#booking-plan-header-seats-line,
#booking-plan-header-administration_url-line {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment