Version: current

      1 <?php
      2
      3 /**
      4  * Настройки для корзины
      5  *
      6  * @package cart
      7  * @author inxo
      8  */
      9 class CartSiteConfig extends SiteConfigDecorator {
     10
     11     function extraStatics() {
     12         return array(
     13             'db' => array(
     14                 'CartMinimalOrderPrice' => 'Decimal',
     15 //              'CartHideZeroPrice' => 'Boolean',
     16                 'CartAdminEmail' => 'Text',
     17                 'CartSenderEmail' => 'Text',
     18                 'CartRegisterEnabled' => 'Boolean',
     19                 'CartRegisterRequire' => 'Boolean',
     20                 'CartAdminNewOrderSubject' => 'Varchar(255)',
     21                 'CartUserNewOrderSubject' => 'Varchar(255)',
     22                 'CartUserStatusSubject' => 'Varchar(255)',
     23                 'CachedCartLifeTime' => 'Int', // время жизни кешированной корзины и ее куки в днях
     24             ),
     25             'defaults' => array(
     26                 'CartMinimalOrderPrice' => 0,
     27 //              'CartHideZeroPrice' => 0,
     28                 'CartRegisterEnabled' => false,
     29                 'CartRegisterRequire' => false,
     30                 'CartAdminNewOrderSubject' => _t('SiteConfig.DefaultCartAdminNewOrderSubject', 'New Order %d'),
     31                 'CartUserNewOrderSubject' => _t('SiteConfig.DefaultCartUserNewOrderSubject', 'Your order %d'),
     32                 'CartUserStatusSubject' => _t('SiteConfig.DefaultCartUserStatusSubject', 'Order %d status changed'),
     33                 'CachedCartLifeTime' => 30,
     34             ),
     35         );
     36     }
     37
     38     /**
     39      * Проверяет возможно ли использовать регистрацию на сайте
     40      * На данный момент только по наличию модуля auth
     41      *
     42      * @return boolean
     43      */
     44     static function CartRegistraionAvailable() {
     45         return class_exists('ProfilePage');
     46     }
     47
     48     /**
     49      * Емайл для уведомления администратора магазина
     50      *
     51      * @return string
     52      */
     53     function CartAdminEmail() {
     54         return ($this->owner->CartAdminEmail) ? $this->owner->CartAdminEmail : $this->owner->AdminEmail();
     55     }
     56
     57     /**
     58      * Емайл с которого будут уходить письма клиенту
     59      *
     60      * @return string
     61      */
     62     function CartSenderEmail() {
     63         return ($this->owner->CartSenderEmail) ? $this->owner->CartSenderEmail : $this->owner->SenderEmail();
     64     }
     65
     66     /**
     67      * Формирует тему для письма администратору о новом заказе
     68      *
     69      * @param int $order - номер заказа
     70      *
     71      * @return string
     72      */
     73     function CartAdminNewOrderSubject($order) {
     74         return $this->formatSubject('CartAdminNewOrderSubject', $order);
     75     }
     76
     77     /**
     78      * Формирует тему для письма клиенту о новом заказе
     79      *
     80      * @param int $order - номер заказа
     81      *
     82      * @return string
     83      */
     84     function CartUserNewOrderSubject($order) {
     85         return $this->formatSubject('CartUserNewOrderSubject', $order);
     86     }
     87
     88     /**
     89      * Формирует тему для письма клиенту о изменении статуса заказа
     90      *
     91      * @param int $order - номер заказа
     92      *
     93      * @return string
     94      */
     95     function CartUserStatusSubject($order) {
     96         return $this->formatSubject('CartUserStatusSubject', $order);
     97     }
     98
     99     function updateCMSFields(FieldSet &$fields) {
    100         $tab = WebylonSiteConfig::get_config_tab($fields, 'Cart');
    101
    102         $tab->push(new NumericField('CartMinimalOrderPrice', $this->owner->fieldLabel('CartMinimalOrderPrice')));
    103 //      $tab->push(new CheckboxField('CartHideZeroPrice', $this->owner->fieldLabel('CartHideZeroPrice')));
    104
    105         $tab->push(new EmailField('CartAdminEmail', $this->owner->fieldLabel('CartAdminEmail') . sprintf(' (%s)', $this->owner->AdminEmail())));
    106         $tab->push(new EmailField('CartSenderEmail', $this->owner->fieldLabel('CartSenderEmail') . sprintf(' (%s)', $this->owner->SenderEmail())));
    107
    108         if (self::CartRegistraionAvailable()) {
    109             $tab->push(new CheckboxField('CartRegisterEnabled', $this->owner->fieldLabel('CartRegisterEnabled')));
    110             $tab->push(new CheckboxField('CartRegisterRequire', $this->owner->fieldLabel('CartRegisterRequire')));
    111         }
    112
    113         $tab->push(new TextField('CartAdminNewOrderSubject', $this->owner->fieldLabel('CartAdminNewOrderSubject')));
    114         $tab->push(new TextField('CartUserNewOrderSubject', $this->owner->fieldLabel('CartUserNewOrderSubject')));
    115         $tab->push(new TextField('CartUserStatusSubject', $this->owner->fieldLabel('CartUserStatusSubject')));
    116
    117         $tab->push(new NumericField('CachedCartLifeTime', $this->owner->fieldLabel('CachedCartLifeTime')));
    118     }
    119
    120     function onBeforeWrite() {
    121         if (!self::CartRegistraionAvailable()) {
    122             $this->owner->CartRegisterEnabled = 0;
    123             $this->owner->CartRegisterRequire = 0;
    124         }
    125     }
    126
    127     /**
    128      * Форматирет тему письма в зависимости от того указан placeholder для номера заказа или нет
    129      *
    130      * @param string $name - имя переменной в которой храниться текст
    131      * @param int $order - номер заказа
    132      *
    133      * @return string
    134      */
    135     private function formatSubject($name, $order) {
    136         $str = ($this->owner->$name) ? $this->owner->$name : _t('SiteConfig.Default' . $name);
    137         return (strstr($str, '%d') === false) ? $str : sprintf($str, $order);
    138     }
    139
    140 }
    141

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -