HEX
Server: Apache
System: Linux server1.ariadata.co 4.18.0-553.120.1.el8_10.x86_64 #1 SMP Mon Apr 20 18:04:27 EDT 2026 x86_64
User: nepi (1051)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,show_source,popen,proc_open
Upload Files
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>';
    // }
}