diff --git a/sites/all/modules/contrib/ecommerce/ubercart/uc_role_views-419700.patch b/sites/all/modules/contrib/ecommerce/ubercart/uc_role_views-419700.patch new file mode 100644 index 00000000..dd04c9db --- /dev/null +++ b/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 @@ ++ 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'); ++} diff --git a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info b/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info index 46533d7e..345804a8 100644 --- a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info +++ b/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" diff --git a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info.orig b/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.info.orig new file mode 100644 index 00000000..46533d7e --- /dev/null +++ b/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" + diff --git a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.module b/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.module index d7ee52c9..65bdd742 100644 --- a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.module +++ b/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'); +} diff --git a/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.views.inc b/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.views.inc new file mode 100644 index 00000000..558e4614 --- /dev/null +++ b/sites/all/modules/contrib/ecommerce/ubercart/uc_roles/uc_roles.views.inc @@ -0,0 +1,110 @@ + 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; + } + } + } +} +