Exemple #1
0
 /**
  * Follows the owner object
  *
  * @param int $userId
  * @return boolean
  */
 public function follow($userId = "", $withNotifications = true)
 {
     if ($userId == "") {
         $userId = Yii::$app->user->id;
     }
     // User cannot follow himself
     if ($this->owner->className() == \humhub\modules\user\models\User::className() && $this->owner->getPrimaryKey() == $userId) {
         return false;
     }
     $follow = $this->getFollowRecord($userId);
     if ($follow === null) {
         $follow = new \humhub\modules\user\models\Follow();
         $follow->user_id = $userId;
         $follow->object_id = $this->owner->getPrimaryKey();
         $follow->object_model = $this->owner->className();
     }
     if ($withNotifications) {
         $follow->send_notifications = 1;
     } else {
         $follow->send_notifications = 0;
     }
     if (!$follow->save()) {
         return false;
     }
     return true;
 }
 /**
  * @inheritdoc
  */
 public function init()
 {
     parent::init();
     $friendshipEnabled = Yii::$app->getModule('friendship')->getIsEnabled();
     if ($this->user == null) {
         /**
          * For guests collect all wall_ids of "guest" public spaces / user profiles.
          * Generally show only public content
          */
         $publicSpacesSql = (new \yii\db\Query())->select(["si.wall_id"])->from('space si')->where('si.visibility=' . \humhub\modules\space\models\Space::VISIBILITY_ALL);
         $union = Yii::$app->db->getQueryBuilder()->build($publicSpacesSql)[0];
         $publicProfilesSql = (new \yii\db\Query())->select("pi.wall_id")->from('user pi')->where('pi.status=1 AND  pi.visibility = ' . \humhub\modules\user\models\User::VISIBILITY_ALL);
         $union .= " UNION " . Yii::$app->db->getQueryBuilder()->build($publicProfilesSql)[0];
         $this->activeQuery->andWhere('wall_entry.wall_id IN (' . $union . ')');
         $this->activeQuery->andWhere(['content.visibility' => \humhub\modules\content\models\Content::VISIBILITY_PUBLIC]);
     } else {
         /**
          * Collect all wall_ids we need to include into dashboard stream
          */
         // User to user follows
         $userFollow = (new \yii\db\Query())->select(["uf.wall_id"])->from('user_follow')->leftJoin('user uf', 'uf.id=user_follow.object_id AND user_follow.object_model=:userClass')->where('user_follow.user_id=' . $this->user->id . ' AND uf.wall_id IS NOT NULL');
         $union = Yii::$app->db->getQueryBuilder()->build($userFollow)[0];
         // User to space follows
         $spaceFollow = (new \yii\db\Query())->select("sf.wall_id")->from('user_follow')->leftJoin('space sf', 'sf.id=user_follow.object_id AND user_follow.object_model=:spaceClass')->where('user_follow.user_id=' . $this->user->id . ' AND sf.wall_id IS NOT NULL');
         $union .= " UNION " . Yii::$app->db->getQueryBuilder()->build($spaceFollow)[0];
         // User to space memberships
         $spaceMemberships = (new \yii\db\Query())->select("sm.wall_id")->from('space_membership')->leftJoin('space sm', 'sm.id=space_membership.space_id')->where('space_membership.user_id=' . $this->user->id . ' AND sm.wall_id IS NOT NULL AND space_membership.show_at_dashboard = 1');
         $union .= " UNION " . Yii::$app->db->getQueryBuilder()->build($spaceMemberships)[0];
         if ($friendshipEnabled) {
             // User to user follows
             $usersFriends = (new \yii\db\Query())->select(["ufr.wall_id"])->from('user ufr')->leftJoin('user_friendship recv', 'ufr.id=recv.friend_user_id AND recv.user_id=' . (int) $this->user->id)->leftJoin('user_friendship snd', 'ufr.id=snd.user_id AND snd.friend_user_id=' . (int) $this->user->id)->where('recv.id IS NOT NULL AND snd.id IS NOT NULL AND ufr.wall_id IS NOT NULL');
             $union .= " UNION " . Yii::$app->db->getQueryBuilder()->build($usersFriends)[0];
         }
         // Glue together also with current users wall
         $wallIdsSql = (new \yii\db\Query())->select('wall_id')->from('user uw')->where('uw.id=' . $this->user->id);
         $union .= " UNION " . Yii::$app->db->getQueryBuilder()->build($wallIdsSql)[0];
         // Manual Union (https://github.com/yiisoft/yii2/issues/7992)
         // Double union query - to avoid MySQL performance problems
         $this->activeQuery->andWhere('wall_entry.wall_id IN (select subselect.wall_id from (' . $union . ') subselect)', [':spaceClass' => \humhub\modules\space\models\Space::className(), ':userClass' => \humhub\modules\user\models\User::className()]);
         /**
          * Begin visibility checks regarding the content container
          */
         $this->activeQuery->leftJoin('wall', 'wall_entry.wall_id=wall.id');
         $this->activeQuery->leftJoin('space_membership', 'wall.object_id=space_membership.space_id AND space_membership.user_id=:userId AND space_membership.status=:status', ['userId' => $this->user->id, ':status' => \humhub\modules\space\models\Membership::STATUS_MEMBER]);
         if ($friendshipEnabled) {
             $this->activeQuery->leftJoin('user_friendship', 'wall.object_id=user_friendship.user_id AND user_friendship.friend_user_id=:userId', ['userId' => $this->user->id]);
         }
         $condition = ' (wall.object_model=:userModel AND content.visibility=0 AND content.created_by = :userId) OR ';
         if ($friendshipEnabled) {
             // In case of friendship we can also display private content
             $condition .= ' (wall.object_model=:userModel AND content.visibility=0 AND user_friendship.id IS NOT NULL) OR ';
         }
         // In case of an space entry, we need to join the space membership to verify the user can see private space content
         $condition .= ' (wall.object_model=:spaceModel AND content.visibility = 0 AND space_membership.status = ' . \humhub\modules\space\models\Membership::STATUS_MEMBER . ') OR ';
         $condition .= ' (content.visibility = 1 OR content.visibility IS NULL) ';
         $this->activeQuery->andWhere($condition, [':userId' => $this->user->id, ':spaceModel' => \humhub\modules\space\models\Space::className(), ':userModel' => \humhub\modules\user\models\User::className()]);
     }
 }
 /**
  * Executes the widgets
  */
 public function run()
 {
     // Some member stats
     $statsTotalUsers = User::find()->active()->count();
     $statsUserOnline = \humhub\modules\user\components\Session::getOnlineUsers()->count();
     $statsUserFollow = Follow::find()->where(['object_model' => User::className()])->count();
     // Render widgets view
     return $this->render('memberStats', array('statsTotalUsers' => $statsTotalUsers, 'statsUserOnline' => $statsUserOnline, 'statsUserFollow' => $statsUserFollow));
 }
 /**
  * @inheritdoc
  */
 public function rules()
 {
     $rules = [['newEmail', 'required'], ['newEmail', 'email'], ['newEmail', 'unique', 'targetAttribute' => 'email', 'targetClass' => User::className(), 'message' => '{attribute} "{value}" is already in use!']];
     if (CheckPasswordValidator::hasPassword()) {
         $rules[] = ['currentPassword', CheckPasswordValidator::className()];
         $rules[] = ['currentPassword', 'required'];
     }
     return $rules;
 }
