| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | diff --git a/uc_roles/uc_roles.views.inc b/uc_roles/uc_roles.views.incnew file mode 100644index 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.infoindex 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.incdiff --git a/uc_roles/uc_roles.module b/uc_roles/uc_roles.moduleindex 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');+}
 |