View source
<?php
require_once dirname(__FILE__) . '/basic_cart.theme.inc';
function basic_cart_permission() {
return array(
'administer basic cart' => array(
'title' => t('Administer basic cart'),
'description' => t('Perform administration tasks for basic cart.'),
),
'view basic cart orders' => array(
'title' => t('View basic cart orders'),
'description' => t('View basic cart orders.'),
),
'use basic cart' => array(
'title' => t('Use basic cart'),
'description' => t('Use basic cart (add to cart, remove from cart, checkout).'),
),
);
}
function basic_cart_menu() {
$items = array();
$items['admin/config/basic_cart'] = array(
'title' => 'Basic cart',
'description' => 'Basic cart content type selection.',
'position' => 'left',
'weight' => -10,
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array(
'administer basic cart',
),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
);
$items['admin/config/basic_cart/settings'] = array(
'title' => 'Basic cart',
'description' => 'Basic cart content type selection.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'basic_cart_admin_content_type',
),
'access arguments' => array(
'administer basic cart',
),
'type' => MENU_NORMAL_ITEM,
'file' => 'basic_cart.admin.inc',
);
$items['admin/config/basic_cart/settings/settings'] = array(
'title' => 'Settings',
'description' => 'Basic cart content type selection.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'basic_cart_admin_content_type',
),
'access arguments' => array(
'administer basic cart',
),
'type' => MENU_DEFAULT_LOCAL_TASK,
'file' => 'basic_cart.admin.inc',
'weight' => 5,
);
$items['cart'] = array(
'title' => 'Your shopping cart',
'description' => 'The shopping cart page',
'page callback' => 'basic_cart_cart',
'access arguments' => array(
'use basic cart',
),
'type' => MENU_CALLBACK,
'file' => 'basic_cart.cart.inc',
);
$items['cart/add'] = array(
'title' => 'Add to cart',
'description' => 'Add to cart url.',
'page callback' => 'basic_cart_add_to_cart',
'access arguments' => array(
'use basic cart',
),
'type' => MENU_CALLBACK,
'file' => 'basic_cart.cart.inc',
);
$items['cart/remove'] = array(
'title' => 'Remove from cart',
'description' => 'Remove from cart url.',
'page callback' => 'basic_cart_remove_from_cart',
'access arguments' => array(
'use basic cart',
),
'type' => MENU_CALLBACK,
'file' => 'basic_cart.cart.inc',
);
return $items;
}
function basic_cart_theme() {
return array(
'basic_cart_cart_total_price' => array(
'variables' => array(
'price' => NULL,
),
),
'basic_cart_price' => array(
'function' => 'basic_cart_price',
'variables' => array(
'price' => NULL,
),
),
'basic_cart_add_to_cart' => array(
'function' => 'basic_cart_add_to_cart_button',
'variables' => array(
'path' => NULL,
'css_class' => NULL,
),
),
'basic_cart_cart_flat' => array(
'template' => 'basic_cart_cart_flat',
'variables' => array(
'cart' => NULL,
'price' => NULL,
'vat' => NULL,
),
),
'basic_cart_cart_render_block' => array(
'template' => 'basic_cart_cart_render_block',
'variables' => array(
'cart' => NULL,
'price' => NULL,
'vat' => NULL,
),
),
'basic_cart_render_cart_element' => array(
'render element' => 'form',
),
);
}
function basic_cart_block_info() {
$blocks['shopping_cart'] = array(
'info' => t('Shopping cart'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}
function basic_cart_block_view($delta = '') {
switch ($delta) {
case 'shopping_cart':
if (user_access('use basic cart')) {
module_load_include('inc', 'basic_cart', 'basic_cart.cart');
$price = basic_cart_get_total_price();
$total = basic_cart_price_format($price->total);
$options = array(
'cart' => basic_cart_get_cart(),
'price' => $total,
);
$vat_is_enabled = (int) variable_get('basic_cart_vat_state');
if (!empty($vat_is_enabled) && $vat_is_enabled) {
$options['vat'] = basic_cart_price_format($price->vat);
}
$block['subject'] = t('Your cart');
$block['content'] = theme('basic_cart_cart_render_block', $options);
return $block;
}
break;
}
}
function basic_cart_field_formatter_info() {
$info = array(
'basic_cart_add_to_cart' => array(
'label' => t('Add to cart button'),
'field types' => array(
'text',
),
'description' => t('Adds an add to cart button.'),
'settings' => array(
'css_class' => 'button basic-cart-add-to-cart-link',
),
),
'basic_cart_add_to_cart_quantity' => array(
'label' => t('Add to cart button with quantity'),
'field types' => array(
'text',
),
'description' => t('Adds an add to cart button with quantity.'),
),
'basic_cart_price' => array(
'label' => t('Basic cart price format'),
'field types' => array(
'number_decimal',
),
'description' => t('Uses the price format defined on the configuration page.'),
),
);
return $info;
}
function basic_cart_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$element = array();
switch ($display['type']) {
case 'basic_cart_add_to_cart':
$element['css_class'] = array(
'#type' => 'textfield',
'#title' => t('CSS class'),
'#description' => t('This class will be added to the button\'s HTML code.'),
'#default_value' => $settings['css_class'],
);
break;
}
return $element;
}
function basic_cart_field_formatter_settings_summary($field, $instance, $view_mode) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$summary = '';
switch ($display['type']) {
case 'basic_cart_add_to_cart':
$summary = t('Classes for add to cart button: "@css_class"', array(
'@css_class' => $settings['css_class'],
));
break;
}
return $summary;
}
function basic_cart_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
switch ($display['type']) {
case 'basic_cart_add_to_cart':
if (!empty($items) && is_array($items)) {
foreach ($items as $delta => $item) {
$css_class = !empty($settings['css_class']) ? $settings['css_class'] : '';
$element[$delta] = array(
'#markup' => theme('basic_cart_add_to_cart', array(
'path' => 'cart/add/' . $entity->nid,
'css_class' => $css_class,
)),
);
}
}
else {
$css_class = !empty($settings['css_class']) ? $settings['css_class'] : '';
$element[] = array(
'#markup' => theme('basic_cart_add_to_cart', array(
'path' => 'cart/add/' . $entity->nid,
'css_class' => $css_class,
)),
);
}
break;
case 'basic_cart_add_to_cart_quantity':
$element[] = drupal_get_form('basic_cart_add_to_cart_quantity_form', $entity->nid);
break;
case 'basic_cart_price':
foreach ($items as $delta => $item) {
$value = basic_cart_price_format($item['value']);
$element[$delta] = array(
'#markup' => theme('basic_cart_price', array(
'price' => $value,
)),
);
}
break;
}
return $element;
}
function basic_cart_add_to_cart_quantity_form($form, $form_state, $nid = NULL) {
$form['nid'] = array(
'#type' => 'value',
'#value' => $nid,
);
$form['quantity'] = array(
'#type' => 'textfield',
'#title' => t('Quantity'),
'#default_value' => '1',
'#size' => 1,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Add to cart'),
);
return $form;
}
function basic_cart_add_to_cart_quantity_form_submit($form, $form_state) {
dsm($form_state);
basic_cart_add_to_cart($form_state['values']['nid'], $form_state['values']['quantity']);
}
function basic_cart_preprocess_field(&$variables, $hook) {
$field = $variables['element'];
if ($field['#field_name'] == 'add_to_cart') {
$variables['items'][] = $field[0];
}
}
function basic_cart_form_alter(&$form, &$form_state, $form_id) {
$types = basic_cart_product_types();
if (!empty($types) && is_array($types)) {
$types_ = array();
foreach ($types as $value) {
$types_[] = $value . '_node_form';
}
if (in_array($form_id, $types_)) {
if (isset($form['add_to_cart'])) {
unset($form['add_to_cart']);
}
}
}
}
function basic_cart_is_product($node) {
$type = is_object($node) ? $node->type : $node;
$node_types = basic_cart_product_types();
if (empty($node_types) || !is_array($node_types)) {
return FALSE;
}
return in_array($type, $node_types);
}
function basic_cart_product_types() {
static $types;
if (empty($types)) {
$types = variable_get('basic_cart_content_types', array());
}
return $types;
}
function basic_cart_views_api() {
return array(
'api' => '2.0',
'path' => drupal_get_path('module', 'basic_cart') . '/views',
);
}
function basic_cart_get_fields() {
return array(
'price' => array(
'type' => 'number_decimal',
'title' => t('Price'),
'description' => t('Please enter this item\'s price.'),
),
'add_to_cart' => array(
'type' => 'text',
'title' => 'Add to cart',
'description' => '',
),
);
}