public ViewsDataHelper::fetchFields($base, $type, $grouping = FALSE, $sub_type = NULL)
Fetches a list of all fields available for a given base type.
Parameters
(array|string) $base: A list or a single base_table, for example node.
string $type: The handler type, for example field or filter.
bool $grouping: Should the result grouping by its 'group' label.
string $sub_type: An optional sub type. E.g. Allows making an area plugin available for header only, instead of header, footer, and empty regions.
Return value
array A keyed array of in the form of 'base_table' => 'Description'.
File
- core/modules/views/src/ViewsDataHelper.php, line 53
Class
- ViewsDataHelper
- Defines a helper class for stuff related to views data.
Namespace
Drupal\views
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | public function fetchFields( $base , $type , $grouping = FALSE, $sub_type = NULL) { if (! $this ->fields) { $data = $this ->data->get(); // This constructs this ginormous multi dimensional array to // collect the important data about fields. In the end, // the structure looks a bit like this (using nid as an example) // $strings['nid']['filter']['title'] = 'string'. // // This is constructed this way because the above referenced strings // can appear in different places in the actual data structure so that // the data doesn't have to be repeated a lot. This essentially lets // each field have a cheap kind of inheritance. foreach ( $data as $table => $table_data ) { $bases = array (); $strings = array (); $skip_bases = array (); foreach ( $table_data as $field => $info ) { // Collect table data from this table if ( $field == 'table' ) { // calculate what tables this table can join to. if (! empty ( $info [ 'join' ])) { $bases = array_keys ( $info [ 'join' ]); } // And it obviously joins to itself. $bases [] = $table ; continue ; } foreach ( array ( 'field' , 'sort' , 'filter' , 'argument' , 'relationship' , 'area' ) as $key ) { if (! empty ( $info [ $key ])) { if ( $grouping && ! empty ( $info [ $key ][ 'no group by' ])) { continue ; } if ( $sub_type && isset( $info [ $key ][ 'sub_type' ]) && (!in_array( $sub_type , ( array ) $info [ $key ][ 'sub_type' ]))) { continue ; } if (! empty ( $info [ $key ][ 'skip base' ])) { foreach (( array ) $info [ $key ][ 'skip base' ] as $base_name ) { $skip_bases [ $field ][ $key ][ $base_name ] = TRUE; } } elseif (! empty ( $info [ 'skip base' ])) { foreach (( array ) $info [ 'skip base' ] as $base_name ) { $skip_bases [ $field ][ $key ][ $base_name ] = TRUE; } } foreach ( array ( 'title' , 'group' , 'help' , 'base' , 'aliases' ) as $string ) { // First, try the lowest possible level if (! empty ( $info [ $key ][ $string ])) { $strings [ $field ][ $key ][ $string ] = $info [ $key ][ $string ]; } // Then try the field level elseif (! empty ( $info [ $string ])) { $strings [ $field ][ $key ][ $string ] = $info [ $string ]; } // Finally, try the table level elseif (! empty ( $table_data [ 'table' ][ $string ])) { $strings [ $field ][ $key ][ $string ] = $table_data [ 'table' ][ $string ]; } // We don't have any help provided for this field. If a better // description should be used for the Views UI you use // hook_views_data_alter() in module.views.inc or implement a // custom entity views_data handler. // @see hook_views_data_alter() // @see \Drupal\node\NodeViewsData elseif ( $string == 'help' ) { $strings [ $field ][ $key ][ $string ] = '' ; } else { if ( $string != 'base' ) { $strings [ $field ][ $key ][ $string ] = SafeMarkup::format( "Error: missing @component" , array ( '@component' => $string )); } } } } } } foreach ( $bases as $base_name ) { foreach ( $strings as $field => $field_strings ) { foreach ( $field_strings as $type_name => $type_strings ) { if ( empty ( $skip_bases [ $field ][ $type_name ][ $base_name ])) { $this ->fields[ $base_name ][ $type_name ][ "$table.$field" ] = $type_strings ; } } } } } } // If we have an array of base tables available, go through them // all and add them together. Duplicate keys will be lost and that's // Just Fine. if ( is_array ( $base )) { $strings = array (); foreach ( $base as $base_table ) { if (isset( $this ->fields[ $base_table ][ $type ])) { $strings += $this ->fields[ $base_table ][ $type ]; } } uasort( $strings , array ( 'self' , 'fetchedFieldSort' )); return $strings ; } if (isset( $this ->fields[ $base ][ $type ])) { uasort( $this ->fields[ $base ][ $type ], array ( $this , 'fetchedFieldSort' )); return $this ->fields[ $base ][ $type ]; } return array (); } |
Please login to continue.