Exemple #5
0
 /**
  * @inheritdoc
  */
 public function run()
 {
     $friendshipsEnabled = Yii::$app->getModule('friendship')->getIsEnabled();
     $countFriends = 0;
     if ($friendshipsEnabled) {
         $countFriends = Friendship::getFriendsQuery($this->user)->count();
     }
     $countFollowing = $this->user->getFollowingCount(User::className()) + $this->user->getFollowingCount(Space::className());
     $countUserSpaces = Membership::getUserSpaceQuery($this->user)->andWhere(['!=', 'space.visibility', Space::VISIBILITY_NONE])->andWhere(['space.status' => Space::STATUS_ENABLED])->count();
     return $this->render('profileHeader', array('user' => $this->user, 'isProfileOwner' => $this->isProfileOwner, 'friendshipsEnabled' => $friendshipsEnabled, 'countFriends' => $countFriends, 'countFollowers' => $this->user->getFollowerCount(), 'countFollowing' => $countFollowing, 'countSpaces' => $countUserSpaces));
 }
 public function up()
 {
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\Text'], ['field_type_class' => 'ProfileFieldTypeText']);
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\Birthday'], ['field_type_class' => 'ProfileFieldTypeBirthday']);
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\DateTime'], ['field_type_class' => 'ProfileFieldTypeDateTime']);
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\Number'], ['field_type_class' => 'ProfileFieldTypeNumber']);
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\Select'], ['field_type_class' => 'ProfileFieldTypeSelect']);
     $this->update('profile_field', ['field_type_class' => 'humhub\\modules\\user\\models\\fieldtype\\TextArea'], ['field_type_class' => 'ProfileFieldTypeTextArea']);
     $this->renameClass('User', User::className());
     $this->renameClass('UserFollow', User::className());
 }
