get checked roles

i habe thos checkboxlist to post to db the user roles:


echo cHtml::checkBoxList($model->RoleName,'RoleName',CHtml::listData(Yii::app()->authManager->getRoles(), 'name', 'name'),

            array(

              'class'=>'UserRole_RoleName'

        ));

when i check i have a ajax script to insert in db and it’s working fine but now qhat i want to do is to retrieve the assigned roles to the checkboxlist

How to do that?


public static string checkBoxList(string $name, mixed $select, array $data, array $htmlOptions=array ( ))

$select:selection of the check boxes. This can be either a string for single selection or an array for multiple selections. you can check from this…




$select = //select rolename from table

echo cHtml::checkBoxList($model->RoleName,$select,CHtml::listData(Yii::app()->authManager->getRoles(), 'name', 'name'),

            array(

              'class'=>'UserRole_RoleName'

        ));

as far i understood parameter $selection is where i have to get what comes from DB right?

Now i have this code but without success:


echo cHtml::checkBoxList('RoleName',UserRole::model()->findAllBySql("select rolename from user_role"),CHtml::listData(Yii::app()->authManager->getRoles(), 'name', 'name'),

            array(

              'class'=>'UserRole_RoleName'

        ));

try this


$role = UserRole::model()->findAllBySql("select rolename from user_role");

		$rolename = array();

		foreach($role as $r) {

			array_push($rolename, $r->id_country);

		}

echo cHtml::checkBoxList('RoleName',$rolename,CHtml::listData(Yii::app()->authManager->getRoles(), 'name', 'name'),

            array(

              'class'=>'UserRole_RoleName'

        ));



i did like you said and nothing


$role = UserRole::model()->findAllBySql("select rolename from user_role");

                $rolename = array();

                foreach($role as $r) {

                        array_push($rolename, $r->RoleName);

                }

    echo cHtml::checkBoxList('RoleName',$rolename,CHtml::listData(Yii::app()->authManager->getRoles(), 'name', 'name'),

            array(

              'class'=>'UserRole_RoleName'

        ));

  


    ?>

strange…

i do with that code in all my checkboxlist and it’s all worked…

sorry but i don’t know how to solve your problem again… :(

Shouldn’t it be [color="#FF0000"][size=“3”]C[/size][/color]Html::… and not cHtml::… ?

or maybe in here


array_push($rolename, $r->RoleName);

maybe it’s supposed be


array_push($rolename, $r->rolename);

No it is RoleName and i replace the cHtml with CHtml but is the same

check my model:


<?php


/**

 * This is the model class for table "user_role".

 *

 * The followings are the available columns in table 'user_role':

 * @property integer $idUser

 * @property string $RoleName

 */

class UserRole extends CActiveRecord

{

	/**

	 * Returns the static model of the specified AR class.

	 * @param string $className active record class name.

	 * @return UserRole the static model class

	 */

	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}


	/**

	 * @return string the associated database table name

	 */

	public function tableName()

	{

		return 'user_role';

	}


	/**

	 * @return array validation rules for model attributes.

	 */

	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('idUser, RoleName', 'required'),

			array('idUser', 'numerical', 'integerOnly'=>true),

			array('RoleName', 'length', 'max'=>45),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('idUser, RoleName', 'safe', 'on'=>'search'),

		);

	}

        

        

        public function grantAllRoles($idUser){

            

            $this->revokeAllRoles($idUser);

            $roles=Yii::app()->authManager->getRoles();

            foreach($roles as $role ){

                $userrole=new UserRole;

                $userrole->RoleName=$role->Name;

                $userrole->idUser=$idUser;

                $userrole->addRole();

                   

                   

            }

        }

        

        public function revokeAllRoles($idUser){

            $roles=Yii::app()->authManager->getRoles();

            foreach($roles as $role ){

                $this->RoleName=$role->name;

                $this->idUser=$idUser;

                $this->revokeRole();

            }

        }

        

        public function getIsInRole(){

             return Yii::app()->user->checkAccess($this->RoleName,$this->idUser);

        }

        

        public function addRole(){

            if($this->findByPk(array('idUser'=>$this->idUser,'RoleName'=>$this->RoleName))==null)

            {

                $this->save();

                Yii::app()->authManager->assign($this->RoleName, $this->idUser, '');

            }

        }

        

        public function revokeRole(){

            $userrole=$this->findByPk(array('idUser'=>$this->idUser,'RoleName'=>$this->RoleName));

            if ($userrole)

            {

               Yii::app()->authManager->revoke($this->RoleName, $this->idUser);

               $userrole->delete();

            }

            

        }


	/**

	 * @return array relational rules.

	 */

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

		);

	}


	/**

	 * @return array customized attribute labels (name=>label)

	 */

	public function attributeLabels()

	{

		return array(

			'idUser' => 'Id User',

			'RoleName' => 'Role Name',

		);

	}


	/**

	 * Retrieves a list of models based on the current search/filter conditions.

	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.

	 */

	public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('idUser',$this->idUser);

		$criteria->compare('RoleName',$this->RoleName,true);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

}

and user controller


<?php


