%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/topic/models/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/topic/models/Topic.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
namespace humhub\modules\topic\models;
use humhub\modules\content\interfaces\ContentOwner;
use humhub\modules\stream\helpers\StreamHelper;
use humhub\modules\content\models\Content;
use humhub\modules\topic\permissions\AddTopic;
use humhub\modules\content\models\ContentTag;
use Yii;
/**
* ContentTag type used for categorizing content.
*
* @since 1.3
*/
class Topic extends ContentTag
{
/**
* @inheritdoc
*/
public $moduleId = 'topic';
public function attributeLabels()
{
return [
'name' => Yii::t('TopicModule.base', 'Name'),
'color' => Yii::t('TopicModule.base', 'Color'),
'sort_order' => Yii::t('TopicModule.base', 'Sort order'),
];
}
/**
* @inheritdoc
*/
public static function getLabel()
{
return Yii::t('TopicModule.base', 'Topic');
}
/**
* @return string topic icon used in badges etc.
*/
public static function getIcon()
{
return Yii::$app->getModule('topic')->icon;
}
/**
* @return string link to topic filter stream page
*/
public function getUrl()
{
return StreamHelper::createUrl($this->container, ['topicId' => $this->id]);
}
/**
* Attaches the given topics to the given content instance.
*
* @param Content $content target content
* @param int[]|int|Topic|Topic[] $topics either a single or array of topics or topic Ids to add.
*/
public static function attach(ContentOwner $contentOwner, $topics)
{
$content = $contentOwner->getContent();
/* @var $result static[] */
$result = [];
// Clear all relations and append them again
static::deleteContentRelations($content);
$canAdd = $content->container->can(AddTopic::class);
if (empty($topics)) {
return;
}
$topics = is_array($topics) ? $topics : [$topics];
foreach ($topics as $topic) {
if(is_string($topic) && strpos($topic, '_add:') === 0 && $canAdd) {
$newTopic = new Topic([
'name' => substr($topic, strlen('_add:')),
'contentcontainer_id' => $content->contentcontainer_id
]);
if ($newTopic->save()) {
$result[] = $newTopic;
}
} elseif (is_numeric($topic)) {
$topic = Topic::findOne((int) $topic);
if ($topic) {
$result[] = $topic;
}
} elseif ($topic instanceof Topic) {
$result[] = $topic;
}
}
$content->addTags($result);
}
}