コード例 #1
0
 /**
  * Returns PayPal's cart items in Nette\ArrayHash or false if there are no items.
  *
  * @param $data Data from PayPal response
  * @return Nette\ArrayHash or boolean
  */
 public function getCartItems()
 {
     $patternKeys = '';
     $iterator = new CachingIterator($this->CART_ITEM_KEYS);
     for ($iterator->rewind(); $iterator->valid(); $iterator->next()) {
         if ($iterator->isFirst()) {
             $patternKeys .= '(';
         }
         $patternKeys .= $iterator->current();
         if ($iterator->hasNext()) {
             $patternKeys .= '|';
         }
         if ($iterator->isLast()) {
             $patternKeys .= ')';
         }
     }
     $pattern = '/^' . $patternKeys . '[0-9]+$/';
     $itemsData = Utils::array_keys_by_ereg($this->responseData, $pattern);
     $items = array();
     $itemsCount = count($items);
     if (!empty($itemsData)) {
         $itemsCount = count($itemsData) / count($this->CART_ITEM_KEYS);
     }
     // We must control if the result of division is integer.
     // Because if not, it means the count of keys in PayPal cart item changed.
     assert(is_int($itemsCount));
     for ($i = 0; $i < $itemsCount; ++$i) {
         $keys = array();
         foreach ($this->CART_ITEM_KEYS as $key) {
             $keys[] = $key . $i;
         }
         if (Utils::array_keys_exist($itemsData, $keys)) {
             $items[] = array('name' => $itemsData['l_name' . $i], 'quantity' => $itemsData['l_qty' . $i], 'taxAmount' => $itemsData['l_taxamt' . $i], 'amount' => $itemsData['l_amt' . $i], 'description' => $itemsData['l_desc' . $i], 'weightValue' => $itemsData['l_itemweightvalue' . $i], 'lengthValue' => $itemsData['l_itemlengthvalue' . $i], 'widthValue' => $itemsData['l_itemwidthvalue' . $i], 'heightValue' => $itemsData['l_itemheightvalue' . $i]);
         }
     }
     return ArrayHash::from($items);
 }