<?php
class ProfileController 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()
{
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('index','settings'), ),
array('deny', // deny all users ),
);
}
/**
* Lists all models.
*/
public function actionIndex()
{
$profile = $this->loadModel(Yii::app()->user->id);
$this->render('index',array( 'model'=>$profile,
));
}
public function actionSettings()
{
$profile = $this->loadModel(Yii::app()->user->id);
$model = new ChangeEmailForm;
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax']==='change-email-form') {
echo CActiveForm::validate($model);
}
// collect user input data
if(isset($_POST['ChangeEmailForm'])) {
$model->attributes=$_POST['ChangeEmailForm'];
// validate user input and redirect to the previous page if valid
if($model->validate()) {
$this->redirect('/');
}
}
$this->render('settings',array( 'model'=>$model,
'profile'=>$profile,
));
}
/**
* 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 $id the ID of the model to be loaded
* @return User the loaded model
* @throws CHttpException
*/
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 User $model the model to be validated
*/
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form') {
echo CActiveForm::validate($model);
}
}
}
PD9waHAKCmNsYXNzIFByb2ZpbGVDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlcgp7CgkvKioKCSAqIEB2YXIgc3RyaW5nIHRoZSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIHZpZXdzLiBEZWZhdWx0cyB0byAnLy9sYXlvdXRzL2NvbHVtbjInLCBtZWFuaW5nCgkgKiB1c2luZyB0d28tY29sdW1uIGxheW91dC4gU2VlICdwcm90ZWN0ZWQvdmlld3MvbGF5b3V0cy9jb2x1bW4yLnBocCcuCgkgKi8KCXB1YmxpYyAkbGF5b3V0PScvL2xheW91dHMvY29sdW1uMic7CgoJLyoqCgkgKiBAcmV0dXJuIGFycmF5IGFjdGlvbiBmaWx0ZXJzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmaWx0ZXJzKCkKCXsKCQlyZXR1cm4gYXJyYXkoCgkJCSdhY2Nlc3NDb250cm9sJywgLy8gcGVyZm9ybSBhY2Nlc3MgY29udHJvbCBmb3IgQ1JVRCBvcGVyYXRpb25zCgkJCSdwb3N0T25seSArIGRlbGV0ZScsIC8vIHdlIG9ubHkgYWxsb3cgZGVsZXRpb24gdmlhIFBPU1QgcmVxdWVzdAoJCSk7Cgl9CgoJLyoqCgkgKiBTcGVjaWZpZXMgdGhlIGFjY2VzcyBjb250cm9sIHJ1bGVzLgoJICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgJ2FjY2Vzc0NvbnRyb2wnIGZpbHRlci4KCSAqIEByZXR1cm4gYXJyYXkgYWNjZXNzIGNvbnRyb2wgcnVsZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFjY2Vzc1J1bGVzKCkKCXsKCQlyZXR1cm4gYXJyYXkoCgkJCWFycmF5KCdhbGxvdycsICAvLyBhbGxvdyBhbGwgdXNlcnMgdG8gcGVyZm9ybSAnaW5kZXgnIGFuZCAndmlldycgYWN0aW9ucwoJCQkJJ2FjdGlvbnMnPT5hcnJheSgnaW5kZXgnLCdzZXR0aW5ncycpLAoJCQkJJ3VzZXJzJz0+YXJyYXkoJ0AnKSwKCQkJKSwKCQkJYXJyYXkoJ2RlbnknLCAgLy8gZGVueSBhbGwgdXNlcnMKCQkJCSd1c2Vycyc9PmFycmF5KCcqJyksCgkJCSksCgkJKTsKCX0KCgkvKioKCSAqIExpc3RzIGFsbCBtb2RlbHMuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhY3Rpb25JbmRleCgpCgl7CiAgICAkcHJvZmlsZSA9ICR0aGlzLT5sb2FkTW9kZWwoWWlpOjphcHAoKS0+dXNlci0+aWQpOwoJCSR0aGlzLT5yZW5kZXIoJ2luZGV4JyxhcnJheSgKCQkJJ21vZGVsJz0+JHByb2ZpbGUsCgkJKSk7Cgl9CgogIHB1YmxpYyBmdW5jdGlvbiBhY3Rpb25TZXR0aW5ncygpCiAgewogICAgJHByb2ZpbGUgPSAkdGhpcy0+bG9hZE1vZGVsKFlpaTo6YXBwKCktPnVzZXItPmlkKTsKICAgICRtb2RlbCA9IG5ldyBDaGFuZ2VFbWFpbEZvcm07CgogICAgLy8gaWYgaXQgaXMgYWpheCB2YWxpZGF0aW9uIHJlcXVlc3QKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSAmJiAkX1BPU1RbJ2FqYXgnXT09PSdjaGFuZ2UtZW1haWwtZm9ybScpCiAgICB7CiAgICAgIGVjaG8gQ0FjdGl2ZUZvcm06OnZhbGlkYXRlKCRtb2RlbCk7CiAgICAgIFlpaTo6YXBwKCktPmVuZCgpOwogICAgfQoKICAgIC8vIGNvbGxlY3QgdXNlciBpbnB1dCBkYXRhCiAgICBpZihpc3NldCgkX1BPU1RbJ0NoYW5nZUVtYWlsRm9ybSddKSkKICAgIHsKICAgICAgJG1vZGVsLT5hdHRyaWJ1dGVzPSRfUE9TVFsnQ2hhbmdlRW1haWxGb3JtJ107CgkJCS8vIHZhbGlkYXRlIHVzZXIgaW5wdXQgYW5kIHJlZGlyZWN0IHRvIHRoZSBwcmV2aW91cyBwYWdlIGlmIHZhbGlkCgkJCWlmKCRtb2RlbC0+dmFsaWRhdGUoKSkgewogICAgICAgICR0aGlzLT5yZWRpcmVjdCgnLycpOwogICAgICB9CgogICAgfQoKICAgICR0aGlzLT5yZW5kZXIoJ3NldHRpbmdzJyxhcnJheSgKICAgICAgJ21vZGVsJz0+JG1vZGVsLAogICAgICAncHJvZmlsZSc9PiRwcm9maWxlLAogICAgKSk7CgogIH0KCgkvKioKCSAqIFJldHVybnMgdGhlIGRhdGEgbW9kZWwgYmFzZWQgb24gdGhlIHByaW1hcnkga2V5IGdpdmVuIGluIHRoZSBHRVQgdmFyaWFibGUuCgkgKiBJZiB0aGUgZGF0YSBtb2RlbCBpcyBub3QgZm91bmQsIGFuIEhUVFAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgoJICogQHBhcmFtIGludGVnZXIgJGlkIHRoZSBJRCBvZiB0aGUgbW9kZWwgdG8gYmUgbG9hZGVkCgkgKiBAcmV0dXJuIFVzZXIgdGhlIGxvYWRlZCBtb2RlbAoJICogQHRocm93cyBDSHR0cEV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZE1vZGVsKCRpZCkKCXsKCQkkbW9kZWw9VXNlcjo6bW9kZWwoKS0+ZmluZEJ5UGsoJGlkKTsKCQlpZigkbW9kZWw9PT1udWxsKQoJCQl0aHJvdyBuZXcgQ0h0dHBFeGNlcHRpb24oNDA0LCdUaGUgcmVxdWVzdGVkIHBhZ2UgZG9lcyBub3QgZXhpc3QuJyk7CgkJcmV0dXJuICRtb2RlbDsKCX0KCgkvKioKCSAqIFBlcmZvcm1zIHRoZSBBSkFYIHZhbGlkYXRpb24uCgkgKiBAcGFyYW0gVXNlciAkbW9kZWwgdGhlIG1vZGVsIHRvIGJlIHZhbGlkYXRlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcGVyZm9ybUFqYXhWYWxpZGF0aW9uKCRtb2RlbCkKCXsKCQlpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkgJiYgJF9QT1NUWydhamF4J109PT0ndXNlci1mb3JtJykKCQl7CgkJCWVjaG8gQ0FjdGl2ZUZvcm06OnZhbGlkYXRlKCRtb2RlbCk7CgkJCVlpaTo6YXBwKCktPmVuZCgpOwoJCX0KCX0KfQo=