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

Packages

  • auth
  • Booking
  • cart
    • shipping
    • steppedcheckout
  • Catalog
  • 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

  • Announcement_Controller
  • AnnouncementHolder_Controller
  • BookingAdminPage_Controller
  • BookingPage_Controller
  • Cart_Controller
  • CartPage_Controller
  • Catalog_Controller
  • CheckoutPage_Controller
  • ChequePayment_Handler
  • ContactsPage_Controller
  • ContentController
  • ContentNegotiator
  • Controller
  • DataObjectManager_Controller
  • DatePickerField_Controller
  • Director
  • DocPage_Controller
  • DocumentsPage_Controller
  • Event_Controller
  • EventHolder_Controller
  • FileDataObjectManager_Controller
  • FindCyrillic_Controller
  • HomePage_Controller
  • LastDoc_Controller
  • LiveCalendarWidget_Controller
  • MapObject_Controller
  • MapObjectGroup_Controller
  • MapPage_Controller
  • MediawebPage_Controller
  • ModelAsController
  • MultiUploadControls
  • NewsArchive
  • Orders1CExchange_Controller
  • Page_Controller
  • Payment_Handler
  • PhotoAlbumManager_Controller
  • Product_Controller
  • ProductSearchPage_Controller
  • ProfilePage_Controller
  • PublHolder_Controller
  • Publication_Controller
  • RatingExtension_Controller
  • RegistrationPage_Controller
  • RemoveOrphanedPagesTask
  • RequestHandler
  • Room_Controller
  • RoomCatalog_Controller
  • RootURLController
  • SapphireInfo
  • Search_Controller
  • Session
  • SimpleOrderPage_Controller
  • SiteMap_Controller
  • SpecialCatalog_Controller
  • SS_HTTPRequest
  • SS_HTTPResponse
  • StartCatalog_Controller
  • SubsitesSelectorPage_Controller
  • VideoBankPage_Controller

Interfaces

  • NestedController

