/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Invitation::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere(['id' => $this->id, 'timestamp' => $this->timestamp]); $query->andFilterWhere(['like', 'email', $this->email])->andFilterWhere(['like', 'status', $this->status])->andFilterWhere(['like', 'send_key', $this->send_key]); return $dataProvider; }
public function getInvite() { return $this->hasOne(Invitation::className(), ['email' => 'email']); }
/** * Logs in a user. * * @return mixed */ public function onAuthSuccess($client) { $data = Yii::$app->getRequest()->getQueryParam("auth_key"); if (!$this->getInviteKey($data)) { Yii::$app->session->setFlash("error", "Not have permision"); return $this->redirect(["/"]); } $attributes = $client->getUserAttributes(); /** @var Auth $auth */ $auth = Auth::find()->where(['source' => $client->getId(), 'source_id' => $attributes['id']])->one(); if (Yii::$app->user->isGuest) { if ($auth) { $user = $auth->user; Yii::$app->user->login($user); return $this->redirect("site/user"); } else { // signup $email = isset($attributes['email']) ? $attributes['email'] : ""; $invite = Invitation::find()->where(['send_key' => $data, 'email' => $email])->one(); if (isset($attributes['name']) && !empty($invite)) { $password = Yii::$app->security->generateRandomString(8); if (!isset($attributes['email'])) { $attributes['email'] = ''; } $fileName = null; $picturePath = null; if (isset($attributes['picture']) && isset($attributes['picture']['data']) && isset($attributes['picture']['data']['url'])) { $picturePath = $attributes['picture']['data']['url']; } elseif (isset($attributes['profile_image_url'])) { $picturePath = $attributes['profile_image_url']; } // COMMENT: ADD PHOTO FROM FACEBOOK DATA TO DATABASE method file_put_contents - http://php.net/manual/ru/function.file-put-contents.php if ($picturePath) { $photoFile = file_get_contents($picturePath); $security = new \yii\base\Security(); $fileName = $security->generateRandomString() . '.jpg'; $directory = Yii::getAlias('@frontend/web/' . Yii::$app->params['user-photos-directory']); file_put_contents($directory . DIRECTORY_SEPARATOR . $fileName, $photoFile); } $user = new User(['username' => $attributes['name'], 'email' => $attributes['email'], 'password' => $password, 'image' => $fileName, 'sex' => !empty($attributes['gender']) ? $attributes['gender'] : "", 'country' => !empty($attributes['hometown']['name']) ? $attributes['hometown']['name'] : "", 'created_at' => time(), 'updated_at' => time()]); $user->generateAuthKey(); $user->generatePasswordResetToken(); $transaction = $user->getDb()->beginTransaction(); if ($user->save()) { $auth = new Auth(['user_id' => $user->id, 'source' => $client->getId(), 'source_id' => (string) $attributes['id'], 'email' => $attributes['email']]); $invite->status = Invitation::STATUS_SIGNUP; $invite->save(); if ($auth->save()) { $transaction->commit(); Yii::$app->user->login($user); return $this->redirect(["/"]); } else { print_r($auth->getErrors()); } } else { print_r($user->getErrors()); } } else { Yii::$app->session->setFlash("error", "Email not equals"); return $this->redirect(['site/invite', 'auth_key' => $data]); } } } else { // user already logged in if (!$auth) { // add auth provider $auth = new Auth(['user_id' => Yii::$app->user->id, 'source' => $client->getId(), 'source_id' => $attributes['id']]); $auth->save(); } } }
public function actionInvite() { $invite = new Invitation(); if ($invite->load(Yii::$app->request->post())) { if (Yii::$app->request->isAjax) { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return \yii\bootstrap\ActiveForm::validate($invite); } $invite->send_key = Yii::$app->security->generateRandomString(); $invite->status = Invitation::STATUS_SEND; $invite->timestamp = time(); $invite->timestamp_registration = 0; if ($invite->save()) { $invite->sendInvite(); return $this->redirect(Yii::$app->request->referrer); } } return $this->renderAjax("modal-invite", ['model' => $invite]); }