%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/components/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/components/FileManager.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\file\components;
use humhub\modules\comment\models\Comment;
use humhub\modules\content\components\ContentActiveRecord;
use humhub\modules\search\libs\SearchHelper;
use Yii;
use yii\base\Component;
use humhub\modules\file\models\File;
/**
* FileManager
*
* @todo Add caching
* @since 1.2
* @author Luke
*/
class FileManager extends Component
{
/**
* @var \humhub\components\ActiveRecord
*/
public $record;
/**
* Attach files to record.
* This is required when uploaded before the related content is saved.
*
* @param string|array|File $files of File records or comma separeted list of file guids or single File record
* @param boolean $steal steal when already assigned to other record
*/
public function attach($files, $steal = false)
{
if (!$files) {
return;
}
if (is_string($files)) {
$files = array_map('trim', explode(',', $files));
} elseif ($files instanceof File) {
$files = [$files];
}
foreach ($files as $file) {
if (is_string($file) && $file != '') {
$file = File::findOne(['guid' => $file]);
}
if ($file === null || !$file instanceof File) {
continue;
}
if ($file->isAssignedTo($this->record)) {
continue;
}
if ($file->isAssigned() && !$steal) {
Yii::warning('Attempted to steal file: ' . $file->guid);
continue;
}
$attributes = [
'object_model' => get_class($this->record),
'object_id' => $this->record->getPrimaryKey(),
];
if ($this->record instanceof ContentActiveRecord || $this->record instanceof Comment) {
$attributes['content_id'] = $this->record->content->id;
}
$file->updateAttributes($attributes);
}
SearchHelper::queueUpdate($this->record);
}
/**
* File find query
*
* @return \yii\db\ActiveQuery file find query
*/
public function find()
{
return File::find()->andWhere(['object_id' => $this->record->getPrimaryKey(), 'object_model' => get_class($this->record)]);
}
/**
* Returns a list of files assigned to the record
*
* @return File[] array of files assigned to the record
*/
public function findAll()
{
return $this->find()->all();
}
/**
* By default all files with show_in_stream set to 1.
*
* If $flag is set to false, this function will return all non stream files.
*
* @return File[]
* @since 1.2.2
*/
public function findStreamFiles($showInStream = true)
{
if ($showInStream) {
return $this->find()->andWhere(['show_in_stream' => 1])->all();
} else {
return $this->find()->andWhere(['show_in_stream' => 0])->all();
}
}
}