Your IP : 3.21.241.17


Current Path : /var/www/axolotl/data/www/msk.axolotls.ru/bitrix/modules/disk/lib/controller/
Upload File :
Current File : /var/www/axolotl/data/www/msk.axolotls.ru/bitrix/modules/disk/lib/controller/folder.php

<?php

namespace Bitrix\Disk\Controller;

use Bitrix\Disk;
use Bitrix\Disk\ZipNginx;
use Bitrix\Main\Application;
use Bitrix\Main\ArgumentTypeException;
use Bitrix\Main\Engine\ActionFilter;
use Bitrix\Main\Engine\AutoWire\ExactParameter;

class Folder extends BaseObject
{
	public function configureActions()
	{
		$configureActions = parent::configureActions();
		$configureActions['downloadArchive'] = [
			'-prefilters' => [
				ActionFilter\Csrf::class,
			],
			'+prefilters' => [
				new ActionFilter\CloseSession(),
			]
		];

		return $configureActions;
	}

	public function getPrimaryAutoWiredParameter()
	{
		return new ExactParameter(Disk\Folder::class, 'folder', function($className, $id){
			return Disk\Folder::loadById($id);
		});
	}

	public function getAction(Disk\Folder $folder)
	{
		return $this->get($folder);
	}

	protected function get(Disk\BaseObject $folder)
	{
		if (!($folder instanceof Disk\Folder))
		{
			throw new ArgumentTypeException('folder', Disk\Folder::class);
		}

		$data = parent::get($folder);
		$data['folder'] = $data['object'];
		unset($data['object']);

		return $data;
	}

	public function renameAction(Disk\Folder $folder, $newName, $autoCorrect = false)
	{
		return $this->rename($folder, $newName, $autoCorrect);
	}

	public function markDeletedAction(Disk\Folder $folder)
	{
		return $this->markDeleted($folder);
	}

	public function deleteTreeAction(Disk\Folder $folder)
	{
		return $this->deleteFolder($folder);
	}

	public function restoreAction(Disk\BaseObject $folder)
	{
		return $this->restore($folder);
	}

	public function generateExternalLinkAction(Disk\Folder $folder)
	{
		return $this->generateExternalLink($folder);
	}

	public function disableExternalLinkAction(Disk\Folder $folder)
	{
		return $this->disableExternalLink($folder);
	}
	
	public function getAllowedOperationsRightsAction(Disk\Folder $folder)
	{
		return $this->getAllowedOperationsRights($folder);
	}

	public function downloadArchiveAction(Disk\Folder $folder)
	{
		if (!ZipNginx\Configuration::isEnabled())
		{
			$this->addError(new Disk\Internals\Error\Error('Work with mod_zip is disabled in module settings.'));

			return;
		}

		$storage = $folder->getStorage();
		if (!$storage)
		{
			$this->addError(new Disk\Internals\Error\Error("Could not find storage for folder."));

			return;
		}

		$securityContext = $storage->getSecurityContext($this->getCurrentUser()->getId());
		$zipArchive = ZipNginx\Archive::createFromFolder($folder, $securityContext);

		global $APPLICATION;
		$APPLICATION->restartBuffer();
		$zipArchive->send();
		Application::getInstance()->terminate();
	}
}