Skip to content
Snippets Groups Projects
Select Git revision
  • ac094fbcb004c36e88a61f54f9cbd3139c05a3cb
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

StudipSemTreeViewSimple.class.php

Blame
  • 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.
    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;
        }
    }