Exemple #7
0
 public function beforeDelete()
 {
     // ToDo: Handle this via event of User Module
     if ($this->object_model == User::className()) {
         $notification = new \humhub\modules\user\notifications\Followed();
         $notification->originator = $this->user;
         $notification->delete($this->getTarget());
         foreach (Activity::findAll(['object_model' => $this->className(), 'object_id' => $this->id]) as $activity) {
             $activity->delete();
         }
     }
     return parent::beforeDelete();
 }
 /**
  * Returns a list of all available user modules
  *
  * @return array
  */
 public function getAvailableModules()
 {
     if ($this->_availableModules !== null) {
         return $this->_availableModules;
     }
     $this->_availableModules = array();
     foreach (Yii::$app->moduleManager->getModules() as $moduleId => $module) {
         if ($module instanceof ContentContainerModule && Yii::$app->hasModule($module->id) && $module->hasContentContainerType(User::className())) {
             $this->_availableModules[$module->id] = $module;
         }
     }
     return $this->_availableModules;
 }
Exemple #9
0
 /**
  * On User delete, also delete all posts
  *
  * @param type $event
  */
 public static function onUserDelete($event)
 {
     foreach (Notification::findAll(['user_id' => $event->sender->id]) as $notification) {
         $notification->delete();
     }
     foreach (Notification::findAll(['originator_user_id' => $event->sender->id]) as $notification) {
         $notification->delete();
     }
     foreach (Notification::findAll(['source_class' => \humhub\modules\user\models\User::className(), 'source_pk' => $event->sender->id]) as $notification) {
         $notification->delete();
     }
     return true;
 }
 /**
  * Action for the members section of the directory
  *
  * @todo Dont pass lucene hits to view, build user array inside of action
  */
 public function actionMembers()
 {
     $keyword = Yii::$app->request->get('keyword', "");
     $page = (int) Yii::$app->request->get('page', 1);
     //$_GET['keyword'] = $keyword; // Fix for post var
     $searchResultSet = Yii::$app->search->find($keyword, ['model' => \humhub\modules\user\models\User::className(), 'page' => $page, 'pageSize' => Setting::Get('paginationSize')]);
     $pagination = new \yii\data\Pagination(['totalCount' => $searchResultSet->total, 'pageSize' => $searchResultSet->pageSize]);
     \yii\base\Event::on(Sidebar::className(), Sidebar::EVENT_INIT, function ($event) {
         $event->sender->addWidget(\humhub\modules\directory\widgets\NewMembers::className(), [], ['sortOrder' => 10]);
         $event->sender->addWidget(\humhub\modules\directory\widgets\MemberStatistics::className(), [], ['sortOrder' => 20]);
     });
     return $this->render('members', array('keyword' => $keyword, 'users' => $searchResultSet->getResultInstances(), 'pagination' => $pagination));
 }
 public function up()
 {
     $this->createTable('contentcontainer_setting', ['id' => Schema::TYPE_PK, 'module_id' => $this->string(50)->notNull(), 'contentcontainer_id' => Schema::TYPE_INTEGER . ' NOT NULL', 'name' => $this->string(50)->notNull(), 'value' => Schema::TYPE_TEXT . ' NOT NULL']);
     $this->createIndex('settings-unique', 'contentcontainer_setting', ['module_id', 'contentcontainer_id', 'name'], true);
     $this->addForeignKey('fk-contentcontainerx', 'contentcontainer_setting', 'contentcontainer_id', 'contentcontainer', 'id', 'CASCADE', 'CASCADE');
     // Import old user settings
     $rows = (new Query())->select("*, contentcontainer.id as cid")->from('user_setting')->leftJoin('contentcontainer', 'user_setting.user_id = contentcontainer.pk AND contentcontainer.class=:class', [':class' => \humhub\modules\user\models\User::className()])->andWhere('contentcontainer.id IS NOT NULL')->all();
     foreach ($rows as $row) {
         $this->insertSilent('contentcontainer_setting', ['module_id' => $row['module_id'], 'contentcontainer_id' => $row['cid'], 'name' => $row['name'], 'value' => $row['value']]);
     }
     // Import old space settings
     $rows = (new Query())->select("*, contentcontainer.id as cid")->from('space_setting')->leftJoin('contentcontainer', 'space_setting.space_id = contentcontainer.pk AND contentcontainer.class=:class', [':class' => humhub\modules\space\models\Space::className()])->andWhere('contentcontainer.id IS NOT NULL')->all();
     foreach ($rows as $row) {
         $this->insertSilent('contentcontainer_setting', ['module_id' => $row['module_id'], 'contentcontainer_id' => $row['cid'], 'name' => $row['name'], 'value' => $row['value']]);
     }
     $this->dropTable('user_setting');
     $this->dropTable('space_setting');
 }
