%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/cfiles/models/forms/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/cfiles/models/forms/MoveForm.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
namespace humhub\modules\cfiles\models\forms;
use humhub\modules\cfiles\models\FileSystemItem;
use humhub\modules\cfiles\models\Folder;
use Yii;
/**
* Created by PhpStorm.
* User: buddha
* Date: 19.08.2017
* Time: 19:06
*/
class MoveForm extends SelectionForm
{
/**
* @var Folder root folder of this contentcontainer
*/
public $root;
/**
* @var Folder the source folder of the selection
*/
public $sourceFolder;
/**
* @var Folder the id of destination folder id
*/
public $destId;
/**
* @var Folder the destination of the move event
*/
public $destination;
/**
* @inheritdoc
*/
public function init()
{
$this->contentContainer = $this->root->content->container;
parent::init();
}
/**
* @inheritdoc
*/
public function rules()
{
return [
['destId', 'required'],
['destId', 'integer'],
['destId', 'validateDestination']
];
}
/**
* @param $model MoveForm
* @param $attribute
*/
public function validateDestination($attribute)
{
$this->destination = Folder::findOne($this->destId);
if (!$this->destination) {
$this->addError($attribute, Yii::t('CfilesModule.base', 'Destination folder not found!'));
return;
}
if ($this->sourceFolder->id == $this->destination->id) {
$this->addError($attribute, Yii::t('CfilesModule.base', 'Moving to the same folder is not valid.'));
return;
}
if ($this->destination->isAllPostedFiles() || $this->destination->content->container->id !== $this->contentContainer->id) {
$this->addError($attribute, Yii::t('CfilesModule.base', 'Moving to this folder is invalid.'));
return;
}
}
/**
* @return string move action url
*/
public function getMoveUrl()
{
return $this->sourceFolder->createUrl('/cfiles/move');
}
/**
* @return string URL to move Content to another Container
*/
public function getMoveToContainerUrl(): ?string
{
if (count($this->selection) !== 1) {
// Only single selected File/Folder can be moved to another Container
return null;
}
$item = FileSystemItem::getItemById($this->selection[0]);
if (!$item || !$item->content->container || !$item->content->checkMovePermission()) {
return null;
}
return $item->content->container->createUrl('/content/move/move', ['id' => $item->content->id]);
}
/**
* Executes the actual move of the selection files from source into target.
* @return bool
*/
public function save()
{
if (!$this->validate()) {
return false;
}
$result = true;
foreach ($this->selection as $selectedItemId) {
$item = FileSystemItem::getItemById($selectedItemId);
if (!$this->destination->moveItem($item)) {
$this->addItemErrors($item);
$result = false;
}
}
return $result;
}
/**
* @param FileSystemItem $item
*/
public function addItemErrors(FileSystemItem $item)
{
foreach ($item->errors as $key => $error) {
$this->addErrors([$key => $error]);
}
}
}