1<?php 2 3/** 4 * @file 5 * 6 * Provide views data and handlers for translation.module 7 */ 8 9/** 10 * @defgroup views_translation_module translation.module handlers 11 * 12 * @{ 13 */ 14 15/** 16 * Implementation of hook_views_data_alter(). 17 * 18 * Add translation information to the node table. 19 */ 20function translation_views_data_alter(&$data) { 21 22 // Joins 23 $data['node']['table']['join']['node'] = array( 24 'left_field' => 'tnid', 25 'field' => 'tnid', 26 ); 27 28 // Language field 29 $data['node']['language'] = array( 30 'group' => t('Node translation'), 31 'title' => t('Language'), 32 'help' => t('The language the content is in.'), 33 'field' => array( 34 'handler' => 'views_handler_field_node_language', 35 'click sortable' => TRUE, 36 ), 37 'filter' => array( 38 'handler' => 'views_handler_filter_node_language', 39 ), 40 'argument' => array( 41 'handler' => 'views_handler_argument_node_language', 42 ), 43 ); 44 45 // The translation ID (nid of the "source" translation) 46 $data['node']['tnid'] = array( 47 'group' => t('Node translation'), 48 'title' => t('Translation set node ID'), 49 'help' => t('The ID of the translation set the content belongs to.'), 50 'field' => array( 51 'handler' => 'views_handler_field_node', 52 'click sortable' => TRUE, 53 ), 54 'filter' => array( 55 'handler' => 'views_handler_filter_numeric', 56 ), 57 'argument' => array( 58 'handler' => 'views_handler_argument_node_tnid', 59 'parent' => 'views_handler_argument_numeric', // make sure parent is included 60 'name field' => 'title', // the field to display in the summary. 61 'numeric' => TRUE, 62 'validate type' => 'tnid', 63 ), 64 'sort' => array( 65 'handler' => 'views_handler_sort', 66 ), 67 'relationship' => array( 68 'title' => t('Source translation'), 69 'help' => t('The source that this content was translated from.'), 70 'base' => 'node', 71 'base field' => 'nid', 72 'handler' => 'views_handler_relationship', 73 'label' => t('Source translation'), 74 ), 75 ); 76 77 // The source translation. 78 $data['node']['translation'] = array( 79 'group' => t('Node translation'), 80 'title' => t('Translations'), 81 'help' => t('Versions of content in different languages.'), 82 'relationship' => array( 83 'title' => t('Translations'), 84 'help' => t('Versions of content in different languages.'), 85 'base' => 'node', 86 'base field' => 'tnid', 87 'relationship table' => 'node', 88 'relationship field' => 'nid', 89 'handler' => 'views_handler_relationship_translation', 90 'label' => t('Translations'), 91 ), 92 ); 93 94 // The source translation. 95 $data['node']['source_translation'] = array( 96 'group' => t('Node translation'), 97 'title' => t('Source translation'), 98 'help' => t('Nodes that are either untranslated or are the original versions of a translation set.'), 99 'filter' => array( 100 'handler' => 'views_handler_filter_node_tnid', 101 ), 102 ); 103 104 // The source translation. 105 $data['node']['child_translation'] = array( 106 'group' => t('Node translation'), 107 'title' => t('Child translation'), 108 'help' => t('Nodes that are translations of a source translation.'), 109 'filter' => array( 110 'handler' => 'views_handler_filter_node_tnid_child', 111 ), 112 ); 113 114 // Translation status 115 $data['node']['translate'] = array( 116 'group' => t('Node translation'), 117 'title' => t('Translation status'), 118 'help' => t('The translation status of the node--whether or not the translation needs to be updated.'), 119 'field' => array( 120 'handler' => 'views_handler_field_boolean', 121 'click sortable' => TRUE, 122 ), 123 'filter' => array( 124 'handler' => 'views_handler_filter_boolean_operator', 125 'label' => t('Outdated'), 126 'type' => 'yes-no', 127 ), 128 'sort' => array( 129 'handler' => 'views_handler_sort', 130 ), 131 ); 132 133 // Translate node link. 134 $data['node']['translate_node'] = array( 135 'group' => t('Node translation'), 136 'title' => t('Translate link'), 137 'help' => t('Provide a simple link to translate the node.'), 138 'field' => array( 139 'handler' => 'views_handler_field_node_link_translate', 140 ), 141 ); 142 143 144} 145 146/** 147 * Implementation of hook_views_handlers() to register all of the basic handlers 148 * views uses. 149 */ 150function translation_views_handlers() { 151 return array( 152 'info' => array( 153 'path' => drupal_get_path('module', 'views') . '/modules/translation', 154 ), 155 'handlers' => array( 156 // field handlers 157 'views_handler_field_node_language' => array( 158 'parent' => 'views_handler_field_node', 159 ), 160 'views_handler_field_node_link_translate' => array( 161 'parent' => 'views_handler_field_node_link', 162 ), 163 // argument handlers 164 'views_handler_argument_node_language' => array( 165 'parent' => 'views_handler_argument', 166 ), 167 'views_handler_argument_node_tnid' => array( 168 'parent' => 'views_handler_argument', 169 ), 170 // filters 171 'views_handler_filter_node_language' => array( 172 'parent' => 'views_handler_filter_in_operator', 173 ), 174 'views_handler_filter_node_tnid' => array( 175 'parent' => 'views_handler_filter', 176 ), 177 // relationships 178 'views_handler_relationship_translation' => array( 179 'parent' => 'views_handler_relationship', 180 ), 181 'views_handler_filter_node_tnid_child' => array( 182 'parent' => 'views_handler_filter', 183 ), 184 185 ), 186 ); 187} 188 189/** 190 * @} 191 */ 192