Select Git revision
SemesterCourse.class.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
files.php 33.67 KiB
<?php
/**
* files.php - controller to display personal files of a user
*
* The FilesController controller provides actions for the personal file area.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* @author Moritz Strohm <strohm@data-quest.de>
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
* @category Stud.IP
* @since 4.0
*/
class FilesController extends AuthenticatedController
{
public function validate_args(&$args, $types = NULL)
{
reset($args);
}
/**
* Create a link to a folder's range.
* @param \FolderType $folder the folder
* @return string the link to the folder's range
*/
public static function getRangeLink($folder)
{
return FileManager::getFolderLink($folder);
}
public function before_filter(&$action, &$args)
{
parent::before_filter($action, $args);
PageLayout::setHelpKeyword('Basis.Dateien');
$this->user = User::findCurrent();
$this->last_visitdate = time();
//Actions in this controller are not accessible for nobody.
if ($GLOBALS['user']->id == 'nobody') {
throw new AccessDeniedException();
}
$constraints = FileManager::getUploadTypeConfig($this->user->id);
PageLayout::addHeadElement('script', ['type' => 'text/javascript'], sprintf(
'STUDIP.Files.setUploadConstraints(%s);',
json_encode($constraints)
));
}
/**
* Helper method for filling the sidebar with actions.
*/
private function buildSidebar(FolderType $folder, $view = true)
{
$sidebar = Sidebar::get();
$sources = new LinksWidget();
$sources->setTitle(_("Dateiquellen"));
$sources->addLink(
_("Stud.IP-Dateien"),
$this->url_for("files/index"),
Icon::create("files", "clickable")
);
foreach (PluginManager::getInstance()->getPlugins('FilesystemPlugin') as $plugin) {
if ($plugin->isPersonalFileArea()) {
$subnav = $plugin->getFileSelectNavigation();
$sources->addLink(
$subnav->getTitle(),
URLHelper::getURL("dispatch.php/files/system/".$plugin->getPluginId()),
$subnav->getImage()
);
}
}
$sidebar->addWidget($sources);
$actions = new ActionsWidget();
if ($folder->isEditable($GLOBALS['user']->id) && $folder->parent_id) {
$actions->addLink(
_('Ordner bearbeiten'),
$this->url_for('file/edit_folder/'.$folder->getId()),
Icon::create("edit", "clickable"),
['data-dialog' => 1]
);
}
if ($folder->isSubfolderAllowed($GLOBALS['user']->id)) {
$actions->addLink(
_('Neuer Ordner'),
URLHelper::getUrl('dispatch.php/file/new_folder/' . $folder->getId()),
Icon::create('folder-empty+add', 'clickable'), ['data-dialog' => 1]
);
}
$actions->addLink(
_('Bildergalerie öffnen'),
'#g',
Icon::create('file-pic', 'clickable'),
[
'onClick' => "STUDIP.Files.openGallery(); return false;"
]
);
if ($folder->isWritable($GLOBALS['user']->id)) {
$actions->addLink(
_('Dokument hinzufügen'),
'#',
Icon::create('file+add', 'clickable'),
['onClick' => "STUDIP.Files.openAddFilesWindow(); return false;"]
);
}
$config_urls = [];
foreach (PluginManager::getInstance()->getPlugins('FilesystemPlugin') as $plugin) {
$url = $plugin->filesystemConfigurationURL();
if ($url) {
$navigation = $plugin->getFileSelectNavigation();
$config_urls[] = [
'name' => $navigation->getTitle(),
'icon' => $navigation->getImage(),
'url' => $url,
];
}
}
if (count($config_urls)) {
if (count($config_urls) > 1) {
$actions->addLink(
_('Dateibereiche konfigurieren'),
$this->url_for('files/configure'),
Icon::create('admin', 'clickable')
)->asDialog();
} else {
$actions->addLink(
sprintf(_('%s konfigurieren'), $config_urls[0]['name']),
$config_urls[0]['url'],
$config_urls[0]['icon']
)->asDialog();
}
}
$sidebar->addWidget($actions);
if ($folder->isWritable($GLOBALS['user']->id)) {
$sidebar->addWidget(new TemplateWidget(
_('Dateien hinzufügen'),
$this->get_template_factory()->open('files/upload-drag-and-drop')
))->addLayoutCSSClass('hidden-medium-down');
}
if ($view) {
$views = new ViewsWidget();
$views->addLink(
_('Ordneransicht'),
$this->url_for('files/index'),
null,
[],
'index'
)->setActive(true);
$views->addLink(
_('Alle Dateien'),
$this->url_for('files/flat'),
null,
[],
'flat'
);
$sidebar->addWidget($views);
}
}
protected function addFiltersToOverviewSidebar(array $filters = [])
{
if (!$filters) {
return;
}
$sidebar = Sidebar::get();
if (in_array('time_range', $filters)) {
$template = $GLOBALS['template_factory']->open('sidebar/time-range-filter');
$attributes = [];
if (($this->begin instanceof DateTime) && ($this->end instanceof DateTime)) {
$attributes['begin'] = $this->begin->format('d.m.Y');
$attributes['end'] = $this->end->format('d.m.Y');
}
}
if (in_array('course', $filters)) {
//Find all courses of the user and add those courses to the course
//list that have files in it.
$user_courses = Course::findByUser($GLOBALS['user']->id);
$this->course_ids = [];
$courses_with_files = [];
$user_courses = $user_courses ?: [];
foreach ($user_courses as $course) {
//Check if the course has files whose modification dates
//lie in the specified time range:
$db = DBManager::get();
$sql = 'SELECT DISTINCT 1 FROM file_refs INNER JOIN `folders`
ON `file_refs`.`folder_id` = `folders`.`id`
WHERE `folders`.`range_id` = :course_id';
$sql_params = ['course_id' => $course->id];
if (($this->begin instanceof DateTime) && ($this->end instanceof DateTime)) {
$sql .= ' AND `file_refs`.`chdate` BETWEEN :begin AND :end';
$sql_params['begin'] = $this->begin->getTimestamp();
$sql_params['end'] = $this->end->getTimestamp();
}
$stmt = $db->prepare($sql);
$stmt->execute($sql_params);
$files_exist = $stmt->fetchColumn();
if ($files_exist) {
$courses_with_files[] = $course;
}
}
if ($courses_with_files) {
foreach ($courses_with_files as $course) {
$key = $course->id;
$course_options[$key] = $course->getFullName();
}
$attributes['course_options'] = $course_options;
}
$attributes['selected_course_id'] = $this->course_id;
}
$time_range_filter = new TemplateWidget(_('Filter'), $template, $attributes);
$sidebar->addWidget($time_range_filter);
}
private function countChildren(FolderType $folder)
{
$file_count = count($folder->getFiles());
$folder_count = count($folder->getSubfolders());
foreach ($folder->getSubfolders() as $subfolder) {
$subs = $this->countChildren($subfolder);
$file_count += $subs[0];
$folder_count += $subs[1];
}
return [$file_count, $folder_count];
}
protected function addViewsToOverview(string $current_view)
{
$sidebar = Sidebar::get();
$views = new ViewsWidget();
$views->addLink(
_('Übersicht'),
$this->url_for('files/overview'),
null,
[],
'overview'
)->setActive($current_view == 'overview');
$views->addLink(
_('Alle Dateien'),
$this->url_for('files/overview', ['view' => 'all_files']),
null,
[],
'all_files'
)->setActive($current_view == 'all_files');
$views->addLink(
_('Meine hochgeladenen Dateien'),
$this->url_for('files/overview', ['view' => 'my_uploaded_files']),
null,
[],
'my_uploaded_files'
)->setActive($current_view == 'my_uploaded_files');
$views->addLink(
_('Meine öffentlichen Dateien'),
$this->url_for('files/overview', ['view' => 'my_public_files']),
null,
[],
'my_public_files'
)->setActive($current_view == 'my_public_files');
$views->addLink(
_('Meine Dateien mit ungeklärter Lizenz'),
$this->url_for('files/overview', ['view' => 'my_uploaded_files_unknown_license']),
null,
[],
'my_uploaded_files_unknown_license'
)->setActive($current_view == 'my_uploaded_files_unknown_license');
$sidebar->addWidget($views);
}
/**
* Displays an overview page with widgets showing a current selection
* of files. This is practically a new version of the former file dashboard.
*/
public function overview_action()
{
if (Navigation::hasItem('/contents/files/overview')) {
Navigation::activateItem('/contents/files/overview');
}
PageLayout::setTitle(_('Übersicht'));
$this->begin = null;
$this->end = null;
$this->course_id = null;
$user_id = $GLOBALS['user']->id;
$this->show_download_column = Config::get()->DISPLAY_DOWNLOAD_COUNTER === 'always';
$this->current_view = Request::get('view', 'overview');
//Use the top folder of the user's file area for the link
//to the file/bulk action. That action neets a folder-ID
//to work properly.
$folder = Folder::findTopFolder($this->user->id);
$this->topFolder = null;
if ($folder) {
$this->topFolder = $folder->getTypedFolder();
$this->vue_topfolder = FilesystemVueDataManager::getFolderVueData(
$this->topFolder,
$this->topFolder
);
}
$this->form_action = $this->link_for('file/bulk/' . $folder->id);
$course_did_change = false;
if ($this->current_view != 'overview') {
$tzdt = new DateTime();
if (Request::submitted('filter')) {
CSRFProtection::verifyUnsafeRequest();
if (Request::get('begin') && Request::get('end')) {
$this->begin = Request::getDateTime('begin', 'd.m.Y');
$this->end = Request::getDateTime('end', 'd.m.Y');
if ($this->begin > $this->end) {
$this->begin = clone $this->end;
}
if ($this->begin instanceof DateTime) {
$this->begin->setTime(0,0,0);
}
if ($this->end instanceof DateTime) {
$this->end->setTime(23,59,59);
}
if (!is_array($_SESSION['files_overview'])) {
$_SESSION['files_overview'] = [];
}
$_SESSION['files_overview']['begin'] = $this->begin;
$_SESSION['files_overview']['end'] = $this->end;
}
if (Request::submitted('course_id')) {
$course_did_change = true;
$this->course_id = Request::get('course_id');
if (!is_array($_SESSION['files_overview'])) {
$_SESSION['files_overview'] = [];
}
$_SESSION['files_overview']['course_id'] = $this->course_id;
}
} else {
$this->begin = $_SESSION['files_overview']['begin'];
$this->end = $_SESSION['files_overview']['end'];
$this->course_id = $_SESSION['files_overview']['course_id'];
}
}
if ($this->course_id) {
if (!$GLOBALS['perm']->have_studip_perm('user', $this->course_id)) {
throw new AccessDeniedException();
}
}
$this->addViewsToOverview($this->current_view);
if ($this->current_view == 'overview') {
$this->all_files_c = FileRef::countAll($GLOBALS['user']->id, $this->begin, $this->end);
$all_file_refs = FileRef::findAll($GLOBALS['user']->id, $this->begin, $this->end, '', 100, 0);
$this->all_files = [];
$count_visible = 0;
foreach ($all_file_refs as $file_ref) {
if ($file_ref->getFileType()->isVisible($GLOBALS['user']->id)) {
$vue_data = FilesystemVueDataManager::getFileVueData(
$file_ref->getFileType(),
$this->topFolder
);
}
if (isset($vue_data['download_url'])) {
$this->all_files[] = $vue_data;
if (++$count_visible === 5) break;
}
}
$this->public_files_c = FileRef::countPublicFiles($GLOBALS['user']->id, $this->begin, $this->end);
$public_file_refs = FileRef::findPublicFiles($GLOBALS['user']->id, $this->begin, $this->end, 5, 0);
$this->public_files = [];
foreach ($public_file_refs as $file_ref) {
$this->public_files[] = FilesystemVueDataManager::getFileVueData(
$file_ref->getFileType(),
$this->topFolder
);
}
$this->uploaded_files_c = FileRef::countUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, '', false);
$uploaded_file_refs = FileRef::findUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, '', false, 5, 0);
$this->uploaded_files = [];
foreach ($uploaded_file_refs as $file_ref) {
$this->uploaded_files[] = FilesystemVueDataManager::getFileVueData(
$file_ref->getFileType(),
$this->topFolder
);
}
$this->uploaded_unlic_files_c = FileRef::countUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, '', true);
$uploaded_unlic_file_refs = FileRef::findUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, '', true, 5, 0);
$this->uploaded_unlic_files = [];
foreach ($uploaded_unlic_file_refs as $file_ref) {
if ($file_ref->getFileType()->isVisible($GLOBALS['user']->id)) {
$this->uploaded_unlic_files[] = FilesystemVueDataManager::getFileVueData(
$file_ref->getFileType(),
$this->topFolder
);
}
}
if (!$this->all_files_c) {
$this->no_files = true;
}
} elseif ($this->current_view == 'all_files') {
$this->table_title = _('Alle Dateien');
$this->page_size = 25;
$this->page = 1;
if (!$course_did_change) {
$this->page = Request::get('page') + 1;
}
if (($this->page < 1) || !$this->page) {
$this->page = 1;
}
$offset = $this->page_size * ($this->page - 1);
$this->addFiltersToOverviewSidebar(['time_range', 'course']);
$this->file_ref_c = FileRef::countAll($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id);
$pagination = Pagination::create(
$this->file_ref_c,
$this->page - 1,
$this->page_size
);
$this->pagination_html = $pagination->asLinks(
function ($page_id) {
return URLHelper::getLink(
'dispatch.php/files/overview',
[
'view' => 'all_files',
'page' => $page_id
]
);
}
);
//To optimise performance, the folders of the files are collected
//in an array with all relevant files of the folder attached to it.
//This way, we don't need to each file's folder separately and can
//instead load it once.
//Each item in the folders array has the following structure:
//[
// 'folder' => The folder object.
// 'file_refs' => The file refs attached to it.
//]
$folders = [];
$new_file_refs = FileRef::findAll($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id, $this->page_size, $offset);
//Group the file refs by their folder:
foreach ($new_file_refs as $file_ref) {
if (!is_array($folders[$file_ref->folder_id])) {
$folders[$file_ref->folder_id] = [
'folder' => $file_ref->folder->getTypedFolder(),
'file_refs' => []
];
}
$folders[$file_ref->folder_id]['file_refs'][] = $file_ref;
}
$this->files = [];
foreach ($folders as $folder_data) {
$folder = $folder_data['folder'];
if (!$folder instanceof FolderType) {
//We cannot work with unknown folder types.
continue;
}
foreach ($folder_data['file_refs'] as $file_ref) {
//Check if the current user may download the file.
//If so, it is included in the new_files array.
if ($folder->isFileDownloadable($file_ref->id, $user_id)) {
$this->files[] = $file_ref->getFileType();
}
}
}
} elseif ($this->current_view == 'my_public_files') {
$this->table_title = _('Meine öffentlichen Dateien');
$this->addFiltersToOverviewSidebar(['time_range']);
$file_refs = FileRef::findPublicFiles($GLOBALS['user']->id, $this->begin, $this->end);
$this->files = [];
foreach ($file_refs as $file_ref) {
$this->files[] = $file_ref->getFileType();
}
} elseif ($this->current_view == 'my_uploaded_files') {
$this->page_size = 25;
$this->page = 1;
if (!$course_did_change) {
$this->page = Request::get('page') + 1;
}
if (($this->page < 1) || !$this->page) {
$this->page = 1;
}
$offset = $this->page_size * ($this->page - 1);
$this->addFiltersToOverviewSidebar(['time_range', 'course']);
$this->table_title = _('Meine hochgeladenen Dateien');
$file_refs = FileRef::findUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id, $this->page_size, $offset);
$this->files_c = FileRef::countUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id);
$pagination = Pagination::create(
$this->files_c,
$this->page - 1,
$this->page_size
);
$this->pagination_html = $pagination->asLinks(
function ($page_id) {
return URLHelper::getLink(
'dispatch.php/files/overview',
[
'view' => 'my_uploaded_files',
'page' => $page_id
]
);
}
);
$this->files = [];
foreach ($file_refs as $file_ref) {
$this->files[] = $file_ref->getFileType();
}
} elseif ($this->current_view == 'my_uploaded_files_unknown_license') {
$this->addFiltersToOverviewSidebar(['time_range', 'course']);
$this->table_title = _('Meine Dateien mit ungeklärter Lizenz');
$file_refs = FileRef::findUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id, true);
$this->files_c = FileRef::countUploadedFiles($GLOBALS['user']->id, $this->begin, $this->end, $this->course_id, true);
$this->files = [];
foreach ($file_refs as $file_ref) {
$this->files[] = $file_ref->getFileType();
}
} else {
PageLayout::postError(_('Die gewählte Ansicht ist nicht verfügbar!'));
}
$this->show_file_search = true;
}
/**
* Displays the files from the personal file area in a tree view.
*/
public function index_action($topFolderId = '')
{
if (Request::get("from_plugin")) {
$this->redirect("files/index/".$topFolderId);
}
if (Navigation::hasItem('/contents/files/my_files')) {
Navigation::activateItem('/contents/files/my_files');
}
PageLayout::setTitle(_('Persönliche Dateien'));
$this->marked_element_ids = [];
if (!$topFolderId) {
$folder = Folder::findTopFolder($this->user->id);
} else {
$folder = Folder::find($topFolderId);
}
if (!$folder) {
PageLayout::postError(_('Der gewählte Ordner wurde nicht gefunden.'));
$this->relocate($this->indexURL());
return;
}
$this->topFolder = $folder->getTypedFolder();
if (!$this->topFolder->isVisible($GLOBALS['user']->id) || $this->topFolder->range_id !== $GLOBALS['user']->id) {
throw new AccessDeniedException();
}
$this->buildSidebar($this->topFolder);
//check for INBOX and OUTBOX folder:
$inbox_folder = FileManager::getInboxFolder($this->user);
$outbox_folder = FileManager::getOutboxFolder($this->user);
$this->show_file_search = true;
}
/**
* Displays the files from the personal file area in a flat view
**/
public function flat_action()
{
if (Navigation::hasItem('/contents/files/my_files')) {
Navigation::activateItem('/contents/files/my_files');
}
$sidebar = Sidebar::get();
$actions = new ActionsWidget();
$actions->addLink(
_('Bildergalerie öffnen'),
'#g',
Icon::create('file-pic', 'clickable'),
[
'onClick' => "STUDIP.Files.openGallery(); return false;",
'v-if' => "hasFilesOfType('image')"
]
);
$sidebar->addWidget($actions);
$this->marked_element_ids = [];
$folder = Folder::findTopFolder($this->user->id);
if (!$folder) {
throw new Exception(_('Fehler beim Laden des Hauptordners!'));
}
$this->topFolder = $folder->getTypedFolder();
$this->form_action = $this->link_for('file/bulk/' . $this->topFolder->getId());
$this->show_default_sidebar = true;
$this->enable_table_filter = true;
//find all files in all subdirectories:
list($this->files, $this->folders) = array_values(FileManager::getFolderFilesRecursive($this->topFolder, $GLOBALS['user']->id));
}
/**
* Action to configure the different FileSystem-plugins
*/
public function configure_action()
{
PageLayout::setTitle(_('Dateibereich zur Konfiguration auswählen'));
$this->configure_urls = [];
foreach (PluginManager::getInstance()->getPlugins('FilesystemPlugin') as $plugin) {
$url = $plugin->filesystemConfigurationURL();
if ($url) {
$navigation = $plugin->getFileSelectNavigation();
$this->configure_urls[] = [
'name' => $navigation->getTitle(),
'icon' => $navigation->getImage(),
'url' => $url,
];
}
}
}
public function system_action($plugin_id, $folder_id = null)
{
$this->plugin = PluginManager::getInstance()->getPluginById($plugin_id);
if (!$this->plugin->isPersonalFileArea()) {
throw new Exception(_('Dieser Bereich ist nicht verfügbar.'));
}
$navigation = $this->plugin->getFileSelectNavigation();
PageLayout::setTitle($navigation->getTitle());
URLHelper::addLinkParam('to_plugin', get_class($this->plugin));
URLHelper::addLinkParam('from_plugin', get_class($this->plugin));
$folder_id = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], "dispatch.php/files/system/".$this->plugin->getPluginId()) + strlen("dispatch.php/files/system/".$this->plugin->getPluginId()));
if (strpos($folder_id, "?") !== false) {
$folder_id = substr($folder_id, 0, strpos($folder_id, "?"));
}
$this->topFolder = $this->plugin->getFolder($folder_id);
$this->controllerpath = 'files/system/' . $plugin_id;
if (!$this->topFolder) {
PageLayout::postError(
_('Ordner nicht gefunden!')
);
} else {
$this->buildSidebar($this->topFolder, false);
}
$this->render_action('index');
}
public function copyhandler_action($destination_id)
{
$to_plugin = Request::get('to_plugin');
$from_plugin = Request::get('from_plugin');
$fileref_id = Request::getArray('fileref_id');
$copymode = Request::get('copymode');
$user = User::findCurrent();
if ($to_plugin) {
$destination_id = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], "dispatch.php/files/copyhandler/") + strlen("dispatch.php/files/copyhandler/"));
if (strpos($destination_id, "?") !== false) {
$destination_id = substr($destination_id, 0, strpos($destination_id, "?"));
}
$destination_plugin = PluginManager::getInstance()->getPlugin($to_plugin);
if (!$destination_plugin) {
throw new Trails_Exception(404, _('Plugin existiert nicht.'));
}
$destination_folder = $destination_plugin->getFolder($destination_id);
} else {
$destination_folder = Folder::find($destination_id)->getTypedFolder();
}
$errors = [];
$count_files = 0;
$count_folders = 0;
$filerefs = $fileref_id;
if (!empty($filerefs)) {
foreach ($filerefs as $fileref) {
if ($from_plugin) {
$source_plugin = PluginManager::getInstance()->getPlugin($from_plugin);
if (!$source_plugin) {
throw new Trails_Exception(404, _('Plugin existiert nicht.'));
}
if (Request::get("isfolder")) {
if ($source_folder = $source_plugin->getFolder($fileref)) {
if ($copymode === 'move') {
$result = FileManager::moveFolder($source_folder, $destination_folder, $user);
} else {
$result = FileManager::copyFolder($source_folder, $destination_folder, $user);
}
if (!is_array($result)) {
$count_folders += 1;
$children = $this->countChildren($result);
$count_files += $children[0];
$count_folders += $children[1];
}
}
} else {
if ($source = $source_plugin->getPreparedFile($fileref, true)) {
if ($copymode === 'move') {
$result = FileManager::moveFile($source, $destination_folder, $user);
} else {
$result = FileManager::copyFile($source, $destination_folder, $user);
}
if (!is_array($result)) {
$count_files += 1;
}
}
}
} else {
if ($source = FileRef::find($fileref)) {
if ($copymode === 'move') {
$result = FileManager::moveFile($source->getFileType(), $destination_folder, $user);
} else {
$result = FileManager::copyFile($source->getFiletype(), $destination_folder, $user);
}
if (!is_array($result)) {
$count_files += 1;
}
} elseif ($source = Folder::find($fileref)) {
$source_folder = $source->getTypedFolder();
if ($copymode === 'move') {
$result = FileManager::moveFolder($source_folder, $destination_folder, $user);
} else {
$result = FileManager::copyFolder($source_folder, $destination_folder, $user);
}
if (!is_array($result)) {
$count_folders += 1;
$children = $this->countChildren($result);
$count_files += $children[0];
$count_folders += $children[1];
}
}
}
if (is_array($result)) {
$errors = array_merge($errors, $result);
}
}
}
if (empty($errors) || $count_files > 0 || $count_folders > 0) {
if (count($filerefs) == 1) {
if ($source_folder) {
if ($copymode == 'copy') {
PageLayout::postSuccess(_('Der Ordner wurde kopiert!'));
} else {
PageLayout::postSuccess(_('Der Ordner wurde verschoben!'));
}
} else {
if ($copymode == 'copy') {
PageLayout::postSuccess(_('Die Datei wurde kopiert!'));
} else {
PageLayout::postSuccess(_('Die Datei wurde verschoben!'));
}
}
} else {
if ($count_files > 0 && $count_folders > 0) {
if ($copymode === 'copy') {
PageLayout::postSuccess(sprintf(_('Es wurden %u Ordner und %u Dateien kopiert.'), $count_folders, $count_files));
} else {
PageLayout::postSuccess(sprintf(_('Es wurden %u Ordner und %u Dateien verschoben.'), $count_folders, $count_files));
}
} elseif ($count_files > 0) {
if ($copymode === 'copy') {
PageLayout::postSuccess(sprintf(_('Es wurden %u Dateien kopiert.'), $count_files));
} else {
PageLayout::postSuccess(sprintf(_('Es wurden %u Dateien verschoben.'), $count_files));
}
} else {
if ($copymode === 'copy') {
PageLayout::postSuccess(sprintf(_('Es wurden %u Ordner kopiert.'), $count_folders));
} else {
PageLayout::postSuccess(sprintf(_('Es wurden %u Ordner verschoben.'), $count_folders));
}
}
}
} else {
PageLayout::postError(_('Es ist ein Fehler aufgetreten.'), array_map('htmlReady', $errors));
}
$dest_range = $destination_folder->range_id;
switch ($destination_folder->range_type) {
case 'course':
return $this->redirect(URLHelper::getURL('dispatch.php/course/files/index/' . $destination_folder->getId() . '?cid=' . $dest_range));
case 'institute':
return $this->redirect(URLHelper::getURL('dispatch.php/institute/files/index/' . $destination_folder->getId() . '?cid=' . $dest_range));
case 'user':
return $this->redirect(URLHelper::getURL('dispatch.php/files/index/' . $destination_folder->getId()));
default:
if ($destination_plugin) {
return $this->redirect(URLHelper::getURL('dispatch.php/files/system/' . $destination_plugin->getPluginId() .'/'. $destination_folder->getId()));
} else {
return $this->redirect(URLHelper::getURL('dispatch.php/course/files/index/' . $destination_folder->getId()));
}
}
}
}