Skip to content
Snippets Groups Projects
Commit f80d6243 authored by Rasmus Fuhse's avatar Rasmus Fuhse
Browse files

Resolve "Hauptordner der Veranstaltung optional für Studierende sperren"

Closes #1908

Merge request studip/studip!1250
parent 5279f924
No related branches found
No related tags found
No related merge requests found
......@@ -50,7 +50,7 @@ class Course_FilesController extends AuthenticatedController
$actions = new ActionsWidget();
if ($this->topFolder->isEditable($GLOBALS['user']->id) && $this->topFolder->parent_id) {
if ($this->topFolder->isEditable($GLOBALS['user']->id)) {
$actions->addLink(
_("Ordner bearbeiten"),
$this->url_for("file/edit_folder/".$this->topFolder->getId()),
......
......@@ -1933,7 +1933,10 @@ class FileController extends AuthenticatedController
throw new AccessDeniedException();
}
$parent_folder = $folder->getParent();
$folder_types = FileManager::getAvailableFolderTypes($parent_folder->range_id, $GLOBALS['user']->id);
$folder_types = FileManager::getAvailableFolderTypes(
$parent_folder ? $parent_folder->range_id : null,
$GLOBALS['user']->id
);
$this->name = Request::get('name', $folder->name);
$this->description = Request::get('description', $folder->description);
......@@ -1942,7 +1945,7 @@ class FileController extends AuthenticatedController
$this->folder_types = [];
if (!is_a($folder, 'VirtualFolderType')) {
if (!is_a($folder, 'VirtualFolderType') && $parent_folder) {
foreach ($folder_types as $folder_type) {
$folder_type_instance = new $folder_type(
[
......@@ -1952,15 +1955,21 @@ class FileController extends AuthenticatedController
]
);
$this->folder_types[] = [
'class' => $folder_type,
'class' => $folder_type,
'instance' => $folder_type_instance,
'name' => $folder_type::getTypeName(),
'icon' => $folder_type_instance->getIcon('clickable')
'name' => $folder_type::getTypeName(),
'icon' => $folder_type_instance->getIcon('clickable')
];
}
} elseif (!$parent_folder) {
$this->folder_types[] = [
'class' => get_class($folder),
'instance' => $folder,
'name' => $folder::getTypeName(),
'icon' => $folder->getIcon('clickable')
];
}
if (Request::submitted('edit')) {
CSRFProtection::verifyUnsafeRequest();
if (!is_a($folder, 'VirtualFolderType')) {
......@@ -1973,7 +1982,9 @@ class FileController extends AuthenticatedController
}
}
$request = Request::getInstance();
$request->offsetSet('parent_id', $folder->getParent()->getId());
if ($folder->getParent()) {
$request->offsetSet('parent_id', $folder->getParent()->getId());
}
$result = $folder->setDataFromEditTemplate($request);
if ($result instanceof FolderType) {
if ($folder->store()) {
......
<? if (!is_a($folder, 'RootFolder')) : ?>
<fieldset>
<legend>
<?= _('Ordnereigenschaften') ?>
......@@ -11,12 +12,15 @@
<textarea name="description" class="wysiwyg" placeholder="<?= _('Optionale Beschreibung') ?>"><?= htmlReady($description); ?></textarea>
</label>
</fieldset>
<? endif ?>
<? if (!is_a($folder, 'VirtualFolderType')): ?>
<? if (!is_a($folder, 'VirtualFolderType') && $folder_types && count($folder_types) > 0): ?>
<fieldset class="select_terms_of_use">
<? if (count($folder_types) > 1) : ?>
<legend>
<?= _('Ordnertyp auswählen') ?>
</legend>
<? endif ?>
<? foreach ($folder_types as $folder_type) : ?>
<input type="radio" name="folder_type"
value="<?= htmlReady($folder_type['class']) ?>"
......
......@@ -48,7 +48,14 @@ class RootFolder extends StandardFolder
public function isWritable($user_id)
{
return ($this->range_type === 'user' && $this->range_id === $user_id)
|| Seminar_Perm::get()->have_studip_perm('autor', $this->range_id, $user_id);
|| $this->isEditable($user_id)
|| (
Seminar_Perm::get()->have_studip_perm('autor', $this->range_id, $user_id)
&& (
!$this->folderdata['data_content']
|| !$this->folderdata['data_content']['locked']
)
);
}
/**
......@@ -57,7 +64,7 @@ class RootFolder extends StandardFolder
*/
public function isEditable($user_id)
{
return false;
return Seminar_Perm::get()->have_studip_perm('tutor', $this->range_id, $user_id);
}
/**
......@@ -77,4 +84,26 @@ class RootFolder extends StandardFolder
$this->folderdata['parent_id'] = '';
return $this->folderdata->store();
}
}
\ No newline at end of file
/**
* @return Flexi_Template
*/
public function getEditTemplate()
{
$template = $GLOBALS['template_factory']->open('filesystem/root_folder/edit');
$template->folder = $this;
return $template;
}
/**
* @param array $request
* @return FolderType|MessageBox
*/
public function setDataFromEditTemplate($request)
{
$this->folderdata['data_content'] = [
'locked' => $request['locked'] ? 1 : 0
];
return parent::setDataFromEditTemplate($request);
}
}
<label>
<input type="checkbox"
name="locked"
<?= $folder->data_content && $folder->data_content['locked'] ? 'checked' : '' ?>
value="1">
<?= _('Upload für Studierende sperren') ?>
</label>
<?= _('Uploads sind weiterhin in entsprechenden Unterordnern möglich') ?>
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