Rev 31 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php
/*
* User Class
* This class is used for database related (connect fetch, insert, and update) operations
* @author CodexWorld.com
* @url http://www.codexworld.com
* @license http://www.codexworld.com/license
*/
class User {
private $userTbl = DB_USER_TBL;
public function __construct() {
if (!isset($this->db)) {
$this->db = MySessionHandler::getDBSessionId();
if (!$this->db) {
die("Failed to initialize MySQL connection.");
}
}
}
/*
* Returns rows from the database based on the conditions
* @param array select, where, order_by, limit and return_type conditions
*/
public function getRows($conditions = array()) {
$sql = 'SELECT ';
$sql .= array_key_exists("select", $conditions) ? $conditions['select'] : '*';
$sql .= ' FROM ' . $this->userTbl;
if (array_key_exists("where", $conditions)) {
$sql .= ' WHERE ';
$i = 0;
foreach ($conditions['where'] as $key => $value) {
$pre = ($i > 0) ? ' AND ' : '';
$sql .= $pre . $key . " = '" . $value . "'";
$i++;
}
}
if (array_key_exists("where_not", $conditions)) {
$sql .= (strpos($sql, 'WHERE') === false) ? ' WHERE ' : ' AND ';
$i = 0;
foreach ($conditions['where_not'] as $key => $value) {
$pre = ($i > 0) ? ' AND ' : '';
$sql .= $pre . $key . " != '" . $value . "'";
$i++;
}
}
if (array_key_exists("order_by", $conditions)) {
$sql .= ' ORDER BY ' . $conditions['order_by'];
}
if (array_key_exists("start", $conditions) && array_key_exists("limit", $conditions)) {
$sql .= ' LIMIT ' . $conditions['start'] . ',' . $conditions['limit'];
}
elseif (!array_key_exists("start", $conditions) && array_key_exists("limit", $conditions)) {
$sql .= ' LIMIT ' . $conditions['limit'];
}
$result = $this
->db
->query($sql);
if (array_key_exists("return_type", $conditions) && $conditions['return_type'] != 'all') {
switch ($conditions['return_type']) {
case 'count':
$data = $result->num_rows;
break;
case 'single':
$data = ($result->num_rows > 0) ? $result->fetch_assoc() : false;
break;
default:
$data = '';
}
}
else {
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
}
return !empty($data) ? $data : false;
}
/*
* Insert data into the database
* @param array the data for inserting into the table
*/
public function insert($data) {
if (!empty($data) && is_array($data)) {
$columns = '';
$values = '';
$i = 0;
if (!array_key_exists('created', $data)) {
$data['created'] = date("Y-m-d H:i:s");
}
if (!array_key_exists('modified', $data)) {
$data['modified'] = date("Y-m-d H:i:s");
}
foreach ($data as $key => $val) {
$pre = ($i > 0) ? ', ' : '';
$columns .= $pre . $key;
$values .= $pre . "'" . $this
->db
->real_escape_string($val) . "'";
$i++;
}
$query = "INSERT INTO " . $this->userTbl . " (" . $columns . ") VALUES (" . $values . ")";
$insert = $this
->db
->query($query);
return $insert ? $this
->db->insert_id : false;
}
else {
return false;
}
}
/*
* Update data into the database
* @param array the data to update into the table
* @param array where condition on updating data
*/
public function update($data, $conditions) {
if (!empty($data) && is_array($data) && !empty($conditions)) {
//prepare columns and values sql
$cols_vals = '';
$i = 0;
if (!array_key_exists('modified', $data)) {
$data['modified'] = date("Y-m-d H:i:s");
}
foreach ($data as $key => $val) {
$pre = ($i > 0) ? ', ' : '';
$cols_vals .= $pre . $key . " = '" . $this
->db
->real_escape_string($val) . "'";
$i++;
}
//prepare where conditions
$whereSql = '';
$ci = 0;
foreach ($conditions as $key => $value) {
$pre = ($ci > 0) ? ' AND ' : '';
$whereSql .= $pre . $key . " = '" . $value . "'";
$ci++;
}
//prepare sql query
$query = "UPDATE " . $this->userTbl . " SET " . $cols_vals . " WHERE " . $whereSql;
//update data
$update = $this
->db
->query($query);
return $update ? true : false;
}
else {
return false;
}
}
/*
* Insert / Update social user data into the database
* @param array the data to insert or update into the table
*/
function checkUser($userData = array()) {
if (!empty($userData)) {
// Check whether user data already exists in database with same oauth info
$prevQuery = "SELECT * FROM " . $this->userTbl . " WHERE oauth_provider = '" . $userData['oauth_provider'] . "' AND oauth_uid = '" . $userData['oauth_uid'] . "'";
$prevResult = $this
->db
->query($prevQuery);
// Check whether user data already exists in database with same email
$prevQuery2 = "SELECT * FROM " . $this->userTbl . " WHERE email != '' AND email = '" . $userData['email'] . "'";
$prevResult2 = $this
->db
->query($prevQuery2);
if ($prevResult->num_rows > 0) {
$cols_vals = '';
$i = 0;
// Update user data if already exists
if (!array_key_exists('modified', $userData)) {
$userData['modified'] = date("Y-m-d H:i:s");
}
foreach ($userData as $key => $val) {
$pre = ($i > 0) ? ', ' : '';
$cols_vals .= $pre . $key . " = '" . $this
->db
->real_escape_string($val) . "'";
$i++;
}
//prepare sql query
$query = "UPDATE " . $this->userTbl . " SET " . $cols_vals . " WHERE oauth_provider = '" . $userData['oauth_provider'] . "' AND oauth_uid = '" . $userData['oauth_uid'] . "'";
//update data
$update = $this
->db
->query($query);
}
elseif ($prevResult2->num_rows > 0) {
// Update user data if already exists
if (!array_key_exists('modified', $userData)) {
$userData['modified'] = date("Y-m-d H:i:s");
}
//prepare sql query
$query = "UPDATE " . $this->userTbl . " SET oauth_provider = '" . $userData['oauth_provider'] . "', oauth_uid = '" . $userData['oauth_uid'] . "', modified = '" . $userData['modified'] . "' WHERE email = '" . $userData['email'] . "'";
//update data
$update = $this
->db
->query($query);
}
else {
$columns = '';
$values = '';
$i = 0;
// Insert user data
$userData['activated'] = '1';
$userData['status'] = '1';
if (!array_key_exists('created', $userData)) {
$userData['created'] = date("Y-m-d H:i:s");
}
if (!array_key_exists('modified', $userData)) {
$userData['modified'] = date("Y-m-d H:i:s");
}
foreach ($userData as $key => $val) {
$pre = ($i > 0) ? ', ' : '';
$columns .= $pre . $key;
$values .= $pre . "'" . $this
->db
->real_escape_string($val) . "'";
$i++;
}
$query = "INSERT INTO " . $this->userTbl . " (" . $columns . ") VALUES (" . $values . ")";
$insert = $this
->db
->query($query);
}
// Get user data from the database
$result = $this
->db
->query($prevQuery);
$userData = $result->fetch_assoc();
}
// Return user data
return $userData;
}
}