Bläddra i källkod

patche ubercart to add expiration date field on views
https://www.drupal.org/node/419700

Bachir Soussi Chiadmi 9 år sedan
förälder
incheckning
69c5b7ee5c

+ 147 - 0
sites/all/modules/contrib/ecommerce/ubercart/uc_role_views-419700.patch

@@ -0,0 +1,147 @@
+diff --git a/uc_roles/uc_roles.views.inc b/uc_roles/uc_roles.views.inc
+new file mode 100644
+index 0000000..558e461
+--- /dev/null
++++ b/uc_roles/uc_roles.views.inc
+@@ -0,0 +1,110 @@
++<?php
++
++/**
++ * @file
++ * Views 2 hooks and callback registries.
++ */
++
++
++/**
++ * Implementation of hook_views_data().
++ */
++ 
++ function uc_roles_views_data() {
++  $data['uc_roles_expirations']['table']['group']  = t('User');
++
++  $data['uc_roles_expirations']['table']['join'] = array(
++    'users' => array(
++      'left_field' => 'uid',
++      'field' => 'uid',
++    ),
++  );
++
++
++  // Expose the role expiration date
++  $data['uc_roles_expirations']['expiration'] = array(
++    'title' => t('Ubercart Role expiration date/time'),
++    'help' => t('Date and time the role will expire. (See also Role expiration role.)'),
++    'field' => array(
++      'handler' => 'views_handler_field_date',
++      'click sortable' => TRUE,
++    ),
++    'sort' => array(
++      'handler' => 'views_handler_sort_date',
++    ),
++    'filter' => array(
++      'handler' => 'views_handler_filter_date',
++    ),
++  );
++
++
++  // Expose the role id from uc_roles_expirations
++  $data['uc_roles_expirations']['rid'] = array(
++    'title' => t('Ubercart Role expiration role'),
++    'help' => t('The Role that corresponds with the Role expiration date/time'),
++    // Information for displaying the rid
++    'field' => array(
++      'handler' => 'uc_roles_handler_field_rid',
++      'click sortable' => TRUE,
++    ),
++    // Information for accepting a rid as an argument
++    'argument' => array(
++      'handler' => 'views_handler_argument_users_roles_rid',
++      'name field' => 'title', // the field to display in the summary.
++      'numeric' => TRUE,
++      'validate type' => 'rid',
++    ),
++    // Information for accepting a uid as a filter
++    'filter' => array(
++      'handler' => 'views_handler_filter_user_roles',
++    ),
++    // Information for sorting on a uid.
++    'sort' => array(
++      'handler' => 'views_handler_sort',
++    ),
++  );
++
++
++  return $data;
++}
++
++class uc_roles_handler_field_rid extends views_handler_field {
++
++  // Derived from views_handler_field_user_roles
++  // Purpose: get the *names* that correspond to the role_expire_rids.
++  function pre_render($values) {
++    $roles = array();
++    $this->items = array();
++
++    // Get all the unique role ids into the keys of $roles. Initializing into
++    // array_keys helps prevent us from having a list where the same rid appears
++    // over and over and over.
++    foreach ($values as $result) {
++      $roles[$this->get_value($result, NULL, TRUE)] = FALSE;
++    }
++
++    if ($roles) {
++      $result = db_query("SELECT r.rid, r.name FROM {role} r WHERE r.rid IN (:rids) ORDER BY r.name",
++        array(':rids' => array_keys($roles)));
++      foreach ($result as $role) {
++        $this->items[$role->rid]['role'] = check_plain($role->name);
++        $this->items[$role->rid]['rid'] = $role->rid;
++      }
++    }
++  }
++
++  // Render the rid as the role name.
++  function render($values) {
++
++    // Return the role name corresponding to the role ID.
++    // TODO: Should I be using this->get_value() here?
++    $rid = $values->uc_roles_expirations_rid;
++    if ($rid) {
++      $role = $this->items[$rid]['role'];
++      if (!empty($role)) {
++        return $role;
++      }
++    }
++  }
++}
++
+diff --git a/uc_roles/uc_roles.info b/uc_roles/uc_roles.info
+index f7c899e..ccd2d43 100644
+--- a/uc_roles/uc_roles.info
++++ b/uc_roles/uc_roles.info
+@@ -2,8 +2,12 @@ name = Roles
+ description = Assigns permanent or expirable roles based on product purchases.
+ dependencies[] = uc_product
+ dependencies[] = uc_order
++dependencies[] = views
+ package = Ubercart - core (optional)
+ core = 7.x
+ 
+ ; Test cases
+ files[] = tests/uc_roles.test
++
++; Views handlers
++files[] = uc_roles.views.inc
+diff --git a/uc_roles/uc_roles.module b/uc_roles/uc_roles.module
+index d7ee52c..65bdd74 100644
+--- a/uc_roles/uc_roles.module
++++ b/uc_roles/uc_roles.module
+@@ -1278,3 +1278,9 @@ function _uc_roles_get_expiration($duration, $granularity, $start_time = NULL) {
+ 
+   return strtotime($operator . $duration . ' ' . $granularity, $start_time);
+ }
++/**
++ * Implements hook_views_api().
++ */
++function uc_roles_views_api() {
++  return array('api' => '3.0');
++}