class UserController 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/column2';


    /**

     * @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(

            array('allow', // allow authenticated user to perform 'create' and 'update' actions

                'actions' => array('create', 'update', 'view'),

                'users' => array('@'),

            ),

            array('allow', // allow admin user to perform 'admin' and 'delete' actions

                'actions' => array('admin', 'delete', 'index','grantAllRoles','revokeAllRoles'),

                'users' => array('admin'),

            ),

            array('deny', // deny all users

                'users' => array('*'),

            ),

        );

    }


    /**

     * Displays a particular model.

     * @param integer $id the ID of the model to be displayed

     */

    public function actionView($id) {

        $userrole = new UserRole;

        $userrole->idUser=$id;

        

        if (isset($_POST['role'])) {

            $teste=$_POST['role'];

            $userrole->RoleName=$_POST['role'];

            

            $teste=$id;

            $teste=$_POST['role'];

            if ($_POST['verificado']=='true')

            {

               $userrole->addRole();

               

            }

              

            else

            {

                $userrole=UserRole::model()->findByPk(array('idUser'=>$userrole->idUser,'RoleName'=>$userrole->RoleName));

                $userrole->revokeRole();

            }

        }

        

        $this->render('view', array(

            'model' => $this->loadModel($id)

        ));

    }


    public function actiongrantAllRoles($idUser){

        $userrole=new UserRole;

        $userrole->idUser=$idUser;

        $userrole->grantAllRoles($idUser);

        

    }

    

    public function actionRevokeAllRoles($idUser){

        $userrole=new UserRole;

        $userrole->idUser=$idUser;

        $userrole->revokeAllRoles($idUser);

        

    }

    /**

     * Creates a new model.

     * If creation is successful, the browser will be redirected to the 'view' page.

     */

    public function actionCreate() {

        $model = new User;


        // Uncomment the following line if AJAX validation is needed

        // $this->performAjaxValidation($model);


        if (isset($_POST['User'])) {

            $model->attributes = $_POST['User'];

            if ($model->save())

                $this->redirect(array('view', 'id' => $model->iduser));

        }


        $this->render('create', array(

            'model' => $model,

        ));

    }


    /**

     * Updates a particular model.

     * If update is successful, the browser will be redirected to the 'view' page.

     * @param integer $id the ID of the model to be updated

     */

    public function actionUpdate($id) {

        $model = $this->loadModel($id);


        // Uncomment the following line if AJAX validation is needed

        // $this->performAjaxValidation($model);


        if (isset($_POST['User'])) {

            $model->attributes = $_POST['User'];

            if ($model->save())

                $this->redirect(array('view', 'id' => $model->iduser));

        }


        $this->render('update', array(

            'model' => $model,

        ));

    }


    /**

     * Deletes a particular model.

     * If deletion is successful, the browser will be redirected to the 'admin' page.

     * @param integer $id the ID of the model to be deleted

     */

    public function actionDelete($id) {

        if (Yii::app()->request->isPostRequest) {

            // we only allow deletion via POST request

            $this->loadModel($id)->delete();


            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

            if (!isset($_GET['ajax']))

                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

        }

        else

            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');

    }


    /**

     * Lists all models.

     */

    public function actionIndex() {

        $dataProvider = new CActiveDataProvider('User');

        $this->render('index', array(

            'dataProvider' => $dataProvider,

        ));

    }


    /**

     * Manages all models.

     */

    public function actionAdmin() {

        $model = new User('search');

        $model->unsetAttributes();  // clear any default values

        if (isset($_GET['User']))

            $model->attributes = $_GET['User'];


        $this->render('admin', array(

            'model' => $model,

        ));

    }


    /**

     * 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.

     * @param integer the ID of the model to be loaded

     */

    public function loadModel($id) {

        $model = User::model()->findByPk($id);

        if ($model === null)

            throw new CHttpException(404, 'The requested page does not exist.');

        return $model;

    }


    /**

     * Performs the AJAX validation.

     * @param CModel the model to be validated

     */

    protected function performAjaxValidation($model) {

        if (isset($_POST['ajax']) && $_POST['ajax'] === 'user-form') {

            echo CActiveForm::validate($model);

            Yii::app()->end();

        }

    }


}



By the way what is the difference between activeCheckBoxList and simple checkBoxList?

Can you show me your code?

view




<?php $data = CHtml::listData(Country::model()->findAll(array('condition'=>'status = 1')), 'id_country', 'name');

		//print_r($country);exit();


		$catCons = ContentCountry::model()->findAllBySql("select id_country from content_country where id_content = ".$_GET['id']);

		$ids = array();

		foreach($catCons as $catCon) {

			array_push($ids, $catCon->id_country);

		}

		//print_r($ids);exit();

		

		echo CHtml::checkBoxList('id_country', $ids, $data, array( 'template' => "{input} {label}",'checkAll' => 'Select All<br>' )); ?>

i could saw the bug .i didnt know that the sql is case sensitive then i changed:


$role = UserRole::model()->findAllBySql("select RoleName from user_role");

it worked! thanks a lot for your pacience.

do you know to send the boolean of check/unchecked value?

i have this post ajax:


jQuery(function($) {

        jQuery('.UserRole_RoleName').click(function(){  

            checked=jQuery('.UserRole_RoleName').is(':checked'); 

       

            jQuery.ajax({

                type: 'POST',

                url: '',

                'cache':false,

                 'data':'verificado='+checked+'&role='+this.value,


                'success':function(){

                    alert('sucesso');

                }

            });

            


            

        });

    });

but he verificado value is always true even if is unchecked

Solved:

i changed:


checked=jQuery(this).is(':checked'); 

What’s the difference between putting this code in the view and putting in the controller?


$role = UserRole::model()->findAllBySql("select RoleName from user_role");

                $rolenames = array();

                foreach($role as $r) {

                        array_push($rolenames, $r->RoleName);

                }

                

i think it’s same…