Exemple #12
0
 public function beforeDelete()
 {
     // ToDo: Handle this via event of User Module
     if ($this->object_model == User::className()) {
         /*
          $user = User::model()->findByPk($this->user_id);
          $activity = Activity::model()->contentContainer($user)->findByAttributes(array('type' => "ActivityUserFollowsUser", 'object_id' => $this->object_id));
          if ($activity !== null) {
          $activity->delete();
          }
         *
         */
         $notification = new \humhub\modules\user\notifications\Followed();
         $notification->originator = $this->user;
         $notification->delete($this->getTarget());
     }
     return parent::beforeDelete();
 }
 public function up()
 {
     $this->createTable('contentcontainer', array('id' => Schema::TYPE_PK, 'guid' => Schema::TYPE_STRING, 'class' => Schema::TYPE_STRING, 'pk' => Schema::TYPE_INTEGER, 'owner_user_id' => Schema::TYPE_INTEGER, 'wall_id' => Schema::TYPE_INTEGER), '');
     $this->createIndex('unique_target', 'contentcontainer', ['class', 'pk'], true);
     $this->createIndex('unique_guid', 'contentcontainer', ['guid'], true);
     $this->addColumn('space', 'contentcontainer_id', Schema::TYPE_INTEGER);
     $this->addColumn('user', 'contentcontainer_id', Schema::TYPE_INTEGER);
     $spaces = (new \yii\db\Query())->select("space.*")->from('space');
     foreach ($spaces->each() as $space) {
         $this->insertSilent('contentcontainer', ['guid' => $space['guid'], 'class' => humhub\modules\space\models\Space::className(), 'pk' => $space['id'], 'owner_user_id' => $space['created_by'], 'wall_id' => $space['wall_id']]);
         $this->updateSilent('space', ['contentcontainer_id' => Yii::$app->db->getLastInsertID()], 'space.id=:spaceId', [':spaceId' => $space['id']]);
     }
     $users = (new \yii\db\Query())->select("user.*")->from('user');
     foreach ($users->each() as $user) {
         $this->insertSilent('contentcontainer', ['guid' => $user['guid'], 'class' => \humhub\modules\user\models\User::className(), 'pk' => $user['id'], 'owner_user_id' => $user['id'], 'wall_id' => $user['wall_id']]);
         $this->updateSilent('user', ['contentcontainer_id' => Yii::$app->db->getLastInsertID()], 'user.id=:userId', [':userId' => $user['id']]);
     }
 }
 public function up()
 {
     // Add contentcontainer_id to content table
     $this->addColumn('content', 'contentcontainer_id', $this->integer());
     // Set content container for space content
     $this->update('content', ['contentcontainer_id' => new Expression('(SELECT id FROM contentcontainer WHERE class=:spaceModel AND pk=space_id)', [':spaceModel' => \humhub\modules\space\models\Space::className()])], ['IS NOT', 'space_id', new Expression('NULL')]);
     // Set content container for user content
     $this->update('content', ['contentcontainer_id' => new Expression('(SELECT id FROM contentcontainer WHERE class=:userModel AND pk=user_id)', [':userModel' => \humhub\modules\user\models\User::className()])], ['IS', 'space_id', new Expression('NULL')]);
     // Ensure created_by is set to user_id
     $this->update('content', ['created_by' => new Expression('user_id')]);
     // Ensure updated_by is set
     $this->update('content', ['updated_by' => new Expression('created_by')], ['IS', 'updated_by', new Expression('NULL')]);
     // Make sure fk dont fail
     Yii::$app->db->createCommand('UPDATE content LEFT JOIN user ON content.updated_by = user.id SET content.updated_by = NULL WHERE user.id IS NULL')->execute();
     Yii::$app->db->createCommand('UPDATE content LEFT JOIN user ON content.created_by = user.id SET content.created_by = NULL WHERE user.id IS NULL')->execute();
     // Add FKs
     $this->addForeignKey('fk-contentcontainer', 'content', 'contentcontainer_id', 'contentcontainer', 'id', 'SET NULL');
     $this->addForeignKey('fk-create-user', 'content', 'created_by', 'user', 'id', 'SET NULL');
     $this->addForeignKey('fk-update-user', 'content', 'updated_by', 'user', 'id', 'SET NULL');
     $this->dropColumn('content', 'space_id');
     $this->dropColumn('content', 'user_id');
 }
 /**
  * Action for the members section of the directory
  *
  * @todo Dont pass lucene hits to view, build user array inside of action
  */
 public function actionMembers()
 {
     $keyword = Yii::$app->request->get('keyword', "");
     $page = (int) Yii::$app->request->get('page', 1);
     $groupId = (int) Yii::$app->request->get('groupId', "");
     $group = null;
     if ($groupId) {
         $group = \humhub\modules\user\models\Group::findOne(['id' => $groupId]);
     }
     $searchOptions = ['model' => \humhub\modules\user\models\User::className(), 'page' => $page, 'pageSize' => $this->module->pageSize];
     if ($this->module->memberListSortField != "") {
         $searchOptions['sortField'] = $this->module->memberListSortField;
     }
     if ($group !== null) {
         $searchOptions['filters'] = ['groupId' => $group->id];
     }
     $searchResultSet = Yii::$app->search->find($keyword, $searchOptions);
     $pagination = new \yii\data\Pagination(['totalCount' => $searchResultSet->total, 'pageSize' => $searchResultSet->pageSize]);
     \yii\base\Event::on(Sidebar::className(), Sidebar::EVENT_INIT, function ($event) {
         $event->sender->addWidget(\humhub\modules\directory\widgets\NewMembers::className(), [], ['sortOrder' => 10]);
         $event->sender->addWidget(\humhub\modules\directory\widgets\MemberStatistics::className(), [], ['sortOrder' => 20]);
     });
     return $this->render('members', array('keyword' => $keyword, 'group' => $group, 'users' => $searchResultSet->getResultInstances(), 'pagination' => $pagination));
 }
 public function getUser()
 {
     return $this->hasOne(User::className(), ['id' => 'user_id']);
 }
 /**
  * Creates the given ContentActiveRecord based on given submitted form information.
  * 
  * - Automatically assigns ContentContainer
  * - Access Check
  * - User Notification / File Uploads
  * - Reloads Wall after successfull creation or returns error json
  * 
  * [See guide section](guide:dev-module-stream.md#CreateContentForm)
  * 
  * @param ContentActiveRecord $record
  * @return string json 
  */
 public static function create(ContentActiveRecord $record)
 {
     Yii::$app->response->format = 'json';
     // Set Content Container
     $contentContainer = null;
     $containerClass = Yii::$app->request->post('containerClass');
     $containerGuid = Yii::$app->request->post('containerGuid', "");
     if ($containerClass === User::className()) {
         $contentContainer = User::findOne(['guid' => $containerGuid]);
         $record->content->visibility = 1;
     } elseif ($containerClass === Space::className()) {
         $contentContainer = Space::findOne(['guid' => $containerGuid]);
         $record->content->visibility = Yii::$app->request->post('visibility');
     }
     $record->content->container = $contentContainer;
     // Handle Notify User Features of ContentFormWidget
     // ToDo: Check permissions of user guids
     $userGuids = Yii::$app->request->post('notifyUserInput');
     if ($userGuids != "") {
         foreach (explode(",", $userGuids) as $guid) {
             $user = User::findOne(['guid' => trim($guid)]);
             if ($user) {
                 $record->content->notifyUsersOfNewContent[] = $user;
             }
         }
     }
     // Store List of attached Files to add them after Save
     $record->content->attachFileGuidsAfterSave = Yii::$app->request->post('fileList');
     if ($record->validate() && $record->save()) {
         return array('wallEntryId' => $record->content->getFirstWallEntryId());
     }
     return array('errors' => $record->getErrors());
 }
 /**
  * @inheritdoc
  */
 public function getContentContainerTypes()
 {
     return [Space::className(), User::className()];
 }
 /**
  * Declares the validation rules.
  */
 public function rules()
 {
     return array(array('email', 'required'), array('email', 'email'), array('email', 'canRecoverPassword'), array('verifyCode', 'captcha', 'captchaAction' => '/user/auth/captcha'), array('email', 'exist', 'targetClass' => User::className(), 'targetAttribute' => 'email', 'message' => Yii::t('UserModule.forms_AccountRecoverPasswordForm', '{attribute} "{value}" was not found!')));
 }
 public function getUser()
 {
     return $this->hasOne(\humhub\modules\user\models\User::className(), ['id' => 'created_by']);
 }
 /**
  * Declares the validation rules.
  */
 public function rules()
 {
     return array(array(['currentPassword', 'newEmail'], 'required'), array('currentPassword', \humhub\modules\user\components\CheckPasswordValidator::className()), array('newEmail', 'email'), array('newEmail', 'unique', 'targetAttribute' => 'email', 'targetClass' => \humhub\modules\user\models\User::className(), 'message' => '{attribute} "{value}" is already in use!'));
 }
