%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/Events.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2015 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\file;
use humhub\modules\search\engine\Search;
use humhub\modules\file\models\File;
use yii\base\Event;
use humhub\modules\search\events\SearchAttributesEvent;
use humhub\modules\file\converter\TextConverter;
/**
* Events provides callbacks to handle events.
*
* @author luke
*/
class Events extends \yii\base\BaseObject
{
/**
* On init of the WallEntryAddonWidget, attach the files of the content.
*
* @param Event $event
*/
public static function onWallEntryAddonInit($event)
{
$event->sender->addWidget(widgets\ShowFiles::class, ['object' => $event->sender->object], ['sortOrder' => 5]);
}
/**
* On cron daily run do some cleanup stuff.
* We delete all files which are not assigned to object_model/object_id
* within 1 day.
*
* @param Event $event
*/
public static function onCronDailyRun($event)
{
$controller = $event->sender;
$controller->stdout("Deleting old unassigned files... ");
// Delete unused files
$deleteTime = time() - (60 * 60 * 24 * 1); // Older than 1 day
foreach (File::find()->andWhere(['<', 'created_at', date('Y-m-d', $deleteTime)])->andWhere('(object_model IS NULL or object_model = "")')->all() as $file) {
$file->delete();
}
$controller->stdout('done.' . PHP_EOL, \yii\helpers\Console::FG_GREEN);
}
/**
* Callback to validate module database records.
*
* @param Event $event
*/
public static function onIntegrityCheck($event)
{
$integrityController = $event->sender;
$integrityController->showTestHeadline("File Module (" . File::find()->count() . " entries)");
foreach (File::find()->all() as $file) {
if ($file->object_model != "" && $file->object_id != "" && $file->getPolymorphicRelation() === null) {
if ($integrityController->showFix("Deleting file id " . $file->id . " without existing target!")) {
$file->delete();
}
}
}
}
/**
* On delete of a model, check there are files bound to it and delete them
*
* @param Event $event
*/
public static function onBeforeActiveRecordDelete($event)
{
$model = $event->sender->className();
$pk = $event->sender->getPrimaryKey();
// Check if primary key exists and is not array (multiple pk)
if ($pk !== null && !is_array($pk)) {
foreach (File::find()->where(['object_id' => $pk, 'object_model' => $model])->all() as $file) {
$file->delete();
}
}
}
public static function onUserDelete($event)
{
foreach (File::findAll(['created_by' => $event->sender->id]) as $file) {
$file->delete();
}
return true;
}
/**
* Handles the SearchAttributesEvent and adds related files
*
* @since 1.2.3
* @param SearchAttributesEvent $event
*/
public static function onSearchAttributes(SearchAttributesEvent $event)
{
if (!isset($event->attributes['files'])) {
$event->attributes['files'] = [];
}
foreach (File::findAll(['object_model' => $event->record->className(), 'object_id' => $event->record->id]) as $file) {
/* @var $file File */
$textContent = null;
$textConverter = new TextConverter();
if ($textConverter->applyFile($file)) {
$textContent = $textConverter->getContentAsText();
}
$event->attributes['files'][$file->id] = [
'name' => $file->file_name,
'content' => $textContent
];
// Add comment related attributes
Event::trigger(Search::class, Search::EVENT_SEARCH_ATTRIBUTES, new SearchAttributesEvent($event->attributes['files'][$file->id], $file));
}
}
}