Ejemplo n.º 1
0
    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";
    }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
 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]);
 }