| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /**
- * 'mijn_stadsrechten' / index.
- *
- * Gemeenten/plaatsen/provincies waarvoor de ingelogde gebruiker
- * redactierechten heeft (field_town_access op het gebruikersaccount).
- * PUUR INFORMATIEF -- dit endpoint is GEEN toegangscontrole,
- * stadsactiviteiten/create hieronder blijft bewust voor iedereen open.
- *
- * field_town_access mag een term op ELK van de drie niveaus van de
- * town-vocabulary bevatten: provincie (niveau 1), gemeente (2) of plaats (3).
- * De app kan een provincie- of plaats-tid niet rechtstreeks in
- * plaatsen_bij_gemeente stoppen (geeft dan []), daarom krijgt elk recht hier
- * de volledig uitgeklapte keten mee. Zelfde 'keten'-formaat als
- * _custom_aanm_keten() in custom.mijn_aanmeldingen.inc.
- *
- * tid/titel/parent_tid/parent_titel blijven ongewijzigd (bestaande
- * consumenten merken niets); nieuw zijn niveau, provincie_tid/_titel,
- * gemeente_tid/_titel, plaats_tid/_titel, keten en label.
- *
- * @return array
- * Lijst van rechten, hierarchisch gesorteerd (provincie, gemeente, plaats).
- */
- function _custom_mijn_stadsrechten_service() {
- global $user;
- if (empty($user->uid)) {
- return services_error('Niet ingelogd', 401);
- }
- $account = user_load($user->uid);
- if (empty($account->field_town_access[LANGUAGE_NONE])) {
- return array();
- }
- $result = array();
- foreach ($account->field_town_access[LANGUAGE_NONE] as $item) {
- if (empty($item['tid'])) {
- continue;
- }
- $term = taxonomy_term_load($item['tid']);
- if (!$term) {
- continue;
- }
- // Kind -> ... -> wortel; omdraaien naar provincie, gemeente, plaats.
- $pad = array_reverse(taxonomy_get_parents_all($term->tid));
- $niveau = count($pad);
- $provincie = isset($pad[0]) ? $pad[0] : NULL;
- $gemeente = isset($pad[1]) ? $pad[1] : NULL;
- $plaats = isset($pad[2]) ? $pad[2] : NULL;
- $parents = taxonomy_get_parents($term->tid);
- $parent = $parents ? reset($parents) : NULL;
- // Sommige termen heten al "X (gemeente)"; dan geen tweede toevoeging.
- $label = $term->name;
- if ($niveau === 1 && stripos($label, 'provincie') === FALSE) {
- $label .= ' (hele provincie)';
- }
- elseif ($niveau === 2 && stripos($label, 'gemeente') === FALSE) {
- $label .= ' (hele gemeente)';
- }
- $result[] = array(
- 'tid' => (string) $term->tid,
- 'titel' => $term->name,
- 'parent_tid' => $parent ? (string) $parent->tid : '',
- 'parent_titel' => $parent ? $parent->name : '',
- 'niveau' => $niveau,
- 'provincie_tid' => $provincie ? (string) $provincie->tid : '',
- 'provincie_titel' => $provincie ? $provincie->name : '',
- 'gemeente_tid' => $gemeente ? (string) $gemeente->tid : '',
- 'gemeente_titel' => $gemeente ? $gemeente->name : '',
- 'plaats_tid' => $plaats ? (string) $plaats->tid : '',
- 'plaats_titel' => $plaats ? $plaats->name : '',
- 'keten' => implode('|', array(
- $provincie ? (string) $provincie->tid : '',
- $gemeente ? (string) $gemeente->tid : '',
- $plaats ? (string) $plaats->tid : '',
- )),
- 'label' => $label,
- );
- }
- // Hierarchisch: eerst op provincienaam, dan gemeente, dan plaats.
- usort($result, function ($a, $b) {
- $c = strcasecmp($a['provincie_titel'], $b['provincie_titel']);
- if ($c !== 0) {
- return $c;
- }
- $c = strcasecmp($a['gemeente_titel'], $b['gemeente_titel']);
- if ($c !== 0) {
- return $c;
- }
- return strcasecmp($a['plaats_titel'], $b['plaats_titel']);
- });
- return $result;
- }
|