patche ubercart to add expiration date field on views
https://www.drupal.org/node/419700
This commit is contained in:
parent
8d141a61e0
commit
69c5b7ee5c
@ -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');
|
||||||
|
+}
|
@ -2,12 +2,16 @@ name = Roles
|
|||||||
description = Assigns permanent or expirable roles based on product purchases.
|
description = Assigns permanent or expirable roles based on product purchases.
|
||||||
dependencies[] = uc_product
|
dependencies[] = uc_product
|
||||||
dependencies[] = uc_order
|
dependencies[] = uc_order
|
||||||
|
dependencies[] = views
|
||||||
package = Ubercart - core (optional)
|
package = Ubercart - core (optional)
|
||||||
core = 7.x
|
core = 7.x
|
||||||
|
|
||||||
; Test cases
|
; Test cases
|
||||||
files[] = tests/uc_roles.test
|
files[] = tests/uc_roles.test
|
||||||
|
|
||||||
|
; Views handlers
|
||||||
|
files[] = uc_roles.views.inc
|
||||||
|
|
||||||
; Information added by Drupal.org packaging script on 2014-10-22
|
; Information added by Drupal.org packaging script on 2014-10-22
|
||||||
version = "7.x-3.8"
|
version = "7.x-3.8"
|
||||||
core = "7.x"
|
core = "7.x"
|
||||||
|
@ -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"
|
||||||
|
|
@ -1278,3 +1278,9 @@ function _uc_roles_get_expiration($duration, $granularity, $start_time = NULL) {
|
|||||||
|
|
||||||
return strtotime($operator . $duration . ' ' . $granularity, $start_time);
|
return strtotime($operator . $duration . ' ' . $granularity, $start_time);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Implements hook_views_api().
|
||||||
|
*/
|
||||||
|
function uc_roles_views_api() {
|
||||||
|
return array('api' => '3.0');
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user