Класс Users.php

Класс Users

Предназначен для работы с покупателями сайта. Выполняет основные функции для работы с ними (удаление, добавление и т.д).

Функция get_users()

Код функции (спойлер)
 
 public function get_users($filter = array()) {
        $limit = 1000;
        $page = 1;
        $group_id_filter = '';
        $keyword_filter = '';

        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
        }

        if(isset($filter['page'])) {
            $page = max(1, intval($filter['page']));
        }

        if(isset($filter['group_id'])) {
            $group_id_filter = $this->db->placehold('AND u.group_id in(?@)', (array)$filter['group_id']);
        }

        if(isset($filter['keyword'])) {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword) {
                $keyword_filter .= $this->db->placehold('AND (
                    u.name LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR u.last_ip LIKE "%'.$this->db->escape(trim($keyword)).'%"
                ) ');
            }
        }

        $order = 'u.name';
        if(!empty($filter['sort'])) {
            switch ($filter['sort']) {
                case 'date':
                    $order = 'u.created DESC';
                    break;
                case 'name':
                    $order = 'u.name';
                    break;
                case 'email':
                    $order = 'u.email';
                    break;
                case 'cnt_order':
                    $order = "(select count(o.id) as count from __orders o where o.user_id = u.id) DESC";
                    break;
            }
        }

        $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);
        // Выбираем пользователей
        $query = $this->db->placehold("SELECT
                u.id,
                u.email,
                u.password,
                u.name,
                u.phone,
                u.address,
                u.group_id,
                u.last_ip,
                u.created,
                g.discount,
                g.name as group_name
            FROM __users u
            LEFT JOIN __groups g ON u.group_id=g.id
            WHERE
                1
                $group_id_filter
                $keyword_filter
            ORDER BY $order
            $sql_limit
        ");
        $this->db->query($query);
        return $this->db->results();
    }

Функция принимает один аргумент $filter в виде массива.

Параметры которые содержит функция:

  • $filter['limit'] - лимит (количество) записей, которые нужно выбрать с БД
  • $filter['page'] - номер страницы, с которой нужно начать выборку данных (используется при пагинации)
  • $filter['group_id'] - массив id групп пользователей, для того что бы выбрать юзеров для конкретной группы
  • $filter['keyword'] - строка со словами поиска. Поиск работает по таиким полям: имя, емейл, ip
  • $filter['sort'] - параметр сортировки пользователей (дата, имя, емейл, количество заказов),

Функция возвращает массив объектов пользователей сайта


Функция count_users()

Код функции (спойлер)
 public function count_users($filter = array()) {
        $group_id_filter = '';
        $keyword_filter = '';

        if(isset($filter['group_id'])) {
            $group_id_filter = $this->db->placehold('AND u.group_id in(?@)', (array)$filter['group_id']);
        }

        if(isset($filter['keyword'])) {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword) {
                $keyword_filter .= $this->db->placehold('AND (
                    u.name LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR u.email LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR u.last_ip LIKE "%'.$this->db->escape(trim($keyword)).'%"
                ) ');
            }
        }
        // Выбираем пользователей
        $query = $this->db->placehold("SELECT count(*) as count
            FROM __users u
            LEFT JOIN __groups g ON u.group_id=g.id
            WHERE
                1
                $group_id_filter
                $keyword_filter
        ");
        $this->db->query($query);
        return $this->db->result('count');
    }

Функция для подсчета количества пользователей по определнным параметрам

Функция принимает один аргумент $filter в виде массива

Параметры которые содержит функция:

  • $filter['group_id'] - массив id групп пользователей
  • $filter['keyword'] - строка со словами поиска. Поиск работает по таиким полям: имя, емейл, ip

Функция возвращает количество подсчитанных пользователей


Функция get_user()