<?php

use humhub\modules\content\widgets\WallEntryAddons;
use humhub\modules\space\widgets\Menu;
use humhub\commands\CronController;
use humhub\commands\IntegrityController;
use modules\embeddedmedia\Events;
use humhub\modules\user\models\User;
use humhub\components\ActiveRecord;
return ['id' => 'embeddedmedia', 'class' => 'modules\\embeddedmedia\\Module', 'namespace' => 'modules\\embeddedmedia', 'isCoreModule' => false, 'events' => array(array('class' => Menu::className(), 'event' => Menu::EVENT_INIT, 'callback' => array('modules\\embeddedmedia\\Events', 'onSpaceMenuInit')), array('class' => WallEntryAddons::className(), 'event' => WallEntryAddons::EVENT_INIT, 'callback' => array('modules\\embeddedmedia\\Events', 'onWallEntryAddonInit')), array('class' => CronController::className(), 'event' => CronController::EVENT_ON_DAILY_RUN, 'callback' => array('modules\\embeddedmedia\\Events', 'onCronDailyRun')), array('class' => IntegrityController::className(), 'event' => IntegrityController::EVENT_ON_RUN, 'callback' => array('modules\\embeddedmedia\\Events', 'onIntegrityCheck')), array('class' => ActiveRecord::className(), 'event' => \humhub\components\ActiveRecord::EVENT_BEFORE_DELETE, 'callback' => array('modules\\embeddedmedia\\Events', 'onBeforeActiveRecordDelete')), array('class' => User::className(), 'event' => User::EVENT_BEFORE_DELETE, 'callback' => array('modules\\embeddedmedia\\Events', 'onUserDelete')))];
?>

    ),
];
?>
Exemple #23
0
 public function getUsers()
 {
     return $this->hasMany(User::className(), ['user_id' => 'id']);
 }
 /**
  * Finds user related content.
  * All available scopes: ActiveQueryContent::USER_RELATED_SCOPE_*
  * 
  * @param array $scopes 
  * @param User $user
  * @return \humhub\modules\content\components\ActiveQueryContent
  */
 public function userRelated($scopes = array(), $user = null)
 {
     if ($user === null) {
         $user = Yii::$app->user->getIdentity();
     }
     $this->joinWith(['content', 'content.contentContainer']);
     $conditions = [];
     $params = [];
     if (in_array(self::USER_RELATED_SCOPE_OWN_PROFILE, $scopes)) {
         $conditions[] = 'contentcontainer.pk=:userId AND class=:userClass';
         $params[':userId'] = $user->id;
         $params[':userClass'] = $user->className();
     }
     if (in_array(self::USER_RELATED_SCOPE_SPACES, $scopes)) {
         $spaceMemberships = (new \yii\db\Query())->select("sm.id")->from('space_membership')->leftJoin('space sm', 'sm.id=space_membership.space_id')->where('space_membership.user_id=:userId AND space_membership.status=' . \humhub\modules\space\models\Membership::STATUS_MEMBER);
         $conditions[] = 'contentcontainer.pk IN (' . Yii::$app->db->getQueryBuilder()->build($spaceMemberships)[0] . ') AND contentcontainer.class = :spaceClass';
         $params[':userId'] = $user->id;
         $params[':spaceClass'] = Space::className();
     }
     if (in_array(self::USER_RELATED_SCOPE_OWN, $scopes)) {
         $conditions[] = 'content.created_by = :userId';
         $params[':userId'] = $user->id;
     }
     if (in_array(self::USER_RELATED_SCOPE_FOLLOWED_SPACES, $scopes)) {
         $spaceFollow = (new \yii\db\Query())->select("sf.id")->from('user_follow')->leftJoin('space sf', 'sf.id=user_follow.object_id AND user_follow.object_model=:spaceClass')->where('user_follow.user_id=:userId AND sf.wall_id IS NOT NULL');
         $conditions[] = 'contentcontainer.pk IN (' . Yii::$app->db->getQueryBuilder()->build($spaceFollow)[0] . ') AND contentcontainer.class = :spaceClass';
         $params[':spaceClass'] = Space::className();
         $params[':userId'] = $user->id;
     }
     if (in_array(self::USER_RELATED_SCOPE_FOLLOWED_USERS, $scopes)) {
         $userFollow = (new \yii\db\Query())->select(["uf.id"])->from('user_follow')->leftJoin('user uf', 'uf.id=user_follow.object_id AND user_follow.object_model=:userClass')->where('user_follow.user_id=:userId AND uf.wall_id IS NOT NULL');
         $conditions[] = 'contentcontainer.pk IN (' . Yii::$app->db->getQueryBuilder()->build($userFollow)[0] . ' AND contentcontainer.class=:userClass)';
         $params[':userClass'] = User::className();
         $params[':userId'] = $user->id;
     }
     if (count($conditions) != 0) {
         $this->andWhere("(" . join(') OR (', $conditions) . ")", $params);
     } else {
         // No results, when no selector given
         $this->andWhere('1=2');
     }
     return $this;
 }
