Visualizzare da una classe esistente ogni profilo utente

Marco Bonanno

Utente Attivo
3 Lug 2012
32
0
6
Ciao, vengo subito al dunque, con il normale concetto PHP riuscivo tranquillamente a far visualizzare il profilo di ogni utente nella sua propria pagina, ad esempio profile.php?id=1, questo tramite l'utilizzo di _GET ecc ecc.

Ora mi sto affacciando ad OOP/PDO per ovvie ragioni, sto infatti sfruttando l'esistenza di un piccolo script per la gestione del login/registrazione e account per modificare i dettagli. Sono presenti moltissime classi, tra cui quella User.php che vi mostro:

Codice:
class User {

	private $_db, $_data, $_sessionName, $_cookieName, $_isLoggedIn;

	function __construct($user = null) {
		$this->_db = DB::getInstance();
		$this->_sessionName = Config::get('session/session_name');
		$this->_cookieName = Config::get('remember/cookie_name');

		if (!$user) {
			if (Session::exists($this->_sessionName)) {
				$user = Session::get($this->_sessionName);
				if ($this->find($user)) {
					$this->_isLoggedIn = true;
				} else {
					//logout
				}
				
			}
		} else {
			$this->find($user);
		}
		
	}
  
	public function find($user = null)	{
		if ($user) {
			$field = (is_numeric($user)) ? 'id' : 'username' ;	
			$data = $this->_db->get('users', array($field, '=', $user));
			if ($data->count()) {
				$this->_data = $data->first();
				return true;
			}
		}
		return false;
	}
  
	public function getuser($id)	{
		if ($id) {
			$field = (is_numeric($id)) ? 'id' : 'username' ;	
			$showuser = $this->_db->get('users', array($field, '=', $id));
			if ($data->count()) {
				$this->_showuser = $showuser->first();
				return true;
			}
		}
		return false;
	}
 
	public function create($fields = array()) {
		if (!$this->_db->insert('users', $fields)) {
			throw new Exception("Error Processing Request", 1);	
		}
	}

	public function login($username = null, $password = null, $remember = null)	{
		
		if (!$username && !$password && $this->exists()) {
				Session::put($this->_sessionName, $this->data()->id);
		} else {
			$user = $this->find($username);

			if ($user) {
				if ($this->data()->password === Hash::make($password, $this->data()->salt)) {
					Session::put($this->_sessionName, $this->data()->id);

					if ($remember) {
						$hash = Hash::unique();
						$hashCheck = $this->_db->get('users_sessions', array('user_id', '=', $this->data()->id));
						if (!$hashCheck->count()) {
							$this->_db->insert('users_sessions', array(
								'user_id' => $this->data()->id,
								'hash' => $hash));
						} else {
							$hash = $hashCheck->first()->hash;
						}
							
						Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry'));
					}
					return true;
				}
			}
		}
	return false;
	}

	public function update($fields = array(), $id = null) {
		if (!$id && $this->isLoggedIn()) {
			$id = $this->data()->id;
		}

		if (!$this->_db->update('users', $id, $fields)) {
			Session::flash('uperr', 'We experienced an error while updating your profile');
			Redirect::to('profile.php');
			exit();
		}
	}

	public function hasPermission($key) {
		$group = $this->_db->get('groups', array('id', '=', $this->data()->user_group));
		
		if ($group->count()) {
			$permissions = json_decode($group->first()->permissions, true);

			if ($permissions[$key]) {
				return true;		
			}
		}

		return false;
	}
	public function logout() {
		$this->_db->delete('users_sessions', array('user_id', '=', $this->data()->id));
		Session::delete($this->_sessionName);
		Cookie::delete($this->_cookieName);
	}
	
	public function data()	{
		return $this->_data;
	}
  
  	public function showuser()	{
		return $this->_showuser;
	}

	public function isLoggedIn()
	{
		return $this->_isLoggedIn;
	}

	public function exists() {
		return (!empty($this->_data)) ? true : false ;
	}
 
}

Bene, siccome chiaramente vorrei evitare le vecchie sintassi php, ma attenermi a queste classi, non sto riuscendo a venirne a capo su come mostrare i dettagli di un determinato utente in una pagina e come mostrare la lista di tutti gli utenti (esempio). Che tipo di funzione devo scrivere? Non so proprio come muovermi, percio se mi fareste un esempio ne sarei grato, ed inoltre come devo richiamare in una ipotetica pagina showuser.php?

Grazie mille per il vostro tempo,
Marco
 
Ho risolto cosi per mostra il profilo di ogni utente:

Codice:
if(!$username = Input::get('user')) {
    Redirect::to('index.php');
} else {
    $user = new User($username);

    if(!$user->exists()) {
        Redirect::to(404);
    } else {
        $data = $user->data();

Se non chiedo troppo, mi potreste aiutare su come creare la listata dei membri in una ipotetica pagina member.php?
Grazie
 

Discussioni simili