Version: current

     1 <?php
     2 /**
     3  * Контроллер для экспорта заказов
     4  * возможно:
     5  * - получение списка заказов с указанием последнего полученного: /OrderExporter/listorders/$ID
     6  * - получение конкретного заказа по его id: /OrderExporter/getorder/$ID
     7  *
     8  * @package cart
     9  * @author menedem
    10  */
    11 class OrderExporter extends Controller implements PermissionProvider {
    12
    13     static $URLSegment = '';
    14     static $allowed_actions = array('');
    15     static $return_as_file = false;
    16     private static $enabled = false;
    17
    18     /**
    19      * Включение и настройка экспорта
    20      *
    21      * @param array $params - параметры настройки, сейчас это:
    22      * string 'url' если нужно указать альтернативную url
    23      * bool 'as_file' если нужно возвращать xml в виде прицепленного файла
    24      */
    25     static function setup($params = array()) {
    26         if (isset($params['url'])) self::$URLSegment = $params['url'];
    27         if (isset($params['as_file'])) self::$return_as_file = $params['as_file'];
    28
    29         if (self::$URLSegment) {
    30             Director::addRules(50, array(self::$URLSegment . '/$Action!/$ID' => 'OrderExporter'));
    31         }
    32
    33         self::$allowed_actions = array('listorders', 'getorder');
    34     }
    35
    36     function providePermissions() {
    37         return array(
    38             'EXPORT_ORDERS' => array(
    39                 'name' => 'Экспортировать данные заказов',
    40                 'category' => _t('Permission.CMS_ACCESS_CATEGORY', 'CMS Access'),
    41                 'help' => 'Позволяет получать данные заказов по специальной url',
    42                 'sort' => 0,
    43             ),
    44         );
    45     }
    46
    47     function URLSegment() {
    48         return (self::$URLSegment) ? self::$URLSegment : 'OrderExporter';
    49     }
    50
    51     function init() {
    52         parent::init();
    53         BasicAuth::requireLogin('Order Export', 'EXPORT_ORDERS');
    54     }
    55
    56     /**
    57      * Возвращает список заказов
    58      *
    59      * принимает url параметр - id последнего загруженного заказа /OrderExporter/listorders/$ID
    60      * возвращает более свежие заказы, xml формируется шаблоном OrderExporter
    61      * TODO принимать в качестве отправной точки дату последнего экспорта
    62      *
    63      * @param SS_HTTPRequest $req
    64      */
    65     function listorders($req) {
    66         $rs = new DataobjectSet();
    67         $id = intval($req->param('ID'));
    68
    69         $xml =  $this->renderWith('OrderExporter', array('Orders' => DataObject::get('Order', "ID > {$id}", "ID ASC")));
    70
    71         return (self::$return_as_file) ? SS_HTTPRequest::send_file($xml, 'orders.xml') : $xml;
    72     }
    73
    74     /**
    75      * Возвращает один заказ по id
    76      *
    77      * принимает url параметр - id заказа /OrderExporter/getorder/$ID
    78      * xml формируется шаблоном OrderExport
    79      *
    80      * @param SS_HTTPRequest $req
    81      */
    82     function getorder($req) {
    83         $rs = new DataobjectSet();
    84         $id = intval($req->param('ID'));
    85
    86         $xml =  $this->renderWith('OrderExport', DataObject::get_by_id('Order', $id));
    87
    88         return (self::$return_as_file) ? SS_HTTPRequest::send_file($xml, "order_{$id}.xml") : $xml;
    89     }
    90 }
    91

[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. -