[BUGFIX] Add missing copy and cut button in file list search result
[Packages/TYPO3.CMS.git] / typo3 / sysext / filelist / Classes / ViewHelpers / Uri / CopyCutFileViewHelper.php
1 <?php
2 namespace TYPO3\CMS\Filelist\ViewHelpers\Uri;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use Closure;
18 use TYPO3\CMS\Backend\Clipboard\Clipboard;
19 use TYPO3\CMS\Core\Utility\GeneralUtility;
20 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
21 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
22 use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
23
24 /**
25 * Class EditFileContentViewHelper
26 */
27 class CopyCutFileViewHelper extends AbstractViewHelper
28 {
29 use CompileWithRenderStatic;
30
31 /**
32 * Initialize arguments
33 */
34 public function initializeArguments()
35 {
36 $this->registerArgument('file', \TYPO3\CMS\Core\Resource\AbstractFile::class, '', true);
37 $this->registerArgument('copyOrCut', 'string', '', false, 'copy');
38 }
39
40 /**
41 * Renders a link to copy a file
42 *
43 * @param array $arguments
44 * @param Closure $renderChildrenClosure
45 * @param RenderingContextInterface $renderingContext
46 *
47 * @return string
48 * @throws \InvalidArgumentException
49 */
50 public static function renderStatic(array $arguments, Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
51 {
52 if ($arguments['copyOrCut'] !== 'cut' && $arguments['copyOrCut'] !== 'copy') {
53 throw new \InvalidArgumentException('Argument "copyOrCut" must be either "copy" or "cut"', 1540548015);
54 }
55
56 /** @var \TYPO3\CMS\Core\Resource\AbstractFile $file */
57 $file = $arguments['file'];
58
59 /** @var Clipboard $clipboard */
60 $clipboard = GeneralUtility::makeInstance(Clipboard::class);
61 $clipboard->initializeClipboard();
62
63 $fullIdentifier = $file->getCombinedIdentifier();
64 $md5 = GeneralUtility::shortMD5($fullIdentifier);
65 $isSel = $clipboard->isSelected('_FILE', $md5);
66
67 if ($arguments['copyOrCut'] === 'copy') {
68 return $clipboard->selUrlFile($fullIdentifier, true, $isSel === 'copy');
69 }
70 return $clipboard->selUrlFile($fullIdentifier, false, $isSel === 'cut');
71 }
72 }