Newer
Older
/**
* @file
* Install, update and uninstall functions for the commerce_coupon module.
*/
/**
* Implements hook_schema().
*/
function commerce_coupon_schema() {
$schema['commerce_coupon'] = array(
'description' => 'The base table for coupons.',
'fields' => array(
'coupon_id' => array(
'description' => 'The primary identifier for the coupon.',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'type' => array(
'description' => 'The {commerce_coupon_type}.type of this coupon.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'is_active' => array(
'description' => 'Indicates if this coupon is active or not.',
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'created' => array(
'description' => 'The Unix timestamp when the coupon was created.',
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'changed' => array(
'description' => 'The Unix timestamp when the coupon was most recently saved.',
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
'data' => array(
'type' => 'blob',
'size' => 'big',
'not null' => FALSE,
'serialize' => TRUE,
'description' => 'Everything else, serialized.',
),
),
'primary key' => array('coupon_id'),
$schema['commerce_coupon_type'] = array(
'description' => 'Stores information about all defined coupon types.',
'fields' => array(
'type' => array(
'description' => 'The machine-readable name of this coupon type.',
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'label' => array(
'description' => 'The human-readable name of this coupon type.',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'weight' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
'description' => 'The weight of this coupon type in relation to others.',
),
'data' => array(
'type' => 'text',
'not null' => FALSE,
'size' => 'big',
'serialize' => TRUE,
'description' => 'A serialized array of additional data related to this coupon type.',
),
davidwhthomas
committed
) + commerce_coupon_exportable_schema_fields(),
'primary key' => array('type'),
hunziker
committed
return $schema;
}
davidwhthomas
committed
function commerce_coupon_exportable_schema_fields($module_col = 'module', $status_col = 'status') {
return array(
$status_col => array(
'type' => 'int',
'not null' => TRUE,
// Set the default to ENTITY_CUSTOM without using the constant as it is
// not safe to use it at this point.
'default' => 0x01,
'size' => 'tiny',
'description' => 'The exportable status of the entity.',
),
$module_col => array(
'description' => 'The name of the providing module if the entity has been defined in code.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
);
}
/**
* Implements hook_uninstall().
*/
function commerce_coupon_uninstall() {
// Make sure commerce.module is loaded so that commerce_delete_instances()
// is available.
module_load_include('module', 'commerce');
// Delete all fields that belong to the module's entity types.
commerce_delete_instances('commerce_coupon_log');
commerce_delete_instances('commerce_coupon');
commerce_delete_field('commerce_coupon_order_reference');
commerce_delete_field('commerce_coupon_reference');
maciej.zgadzaj
committed
// Delete all module variables.
variable_del('commerce_coupon_default_code_size');
variable_del('commerce_coupon_checkout_pane_view');
variable_del('commerce_coupon_review_pane_view');
Pedro Cambra
committed
/**
Pedro Cambra
committed
*/
Pedro Cambra
committed
// The update system is going to flush all caches anyway, so nothing to do.
}
/**
* Implements hook_update_N().
* Remove coupon type id field and update coupon reference field.
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
*/
function commerce_coupon_update_7002(&$sandbox) {
// Remove type_id from coupon type table and set type as primary key.
db_drop_field('commerce_coupon_type', 'type_id');
db_drop_unique_key('commerce_coupon_type', 'type');
db_drop_primary_key('commerce_coupon_type');
db_add_primary_key('commerce_coupon_type', array('type'));
// Update commerce_coupon_reference not to be a text field anymore.
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'commerce_line_item')
->propertyCondition('type', 'commerce_coupon')
->execute();
// Get all line items from the system.
$line_items = commerce_line_item_load_multiple(array_keys($result['commerce_line_item']));
// Store an array with the line item id and the coupon id.
$values = array();
foreach ($line_items as $line_item) {
$value = array('line_item_id' => $line_item->line_item_id, 'coupon_id' => $line_item->commerce_coupon_reference[LANGUAGE_NONE][0]['value']);
$values[] = $value;
}
// Remove old field and force a new creation, no way to rename it.
// see http://drupal.org/node/1201898
field_delete_field('commerce_coupon_reference');
commerce_coupon_line_item_configuration();
// Finally restore the line item values.
foreach ($values as $value) {
$line_item = commerce_line_item_load($value['line_item_id']);
$line_item->commerce_coupon_reference[LANGUAGE_NONE][0]['coupon_id'] = $value['coupon_id'];
commerce_line_item_save($line_item);
}
}
/**
* Implements hook_update_N().
* Set the coupon reference as non locked.
*/
function commerce_coupon_update_7003(&$sandbox) {
Pedro Cambra
committed
// This update setted the coupon reference field to non locked, code here has
// been removed due to conflicts with 7004 as the coupon reference field type
// doesn't exist anymore.
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/**
* Implements hook_update_N().
* Embrace EntityReference module.
*/
function commerce_coupon_update_7004(&$sandbox) {
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'commerce_line_item')
->propertyCondition('type', 'commerce_coupon')
->execute();
// Get all line items from the system.
$line_items = commerce_line_item_load_multiple(array_keys($result['commerce_line_item']));
// Store an array with the line item id and the coupon id.
$values = array();
foreach ($line_items as $line_item) {
$value = array('line_item_id' => $line_item->line_item_id, 'coupon_id' => $line_item->commerce_coupon_reference[LANGUAGE_NONE][0]['coupon_id']);
$values[] = $value;
}
// Remove old field and force a new creation, no way to rename it.
// see http://drupal.org/node/1201898
field_delete_field('commerce_coupon_reference');
commerce_coupon_line_item_configuration();
// Finally restore the line item values.
foreach ($values as $value) {
$line_item = commerce_line_item_load($value['line_item_id']);
$line_item->commerce_coupon_reference[LANGUAGE_NONE][0]['target_id'] = $value['coupon_id'];
commerce_line_item_save($line_item);
}
// Also add the coupon reference field to the order.
commerce_coupon_order_configuration();
// Migrate all coupon log references to the field in the order.
$logs = db_query('SELECT * FROM {commerce_coupon_log}')->fetchAllAssoc('log_id', PDO::FETCH_ASSOC);
foreach ($logs as $log) {
if ($order = commerce_order_load($log['order_id'])) {
$order->commerce_coupon_order_reference[LANGUAGE_NONE][]['target_id'] = $log['coupon_id'];
commerce_order_save($order);
}
}
// Delete the coupon log fields.
commerce_delete_instances('commerce_coupon_log');
// Delete the coupon log database table.
db_drop_table('commerce_coupon_log');
}
davidwhthomas
committed
/**
* Implements hook_update_N().
maciej.zgadzaj
committed
* Remove all coupon log views.
davidwhthomas
committed
*/
function commerce_coupon_update_7005(&$sandbox) {
if($view = views_get_view('commerce_coupon_log')){
$view->delete(TRUE);
}
}