%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/models/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/user/models/Invite.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2015 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\user\models; use humhub\components\access\ControllerAccess; use humhub\components\ActiveRecord; use humhub\modules\user\models\User; use humhub\modules\space\models\Space; use humhub\modules\user\Module; use Yii; use yii\helpers\Url; /** * This is the model class for table "user_invite". * * @property integer $id * @property integer $user_originator_id * @property integer $space_invite_id * @property string $email * @property string $source * @property string $token * @property string $created_at * @property integer $created_by * @property string $updated_at * @property integer $updated_by * @property string $language * @property string $firstname * @property string $lastname * @property string $captcha */ class Invite extends ActiveRecord { const SOURCE_SELF = 'self'; const SOURCE_INVITE = 'invite'; const TOKEN_LENGTH = 12; public $captcha; /** * @inheritdoc */ public static function tableName() { return 'user_invite'; } /** * @inheritdoc */ public function rules() { return [ [['user_originator_id', 'space_invite_id'], 'integer'], [['token'], 'unique'], [['firstname', 'lastname'], 'string', 'max' => 255], [['source', 'token'], 'string', 'max' => 254], [['email'], 'string', 'max' => 150], [['language'], 'string', 'max' => 10], [['email'], 'required'], [['email'], 'unique'], [['email'], 'email'], [['email'], 'unique', 'targetClass' => User::class, 'message' => Yii::t('UserModule.base', 'E-Mail is already in use! - Try forgot password.')], [['captcha'], 'captcha', 'captchaAction' => 'user/auth/captcha', 'on' => static::SOURCE_INVITE], ]; } /** * @inheritdoc */ public function scenarios() { $scenarios = parent::scenarios(); $scenarios['invite'] = ['email']; if ($this->showCaptureInRegisterForm()) { $scenarios['invite'][] = 'captcha'; } return $scenarios; } /** * @inheritdoc */ public function attributeLabels() { return [ 'email' => Yii::t('UserModule.invite', 'Email'), 'created_at' => Yii::t('UserModule.base', 'Created at'), 'source' => Yii::t('UserModule.base', 'Source'), 'language' => Yii::t('base', 'Language'), ]; } /** * @inheritdoc */ public function beforeSave($insert) { if ($insert && $this->token == '') { $this->token = Yii::$app->security->generateRandomString(self::TOKEN_LENGTH); } return parent::beforeSave($insert); } public function selfInvite() { if (Yii::$app->settings->get('maintenanceMode')) { Yii::$app->getView()->warn(ControllerAccess::getMaintenanceModeWarningText()); return false; } $this->source = self::SOURCE_SELF; $this->language = Yii::$app->language; // Delete existing invite for e-mail - but reuse token $existingInvite = Invite::findOne(['email' => $this->email]); if ($existingInvite !== null) { $this->token = $existingInvite->token; $existingInvite->delete(); } if ($this->allowSelfInvite() && $this->save()) { $this->sendInviteMail(); return true; } return false; } /** * Sends the invite e-mail */ public function sendInviteMail() { /** @var Module $module */ $module = Yii::$app->moduleManager->getModule('user'); $registrationUrl = Url::to(['/user/registration', 'token' => $this->token], true); // User requested registration link by its self if ($this->source == self::SOURCE_SELF) { $mail = Yii::$app->mailer->compose([ 'html' => '@humhub/modules/user/views/mails/UserInviteSelf', 'text' => '@humhub/modules/user/views/mails/plaintext/UserInviteSelf' ], [ 'token' => $this->token, 'registrationUrl' => $registrationUrl ]); $mail->setTo($this->email); $mail->setSubject(Yii::t('UserModule.base', 'Welcome to %appName%', ['%appName%' => Yii::$app->name])); $mail->send(); } elseif ($this->source == self::SOURCE_INVITE && $this->space !== null) { if ($module->sendInviteMailsInGlobalLanguage) { Yii::$app->setLanguage(Yii::$app->settings->get('defaultLanguage')); } $mail = Yii::$app->mailer->compose([ 'html' => '@humhub/modules/user/views/mails/UserInviteSpace', 'text' => '@humhub/modules/user/views/mails/plaintext/UserInviteSpace' ], [ 'token' => $this->token, 'originator' => $this->originator, 'originatorName' => $this->originator->displayName, 'space' => $this->space, 'registrationUrl' => $registrationUrl ]); $mail->setTo($this->email); $mail->setSubject(Yii::t('UserModule.base', 'You\'ve been invited to join {space} on {appName}', ['space' => $this->space->name, 'appName' => Yii::$app->name])); $mail->send(); // Switch back to users language Yii::$app->setLanguage(Yii::$app->user->language); } elseif ($this->source == self::SOURCE_INVITE) { // Switch to systems default language if ($module->sendInviteMailsInGlobalLanguage) { Yii::$app->setLanguage(Yii::$app->settings->get('defaultLanguage')); } $mail = Yii::$app->mailer->compose([ 'html' => '@humhub/modules/user/views/mails/UserInvite', 'text' => '@humhub/modules/user/views/mails/plaintext/UserInvite' ], [ 'originator' => $this->originator, 'originatorName' => $this->originator->displayName, 'token' => $this->token, 'registrationUrl' => $registrationUrl ]); $mail->setTo($this->email); $mail->setSubject(Yii::t('UserModule.invite', 'You\'ve been invited to join %appName%', ['%appName%' => Yii::$app->name])); $mail->send(); // Switch back to users language Yii::$app->setLanguage(Yii::$app->user->language); } } /** * Return user which triggered this invite * * @return \yii\db\ActiveQuery */ public function getOriginator() { return $this->hasOne(User::class, ['id' => 'user_originator_id']); } /** * Return space which is involved in this invite * * @return \yii\db\ActiveQuery */ public function getSpace() { return $this->hasOne(Space::class, ['id' => 'space_invite_id']); } /** * Allow users to invite themself * * @return boolean allow self invite */ public function allowSelfInvite() { return (!Yii::$app->settings->get('maintenanceMode') && Yii::$app->getModule('user')->settings->get('auth.anonymousRegistration')); } public function showCaptureInRegisterForm() { return (Yii::$app->getModule('user')->settings->get('auth.showCaptureInRegisterForm')); } }