annotate sites/all/modules/references/references.module @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ce11bbd8f642
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * @file
danielebarchiesi@4 5 * Defines common base features for the various reference field types.
danielebarchiesi@4 6 */
danielebarchiesi@4 7
danielebarchiesi@4 8 /**
danielebarchiesi@4 9 * Menu access callback for reference autocomplete paths.
danielebarchiesi@4 10 *
danielebarchiesi@4 11 * Check for both 'edit' and 'view' access in the unlikely event
danielebarchiesi@4 12 * a user has edit but not view access.
danielebarchiesi@4 13 */
danielebarchiesi@4 14 function reference_autocomplete_access($entity_type, $bundle, $field_name, $entity = NULL, $account = NULL) {
danielebarchiesi@4 15 return user_access('access content', $account)
danielebarchiesi@4 16 && ($field = field_info_field($field_name))
danielebarchiesi@4 17 && field_info_instance($entity_type, $field_name, $bundle)
danielebarchiesi@4 18 && field_access('view', $field, $entity_type, $entity, $account)
danielebarchiesi@4 19 && field_access('edit', $field, $entity_type, $entity, $account);
danielebarchiesi@4 20 }
danielebarchiesi@4 21
danielebarchiesi@4 22 /**
danielebarchiesi@4 23 * Implements hook_init().
danielebarchiesi@4 24 */
danielebarchiesi@4 25 function references_init() {
danielebarchiesi@4 26 // Include feeds.module integration.
danielebarchiesi@4 27 if (module_exists('feeds')) {
danielebarchiesi@4 28 module_load_include('inc','references','references.feeds');
danielebarchiesi@4 29 }
danielebarchiesi@4 30 }
danielebarchiesi@4 31
danielebarchiesi@4 32 /**
danielebarchiesi@4 33 * Implements hook_views_api().
danielebarchiesi@4 34 */
danielebarchiesi@4 35 function references_views_api() {
danielebarchiesi@4 36 return array(
danielebarchiesi@4 37 'api' => 3,
danielebarchiesi@4 38 'path' => drupal_get_path('module', 'references') . '/views',
danielebarchiesi@4 39 );
danielebarchiesi@4 40 }
danielebarchiesi@4 41
danielebarchiesi@4 42 /**
danielebarchiesi@4 43 * Implements hook_views_plugins().
danielebarchiesi@4 44 *
danielebarchiesi@4 45 * Defines some plugins used by the Views modes for
danielebarchiesi@4 46 * user_reference.
danielebarchiesi@4 47 */
danielebarchiesi@4 48 function references_views_plugins() {
danielebarchiesi@4 49 $plugins = array(
danielebarchiesi@4 50 'display' => array(
danielebarchiesi@4 51 'references' => array(
danielebarchiesi@4 52 'title' => t('References'),
danielebarchiesi@4 53 'admin' => t('References'),
danielebarchiesi@4 54 'help' => 'Selects referenceable entities for a reference field (node_reference, user_reference...)',
danielebarchiesi@4 55 'handler' => 'references_plugin_display',
danielebarchiesi@4 56 'uses hook menu' => FALSE,
danielebarchiesi@4 57 'use ajax' => FALSE,
danielebarchiesi@4 58 'use pager' => FALSE,
danielebarchiesi@4 59 'accept attachments' => FALSE,
danielebarchiesi@4 60 // Custom property, used with views_get_applicable_views() to retrieve
danielebarchiesi@4 61 // all views with a 'References' display.
danielebarchiesi@4 62 'references display' => TRUE,
danielebarchiesi@4 63 ),
danielebarchiesi@4 64 ),
danielebarchiesi@4 65 'style' => array(
danielebarchiesi@4 66 'references_style' => array(
danielebarchiesi@4 67 'title' => t('References list'),
danielebarchiesi@4 68 'help' => 'Returns results as a PHP array of names + rendered rows.',
danielebarchiesi@4 69 'handler' => 'references_plugin_style',
danielebarchiesi@4 70 'theme' => 'views_view_unformatted',
danielebarchiesi@4 71 'uses row plugin' => TRUE,
danielebarchiesi@4 72 'uses fields' => TRUE,
danielebarchiesi@4 73 'uses options' => TRUE,
danielebarchiesi@4 74 'uses grouping' => TRUE,
danielebarchiesi@4 75 'type' => 'references',
danielebarchiesi@4 76 'even empty' => TRUE,
danielebarchiesi@4 77 ),
danielebarchiesi@4 78 ),
danielebarchiesi@4 79 'row' => array(
danielebarchiesi@4 80 'references_fields' => array(
danielebarchiesi@4 81 'title' => t('Inline fields'),
danielebarchiesi@4 82 'help' => t('Displays the fields with an optional template.'),
danielebarchiesi@4 83 'handler' => 'references_plugin_row_fields',
danielebarchiesi@4 84 'theme' => 'views_view_fields',
danielebarchiesi@4 85 'theme path' => drupal_get_path('module', 'views') . '/theme',
danielebarchiesi@4 86 'theme file' => 'theme.inc',
danielebarchiesi@4 87 'uses fields' => TRUE,
danielebarchiesi@4 88 'uses options' => TRUE,
danielebarchiesi@4 89 'type' => 'references',
danielebarchiesi@4 90 ),
danielebarchiesi@4 91 ),
danielebarchiesi@4 92 );
danielebarchiesi@4 93 return $plugins;
danielebarchiesi@4 94 }
danielebarchiesi@4 95
danielebarchiesi@4 96 /**
danielebarchiesi@4 97 * Retrieves the list of views with a 'references' display, in a format suitable for a 'select' form element..
danielebarchiesi@4 98 *
danielebarchiesi@4 99 * @param $entity_type
danielebarchiesi@4 100 * The entity type.
danielebarchiesi@4 101 *
danielebarchiesi@4 102 * @return
danielebarchiesi@4 103 * An array of eligible views displays.
danielebarchiesi@4 104 */
danielebarchiesi@4 105 function references_get_views_options($entity_type) {
danielebarchiesi@4 106 // Filter views that contain a 'references' display. This actually returns a
danielebarchiesi@4 107 // list of displays (the same view appears several times).
danielebarchiesi@4 108 $displays = views_get_applicable_views('references display');
danielebarchiesi@4 109
danielebarchiesi@4 110 // Filter views that list the entity type we want, and group the separate
danielebarchiesi@4 111 // displays by view.
danielebarchiesi@4 112 $entity_info = entity_get_info($entity_type);
danielebarchiesi@4 113 $options = array();
danielebarchiesi@4 114 foreach ($displays as $data) {
danielebarchiesi@4 115 list($view, $display_id) = $data;
danielebarchiesi@4 116 if ($view->base_table == $entity_info['base table']) {
danielebarchiesi@4 117 $options[$view->name . ':' . $display_id] = $view->name .' - ' . $view->display[$display_id]->display_title;
danielebarchiesi@4 118 }
danielebarchiesi@4 119 }
danielebarchiesi@4 120
danielebarchiesi@4 121 return $options;
danielebarchiesi@4 122 }
danielebarchiesi@4 123
danielebarchiesi@4 124 /**
danielebarchiesi@4 125 * Retrieves an array of candidate referenceable entities, defined by a view.
danielebarchiesi@4 126 *
danielebarchiesi@4 127 * @param $entity_type
danielebarchiesi@4 128 * The entity type.
danielebarchiesi@4 129 * @param $view_name
danielebarchiesi@4 130 * The name of the view.
danielebarchiesi@4 131 * @param $display_name
danielebarchiesi@4 132 * The name of the view's display. This has to be a 'References' display.
danielebarchiesi@4 133 * @param $args
danielebarchiesi@4 134 * The array of arguments ("contextual filters") for the view.
danielebarchiesi@4 135 * @param $options
danielebarchiesi@4 136 * Array of options to limit the scope of the returned list. This parameter
danielebarchiesi@4 137 * is similar to the $options parameter for
danielebarchiesi@4 138 * node_reference_potential_references(). An additional key is required:
danielebarchiesi@4 139 * - title_field: the name of the column holding entities 'titles' within the
danielebarchiesi@4 140 * entity base table.
danielebarchiesi@4 141 *
danielebarchiesi@4 142 * @return
danielebarchiesi@4 143 * An array of entities, in the format expected by
danielebarchiesi@4 144 * node_reference_potential_references().
danielebarchiesi@4 145 *
danielebarchiesi@4 146 * @see node_reference_potential_references()
danielebarchiesi@4 147 * @see _node_reference_potential_references_views()
danielebarchiesi@4 148 */
danielebarchiesi@4 149 function references_potential_references_view($entity_type, $view_name, $display_name, $args, $options) {
danielebarchiesi@4 150 $entity_info = entity_get_info($entity_type);
danielebarchiesi@4 151
danielebarchiesi@4 152 // Check that the view is valid and the display still exists.
danielebarchiesi@4 153 $view = views_get_view($view_name);
danielebarchiesi@4 154 if (!$view || $view->base_table != $entity_info['base table'] || !isset($view->display[$display_name])) {
danielebarchiesi@4 155 return FALSE;
danielebarchiesi@4 156 }
danielebarchiesi@4 157
danielebarchiesi@4 158 // If we have no access to the View an empty result should be returned to
danielebarchiesi@4 159 // avoid triggering the fallback results.
danielebarchiesi@4 160 if (!$view->access(array($display_name))) {
danielebarchiesi@4 161 return array();
danielebarchiesi@4 162 }
danielebarchiesi@4 163
danielebarchiesi@4 164 // Temporary backwards compatibility for fields migrated from CCK D6: accept
danielebarchiesi@4 165 // 'default' display, but dynamically add a 'references' display out of it.
danielebarchiesi@4 166 if ($display_name == 'default') {
danielebarchiesi@4 167 $display_name = $view->add_display('references');
danielebarchiesi@4 168 }
danielebarchiesi@4 169
danielebarchiesi@4 170 $view->set_display($display_name);
danielebarchiesi@4 171
danielebarchiesi@4 172 // @todo From merlinofchaos on IRC : arguments using summary view can defeat
danielebarchiesi@4 173 // the style setting.
danielebarchiesi@4 174 // We might also need to check if there's an argument, and set its
danielebarchiesi@4 175 // style_plugin as well.
danielebarchiesi@4 176
danielebarchiesi@4 177 // Set additional options to let references_plugin_display::query() narrow
danielebarchiesi@4 178 // the results.
danielebarchiesi@4 179 $references_options = array(
danielebarchiesi@4 180 'ids' => $options['ids'],
danielebarchiesi@4 181 'title_field' => $options['title_field'],
danielebarchiesi@4 182 'string' => $options['string'],
danielebarchiesi@4 183 'match' => $options['match'],
danielebarchiesi@4 184 );
danielebarchiesi@4 185 $view->display_handler->set_option('references_options', $references_options);
danielebarchiesi@4 186
danielebarchiesi@4 187 // We need the title field for autocomplete widgets, so add it (hidden) if not
danielebarchiesi@4 188 // present.
danielebarchiesi@4 189 $fields = $view->get_items('field', $display_name);
danielebarchiesi@4 190 if (!isset($fields[$options['title_field']])) {
danielebarchiesi@4 191 $label_options = array(
danielebarchiesi@4 192 'exclude' => 1,
danielebarchiesi@4 193 );
danielebarchiesi@4 194 $view->add_item($display_name, 'field', $entity_info['base table'], $options['title_field'], $label_options);
danielebarchiesi@4 195 }
danielebarchiesi@4 196
danielebarchiesi@4 197 // Limit result set size.
danielebarchiesi@4 198 $limit = !empty($options['limit']) ? $options['limit'] : 0;
danielebarchiesi@4 199 $view->display_handler->set_option('pager', array('type' => 'some', 'options' => array('items_per_page' => $limit)));
danielebarchiesi@4 200
danielebarchiesi@4 201 // Make sure the query is not cached
danielebarchiesi@4 202 $view->is_cacheable = FALSE;
danielebarchiesi@4 203
danielebarchiesi@4 204 // Get the results.
danielebarchiesi@4 205 $results = $view->execute_display($display_name, $args);
danielebarchiesi@4 206
danielebarchiesi@4 207 return $results;
danielebarchiesi@4 208 }