PHP Classes

File: examples/blog/app/models/usersModel.php

Recommend this page to a friend!
  Classes of Haseeb Ahmad Basil   PHP Skeleton Framework   examples/blog/app/models/usersModel.php   Download  
File: examples/blog/app/models/usersModel.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Skeleton Framework
Extensive Web application development framework
Author: By
Last change:
Date: 8 years ago
Size: 7,930 bytes
 

Contents

Class file image Download
<?php


class usersModel extends A_Model {
   
    protected
$errorMsg = array();
       
    protected
$dbh = null;
   
    protected
$hashalgo = null;
   
    protected
$hashoptions = null;
   
    public function
__construct($dbh){
       
       
$this->dbh = $dbh;
       
       
$this->addField(new A_Model_Field('id'));
       
$this->addField(new A_Model_Field('firstname'));
       
$this->addField(new A_Model_Field('lastname'));
       
$this->addField(new A_Model_Field('username'));
       
$this->addField(new A_Model_Field('password'));
       
$this->addField(new A_Model_Field('email'));
       
$this->addField(new A_Model_Field('active'));
       
$this->addField(new A_Model_Field('access'));

       
$this->addRule(new A_Rule_Numeric('id', 'invalid ID'), 'id');
       
$this->addRule(new A_Rule_Regexp('/^[A-Za-z ]+$/', 'firstname', 'The first name is not valid'), 'firstname');
       
$this->addRule(new A_Rule_Regexp('/^[0-9a-zA-Z\-\ \\\']+$/', 'lastname', 'The last name is not valid'), 'lastname');
       
$this->addRule(new A_Rule_Length(3, 15, 'username', 'The username must be between 3 to 25 characters'), 'username');
       
$this->addRule(new A_Rule_Regexp('/^[A-Za-z0-9]+$/D', 'username', 'The username is not valid'), 'username');
       
$this->addRule(new A_Rule_Regexp('/[0-9a-zA-Z\-\_\@\.]+/', 'password', 'The password is not valid'), 'password');
       
$this->addRule(new A_Rule_Email('email', 'This is not a valid email adress'), 'email');
       
$this->addRule(new A_Rule_Regexp('[^01]', 'active', 'active'), 'active');
       
$this->addRule(new A_Rule_Regexp('/[~0-9a-zA-Z\-\_\|]/', 'access', 'User access'), 'access');
       
       
// create a Gateway style datasource for the Model
       
$this->datasource = new A_Db_Tabledatagateway($this->dbh, 'blog_users', 'id');
       
// set the field names for the Gateway to fetch
       
$this->datasource->columns($this->getFieldNames());
       
       
// set up hash options
       
$this->hashalgo = PASSWORD_BCRYPT;
       
$this->hashoptions = array('cost' => 7);
    }
   
    public function
getStatus(){
        return
$this->status;
    }
   
    public function
save(){
       
// if doesn't exist yet create
       
if(!$this->get('id')){
           
// insert new
       
} else {
           
// update
       
}
    }
   
    public function
findAll(){
       
$this->errorMsg = array();;
       
$result = $this->datasource->find(array('active'=>1));
        if(
$result->numRows() > 0) {
            return
$result->fetchAll();
        } else {
            return array();
        }
    }
   
    public function
findAuthorlist(){
       
$this->errorMsg = array();;
       
$result = $this->datasource->columns('id,username')->find(array('active'=>1 ));
        if(
$result->numRows() > 0) {
            return
$result->fetchAll();
        } else {
            return array();
        }
    }
   
    public function
find($id){
       
$result = $this->datasource->find(array('id'=>$id));
        if(
$result->numRows() > 0) {
            return
$result->current();
        } else {
            return array();
        }
    }
   
    public function
findByEmail($email) {
       
$result = $this->datasource->find(array('email'=>$email));
        if(
$result->numRows() > 0) {
            return
$result->current();
        } else {
            return array();
        }
    }
   
    public function
delete($id){}
       
    public function
login($username, $password) {
       
$this->errorMsg = array();

       
$result = $this->datasource->find(array('username'=>$username, 'active'=>1));
       
        if(
$result->numRows() > 0) {
           
$row = $result->current();
            if (
$row['username'] == $username) {
                if (
password_verify($password, $row['password'])) {
                    if (
password_needs_rehash($row['password'], $this->hashalgo, $this->hashoptions)) {
                       
$hash = password_hash($password, $this->hashalgo, $this->hashoptions);
                       
$this->updateUser( array('password' => $hash) , $row['id']);
                    }
                    return
$row;
                } else {
                   
$this->errorMsg[] = 'Username and/or password are not correct.';
                }
            } else {
               
$this->errorMsg[] = 'Username and/or password are not correct.';
            }
        } else {
           
$this->errorMsg[] = $this->datasource->getErrorMsg();
        }
        return array();
    }
   
