/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, CartInterface $cart = NULL) { $form['#attached']['library'][] = 'uc_cart/uc_cart.styles'; $cart_config = $this->config('uc_cart.settings'); $form['items'] = array('#type' => 'table', '#tree' => TRUE, '#header' => array('remove' => array('data' => $this->t('Remove'), 'class' => array('remove')), 'image' => array('data' => $this->t('Products'), 'class' => array('image')), 'desc' => array('data' => '', 'class' => array('desc')), 'qty' => array('data' => $this->t('Quantity'), 'class' => array('qty')), 'total' => array('data' => $this->t('Total'), 'class' => array('price')))); $form['data'] = array('#tree' => TRUE, '#parents' => array('items')); $i = 0; $subtotal = 0; foreach ($cart->getContents() as $cart_item) { $item = \Drupal::moduleHandler()->invoke($cart_item->data->module, 'uc_cart_display', array($cart_item)); if (Element::children($item)) { $form['items'][$i]['remove'] = $item['remove']; $form['items'][$i]['remove']['#name'] = 'remove-' . $i; $form['items'][$i]['image'] = uc_product_get_picture($item['nid']['#value'], 'uc_cart'); $form['items'][$i]['desc']['title'] = $item['title']; $form['items'][$i]['desc']['description'] = $item['description']; $form['items'][$i]['qty'] = $item['qty']; $form['items'][$i]['total'] = array('#theme' => 'uc_price', '#price' => $item['#total'], '#wrapper_attributes' => array('class' => 'total')); if (!empty($item['#suffixes'])) { $form['items'][$i]['total']['#suffixes'] = $item['#suffixes']; } $form['data'][$i]['module'] = $item['module']; $form['data'][$i]['nid'] = $item['nid']; $form['data'][$i]['data'] = $item['data']; $form['data'][$i]['title'] = array('#type' => 'value', '#value' => drupal_render($item['title'])); $subtotal += $item['#total']; } $i++; } $form['items'][]['total'] = array('#theme' => 'uc_price', '#prefix' => '<span id="subtotal-title">' . $this->t('Subtotal') . ':</span> ', '#price' => $subtotal, '#wrapper_attributes' => array('colspan' => 5, 'class' => array('subtotal'))); $form['actions'] = array('#type' => 'actions'); // If the continue shopping element is enabled... if (($cs_type = $cart_config->get('continue_shopping_type')) !== 'none') { // Add the element to the form based on the element type. if ($cart_config->get('continue_shopping_type') == 'link') { $form['actions']['continue_shopping'] = array('#type' => 'link', '#title' => $this->t('Continue shopping'), '#url' => Url::fromUri('internal:' . $this->continueShoppingUrl())); } elseif ($cart_config->get('continue_shopping_type') == 'button') { $form['actions']['continue_shopping'] = array('#type' => 'submit', '#value' => $this->t('Continue shopping'), '#submit' => array(array($this, 'submitForm'), array($this, 'continueShopping'))); } } // Add the empty cart button if enabled. if ($cart_config->get('empty_button')) { $form['actions']['empty'] = array('#type' => 'submit', '#value' => $this->t('Empty cart'), '#submit' => array(array($this, 'emptyCart'))); } // Add the control buttons for updating and proceeding to checkout. $form['actions']['update'] = array('#type' => 'submit', '#name' => 'update-cart', '#value' => $this->t('Update cart'), '#submit' => array(array($this, 'submitForm'), array($this, 'displayUpdateMessage'))); $form['actions']['checkout'] = array('#theme' => 'uc_cart_checkout_buttons'); if ($cart_config->get('checkout_enabled')) { $form['actions']['checkout']['checkout'] = array('#type' => 'submit', '#value' => $this->t('Checkout'), '#button_type' => 'primary', '#submit' => array(array($this, 'submitForm'), array($this, 'checkout'))); } $this->renderer->addCacheableDependency($form, $cart); $this->renderer->addCacheableDependency($form, $cart_config); return $form; }
public function testDeletedCartItem() { // Add a product to the cart, then delete the node. $this->addToCart($this->product); $this->product->delete(); // Test that the cart is empty. $this->drupalGet('cart'); $this->assertText('There are no products in your shopping cart.'); $this->assertIdentical($this->cart->getContents(), [], 'There are no items in the cart.'); }