| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | <?php/** * @file * Functions for uc_earlybird module. *//** * Implements hook_line_item(). */function uc_earlybird_uc_line_item() {  $items[] = array(    'id' => 'earlybird',    'title' => t('Early bird discount'),    'default' => FALSE,    'stored' => TRUE,    'calculated' => TRUE,    'add_list' => TRUE,    'display_only' => FALSE,  );  return $items;}/** * Implements hook_form_alter(). * * Add the discount form to the node edit form, under product settings. * * Alter the cart form to show the discount. */function uc_earlybird_form_alter(&$form, &$form_state, $form_id) {  if (strpos($form_id, '_node_form') !== FALSE) {    $product_types = uc_product_types();    if (in_array($form['#node']->type, $product_types)) {      $node = $form['#node'];      $form['base']['earlybird'] = array(        '#title' => t('Early bird discount'),        '#type' => 'fieldset',        '#weight' => $form['base']['dimensions']['#weight'] + 1,      );      $form['base']['earlybird']['earlybird_date'] = array(        '#title' => 'Discounted on or before',        '#type' => 'date',      );      if (isset($node->earlybird)) {        $form['base']['earlybird']['earlybird_date']['#default_value'] = array(          'year' => date('Y', $node->earlybird['date']),          'month' => date('n', $node->earlybird['date']),          'day' => date('j', $node->earlybird['date']),        );      }      $form['base']['earlybird']['earlybird_discount'] = array(        '#title' => 'Discount amount',        '#type' => 'textfield',        '#size' => 3,        '#description' => 'Enter in a dollar amount or percentage, e.g., 5% or 10',        '#default_value' => isset($node->earlybird) ? $node->earlybird['discount'] : NULL,      );    }  }  if ($form_id == 'uc_cart_view_form') {    foreach ($form['items'] as $key => &$val) {      if (is_numeric($key)) {        if (isset($val['nid'])) {          $sql = "select * from {uc_earlybird} where nid = :nid";          $result = db_query($sql, array(':nid' => $val['nid']['#value']));          if ($earlybird = $result->fetchObject()) {            if ($earlybird->date >= REQUEST_TIME && intval($earlybird->discount) > 0) {              $discount = _uc_earlybird_discount_text($earlybird->discount, $val['#entity']->qty);              $discountText = array(                t('Early bird: !discount off at checkout', array('!discount' => $discount)),              );              $val['desc']['#markup'] .= theme('item_list', array(                'items' => $discountText,                'title' => NULL,                'type' => 'ul',                'attributes' => array('class' => 'uc-earlybird-teaser'),                ));            }          }        }      }    }  }}/** * Implements hook_node_load(). * * Load discount information to the node. */function uc_earlybird_node_load($nodes, $types) {  $sql = 'select * from {uc_earlybird} where nid IN (:nids)';  $result = db_query($sql, array(':nids' => array_keys($nodes)));  while ($row = $result->fetchAssoc()) {    $nodes[$row['nid']]->earlybird = $row;  }}/** * Implements hook_node_insert(). * * Update discount information. */function uc_earlybird_node_insert($node) {  uc_earlybird_node_update($node);}/** * Implements hook_node_update(). */function uc_earlybird_node_update($node) {  if (isset($node->earlybird_discount)) {    // Insert/update the product's discount.    extract($node->earlybird_date);    $date = mktime(23, 59, 59, $month, $day, $year);    if (strpos($node->earlybird_discount, '%') !== FALSE) {      $discount = floatval($node->earlybird_discount) . '%';    }    else {      $discount = floatval($node->earlybird_discount);    }    if (db_query('select 1 from {uc_earlybird} where nid = :nid', array(':nid' => $node->nid))->fetchField()) {      // Node already has earlybird data.      $update = array('nid');    }    else {      $update = array();    }    $earlybird->nid = $node->nid;    $earlybird->date = $date;    $earlybird->discount = $discount;    drupal_write_record('uc_earlybird', $earlybird, $update);  }}/** * Implements hook_add_to_cart(). * * Check time and show notification. */function uc_earlybird_uc_add_to_cart($nid, $qty, $data) {  $result = db_query('select node.title, eb.* from {uc_earlybird} eb  inner join {node} node on node.nid = eb.nid  where eb.nid = :nid', array(':nid' => $nid));  if ($earlybird = $result->fetchObject()) {    if (REQUEST_TIME <= $earlybird->date) {      if (intval($earlybird->discount) > 0) {        $discount_text = _uc_earlybird_discount_text($earlybird->discount, $qty);        drupal_set_message(t('You will receive a discount of %discount when you checkout %title.', array('%title' => $earlybird->title, '%discount' => $discount_text)));      }    }  }}/** * Display discount properly. */function _uc_earlybird_discount_text($discount, $qty = 1) {  if (strpos($discount, '%') !== FALSE) {  }  else {    $discount *= $qty;    $discount = uc_currency_format($discount);  }  return $discount;}/** * Calculate early bird discount for a product. Check time. */function _uc_earlybird_calculate_discount($product) {  $result = db_query('select * from {uc_earlybird} where nid = :nid', array(':nid' => $product->nid));  if ($earlybird = $result->fetchObject()) {    if (REQUEST_TIME <= $earlybird->date) {      if (strpos($earlybird->discount, '%') !== FALSE) {        return - (floatval($earlybird->discount) / 100 * $product->price);      }      else {        return - (floatval($earlybird->discount));      }    }  }}/** * Implements hook_order(). * * Adds the line item discount for earlybird discounts. */function uc_earlybird_uc_order($op, &$arg1, $arg2) {  if ($op == 'save') {    $type = 'earlybird';    foreach ($arg1->line_items as $key => $line_item) {      if ($line_item['type'] == $type) {        uc_order_delete_line_item($line_item['line_item_id']);      }    }    db_delete('uc_order_line_items')      ->condition('order_id', $arg1->order_id)      ->condition('type', $key)      ->execute();    $discount = 0;    $numDiscounts = 0;    foreach ($arg1->products as $product) {      $discount = _uc_earlybird_calculate_discount($product);      if ($discount < 0) {        uc_order_line_item_add($arg1->order_id, $type, 'Early bird discount', $discount * $product->qty, NULL, NULL);      }    }  }}
 |