Exceptions

  • SS_HTTPResponse_Exception
  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         //if (class_exists('CheckoutPage')) return false;
 83         return (DataObject::get_one('SimpleOrderPage')) ? false : parent::canCreate();
 84     }
 85 
 86     function canDelete() {
 87         return (Director::isDev()) ? parent::canDelete() : false;
 88     }
 89 
 90     function requireDefaultRecords() {
 91         if ($this->class != 'SimpleOrderPage') return;
 92         if (class_exists('CheckoutPage')) return;
 93 
 94         // default pages
 95         if(!$page = DataObject::get_one('SimpleOrderPage')) {
 96             $page = new SimpleOrderPage();
 97             $page->Title = _t('SimpleOrderPage.DefaultTitle', 'Order');
 98             $page->URLSegment = 'order';
 99             $page->Status = 'Published';
100             $page->write();
101             $page->publish('Stage', 'Live');
102             $page->flushCache();
103             DB::alteration_message('SimpleOrderPage created', 'created');
104         }
105     }
106 
107     function onBeforeDelete() {
108         parent::onBeforeDelete();
109         foreach ($this->Orders() as $order)
110             $order->delete();
111             
112         foreach ($this->PaymentTypes() as $type)
113             $type->delete();
114     }
115 }
116 
117 class SimpleOrderPage_Controller extends Page_Controller {
118     
119     protected $item = false;
120     protected $itemCount = 1;
121 
122     /**
123      * Возвращает контроллер для внешнеого использования
124      * Применяется в SimpleOrderButton
125      * 
126      * @return SimpleOrderPage_Controller
127      */
128     static function get_instance() {
129         $page = DataObject::get_one('SimpleOrderPage');
130         if (!$page) user_error(_t('SimpleOrderPage.OrderPageNeed', 'Need to create order page first'), E_USER_ERROR);
131         return new SimpleOrderPage_Controller($page);
132     }
133 
134     function init() {
135         parent::init();
136         $data = $this->getRequest();
137         
138         if (isset($data['Num']) && is_numeric($data['Num']) && $data['Num'] > 0) {
139             $this->itemCount = (int) $data['Num'];
140         }
141         
142         $id = 0;
143         if (isset($data['itemId']) && is_numeric($data['itemId'])) {
144             $id = $data['itemId'];
145         }
146         elseif (isset($data['ProductID']) && is_numeric($data['ProductID'])) {
147             $id = $data['ProductID'];
148         }
149         if ($id) {
150             $this->item = DataObject::get_by_id(singleton('Product')->ClassName, $id);
151         }
152         else {
153             Director::redirect('');
154         }
155     }
156 
157     function index() {
158         return $this->checkout();
159     }
160 
161     /**
162      * Генерирует страницу с формой подтверждения заказа
163      * 
164      * @return string
165      */
166     function checkout() {
167         if ($this->item) {
168             return $this->render(array(
169                 'Product' => $this->item,
170                 'ProductCount' => $this->itemCount,
171                 'TotalSum' => $this->item->Price(1) * $this->itemCount,
172                 'Form' => $this->SimpleOrderForm(),
173             ));
174         }
175         Director::redirect('');
176     }
177 
178     /**
179      * Cоздает новый заказ
180      * 
181      * @param array $data 
182      * @param Form $form 
183      * 
184      * @return string
185      */
186     public function complite($data, $form) {
187         if ($this->item) {
188             $order = new SimpleOrderData();
189             //$order->update($data);
190             $form->saveInto($order);
191             
192             $order->ProductID = $this->item->ID;
193             $order->ParentID = $this->ID;
194             $order->Num = $this->itemCount;
195             $order->TotalSum = $order->Product()->Price(1) * $order->Num;
196             $order->write();
197 
198             // Отправим письма
199             $siteName = $this->SiteConfig()->Title;
200             if (!$siteName)
201                 $siteName = Director::absoluteBaseURL();
202                 
203             // Продавцу
204             $mail = new Email($this->SiteConfig()->SenderEmail(), $this->OrderEmail, sprintf(_t('SimpleOrderPage.SellerSubject', 'New order from %s'), $siteName));
205             $mail->setTemplate('SimpleOrderSeller');
206             $mail->populateTemplate($order);
207             $mail->send();
208             unset($mail);
209 
210             // Покупателю
211             $mail = new Email($this->SiteConfig()->SenderEmail(), $order->Email, sprintf(_t('SimpleOrderPage.CustomerSubject', 'Order from %s'), $siteName));
212             $mail->setTemplate('SimpleOrderCustomer');
213             $mail->populateTemplate($order);
214             $mail->send();
215             unset($mail);
216 
217             // Выведем сообщение о результатах
218             return $this->renderWith(array('SimpleOrderComplite', 'Page'), array('Order' => $order));
219         }
220     }
221 
222     /**
223     * Формирует форму заказа 1 товара (если нет корзины)
224     * Использует для построения формы данные возвращаемые {@link SimpleOrderData},
225     * для изменения формы на сайте надо написать extention к SimpleOrderData.
226     * @todo использовать UserDefinedForm для формы
227     *
228     * @result Form  - объект формы
229     */
230     public function SimpleOrderForm() {
231         if (!$this->item) return 'xxx';
232         
233         $payments = $this->data()->ActivePaymentTypes();
234         if (!$payments) {
235             user_error(_t('SimpleOrderPage.PaymentTypeNeed', 'Create one payment type first'), E_USER_ERROR);
236         }
237         $order = singleton('SimpleOrderData');
238         
239         $form = new Form(
240             $this, 
241             'SimpleOrderForm', 
242             $order->getOrderFields($payments->toDropDownMap(), $this->item, $this->itemCount), 
243             new FieldSet(
244                 new FormAction('complite', _t('SimpleOrderForm.OrderButton', 'Checkout'))
245             ),
246             new CustomRequiredFields($order->getOrderRequiredFields())
247         );
248         $form->setTemplate('SimpleOrderForm');
249 
250         $this->extend('updateSimpleOrderForm', $form);
251         
252         // добавим каптчу
253         if (class_exists('SpamProtectorManager') && SimpleOrderPage::$use_spam_protection) 
254             SpamProtectorManager::update_form($form);
255 
256         return $form;
257     }
258 }
259 
[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.1 API Docs API documentation generated by ApiGen 2.8.0