Drupal: Recycle Ubercart coupons

×

Error message

  • Deprecated function: Return type of DatabaseStatementBase::execute($args = [], $options = []) should either be compatible with PDOStatement::execute(?array $params = null): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2244 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseStatementEmpty::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2346 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseStatementEmpty::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2346 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseStatementEmpty::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2346 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseStatementEmpty::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2346 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseStatementEmpty::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 2346 of /var/www/html/drupaldeveloper.in/includes/database/database.inc).
  • Deprecated function: Return type of DatabaseCondition::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in require_once() (line 1652 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).
  • Deprecated function: Creation of dynamic property MergeQuery::$condition is deprecated in MergeQuery->__construct() (line 1344 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).
  • Deprecated function: Creation of dynamic property DatabaseCondition::$stringVersion is deprecated in DatabaseCondition->compile() (line 1865 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).
  • Deprecated function: Creation of dynamic property DatabaseCondition::$stringVersion is deprecated in DatabaseCondition->compile() (line 1865 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).
  • Deprecated function: Creation of dynamic property DatabaseCondition::$stringVersion is deprecated in DatabaseCondition->compile() (line 1865 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).
  • Deprecated function: Creation of dynamic property DatabaseCondition::$stringVersion is deprecated in DatabaseCondition->compile() (line 1865 of /var/www/html/drupaldeveloper.in/includes/database/query.inc).

This CodeLet recycles coupons created using Ubercart coupon module. The CodeLet chooses a coupon randomly from the available active coupons and send an email with coupon details to respective users. The coupon is remain active uintil defined period and then expires. This CodeLet, when cron runs, activates those coupons and those can be used again.

Drupal: Recycle Ubercart coupons | Drupal Developer
CodeLet: 

Module file:

<?php
//$Id$

/**
* @file
*
* Enhancements for exisiting features for CandyCulture.
*
* @author DrupalD
*/

/**
* Implementation of hook_mail_alter
*
* @param unknown_type $message
* @author DrupalD
*/
function candyculture_util_mail_alter(&$message) {
switch ($message['id']) {
case 'simplenews_node':
case 'simplenews_test':
$sn__nid = $message['params']['context']['node']->nid;
$account = $message['params']['account'];
if (!$sn__nid) {
$sn__nid = db_result(db_query("SELECT nid FROM {simplenews_mail_spool} WHERE mail= '%s'", $account->mail));
}
$am__inactive_coupon = _get_candyculture_util_inactive_coupon($sn__nid, $account);
if ($am__inactive_coupon['cid']) {
$am__tokens = array(
'[coupon-code]' => $am__inactive_coupon['code'],
'[coupon-name]' => $am__inactive_coupon['name'],
'[coupon-value]' => $am__inactive_coupon['value'],
);
$message['body']['body'] = t($message['body']['body'], $am__tokens);
$ss__subject = t($message['subject'], $am__tokens);
$message['subject'] = strip_tags($ss__subject);
db_query("UPDATE {uc_coupons} SET status = 1, valid_from = %d, valid_until = %d WHERE cid = %d", strtotime('now'), strtotime('+1 week'), $am__inactive_coupon['cid']);
}
break;
};
}

/**
* _get_candyculture_util_inactive_coupon
*
* Choose and return an inactive coupon randomly
*
* @author DrupalD
*/
function _get_candyculture_util_inactive_coupon($sn__nid, $account) {
$sn__nid = db_result(db_query("SELECT DISTINCT nid FROM {simplenews_mail_spool} WHERE mail= '%s' ORDER BY timestamp DESC", $account->mail));
$sn__uc_id = db_result(db_query("SELECT uc_id FROM {candy_coupon} WHERE nid = %d", $sn__nid));
if ($sn__uc_id) {
$r__coupon = db_query("SELECT uc.cid, uc.code, uc.name, uc.value FROM
{uc_coupons} uc LEFT JOIN {candy_coupon} cc ON uc.cid = cc.coupon_id
WHERE sent = 0 AND nid = %d", $sn__nid);

$am__coupon = db_fetch_array($r__coupon);
}
else {
$r__result_cid = db_query('SELECT cid FROM {uc_coupons} WHERE status = 0');
while ($om__coupon_cid = db_fetch_object($r__result_cid)) {
$am__cid[] = $om__coupon_cid->cid;
}

$sn__cid_index = count($am__cid) > 1 ? rand(0, count($am__cid) - 1) : 0;
$sn__cid = $am__cid[$sn__cid_index];

$ss__coupon_code = _get_candyculture_util_coupon();
db_query('INSERT INTO {candy_coupon} VALUES(uc_id, %d, %d, 0)', $sn__cid, $sn__nid);
db_query("UPDATE {uc_coupons} SET code = '%s' WHERE cid = %d", $ss__coupon_code, $sn__cid);

$r__result = db_query("SELECT cid, name, code, value FROM {uc_coupons} WHERE status = 0 AND cid = %d", $sn__cid);
$am__coupon = db_fetch_array($r__result);
}

return $am__coupon;
}

/**
* _get_candyculture_util_coupon
*
* Return a reandomly generated code
*
* @author DrupalD
*/
function _get_candyculture_util_coupon() {
$sn__index = rand(65, 90);

$ss__char = chr($sn__index);
foreach (range('A', $ss__char) as $ss__letter) {
if (is_scalar($ss__letter)) {
$as__code[] = $ss__letter;
}
}
$an__code = range(65, $sn__index);

shuffle($as__code);
shuffle($an__code);
$ss__code = substr(implode('', $as__code), rand(1, count($as__code) - 3), 3);
$sn__code = substr(implode('', $an__code), rand(1, count($an__code) - 5), 5);
$ss__coupon_code = $ss__code .''. $sn__code;
return $ss__coupon_code;
}

/**
* Implementation of hook_cron
*
* @author DrupalD
*/
function candyculture_util_cron() {
db_query("UPDATE {uc_coupons} SET status = 0 WHERE valid_until <= %d AND status = 1", strtotime('now'));
db_query("UPDATE {uc_coupons} SET valid_from = 0, valid_until = 0 WHERE status = 0");
db_query('TRUNCATE TABLE {candy_coupon}');
}
?>

Install file:

<?php
//$Id$

/**
* @file
*
* Schema definiation for Candyculture utility
*
* @author DrupalD
*/

/**
* Implementation of hook_install
*
* @author DrupalD
*/
function candyculture_util_install() {
global $b__lock;
$b__lock = FALSE;
drupal_install_schema('candyculture_util');
}

/**
* Implemeantion of hook_uninstall_schema
*
* @author DrupalD
*/
function candyculture_util_uninstall() {
drupal_uninstall_schema('candyculture_util');
}

/**
* Implementation of hook_schema
*
* @author DrupalD
*/
function candyculture_util_schema() {
$schema = array();
$schema['candy_coupon'] = array(
'fields' => array(
'uc_id' => array(
'type' => 'serial',
'length' => 11,
'not null' => TRUE,
),

'coupon_id' => array(
'type' => 'int',
'length' => 11,
'not null' => TRUE,
),

'nid' => array(
'type' => 'int',
'length' => 11,
'not null' => TRUE,
),

'sent' => array(
'type' => 'int',
'length' => 1,
'not null' => TRUE,
),
),
'primary key' => array('uc_id'),
);

return $schema;
}
?>

Compatibility: 
Is CodeLet useful?: 
Drupal: Recycle Ubercart coupons | Drupal Developer

Error

The website encountered an unexpected error. Please try again later.