Browse Source

Merge pull request #152 from sunshineJi/master

增加用户管理功能
huamanshu 9 years ago
parent
commit
425ce4f55f

+ 124 - 0
controllers/UserManagementController.php

@@ -0,0 +1,124 @@
+<?php
+
+namespace app\controllers;
+
+use yii;
+use yii\web\NotFoundHttpException;
+use yii\data\Pagination;
+use app\components\Controller;
+use app\components\GlobalHelper;
+use app\models\User;
+use app\models\forms\AddUserForm;
+
+class UserManagementController extends Controller {
+    
+    public function beforeAction($action) {
+        parent::beforeAction($action);
+        if (!GlobalHelper::isValidAdmin()) {
+            throw new \Exception(yii::t('conf', 'you are not active'));
+        }
+        return true;
+    }
+
+    /**
+     * 用户管理
+     */
+    public function actionIndex($page = 1, $size = 10) {
+        $data = User::find()->orderBy('id desc');
+
+        $pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $size]);
+        $userList = $data->offset(($page - 1) * $size)->limit($size)->asArray()->all();
+
+        return $this->render('index', [
+            'userList' => $userList,
+            'pages' => $pages,
+        ]);
+    }
+
+    /**
+     * 设置为管理员
+     * @return json
+     */
+    public function actionUpdateToAdmin($uid) {
+        $res = User::updateAll(['role' => 1], "id=$uid");
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 设置为普通用户
+     * @return  json 
+     */
+    public function actionUpdateToUser($uid) {
+        $res = User::updateAll(['role' => 10], "id=$uid");
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 帐号冻结
+     * @return  json 
+     */
+    public function actionBlockedAccount($uid) {
+        $res = User::updateAll(['status' => -1], "id=$uid");
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 帐号解冻
+     * @return  json
+     */
+    public function actionUnBlockedAccount($uid) {
+        $res = User::updateAll(['status' => 10], "id=$uid");
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 删除帐号
+     * @return json
+     */
+    public function actionDeleteUser($uid) {
+        $user = User::findOne($uid);
+        $res = $user->delete();
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 修改真实姓名
+     * @return   json
+     */
+    public function actionUpdateRealName($name, $uid) {
+        $res = User::updateAll(['realname' => $name], "id=$uid");
+
+        $this->renderJson([], $res ? 0 : -1);
+    }
+
+    /**
+     * 新增用户
+     */
+    public function actionAddUser() {
+        $model = new AddUserForm();
+
+        if ($model->load(Yii::$app->request->post()) ) {
+            if ($user = $model->signup()) {
+                Yii::$app->mail->compose('accountNotice', ['user' => $user])
+                    ->setFrom(Yii::$app->mail->messageConfig['from'])
+                    ->setTo($user->email)
+                    ->setSubject('瓦力平台 - ' . $user->realname . '帐号已开通')
+                    ->send();
+                
+                return $this->redirect('@web/user-management');
+            }
+            else {
+                throw new \Exception(yii::t('user-management', 'email exists'));
+            }
+        }
+        
+        return $this->render('adduser', [
+            'model' => $model
+        ]);
+    }
+}

+ 13 - 0
mail/accountNotice.php

@@ -0,0 +1,13 @@
+<?php
+use yii\helpers\Html;
+
+/**
+ * @var yii\web\View $this
+ * @var common\models\User $user
+ */
+?>
+
+<?= yii::t('user-management', 'dear') ?><strong><?= $user->realname ?></strong>:
+
+<br><br>
+<span style="text-indent: 2em"><?= yii::t('user-mangement', 'notice account has been opened') ?></span>

+ 38 - 0
messages/en/user-management.php

@@ -0,0 +1,38 @@
+<?php
+
+return [
+
+    'users' => 'User management',
+    'u_username' => 'account',
+    'u_realname' => 'realname',
+    'u_is_admin' => 'Is admin',
+    'u_status' => 'Account status',
+    'u_oprea' => 'Operation',
+    'u_update_admin' => 'Set administrator',
+    'u_update_user' => 'Unset administrator',
+    'u_delete_user' => 'Delete Account',
+    'u_blocked_account' => 'Blocked account',
+    'u_un_blocked_account' => 'Free account',
+    'u_update_real_name' => 'Upadate realname',
+    'js update to admin' => 'Set the NAME to the administrator?',
+    'js update to user' => 'Confirmation set NAME to ordinary users?',
+    'js blocked account' => 'Confirmation will be the NAME of the account is frozen?',
+    'js unblocked account' => 'Confirm it will lift its freeze the NAME of the account?',
+    'js delete user' => 'Will confirm the NAME of the account permanently delete?(irreversible)',
+    'u_title_update_real_name' => 'Update<span>NAME</span>account realname',
+    'u_notice_label_real_name' => 'Please enter realname',
+    'u_btn_submit' => 'Ok',
+    'u_btn_cancel' => 'Cancel',
+    'u_real_name_illegal' => 'Name cannot be empty and can not contain special symbols',
+
+    'add_user_title' => 'New users',
+    'adduser email' => 'Please enter the email address',
+    'adduser password' => 'Please enter the password',
+    'adduser realname' => 'Please enter the realname',
+    'adduser role' => 'Please choice the role',
+    'adduser-platform' => 'confirm',
+
+    'dear' => 'dear',
+    'notice account has been opened' => 'The account has been opened',
+    'email exists' => 'User email already exists',
+];

+ 38 - 0
messages/zh-CN/user-management.php

@@ -0,0 +1,38 @@
+<?php
+
+return [
+    'users' => '用户管理',
+    'u_username' => '帐号',
+    'u_realname' => '姓名',
+    'u_is_admin' => '是否管理员',
+    'u_status' => '帐号状态',
+    'u_oprea' => '操作',
+    'u_update_admin' => '设为管理员',
+    'u_update_user' => '设为普通用户',
+    'u_delete_user' => '删除用户',
+    'u_blocked_account' => '冻结帐号',
+    'u_un_blocked_account' => '帐号解冻',
+    'u_update_real_name' => '修改姓名',
+    'js update to admin' => '确定将NAME设置为管理员?',
+    'js update to user' => '确定将NAME设置为普通用户?',
+    'js blocked account' => '确认将NAME的帐号冻结吗?',
+    'js unblocked account' => '确认将NAME的帐号解除冻结吗?',
+    'js delete user' => '确认将NAME的帐号永久删除吗?(不可恢复)',
+    'u_title_update_real_name' => '修改<span>NAME</span>帐号的姓名',
+    'u_notice_label_real_name' => '请输入姓名',
+    'u_btn_submit' => '确认',
+    'u_btn_cancel' => '取消',
+    'u_real_name_illegal' => '姓名不能为空,且不能包含特殊符号',
+    'u_add_user' => '新增用户',
+
+    'add_user_title' => '新增用户',
+    'adduser email' => '请输入邮箱地址',
+    'adduser password' => '请输入密码',
+    'adduser realname' => '请输入姓名',
+    'adduser role' => '请选择角色',
+    'adduser-platform' => '确认添加',
+
+    'dear' => '亲爱的',
+    'notice account has been opened' => '帐号已经开通',
+    'email exists' => '用户邮箱已经存在',
+];

+ 3 - 1
models/User.php

@@ -139,7 +139,9 @@ class User extends ActiveRecord implements IdentityInterface
             $this->generateAuthKey();
             $this->generateEmailConfirmationToken();
             // 名字与邮箱
-            $this->realname = $this->username;
+             if (!$this->realname) {
+                $this->realname = $this->username;
+            }
             $this->username = $this->email;
         }
         return parent::beforeSave($insert);

+ 60 - 0
models/forms/AddUserForm.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace app\models\forms;
+
+use yii;
+use yii\base\Model;
+use app\models\User;
+use app\models\queries\UserQuery;
+
+class AddUserForm extends Model {
+
+    public $email;
+    public $password;
+    public $realname;
+    public $role;
+
+    public function attributeLabels()
+    {
+        return [
+            'email' => '用户名',
+            'password' => '密码',
+            'realname' => '姓名',
+            'role' => '角色',
+        ];
+    }
+
+    public function rules() {
+        return [
+            [['email',  'password', 'realname', 'role'], 'required'],
+
+            ['email', 'email'],
+
+            ['password', 'string', 'min' => 6, 'max' => 30],
+
+            ['realname', 'string', 'min' => 2],
+            ['role', 'in', 'range' => [User::ROLE_DEV, User::ROLE_ADMIN]],
+        ];
+    }
+
+    public function signup() {
+        if ($this->validate()) {
+            $user = new User();
+            $user->username = $this->email;
+            $user->email = $this->email;
+            $user->role = $this->role;
+            $user->realname = $this->realname;
+            $user->setpassword($this->password);
+
+            // 不用激活  给默认头像
+            $user->is_email_verified = 1;
+            $user->avatar = 'default.jpg';
+
+            if ($user->save()) {
+                return $user;
+            }
+
+            return null;
+        }
+    }
+}

+ 41 - 0
views/user-management/adduser.php

@@ -0,0 +1,41 @@
+<?php
+/**
+ * @var yii\web\View $this
+ */
+$this->title = yii::t('user-management', 'add_user_title');
+use yii\helpers\Html;
+use yii\widgets\ActiveForm;
+use app\models\user;
+?>
+<style type="text/css">
+    .panel {
+        padding: 30px;
+    }
+</style>
+<div class="box">
+    <div class="box-body table-responsive no-padding clearfix">
+            <div class="panel">
+                <?php $form = ActiveForm::begin(); ?>
+                <?= $form->field($model, 'email')->label(Yii::t('user-management', 'adduser email')) ?>
+                <?= $form->field($model, 'password')->label(Yii::t('user-management', 'adduser password')) ?>
+                <?= $form->field($model, 'realname')->label(Yii::t('user-management', 'adduser realname')) ?>
+                <?= $form->field($model, 'role')->label(Yii::t('user-management', 'adduser role'))->dropDownList([
+                    User::ROLE_DEV => \Yii::t('w', 'user_role_' . User::ROLE_DEV),
+                    User::ROLE_ADMIN => \Yii::t('w', 'user_role_' . User::ROLE_ADMIN),
+                ]) ?>
+                <div class="form-group">
+                    <?= Html::submitButton(yii::t('user-management','adduser-platform'), ['class' => 'btn btn-primary', 'name' => 'submit-button']) ?>
+                </div>
+                <?php ActiveForm::end(); ?>
+            </div>
+        <!-- 模态框(Modal) -->
+        <div class="modal fade" id="update-real-name" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+        </div>
+    </div><!-- /.box-body -->
+</div>
+
+<script>
+    jQuery(function($) {
+        
+    });
+</script>

+ 200 - 0
views/user-management/index.php

@@ -0,0 +1,200 @@
+<?php
+/**
+ * @var yii\web\View $this
+ */
+$this->title = yii::t('user-management', 'users');
+use yii\helpers\Url;
+use yii\widgets\LinkPager;
+?>
+<style type="text/css">
+    .box-header {
+        margin-bottom: 20px;
+    }
+</style>
+<div class="box">
+    <div class="box-header">
+        <a href="<?= Url::to('@web/user-management/add-user') ?>" class="btn btn-default btn-add-user">
+            <i class="icon icon-user"></i>
+            <?= yii::t('user-management', 'u_add_user') ?>
+        </a>
+    </div>
+    <div class="box-body table-responsive no-padding clearfix">
+        <table class="table table-striped table-bordered table-hover">
+            <thead>
+                <tr>
+                    <th><?= yii::t('user-management', 'u_username') ?></th>
+                    <th><?= yii::t('user-management', 'u_realname') ?></th>
+                    <th><?= yii::t('user-management', 'u_is_admin') ?></th>
+                    <th><?= yii::t('user-management', 'u_status') ?></th>
+                    <th><?= yii::t('user-management', 'u_oprea') ?></th>
+                </tr>
+            </thead>
+            <tbody>
+                <?php foreach ($userList as $row) {?>
+                    <tr>
+                        <td><?= $row['username'] ?></td>
+                        <td><?= $row['realname'] ?></td>
+                        <td>
+                            <?php if ($row['role'] == 1) { ?>
+                                <i class="icon icon-user-md blue"></i>
+                            <?php } else { ?>
+                                <i class="icon icon-user"></i>
+                            <?php } ?>
+                        </td>
+                        <td>
+                            <?php if ($row['status'] == 10) { ?>
+                                <i class="icon icon-unlock"></i>
+                            <?php } else { ?>
+                                <i class="icon icon-lock red"></i>
+                            <?php } ?>
+                        </td>
+                        <td>
+                            <?php if ($row['role'] != 1) { ?>
+                                <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary update-to-admin"><?= yii::t('user-management', 'u_update_admin') ?></button>
+                            <? } else { ?>
+                                <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary update-to-user"><?= yii::t('user-management', 'u_update_user') ?></button>
+                            <?php } ?>
+                            <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary delete-user"><?= yii::t('user-management', 'u_delete_user') ?></button>
+                            <?php if ($row['status'] == 10) { ?>
+                                <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary blocked-account"><?= yii::t('user-management', 'u_blocked_account') ?></button>
+                            <? } else { ?>
+                                <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary un-blocked-account"><?= yii::t('user-management', 'u_un_blocked_account') ?></button>
+                            <?php } ?>
+                            <button data-user-id="<?= $row['id']?>" data-username="<?= $row['username'] ?>" class="btn btn-primary update-real-name" data-toggle="modal" data-target="#update-real-name"><?= yii::t('user-management', 'u_update_real_name') ?></button>
+                        </td>
+                    </tr>
+                <?php } ?>
+            </tbody>
+        </table>
+        <?= LinkPager::widget(['pagination' => $pages]); ?>
+        <!-- 模态框(Modal) -->
+        <div class="modal fade" id="update-real-name" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+            <div class="modal-dialog modal-lg">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <h4 class="modal-title"><?= yii::t('user-management', 'u_title_update_real_name') ?></h4>
+                    </div>
+                    <div class="modal-body">
+                        <div class="form-group">
+                            <label for="real-name" class="control-label"><?= yii::t('user-management', 'u_notice_label_real_name') ?>:</label>
+                            <input type="text" class="form-control" id="real-name">
+                          </div>
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-default" data-dismiss="modal"><?= yii::t('user-management', 'u_btn_cancel') ?></button>
+                        <button type="button" class="btn btn-primary"><?= yii::t('user-management', 'u_btn_submit') ?></button>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </div><!-- /.box-body -->
+</div>
+
+<script>
+    jQuery(function($) {
+        var handlerList = {
+            // 改为管理员
+            '.update-to-admin': {
+                url: '<?= Url::to('@web/user-management/update-to-admin') ?>',
+                notice: '<?= yii::t('user-management', 'js update to admin') ?>',
+                username: 'data-username',
+                params: {
+                    uid: 'data-user-id'
+                }
+            },
+            // 改为普通用户
+            '.update-to-user': {
+                url: '<?= Url::to('@web/user-management/update-to-user') ?>',
+                notice: '<?= yii::t('user-management', 'js update to user') ?>',
+                username: 'data-username',
+                params: {
+                    uid: 'data-user-id'
+                }
+            },
+            // 冻结帐号
+            '.blocked-account': {
+                url: '<?= Url::to('@web/user-management/blocked-account') ?>',
+                notice: '<?= yii::t('user-management', 'js blocked account') ?>',
+                username: 'data-username',
+                params: {
+                    uid: 'data-user-id'
+                }
+            },
+            // 帐号解冻
+            '.un-blocked-account': {
+                url: '<?= Url::to('@web/user-management/un-blocked-account') ?>',
+                notice: '<?= yii::t('user-management', 'js unblocked account') ?>',
+                username: 'data-username',
+                params: {
+                    uid: 'data-user-id'
+                }
+            },
+            // 删除帐号
+            '.delete-user': {
+                url: '<?= Url::to('@web/user-management/delete-user') ?>',
+                notice: '<?= yii::t('user-management', 'js delete user') ?>',
+                username: 'data-username',
+                params: {
+                    uid: 'data-user-id'
+                }
+            }
+        };
+
+        for (var i in handlerList) {
+            !function () {
+                var tmp = handlerList[i];
+                $(i).unbind().click(function () {
+                    var me = $(this),
+                        notice = tmp.notice.replace(/NAME/, me.attr(tmp.username)),
+                        url = tmp.url + '?',
+                        params = [];
+
+                    for (var j in tmp.params) {
+                        params.push(j + '=' + me.attr(tmp.params[j]));
+                    }
+                    url += params.join('&');
+                    
+                    if (confirm(notice)) {
+                        $.getJSON(url, function (o) {
+                            if (o.code === 0) {
+                                window.location.reload();
+                            }
+                            else {
+                                alert(o.message);
+                            }
+                        });
+                    }
+                });
+            }();
+        };
+
+        $('#update-real-name').on('show.bs.modal', function (e) {
+            var me = $(this),
+                srcTar = $(e.relatedTarget),
+                modalTit = me.find('h4'),
+                uid = srcTar.attr('data-user-id'),
+                subBtn = me.find('.btn-primary'),
+                name = me.find('#real-name');
+
+            var title = modalTit.html().replace(/<span>(.*?)<\/span>/, '<span>' + srcTar.attr('data-username') + '</span>');
+            modalTit.html(title);
+
+            subBtn.click(function () {
+                if (name.val().length == 0 || !/^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[\w])*$/.test(name.val())) {
+                    alert('<?= yii::t('user-management', 'u_real_name_illegal') ?>');
+                    return false;
+                }
+
+                $.getJSON('<?= Url::to('@web/user-management/update-real-name') ?>?uid=' + uid + '&name=' + name.val(), function (o) {
+                    if (o.code === 0) {
+                        window.location.reload();
+                    }
+                    else {
+                        alert(o.message);
+                    }
+                })
+            });
+        });
+    });
+</script>