diff --git a/checklistapi.module b/checklistapi.module index c528156..6dcd0d3 100644 --- a/checklistapi.module +++ b/checklistapi.module @@ -53,9 +53,30 @@ function checklistapi_checklist_access($id, $operation = 'any') { */ function checklistapi_checklist_load($id) { $definition = checklistapi_get_checklist_info($id); + $definition = checklistapi_add_checklist_items($definition); + return ($definition) ? new ChecklistapiChecklist($definition) : FALSE; } +/** + * Adds the groups items to the definition. + * + * @param array $definition + * Checklist definition array. + * + * @return array + * Checklist definition array with items declaration. + */ +function checklistapi_add_checklist_items(array $definition) { + if (!empty($definition['#callback']) && is_callable($definition['#callback'])) { + foreach (Element::children($definition) as $child) { + unset($definition[$child]); + } + $definition += call_user_func($definition['#callback']); + } + return $definition; +} + /** * Determines whether the current user is in compact mode. * diff --git a/src/ChecklistapiChecklist.php b/src/ChecklistapiChecklist.php index 7d96716..fb7148a 100644 --- a/src/ChecklistapiChecklist.php +++ b/src/ChecklistapiChecklist.php @@ -248,6 +248,7 @@ class ChecklistapiChecklist { // Loop through items. foreach ($group as $item_key => $item) { $definition = checklistapi_get_checklist_info($this->id); + $definition = checklistapi_add_checklist_items($definition); if (!in_array($item_key, array_keys($definition[$group_key]))) { // This item wasn't in the checklist definition. Don't include it with // saved progress.