+ 4 - 0
sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info

@@ -2,12 +2,16 @@ name = Roles
 description = Assigns permanent or expirable roles based on product purchases.
 dependencies[] = uc_product
 dependencies[] = uc_order
+dependencies[] = views
 package = Ubercart - core (optional)
 core = 7.x
 
 ; Test cases
 files[] = tests/uc_roles.test
 
+; Views handlers
+files[] = uc_roles.views.inc
+
 ; Information added by Drupal.org packaging script on 2014-10-22
 version = "7.x-3.8"
 core = "7.x"

+ 16 - 0
sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info.orig

@@ -0,0 +1,16 @@
+name = Roles
+description = Assigns permanent or expirable roles based on product purchases.
+dependencies[] = uc_product
+dependencies[] = uc_order
+package = Ubercart - core (optional)
+core = 7.x
+
+; Test cases
+files[] = tests/uc_roles.test
+
+; Information added by Drupal.org packaging script on 2014-10-22
+version = "7.x-3.8"
+core = "7.x"
+project = "ubercart"
+datestamp = "1413965350"
+

+ 6 - 0
sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.module

@@ -1278,3 +1278,9 @@ function _uc_roles_get_expiration($duration, $granularity, $start_time = NULL) {
 
   return strtotime($operator . $duration . ' ' . $granularity, $start_time);
 }
+/**
+ * Implements hook_views_api().
+ */
+function uc_roles_views_api() {
+  return array('api' => '3.0');
+}

+ 110 - 0
sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.views.inc

@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * @file
+ * Views 2 hooks and callback registries.
+ */
+
+
+/**
+ * Implementation of hook_views_data().
+ */
+ 
+ function uc_roles_views_data() {
+  $data['uc_roles_expirations']['table']['group']  = t('User');
+
+  $data['uc_roles_expirations']['table']['join'] = array(
+    'users' => array(
+      'left_field' => 'uid',
+      'field' => 'uid',
+    ),
+  );
+
+
+  // Expose the role expiration date
+  $data['uc_roles_expirations']['expiration'] = array(
+    'title' => t('Ubercart Role expiration date/time'),
+    'help' => t('Date and time the role will expire. (See also Role expiration role.)'),
+    'field' => array(
+      'handler' => 'views_handler_field_date',
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort_date',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_date',
+    ),
+  );
+
+
+  // Expose the role id from uc_roles_expirations
+  $data['uc_roles_expirations']['rid'] = array(
+    'title' => t('Ubercart Role expiration role'),
+    'help' => t('The Role that corresponds with the Role expiration date/time'),
+    // Information for displaying the rid
+    'field' => array(
+      'handler' => 'uc_roles_handler_field_rid',
+      'click sortable' => TRUE,
+    ),
+    // Information for accepting a rid as an argument
+    'argument' => array(
+      'handler' => 'views_handler_argument_users_roles_rid',
+      'name field' => 'title', // the field to display in the summary.
+      'numeric' => TRUE,
+      'validate type' => 'rid',
+    ),
+    // Information for accepting a uid as a filter
+    'filter' => array(
+      'handler' => 'views_handler_filter_user_roles',
+    ),
+    // Information for sorting on a uid.
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+  );
+
+
+  return $data;
+}
+
+class uc_roles_handler_field_rid extends views_handler_field {
+
+  // Derived from views_handler_field_user_roles
+  // Purpose: get the *names* that correspond to the role_expire_rids.
+  function pre_render($values) {
+    $roles = array();
+    $this->items = array();
+
+    // Get all the unique role ids into the keys of $roles. Initializing into
+    // array_keys helps prevent us from having a list where the same rid appears
+    // over and over and over.
+    foreach ($values as $result) {
+      $roles[$this->get_value($result, NULL, TRUE)] = FALSE;
+    }
+
+    if ($roles) {
+      $result = db_query("SELECT r.rid, r.name FROM {role} r WHERE r.rid IN (:rids) ORDER BY r.name",
+        array(':rids' => array_keys($roles)));
+      foreach ($result as $role) {
+        $this->items[$role->rid]['role'] = check_plain($role->name);
+        $this->items[$role->rid]['rid'] = $role->rid;
+      }
+    }
+  }
+
+  // Render the rid as the role name.
+  function render($values) {
+
+    // Return the role name corresponding to the role ID.
+    // TODO: Should I be using this->get_value() here?
+    $rid = $values->uc_roles_expirations_rid;
+    if ($rid) {
+      $role = $this->items[$rid]['role'];
+      if (!empty($role)) {
+        return $role;
+      }
+    }
+  }
+}
+