Webylon 3.2 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • 1c
    • exchange
      • catalog
  • auth
  • Booking
  • building
    • company
  • cart
    • shipping
    • steppedcheckout
  • Catalog
    • monument
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • Catalog
  • CatalogAdmin
  • CatalogCMSActionDecorator
  • CatalogMemberDecorator
  • CatalogPrice
  • CMSSiteTreeFilter_Catalog
  • Monument
  • MonumentCatalog
  • MonumentForm
  • Orders1CExchange_SiteConfig
  • PaymentType
  • Product
  • ProductCatalogSiteConfig
  • ProductSearchPage
  • SimpleOrderButton
  • SimpleOrderData
  • SimpleOrderForm
  • SimpleOrderPage
  • StartCatalog
  • VirtualProduct

Interfaces

  • OrderButtonInterface
  1 <?php
  2 
  3 /**
  4  * Простой заказ
  5  * Если не используется модуль Cart, тогда для заказа будет использован данный
  6  * класс и соответственно используются одноименные шаблоны SimpleOrder.ss
  7  *
  8  * @package Catalog
  9  * @author inxo, dvp
 10  */
 11 class SimpleOrderPage extends Page {
 12 
 13     //static $icon = 'cms/images/treeicons/element'; //!!!!
 14     static $can_be_root = true;
 15     static $allowed_children = "none";
 16 
 17     static $db = array(
 18         'OrderEmail' => 'Varchar(255)',
 19         'DeliveryPrice' => 'Text',
 20     );
 21 
 22     static $has_many = array(
 23         'Orders' => 'SimpleOrderData',
 24         'PaymentTypes' => 'PaymentType',
 25     );
 26     
 27     static $defaults = array(
 28         'DevEditType' => 'Fixed',
 29     );
 30 
 31     /**
 32      * Использовать ли защиту от спама
 33      */
 34     static $use_spam_protection = true;
 35 
 36     static function use_spam_protection($value = true) {
 37         SimpleOrderPage::$use_spam_protection = $value;
 38     }
 39 
 40     /**
 41      * Возвращает массив активных методов оплаты для DropdownField
 42      * 
 43      * @return array
 44      */
 45     function ActivePaymentTypes() {
 46         return $this->PaymentTypes('Active=1');
 47     }
 48 
 49     function getCMSFields() {
 50         SiteTree::disableCMSFieldsExtensions();
 51         $fields = parent::getCMSFields();
 52         SiteTree::enableCMSFieldsExtensions();
 53         
 54         // тут настройки для заказа
 55         $fields->addFieldToTab('Root.Content.Main', new TextField('OrderEmail', $this->fieldLabel('OrderEmail')), 'Content');
 56         $fields->addFieldToTab('Root.Content.Main', new TextField('DeliveryPrice', $this->fieldLabel('DeliveryPrice')), 'Content');
 57 
 58         $fields->addFieldToTab('Root.Content', new Tab('Orders', _t('SimpleOrderPage.tab_Orders', 'Orders')), 'Metadata');
 59         $fields->addFieldToTab(
 60             'Root.Content.Orders', 
 61             $orders = new HasManyComplexTableField($this, 'Orders', 'SimpleOrderData')
 62         );
 63         $orders->setPermissions(array('delete', 'edit'));
 64         $orders->setRelationAutoSetting(true);
 65         $orders->Markable = false;
 66 
 67         $fields->addFieldToTab('Root.Content', new Tab('Payments', _t('SimpleOrderPage.tab_PaymentTypes', 'Payment Types')), 'Metadata');
 68         $fields->addFieldToTab(
 69             'Root.Content.Payments', 
 70             $payTypes = new HasManyComplexTableField($this, 'PaymentTypes', 'PaymentType') 
 71         );
 72         $payTypes->setPermissions(array('add', 'delete', 'edit'));
 73         $payTypes->relationAutoSetting = true;
 74         $payTypes->Markable = false;
 75 
 76         $this->extend('updateCMSFields', $fields);
 77         
 78         return $fields;
 79     }
 80 
 81     function canCreate() {
 82         return (DataObject::get_one('SimpleOrderPage') || DataObject::get_one('SimpleOrderForm')) ? false : parent::canCreate();
 83     }
 84 
 85     function canDelete() {
 86         return (Director::isDev()) ? parent::canDelete() : false;
 87     }
 88 
 89     function requireDefaultRecords() {
 90         return; // No more auto SimpleOrderPage, we prefer SimpleOrderForm!!!
 91     }
 92 
 93     function onBeforeDelete() {
 94         parent::onBeforeDelete();
 95         foreach ($this->Orders() as $order)
 96             $order->delete();
 97             
 98         foreach ($this->PaymentTypes() as $type)
 99             $type->delete();
100     }
101 }
102 
103 class SimpleOrderPage_Controller extends Page_Controller {
104     
105     protected $item = false;
106     protected $itemCount = 1;
107 
108     function init() {
109         parent::init();
110         $data = $this->getRequest();
111         
112         if (isset($data['Num']) && is_numeric($data['Num']) && $data['Num'] > 0) {
113             $this->itemCount = (int) $data['Num'];
114         }
115         
116         $id = 0;
117         if (isset($data['itemId']) && is_numeric($data['itemId'])) {
118             $id = $data['itemId'];
119         }
120         elseif (isset($data['ProductID']) && is_numeric($data['ProductID'])) {
121             $id = $data['ProductID'];
122         }
123         if ($id) {
124             $this->item = DataObject::get_by_id(singleton('Product')->ClassName, $id);
125         }
126         else {
127             Director::redirect('');
128         }
129     }
130 
131     function index() {
132         return $this->checkout();
133     }
134 
135     /**
136      * Генерирует страницу с формой подтверждения заказа
137      * 
138      * @return string
139      */
140     function checkout() {
141         if ($this->item) {
142             return $this->render(array(
143                 'Product' => $this->item,
144                 'ProductCount' => $this->itemCount,
145                 'TotalSum' => $this->item->Price(1) * $this->itemCount,
146                 'Form' => $this->SimpleOrderForm(),
147             ));
148         }
149         Director::redirect('');
150     }
151 
152     /**
153      * Cоздает новый заказ
154      * 
155      * @param array $data 
156      * @param Form $form 
157      * 
158      * @return string
159      */
160     public function complite($data, $form) {
161         if ($this->item) {
162             $order = new SimpleOrderData();
163             //$order->update($data);
164             $form->saveInto($order);
165             
166             $order->ProductID = $this->item->ID;
167             $order->ParentID = $this->ID;
168             $order->Num = $this->itemCount;
169             $order->TotalSum = $order->Product()->Price(1) * $order->Num;
170             $order->write();
171 
172             // Отправим письма
173             $siteName = $this->SiteConfig()->Title;
174             if (!$siteName)
175                 $siteName = Director::absoluteBaseURL();
176                 
177             // Продавцу
178             $mail = new Email($this->SiteConfig()->SenderEmail(), $this->OrderEmail, sprintf(_t('SimpleOrderPage.SellerSubject', 'New order from %s'), $siteName));
179             $mail->setTemplate('SimpleOrderSeller');
180             $mail->populateTemplate($order);
181             $mail->send();
182             unset($mail);
183 
184             // Покупателю
185             $mail = new Email($this->SiteConfig()->SenderEmail(), $order->Email, sprintf(_t('SimpleOrderPage.CustomerSubject', 'Order from %s'), $siteName));
186             $mail->setTemplate('SimpleOrderCustomer');
187             $mail->populateTemplate($order);
188             $mail->send();
189             unset($mail);
190 
191             // Выведем сообщение о результатах
192             return $this->renderWith(array('SimpleOrderComplite', 'Page'), array('Order' => $order));
193         }
194     }
195 
196     /**
197     * Формирует форму заказа 1 товара (если нет корзины)
198     * Использует для построения формы данные возвращаемые {@link SimpleOrderData},
199     * для изменения формы на сайте надо написать extention к SimpleOrderData.
200     * @todo использовать UserDefinedForm для формы
201     *
202     * @result Form  - объект формы
203     */
204     public function SimpleOrderForm() {
205         if (!$this->item) return 'xxx';
206         
207         $payments = $this->data()->ActivePaymentTypes();
208         if (!$payments) {
209             user_error(_t('SimpleOrderPage.PaymentTypeNeed', 'Create one payment type first'), E_USER_ERROR);
210         }
211         $order = singleton('SimpleOrderData');
212         
213         $form = new Form(
214             $this, 
215             'SimpleOrderForm', 
216             $order->getOrderFields($payments->toDropDownMap(), $this->item, $this->itemCount), 
217             new FieldSet(
218                 new FormAction('complite', _t('SimpleOrderForm.OrderButton', 'Checkout'))
219             ),
220             new CustomRequiredFields($order->getOrderRequiredFields())
221         );
222         $form->setTemplate('SimpleOrderForm');
223 
224         $this->extend('updateSimpleOrderForm', $form);
225         
226         // добавим каптчу
227         if (class_exists('SpamProtectorManager') && SimpleOrderPage::$use_spam_protection) 
228             SpamProtectorManager::update_form($form);
229 
230         return $form;
231     }
232 }
233 
[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. -
Webylon 3.2 API Docs API documentation generated by ApiGen 2.8.0