Example #1
0
 /**
  * savePurchases
  *
  */
 public function savePurchases($order_id, $purchases_data)
 {
     $p_ids = array();
     $del_ids = array();
     $query = $this->modx->newQuery('shk_purchases');
     $query->where(array('order_id' => $order_id));
     $purchases = $this->modx->getIterator('shk_purchases', $query);
     $className = '';
     $packageName = '';
     if ($purchases) {
         foreach ($purchases as $purchase) {
             $index = -1;
             foreach ($purchases_data as $k => $temp_arr) {
                 if (!empty($temp_arr['id']) && $temp_arr['id'] == $purchase->id) {
                     $index = $k;
                     break;
                 }
             }
             if ($index > -1) {
                 if (!empty($purchases_data[$index]['options'])) {
                     $options = array();
                     foreach ($purchases_data[$index]['options'] as $k => $v) {
                         if (!empty($v[0])) {
                             $options[$k] = $v;
                         }
                     }
                     $purchases_data[$index]['options'] = json_encode($options);
                 }
                 $purchase->fromArray($purchases_data[$index]);
                 $purchase->save();
             } else {
                 array_push($del_ids, $purchase->id);
             }
             if (!empty($purchase->class_name) && !empty($purchase->package_name)) {
                 $className = $purchase->class_name;
                 $packageName = $purchase->package_name;
             }
         }
         //print_r($purchases_data);
         //Сохраняем новые товары
         if ($purchases_data) {
             //Параметры сниппета Shopkeeper3
             $snippet_properties = array();
             $response = $this->modx->runProcessor('getsnippetproperties', array(), array('processors_path' => $this->modx->getOption('core_path') . 'components/shopkeeper3/processors/mgr/'));
             if (!$response->isError()) {
                 $snippet_properties = $response->getObject();
             }
             require_once $this->modx->getOption('core_path') . "components/shopkeeper3/model/shopkeeper.class.php";
             $shopCart = new Shopkeeper($this->modx, $snippet_properties);
             $shopCart->addPackage($packageName);
             foreach ($purchases_data as $k => $temp_arr) {
                 if (empty($temp_arr['id'])) {
                     $new_p = array('p_id' => !empty($temp_arr['p_id']) ? $temp_arr['p_id'] : 0, 'order_id' => $order_id, 'name' => $temp_arr['name'], 'count' => !empty($temp_arr['count']) ? $temp_arr['count'] : 1, 'price' => !empty($temp_arr['price']) ? $temp_arr['price'] : '', 'options' => !empty($temp_arr['options']) ? $temp_arr['options'] : '', 'class_name' => $className, 'package_name' => $packageName);
                     if (is_array($new_p['options'])) {
                         $new_p['options'] = json_encode($new_p['options']);
                     }
                     //Если нет названия или цены
                     if (!empty($new_p['p_id']) && empty($new_p['name']) || empty($new_p['price'])) {
                         $shopCart->getPurchaseFromDB($new_p['p_id'], $className);
                         if (is_object($shopCart->purchase)) {
                             if (empty($new_p['name'])) {
                                 $new_p['name'] = $shopCart->purchase->get($shopCart->config['fieldName']);
                             }
                             if (!isset($new_p['price']) || $new_p['price'] == '') {
                                 $new_p['price'] = $shopCart->getProductPrice();
                             }
                             $fields_data = array('url' => $shopCart->getPurchaseUrl());
                             $fields_data_str = json_encode($fields_data);
                             $new_p['data'] = $fields_data_str;
                         } else {
                             $new_p['price'] = 0;
                         }
                     }
                     $purchase = $this->modx->newObject('shk_purchases');
                     $purchase->fromArray($new_p);
                     $purchase->save();
                 }
             }
         }
         //Удаляем товары
         if (count($del_ids) > 0) {
             $affected = $this->modx->removeCollection('shk_purchases', array("order_id" => $order_id, "id:IN" => $del_ids));
         }
         return true;
     } else {
         return false;
     }
 }