Код функции (спойлер)
    public function get_user($id) {
        if (empty($id)) {
            return false;
        }
        if(gettype($id) == 'string') {
            $where = $this->db->placehold('AND u.email=? ', $id);
        } else {
            $where = $this->db->placehold('AND u.id=? ', intval($id));
        }

        // Выбираем пользователя
        $query = $this->db->placehold("SELECT
                u.id,
                u.email,
                u.password,
                u.name,
                u.phone,
                u.address,
                u.group_id,
                u.last_ip,
                u.created,
                g.discount,
                g.name as group_name
            FROM __users u
            LEFT JOIN __groups g ON u.group_id=g.id
            WHERE
                1
                $where
            LIMIT 1
        ", $id);
        $this->db->query($query);
        $user = $this->db->result();
        if(empty($user)) {
            return false;
        }
        $user->discount *= 1; // Убираем лишние нули, чтобы было 5 вместо 5.00
        return $user;
    }

Фукнция выбирает пользователя сайта по его id

Функция принимает аргумент $id

Следует отметить, что если id передать как строку, то пользователь будет выбираться по полю email.
Если передать число - выбирается по полю id

Параметры которые содержит функция:

Функция возвращает обьект с информацией о пользователе


Функция add_user()

Код функции (спойлер)
    public function add_user($user) {
        $user = (array)$user;
        if(isset($user['password'])) {
            $user['password'] = md5($this->salt.$user['password'].md5($user['password']));
        }

        $query = $this->db->placehold("SELECT count(*) as count FROM __users WHERE email=?", $user['email']);
        $this->db->query($query);

        if($this->db->result('count') > 0) {
            return false;
        }

        $query = $this->db->placehold("INSERT INTO __users SET ?%", $user);
        $this->db->query($query);
        return $this->db->insert_id();
    }

Фукнция добавления нового нового пользователя на сайт (при регистрации)

Функция принимает один аргумент $user

Параметры которые содержит функция:

  • $user - массив или объект с данными о пользователе (пароль, имя, почта и т.д)

Функция возвращает id добавленного пользователя


Функция update_user()

Код функции (спойлер)
    public function update_user($id, $user) {
        $user = (array)$user;
        if(isset($user['password'])) {
            $user['password'] = md5($this->salt.$user['password'].md5($user['password']));
        }
        $query = $this->db->placehold("UPDATE __users SET ?% WHERE id=? LIMIT 1", $user, intval($id));
        $this->db->query($query);
        return $id;
    }

Фукнция для обновления конкретного пользователя

Функция принимает два аргумента $id, $user

Параметры которые содержит функция:

  • $id - id пользователя, которого нужно обновить
  • $user - массив или объект с данным, которые нужно обновить

Функция возвращает id обновленного пользователя


Функция delete_user()

Код функции (спойлер)
    public function delete_user($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("UPDATE __orders SET user_id=0 WHERE user_id=?", intval($id));
            $this->db->query($query);

            $query = $this->db->placehold("DELETE FROM __users WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                return true;
            }
        }
        return false;
    }

Фукнция удаления пользователя

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - id пользователя, которого следует удалить из БД

Функция возвращает true в случае успешного удаления


Функция get_groups()

Код функции (спойлер)
    public function get_groups() {
        // Выбираем группы
        $query = $this->db->placehold("SELECT g.id, g.name, g.discount FROM __groups AS g ORDER BY g.discount");
        $this->db->query($query);
        return $this->db->results();
    }

Фукнция для выборки всех групп покупателей

Функция не принимает аругментов

Параметры которые содержит функция:

Функция возвращает массив объектов групп пользователей


Функция get_group()

Код функции (спойлер)
    public function get_group($id) {
        // Выбираем группу
        $query = $this->db->placehold("SELECT * FROM __groups WHERE id=? LIMIT 1", $id);
        $this->db->query($query);
        $group = $this->db->result();

        return $group;
    }

Фукнция для выбора конкретной группы пользователей

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - id группы, которую нужно выбрать с базы данных

Функция возвращает объект с информацией о группе пользователей


Функция add_group()

Код функции (спойлер)
    public function add_group($group) {
        $query = $this->db->placehold("INSERT INTO __groups SET ?%", $group);
        $this->db->query($query);
        return $this->db->insert_id();
    }

Фукнция добавления группы пользователей

Функция принимает один аргумент $group

Параметры которые содержит функция:

  • $group - объект с данными о группе пользователей

Функция возвращает id добавленной группы пользователей


Функция update_group()

Код функции (спойлер)
    public function update_group($id, $group) {
        $query = $this->db->placehold("UPDATE __groups SET ?% WHERE id=? LIMIT 1", $group, intval($id));
        $this->db->query($query);
        return $id;
    }

Фукнция обновления группы пользователей

Функция принимает два аргумента $id,$group

Параметры которые содержит функция:

  • $id - id группы, которую нужно обновить
  • $group - объект с данными о группе пользователей

Функция возвращает id обновленной группы пользователей


Функция delete_group()

Код функции (спойлер)
    public function delete_group($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("UPDATE __users SET group_id=NULL WHERE group_id=? LIMIT 1", intval($id));
            $this->db->query($query);

            $query = $this->db->placehold("DELETE FROM __groups WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                return true;
            }
        }
        return false;
    }

Фукнция удаления группы пользователей

Функция принимает аргумент $id

Параметры которые содержит функция:

  • $id - id группы, которую нужно удалить

Функция возвращает true в случае успешного удаления


Функция check_password()

Код функции (спойлер)
    public function check_password($email, $password) {
        $encpassword = md5($this->salt.$password.md5($password));
        $query = $this->db->placehold("SELECT id FROM __users WHERE email=? AND password=? LIMIT 1", $email, $encpassword);
        $this->db->query($query);
        if($id = $this->db->result('id')) {
            return $id;
        }
        return false;
    }

Фукнция проверки пароля пользователя (для авторизации)

Функция принимает два аргумента $email, $password

Параметры которые содержит функция:

  • $email - емейл пользователя
  • $password - пароль, который ввел пользователь

Функция возвращает id пользователя, в случае успеха