Hello,
I have a problem with the ProjectUserForm view. I get the following error:
Property "CJuiAutoComplete.soruce" is not defined. I googled the error but found nothing what helped me to solve my problem.
I copyed the view file, like it is printed in the book:
<?php
$this->pageTitle = Yii::app()->name . ' - Add User To Project';
$this->breadcrumbs = array($model->project->name => array('view', 'id'=>$model->project->id), 'Add User',);
$this->menu = array(array('label' => 'Back To Project', 'url' => array('view', 'id'=>$model->project->id)),);
?>
<h1> Add User To <?php echo $model->project->name; ?></h1>
<?php if(Yii::app()->user->hasFlash('success')):?>
<div class="successMessage">
<?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php endif; ?>
<div class="form">
<?php $form = $this->beginWidget('CActiveForm'); ?>
<p class="note"> Fields with <span class="required">*</span> are required. </p>
<div class="row">
<?php echo $form->labelEx($model, 'username'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete',
array(
'name' => 'username',
'soruce' => $model->createUsernameList(),
'model' => $model,
'attribute' => 'username',
'options' => array('minLength' => '2',),
'htmlOptions' => array('style' => 'height: 20px;'),
)
);
?>
<?php echo $form->error($model, 'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model, 'role'); ?>
<?php echo $form->dropDownList($model, 'role', Project::getUserRoleOptions()); ?>
<?php echo $form->error($model, 'role'); ?>
</div>
<div class="row buttons">
<?php echo CHTML::subMitButton('AddUser'); ?>
</div>
<?php $this->endWidget(); ?>
</div>
This is the addUserAction in my projectController:
public function actionAdduser($id)
{
$project = $this->loadModel($id);
/*
if(!Yii::app()->user->checkAccess('createUser', array('project' => $project)))
{
throw new CHttpException(403, 'You are not authorizes to perform this action');
}
*/
$form = new ProjectUserForm;
//collect user input data
if(isset($_POST['ProjectUserForm']))
{
$form->attributes = $_POST['ProjectUserForm'];
$form->project = project;
if($form->validate())
{
if($form->assign())
{
Yii::app()->user->setFlash('sucess', $form->username . " has been added to the project.");
//reset the form for another user to be associated if desired
$form->unsetAttributes();
$form->clearErrors();
}
}
}
$form->project = $project;
$this->render('adduser', array('model' => $form));
}
This is the project user form:
<?php
/**
* ProjectUserForm class.
* ProjectUserForm is the data structure for keeping
* the form data related to adding an existing user to a project. It is used by the 'Ad-duser' action of 'ProjectController'.
*/
class ProjectUserForm extends CFormModel
{
/**
* @var string username of the user being added to the project
*/
public $username;
/**
* @var string the role to which the user will be associated within the project
*/
public $role;
/**
* @var object an instance of the Project AR model class
*/
public $project;
private $_user;
/**
* Declares the validation rules.
* The rules state that username and password are required,
* and password needs to be authenticated using the verify() method
*/
public function rules()
{
return array(
// username and role are required
array('username, role', 'required'),
//username needs to be checked for existence
array('username', 'exist', 'className'=>'User'),
array('username', 'verify'),
);
}
/**
* Authenticates the existence of the user in the system.
* If valid, it will also make the association between the user, role and project
* This is the 'verify' validator as declared in rules().
*/
public function verify($attribute,$params)
{
if(!$this->hasErrors()) // we only want to authenticate when no other input errors are present
{
$user = User::model()->findByAttributes(array('username'=>$this->username));
if($this->project->isUserInProject($user))
{
$this->addError('username','This user has already been added to the project.');
}
else
{
$this->_user = $user;
}
}
}
public function assign()
{
if($this->_user instanceof User)
{
//assign the user, in the specified role, to the project
$this->project->assignUser($this->_user->id, $this->role);
//add the association, along with the RBAC biz rule, to our RBAC hierarchy
$auth = Yii::app()->authManager;
$bizRule='return isset($params["project"]) && $params["project"]->allowCurrentUser("'.$this->role.'");';
$auth->assign($this->role,$this->_user->id, $bizRule);
return true;
}
else
{
$this->addError('username','Error when attempting to assign this user to the project.');
return false;
}
}
/**
* Generates an array of usernames to use for the autocomplete
*/
public function createUsernameList()
{
$sql = "SELECT username FROM tbl_user";
$command = Yii::app()->db->createCommand($sql);
$rows = $command->queryAll();
//format it for use with auto complete widget
$usernames = array();
foreach($rows as $row)
{
$usernames[]=$row['username'];
}
return $usernames;
}
}
I don’t know whats going wrong here. I would be pleasured if someone can give me a advice.
Thank You