You are here

function checklistapi_update_8001 in Checklist API 8

Update saved progress configuration to new schema.

File

./checklistapi.install, line 14
Install, update, and uninstall functions for the Checklist API module.

Code

function checklistapi_update_8001() {
  $definitions = checklistapi_get_checklist_info();
  foreach ($definitions as $id => $definition) {
    $checklist = checklistapi_checklist_load($id);

    /**
     * Avoid trying to operate on null due to failure to load a checklist.
     * @see https://www.drupal.org/project/checklistapi/issues/3122093
     */
    if (!$checklist->config) {
      continue;
    }
    $config = $checklist->config
      ->get(ChecklistapiChecklist::PROGRESS_CONFIG_KEY);
    $config['#items'] = [];
    $groups = $checklist->items;
    foreach (Element::children($groups) as $group_key) {
      $group = $groups[$group_key];

      // Loop through items.
      foreach (Element::children($group) as $item_key) {
        if ($config[$item_key]) {
          $config['#items'][$item_key] = $config[$item_key];
        }
        unset($config[$item_key]);
      }
    }
    $checklist->config
      ->set(ChecklistapiChecklist::PROGRESS_CONFIG_KEY, $config)
      ->save();
  }
}