mijn-stadsrechten-keten.inc.txt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /**
  2. * 'mijn_stadsrechten' / index.
  3. *
  4. * Gemeenten/plaatsen/provincies waarvoor de ingelogde gebruiker
  5. * redactierechten heeft (field_town_access op het gebruikersaccount).
  6. * PUUR INFORMATIEF -- dit endpoint is GEEN toegangscontrole,
  7. * stadsactiviteiten/create hieronder blijft bewust voor iedereen open.
  8. *
  9. * field_town_access mag een term op ELK van de drie niveaus van de
  10. * town-vocabulary bevatten: provincie (niveau 1), gemeente (2) of plaats (3).
  11. * De app kan een provincie- of plaats-tid niet rechtstreeks in
  12. * plaatsen_bij_gemeente stoppen (geeft dan []), daarom krijgt elk recht hier
  13. * de volledig uitgeklapte keten mee. Zelfde 'keten'-formaat als
  14. * _custom_aanm_keten() in custom.mijn_aanmeldingen.inc.
  15. *
  16. * tid/titel/parent_tid/parent_titel blijven ongewijzigd (bestaande
  17. * consumenten merken niets); nieuw zijn niveau, provincie_tid/_titel,
  18. * gemeente_tid/_titel, plaats_tid/_titel, keten en label.
  19. *
  20. * @return array
  21. * Lijst van rechten, hierarchisch gesorteerd (provincie, gemeente, plaats).
  22. */
  23. function _custom_mijn_stadsrechten_service() {
  24. global $user;
  25. if (empty($user->uid)) {
  26. return services_error('Niet ingelogd', 401);
  27. }
  28. $account = user_load($user->uid);
  29. if (empty($account->field_town_access[LANGUAGE_NONE])) {
  30. return array();
  31. }
  32. $result = array();
  33. foreach ($account->field_town_access[LANGUAGE_NONE] as $item) {
  34. if (empty($item['tid'])) {
  35. continue;
  36. }
  37. $term = taxonomy_term_load($item['tid']);
  38. if (!$term) {
  39. continue;
  40. }
  41. // Kind -> ... -> wortel; omdraaien naar provincie, gemeente, plaats.
  42. $pad = array_reverse(taxonomy_get_parents_all($term->tid));
  43. $niveau = count($pad);
  44. $provincie = isset($pad[0]) ? $pad[0] : NULL;
  45. $gemeente = isset($pad[1]) ? $pad[1] : NULL;
  46. $plaats = isset($pad[2]) ? $pad[2] : NULL;
  47. $parents = taxonomy_get_parents($term->tid);
  48. $parent = $parents ? reset($parents) : NULL;
  49. // Sommige termen heten al "X (gemeente)"; dan geen tweede toevoeging.
  50. $label = $term->name;
  51. if ($niveau === 1 && stripos($label, 'provincie') === FALSE) {
  52. $label .= ' (hele provincie)';
  53. }
  54. elseif ($niveau === 2 && stripos($label, 'gemeente') === FALSE) {
  55. $label .= ' (hele gemeente)';
  56. }
  57. $result[] = array(
  58. 'tid' => (string) $term->tid,
  59. 'titel' => $term->name,
  60. 'parent_tid' => $parent ? (string) $parent->tid : '',
  61. 'parent_titel' => $parent ? $parent->name : '',
  62. 'niveau' => $niveau,
  63. 'provincie_tid' => $provincie ? (string) $provincie->tid : '',
  64. 'provincie_titel' => $provincie ? $provincie->name : '',
  65. 'gemeente_tid' => $gemeente ? (string) $gemeente->tid : '',
  66. 'gemeente_titel' => $gemeente ? $gemeente->name : '',
  67. 'plaats_tid' => $plaats ? (string) $plaats->tid : '',
  68. 'plaats_titel' => $plaats ? $plaats->name : '',
  69. 'keten' => implode('|', array(
  70. $provincie ? (string) $provincie->tid : '',
  71. $gemeente ? (string) $gemeente->tid : '',
  72. $plaats ? (string) $plaats->tid : '',
  73. )),
  74. 'label' => $label,
  75. );
  76. }
  77. // Hierarchisch: eerst op provincienaam, dan gemeente, dan plaats.
  78. usort($result, function ($a, $b) {
  79. $c = strcasecmp($a['provincie_titel'], $b['provincie_titel']);
  80. if ($c !== 0) {
  81. return $c;
  82. }
  83. $c = strcasecmp($a['gemeente_titel'], $b['gemeente_titel']);
  84. if ($c !== 0) {
  85. return $c;
  86. }
  87. return strcasecmp($a['plaats_titel'], $b['plaats_titel']);
  88. });
  89. return $result;
  90. }