Exemple #25
0
 public function getOriginator()
 {
     return $this->hasOne(\humhub\modules\user\models\User::className(), ['id' => 'originator_user_id']);
 }
 /**
  * Sets default enabled/disabled on User or/and Space Modules
  *
  * @throws CHttpException
  */
 public function actionSetAsDefault()
 {
     $moduleId = Yii::$app->request->get('moduleId');
     $module = Yii::$app->moduleManager->getModule($moduleId);
     if ($module == null) {
         throw new HttpException(500, Yii::t('AdminModule.controllers_ModuleController', 'Could not find requested module!'));
     }
     if (!$module instanceof ContentContainerModule) {
         throw new HttpException(500, 'Invalid module type!');
     }
     $model = new \humhub\modules\admin\models\forms\ModuleSetAsDefaultForm();
     $spaceDefaultModule = null;
     if ($module->hasContentContainerType(Space::className())) {
         $spaceDefaultModule = \humhub\modules\space\models\Module::findOne(['space_id' => 0, 'module_id' => $moduleId]);
         if ($spaceDefaultModule === null) {
             $spaceDefaultModule = new \humhub\modules\space\models\Module();
             $spaceDefaultModule->module_id = $moduleId;
             $spaceDefaultModule->space_id = 0;
             $spaceDefaultModule->state = \humhub\modules\space\models\Module::STATE_DISABLED;
         }
         $model->spaceDefaultState = $spaceDefaultModule->state;
     }
     $userDefaultModule = null;
     if ($module->hasContentContainerType(User::className())) {
         $userDefaultModule = \humhub\modules\user\models\Module::findOne(['user_id' => 0, 'module_id' => $moduleId]);
         if ($userDefaultModule === null) {
             $userDefaultModule = new \humhub\modules\user\models\Module();
             $userDefaultModule->module_id = $moduleId;
             $userDefaultModule->user_id = 0;
             $userDefaultModule->state = \humhub\modules\user\models\Module::STATE_DISABLED;
         }
         $model->userDefaultState = $userDefaultModule->state;
     }
     if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         if ($module->hasContentContainerType(Space::className())) {
             $spaceDefaultModule->state = $model->spaceDefaultState;
             $spaceDefaultModule->save();
         }
         if ($module->hasContentContainerType(User::className())) {
             $userDefaultModule->state = $model->userDefaultState;
             $userDefaultModule->save();
         }
         return $this->renderModalClose();
     }
     return $this->renderAjax('setAsDefault', array('module' => $module, 'model' => $model));
 }
 public function testGetFollowingCount()
 {
     Yii::$app->user->switchIdentity(User::findOne(['id' => 1]));
     $user = $this->getUserByPk(1);
     $this->assertEquals($user->getFollowingCount(User::className()), 1);
 }
