/** * Import object data from json string. * Note: Watch out for single index arrays becoming stdClass objects * * @param string JSON * @param bool * @return Cart */ public function importJson($json, $reset = true) { // strict parameter if (!is_string($json)) { return false; } // reset cart if ($reset) { $this->reset(); } $cart = @(array) json_decode($json, true); // just gimme an array if (isset($cart['id'])) { $this->setId($cart['id']); } if (isset($cart['customer'])) { $customerData = $cart['customer']; $customer = new Customer(); if (is_array($customerData)) { $customer->importJson(json_encode($customerData)); $this->setCustomer($customer); } } if (isset($cart['items']) && count($cart['items']) > 0) { $items = $cart['items']; foreach ($items as $productKey => $item) { $itemJson = json_encode($item); $item = new Item(); $item->importJson($itemJson); $this->setItem($item); } } if (isset($cart['shipments']) && count($cart['shipments']) > 0) { $shipments = $cart['shipments']; foreach ($shipments as $shipmentKey => $shipment) { $tmpShipment = new Shipment(); if ($shipment instanceof stdClass) { $tmpShipment->importStdClass($shipment); $this->setShipment($tmpShipment); } else { if (is_array($shipment)) { $tmpShipment->importJson(json_encode($shipment)); $this->setShipment($tmpShipment); } } } } if (isset($cart['discounts']) && count($cart['discounts']) > 0) { $discounts = $cart['discounts']; foreach ($discounts as $discountKey => $discount) { $tmpDiscount = new Discount(); if ($discount instanceof stdClass) { $tmpDiscount->importStdClass($discount); $this->setDiscount($tmpDiscount); } else { if (is_array($tmpDiscount)) { $tmpDiscount->importJson(json_encode($discount)); $this->setDiscount($tmpDiscount); } } } } if (isset($cart['include_tax'])) { $includeTax = $cart['include_tax']; $this->setIncludeTax($includeTax); } if (isset($cart['tax_rate'])) { $taxRate = $cart['tax_rate']; $this->setTaxRate($taxRate); } if (isset($cart['discount_taxable_last'])) { $discountTaxableLast = $cart['discount_taxable_last']; $this->setDiscountTaxableLast($discountTaxableLast); } return $this; }