entity_translation.views.inc 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. /**
  3. * @file
  4. *
  5. * Provide views data and handlers for entity_translation.
  6. */
  7. /**
  8. * Implements hook_views_data().
  9. */
  10. function entity_translation_views_data() {
  11. $data = array();
  12. $data['entity_translation']['table']['group'] = t('Entity translation');
  13. // Advertise this table as a possible base table.
  14. $data['entity_translation']['table']['base'] = array(
  15. 'field' => 'entity_id',
  16. 'title' => t('Entity translation'),
  17. 'help' => t('Information about a translation of an entity.'),
  18. );
  19. $data['entity_translation']['entity_id'] = array(
  20. 'title' => t('Entity id'),
  21. 'help' => t('The entity id.'),
  22. 'field' => array(
  23. 'handler' => 'views_handler_field_numeric',
  24. 'click sortable' => TRUE,
  25. ),
  26. 'argument' => array(
  27. 'handler' => 'views_handler_argument_numeric',
  28. 'numeric' => TRUE,
  29. 'validate type' => 'entity_id',
  30. ),
  31. 'filter' => array(
  32. 'handler' => 'views_handler_filter_numeric',
  33. ),
  34. 'sort' => array(
  35. 'handler' => 'views_handler_sort',
  36. ),
  37. );
  38. $data['entity_translation']['entity_type'] = array(
  39. 'title' => t('Entity type'),
  40. 'help' => t('The entity type.'),
  41. 'field' => array(
  42. 'handler' => 'views_handler_field',
  43. 'click sortable' => TRUE,
  44. ),
  45. 'argument' => array(
  46. 'handler' => 'views_handler_argument_string',
  47. 'numeric' => FALSE,
  48. 'validate type' => 'entity_type',
  49. ),
  50. 'filter' => array(
  51. 'handler' => 'entity_translation_handler_filter_entity_type',
  52. ),
  53. 'sort' => array(
  54. 'handler' => 'views_handler_sort',
  55. ),
  56. );
  57. $data['entity_translation']['language'] = array(
  58. 'title' => t('Language'),
  59. 'help' => t('The language of this translation.'),
  60. 'field' => array(
  61. 'handler' => 'views_handler_field_locale_language',
  62. 'click sortable' => TRUE,
  63. ),
  64. 'argument' => array(
  65. 'handler' => 'views_handler_argument_locale_language',
  66. 'numeric' => FALSE,
  67. 'validate type' => 'language',
  68. ),
  69. 'filter' => array(
  70. 'handler' => 'entity_translation_handler_filter_language',
  71. 'allow empty' => TRUE,
  72. ),
  73. 'sort' => array(
  74. 'handler' => 'views_handler_sort',
  75. ),
  76. );
  77. $data['entity_translation']['source'] = array(
  78. 'title' => t('Source'),
  79. 'help' => t('The source language.'),
  80. 'field' => array(
  81. 'handler' => 'views_handler_field_locale_language',
  82. 'click sortable' => TRUE,
  83. ),
  84. 'argument' => array(
  85. 'handler' => 'views_handler_argument_locale_language',
  86. 'name field' => 'title',
  87. 'numeric' => FALSE,
  88. 'validate type' => 'string',
  89. ),
  90. 'filter' => array(
  91. 'handler' => 'entity_translation_handler_filter_language',
  92. 'allow empty' => TRUE,
  93. ),
  94. 'sort' => array(
  95. 'handler' => 'views_handler_sort',
  96. ),
  97. );
  98. $data['entity_translation']['status'] = array(
  99. 'title' => t('Translation status'),
  100. 'help' => t('The status of this translation.'),
  101. 'field' => array(
  102. 'handler' => 'views_handler_field_boolean',
  103. 'click sortable' => TRUE,
  104. ),
  105. 'argument' => array(
  106. 'handler' => 'views_handler_argument_numeric',
  107. 'numeric' => TRUE,
  108. 'validate type' => 'boolean',
  109. ),
  110. 'filter' => array(
  111. 'handler' => 'views_handler_filter_boolean_operator',
  112. ),
  113. 'sort' => array(
  114. 'handler' => 'views_handler_sort',
  115. ),
  116. );
  117. $data['entity_translation']['translate'] = array(
  118. 'title' => t('Needs update'),
  119. 'help' => t('Indicates if the translation needs to be updated.'),
  120. 'field' => array(
  121. 'handler' => 'views_handler_field_boolean',
  122. 'click sortable' => TRUE,
  123. ),
  124. 'argument' => array(
  125. 'handler' => 'views_handler_argument_numeric',
  126. 'name field' => 'title',
  127. 'numeric' => TRUE,
  128. 'validate type' => 'boolean',
  129. ),
  130. 'filter' => array(
  131. 'handler' => 'views_handler_filter_boolean_operator',
  132. ),
  133. 'sort' => array(
  134. 'handler' => 'views_handler_sort',
  135. ),
  136. );
  137. $data['entity_translation']['created'] = array(
  138. 'title' => t('Created'),
  139. 'help' => t('Created date.'),
  140. 'field' => array(
  141. 'handler' => 'views_handler_field_date',
  142. 'click sortable' => TRUE,
  143. ),
  144. 'argument' => array(
  145. 'handler' => 'views_handler_argument_date',
  146. 'numeric' => FALSE,
  147. 'validate type' => 'date',
  148. ),
  149. 'filter' => array(
  150. 'handler' => 'views_handler_filter_date',
  151. ),
  152. 'sort' => array(
  153. 'handler' => 'views_handler_sort_date',
  154. ),
  155. );
  156. $data['entity_translation']['changed'] = array(
  157. 'title' => t('Changed'),
  158. 'help' => t('Changed date.'),
  159. 'field' => array(
  160. 'handler' => 'views_handler_field_date',
  161. 'click sortable' => TRUE,
  162. ),
  163. 'argument' => array(
  164. 'handler' => 'views_handler_argument_date',
  165. 'numeric' => FALSE,
  166. 'validate type' => 'date',
  167. ),
  168. 'filter' => array(
  169. 'handler' => 'views_handler_filter_date',
  170. ),
  171. 'sort' => array(
  172. 'handler' => 'views_handler_sort_date',
  173. ),
  174. );
  175. $data['entity_translation']['translate_link'] = array(
  176. 'title' => t('Translate link'),
  177. 'help' => t('Link to translation overview page.'),
  178. 'field' => array(
  179. 'handler' => 'entity_translation_handler_field_translate_link',
  180. ),
  181. );
  182. $data['entity_translation']['translation_exists'] = array(
  183. 'title' => t('Translation exists'),
  184. 'help' => t('Determines if a translation exists for a particular translation.'),
  185. 'filter' => array(
  186. 'handler' => 'entity_translation_handler_filter_translation_exists',
  187. ),
  188. );
  189. $data['entity_translation']['label'] = array(
  190. 'title' => t('Label'),
  191. 'help' => t('The label of the entity.'),
  192. 'field' => array(
  193. 'handler' => 'entity_translation_handler_field_label',
  194. ),
  195. );
  196. return $data;
  197. }
  198. /**
  199. * Implements hook_views_data_alter().
  200. *
  201. * Add entity translation information to the various entity tables.
  202. */
  203. function entity_translation_views_data_alter(&$data) {
  204. foreach (entity_get_info() as $type => $info) {
  205. if ($info['fieldable'] && isset($data[$info['base table']])) {
  206. $table = &$data[$info['base table']];
  207. $table['entity_translations'] = array(
  208. 'title' => t('Entity translation: translations'),
  209. 'help' => t('Translation information.'),
  210. 'relationship' => array(
  211. 'label' => t('Translations'),
  212. 'base' => 'entity_translation',
  213. 'base field' => 'entity_id',
  214. 'relationship field' => $info['entity keys']['id'],
  215. 'handler' => 'entity_translation_handler_relationship',
  216. // We add our information here in the definition, so we can copy it
  217. // later.
  218. 'left_table' => $info['base table'],
  219. 'left_field' => $info['entity keys']['id'],
  220. 'entity type' => $type,
  221. ),
  222. );
  223. }
  224. }
  225. // Expose all translatable fields, using a handler based off Views' default
  226. // field handler, that allows users to select the language to display the
  227. // field in.
  228. foreach (field_info_fields() as $field) {
  229. if ($field['translatable'] && $field['storage']['type'] == 'field_sql_storage') {
  230. // Set defaults and just change the handler, title, group, and help.
  231. $defaults = field_views_field_default_views_data($field);
  232. foreach ($defaults as $table_name => $table_data) {
  233. if (isset($data[$table_name][$field['field_name']])) {
  234. $field_title = $table_data[$field['field_name']]['title'];
  235. $table_data[$field['field_name']]['title'] = t('!title: translated', array('!title' => $field_title));
  236. $table_data[$field['field_name']]['group'] = t('Entity translation');
  237. $table_data[$field['field_name']]['help'] .= ' ' . t('Show the field !title translated into a specified language', array('!title' => $field_title));
  238. $table_data[$field['field_name']]['field']['handler'] = 'entity_translation_handler_field_field';
  239. $data[$table_name][$field['field_name'] . '_et'] = $table_data[$field['field_name']];
  240. }
  241. }
  242. }
  243. }
  244. }