<?php

class SiteController extends Controller
{
	/**
	 * Declares class-based actions.
	 */
	public function actions()
	{
		return array(
			// captcha action renders the CAPTCHA image displayed on the contact page
			'captcha'=>array(
				'class'=>'CCaptchaAction',
				'backColor'=>0xFFFFFF,
			),
			// page action renders "static" pages stored under 'protected/views/site/pages'
			// They can be accessed via: index.php?r=site/page&view=FileName
			'page'=>array(
				'class'=>'CViewAction',
			),
		);
	}

	/**
	 * This is the default 'index' action that is invoked
	 * when an action is not explicitly requested by users.
	 */
	public function actionIndex()
	{
	
	if(isset($_POST['lang']))
    {
		Yii::app()->request->cookies['pref_lang'] = new CHttpCookie('pref_lang', $_POST['lang']);
		Yii::app()->language = $_POST['lang'];
	}

		$dataProvider=new CActiveDataProvider('Post', array(
		'criteria'=>array(
			'order'=>'date DESC, id DESC',
		),
			'pagination'=>array(
				'pageSize'=>5,
			),
			
		));
	 
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));

	}
	
	/**
	 * This is the action to handle external exceptions.
	 */
	public function actionDictionary()
	{
		$model = new DictionaryForm;
		
		// collect user input data
		if(isset($_POST['DictionaryForm']))
		{
			$model->attributes=$_POST['DictionaryForm'];
			
			$model->getResponse();
			
			if ($model->serverIsWorking)
			{
				$this->render('dictionaryResult',array('model'=>$model));

				return;
			}
		}

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

	/**
	 * This is the action to handle external exceptions.
	 */
	public function actionError()
	{
		if($error=Yii::app()->errorHandler->error)
		{
			if(Yii::app()->request->isAjaxRequest)
				echo $error['message'];
			else
				$this->render('error', $error);
		}
	}

	/**
	 * Displays the login page
	 */
	public function actionLogin()
	{
		$model=new LoginForm;

		// if it is ajax validation request
		if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}

		// collect user input data
		if(isset($_POST['LoginForm']))
		{
			$model->attributes=$_POST['LoginForm'];
			// validate user input and redirect to the previous page if valid
			if($model->validate() && $model->login())
				$this->redirect(Yii::app()->user->returnUrl);
		}
		// display the login form
		$this->render('login',array('model'=>$model));
	}
	
	public function actionRegister()
	{
	 $model=new User('register');

    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        if($model->validate())
        {
     
			$model->password = $this->better_crypt($model->password);
			
			$model->save();
			
			//$this->redirect(Yii::app()->user->returnUrl);
			$this->redirect(array("site/login"));
			
			return;
        }
    }
    $this->render('register',array('model'=>$model));
	}

	/**
	 * Logs out the current user and redirect to homepage.
	 */
	public function actionLogout()
	{
		Yii::app()->user->logout();
		$this->redirect(Yii::app()->homeUrl);
	}
	
	public function actionAddPost()
{
    $model=new AddPostForm('addPost');

    // uncomment the following code to enable ajax-based validation
    /*
    if(isset($_POST['ajax']) && $_POST['ajax']==='add-post-form-addPost-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
    */

    if(isset($_POST['AddPostForm']))
    {
        $model->attributes=$_POST['AddPostForm'];

		$model->image=CUploadedFile::getInstance($model,'image');
		
		if($model->validate())
		{
		
			$username = Yii::app()->user->name;
			
			$user = User::model()->find('username=:username',array(':username'=>$username));

			$imageFileName = 'uploaded/' . $username . '-' . ($user->postCount + 1) . '.' . $model->image->extensionName;
			
			if (strncasecmp(PHP_OS, 'WIN', 3) == 0)
			{
				$model->image->saveAs('C:/Workplace/Apache2.4/htdocs/cj/' . $imageFileName);
			}
			else
			{
				$model->image->saveAs('/home/fishrungames-http/fishrungames.ru/http/cj/' . $imageFileName);
			}
            
			$user->postCount = $user->postCount + 1;
			
			$user->save();
			
			$post = new Post;
			
			$post->username = $username;
			$post->title = $model->title;
			$post->text = $model->text;
			$post->imageFileName = $imageFileName;
			$post->date = date('Y-m-d H:i:s');
			
			$post->save();
			
			$this->redirect(Yii::app()->homeUrl);
			
			
			return;     
        }
    }
    $this->render('addPost',array('model'=>$model));
}
	
	private function better_crypt($input)
	{
	$salt = "";
	$salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9));
	for($i=0; $i < 22; $i++)
	{
	$salt .= $salt_chars[array_rand($salt_chars)];
	}
	return crypt($input, '$2y$10$' . $salt);
	}
}