tmgmt_node_handler_field_translation_language_status.inc 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Field handler to display the status of all languages.
  4. *
  5. * @ingroup views_field_handlers
  6. */
  7. class tmgmt_node_handler_field_translation_language_status extends views_handler_field {
  8. /**
  9. * @var views_plugin_query_default
  10. */
  11. var $query;
  12. /**
  13. * @var array
  14. */
  15. public $language_items;
  16. /**
  17. * Array of active job items.
  18. *
  19. * @var array
  20. */
  21. public $active_job_items = array();
  22. function init(&$view, &$options) {
  23. parent::init($view, $options);
  24. $this->view->init_style();
  25. $this->additional_fields['nid'] = 'nid';
  26. /**
  27. * Dynamically add new fields so they are used
  28. */
  29. $languages = language_list('language');
  30. foreach ($languages as $langcode => $lang_info) {
  31. $handler = views_get_handler($this->table, $this->field . '_single', 'field');
  32. if ($handler) {
  33. $id = $options['id'] . '_single_' . $langcode;
  34. $this->view->display_handler->handlers['field'][$id] = $handler;
  35. $info = array(
  36. 'id' => $id,
  37. 'table' => $this->table,
  38. 'field' => $this->field . '_single',
  39. 'label' => $lang_info->name,
  40. );
  41. $handler->langcode = $langcode;
  42. $handler->main_field = $options['id'];
  43. $handler->init($this->view, $info);
  44. $this->language_handlers[$langcode] = $handler;
  45. }
  46. }
  47. }
  48. function pre_render(&$values) {
  49. $nids = array();
  50. foreach ($values as $value) {
  51. $tnid = $this->get_value($value);
  52. $tnid = !empty($tnid) ? $tnid : $this->get_value($value, 'nid');
  53. $this->active_job_items[$tnid] = tmgmt_job_item_load_latest('node', 'node', $tnid, $value->node_language);
  54. $nids[] = $tnid;
  55. }
  56. if ($nodes = node_load_multiple($nids)) {
  57. $result = db_select('node', 'n')
  58. ->fields('n', array('tnid', 'language', 'translate'))
  59. ->condition('tnid', $nids)
  60. ->execute()
  61. ->fetchAll();
  62. $this->language_items = array();
  63. foreach ($result as $tnode) {
  64. // The translate flag is set if the translation node is outdated, revert
  65. // to have FALSE for outdated translations.
  66. $this->language_items[$tnode->tnid][$tnode->language] = !$tnode->translate;
  67. }
  68. }
  69. }
  70. }