Select Git revision
StudipSemTreeViewSimple.class.php
Forked from
Stud.IP / Stud.IP
Source project has a limited visibility.
-
Closes #1276 Merge request studip/studip!782
Closes #1276 Merge request studip/studip!782
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FilesystemVueDataManager.php 6.92 KiB
<?php
/**
* Class FilesystemVueDataManager is a manager that provides for a file or a folder
* the data that the vue component FilesTable needs to display the file or folder.
*/
class FilesystemVueDataManager
{
/**
* Provides for a file the data that the vue component FilesTable needs
* to display that file. Data is provides as an array that can be easily
* transferred into a JSON-object.
* @param FileType $file : the file that should be displayed
* @param FolderType $topFolder : The top-folder of that file
* @return array of data
*/
public static function getFileVueData(FileType $file, FolderType $topFolder, $last_visitdate = null)
{
$isDownloadable = $file->isDownloadable($GLOBALS['user']->id);
$terms = $file->getTermsOfUse();
$additionalColumns = [];
foreach ((array) $topFolder->getAdditionalColumns() as $index => $name) {
$additionalColumns[$index] = [
'html' => (string) $file->getContentForAdditionalColumn($index),
'order' => $file->getAdditionalColumnOrderWeigh($index)
];
}
$actionMenu = $file->getActionMenu();
return [
'id' => $file->getId(),
'name' => $file->getFilename(),
'download_url' => $isDownloadable ? $file->getDownloadURL() : null,
'downloads' => $file->getDownloads(),
'mime_type' => $file->getMimeType(),
'icon' => $file->getIcon($isDownloadable ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->getShape(),
'size' => $file->getSize(),
'author_url' => $file->getUser() && $file->getUserId() !== $GLOBALS['user']->id ? URLHelper::getURL('dispatch.php/profile', ['username' => $file->getUser()->username], true) : "",
'author_name' => $file->getUserName() ?: '',
'author_id' => $file->getUserId(),
'chdate' => (int) $file->getLastChangeDate(),
'additionalColumns' => $additionalColumns,
'details_url' => URLhelper::getURL("dispatch.php/file/details/{$file->getId()}", ['file_navigation' => '1']),
'restrictedTermsOfUse' => $terms && !$terms->isDownloadable($topFolder->range_id, $topFolder->range_type, false),
'actions' => $actionMenu ? (is_string($actionMenu) ? $actionMenu : $actionMenu->render()) : "",
'new' => isset($last_visitdate) && $file->getLastChangeDate() > $last_visitdate && $file->getUserId() !== $GLOBALS['user']->id,
'isEditable' => $file->isEditable(),
];
}
/**
* Provides for a folder the data that the vue component FilesTable needs
* to display that folder. Data is provides as an array that can be easily
* transferred into a JSON-object.
* @param FolderType $folder : the folder that should be displayed
* @param FolderType $topFolder : The top-folder of that file
* @return array of data
*/
public static function getFolderVueData(FolderType $folder, FolderType $topFolder)
{
$actionMenu = ActionMenu::get();
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/details/' . $folder->getId()),
_('Info'),
Icon::create('info-circle', 'clickable', ['size' => 20]),
['data-dialog' => '1']
);
if ($folder->isEditable($GLOBALS['user']->id)) {
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/edit_folder/' . $folder->getId()),
_('Ordner bearbeiten'),
Icon::create('edit', 'clickable', ['size' => 20]),
['data-dialog' => '1']
);
}
if ($folder->isReadable($GLOBALS['user']->id) && $GLOBALS['user']->id !== 'nobody') {
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/download_folder/' . $folder->getId()),
_('Ordner herunterladen'),
Icon::create('download', 'clickable', ['size' => 20])
);
}
if ($folder->isEditable($GLOBALS['user']->id)) {
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/choose_destination/move/' . $folder->getId(), ['isfolder' => 1]),
_('Ordner verschieben'),
Icon::create('folder-empty+move_right', 'clickable', ['size' => 20]),
['data-dialog' => 'size=auto']
);
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/choose_destination/copy/' . $folder->getId(), ['isfolder' => 1]),
_('Ordner kopieren'),
Icon::create('folder-empty+add', 'clickable', ['size' => 20]),
['data-dialog' => 'size=auto']
);
$actionMenu->addLink(
URLHelper::getURL('dispatch.php/file/delete_folder/' . $folder->getId()),
_('Ordner löschen'),
Icon::create('trash', 'clickable', ['size' => 20]),
['onclick' => "return STUDIP.Dialog.confirmAsPost('" . sprintf(_('Soll der Ordner "%s" wirklich gelöscht werden?'), htmlReady($folder->name)) . "', this.href);"]
);
}
$permissions = "";
if ($folder->isReadable($GLOBALS['user']->id)) {
$permissions .= 'r';
}
if ($folder->isEditable($GLOBALS['user']->id)) {
$permissions .= 'w';
}
if ($folder->isReadable($GLOBALS['user']->id)) {
$permissions .= 'd';
}
$additionalColumns = [];
foreach ($topFolder->getAdditionalColumns() as $index => $name) {
$additionalColumns[$index] = [
'html' => (string) $folder->getContentForAdditionalColumn($index),
'order' => $folder->getAdditionalColumnOrderWeigh($index)
];
}
$controllerpath = 'files/index';
if (is_numeric($topFolder->range_type)) {
//plugin:
$controllerpath = 'files/system/' . $topFolder->range_type;
} elseif ($topFolder->range_type !== 'user') {
$controllerpath = $topFolder->range_type . '/' . $controllerpath;
}
$vue_folder = [
'id' => $folder->getId(),
'icon' => $folder->getIcon(Icon::ROLE_CLICKABLE)->getShape(),
'name' => $folder->name,
'url' => URLhelper::getURL('dispatch.php/' . $controllerpath . '/' . $folder->getId()),
'user_id' => $folder->user_id,
'author_name' => $folder->owner ? $folder->owner->getFullname('no_title_rev') : '',
'author_url' => $folder->owner && $folder->owner->id !== $GLOBALS['user']->id? URLHelper::getURL('dispatch.php/profile', ['username' => $folder->owner->username]) : '',
'chdate' => (int) $folder->chdate,
'actions' => $actionMenu->render(),
'mime_type' => get_class($folder),
'permissions' => $permissions,
'additionalColumns' => $additionalColumns
];
return $vue_folder;
}
}