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