    public function
loginErrorMsg() {
        return
$this->errorMsg;
    }

    public function
isUsernameAvailable($username){
       
$result = $this->datasource->find(array('username'=>$username));
        if(
$result->numRows() > 0) {
            return
false;
        } else {
            return
true;
        }
    }
   
    public function
isEmailAvailable($email){
       
$result = $this->datasource->find(array('email'=>$email));
        if(
$result->numRows() > 0) {
            return
false;
        } else {
            return
true;
        }
    }
   
    public function
usernameMatchesEmail($username, $email){
       
$result = $this->datasource->find(array('username'=>$username ,'email'=>$email));
        if(
$result->numRows() > 0) {
            return
true;
        } else {
            return
false;
        }
    }
   
    public function
isAccountActivated($username, $email){
       
$result = $this->datasource->find(array('username'=>$username ,'active'=>1));
        if(
$result->numRows() > 0) {
            return
true;
        } else {
            return
false;
        }
    }
   
    public function
isPasswordCorrect($username, $password){
       
$result = $this->datasource->find(array('username'=>$username, 'active'=>1));
        if(
$result->numRows() > 0) {
           
$row = $result->current();
            if (
password_verify($password, $row['password'])) {
                return
true;
            } else {
                return
false;
            }
        } else {
            return
false;
        }
    }
   
    public function
createActivationkey(){
        return
md5(uniqid(rand(), true));
    }

    public function
insertUser($username, $password, $email, $activationkey){
       
$user_hash = password_hash($password, $this->hashalgo, $this->hashoptions);
       
$this->datasource->insert(array(
                               
'username' =>$username,
                               
'email' =>$email,
                               
'password' =>$user_hash,
                               
'activationkey' =>$activationkey
                               
));
    }
   
    public function
updateUser( $data = array(), $id ) {

       
$result = $this->datasource->update($data, array('id'=>$id));

        if(
$result->numRows() > 0) {
           
$this->errorMsg[] = 'User data updated';
            return
true;
        } else {
           
$this->errorMsg[] = 'User data could not be updated';
            return
false;
        }
    }
   
    public function
activate($activationkey){
        if(!empty(
$activationkey)){
           
           
// Is there a row with this activationkey
           
$result = $this->datasource->find(array('activationkey'=>$activationkey));

           
// If there is activate the acount
           
if($result->numRows() > 0) {
               
$row = $result->current();
               
// set to active and remove key
               
$result = $this->datasource->update(array('active'=>'1', 'activationkey'=>''), array('id'=>$row['id']));
                if(
$result->numRows() > 0) {
                   
$this->errorMsg[] = 'Your account is now activated. ';
                    return
true;
                }
            }
           
// something went wrong..
           
$this->errorMsg[] = 'We could not activate the account. ';
           
        } else {
           
// User is on activate page but the activation key is missing. What to show?
           
$this->errorMsg[] = 'The activation key is missing. ';
        }
        return
false;
    }
   
    public function
insertResetkey($resetkey, $id) {
       
$data = array('resetkey'=>$resetkey);
       
$result = $this->datasource->update($data, array('id'=>$id));
        if(
$result->numRows() > 0) {
           
$this->errorMsg[] = 'User resetkey inserted';
            return
true;
        } else {
           
$this->errorMsg[] = 'User resetkey could not be inserted';
            return
false;
        }
    }
   
    public function
findResetkey($resetkey){
       
$result = $this->datasource->find(array('resetkey'=>$resetkey));
        if(
$result->numRows() > 0) {
            return
true;
        } else {
            return
false;
        }
    }
   
    public function
resetPassword($password, $resetkey){
       
$result = $this->datasource->find(array('resetkey'=>$resetkey));
        if(
$result->numRows() > 0) {
           
$user_hash = password_hash($password, $this->hashalgo, $this->hashoptions);
           
// insert new password and delete resetkey
           
$result = $this->datasource->update(array('password'=>$user_hash, 'resetkey'=>''), array('resetkey'=>$resetkey));
            return
true;
        } else {
           
$this->errorMsg[] = 'Password could not be reset';
            return
false;
        }
    }
   
}