Exemple #28
0
                    <div class="pull-left entry">
                        <span class="count"><?php 
echo $user->getFollowerCount();
?>
</span></a>
                        <br>
                        <span class="title"><?php 
echo Yii::t('UserModule.widgets_views_profileHeader', 'Followers');
?>
</span>
                    </div>

                    <div class="pull-left entry">
                        <span class="count"><?php 
echo $user->getFollowingCount(User::className()) + $user->getFollowingCount(Space::className());
?>
</span>
                        <br>
                        <span class="title"><?php 
echo Yii::t('UserModule.widgets_views_profileHeader', 'Following');
?>
</span>
                    </div>

                    <div class="pull-left entry">
                        <span class="count"><?php 
echo count($user->spaces);
?>
</span><br>
                        <span class="title"><?php 
 protected function getTotals($keyword, $options)
 {
     $totals = array();
     // Unset unnecessary search options
     unset($options['model']);
     unset($options['type']);
     unset($options['page']);
     unset($options['pageSize']);
     $searchResultSetCount = Yii::$app->search->find($keyword, array_merge($options, ['model' => User::className()]));
     $totals[self::SCOPE_USER] = $searchResultSetCount->total;
     $searchResultSetCount = Yii::$app->search->find($keyword, array_merge($options, ['model' => Space::className()]));
     $totals[self::SCOPE_SPACE] = $searchResultSetCount->total;
     $searchResultSetCount = Yii::$app->search->find($keyword, array_merge($options, ['type' => \humhub\modules\search\engine\Search::DOCUMENT_TYPE_CONTENT]));
     $totals[self::SCOPE_CONTENT] = $searchResultSetCount->total;
     $totals[self::SCOPE_ALL] = $totals[self::SCOPE_CONTENT] + $totals[self::SCOPE_SPACE] + $totals[self::SCOPE_USER];
     return $totals;
 }
 public function getOriginator()
 {
     return $this->hasOne(User::className(), ['id' => 'created_by']);
 }