diff --git a/modules/registration_views/includes/registration_handler_field_entity_capacity_total.inc b/modules/registration_views/includes/registration_handler_field_entity_capacity_total.inc
index f55a509..346cebc 100644
--- a/modules/registration_views/includes/registration_handler_field_entity_capacity_total.inc
+++ b/modules/registration_views/includes/registration_handler_field_entity_capacity_total.inc
@@ -3,16 +3,18 @@
* @file
* Display maximum slots for an entity.
*/
-class registration_handler_field_entity_capacity_total extends views_handler_field {
+class registration_handler_field_entity_capacity_total extends views_handler_field_entity {
function render($values) {
- $slots = $this->get_value($values);
- if (isset($slots)) {
- if (!empty($slots)) {
- return $slots;
- }
- else {
- return t('Unlimited');
- }
+ $entity = $this->get_value($values);
+ list($entity_id) = entity_extract_ids($this->entity_type, $entity);
+
+ $settings = registration_entity_settings($this->entity_type, $entity_id);
+
+ if ($settings['capacity'] != 0) {
+ return $settings['capacity'];
+ }
+ else {
+ return t('unlimited');
}
}
}
diff --git a/modules/registration_views/includes/registration_handler_field_entity_capacity_used.inc b/modules/registration_views/includes/registration_handler_field_entity_capacity_used.inc
index d8657d7..47188af 100644
--- a/modules/registration_views/includes/registration_handler_field_entity_capacity_used.inc
+++ b/modules/registration_views/includes/registration_handler_field_entity_capacity_used.inc
@@ -1,7 +1,7 @@
tokenize_value($this->options['entity'], 0);
+ return registration_administer_registrations_access($this->options['entity_type'], (int)$entity, $account);
+ }
+
+ function get_access_callback() {
+ $entity = $this->tokenize_value($this->options['entity'], 0);
+ return array('registration_administer_registrations_access', array($this->options['entity_type'], (int)$entity));
+ }
+
+ function summary_title() {
+ return t('%entity_type with ID %entity', array('%entity_type' => $this->options['entity_type'], '%entity' => $this->options['entity']));
+ }
+
+ function option_definition() {
+ $options = parent::option_definition();
+ $options['entity_type'] = array('default' => NULL);
+ $options['entity'] = array('default' => NULL);
+
+ return $options;
+ }
+
+ function options_form(&$form, &$form_state) {
+ parent::options_form($form, $form_state);
+
+ $form['entity_type'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Entity type'),
+ '#default_value' => $this->options['entity_type'],
+ '#required' => TRUE,
+ '#description' => t("The type of entity who's permission needs to be checked."),
+ );
+ $form['entity'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Entity ID'),
+ '#default_value' => $this->options['entity'],
+ '#required' => TRUE,
+ '#description' => t("The entity ID of the entity who's permission needs to be checked."),
+ );
+
+ $count = 0; // This lets us prepare the key as we want it printed.
+ foreach ($this->view->display_handler->get_handlers('argument') as $arg => $handler) {
+ $options[t('Arguments')]['%' . ++$count] = t('@argument title', array('@argument' => $handler->ui_name()));
+ $options[t('Arguments')]['!' . $count] = t('@argument input', array('@argument' => $handler->ui_name()));
+ }
+
+ if (!empty($options)) {
+ $output = '
' . t('The following tokens are available. If you would like to have the characters \'[\' and \']\' please use the html entity codes \'%5B\' or \'%5D\' or they will get replaced with empty space.' . '
');
+ foreach (array_keys($options) as $type) {
+ if (!empty($options[$type])) {
+ $items = array();
+ foreach ($options[$type] as $key => $value) {
+ $items[] = $key . ' == ' . $value;
+ }
+ $output .= theme('item_list',
+ array(
+ 'items' => $items,
+ 'type' => $type
+ ));
+ }
+ }
+
+ $form['token_help'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Replacement patterns'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ '#value' => $output,
+ '#id' => 'edit-options-token-help',
+ '#dependency' => array(
+ 'edit-options-tokenize' => array(1),
+ ),
+ '#prefix' => '',
+ '#suffix' => '
',
+ );
+ }
+ }
+
+ function options_validate(&$form, &$form_state) {
+ // @todo
+ if (FALSE && !$form_state['values']['entity_type']) {
+ form_error($form['entity_type'], t('You must enter a valid entity type.'));
+ }
+ }
+
+ /**
+ * Get the 'render' tokens to use for advanced rendering.
+ *
+ * This runs through all of the fields and arguments that
+ * are available and gets their values. This will then be
+ * used in one giant str_replace().
+ */
+ function get_render_tokens() {
+ $tokens = array();
+ if (!empty($this->view->build_info['substitutions'])) {
+ $tokens = $this->view->build_info['substitutions'];
+ }
+
+ $path = explode('/', $this->view->display_handler->get_option('path'));
+ $count = 0;
+ foreach ($path as $key => $piece) {
+ if (strpos($piece, '%') !== FALSE) {
+ $token = '%' . ++$count;
+ if (!isset($tokens[$token])) {
+ $tokens[$token] = '';
+ }
+
+ // Use strip tags as there should never be HTML in the path.
+ // However, we need to preserve special characters like " that
+ // were removed by check_plain().
+ $tokens['!' . $count] = $key;
+ }
+ }
+
+ return $tokens;
+ }
+
+ /**
+ * Replace a value with tokens from the last field.
+ */
+ function tokenize_value($value, $row_index = NULL) {
+ if (strpos($value, '[') !== FALSE || strpos($value, '!') !== FALSE || strpos($value, '%') !== FALSE) {
+ $tokens = $this->get_render_tokens();
+
+ $value = filter_xss_admin($value);
+ $value = strtr($value, $tokens);
+ $value = strip_tags($value);
+ }
+
+ return $value;
+ }
+}
diff --git a/modules/registration_views/includes/registration_views.views_default.inc b/modules/registration_views/includes/registration_views.views_default.inc
new file mode 100644
index 0000000..825f13c
--- /dev/null
+++ b/modules/registration_views/includes/registration_views.views_default.inc
@@ -0,0 +1,267 @@
+name = 'registrations';
+ $view->description = '';
+ $view->tag = 'default';
+ $view->base_table = 'registration';
+ $view->human_name = 'Registrations';
+ $view->core = 7;
+ $view->api_version = '3.0';
+ $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+ /* Display: Master */
+ $handler = $view->new_display('default', 'Master', 'default');
+ $handler->display->display_options['title'] = 'Registrations';
+ $handler->display->display_options['use_more_always'] = FALSE;
+ $handler->display->display_options['access']['type'] = 'administer_registrations';
+ $handler->display->display_options['access']['entity_type'] = 'node';
+ $handler->display->display_options['access']['entity'] = '!1';
+ $handler->display->display_options['cache']['type'] = 'none';
+ $handler->display->display_options['query']['type'] = 'views_query';
+ $handler->display->display_options['exposed_form']['type'] = 'basic';
+ $handler->display->display_options['pager']['type'] = 'full';
+ $handler->display->display_options['pager']['options']['items_per_page'] = '50';
+ $handler->display->display_options['style_plugin'] = 'table';
+ $handler->display->display_options['style_options']['columns'] = array(
+ 'capacity_used' => 'capacity_used',
+ 'registration_id' => 'registration_id',
+ 'anon_mail' => 'anon_mail',
+ 'mail' => 'mail',
+ 'name_1' => 'name_1',
+ 'name' => 'name',
+ 'count' => 'count',
+ 'created' => 'created',
+ 'state' => 'state',
+ 'view_registration' => 'view_registration',
+ 'edit_registration' => 'view_registration',
+ 'delete_registration' => 'view_registration',
+ );
+ $handler->display->display_options['style_options']['default'] = 'created';
+ $handler->display->display_options['style_options']['info'] = array(
+ 'capacity_used' => array(
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'registration_id' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'anon_mail' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'mail' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'name_1' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'name' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'count' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'desc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'created' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'state' => array(
+ 'sortable' => 1,
+ 'default_sort_order' => 'asc',
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'view_registration' => array(
+ 'align' => '',
+ 'separator' => ' ',
+ 'empty_column' => 0,
+ ),
+ 'edit_registration' => array(
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ 'delete_registration' => array(
+ 'align' => '',
+ 'separator' => '',
+ 'empty_column' => 0,
+ ),
+ );
+ /* Header: Global: Text area */
+ $handler->display->display_options['header']['area']['id'] = 'area';
+ $handler->display->display_options['header']['area']['table'] = 'views';
+ $handler->display->display_options['header']['area']['field'] = 'area';
+ $handler->display->display_options['header']['area']['content'] = '[capacity_used] total slots out of [capacity_total] used for %1. Registration is [registration_status].';
+ $handler->display->display_options['header']['area']['format'] = 'plain_text';
+ $handler->display->display_options['header']['area']['tokenize'] = TRUE;
+ /* No results behavior: Global: Unfiltered text */
+ $handler->display->display_options['empty']['area_text_custom']['id'] = 'area_text_custom';
+ $handler->display->display_options['empty']['area_text_custom']['table'] = 'views';
+ $handler->display->display_options['empty']['area_text_custom']['field'] = 'area_text_custom';
+ $handler->display->display_options['empty']['area_text_custom']['label'] = 'Empty text';
+ $handler->display->display_options['empty']['area_text_custom']['empty'] = TRUE;
+ $handler->display->display_options['empty']['area_text_custom']['content'] = 'There are no registrants.';
+ /* Relationship: Registration: Author entity author_uid */
+ $handler->display->display_options['relationships']['author']['id'] = 'author';
+ $handler->display->display_options['relationships']['author']['table'] = 'registration';
+ $handler->display->display_options['relationships']['author']['field'] = 'author';
+ $handler->display->display_options['relationships']['author']['label'] = 'Created By';
+ /* Relationship: Registration: User */
+ $handler->display->display_options['relationships']['user_uid']['id'] = 'user_uid';
+ $handler->display->display_options['relationships']['user_uid']['table'] = 'registration';
+ $handler->display->display_options['relationships']['user_uid']['field'] = 'user_uid';
+ /* Relationship: Registration: Registration to Node */
+ $handler->display->display_options['relationships']['registration_related_node']['id'] = 'registration_related_node';
+ $handler->display->display_options['relationships']['registration_related_node']['table'] = 'registration';
+ $handler->display->display_options['relationships']['registration_related_node']['field'] = 'registration_related_node';
+ $handler->display->display_options['relationships']['registration_related_node']['label'] = 'Host entity from Registration';
+ $handler->display->display_options['relationships']['registration_related_node']['required'] = TRUE;
+ /* Field: Registration: Registration ID */
+ $handler->display->display_options['fields']['registration_id']['id'] = 'registration_id';
+ $handler->display->display_options['fields']['registration_id']['table'] = 'registration';
+ $handler->display->display_options['fields']['registration_id']['field'] = 'registration_id';
+ $handler->display->display_options['fields']['registration_id']['label'] = 'ID';
+ /* Field: Registration: Anonymous e-mail */
+ $handler->display->display_options['fields']['anon_mail']['id'] = 'anon_mail';
+ $handler->display->display_options['fields']['anon_mail']['table'] = 'registration';
+ $handler->display->display_options['fields']['anon_mail']['field'] = 'anon_mail';
+ $handler->display->display_options['fields']['anon_mail']['label'] = '';
+ $handler->display->display_options['fields']['anon_mail']['exclude'] = TRUE;
+ $handler->display->display_options['fields']['anon_mail']['element_label_colon'] = FALSE;
+ /* Field: User: E-mail */
+ $handler->display->display_options['fields']['mail']['id'] = 'mail';
+ $handler->display->display_options['fields']['mail']['table'] = 'users';
+ $handler->display->display_options['fields']['mail']['field'] = 'mail';
+ $handler->display->display_options['fields']['mail']['relationship'] = 'user_uid';
+ $handler->display->display_options['fields']['mail']['label'] = 'Email';
+ $handler->display->display_options['fields']['mail']['alter']['alter_text'] = TRUE;
+ $handler->display->display_options['fields']['mail']['alter']['text'] = '[anon_mail][mail]';
+ $handler->display->display_options['fields']['mail']['hide_alter_empty'] = FALSE;
+ /* Field: User: Name */
+ $handler->display->display_options['fields']['name_1']['id'] = 'name_1';
+ $handler->display->display_options['fields']['name_1']['table'] = 'users';
+ $handler->display->display_options['fields']['name_1']['field'] = 'name';
+ $handler->display->display_options['fields']['name_1']['relationship'] = 'user_uid';
+ $handler->display->display_options['fields']['name_1']['label'] = 'User';
+ /* Field: User: Name */
+ $handler->display->display_options['fields']['name']['id'] = 'name';
+ $handler->display->display_options['fields']['name']['table'] = 'users';
+ $handler->display->display_options['fields']['name']['field'] = 'name';
+ $handler->display->display_options['fields']['name']['relationship'] = 'author';
+ $handler->display->display_options['fields']['name']['label'] = 'Created By';
+ /* Field: Registration: Slots consumed */
+ $handler->display->display_options['fields']['count']['id'] = 'count';
+ $handler->display->display_options['fields']['count']['table'] = 'registration';
+ $handler->display->display_options['fields']['count']['field'] = 'count';
+ $handler->display->display_options['fields']['count']['label'] = 'Count';
+ /* Field: Registration: Date created */
+ $handler->display->display_options['fields']['created']['id'] = 'created';
+ $handler->display->display_options['fields']['created']['table'] = 'registration';
+ $handler->display->display_options['fields']['created']['field'] = 'created';
+ $handler->display->display_options['fields']['created']['label'] = 'Created';
+ $handler->display->display_options['fields']['created']['date_format'] = 'medium';
+ /* Field: Registration: State entity */
+ $handler->display->display_options['fields']['state']['id'] = 'state';
+ $handler->display->display_options['fields']['state']['table'] = 'registration';
+ $handler->display->display_options['fields']['state']['field'] = 'state';
+ $handler->display->display_options['fields']['state']['label'] = 'State';
+ /* Field: Registration: View link */
+ $handler->display->display_options['fields']['view_registration']['id'] = 'view_registration';
+ $handler->display->display_options['fields']['view_registration']['table'] = 'registration';
+ $handler->display->display_options['fields']['view_registration']['field'] = 'view_registration';
+ $handler->display->display_options['fields']['view_registration']['label'] = 'Actions';
+ /* Field: Registration: Edit link */
+ $handler->display->display_options['fields']['edit_registration']['id'] = 'edit_registration';
+ $handler->display->display_options['fields']['edit_registration']['table'] = 'registration';
+ $handler->display->display_options['fields']['edit_registration']['field'] = 'edit_registration';
+ /* Field: Registration: Delete link */
+ $handler->display->display_options['fields']['delete_registration']['id'] = 'delete_registration';
+ $handler->display->display_options['fields']['delete_registration']['table'] = 'registration';
+ $handler->display->display_options['fields']['delete_registration']['field'] = 'delete_registration';
+ /* Field: Registration Settings: Spaces used */
+ $handler->display->display_options['fields']['capacity_used']['id'] = 'capacity_used';
+ $handler->display->display_options['fields']['capacity_used']['table'] = 'node';
+ $handler->display->display_options['fields']['capacity_used']['field'] = 'capacity_used';
+ $handler->display->display_options['fields']['capacity_used']['relationship'] = 'registration_related_node';
+ $handler->display->display_options['fields']['capacity_used']['label'] = '';
+ $handler->display->display_options['fields']['capacity_used']['exclude'] = TRUE;
+ /* Field: Registration Settings: Registration Status */
+ $handler->display->display_options['fields']['registration_status']['id'] = 'registration_status';
+ $handler->display->display_options['fields']['registration_status']['table'] = 'node';
+ $handler->display->display_options['fields']['registration_status']['field'] = 'registration_status';
+ $handler->display->display_options['fields']['registration_status']['relationship'] = 'registration_related_node';
+ $handler->display->display_options['fields']['registration_status']['exclude'] = TRUE;
+ /* Field: Registration Settings: Total spaces */
+ $handler->display->display_options['fields']['capacity_total']['id'] = 'capacity_total';
+ $handler->display->display_options['fields']['capacity_total']['table'] = 'node';
+ $handler->display->display_options['fields']['capacity_total']['field'] = 'capacity_total';
+ $handler->display->display_options['fields']['capacity_total']['relationship'] = 'registration_related_node';
+ $handler->display->display_options['fields']['capacity_total']['exclude'] = TRUE;
+ /* Contextual filter: Registration: Host entity ID */
+ $handler->display->display_options['arguments']['entity_id']['id'] = 'entity_id';
+ $handler->display->display_options['arguments']['entity_id']['table'] = 'registration';
+ $handler->display->display_options['arguments']['entity_id']['field'] = 'entity_id';
+ $handler->display->display_options['arguments']['entity_id']['default_action'] = 'not found';
+ $handler->display->display_options['arguments']['entity_id']['title_enable'] = TRUE;
+ $handler->display->display_options['arguments']['entity_id']['title'] = '%1';
+ $handler->display->display_options['arguments']['entity_id']['default_argument_type'] = 'fixed';
+ $handler->display->display_options['arguments']['entity_id']['summary']['number_of_records'] = '0';
+ $handler->display->display_options['arguments']['entity_id']['summary']['format'] = 'default_summary';
+ $handler->display->display_options['arguments']['entity_id']['summary_options']['items_per_page'] = '25';
+ $handler->display->display_options['arguments']['entity_id']['specify_validation'] = TRUE;
+ $handler->display->display_options['arguments']['entity_id']['validate']['type'] = 'node';
+
+ /* Display: Page */
+ $handler = $view->new_display('page', 'Page', 'page');
+ $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+ $handler->display->display_options['path'] = 'node/%/registrations/list';
+ $handler->display->display_options['menu']['type'] = 'default tab';
+ $handler->display->display_options['menu']['title'] = 'Registrations';
+ $handler->display->display_options['menu']['weight'] = '0';
+ $handler->display->display_options['menu']['context'] = 0;
+ $handler->display->display_options['tab_options']['type'] = 'tab';
+ $handler->display->display_options['tab_options']['title'] = 'Manage Registrations';
+ $handler->display->display_options['tab_options']['weight'] = '0';
+ $export['registrations'] = $view;
+
+ return $export;
+}
diff --git a/modules/registration_views/registration_views.info b/modules/registration_views/registration_views.info
index 13f8076..b65128f 100644
--- a/modules/registration_views/registration_views.info
+++ b/modules/registration_views/registration_views.info
@@ -12,6 +12,7 @@ files[] = includes/registration_handler_field_registration_link_edit.inc
files[] = includes/registration_handler_field_registration_link_delete.inc
; Views: Registration Host Entity
+files[] = includes/registration_plugin_access_administer_registrations.inc
files[] = includes/registration_handler_relationship.inc
files[] = includes/registration_handler_field_entity_capacity_used.inc
files[] = includes/registration_handler_field_entity_capacity_total.inc
diff --git a/modules/registration_views/registration_views.module b/modules/registration_views/registration_views.module
index c3c5e0d..f724938 100644
--- a/modules/registration_views/registration_views.module
+++ b/modules/registration_views/registration_views.module
@@ -16,6 +16,24 @@ function registration_views_views_api() {
}
/**
+ * Implements hook_views_plugins().
+ */
+function registration_views_views_plugins() {
+ $plugins = array(
+ 'access' => array(
+ 'administer_registrations' => array(
+ 'title' => t('Administer registrations'),
+ 'help' => t('Access will be granted to users with administer registrations access for a specified entity.'),
+ 'handler' => 'registration_plugin_access_administer_registrations',
+ 'uses options' => TRUE,
+ ),
+ ),
+ );
+
+ return $plugins;
+}
+
+/**
* Implements hook_views_data().
*/
function registration_views_views_data() {
@@ -264,6 +282,17 @@ function registration_views_views_data_alter(&$data) {
),
);
+ // Host entity: total slots.
+ $data[$info['base table']]['capacity_total'] = array(
+ 'real field' => $info['entity keys']['id'],
+ 'group' => t('Registration Settings'),
+ 'title' => t('Total spaces'),
+ 'help' => t('Maximum number of spaces available for this entity.'),
+ 'field' => array(
+ 'handler' => 'registration_handler_field_entity_capacity_total',
+ ),
+ );
+
// Host entity: used slots.
$data[$info['base table']]['capacity_used'] = array(
'real field' => $info['entity keys']['id'],
diff --git a/registration.module b/registration.module
index 75748b1..6d7accf 100644
--- a/registration.module
+++ b/registration.module
@@ -508,6 +508,15 @@ function registration_register_page_access($entity_type, $entity) {
* @see registration_menu()
*/
function registration_administer_registrations_access($entity_type, $entity, $account = NULL) {
+ global $user;
+
+ if (is_numeric($entity)) {
+ $entity = entity_object_load($entity, $entity_type);
+ }
+ if (!isset($account)) {
+ $account = $user;
+ }
+
$registration_type = registration_get_entity_registration_type($entity_type, $entity);
if ($registration_type) {
if (user_access("administer $registration_type registration", $account)) {