<?php

/**
 * Vvveb
 *
 * Copyright (C) 2022  Ziadin Givan
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 */

/**
 * elFinder driver for trash bin at local filesystem.
 *
 * @author NaokiSawada
 **/
class elFinderVolumeTrash extends elFinderVolumeLocalFileSystem {
	/**
	 * Driver id
	 * Must be started from letter and contains [a-z0-9]
	 * Used as part of volume id.
	 *
	 * @var string
	 **/
	protected $driverId = 't';

	public function __construct() {
		parent::__construct();
		// original option of the Trash
		$this->options['lockEverything'] = false; // Lock all items in the trash to disable delete, move, rename.

		// common options as the volume driver
		$this->options['alias']         = 'Trash';
		$this->options['quarantine']    = '';
		$this->options['rootCssClass']  = 'elfinder-navbar-root-trash';
		$this->options['copyOverwrite'] = false;
		$this->options['uiCmdMap']      = ['paste' => 'hidden', 'mkdir' => 'hidden', 'copy' => 'restore'];
		$this->options['disabled']      = ['archive', 'duplicate', 'edit', 'extract', 'mkfile', 'places', 'put', 'rename', 'resize', 'upload'];
	}

	public function mount(array $opts) {
		if ($this->options['lockEverything']) {
			if (! is_array($opts['attributes'])) {
				$opts['attributes'] = [];
			}
			$attr = [
				'pattern' => '/./',
				'locked'  => true,
			];
			array_unshift($opts['attributes'], $attr);
		}
		// force set `copyJoin` to true
		$opts['copyJoin'] = true;

		return parent::mount($opts);
	}
}
