Installed and configured commerce & commerce license, migrated uc_role to commerce license, core updates
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Migrates role purchase licenses from UC Roles module.
|
||||
# This is incomplete and is specificaly created for materio.
|
||||
id: d7_uc_roles_license
|
||||
label: License from D7 Ubercart Roles.
|
||||
migration_group: d7_materio
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Ubercart
|
||||
- Materio
|
||||
|
||||
source:
|
||||
plugin: d7_uc_license_role
|
||||
|
||||
destination:
|
||||
plugin: entity:commerce_license
|
||||
destination_module: commerce_license
|
||||
|
||||
process:
|
||||
type:
|
||||
# Migrate into the role license type.
|
||||
plugin: default_value
|
||||
default_value: role
|
||||
uid:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: row
|
||||
source: uid
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_users
|
||||
# source: uid
|
||||
no_stub: true
|
||||
# state:
|
||||
# plugin: default_value
|
||||
# default_value: active
|
||||
state: state
|
||||
created: created
|
||||
granted: created
|
||||
renewed: renewed
|
||||
changed: renewed
|
||||
license_role:
|
||||
plugin: static_map
|
||||
source: rid
|
||||
map:
|
||||
6: adherent
|
||||
10: student
|
||||
|
||||
expiration_type:
|
||||
# This assumes Commerce Recurring is used with licenses.
|
||||
plugin: default_value
|
||||
default_value:
|
||||
target_plugin_id: rolling_interval
|
||||
target_plugin_configuration:
|
||||
interval:
|
||||
interval: 1
|
||||
period: year
|
||||
|
||||
|
||||
# array (
|
||||
# 'interval' => array (
|
||||
# 'interval' => '6',
|
||||
# 'period' => 'month',
|
||||
# ),
|
||||
# )
|
||||
|
||||
# expires:
|
||||
# # This assumes Commerce Recurring is used with licenses.
|
||||
# plugin: default_value
|
||||
# default_value: 0
|
||||
expires: expiration
|
||||
|
||||
# product_variation:
|
||||
# plugin: migration_lookup
|
||||
# migration: # your product variation migration
|
||||
# source: nid
|
||||
product_variation:
|
||||
plugin: static_map
|
||||
source: rid
|
||||
map:
|
||||
6: 2 # web annual
|
||||
10: 7 # web annual student
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_users
|
||||
optional: {}
|
||||
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- commerce_product
|
||||
- commerce_license
|
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
|
||||
|
||||
/**
|
||||
* Drupal 7 Ubercart roles expiration source.
|
||||
*
|
||||
* This is for migrating roles granted with the uc_roles module to licenses.
|
||||
*
|
||||
* This class is just a starting point:
|
||||
* - The expiration settings are not handled. In particular, for licenses used
|
||||
* with subscriptions, the expiry should be set to 'unlimited'.
|
||||
* - The case of more than one product selling the same role is not handled.
|
||||
* - Assumptions are made about renewals.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_uc_license_role",
|
||||
* source_module = "uc_roles"
|
||||
* )
|
||||
*/
|
||||
class D7UcRolesLicense extends DrupalSqlBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('uc_roles_expirations', 'ure')
|
||||
->fields('ure', [
|
||||
'reid',
|
||||
'uid',
|
||||
'rid',
|
||||
'expiration',
|
||||
])
|
||||
// ->condition('ure.rid', 6)
|
||||
->orderBy('ure.expiration');
|
||||
|
||||
// // Joining to {uc_roles_products} gets us the product node ID and the
|
||||
// // duration configuration.
|
||||
// // TODO: this join assumes there is only one product per role. If some
|
||||
// // roles are sold by multiple products, this will break!
|
||||
// $query->innerJoin('uc_roles_products', 'urp', 'ure.rid = urp.rid');
|
||||
// $query->fields('urp', [
|
||||
// 'nid',
|
||||
// 'duration',
|
||||
// 'granularity',
|
||||
// ]);
|
||||
|
||||
// // Get the orders that purchased this product.
|
||||
// // Join to {uc_orders} via {uc_order_products}, getting first the order
|
||||
// // line items that hold the product, and the the corresponding order.
|
||||
// $query->innerJoin('uc_order_products', 'uop', 'urp.nid = uop.nid');
|
||||
// // This join also ensures that the orders are purchased by the users who
|
||||
// // have a role granted.
|
||||
// $query->innerJoin('uc_orders', 'uo', 'uop.order_id = uo.order_id AND ure.uid = uo.uid');
|
||||
//
|
||||
// $query->fields('uop', ['order_product_id']);
|
||||
// $query->fields('uo', [
|
||||
// 'created',
|
||||
// 'modified',
|
||||
// 'order_id',
|
||||
// ]);
|
||||
|
||||
// // Use a groupwise mininum selfjoin to get only the earliest order by each
|
||||
// // user for a role.
|
||||
// // TODO: this assumes that later orders are renewals, and that there are no
|
||||
// // gaps in a user's license ownership, e.g. user buys license, lets it
|
||||
// // expire, buys another one.
|
||||
// // TODO: this join should also have a condition on the product nid!
|
||||
// $query->leftJoin('uc_orders', 'uo_later', 'uo.uid = uo_later.uid AND uo.modified > uo_later.modified');
|
||||
// $query->isNull('uo_later.order_id');
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
// drush_print("_ _ _ _ _");
|
||||
// drush_print('uid '. $row->getSourceProperty('uid'));
|
||||
// // Get the most recent order for this user and role product, if different
|
||||
// // from the earliest order we retrieved in query().
|
||||
// $query = $this->select('uc_order_products', 'uop');
|
||||
// $query->innerJoin('uc_orders', 'uo', 'uop.order_id = uo.order_id');
|
||||
// // $query->condition('uop.nid', $row->getSourceProperty('nid'));
|
||||
// $query->condition('uo.uid', $row->getSourceProperty('uid'));
|
||||
// // $query->condition('uo.order_id', $row->getSourceProperty('order_id'), '<>');
|
||||
// $query->fields('uo', [
|
||||
// 'order_id',
|
||||
// 'created',
|
||||
// 'modified',
|
||||
// ]);
|
||||
// $query->orderBy('created', DESC);
|
||||
// $query->range(0, 1);
|
||||
//
|
||||
// $latest_order_data = $query->execute()->fetchAssoc();
|
||||
// // print_r($latest_order_data);
|
||||
//
|
||||
// if ($latest_order_data) {
|
||||
// // drush_print('renewed ' . $latest_order_data['created']);
|
||||
// // Set the date of the last renewal to the creation date of the most
|
||||
// // recent order for this role.
|
||||
// // This is the closest thing we have?
|
||||
// $row->setSourceProperty('renewed', $latest_order_data['created']);
|
||||
// // drush_print('renewed ' . date('Y-m-d', $row->getSourceProperty('renewed')));
|
||||
// }
|
||||
// else {
|
||||
// // drush_print('renewed NULL');
|
||||
// $row->setSourceProperty('renewed', NULL);
|
||||
// // drush_print('renewed NULL');
|
||||
// }
|
||||
|
||||
$expiration = $row->getSourceProperty('expiration');
|
||||
$state = $expiration > time() ? 'active' : 'expired';
|
||||
$row->setSourceProperty('state', $state);
|
||||
|
||||
// Get orders for this user
|
||||
// will get the first and the last if diffents.
|
||||
$query = $this->select('uc_order_products', 'uop');
|
||||
$query->innerJoin('uc_orders', 'uo', 'uop.order_id = uo.order_id');
|
||||
$query->condition('uo.uid', $row->getSourceProperty('uid'));
|
||||
$query->fields('uo', [
|
||||
'order_id',
|
||||
'created',
|
||||
'modified',
|
||||
]);
|
||||
$query->orderBy('created', DESC);
|
||||
$orders = $query->execute()->fetchAll();
|
||||
// print_r($orders);
|
||||
|
||||
// default renewed value
|
||||
$renewed = strtotime('-1 year', $expiration);
|
||||
$row->setSourceProperty('created', $renewed);
|
||||
$row->setSourceProperty('renewed', $renewed);
|
||||
|
||||
// "real" created and renewed values
|
||||
if(count($orders)){
|
||||
$first_order = array_shift($orders);
|
||||
$row->setSourceProperty('created', $first_order['created']);
|
||||
$row->setSourceProperty('renewed', $first_order['created']);
|
||||
if(count($orders)){
|
||||
$last_order = array_pop($orders);
|
||||
$row->setSourceProperty('renewed', $last_order['created']);
|
||||
}
|
||||
}
|
||||
|
||||
// $expirationstr = date('Y-m-d', $expiration);
|
||||
// drush_print('expiration ' . $expirationstr);
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return ([
|
||||
'reid' => $this->t('Record ID'),
|
||||
'uid' => $this->t('User ID'),
|
||||
'rid' => $this->t('The role ID'),
|
||||
'expiration' => $this->t('The expiration date'),
|
||||
'nid' => $this->t('Product node ID'),
|
||||
'duration' => $this->t('The interval multiplier'),
|
||||
'granularity' => $this->t('The interval'),
|
||||
'created' => $this->t('Earliest order created time'),
|
||||
'modified' => $this->t('Earliest order changed time'),
|
||||
'renewed' => $this->t('Latest order created time'),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return [
|
||||
'reid' => [
|
||||
'type' => 'integer',
|
||||
'alias' => 'ure',
|
||||
]
|
||||
// Add the order product ID as a key, so that order product migrations
|
||||
// can look up the license to reference it.
|
||||
// 'order_product_id' => [
|
||||
// 'type' => 'integer',
|
||||
// ],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user