Класс Money.php

 

Класс Money

Предназначен для работы с валютой сайта

Функция __construct()

Код функции (спойлер)
 
   /*Создание основных настроек для работы с валютой*/
    public function __construct() {
        parent::__construct();

        if(isset($this->settings->price_decimals_point)) {
            $this->decimals_point = $this->settings->price_decimals_point;
        }

        if(isset($this->settings->price_thousands_separator)) {
            $this->thousands_separator = $this->settings->price_thousands_separator;
        }
        $this->design->smarty->registerPlugin('modifier', 'convert', array($this, 'convert'));

        $this->init_currencies();
    }

Инициализация настроек валют


Функция init_currencies()

Код функции (спойлер)
    /*Инициализация валют сайта*/
    public function init_currencies() {
        $lang_sql = $this->languages->get_query(array('object'=>'currency'));
        $this->currencies = array();
        // Выбираем из базы валюты
        $query = "SELECT
                c.id,
                c.code,
                c.rate_from,
                c.rate_to,
                c.cents,
                c.position,
                c.enabled,
                $lang_sql->fields
            FROM __currencies c
            $lang_sql->join
            ORDER BY c.position
        ";
        $this->db->query($query);
        $results = $this->db->results();
        foreach($results as $c) {
            $this->currencies[$c->id] = $c;
        }
        $this->currency = reset($this->currencies);
    }

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


Функция get_currencies()

Код функции (спойлер)
     /*Выборка валют*/
    public function get_currencies($filter = array()) {
        $currencies = array();
        foreach($this->currencies as $id=>$currency) {
            if((isset($filter['enabled']) && $filter['enabled'] == 1 && $currency->enabled) || empty($filter['enabled'])) {
                $currencies[$id] = $currency;
            }
        }
        return $currencies;
    }

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

Принимает один аргумент $filter в виде массива

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

  • $filter['enabled'] - видимость валюты (состояние вкл/выкл)

Функция возвращает массив валют


Функция get_currency()

Код функции (спойлер)
   /*Выборка конкретной валюты*/
    public function get_currency($id = null) {
        if(!empty($id) && is_integer($id) && isset($this->currencies[$id])) {
            return $this->currencies[$id];
        }
        if(!empty($id) && is_string($id)) {
            foreach($this->currencies as $currency) {
                if($currency->code == $id) {
                    return $currency;
                }
            }
        }
        return $this->currency;
    }

Функция выборки конктрентой валюты сайта

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

  • $id - id необходимой валюты

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


Функция add_currency()

Код функции (спойлер)
   /*Добавление валюты*/
    public function add_currency($currency) {
        $currency = (object)$currency;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($currency, 'currency');

        $query = $this->db->placehold('INSERT INTO __currencies SET ?%', $currency);

        if(!$this->db->query($query)) {
            return false;
        }

        $id = $this->db->insert_id();

        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'currency');
        }

        $this->db->query("UPDATE __currencies SET position=id WHERE id=?", $id);
        $this->init_currencies();
        return $id;
    }

Фукнция добавления новой валюты на сайт

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

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

  • $currency - обьект с данными о валюте (название, код, знак и т.д)

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


Функция update_currency()

Код функции (спойлер)
     /*Обновление валюты*/
    public function update_currency($id, $currency) {
        $currency = (object)$currency;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($currency, 'currency');

        $query = $this->db->placehold('UPDATE __currencies SET ?% WHERE id in (?@)', $currency, (array)$id);
        if(!$this->db->query($query)) {
            return false;
        }

        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'currency', $this->languages->lang_id());
        }

        $this->init_currencies();
        return $id;
    }

Фукнция обновления валюты

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

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

  • $id - id обновляемой валюты
  • $currency - данные для валюты (имя, знак и т.д)

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


Функция delete_currency()

Код функции (спойлер)
    /*Удаление валюты*/
    public function delete_currency($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("DELETE FROM __currencies WHERE id=? LIMIT 1", intval($id));
            $this->db->query($query);
            $this->db->query("DELETE FROM __lang_currencies WHERE currency_id=? LIMIT 1", intval($id));
        }
        $this->init_currencies();
    }

Фукнция удаления валюты

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

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

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

Функция convert()

Код функции (спойлер)
    /*Конвертация валюты в определнный формат*/
    public function convert($price, $currency_id = null, $format = true) {
        if(isset($currency_id)) {
            if(is_numeric($currency_id)) {
                $currency = $this->get_currency((integer)$currency_id);
            } else {
                $currency = $this->get_currency((string)$currency_id);
            }
        } elseif(isset($_SESSION['currency_id'])) {
            $currency = $this->get_currency($_SESSION['currency_id']);
        } else {
            $currency = current($this->get_currencies(array('enabled'=>1)));
        }

        $result = $price;
        if(!empty($currency)) {
            // Умножим на курс валюты
            $result = $result*$currency->rate_from/$currency->rate_to;

            // Точность отображения, знаков после запятой
            $precision = isset($currency->cents)?$currency->cents:2;
        }

        // Форматирование цены
        if($format) {
            $result = number_format($result, $precision, $this->settings->decimals_point, $this->settings->thousands_separator);
        } else {
            $result = round($result, $precision);
        }
        return $result;
    }

Функция конвертации валюты по заданному формату

Функция принимает три аргумента($price, $currency_id = null, $format = true)

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

  • $price - цена (значение) для конвертации
  • $currency_id - id валюты для которой нужно сконвертировать значение
  • $format - булевый тип, если стоит true - означает что нужно привести значение к определенному формату (разделители тысяч и т.д)

Функция возвращает сконвертирование значение в нужно формате