Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Drupal\some_module;
  4.  
  5. use Drupal\Core\Entity\EntityTypeManagerInterface;
  6. use Drupal\node\NodeInterface;
  7.  
  8. /**
  9. * Class SomeOrgJobManger.
  10. */
  11. class SomeOrgJobManger {
  12.  
  13. /**
  14. * The node storage service.
  15. *
  16. * @var \Drupal\Core\Entity\EntityStorageInterface
  17. */
  18. protected $nodeStorage;
  19.  
  20. /**
  21. * A node entity query object.
  22. *
  23. * @var \Drupal\Core\Entity\Query\QueryAggregateInterface
  24. */
  25. protected $nodeAggregateQuery;
  26.  
  27. /**
  28. * SomeOrgJobManger constructor.
  29. *
  30. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
  31. * The entity storage interface.
  32. */
  33. public function __construct(EntityTypeManagerInterface $entity_type_manager) {
  34. $this->nodeStorage = $entity_type_manager->getStorage('node');
  35. $this->nodeAggregateQuery = $this->nodeStorage->getAggregateQuery();
  36. }
  37.  
  38. /**
  39. *
  40. */
  41. public function getStatesWithAvailableJobs() {
  42. $result = [];
  43.  
  44. $job_results = $this->nodeAggregateQuery
  45. ->aggregate('nid', 'MIN')
  46. ->groupBy('field_country_region')
  47. ->condition('status', NodeInterface::PUBLISHED)
  48. ->condition('type', 'job_posting')
  49. ->execute();
  50.  
  51. foreach ($job_results as $job_info) {
  52. if (!empty($job_info['field_country_region_target_id'])) {
  53. $region_node = $this->nodeStorage->load($job_info['field_country_region_target_id']);
  54. $state_abbrev = $region_node->field_state_province_abbr->value;
  55. if (!empty($state_abbrev)) {
  56. $result[$state_abbrev] = $region_node->label();
  57. }
  58. }
  59. }
  60.  
  61. // TODO: Remove the following proof of concept code.
  62. $nodeQuery = $this->nodeStorage->getQuery();
  63. $test_states = [];
  64. $test_result = $nodeQuery
  65. ->condition('type', 'job_posting')
  66. ->condition('status', NodeInterface::PUBLISHED)
  67. ->execute();
  68. foreach ($test_result as $nid) {
  69. $test_job_node = $this->nodeStorage->load($nid);
  70. if (!empty($test_job_node) && isset($test_job_node->field_country_region)) {
  71. $test_region = $test_job_node->field_country_region->entity;
  72. if (isset($test_region->field_state_province_abbr)) {
  73. $state_abbrev = $test_region->field_state_province_abbr->value;
  74. if (!empty($state_abbrev)) {
  75. $test_states[$state_abbrev] = $test_region->label();
  76. }
  77. }
  78. }
  79. }
  80. $diff = array_diff($result, $test_states);
  81. if (!empty($diff)) {
  82. drupal_set_message('SomeOrgJobManger::getStatesWithAvailableJobs is incorrect.');
  83. }
  84. // TODO: End remove.
  85.  
  86. return $result;
  87. }
  88.  
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement