1 <?php
2
3
4 class Orders1CExchange_Controller extends ContentController implements PermissionProvider {
5
6 static $debug = false;
7
8 function providePermissions() {
9 return array(
10 'EXCHANGE_1C' => array(
11 'name' => _t('EXCHANGE_1C.EXCHANGE_1C_ORDERS', 'Export orders to 1C'),
12 'category' => _t('Permissions.PERMISSIONS_CATEGORY', 'Roles and access permissions'),
13 'help' => _t('EXCHANGE_1C.EXCHANGE_1C_ORDERS_HELP', 'Ability to export orders to 1C.'),
14 'sort' => 400
15 )
16 );
17 }
18
19 static function debug_log($data) {
20 if (self::$debug)
21 file_put_contents(TEMP_FOLDER . '/1c.log', $data."\n", FILE_APPEND);
22 }
23
24 function init() {
25 parent::init();
26 HTTP::set_cache_age(0);
27
28 self::debug_log(date("\n\n-------\nc"));
29 self::debug_log('ip: ' . $_SERVER['REMOTE_ADDR']);
30 self::debug_log('request: ' . $_SERVER['REQUEST_URI']);
31
32 self::debug_log('checkAuth:');
33 self::debug_log('cookie: ' . var_export($_COOKIE, true));
34 self::debug_log('session: ' . var_export($_SESSION, true));
35 self::debug_log('member: ' . Member::currentUserID());
36
37
38 if (!Permission::check('EXCHANGE_1C')) {
39 self::debug_log("Try HTTP auth with login: {$_SERVER[PHP_AUTH_USER]} pass: {$_SERVER[PHP_AUTH_PW]}");
40
41
42 $member = BasicAuth::requireLogin('1C EXCHANGE', 'EXCHANGE_1C');
43 if ($member === true) {
44
45 self::debug_log('cli mode');
46 }
47 else {
48 $member->logIn();
49 Session::save();
50 self::debug_log('access granted to: ' . Member::CurrentUserID() . " ({$member->Email})");
51 }
52 }
53 }
54
55 function index($request) {
56
57
58 $key = $request->requestVar('type') . '_' . $request->requestVar('mode');
59 self::debug_log("run mode: $key");
60
61 switch ($key) {
62 case 'catalog_checkauth':
63 case 'sale_checkauth':
64 echo "success\n" . session_name()."\n" . session_id() . "\n";
65 self::debug_log('sucess: '. session_name().':' . session_id());
66 break;
67
68 case 'catalog_init':
69 case 'sale_init':
70 $limit = 100000 * 1024;
71 echo "zip=no\nfile_limit={$limit}\n";
72 self::debug_log("init success");
73 break;
74
75 case 'sale_query':
76 $exportClass = new Orders1CExchange();
77 $xml = $exportClass->exportOrders();
78 if ($xml) {
79 echo $xml;
80 self::debug_log("export success");
81 } else {
82 echo "failure\n";
83 self::debug_log("export empty");
84 }
85 break;
86
87 case 'sale_success':
88 $exportClass = new Orders1CExchange();
89 $exportClass->setOrdersExported();
90
91 echo "success\n";
92 self::debug_log("mark success");
93 break;
94
95 case 'sale_file':
96 if (!$filename = basename($request->requestVar('filename'))) {
97 echo "failure\n";
98 self::debug_log('error: no filename');
99 break;
100 }
101
102 ini_set('max_execution_time', 1800);
103 $dirname = TEMP_FOLDER . '/1c_exchange';
104 if (!file_exists($dirname)) {
105 mkdir($dirname);
106 chmod($dirname, 0775);
107 }
108
109 $filePath = $dirname . '/' . $filename;
110 file_put_contents($filePath, $request->getBody());
111 if (file_exists($filePath)) {
112 $exportClass = new Orders1CExchange();
113 $exportClass->importOrders($filePath);
114
115
116 echo "success\n";
117 self::debug_log("import success");
118 }
119 else {
120 echo "failure\n";
121 self::debug_log("upload failure:" . $filePath);
122 }
123 break;
124
125 default:
126 echo "failure\nunsupported mode\n";
127 self::debug_log('unsupported mode: ' . $key);
128 }
129 }
130 }
131
[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.
-