Skip to content
Snippets Groups Projects
Commit 04ad36e3 authored by Michaela Brückner's avatar Michaela Brückner :unicorn: Committed by David Siegfried
Browse files

closes #1327

Closes #1327

Merge request studip/studip!1147
parent 6254b44a
No related branches found
No related tags found
No related merge requests found
Showing
with 1060 additions and 1134 deletions
......@@ -1055,14 +1055,6 @@ class Admin_CoursesController extends AuthenticatedController
unset($actions[16]);
}
if (Config::get()->RESOURCES_ENABLE && Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS) {
$actions[4] = [
'name' => 'Raumanfragen',
'title' => _('Raumanfragen'),
'url' => 'dispatch.php/course/room_requests/index?cid=%s&origin=admin_courses',
'attributes' => ['data-dialog' => 'size=big'],
];
}
ksort($actions);
foreach (PluginManager::getInstance()->getPlugins('AdminCourseAction') as $plugin) {
......
This diff is collapsed.
......@@ -130,7 +130,7 @@ class Course_TimesroomsController extends AuthenticatedController
$this->show = [
'regular' => true,
'irregular' => true,
'roomRequest' => false,
'roomRequest' => true,
];
}
$this->linkAttributes = ['fromDialog' => Request::isXhr() ? 1 : 0];
......@@ -187,7 +187,22 @@ class Course_TimesroomsController extends AuthenticatedController
$dates = $this->course->getDatesWithExdates();
$this->current_user = User::findCurrent();
$this->user_has_permissions = ResourceManager::userHasGlobalPermission($this->current_user, 'admin');
$check_room_requests = Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS;
$this->room_requests = RoomRequest::findBySQL(
'course_id = :course_id
ORDER BY course_id, metadate_id, termin_id',
[
'course_id' => $this->course->id
]
);
$this->global_requests = $this->course->room_requests->filter(function (RoomRequest $request) {
return $request->closed < 2 && !$request->termin_id;
});
$single_dates = [];
$this->single_date_room_request_c = 0;
foreach ($dates as $val) {
......@@ -793,9 +808,10 @@ class Course_TimesroomsController extends AuthenticatedController
}
$this->redirect(
'course/room_requests/request_start',
'course/room_requests/new_request',
[
'range' => 'date-multiple',
'range_str' => 'date-multiple',
'range_ids' => $appointment_ids
]
);
......@@ -1471,9 +1487,23 @@ class Course_TimesroomsController extends AuthenticatedController
}
Sidebar::Get()->addWidget($widget);
if ($GLOBALS['perm']->have_studip_perm('admin', $this->course->id)) {
$widget = new CourseManagementSelectWidget();
Sidebar::Get()->addWidget($widget);
if ($GLOBALS['perm']->have_perm('admin')) {
$list = new SelectWidget(
_('Veranstaltungen'),
$this->indexURL(),
'cid'
);
foreach (AdminCourseFilter::get()->getCoursesForAdminWidget() as $seminar) {
$list->addElement(new SelectElement(
$seminar['Seminar_id'],
$seminar['Name'],
$seminar['Seminar_id'] === Context::getId(),
$seminar['VeranstaltungsNummer'] . ' ' . $seminar['Name']
));
}
$list->size = 8;
Sidebar::Get()->addWidget($list);
}
}
......@@ -1661,6 +1691,7 @@ class Course_TimesroomsController extends AuthenticatedController
];
}
}
$this->selectable_rooms = [];
$rooms_with_booking_permissions = 0;
if ($current_user_is_resource_admin) {
$rooms_with_booking_permissions = Room::countAll();
......
<br>
<footer data-dialog-button>
<? if ($step !== 3) : ?>
<?= \Studip\LinkButton::create(
_('Zurück auf Anfang'),
$controller->url_for('course/room_requests/new_request/' . $request_id),
['data-dialog' => 'size=big']
) ?>
<? else: ?>
<?= \Studip\LinkButton::create(
_('Angaben bearbeiten'),
$controller->url_for('course/room_requests/request_find_available_properties/' . $request_id . '/1'),
['data-dialog' => 'size=big']
) ?>
<? endif ?>
<? if ($step === 1 || $step === 2) : ?>
<? if ($_SESSION[$request_id]['search_by'] !== 'category') : ?>
<? \Studip\Button::create(_('Raum auswählen'), 'select_room') ?>
<? endif ?>
<? endif ?>
<? if (($step === 1 && $_SESSION[$request_id]['room_category_id'] !== '0')
|| $step === 2) : ?>
<?= \Studip\Button::create(_('Weiter'), 'show_summary') ?>
<? endif ?>
<? if ($step === 3) : ?>
<?= \Studip\Button::create(_('Raumanfrage speichern'), 'save_request') ?>
<? endif ?>
<?= \Studip\LinkButton::createCancel(
_('Abbrechen'),
$controller->url_for('course/room_requests/index/' . $course_id),
[
'title' => _('Abbrechen')
]
) ?>
</footer>
</form>
<? if ($direct_room_requests_only): ?>
<?= MessageBox::info(
_('Geben Sie bitte den gewünschten Raum an. Ihre Raumanfrage wird von der zuständigen Raumvergabe bearbeitet.'),
[_('<strong>Achtung:</strong> Geben Sie bitte immer die notwendige Sitzplatzanzahl mit an!')]
)?>
<? else: ?>
<?= MessageBox::info(
_('Geben Sie den gewünschten Raum und/oder Raumeigenschaften an. Ihre Raumanfrage wird von der zuständigen Raumvergabe bearbeitet.'),
[_('<strong>Achtung:</strong> Um später einen passenden Raum für Ihre Veranstaltung zu bekommen, geben Sie bitte immer die gewünschten Eigenschaften mit an!')]
)?>
<? endif ?>
<section class="resources-grid">
<section class="contentbox">
<header><h1><?= _('Anfrage') ?></h1></header>
......@@ -27,4 +16,3 @@
<section><?= htmlReady($request->getStatusText()) ?></section>
</section>
</section>
<footer data-dialog-button>
<? if ($room_search_button) : ?>
<?= \Studip\Button::create(
_('Räume suchen'),
'search_rooms',
[
'title' => _('Startet die Suche von Räumen anhand der gewählten Eigenschaften.')
]
) ?>
<? endif ?>
<? if ($room_select_button) : ?>
<?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?>
<? endif ?>
<? if ($save_buttons) : ?>
<?= \Studip\Button::create(_('Speichern'), 'save_and_close') ?>
<? endif ?>
<? if ($select_properties_button) : ?>
<?= \Studip\Button::create(_('Eigenschaften wählen'), 'select_properties') ?>
<? endif ?>
<?= \Studip\LinkButton::createCancel(
_('Abbrechen'),
$controller->link_for('course/room_requests/index/' . $course_id),
[
'title' => _('Abbrechen')
]
) ?>
</footer>
</form>
<form method="post" name="room_request" class="default"
action="<?= $action ?>" <?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>>
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= CSRFProtection::tokenTag() ?>
<? if ($selected_room): ?>
<label>
<?= _('Ausgewählter Raum') ?>
<input type="hidden" name="selected_room_id"
value="<?= htmlReady($selected_room->id) ?>">
<br>
<strong><?= htmlReady($selected_room->name) ?></strong>
</label>
<? endif ?>
......@@ -14,12 +14,12 @@ echo $flash['message'];
<col style="width: 50px">
</colgroup>
<thead>
<tr>
<th><?= _('Art der Anfrage') ?></th>
<th><?= _('Anfragender') ?></th>
<th><?= _('Bearbeitungsstatus') ?></th>
<th></th>
</tr>
<tr>
<th><?= _('Art der Anfrage') ?></th>
<th><?= _('Anfragender') ?></th>
<th><?= _('Bearbeitungsstatus') ?></th>
<th></th>
</tr>
</thead>
<tbody>
<? foreach ($room_requests as $rr): ?>
......
<form method="POST" class="default" name="new_room_request"
action="<?= $this->controller->link_for('course/room_requests/request_start') ?>"
<?= Request::isXhr() ? 'data-dialog="size=big"' : '' ?>>
<?= CSRFProtection::tokenTag() ?>
<fieldset>
<legend><?= _("Raumanfrage erstellen") ?></legend>
<? if (count($options)): ?>
<label>
<?= _("Art der Raumanfrage:") ?>
<select id="new_room_request_type" name="range_str">
<? foreach ($options as $one) : ?>
<option value="<?= $one['value'] ?>">
<?= htmlReady($one['name']) ?>
</option>
<? endforeach ?>
</select>
</label>
<div class="text-center" data-dialog-button>
</div>
<? else : ?>
<?= MessageBox::info(
_("In dieser Veranstaltung können keine weiteren Raumanfragen gestellt werden.")
) ?>
<? endif ?>
</fieldset>
<footer data-dialog-button>
<? if (count($options)): ?>
<?= Studip\Button::create(
_('Erstellen'),
'create_room_request'
) ?>
<?= Studip\LinkButton::createCancel(
_('Abbrechen'),
$controller->link_for('course/room_requests/index/' . $course_id)
) ?>
<? else: ?>
<?= Studip\LinkButton::create(
_('Zurück zur Übersicht'),
$controller->link_for('course/room_requests/index/' . $course_id),
['data-dialog' => 'size=big']
) ?>
<? endif ?>
</footer>
</form>
<? if (!$embedded) : ?>
<?= $this->render_partial(
'course/room_requests/_request_form_header',
[
'action' => $this->controller->link_for('course/room_requests/request_start/' . $request_id),
'request_id' => $request_id
]
) ?>
<?= $this->render_partial(
'course/room_requests/_request_edit_header',
['request' => $request]
) ?>
<? endif ?>
<section class="resources-grid">
<div>
<fieldset>
<legend><?= _('Raum suchen') ?></legend>
<label>
<?= _('Raumname') ?>
<span class="flex-row">
<input type="text" name="room_name" value="<?= htmlReady($room_name) ?>">
<?= Icon::create('search', Icon::ROLE_CLICKABLE)->asInput(
[
'name' => 'search_by_name',
'class' => 'text-bottom',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? if ($room_name) : ?>
<?= Icon::create('refresh', Icon::ROLE_CLICKABLE, ['title' => _('alle Angaben zurücksetzen')])->asInput(
[
'type' => 'image',
'class' => 'text-bottom',
'name' => 'reset_category',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? endif?>
</span>
</label>
<form method="post" name="room_request" class="default"
action="<?= $controller->link_for('course/room_requests/request_first_step/' . $request_id) ?>"
<?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>>
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= CSRFProtection::tokenTag() ?>
<?= $this->render_partial('course/room_requests/_new_request_header') ?>
<section class="resources-grid">
<div>
<fieldset>
<legend><?= _('Suche nach Raumkategorie und Eigenschaften') ?></legend>
<? if ($available_room_categories): ?>
<strong><p><?= _('Wünschbare Eigenschaften') ?></p></strong>
<label>
<?= _('Raumkategorie') ?>
<span class="flex-row">
......@@ -47,16 +19,17 @@
<option value=""><?= _('bitte auswählen') ?></option>
<? foreach ($available_room_categories as $rc): ?>
<option value="<?= htmlReady($rc->id) ?>"
<?= ($category_id == $rc->id)
? 'selected="selected"'
<?= $_SESSION[$request_id]['room_category'] === $rc->id
? 'selected'
: '' ?>>
<?= htmlReady($rc->name) ?>
</option>
<? endforeach ?>
</select>
<? if ($category) : ?>
<?= Icon::create('refresh', Icon::ROLE_CLICKABLE, ['title' => _('alle Angaben zurücksetzen')])->asInput(
<?= Icon::create('decline')->asInput(
[
'title' => _('alle Angaben zurücksetzen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'reset_category',
......@@ -64,11 +37,12 @@
]
) ?>
<? else : ?>
<?= Icon::create('accept', Icon::ROLE_CLICKABLE, ['title' => _('Raumtyp auswählen')])->asInput(
<?= Icon::create('accept')->asInput(
[
'title' => _('Raumtyp auswählen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'select_properties',
'name' => 'search_by_category',
'value' => _('Raumtyp auswählen'),
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
......@@ -80,6 +54,39 @@
<? if (!$embedded) : ?>
</fieldset>
</div>
<div>
<fieldset>
<legend><?= _('Raumsuche') ?></legend>
<label>
<?= _('Raumname') ?>
<span class="flex-row">
<input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>">
<?= Icon::create('search')->asInput(
[
'title' => _('Räume suchen'),
'name' => 'search_by_name',
'class' => 'text-bottom',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? if ($room_name) : ?>
<?= Icon::create('decline')->asInput(
[
'title' => _('alle Angaben zurücksetzen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'reset_name',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? endif?>
</span>
</label>
</fieldset>
</div>
</section>
<?= $this->render_partial('course/room_requests/_request_form_footer') ?>
<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step]) ?>
<? endif ?>
<form method="post" name="room_request" class="default"
action="<?= $controller->link_for('course/room_requests/request_check_properties/' . $request_id . '/' . $this->step) ?>"
<?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>>
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= CSRFProtection::tokenTag() ?>
<?= $this->render_partial('course/room_requests/_new_request_header') ?>
<section class="resources-grid">
<div>
<fieldset class="request-fieldset">
<legend><?= _('Wünschbare Eigenschaften') ?></legend>
<? if ($step === 1 || $step === 2) : ?>
<?= $this->render_partial('course/room_requests/_room_with_properties') ?>
<? endif ?>
<? if ($available_room_categories): ?>
<label>
<?= _('Raumkategorie') ?>
<span class="flex-row">
<select name="category_id" >
<option value="0"><?= _('bitte auswählen') ?></option>
<? foreach ($available_room_categories as $rc): ?>
<option value="<?= htmlReady($rc->id) ?>"
<?= $room_category_id === $rc->id
? 'selected'
: '' ?>>
<?= htmlReady($rc->name) ?>
</option>
<? endforeach ?>
</select>
<?= Icon::create('accept')->asInput(
[
'title' => _('Raumtyp auswählen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'search_by_category',
'value' => _('Raumtyp auswählen'),
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? if ($category) : ?>
<?= Icon::create('decline')->asInput(
[
'title' => _('alle Angaben zurücksetzen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'reset_category',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? endif ?>
</span>
</label>
<? endif ?>
<!-- ROOM CATEGORY PROPERTIES -->
<? if ($available_properties) : ?>
<? foreach ($available_properties as $property) : ?>
<?= $property->toHtmlInput(
$selected_properties[$property->name],
'selected_properties[' . htmlReady($property->name) . ']',
true,
false
) ?>
<? endforeach ?>
<div>
<?= \Studip\Button::create(_('Räume suchen'), 'search_rooms') ?>
</div>
<? endif ?>
</fieldset>
</div>
<div>
<fieldset class="request-fieldset">
<legend><?= _('Raumsuche') ?></legend>
<label>
<?= _('Raumname') ?>
<span class="flex-row">
<input type="text" name="room_name" value="<?= htmlReady($room_name) ?>" >
<?= Icon::create('search')->asInput(
[
'title' => _('Räume suchen'),
'name' => 'search_by_name',
'class' => 'text-bottom',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
</span>
</label>
<? if ($available_rooms) : ?>
<label><strong><?= _('Passende Räume') ?></strong>
<section class="selectbox" id="room_select">
<? foreach ($available_rooms as $room): ?>
<div class="flex-row">
<label class="horizontal">
<?= $available_room_icons[$room->id] ?>
<input type="radio" name="selected_room_id"
data-activates="button[type='submit'][name='select_room']"
value="<?= htmlReady($room->id) ?>"
<? if ($_SESSION[$request_id]['room_id'] === $room->id) echo 'checked' ?>>
<?= htmlReady(mila($room->name, 50)) . ' (' . $room['category']->name . ')'?>
<? if ($room->properties): ?>
<? $property_names = $room->getInfolabelProperties()
->pluck('fullname') ?>
<?= tooltipIcon(implode("\n", $property_names)) ?>
<? endif ?>
</label>
</div>
<? endforeach ?>
</section>
</label>
<?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?>
<? else : ?>
<? endif ?>
</fieldset>
</div>
</section>
<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'category']) ?>
<form method="post" name="room_request" class="default"
action="<?= $controller->link_for('course/room_requests/request_find_matching_rooms/' . $request_id . '/' . $this->step) ?>"
<?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>>
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= CSRFProtection::tokenTag() ?>
<?= $this->render_partial('course/room_requests/_new_request_header') ?>
<section class="resources-grid">
<div>
<fieldset class="request-fieldset">
<legend><?= _('Wünschbare Eigenschaften') ?></legend>
<? if ($step === 1 || $step === 2) : ?>
<?= $this->render_partial('course/room_requests/_room_with_properties') ?>
<? endif ?>
<? if ($available_room_categories): ?>
<label>
<?= _('Raumkategorie') ?>
<span class="flex-row">
<select name="category_id" >
<option value="0"><?= _('bitte auswählen') ?></option>
<? foreach ($available_room_categories as $rc): ?>
<option value="<?= htmlReady($rc->id) ?>"
<?= $_SESSION[$request_id]['room_category_id'] === $rc->id
? 'selected'
: '' ?>>
<?= htmlReady($rc->name) ?>
</option>
<? endforeach ?>
</select>
<?= Icon::create('accept')->asInput(
[
'title' => _('Raumtyp auswählen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'select_properties',
'value' => _('Raumtyp auswählen'),
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? if ($category) : ?>
<?= Icon::create('decline')->asInput(
[
'title' => _('alle Angaben zurücksetzen'),
'type' => 'image',
'class' => 'text-bottom',
'name' => 'reset_category',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
<? endif ?>
</span>
</label>
<? endif ?>
<? if ($step === 2) : ?>
<!-- After choosing a category or room -->
<? if ($available_properties) : ?>
<? foreach ($available_properties as $property) : ?>
<?= $property->toHtmlInput(
$selected_properties[$property->name],
'selected_properties[' . htmlReady($property->name) . ']',
true,
false,
false
) ?>
<? endforeach ?>
<? endif ?>
<?= \Studip\Button::create(_('Räume suchen'), 'search_rooms') ?>
<? endif ?>
<? if (!$embedded) : ?>
</fieldset>
</div>
<div>
<fieldset class="request-fieldset">
<legend><?= _('Raumsuche') ?></legend>
<label>
<?= _('Raumname') ?>
<span class="flex-row">
<input type="text" name="room_name" value="<?= htmlReady($_SESSION[$request_id]['room_name']) ?>">
<?= Icon::create('search')->asInput(
[
'title' => _('Räume suchen'),
'name' => 'search_by_name',
'class' => 'text-bottom',
'style' => 'margin-left: 0.2em; margin-top: 0.6em;'
]
) ?>
</span>
</label>
<? if ($available_rooms) : ?>
<label>
<strong><?= _('Passende Räume') ?></strong>
<section class="selectbox" id="room_selection">
<? foreach ($available_rooms as $room): ?>
<div class="flex-row">
<label class="horizontal">
<?= $available_room_icons[$room->id] ?>
<input type="radio" name="selected_room_id"
data-activates="button[type='submit'][name='select_room']"
value="<?= htmlReady($room->id) ?>"
<? if ($_SESSION[$request_id]['room_id'] === $room->id) echo 'checked' ?>>
<?= htmlReady(mila($room->name, 60)) . ' (' . $room['category']->name . ')'?>
<? if ($room->properties): ?>
<? $property_names = $room->getInfolabelProperties()
->pluck('fullname') ?>
<?= tooltipIcon(implode("\n", $property_names)) ?>
<? endif ?>
</label>
</div>
<? endforeach ?>
</section>
</label>
<?= \Studip\Button::create(_('Raum auswählen'), 'select_room') ?>
<? else : ?>
<?= MessageBox::info(_('Es wurden keine passenden Räume gefunden!')) ?>
<? endif ?>
</fieldset>
</div>
</section>
<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'roomname']) ?>
<? endif ?>
<? if (empty($embedded)) : ?>
<?= $this->render_partial(
'course/room_requests/_request_form_header',
[
'action' => $this->controller->link_for('course/room_requests/request_select_properties/' . $request_id),
'request_id' => $request_id
]
) ?>
<?= $this->render_partial(
'course/room_requests/_request_edit_header',
['request' => $request]
) ?>
<?= $this->render_partial(
'course/room_requests/request_start',
['embedded' => true]
) ?>
<? endif ?>
<? if ($available_properties) : ?>
<? foreach ($available_properties as $property) : ?>
<?= $property->toHtmlInput(
$selected_properties[$property->name] ?? '',
'selected_properties[' . htmlReady($property->name) . ']',
true,
false
) ?>
<? endforeach ?>
<? endif ?>
<label>
<?= _('Rüstzeit (in Minuten)') ?>
<input type="number" name="preparation_time"
value="<?= htmlReady($preparation_time) ?>"
min="0" max="<?= htmlReady($max_preparation_time) ?>">
</label>
<label>
<input type="checkbox" name="reply_lecturers" value="1"
<?= $reply_lecturers
? 'checked="checked"'
: ''
?>>
<?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?>
</label>
<label>
<?= _('Nachricht an die Raumvergabe') ?>
<textarea name="comment" cols="58" rows="4"
placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea>
</label>
<? if (empty($embedded)) : ?>
</div>
</section>
<?= $this->render_partial(
'course/room_requests/_request_form_footer',
[
'room_search_button' => true,
'save_buttons' => true,
'room_select_button' => false,
'select_properties_button' => false
]
) ?>
<? endif ?>
<? if (empty($embedded)) : ?>
<?= $this->render_partial(
'course/room_requests/_request_form_header',
[
'action' => $this->controller->link_for('course/room_requests/request_select_room/' . $request_id),
'request_id' => $request_id
]
) ?>
<?= $this->render_partial(
'course/room_requests/_request_edit_header',
['request' => $request]
) ?>
<?= $this->render_partial(
'course/room_requests/request_start',
['embedded' => true]
) ?>
<? if (($category instanceof ResourceCategory) && !$direct_room_requests_only): ?>
<?= $this->render_partial(
'course/room_requests/request_select_properties',
['embedded' => true]
) ?>
<? endif ?>
<? endif ?>
</div>
<div>
<? if ($available_rooms) : ?>
<section class="contentbox">
<header><h1><?= _('Passende Räume') ?></h1></header>
<section class="selectbox">
<fieldset>
<? foreach ($available_rooms as $room): ?>
<div class="flex-row">
<label class="horizontal">
<?= $available_room_icons[$room->id] ?>
<input type="radio" name="selected_room_id"
data-activates="button[type='submit'][name='select_room']"
value="<?= htmlReady($room->id) ?>">
<?= htmlReady(mb_substr($room->name, 0, 50)); ?>
<? if ($room->properties): ?>
<? $property_names = $room->getInfolabelProperties()
->pluck('fullname') ?>
<?= tooltipIcon(implode("\n", $property_names)) ?>
<? endif ?>
</label>
</div>
<? endforeach ?>
</fieldset>
</section>
</section>
<? else : ?>
<?= MessageBox::info(_('Es wurden keine passenden Räume gefunden!')) ?>
<? endif ?>
</div>
</section>
<? if (empty($embedded)) : ?>
<?= $this->render_partial(
'course/room_requests/_request_form_footer',
[
'room_search_button' => true,
'room_select_button' => true,
'save_buttons' => true,
'select_properties_button' => false
]
) ?>
<? endif ?>
<form method="post" name="room_request" class="default"
action="<?= $controller->link_for('course/room_requests/store_request/' . $request_id) ?>"
<?= Request::isXhr() ? 'data-dialog="size=big"' : ''?>>
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= CSRFProtection::tokenTag() ?>
<?= $this->render_partial('course/room_requests/_new_request_header') ?>
<section class="resources-grid">
<div>
<fieldset>
<legend>
<?= _('Zusammenfassung') ?>
</legend>
<label>
<?= _('Ausgewählte Raumkategorie') ?>
<input type="hidden" name="selected_room_id"
value="<?= htmlReady($selected_room->id) ?>">
<br>
<strong><?= htmlReady($selected_room_category->name) ?></strong>
</label>
<label>
<?= _('Ausgewählter Raum') ?>
<? if ($selected_room): ?>
<input type="hidden" name="selected_room_id"
value="<?= htmlReady($selected_room->id) ?>">
<br>
<strong><?= htmlReady($selected_room->name) ?></strong>
<? else : ?>
<br>
<strong><?= _('Es wurde kein spezifischer Raum gewählt.') ?></strong>
<? endif ?>
</label>
<? foreach ($available_properties as $property) : ?>
<? foreach ($selected_properties as $key => $value) : ?>
<? if ($property->name === $key) : ?>
<?= $property->toHtmlInput(
$selected_properties[$property->name],
'selected_properties[' . htmlReady($property->name) . ']',
true,
false,
true
) ?>
<? endif ?>
<? endforeach ?>
<? endforeach ?>
</fieldset>
</div>
<div>
<fieldset>
<legend>
<?= _('Sonstiges') ?>
</legend>
<label>
<?= _('Rüstzeit (in Minuten)') ?>
<input type="number" name="preparation_time"
value="<?= htmlReady($preparation_time) ?>"
min="0" max="<?= htmlReady($max_preparation_time) ?>">
</label>
<? if ($user_is_global_resource_admin) : ?>
<label>
<input type="checkbox" name="reply_lecturers" value="1"
<?= $reply_lecturers
? 'checked'
: ''
?>>
<?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?>
</label>
<? endif ?>
<label>
<?= _('Nachricht an die Raumvergabe') ?>
<textarea name="comment" cols="58" rows="4"
placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea>
</label>
</fieldset>
</div>
</section>
<?= $this->render_partial('course/room_requests/_new_request_form_footer', ['step' => $step, 'search_by' => 'roomname']) ?>
<form method="post" name="room_request" class="default"
action="<?= $this->controller->link_for('course/room_requests/request_summary/' . $request_id) ?>">
<input type="hidden" name="request_id" value="<?= htmlReady($request_id) ?>">
<?= $this->render_partial(
'course/room_requests/_request_edit_header',
['request' => $request]
) ?>
<?= CSRFProtection::tokenTag() ?>
<section class="resources-grid">
<div>
<fieldset>
<legend><?= _('Ausgewählter Raum') ?></legend>
<? if (!empty($selected_room)): ?>
<input type="hidden" name="selected_room_id"
value="<?= htmlReady($selected_room->id) ?>">
<input type="hidden" name="confirmed_selected_room_id"
value="<?= htmlReady($selected_room->id) ?>">
<?= htmlReady($selected_room->name) ?>
<? if ($selected_room->properties): ?>
<? $property_names = $selected_room->properties
->findBy('info_label', 1)
->findBy('state', '', '!=')
->pluck('fullname') ?>
<?= tooltipIcon(
implode("\n", $property_names)
) ?>
<? endif ?>
<?= Studip\Button::create(
_('Anderen Raum wählen'),
'select_other_room'
) ?>
<? else: ?>
<?= MessageBox::info(
_('Es wurde kein konkreter Raum ausgewählt!')
) ?>
<?= Studip\Button::create(
_('Eigenschaften neu wählen'),
'select_properties'
) ?>
<? endif ?>
<? if ($request->properties): ?>
<? foreach ($request->properties as $property): ?>
<? if (!in_array($property->name, ['seats'])): ?>
<dt><?= htmlReady($property->display_name) ?></dt>
<dd><?= htmlReady($property->__toString()) ?></dd>
<? endif ?>
<? endforeach ?>
<? endif ?>
<? if ($request->category): ?>
<dt><?= _('Gewünschter Raumtyp') ?>:</dt>
<dd><?= htmlReady($request->category->name) ?></dd>
<? endif ?>
<label>
<?= _('Erwartete Anzahl an Teilnehmenden') ?>:
<input type="number" name="seats"
value="<?= htmlReady($seats) ?>"
min="1">
</label>
<label>
<?= _('Rüstzeit (in Minuten)') ?>
<input type="number" name="preparation_time"
value="<?= htmlReady($preparation_time) ?>"
min="0" max="<?= htmlReady($max_preparation_time) ?>">
</label>
<label>
<input type="checkbox" name="reply_lecturers" value="1"
<?= $reply_lecturers
? 'checked="checked"'
: ''
?>>
<?= _('Benachrichtigung bei Ablehnung der Raumanfrage auch an alle Lehrenden der Veranstaltung senden') ?>
</label>
</fieldset>
</div>
<div>
<fieldset>
<legend><?= _('Nachricht an die Raumvergabe') ?></legend>
<textarea name="comment" cols="58" rows="4"
placeholder="<?= _('Weitere Wünsche oder Bemerkungen zur angefragten Raumbelegung') ?>"><?= htmlReady($comment) ?></textarea>
</fieldset>
</div>
</section>
<footer data-dialog-button>
<?= \Studip\Button::create(
_('Speichern'),
'save'
) ?>
<?= \Studip\Button::create(
_('Speichern und zurück zur Übersicht'),
'save_and_close'
) ?>
<?= \Studip\LinkButton::createCancel(
_('Abbrechen'),
$controller->link_for('course/room_requests/index/' . $course_id),
[
'title' => _('Abbrechen')
]
) ?>
</footer>
</form>
......@@ -17,3 +17,4 @@ if (isset($termin) && $termin instanceof CourseExDate) {
<input type="checkbox" id="cancel_send_message" name="cancel_send_message" value="1">
<?= _('Benachrichtigung über ausfallende Termine an alle Teilnehmenden verschicken') ?>
</label>
......@@ -89,18 +89,19 @@
<? if (Config::get()->RESOURCES_ALLOW_ROOM_REQUESTS) : ?>
<? $actionMenu->addLink(
$controller->url_for(
'course/room_requests/request_start/',
'course/room_requests/new_request/',
[
'range' => 'cycle',
'range_id' => $metadate_id
'cid' => $course->id,
'range_str' => 'cycle',
'range_id' => $metadate_id
]
),
_('Raumanfrage erstellen'),
_('Neue Raumanfrage'),
Icon::create(
'room-request',
Icon::ROLE_CLICKABLE,
[
'title' => _('Raumanfrage erstellen'),
'title' => _('Neue Raumanfrage'),
'style' => 'vertical-align: middle;'
]
),
......
<?php
$global_requests = $course->room_requests->filter(function (RoomRequest $request) {
return $request->closed < 2 && !$request->termin_id;
});
?>
<section class="contentbox">
<section class="contentbox" id="request">
<header>
<h1>
<?= _('Raumanfrage für die gesamte Veranstaltung') ?>
<?= _('Raumanfragen für die gesamte Veranstaltung') ?>
</h1>
<nav>
......@@ -14,7 +9,7 @@ $global_requests = $course->room_requests->filter(function (RoomRequest $request
_('Hier können Sie für die gesamte Veranstaltung, also für alle regelmäßigen und unregelmäßigen Termine, '
. 'eine Raumanfrage erstellen.')
) ?>
<a class="link-add" href="<?= $controller->url_for('course/room_requests/request_start',
<a class="link-add" href="<?= $controller->link_for('course/room_requests/new_request',
[
'cid' => $course->id,
'range_str' => 'course',
......@@ -29,13 +24,102 @@ $global_requests = $course->room_requests->filter(function (RoomRequest $request
</nav>
</header>
<?= $flash['message'] ?>
<? if (count($room_requests)) : ?>
<section>
<? if (count($global_requests) > 0): ?>
<p><?= _('Für diese Veranstaltung liegt eine offene Raumanfrage vor') ?></p>
<?= Studip\LinkButton::create(_('Raumanfragen anzeigen'),
URLHelper::getURL('dispatch.php/course/room_requests/index/' . $course->getId())) ?>
<? else: ?>
<p><?= _('Keine Raumanfrage vorhanden') ?></p>
<? endif ?>
<table class="default sortable-table">
<colgroup>
<col style="width: 40%">
<col style="width: 20%">
<col>
<col style="width: 50px">
</colgroup>
<thead>
<tr class="sortable">
<th data-sort="text"><?= _('Art der Anfrage') ?></th>
<th data-sort="text"><?= _('Anfragender') ?></th>
<th data-sort="text"><?= _('Bearbeitungsstatus') ?></th>
<th></th>
</tr>
</thead>
<tbody>
<? foreach ($room_requests as $rr): ?>
<tr>
<td>
<?= htmlReady($rr->getTypeString(), 1, 1) ?>
</td>
<td>
<?= htmlReady($rr->user ? $rr->user->getFullName() : '') ?>
</td>
<td>
<?= htmlReady($rr->getStatusText()) ?>
</td>
<td class="actions">
<a class="load-in-new-row"
href="<?= $controller->link_for('course/room_requests/info/' . $rr->id) ?>"
aria-expanded="false">
<?= Icon::create('info')->asImg(['title' => _('Weitere Informationen einblenden')]) ?>
</a>
<? $params = [] ?>
<? $dialog = []; ?>
<? if (Request::isXhr()) : ?>
<? $params['asDialog'] = true; ?>
<? $dialog['data-dialog'] = 'size=big' ?>
<? endif ?>
<? $actionMenu = ActionMenu::get()->setContext($rr->getTypeString()) ?>
<? $actionMenu->addLink(
$controller->url_for('course/room_requests/request_show_summary/' . $rr->id, ['clear_cache' => 1]),
_('Diese Anfrage bearbeiten'),
Icon::create('edit'),
['title' => _('Diese Anfrage bearbeiten'), 'data-dialog' => 'size=big']
) ?>
<?php
if ($rr->room && !$user_has_permissions) {
$user_has_permissions = $rr->room->userHasPermission($current_user, 'admin');
}
?>
<? if ($user_has_permissions && !$rr->closed): ?>
<? $actionMenu->addLink(
URLHelper::getURL(
'dispatch.php/resources/room_request/resolve/' . $rr->id,
[
'reload-on-close' => 1,
'single-request' => 1
]
),
_('Diese Anfrage selbst auflösen'),
Icon::create('admin'),
['title' => _('Diese Anfrage selbst auflösen')],
['data-dialog' => '1']
) ?>
<? endif ?>
<? $actionMenu->addLink(
$controller->url_for('course/room_requests/delete/' . $rr->id),
_('Diese Anfrage löschen'),
Icon::create('trash'),
['title' => _('Diese Anfrage löschen')]
) ?>
<?= $actionMenu->render() ?>
</td>
</tr>
<? endforeach ?>
<? if ($request_id === $rr->id) : ?>
<tr>
<td colspan="4">
<?= $this->render_partial('course/room_requests/_request.php', ['request' => $rr]); ?>
</td>
</tr>
<? endif ?>
</tbody>
</table>
</section>
<? else : ?>
<?= MessageBox::info(_('Zu dieser Veranstaltung sind noch keine Raumanfragen vorhanden.')) ?>
<? endif ?>
</section>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment