public function actionInviteTop($type, $limit = 100, $giveinvites = 0, $dry = false, $delay = 5) { $admin = User::model()->findByPk(1); $crt = new CDbCriteria(["condition" => "t.can & 1::bit(16) = 0::bit(16)", "limit" => (int) $limit]); if ($type == "karma") { $crt->order = "rate_u desc"; } elseif ($type == "rating") { $crt->order = "rate_t desc"; } elseif ($type == "translations") { $crt->order = "n_trs desc"; } elseif ($type == "owners") { $crt->join = "RIGHT JOIN books b ON b.owner_id = t.id"; $crt->addCondition("b.n_verses > 10 and b.last_tr > '2014-08-08' and b.last_tr <= '2015-01-01'"); $crt->order = "n_trs desc"; } else { echo "--type=karma|rating|owners|translations\n"; } $crt->join .= "\nLEFT JOIN reg_invites invites ON t.id = invites.to_id"; $crt->addCondition("invites.to_id IS NULL"); $users = User::model()->findAll($crt); if (count($users) == 0) { echo "Нет кандидатов для приглашения\n"; return; } $cnt = 0; foreach ($users as $user) { printf("Приглашается %d / %d %16s karma:%3d rating:%5d ntrs:%5d ...%s", ++$cnt, count($users), $user->login, $user->rate_u, $user->rate_t, $user->n_trs, str_repeat(" ", 16)); $user->n_invites = $giveinvites; $user->save(false, ["n_invites"]); $invite = RegInvite::gen($admin); $invite->to_id = $user->id; $invite->to_email = $user->email; if ($giveinvites > 0) { $invite->message = <<<TTT Вы можете пригласить сюда ещё {$giveinvites} человек. Для этого после восстановления членства, зайдите в свой профиль на вкладку «Приглашения»."; TTT; } if ($dry) { echo "\n"; } else { try { $invite->sendMail(); } catch (Exception $e) { echo "ERROR SENDING to {$invite->to_email}: " . $e->getMessage() . "\n"; } if (!$invite->save(false)) { echo "ERROR SAVE\n" . print_r($invite->errors, true) . "\n"; } sleep($delay); echo "\r"; } } echo "\n"; }
public function actionIndex($u = null, $invite = null) { $user = new User("register"); $user->lang = 1; if (p()["registerType"] == "INVITE") { /** Магия с инвайтами */ $invite = RegInvite::model()->findByAttributes(["from_id" => (int) $u, "code" => $invite]); if (!$invite) { Yii::app()->user->setFlash("error", "Ваше приглашение не обнаружено. Тому может быть несколько причин: приглашение могло устареть, оно могло быть отозвано отправителем или ваша почтовая система исказила ссылку на регистрацию, по которой вы перешли."); $this->redirect("/"); } if ($invite->to_id) { // Инвайт адресный, просто активируем аккаунт и редиректим на главную $invite->buddy->invited_by = $invite->from_id; $invite->buddy->can_set(User::CAN_LOGIN, 1); $invite->buddy->save(false, ["invited_by", "can"]); // Удаляем инвайт, потому что его использовали $invite->delete(); // И пиздуем на главную с флагом "fresh meat" Yii::app()->user->setFlash("success", "Рады видеть вас в наших жидких рядах, {$invite->buddy->login}! На вас вся надежда. Вводите ваш старый пароль."); Yii::app()->user->setState("loginAs", $invite->buddy->login); $this->redirect("/"); } $user->email = $invite->to_email; $user->invited_by = $invite->from_id; } $this->performAjaxValidation($user); if (isset($_POST["User"])) { $user->attributes = $_POST["User"]; if ($user->save()) { // отправить письмо $message = new YiiMailMessage("Добро пожаловать на " . Yii::app()->name); $message->view = "welcome"; $message->from = Yii::app()->params['adminEmail']; $message->addTo($user->email); $message->setBody(array("user" => $user), "text/html"); Yii::app()->mail->send($message); // залогинить $identity = new UserIdentity($user->login, $_POST["User"]["pass"]); $identity->authenticate(); $duration = 3600 * 24 * 30; Yii::app()->user->login($identity, $duration); if (p()["registerType"] == "INVITE") { $invite->delete(); } $this->redirect("/register/done"); } } $this->render("index", array("model" => $user)); }
public function actionAdmin($id) { if (!Yii::app()->user->can("admin")) { throw new CHttpException(404); } $user = $this->loadUser($id); $user->scenario = "edit-admin"; if (Yii::app()->request->isPostRequest) { $user->setAttributes($_POST["User"]); if (is_array($_POST["can"])) { foreach ($_POST["can"] as $bit) { $user->can_set($bit, 1); } } if ($user->save()) { Yii::app()->user->setFlash("success", "Сохранено."); } } $remindToken = RemindToken::model()->findByAttributes(["user_id" => $user->id]); $sentInvites = RegInvite::model()->with("sender")->findAllByAttributes(["to_id" => $user->id]); $this->side_view = ["profile_side" => ["user" => $user, "userinfo" => $user->userinfo]]; $this->render("admin", ["user" => $user, "remindToken" => $remindToken, "sentInvites" => $sentInvites]); }