%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/admin/models/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/admin/models/SpaceSearch.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\admin\models; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; use humhub\modules\space\models\Space; use humhub\modules\space\models\Membership; /** * SpaceSearch for administration * * @author luke */ class SpaceSearch extends Space { public $freeText; public $memberCount; public $owner; /** * @inheritdoc */ public function rules() { return [ [['id', 'visibility', 'join_policy'], 'integer'], [['freeText'], 'safe'], ]; } /** * @inheritdoc */ public function scenarios() { //Bypass scenarios() implementation in the parent class return Model::scenarios(); } /** * @inheritdoc */ public static function className() { return Space::class; } /** * @inheritdoc */ public function attributeLabels() { return array_merge(parent::attributeLabels(), [ 'memberCount' => 'Members' ]); } /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $memberCountSubSelect = Membership::find()->select('COUNT(*) as counter')->where('space_id=space.id')->andWhere(['space_membership.status' => Membership::STATUS_MEMBER]); $query = self::find(); $query->joinWith(['ownerUser', 'ownerUser.profile']); $query->addSelect(['space.*', 'memberCount' => $memberCountSubSelect]); $dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => ['pageSize' => 50], ]); $dataProvider->setSort([ 'attributes' => [ 'id', 'name', 'visibility', 'join_policy', 'memberCount', ] ]); $dataProvider->sort->attributes['ownerUser.profile.lastname'] = [ 'asc' => ['profile.lastname' => SORT_ASC], 'desc' => ['profile.lastname' => SORT_DESC], ]; // default visibility $this->visibility = Space::VISIBILITY_ALL; $this->load($params); if (!$this->validate()) { $query->emulateExecution(); return $dataProvider; } // Freetext filters if (!empty($this->freeText)) { $query->andWhere([ 'OR', ['like', 'space.name', $this->freeText], ['like', 'user.id', $this->freeText], ['like', 'user.username', $this->freeText], ['like', 'user.email', $this->freeText], ['like', 'profile.firstname', $this->freeText], ['like', 'profile.lastname', $this->freeText] ]); } if ($this->visibility == Space::VISIBILITY_NONE) { $query->andFilterWhere(['space.visibility' => Space::VISIBILITY_NONE]); } else { $query->andWhere([ 'OR', ['space.visibility' => Space::VISIBILITY_REGISTERED_ONLY], ['space.visibility' => Space::VISIBILITY_ALL] ]); } return $dataProvider; } public static function getVisibilityAttributes() { $countPublic = Space::find()->where(['visibility' => Space::VISIBILITY_ALL])->orWhere(['visibility' => Space::VISIBILITY_REGISTERED_ONLY])->count(); $countPrivate = Space::find()->where(['visibility' => Space::VISIBILITY_NONE])->count(); return [ Space::VISIBILITY_REGISTERED_ONLY => Yii::t('SpaceModule.base', 'Public') . ' (' . $countPublic . ')', Space::VISIBILITY_NONE => Yii::t('SpaceModule.base', 'Private') . ' (' . $countPrivate . ')', ]; } }