%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/topic/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/topic/widgets/TopicPicker.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\widgets; use humhub\modules\content\components\ContentContainerActiveRecord; use humhub\modules\content\helpers\ContentContainerHelper; use humhub\modules\topic\permissions\AddTopic; use humhub\modules\content\widgets\ContentTagPicker; use humhub\modules\topic\models\Topic; use Yii; use yii\helpers\Url; /** * This InputWidget class can be used to add a topic picker input field. The topic picker field is only * rendered if there are topics available or if the user is allowed to create topics. */ class TopicPicker extends ContentTagPicker { /** * @inheritdoc */ public $itemClass = Topic::class; /** * @inheritdoc */ public $minInput = 2; /** * @inheritdoc */ public $showDefaults = true; /** * @inheritdoc */ public function init() { $this->contentContainer = $this->contentContainer ?: ContentContainerHelper::getCurrent(); if (!$this->url && $this->contentContainer) { $this->url = $this->contentContainer->createUrl('/topic/topic/search'); } else { $this->url = Url::to(['/topic/topic/search']); } $this->addOptions = static::canAddTopic($this->contentContainer); parent::init(); } /** * @inheritdoc */ public function run() { if(!static::canAddTopic($this->contentContainer) && !static::hasTopics($this->contentContainer)) { return $this->emptyResult(); } return parent::run(); } /** * Determines if a topicpicker should be rendered for the current user. This is only the case if there are topics * available for the given container or the user is allowed to create topics. * * @param ContentContainerActiveRecord|null $container * @return bool */ public static function showTopicPicker(ContentContainerActiveRecord $container = null) { return static::canAddTopic($container) || static::hasTopics($container); } /** * Determines if the current user is allowed to add topics on this container. * * @return bool * @since 1.6 */ private static function canAddTopic(ContentContainerActiveRecord $container = null) { return $container && $container->can(AddTopic::class); } /** * Checks if there are topics available on this container. * * @return bool */ private static function hasTopics(ContentContainerActiveRecord $container = null) { if(!$container) { return (bool) Topic::find()->count(); } return (bool) Topic::findByContainer($container)->count(); } /** * @inheritdoc * @param $tags * @return array */ public static function jsonResult($tags) { $result = parent::jsonResult($tags); foreach($result as $key => $tag) { $result[$key]['image'] = Yii::$app->getModule('topic')->icon; } return $result; } /** * @inheritdoc */ public function getItemImage($item) { return Yii::$app->getModule('topic')->icon; } /** * @inheritdoc */ protected function getData() { $result = parent::getData(); $allowMultiple = $this->maxSelection !== 1; $result['placeholder'] = Yii::t('TopicModule.widgets_TopicPicker', 'Select {n,plural,=1{topic} other{topics}}', ['n' => ($allowMultiple) ? 2 : 1]); $result['placeholder-more'] = Yii::t('TopicModule.widgets_TopicPicker', 'Select topic...'); $result['no-result'] = Yii::t('TopicModule.widgets_TopicPicker', 'No topics found for the given query'); if ($this->maxSelection) { $result['maximum-selected'] = Yii::t('TopicModule.widgets_TopicPicker', 'This field only allows a maximum of {n,plural,=1{# topic} other{# topics}}', ['n' => $this->maxSelection]); } return $result; } }