File: /home/nepi/task.nepi.ir/ouqat.php
<?php
class OUQAT
{
private $db_type = "sqlite";
private $db_sqlite_path = "./ouqat.db";
private $db_connection = null;
private $user_is_logged_in = false;
public $feedback = "";
public $VERSION = 9.1;
public function __construct()
{
$this->db_sqlite_path = (file_exists("../ouqat.db")) ? "../ouqat.db" : "./ouqat.db";
if ($this->performMinimumRequirementsCheck()) {
$this->startAuth();
}
}
private function performMinimumRequirementsCheck()
{
if (version_compare(PHP_VERSION, '5.3.7', '<')) {
echo "Sorry, Simple PHP Login does not run on a PHP version older than 5.3.7 !";
} elseif (version_compare(PHP_VERSION, '5.5.0', '<')) {
require_once("libraries/password_compatibility_library.php");
return true;
} elseif (version_compare(PHP_VERSION, '5.5.0', '>=')) {
return true;
}
// default return
return false;
}
public function startAuth()
{
// check is user wants to see register page (etc.)
if (isset($_POST["user_email"])) {
$this->doRegistration();
//$this->showPageRegistration();
} else {
// start the session, always needed!
$this->doStartSession();
// check for possible user interactions (login with session/post data or logout)
$this->performUserLoginAction();
// show "page", according to user's login status
// if ($this->getUserLoginStatus()) {
// $this->showPageLoggedIn();
// } else {
// $this->showPageLoginForm();
// }
}
}
private function createDatabaseConnection()
{
try {
$this->db_connection = new PDO($this->db_type . ':' . $this->db_sqlite_path);
$this->db_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return true;
} catch (PDOException $e) {
$this->feedback = "PDO database connection problem: " . $e->getMessage();
} catch (Exception $e) {
$this->feedback = "General problem: " . $e->getMessage();
}
return false;
}
private function performUserLoginAction()
{
if (isset($_GET["action"]) && $_GET["action"] == "logout") {
$this->doLogout();
} elseif (!empty($_SESSION['user_name']) && ($_SESSION['user_is_logged_in'])) {
$this->doLoginWithSessionData();
} elseif (isset($_POST["user_name"])) {
$this->doLoginWithPostData();
}
}
private function doStartSession()
{
if (session_status() == PHP_SESSION_NONE) session_start();
}
private function doLoginWithSessionData()
{
$this->feedback = "Login Success as " . $_SESSION['user_name'];
$this->user_is_logged_in = true; // ?
}
private function doLoginWithPostData()
{
if ($this->checkLoginFormDataNotEmpty()) {
if ($this->createDatabaseConnection()) {
$this->checkPasswordCorrectnessAndLogin();
}
}
}
private function doLogout()
{
$_SESSION = array();
session_destroy();
$this->user_is_logged_in = false;
$this->feedback = "You were just logged out.";
}
private function doRegistration()
{
if ($this->checkRegistrationData()) {
if ($this->createDatabaseConnection()) {
$this->createNewUser();
}
}
// default return
return false;
}
private function checkLoginFormDataNotEmpty()
{
if (!empty($_POST['user_name']) && !empty($_POST['user_password'])) {
return true;
} elseif (empty($_POST['user_name'])) {
$this->feedback = "نام کاربری خالی است";
} elseif (empty($_POST['user_password'])) {
$this->feedback = "پسورد خالی است";
}
// default return
return false;
}
private function checkPasswordCorrectnessAndLogin()
{
// remember: the user can log in with username or email address
$sql = 'SELECT uid, user_name, user_email, user_password_hash, user_level
FROM users
WHERE user_name = :user_name OR user_email = :user_name
LIMIT 1';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':user_name', $_POST['user_name']);
$query->execute();
// Btw that's the weird way to get num_rows in PDO with SQLite:
// if (count($query->fetchAll(PDO::FETCH_NUM)) == 1) {
// Holy! But that's how it is. $result->numRows() works with SQLite pure, but not with SQLite PDO.
// This is so crappy, but that's how PDO works.
// As there is no numRows() in SQLite/PDO (!!) we have to do it this way:
// If you meet the inventor of PDO, punch him. Seriously.
$result_row = $query->fetchObject();
if ($result_row) {
// using PHP 5.5's password_verify() function to check password
if (password_verify($_POST['user_password'], $result_row->user_password_hash) && $result_row->user_level !== "-1") {
// write user data into PHP SESSION [a file on your server]
$_SESSION['user_name'] = $result_row->user_name;
$_SESSION['user_email'] = $result_row->user_email;
$_SESSION['uid'] = $result_row->uid;
$_SESSION['user_is_logged_in'] = true;
$_SESSION['user_level'] = $result_row->user_level;
$this->user_is_logged_in = true;
$this->feedback = "Login Success";
return true;
} else if ($result_row->user_level == "-1") {
$this->feedback = "اکانت شما فعال نمی باشد. در صورت تایید اکانت شما فعال می گردد";
} else {
$this->feedback = "پسورد اشتباه است";
}
} else {
$this->feedback = "چنین کاربری نداریم";
}
// default return
return false;
}
private function checkRegistrationData()
{
// if no registration form submitted: exit the method
if (!isset($_POST["user_email"])) {
return false;
}
// validating the input
if (
!empty($_POST['user_name'])
&& strlen($_POST['user_name']) <= 64
&& strlen($_POST['user_name']) >= 2
&& preg_match('/^[a-z\d]{2,64}$/i', $_POST['user_name'])
&& !empty($_POST['user_email'])
&& strlen($_POST['user_email']) <= 64
&& filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL)
&& !empty($_POST['user_password'])
&& strlen($_POST['user_password']) >= 6
&& !empty($_POST['user_password_repeat'])
&& ($_POST['user_password'] === $_POST['user_password_repeat'])
) {
// only this case return true, only this case is valid
return true;
} elseif (empty($_POST['user_name'])) {
$this->feedback = "نام کاربری خالی";
} elseif (empty($_POST['user_password']) || empty($_POST['user_password_repeat'])) {
$this->feedback = "پسورد خالی";
} elseif ($_POST['user_password'] !== $_POST['user_password_repeat']) {
$this->feedback = "پسوردها شبیه نیستند";
} elseif (strlen($_POST['user_password']) < 6) {
$this->feedback = "حداقل 6 حرف داشته باشد پسورد";
} elseif (strlen($_POST['user_name']) > 64 || strlen($_POST['user_name']) < 2) {
$this->feedback = "نام کاربری کوتاه یا خیلی بلند است";
} elseif (!preg_match('/^[a-z\d]{2,64}$/i', $_POST['user_name'])) {
$this->feedback = "از حروف استاندارد در نام کاربری استفاده شود";
} elseif (empty($_POST['user_email'])) {
$this->feedback = "ایمیل خالی";
} elseif (strlen($_POST['user_email']) > 64) {
$this->feedback = "ایمیل طولانی";
} elseif (!filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL)) {
$this->feedback = "آدرس ایمیل نامعتبر";
} else {
$this->feedback = "خطایی عجیب رخ داده";
}
// default return
return false;
}
private function createNewUser()
{
// remove html code etc. from username and email
$user_name = htmlentities($_POST['user_name'], ENT_QUOTES);
$user_email = htmlentities($_POST['user_email'], ENT_QUOTES);
$user_password = $_POST['user_password'];
// crypt the user's password with the PHP 5.5's password_hash() function, results in a 60 char hash string.
// the constant PASSWORD_DEFAULT comes from PHP 5.5 or the password_compatibility_library
$user_password_hash = password_hash($user_password, PASSWORD_DEFAULT);
$sql = 'SELECT * FROM users WHERE user_name = :user_name OR user_email = :user_email';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':user_name', $user_name);
$query->bindValue(':user_email', $user_email);
$query->execute();
// As there is no numRows() in SQLite/PDO (!!) we have to do it this way:
// If you meet the inventor of PDO, punch him. Seriously.
$result_row = $query->fetchObject();
if ($result_row) {
$this->feedback = "نام کاربری یا ایمیل قبلا استفاده شده، دوباره تلاش نمایید";
} else {
$sql = 'INSERT INTO users (user_name, user_password_hash, user_email)
VALUES(:user_name, :user_password_hash, :user_email)';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':user_name', $user_name);
$query->bindValue(':user_password_hash', $user_password_hash);
$query->bindValue(':user_email', $user_email);
// PDO's execute() gives back TRUE when successful, FALSE when not
// @link http://stackoverflow.com/q/1661863/1114320
$registration_success_state = $query->execute();
if ($registration_success_state) {
$this->feedback = "اکانت با موفقیت ثبت شد، می توانید لاگین بفرمایید";
return true;
} else {
$this->feedback = "متاسفانه ثبت انجام نشد، بعدا دوباره تلاش کنید";
}
}
// default return
return false;
}
public function getUserLoginStatus()
{
return $this->user_is_logged_in;
}
public function addEvent()
{
if (isset($_POST["m"]) && isset($_POST["a"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$mood = $_POST['m'];
$date = $_POST['d'];
$time = $_POST['t'];
$aid = $_POST['a'];
$des = isset($_POST['n']) ? $_POST['n'] : "";
$fdate = isset($_POST['fd']) ? $_POST['fd'] : "";
$tdate = isset($_POST['td']) ? $_POST['td'] : "";
// $this->feedback = $mood . " " . $date . " " . $time . " " . $aid . " " . $des . " " . $from . " " . $to;
//print $_SESSION['user_name']; return false;
$sql = 'INSERT INTO events (mood, date, time, aid, des, fdate, tdate, uid)
VALUES(:mood, :date, :time, :aid, :des, :fdate, :tdate, :uid)';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':mood', $mood);
$query->bindValue(':date', $date);
$query->bindValue(':time', $time);
$query->bindValue(':aid', $aid);
$query->bindValue(':des', $des);
$query->bindValue(':fdate', $fdate);
$query->bindValue(':tdate', $tdate);
$query->bindValue(':uid', $_SESSION['uid']);
//$arr = array($mood, $date, $time, $aid, $des, $from, $to);
// return false;
$add_event_success = $query->execute();
if ($add_event_success) {
$this->feedback = $this->db_connection->lastInsertId();
//$this->feedback = "Event add success";
} else {
$this->feedback = "Sorry, add Event failed.";
}
}
}
}
}
public function getEvents($id = NULL, $year = NULL, $month = NULL, $day = NULL)
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus() && $this->getLastUniqeDate() !== null) {
if ($_SESSION['user_level'] > 0 && isset($id)) {
$d = '"' . (isset($year) ? $year . '/' . $month . '/' . $day : $this->getLastUniqeDate($id)) . '"';
$sql = 'SELECT * FROM events WHERE uid = ' . $id . ' AND date = ' . $d . ' ORDER BY time DESC';
} else {
$d = '"' . (isset($year) ? $year . '/' . $month . '/' . $day : $this->getLastUniqeDate()) . '"';
$sql = 'SELECT * FROM events WHERE uid = ' . $_SESSION['uid'] . ' AND date = ' . $d . ' ORDER BY time DESC';
}
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($results) < 1) {
return false;
}
$results = array($d => $results);
return json_encode($results);
}
}
return json_encode(array());
}
public function getListEvents()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus() && $this->getLastUniqeDate() !== null) {
$dates = isset($_POST["dates"]) ? $_POST["dates"] : array($this->getLastUniqeDate());
$uid = ($_SESSION['user_level'] > 0) ? (isset($_POST["uid"]) ? $_POST["uid"] : $_SESSION['uid']) : $_SESSION['uid'];
$query = $this->db_connection->prepare('SELECT * FROM events WHERE uid = :uid AND date = :date ORDER BY time DESC');
$returns = array();
$query->bindValue(':uid', $uid);
for ($i = 0; $i < count($dates); $i++) {
$date = $dates[$i];
$query->bindValue(':date', $date);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
// if (sizeof($results) > 0) {
//if (!array_key_exists($date, $returns)) $returns[$date] = [];
$returns[$date] = $results;
// }
}
return json_encode($returns);
}
}
return json_encode(array());
}
private function getLastUniqeDate($id = NULL)
{
$dateSql = 'SELECT DISTINCT date from events WHERE uid = ' . (isset($id) ? $id : $_SESSION['uid']) . ' ORDER BY date DESC LIMIT 1';
$dateSql = $this->db_connection->prepare($dateSql);
$dateSql->execute();
$resDate = $dateSql->fetchAll(PDO::FETCH_ASSOC);
return isset($resDate[0]) ? $resDate[0]["date"] : null;
}
public function getEventsUniqeDate($id = NULL)
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0 && isset($id)) {
$sql = 'SELECT DISTINCT date from events WHERE uid = ' . $id . ' ORDER BY date DESC';
} else {
$sql = 'SELECT DISTINCT date from events WHERE uid = ' . $_SESSION['uid'] . ' ORDER BY date DESC';
}
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
return json_encode($results);
}
}
return false;
}
public function getActions()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$sql = 'SELECT * FROM actions WHERE uid = ' . $_SESSION['uid'];
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($results) < 1) {
$sql = 'SELECT * FROM actions WHERE uid = 0';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
}
return json_encode($results[0]["list"]);
}
}
}
public function setActions()
{
if (isset($_POST["uid"]) && isset($_POST["act"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$uid = $_POST['uid'];
$actions = $_POST['act'];
if ($_SESSION['uid'] == $uid || $_SESSION['user_level'] > 0) {
$sql = 'SELECT * FROM actions WHERE uid = ' . $uid;
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($results) > 0) {
$sql = 'UPDATE actions SET list = :list WHERE uid = :uid';
} else {
$sql = 'INSERT INTO actions (list, uid)
VALUES(:list, :uid)';
}
$query = $this->db_connection->prepare($sql);
$query->bindValue(':list', $actions);
$query->bindValue(':uid', $uid);
$add_event_success = $query->execute();
if ($add_event_success) {
$this->feedback = "Actions update success";
} else {
$this->feedback = "Sorry, actions update failed.";
}
}
}
}
} else {
return false;
}
}
public function getUsers()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0) {
$sql = 'SELECT * from users';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
header("Content-Type: application/json");
return json_encode($results);
}
}
}
return false;
}
public function userUpdate()
{
if (isset($_REQUEST["uid"]) && isset($_REQUEST["user_password_hash"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0) {
$uid = $_REQUEST['uid'];
$user_name = $_REQUEST['user_name'];
$user_password_hash = $_REQUEST['user_password_hash'];
$user_email = $_REQUEST['user_email'];
$user_level = $_REQUEST['user_level'];
$sql = 'UPDATE users SET user_name = :user_name, user_password_hash = :user_password_hash, user_email = :user_email, user_level = :user_level WHERE uid = :uid';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':uid', $uid);
$query->bindValue(':user_name', $user_name);
$query->bindValue(':user_password_hash', $user_password_hash);
$query->bindValue(':user_email', $user_email);
$query->bindValue(':user_level', $user_level);
// return false;
$add_event_success = $query->execute();
if ($add_event_success) {
$this->feedback = "update user success";
} else {
$this->feedback = "Sorry, update user failed.";
}
}
} else {
echo "false";
}
}
}
}
public function userDel()
{
if (isset($_REQUEST["uid"]) && isset($_REQUEST["user_password_hash"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0) {
$uid = $_REQUEST['uid'];
$user_name = $_REQUEST['user_name'];
$user_password_hash = $_REQUEST['user_password_hash'];
$user_email = $_REQUEST['user_email'];
$user_level = $_REQUEST['user_level'];
$sql = 'DELETE from users WHERE uid = :uid AND user_name = :user_name AND user_password_hash = :user_password_hash AND user_email = :user_email AND user_level = :user_level';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':uid', $uid);
$query->bindValue(':user_name', $user_name);
$query->bindValue(':user_password_hash', $user_password_hash);
$query->bindValue(':user_email', $user_email);
$query->bindValue(':user_level', $user_level);
// return false;
$add_event_success = $query->execute();
if ($add_event_success) {
$this->feedback = "update user success";
} else {
$this->feedback = "Sorry, update user failed.";
}
}
} else {
echo "false";
}
}
}
}
public function backupDB()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0) {
$zip = new ZipArchive;
$tmp_file = "../ouqat-" . date('d-m-Y-h-i') . ".zip";
if ($zip->open($tmp_file, ZipArchive::CREATE)) {
$zip->addFile($this->db_sqlite_path, 'ouqat.db');
//encrition ro server error mide
//$zip->setEncryptionName('ouqat.db', ZipArchive::EM_AES_256, 'Y@zahra110');
$zip->close();
//echo 'Archive created!';
//header('Content-disposition: attachment; filename=' . $tmp_file);
//header('Content-type: application/zip');
//readfile($tmp_file);
echo 'success created file ' . $tmp_file;
} else {
echo 'Failed!!!';
}
}
}
}
}
public function delEvent()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0 || $_POST["uid"] == $_SESSION['uid']) {
if (!isset($_POST["uid"]) && !isset($_POST["id"])) return false;
$id = $_POST["id"];
$uid = $_POST["uid"];
$sql = 'DELETE from events WHERE uid = :uid AND id = :id';
$query = $this->db_connection->prepare($sql);
$query->bindValue(':uid', $uid);
$query->bindValue(':id', $id);
// return false;
$add_event_success = $query->execute();
if ($add_event_success) {
$this->feedback = "delete event success";
} else {
$this->feedback = "Sorry, delete event failed.";
}
}
}
}
}
public function editEvent()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
if ($_SESSION['user_level'] > 0 || $_POST["uid"] == $_SESSION['uid']) {
if (!isset($_POST["uid"]) && !isset($_POST["id"])) return false;
$id = $_POST["id"];
$uid = $_POST["uid"];
$mood = $_POST['m'];
$date = $_POST['d'];
$time = $_POST['t'];
$aid = $_POST['a'];
$des = isset($_POST['n']) ? $_POST['n'] : "";
$fdate = isset($_POST['fd']) ? $_POST['fd'] : "";
$tdate = isset($_POST['td']) ? $_POST['td'] : "";
$sql = 'UPDATE events SET mood = :mood, time = :time, aid = :aid, des = :des, fdate = :fdate, tdate = :tdate, date = :date WHERE uid = :uid AND id = :id';
try {
$query = $this->db_connection->prepare($sql);
$query->bindValue(':uid', $uid);
$query->bindValue(':id', $id);
$query->bindValue(':mood', $mood);
$query->bindValue(':date', $date);
$query->bindValue(':time', $time);
$query->bindValue(':aid', $aid);
$query->bindValue(':des', $des);
$query->bindValue(':fdate', $fdate);
$query->bindValue(':tdate', $tdate);
// return false;
$add_event_success = $query->execute();
} catch (PDOException $e) {
$this->feedback = print_r($e);
return false;
}
if ($add_event_success) {
$this->feedback = "edit event success";
} else {
$this->feedback = "Sorry, edit event failed.";
}
}
}
}
}
function week()
{
if (isset($_POST["m"]) && isset($_POST["d"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$mood = $_POST['m'];
$date = $_POST['d'];
$des = $_POST['des'];
$uid = $_SESSION['uid'];
$sql = 'SELECT * FROM weeks WHERE uid = ' . $uid . ' AND date ="' . $date . '"';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($results) > 0) {
$sql = 'UPDATE weeks SET des = :des, mood = :mood WHERE uid = :uid AND date = :date';
} else {
$sql = 'INSERT INTO weeks (mood, date, des, uid)
VALUES(:mood, :date, :des, :uid)';
}
try {
$query = $this->db_connection->prepare($sql);
$query->bindValue(':mood', $mood);
$query->bindValue(':date', $date);
$query->bindValue(':des', $des);
$query->bindValue(':uid', $uid);
$add_event_success = $query->execute();
} catch (PDOException $e) {
$this->feedback = print_r($e);
return false;
}
if ($add_event_success) {
$this->feedback = "week update success";
} else {
$this->feedback = "Sorry, week Event failed.";
}
}
}
}
}
function month()
{
if (isset($_POST["m"]) && isset($_POST["d"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$mood = $_POST['m'];
$date = $_POST['d'];
$des = $_POST['des'];
$uid = $_SESSION['uid'];
$sql = 'SELECT * FROM months WHERE uid = ' . $uid . ' AND date ="' . $date . '"';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($results) > 0) {
$sql = 'UPDATE months SET des = :des, mood = :mood WHERE uid = :uid AND date = :date';
} else {
$sql = 'INSERT INTO months (mood, date, des, uid)
VALUES(:mood, :date, :des, :uid)';
}
try {
$query = $this->db_connection->prepare($sql);
$query->bindValue(':mood', $mood);
$query->bindValue(':date', $date);
$query->bindValue(':des', $des);
$query->bindValue(':uid', $uid);
$add_event_success = $query->execute();
} catch (PDOException $e) {
$this->feedback = print_r($e);
return false;
}
if ($add_event_success) {
$this->feedback = "months update success";
} else {
$this->feedback = "Sorry, months Event failed.";
}
}
}
}
}
function getWeek()
{
if (isset($_POST["t"]) && isset($_POST["f"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$to = $_POST['t'];
$from = $_POST['f'];
$uid = (isset($_POST['uid']) && $_SESSION['user_level'] > 0) ? $_POST['uid'] : $_SESSION['uid'];
$sql = 'SELECT * FROM weeks WHERE uid = ' . $uid . ' AND date BETWEEN "' . $from . '" AND "' . $to . '" ORDER BY date ASC';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($results);
}
}
}
}
function getMonth()
{
if (isset($_POST["t"]) && isset($_POST["f"])) {
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
$to = $_POST['t'];
$from = $_POST['f'];
$uid = (isset($_POST['uid']) && $_SESSION['user_level'] > 0) ? $_POST['uid'] : $_SESSION['uid'];
$sql = 'SELECT * FROM months WHERE uid = ' . $uid . ' AND date BETWEEN "' . $from . '" AND "' . $to . '" ORDER BY date ASC';
$query = $this->db_connection->prepare($sql);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($results);
}
}
}
}
function export()
{
if ($this->createDatabaseConnection()) {
if ($this->getUserLoginStatus()) {
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=" . $_SESSION['user_name'] . "-" . date('d-m-Y') . ".csv");
header("Pragma: no-cache");
header("Expires: 0");
$to = isset($_REQUEST['t']) ? $_REQUEST['t'] : null;
$from = isset($_REQUEST['f']) ? $_REQUEST['f'] : null;
$uid = (isset($_REQUEST['uid']) && $_SESSION['user_level'] > 0) ? $_REQUEST['uid'] : $_SESSION['uid'];
if (isset($to) && isset($from)) {
$sql = 'SELECT * FROM events WHERE uid = ' . $uid . ' AND date BETWEEN "' . $from . '" AND "' . $to . '" ORDER BY date ASC';
} else {
$sql = 'SELECT * FROM events WHERE uid = ' . $uid . ' ORDER BY date ASC';
}
//get action names
$sqlAction = 'SELECT * FROM actions WHERE uid = ' . $uid;
$queryAction = $this->db_connection->prepare($sqlAction);
$queryAction->execute();
$resultsAction = $queryAction->fetchAll(PDO::FETCH_ASSOC);
if (sizeof($resultsAction) < 1) {
$sqlAction = 'SELECT * FROM actions WHERE uid = 0';
$queryAction = $this->db_connection->prepare($sqlAction);
$queryAction->execute();
$resultsAction = $queryAction->fetchAll(PDO::FETCH_ASSOC);
}
$json = json_decode($resultsAction[0]["list"]);
//continue
$query = $this->db_connection->prepare($sql);
$query->execute();
$fp = fopen('php://output', 'w');
fputs($fp, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
$results = $query->fetchAll(PDO::FETCH_ASSOC);
fputcsv($fp, array("شناسه", "حال", "تاریخ ثبت", "زمان ثبت", "فعالیت", "توضیح", "شروع", "پایان"));
$moodid = "";
$aidid = "";
foreach ($results as $key => $fields) {
$str = $results[$key]["id"];
$str .= ",";
$mood = ""; //$results[$key]["mood"];
$moodid .= $results[$key]["mood"]. "#";
switch ($results[$key]["mood"]) {
case 1:
$mood = "خیلی بد";
break;
case 2:
$mood = "بد";
break;
case 3:
$mood = "معتدل";
break;
case 4:
$mood = "خوب";
break;
case 5:
$mood = "عالی";
break;
}
$str .= $mood; //array("بسیار بد", "بد", "معتدل", "خوب", "عالی")[$mood];
$str .= ",";
$str .= $results[$key]["date"];
$str .= ",";
$str .= $results[$key]["time"];
$str .= ",";
$aid = "";
$aidid .= $results[$key]["aid"]. "#";
foreach ($json as $item) {
if ($item->aid == $results[$key]["aid"]) {
$aid = $item->title;
}
}
$str .= $aid;
$str .= ",";
$str .= $results[$key]["des"];
$str .= ",";
$str .= $results[$key]["fdate"];
$str .= ",";
$str .= $results[$key]["tdate"];
// $str .= ",";
// echo $str;
// print_r($fields);
fputcsv($fp, explode(",", $str));
}
fputcsv($fp,array());fputcsv($fp,array());fputcsv($fp,array());fputcsv($fp,array());fputcsv($fp,array());
fputcsv($fp,array("aid", "mood", "actions"));
fputcsv($fp,array($aidid, $moodid, $resultsAction[0]["list"]));
fclose($fp);
// header('Content-Type: text/csv; charset=utf-8');
// header('Content-Disposition: attachment; filename=data.csv');
// $output = fopen("php://output", "w");
// fputcsv($output, array('id', 'mood', 'date', 'time', 'aid', 'des', 'fdate', 'tdate'));
// while ($results = $query->fetchAll(PDO::FETCH_ASSOC)) {
// fputcsv($output, $results);
// }
// fclose($output);
}
}
}
// public function getBookList()
// {
// if ($this->createDatabaseConnection()) {
// if ($this->getUserLoginStatus()) {
// $sql = 'SELECT * FROM books';
// $query = $this->db_connection->prepare($sql);
// $query->execute();
// $results = $query->fetchAll(PDO::FETCH_ASSOC);
// return json_encode($results);
// }
// }
// return false;
// }
// public function getCatList()
// {
// if ($this->createDatabaseConnection()) {
// if ($this->getUserLoginStatus()) {
// $sql = 'SELECT * FROM cat';
// $query = $this->db_connection->prepare($sql);
// $query->execute();
// $results = $query->fetchAll(PDO::FETCH_ASSOC);
// return json_encode($results);
// }
// }
// return false;
// }
// public function getBook($bid, $cid)
// {
// if ($this->createDatabaseConnection()) {
// if ($this->getUserLoginStatus()) {
// $sql = 'SELECT * FROM content WHERE bid = ' . $bid;
// $query = $this->db_connection->prepare($sql);
// $query->execute();
// $results = $query->fetchAll(PDO::FETCH_ASSOC);
// return json_encode($results);
// }
// }
// return false;
// }
// private function addBookContent($data, $bid, $oid)
// {
// $this->db_connection->beginTransaction(); //**** ADD THIS
// $stmt = $this->db_connection->prepare('INSERT INTO content (txt, bid, oid) VALUES (?,?,?)');
// for ($i = 0; $i < count($data); $i++) {
// $arr = array($data[$i], $bid, $oid);
// $stmt->execute($arr);
// }
// $res = $this->db_connection->commit();
// return $res;
// }
// private function addBookList($data, $bid)
// {
// $this->db_connection->beginTransaction(); //**** ADD THIS
// $stmt = $this->db_connection->prepare('INSERT INTO list (name, bid) VALUES (?,?)');
// for ($i = 0; $i < count($data); $i++) {
// $arr = array($data[$i], $bid);
// $stmt->execute($arr);
// }
// $res = $this->db_connection->commit();
// return $res;
// }
// private function showPageLoggedIn()
// {
// if ($this->feedback) {
// echo $this->feedback . "<br/><br/>";
// }
// echo 'Hello ' . $_SESSION['user_name'] . ', you are logged in.<br/><br/>';
// echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?action=logout">Log out</a>';
// }
// private function showPageLoginForm()
// {
// if ($this->feedback) {
// echo $this->feedback . "<br/><br/>";
// }
// echo '<h2>Login</h2>';
// echo '<form method="post" action="' . $_SERVER['SCRIPT_NAME'] . '" name="loginform">';
// echo '<label for="login_input_username">Username (or email)</label> ';
// echo '<input id="login_input_username" type="text" name="user_name" required /> ';
// echo '<label for="login_input_password">Password</label> ';
// echo '<input id="login_input_password" type="password" name="user_password" required /> ';
// echo '<input type="submit" name="login" value="Log in" />';
// echo '</form>';
// echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '?action=register">Register new account</a>';
// }
// private function showPageRegistration()
// {
// if ($this->feedback) {
// echo $this->feedback . "<br/><br/>";
// }
// echo '<h2>Registration</h2>';
// echo '<form method="post" action="' . $_SERVER['SCRIPT_NAME'] . '?action=register" name="registerform">';
// echo '<label for="login_input_username">Username (only letters and numbers, 2 to 64 characters)</label>';
// echo '<input id="login_input_username" type="text" pattern="[a-zA-Z0-9]{2,64}" name="user_name" required />';
// echo '<label for="login_input_email">User\'s email</label>';
// echo '<input id="login_input_email" type="email" name="user_email" required />';
// echo '<label for="login_input_password_new">Password (min. 6 characters)</label>';
// echo '<input id="login_input_password_new" class="login_input" type="password" name="user_password" pattern=".{6,}" required autocomplete="off" />';
// echo '<label for="login_input_password_repeat">Repeat password</label>';
// echo '<input id="login_input_password_repeat" class="login_input" type="password" name="user_password_repeat" pattern=".{6,}" required autocomplete="off" />';
// echo '<input type="submit" name="register" value="Register" />';
// echo '</form>';
// echo '<a href="' . $_SERVER['SCRIPT_NAME'] . '">Homepage</a>';
// }
}