<?php
class UsersController extends AppController {

    var $name = 'Users';
    var $helpers = array('Html', 'Form', 'Javascript', 'Text');
    var $components = array('Acl','Auth', 'Cookie');
    var $paginate = array(
	    'Users' => array('order' => array('User.id' => 'desc'),
			    'limit' => 200
	    ),
	    'Enquiry' => array('order' => array('Enquiry.id' => 'desc'), 'limit' => 250)
    );

    function beforeFilter() {
	$this->Auth->allow('add');
	$this->set('currentuser', $this->Auth->user());
	$this->Auth->autoRedirect = false;
	//$this->login();
    }

    function login() { //Provided by the authComponent
	$this->pageTitle = ': Login';
	//$this->Session->setFlash(__('Please enter your Username and Password to continue', true));


	/* Auth Cookie code from http://www.webdevelopment2.com/cakephp-auth-component-tutorial-3/ */
	//– code inside this function will execute only when autoRedirect was set to false (i.e. in a beforeFilter).
	if ($this->Auth->user()) {
	    if (!empty($this->data) && $this->data['User']['remember_me']) {
		$cookie = array();
		$cookie['username'] = $this->data['User']['username'];
		$cookie['password'] = $this->data['User']['password'];
		$this->Cookie->write('Auth.User', $cookie, true, '+2 weeks');
		unset($this->data['User']['remember_me']);
	    }
	    $this->redirect($this->Auth->redirect());
	}
	if (empty($this->data)) {
	    $cookie = $this->Cookie->read('Auth.User');
	    if (!is_null($cookie)) {
		if ($this->Auth->login($cookie)) {
		    // Clear auth message, just in case we use it.

		    // $this->Session->setFlash(__('Welcome back '.$cookie['username']), true);
		    $this->Session->del('Message.auth');
		    $this->redirect($this->Auth->redirect());
		} else { // Delete invalid Cookie
		    $this->Cookie->del('Auth.User');
		}



	    }
	}
    }


    function logout() {
	$this->Cookie->del('Auth.User');
	$this->redirect($this->Auth->logout());
    }

    function index() {
	$this->User->recursive = 0;
	$this->set('users', $this->paginate());
    }
    /**
     * View a User.
     *
     * Depending on the type of user. Fetch the appropriate data and render the appropriate template.
     *
     * @param int $id
     */
    function view($id = null) {
	if (!$id) {
	    $this->Session->setFlash(__('Invalid User.', true));
	    $this->redirect(array('action'=>'index'));
	}

	//$user = $this->User->read(null, $id);

	$userFields = array('User.id', 'User.principle_id','User.customer_id','User.type',
		'User.access_level','User.username','User.first_name','User.last_name',
		'User.email','User.job_title','User.phone','User.mobile','User.fax','User.phone_extension','User.direct_phone',
		'User.notes','User.by_vault','User.blacklisted'
	);

	$user = $this->User->find('first', array('conditions'=>array('User.id'=>$id), 'fields'=>$userFields, 'recursive'=>0));

	$this->set('user', $user);

	/*$emailIDs = array();
	foreach($user['Email'] as $email) {
	    $emailIDs[] = $email['id'];
	}
	$emails = $this->User->Email->find('all', array('conditions'=>array('Email.id'=>$emailIDs)));
	$this->set('emails', $emails);
/*/


	switch($user['User']['type']) {
	    case 'contact':

		if(isset($user['User']['customer_id'])) {
		    $this->set('customer', $this->User->Customer->find('first',array('conditions'=>array('Customer.id'=>$user['User']['customer_id']), 'recursive'=>0)));
		}
		$this->render('viewContact');
		break;

	    case 'principle':

		$this->render('viewPrinciple');
		break;

	    case 'user':
	    //$this->set('enquiries', $this->paginate('Enquiry', array('Enquiry.user_id' => $id)));




		$this->render('viewUser');

		break;

	    default:
		break;
	}

    }


    function add_edit() {
	Configure::write('debug', 0);

	if(isset($this->params['named']['type'])) {
	    $this->set('type', $this->params['named']['type']);
	}

	if(isset($this->params['named']['principle_id'])) {
	    $this->set('principle_id', $this->params['named']['principle_id']);
	}

	if(isset($this->params['named']['customer_id'])) {
	    $this->set('customer_id', $this->params['named']['customer_id']);
	}

	if(isset($this->params['named']['user_id'])) {
	    $userID = $this->params['named']['user_id'];
	    $this->set('user_id', $userID);
	}

	if(isset($this->params['named']['action'])) {
	    $action = $this->params['named']['action'];
	    $this->set('action', $action);
	}

	if(isset($action) && isset($userID)) {
	    $this->data = $this->User->read(null, $userID);
	}




    }


    function add_user() {

	Configure::write('debug', 0);
	$this->layout = 'ajax';
	if (!empty($this->data)) {
	    $this->User->create();
	    $this->User->set($this->data['User']);
	    if($this->User->validates()) {
		if ($this->User->save($this->data)) {
		    $message = __('The User has been saved.', true);
		    $data = $this->data;
		    $this->set('success', compact('message', 'data'));
		}
	    }
	    else {
		$message = __('The User could not be saved. Please, try again.', true);
		$User = $this->User->invalidFields();
		$data = compact('User');
		$this->set('errors', compact('message', 'data'));
	    }


	}
    }



    /*if (!empty($this->data)) {
	    $this->User->create();
	    if ($this->User->save($this->data)) {
		$this->Session->setFlash(__('The User has been saved', true));
		$this->redirect(array('action'=>'index'));
	    } else {
		$this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
	    }
	}
    }*/



    /**
     * the default generated add() method. Used for system users, rather than contacts & principle contacts.
     */
    function add() {

	if (!empty($this->data)) {
	    $this->User->create();
	    if ($this->User->save($this->data)) {
		$this->Session->setFlash(__('The User has been saved', true));
		$this->redirect(array('action'=>'index'));
	    } else {
		$this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
	    }
	}
    }

    function edit($id = null) {
	if (!$id && empty($this->data)) {
	    $this->Session->setFlash(__('Invalid User', true));
	    $this->redirect(array('action'=>'index'));
	}
	if (!empty($this->data)) {
	    if ($this->User->save($this->data)) {
		$this->Session->setFlash(__('The User has been saved', true));
		$this->redirect(array('action'=>'index'));
	    } else {
		$this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
	    }
	}
	if (empty($this->data)) {
	    $this->data = $this->User->read(null, $id);
	}
    }

    function delete($id = null) {
	if (!$id) {
	    $this->Session->setFlash(__('Invalid id for User', true));
	    $this->redirect(array('action'=>'index'));
	}
	if ($this->User->del($id)) {
	    $this->Session->setFlash(__('User deleted', true));
	    $this->redirect(array('action'=>'index'));
	}
    }







}
?>
