annotate sites/all/modules/ctools/plugins/access/entity_field_value.inc @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Plugin to provide access control based upon entity bundle.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 $plugin = array(
danielebarchiesi@0 9 'title' => t("(Custom) Entity: Field Value"),
danielebarchiesi@0 10 'description' => t('Control access by entity field value.'),
danielebarchiesi@0 11 'callback' => 'ctools_entity_field_value_ctools_access_check',
danielebarchiesi@0 12 'default' => array('type' => array()),
danielebarchiesi@0 13 'settings form' => 'ctools_entity_field_value_ctools_access_settings',
danielebarchiesi@0 14 'settings form submit' => 'ctools_entity_field_value_ctools_access_settings_submit',
danielebarchiesi@0 15 'summary' => 'ctools_entity_field_value_ctools_access_summary',
danielebarchiesi@0 16 'get child' => 'ctools_entity_field_value_ctools_access_get_child',
danielebarchiesi@0 17 'get children' => 'ctools_entity_field_value_ctools_access_get_children',
danielebarchiesi@0 18 );
danielebarchiesi@0 19 function ctools_entity_field_value_ctools_access_get_child($plugin, $parent, $child) {
danielebarchiesi@0 20
danielebarchiesi@0 21 $plugins = &drupal_static(__FUNCTION__, array());
danielebarchiesi@0 22 if (empty($plugins[$parent . ':' . $child])) {
danielebarchiesi@0 23 list($entity_type, $bundle_type, $field_name) = explode(':', $child);
danielebarchiesi@0 24 $plugins[$parent . ':' . $child] = _ctools_entity_field_value_ctools_access_get_child($plugin, $parent, $entity_type, $bundle_type, $field_name);
danielebarchiesi@0 25 }
danielebarchiesi@0 26
danielebarchiesi@0 27 return $plugins[$parent . ':' . $child];
danielebarchiesi@0 28 }
danielebarchiesi@0 29
danielebarchiesi@0 30 function ctools_entity_field_value_ctools_access_get_children($plugin, $parent) {
danielebarchiesi@0 31 $plugins = &drupal_static(__FUNCTION__, array());
danielebarchiesi@0 32 if (!empty($plugins)) {
danielebarchiesi@0 33 return $plugins;
danielebarchiesi@0 34 }
danielebarchiesi@0 35 $entities = entity_get_info();
danielebarchiesi@0 36 foreach ($entities as $entity_type => $entity) {
danielebarchiesi@0 37 foreach ($entity['bundles'] as $bundle_type => $bundle) {
danielebarchiesi@0 38 foreach (field_info_instances($entity_type, $bundle_type) as $field_name => $field) {
danielebarchiesi@0 39 if (!isset($plugins[$parent . ':' . $entity_type . ':' . $bundle_type . ':' . $field_name])) {
danielebarchiesi@0 40 $plugin = _ctools_entity_field_value_ctools_access_get_child($plugin, $parent, $entity_type, $bundle_type, $field_name, $entity, $bundle, $field);
danielebarchiesi@0 41 $plugins[$parent . ':' . $entity_type . ':' . $bundle_type . ':' . $field_name] = $plugin;
danielebarchiesi@0 42 }
danielebarchiesi@0 43 }
danielebarchiesi@0 44 }
danielebarchiesi@0 45 }
danielebarchiesi@0 46
danielebarchiesi@0 47 return $plugins;
danielebarchiesi@0 48 }
danielebarchiesi@0 49
danielebarchiesi@0 50 function _ctools_entity_field_value_ctools_access_get_child($plugin, $parent, $entity_type, $bundle_type, $field_name, $entity = NULL, $bundle = NULL, $field = NULL) {
danielebarchiesi@0 51
danielebarchiesi@0 52 // check that the entity, bundle and field arrays have a value.
danielebarchiesi@0 53 // If not, load theme using machine names.
danielebarchiesi@0 54 if (empty($entity)) {
danielebarchiesi@0 55 $entity = entity_get_info($entity_type);
danielebarchiesi@0 56 }
danielebarchiesi@0 57
danielebarchiesi@0 58 if (empty($bundle)) {
danielebarchiesi@0 59 $bundle = $entity['bundles'][$bundle_type];
danielebarchiesi@0 60 }
danielebarchiesi@0 61
danielebarchiesi@0 62 if (empty($field)) {
danielebarchiesi@0 63 $field_instances = field_info_instances($entity_type, $bundle_type);
danielebarchiesi@0 64 $field = $field_instances[$field_name];
danielebarchiesi@0 65 }
danielebarchiesi@0 66
danielebarchiesi@0 67 $plugin['title'] = t('@entity @type: @field Field', array('@entity' => $entity['label'], '@type' => $bundle_type, '@field' => $field['label']));
danielebarchiesi@0 68 $plugin['keyword'] = $entity_type;
danielebarchiesi@0 69 $plugin['description'] = t('Control access by @entity entity bundle.', array('@entity' => $entity_type));
danielebarchiesi@0 70 $plugin['name'] = $parent . ':' . $entity_type . ':' . $bundle_type . ':' . $field_name;
danielebarchiesi@0 71 $plugin['required context'] = new ctools_context_required(t(ucfirst($entity_type)), $entity_type, array(
danielebarchiesi@0 72 'type' => $bundle_type,
danielebarchiesi@0 73 ));
danielebarchiesi@0 74
danielebarchiesi@0 75 return $plugin;
danielebarchiesi@0 76 }
danielebarchiesi@0 77
danielebarchiesi@0 78 /**
danielebarchiesi@0 79 * Settings form for the 'by entity_bundle' access plugin
danielebarchiesi@0 80 */
danielebarchiesi@0 81 function ctools_entity_field_value_ctools_access_settings($form, &$form_state, $conf) {
danielebarchiesi@0 82 $plugin = $form_state['plugin'];
danielebarchiesi@0 83 list($parent, $entity_type, $bundle_type, $field_name) = explode(':', $plugin['name']);
danielebarchiesi@0 84 $entity_info = entity_get_info($entity_type);
danielebarchiesi@0 85 $instances = field_info_instances($entity_type, $bundle_type);
danielebarchiesi@0 86 $instance = $instances[$field_name];
danielebarchiesi@0 87 $field = field_info_field_by_id($instance['field_id']);
danielebarchiesi@0 88 foreach ($field['columns'] as $column => $attributes) {
danielebarchiesi@0 89 $columns[] = _field_sql_storage_columnname($field_name, $column);
danielebarchiesi@0 90 }
danielebarchiesi@0 91 ctools_include('fields');
danielebarchiesi@0 92 $entity = (object)array(
danielebarchiesi@0 93 $entity_info['entity keys']['bundle'] => $bundle_type,
danielebarchiesi@0 94 );
danielebarchiesi@0 95 $langcode = field_valid_language(NULL);
danielebarchiesi@0 96 $form['settings'] += (array) ctools_field_invoke_field($instance, 'form', $entity_type, $entity, $form, $form_state, array('default' => TRUE, 'language' => $langcode));
danielebarchiesi@0 97 // weight is really not important once this is populated and will only interfere with the form layout.
danielebarchiesi@0 98 foreach (element_children($form['settings']) as $element) {
danielebarchiesi@0 99 unset($form['settings'][$element]['#weight']);
danielebarchiesi@0 100 }
danielebarchiesi@0 101
danielebarchiesi@0 102 // Need more logic here to handle compound fields.
danielebarchiesi@0 103 foreach ($columns as $column) {
danielebarchiesi@0 104 if (isset($conf[$column]) && is_array($conf[$column])) {
danielebarchiesi@0 105 foreach ($conf[$column] as $delta => $conf_value) {
danielebarchiesi@0 106 if (is_numeric($delta) && is_array($conf_value)) {
danielebarchiesi@0 107 $form['settings'][$field_name][LANGUAGE_NONE][$delta]['value']['#default_value'] = $conf_value['value'];
danielebarchiesi@0 108 }
danielebarchiesi@0 109 }
danielebarchiesi@0 110 }
danielebarchiesi@0 111 else {
danielebarchiesi@0 112 $form['settings'][$field_name][LANGUAGE_NONE]['#default_value'] = $conf[$column];
danielebarchiesi@0 113 }
danielebarchiesi@0 114 }
danielebarchiesi@0 115
danielebarchiesi@0 116 return $form;
danielebarchiesi@0 117 }
danielebarchiesi@0 118
danielebarchiesi@0 119 /**
danielebarchiesi@0 120 * Compress the entity bundles allowed to the minimum.
danielebarchiesi@0 121 */
danielebarchiesi@0 122 function ctools_entity_field_value_ctools_access_settings_submit($form, &$form_state) {
danielebarchiesi@0 123 $plugin = $form_state['plugin'];
danielebarchiesi@0 124 list($parent, $entity_type, $bundle_type, $field_name) = explode(':', $plugin['name']);
danielebarchiesi@0 125 $langcode = field_valid_language(NULL);
danielebarchiesi@0 126 $langcode = isset($form_state['input']['settings'][$field_name][$langcode]) ? $langcode : LANGUAGE_NONE;
danielebarchiesi@0 127 $instances = field_info_instances($entity_type, $bundle_type);
danielebarchiesi@0 128 $instance = $instances[$field_name];
danielebarchiesi@0 129 $field = field_info_field_by_id($instance['field_id']);
danielebarchiesi@0 130 foreach ($field['columns'] as $column => $attributes) {
danielebarchiesi@0 131 $columns[] = _field_sql_storage_columnname($field_name, $column);
danielebarchiesi@0 132 }
danielebarchiesi@0 133 foreach ($columns as $column) {
danielebarchiesi@0 134 $form_state['values']['settings'][$column] = $form_state['input']['settings'][$field_name][$langcode];
danielebarchiesi@0 135 }
danielebarchiesi@0 136 }
danielebarchiesi@0 137
danielebarchiesi@0 138 /**
danielebarchiesi@0 139 * Check for access.
danielebarchiesi@0 140 */
danielebarchiesi@0 141 function ctools_entity_field_value_ctools_access_check($conf, $context, $plugin) {
danielebarchiesi@0 142 list($parent, $entity_type, $bundle_type, $field_name) = explode(':', $plugin['name']);
danielebarchiesi@0 143
danielebarchiesi@0 144 if ($field_items = field_get_items($entity_type, $context->data, $field_name)) {
danielebarchiesi@0 145 $langcode = field_language($entity_type, $context->data, $field_name);
danielebarchiesi@0 146 // Get field storage columns.
danielebarchiesi@0 147 $instance = field_info_instance($entity_type, $field_name, $bundle_type);
danielebarchiesi@0 148 $field = field_info_field_by_id($instance['field_id']);
danielebarchiesi@0 149 $columns = array();
danielebarchiesi@0 150 foreach ($field['columns'] as $column => $attributes) {
danielebarchiesi@0 151 $columns[$column] = _field_sql_storage_columnname($field_name, $column);
danielebarchiesi@0 152 }
danielebarchiesi@0 153
danielebarchiesi@0 154 if (isset($conf[$field_name])) {
danielebarchiesi@0 155 // We have settings for this field.
danielebarchiesi@0 156 $conf_value_array = _ctools_entity_field_value_ctools_access_get_conf_field_values($conf[$field_name], $langcode);
danielebarchiesi@0 157 if (empty($conf_value_array)) {
danielebarchiesi@0 158 return FALSE;
danielebarchiesi@0 159 }
danielebarchiesi@0 160
danielebarchiesi@0 161 // Check field value.
danielebarchiesi@0 162 foreach ($field_items as $field_value) {
danielebarchiesi@0 163 foreach ($field_value as $field_column => $value) {
danielebarchiesi@0 164 // Iterate through config values.
danielebarchiesi@0 165 foreach ($conf_value_array as $conf_value) {
danielebarchiesi@0 166 // Check access only for stored in config column values.
danielebarchiesi@0 167 if (isset($conf_value[$field_column]) && $value == $conf_value[$field_column]) {
danielebarchiesi@0 168 return TRUE;
danielebarchiesi@0 169 }
danielebarchiesi@0 170 }
danielebarchiesi@0 171 }
danielebarchiesi@0 172 }
danielebarchiesi@0 173 }
danielebarchiesi@0 174 }
danielebarchiesi@0 175
danielebarchiesi@0 176 return FALSE;
danielebarchiesi@0 177 }
danielebarchiesi@0 178
danielebarchiesi@0 179 function _ctools_entity_field_value_ctools_access_get_conf_field_values($values, $langcode = LANGUAGE_NONE) {
danielebarchiesi@0 180 if (!is_array($values) || !isset($values[$langcode])) {
danielebarchiesi@0 181 return;
danielebarchiesi@0 182 }
danielebarchiesi@0 183 $conf_values = array();
danielebarchiesi@0 184
danielebarchiesi@0 185 foreach ($values[$langcode] as $delta => $value) {
danielebarchiesi@0 186 $conf_values[$delta] = $value;
danielebarchiesi@0 187 }
danielebarchiesi@0 188
danielebarchiesi@0 189 return $conf_values;
danielebarchiesi@0 190 }
danielebarchiesi@0 191
danielebarchiesi@0 192 /**
danielebarchiesi@0 193 * Provide a summary description based upon the checked entity_bundle.
danielebarchiesi@0 194 */
danielebarchiesi@0 195 function ctools_entity_field_value_ctools_access_summary($conf, $context, $plugin) {
danielebarchiesi@0 196 list($parent, $entity_type, $bundle_type, $field_name) = explode(':', $plugin['name']);
danielebarchiesi@0 197 $instances = field_info_instances($entity_type, $bundle_type);
danielebarchiesi@0 198 $instance = $instances[$field_name];
danielebarchiesi@0 199 $field = field_info_field_by_id($instance['field_id']);
danielebarchiesi@0 200 $entity_info = entity_get_info($entity_type);
danielebarchiesi@0 201 $entity = (object)array(
danielebarchiesi@0 202 $entity_info['entity keys']['bundle'] => $bundle_type,
danielebarchiesi@0 203 );
danielebarchiesi@0 204 $string = '';
danielebarchiesi@0 205 $keys = array();
danielebarchiesi@0 206 $values = array();
danielebarchiesi@0 207 foreach ($field['columns'] as $column => $attributes) {
danielebarchiesi@0 208 $conf_key = _field_sql_storage_columnname($field_name, $column);
danielebarchiesi@0 209 if (count($field['columns']) > 1) {
danielebarchiesi@0 210 // Add some sort of handling for compound fields
danielebarchiesi@0 211 }
danielebarchiesi@0 212 else {
danielebarchiesi@0 213 if (isset($conf[$conf_key])) {
danielebarchiesi@0 214 $entity->{$field_name}[LANGUAGE_NONE][] = array($column => $conf[$conf_key]);
danielebarchiesi@0 215 }
danielebarchiesi@0 216 }
danielebarchiesi@0 217 $string .= " @{$column} equals @{$column}_value";
danielebarchiesi@0 218 $keys['@' . $column] = $column;
danielebarchiesi@0 219 $values["@{$column}_value"] = $conf[$conf_key];
danielebarchiesi@0 220 }
danielebarchiesi@0 221 $view_mode = 'full';
danielebarchiesi@0 222 $null = NULL;
danielebarchiesi@0 223 $options = array('language' => LANGUAGE_NONE);
danielebarchiesi@0 224 ctools_include('fields');
danielebarchiesi@0 225 $display = field_get_display($instance, $view_mode, $entity);
danielebarchiesi@0 226 if (isset($display['module'])) {
danielebarchiesi@0 227 $display['type'] = 'list_default';
danielebarchiesi@0 228 $function = $display['module'] . '_field_formatter_view';
danielebarchiesi@0 229 $items = isset($entity->{$field_name}[LANGUAGE_NONE]) ? $entity->{$field_name}[LANGUAGE_NONE] : array();
danielebarchiesi@0 230 if (function_exists($function)) {
danielebarchiesi@0 231 $elements = $function($entity_type, $entity, $field, $instance, LANGUAGE_NONE, $items, $display);
danielebarchiesi@0 232 }
danielebarchiesi@0 233 $value_keys = array_keys($values);
danielebarchiesi@0 234 foreach ($value_keys as $key => $value) {
danielebarchiesi@0 235 $values[$value] = isset($elements[$key]['#markup']) ? $elements[$key]['#markup'] : '';
danielebarchiesi@0 236 }
danielebarchiesi@0 237 }
danielebarchiesi@0 238 $values = array_merge($keys, $values);
danielebarchiesi@0 239 return t($string, $values);
danielebarchiesi@0 240 }
danielebarchiesi@0 241