HiboxUserFriendsController.php 8.52 KB
<?php
//include (Yii::app()->basePath.'/extensions/checkUserID/checkUserIDParam.class.php');
require_once Yii::app()->basePath.'/extensions/checkUserID/checkUserIDParam.class.php';
class HiboxUserFriendsController extends Controller
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column1';

    /**
     * @var CActiveRecord the currently loaded data model instance.
     */
    private $_model;

    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
                        'accessControl', // perform access control for CRUD operations
                    );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array();
    }

    /**
     * Displays a particular model.
     */
    public function actionView()
    {
        $this->render('view', array('model' => $this->_loadModel()));
    }

    /**
     * 新建用户好友关系
     */
    public function actionCreate()
    {
        $model  =  new HiboxUserFriends;
        $groupList  =  array( 0 => '默认(0)' );
        
        $this->performAjaxValidation($model);
        
        if (isset($_POST['HiboxUserFriends']))
        {
            $model->attributes = $_POST['HiboxUserFriends'];
            //$model->group_id  =  Yii::app()->request->getPost("groupID", 0);
            $model->up_time  =  date('Y-m-d H:i:s', time());
            
            if ($model->save())
            {
                $this->redirect(array('view', 'id' => array('user_id' => $model->user_id, 'friend_id' => $model->friend_id)));
            }
        }

        $this->render('create', array(
                                         'model' => $model,
                                         'groupList' => $groupList,
                     ));
    }

    /**
     * 修改用户好友关系
     */
    public function actionUpdate()
    {
        $model = $this->_loadModel();
        $groupList = array();
        
        if (isset($_POST['HiboxUserFriends']))
        {
            $model->attributes = $_POST['HiboxUserFriends'];
            if ($model->validate())
            {
                $model->up_time = date('Y-m-d H:i:s', time());               
                if ($model->save())
                {
                    $this->redirect(array('admin'));
                }
            }

        }
        else
        {
            $groupList = $this->_getGroupListByUserID($model->user_id);
        }
        
        $this->render('update', array(
                                         'model' => $model, 
                                         'groupList' => $groupList, 
                     ));
    }

    /**
     * 删除用户好友关系
     */
    public function actionDelete()
    {
        if(Yii::app()->request->isPostRequest)
        {
            $model  =  $this->_loadModel();
            $model->isdelete  =  HiboxUserFriends::HIBOX_USER_FRIENDS_DEL;
            $model->up_time  =  date('Y-m-d H:i:s', time()); 
            if (!$model->save())
            {
                print_r($model->getErrors());
            }
            
            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
            {
                $this->redirect(array('admin'));
            }
        }
        else
        {
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
        }
    }
    
    /**
     * 用户好友关系管理
     */
    public function actionAdmin()
    {
        $model = new HiboxUserFriends('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['HiboxUserFriends']))
            $model->attributes = $_GET['HiboxUserFriends'];

        $this->render('admin', array('model' => $model));
    }
    
    /**
     * Ajax方式获取用户分组列表
     */
    public function actionAjaxGetGroupListByUserID()
    {
        if (Yii::app()->request->isPostRequest)
        {
            // 从POST请求中获取用户ID, 当前选择的分组ID
            $userID  =  Yii::app()->request->getPost("userID", null);
            //$select  =  Yii::app()->request->getPost("select", null);
            // 根据用户ID获取分组列表, 返回 array(id = >groupName)
            //$data  =  $this->_getGroupListByUserID($userID);
            echo $this->_getOpTypesToTag($userID);
            // 显示用户的分组列表
            //$this->renderPartial('_group', array('data' = >$data, 'select' = >$select));
            
            unset($data);
        }
    }
    
    /**
     * Ajax方式检查用户ID和好友ID是否是唯一的
     * *返回:
     * 0。啥关系都没有(包含删除好友关系但未添加到黑名单)
     * 1。两者是好友关系
     * 2。两者是黑名单关系
     */
    public function actionAjaxCheckIsUniqued()
    {
        if (Yii::app()->request->isPostRequest)
        {
            // 从POST请求中获取用户ID, 当前选择的分组ID
            $userID  =  Yii::app()->request->getPost("userID", null);
            $friendID  =  Yii::app()->request->getPost("friendID", null);
            if (isset($userID, $friendID))
            {
                
                echo CheckUserFrinedRelation($userID, $friendID);
            }
        }
    }
    
    /**
     * 根据用户ID获取分组列表
     * 
     * @param int $userID
     * @param mixed $select
     */
    private function _getGroupListByUserID($userID = null, $select = null)
    {
        $data  =  array();
        
        if (isset($userID) && is_numeric($userID))
        {
            $connection  =  Yii::app()->db;
            $sqlStatement  =  "CALL p_i_group_s(:userID)";
            $command  =  $connection->createCommand($sqlStatement);
            $command->bindValue(':userID', $userID);
            $groupList  =  $command->queryAll();
            
            foreach ($groupList as $key => $group)
            {
                $key  =  $group['id'];
                $data[$key]  =  $group['groupName'];
            }
        }
        return $data;
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     */
    private function _loadModel()
    {
        if($this->_model === null)
        {
            if(isset($_GET['id']) && is_array($_GET['id']))
                $this->_model  =  HiboxUserFriends::model()->findbyPk($_GET['id']);
                
            if($this->_model === null)
                throw new CHttpException(404, 'The requested page does not exist.');
        }
        return $this->_model;
    }
    
    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if((isset($_POST['ajax'])) && ($_POST['ajax'] === 'hibox-user-friends-form'))
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
    
    /**
     * 为一个用户添加联系人分组
     */
    public function actionCreateOpTypes()
    {
        $model  =  new HiboxUserGroupInfo();
        if((isset($_POST['HiboxUserFriends']))  && (isset($_POST['HiboxUserGroupInfo_groupName'])))
        {
            if((!empty($_POST['HiboxUserFriends']['user_id'])) && (!empty($_POST['HiboxUserGroupInfo_groupName'])))
            {
                $model->attributes = $_POST['HiboxUserFriends'];
                $model->groupName = $_POST['HiboxUserGroupInfo_groupName'];
                if($model->save())
                {
                    echo $this->_getOpTypesToTag($model->user_id);
                }
            }
        }
        //exit;
    }
    /**
     * 获取一个用户联系人分组
     */
    public function _getOpTypesToTag($userId)
    {
        $data  =  HiboxUserGroupInfo::model()->findAll('user_id = :user_id order by id desc', array(':user_id' => (int)$userId));

        $data = CHtml::listData($data, 'id', 'groupName');
        
        $tagString  =  '';
        
        foreach($data as $value => $name)
        {
             $tagString .=  CHtml::tag('option', array('value'  => $value), CHtml::encode($name), true);
        }
        
        return $tagString;
    }
}
?>