/** * '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; }