%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/like/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/like/widgets/LikeLink.php |
<?php namespace humhub\modules\like\widgets; use Yii; use yii\helpers\Url; use yii\helpers\Html; use humhub\modules\like\Module; use humhub\modules\like\models\Like as LikeModel; use humhub\modules\content\components\ContentActiveRecord; use humhub\modules\content\components\ContentContainerActiveRecord; use humhub\modules\like\permissions\CanLike; /** * This widget is used to show a like link inside the wall entry controls. * * @package humhub.modules_core.like * @since 0.5 */ class LikeLink extends \yii\base\Widget { /** * The Object to be liked * * @var LikeModel|ContentActiveRecord */ public $object; /** * @inheritdoc */ public function beforeRun() { if ( !Yii::$app->getModule('like')->isEnabled || ( isset($this->object->content->container) && $this->object->content->container instanceof ContentContainerActiveRecord && !$this->object->content->container->can(CanLike::class) ) ) { return false; } return parent::beforeRun(); } /** * Executes the widget. */ public function run() { $currentUserLiked = false; /** @var Module $module */ $module = Yii::$app->getModule('like'); $canLike = $module->canLike($this->object); $likes = LikeModel::GetLikes(get_class($this->object), $this->object->id); foreach ($likes as $like) { if ($like->user->id == Yii::$app->user->id) { $currentUserLiked = true; } } return $this->render('likeLink', [ 'canLike' => $canLike, 'object' => $this->object, 'likes' => $likes, 'currentUserLiked' => $currentUserLiked, 'id' => $this->object->getUniqueId(), 'likeUrl' => Url::to(['/like/like/like', 'contentModel' => get_class($this->object), 'contentId' => $this->object->id]), 'unlikeUrl' => Url::to(['/like/like/unlike', 'contentModel' => get_class($this->object), 'contentId' => $this->object->id]), 'userListUrl' => Url::to(['/like/like/user-list', 'contentModel' => get_class($this->object), 'contentId' => $this->object->getPrimaryKey()]), 'title' => $this->generateLikeTitleText($currentUserLiked, $likes) ]); } private function generateLikeTitleText($currentUserLiked, $likes) { $userlist = ""; // variable for users output $maxUser = 5; // limit for rendered users inside the tooltip $previewUserCount = 0; // if the current user also likes if ($currentUserLiked == true) { // if only one user likes if (count($likes) == 1) { // output, if the current user is the only one return Yii::t('LikeModule.base', 'You like this.'); } else { // output, if more users like this $userlist .= Yii::t('LikeModule.base', 'You'). "\n"; $previewUserCount++; } } for ($i = 0, $likesCount = count($likes); $i < $likesCount; $i++) { // if only one user likes if ($likesCount == 1) { // check, if you liked if ($likes[$i]->user->guid != Yii::$app->user->guid) { // output, if an other user liked return Html::encode($likes[$i]->user->displayName) . Yii::t('LikeModule.base', ' likes this.'); } } else { // check, if you liked if ($likes[$i]->user->guid != Yii::$app->user->guid) { // output, if an other user liked $userlist .= Html::encode($likes[$i]->user->displayName). "\n"; $previewUserCount++; } // check if exists more user as limited if ($i == $maxUser) { if ((int)(count($likes) - $previewUserCount) !== 0) { // output with the number of not rendered users $userlist .= Yii::t('LikeModule.base', 'and {count} more like this.', ['{count}' => (int)(count($likes) - $previewUserCount)]); } // stop the loop break; } } } return $userlist; } } ?>