function icon_bundle_save in Icon API 8
Same name and namespace in other branches
- 7 icon.module \icon_bundle_save()
 
Save an icon bundle in the {icon_bundle} table.
Parameters
array $bundle: The icon bundle array.
Return value
int|false If the save failed, returns FALSE. If successful, returns SAVED_NEW or SAVED_UPDATED, depending on the drupal_write_record() operation that was performed.
4 calls to icon_bundle_save()
- icon_bundle_configure_form_submit in includes/
admin.inc  - Submit callback for 'icon_bundle_configure_form'.
 - icon_bundle_disable in ./
icon.module  - Disable the icon bundle that matches {icon_bundle}.name in the database.
 - icon_bundle_enable in ./
icon.module  - Enable the icon bundle that matches {icon_bundle}.name in the database.
 - icon_provider_import_form_submit in includes/
import.inc  - Submit callback for 'icon_provider_import_form'.
 
File
- ./
icon.module, line 548  - icon.module Provides icon integration with menu items.
 
Code
function icon_bundle_save(array $bundle = array()) {
  if (empty($bundle['name'])) {
    return FALSE;
  }
  // Allow extensions to alter the bundle before it's saved.
  \Drupal::moduleHandler()
    ->alter('icon_bundle_save', $bundle);
  $primary_keys = array();
  $record = array(
    'name' => $bundle['name'],
  );
  $existing_bundle = icon_bundle_load($bundle['name']);
  if (!$existing_bundle) {
    $existing_bundle = array();
  }
  // If the existing bundle is from the database, update the record.
  if (!empty($existing_bundle['database'])) {
    $primary_keys[] = 'name';
  }
  // Determine if there are differences between an existing bundle and this one.
  $diff = icon_array_diff_recursive($existing_bundle, $bundle);
  // If the status has changed, update the status field.
  if (isset($diff['status'])) {
    $record['status'] = (int) $bundle['status'];
    // Remove status from $diff to determine if anything else needs to be saved.
    unset($diff['status']);
  }
  // If there are still differences, replace the entire {icon_bundle}.bundle
  // field with the updated bundle array.
  if (!empty($diff)) {
    $record['bundle'] = $bundle;
  }
  // Only write to the database if the record exists and needs to be saved.
  if (isset($record['status']) || isset($record['bundle'])) {
    $status = \Drupal::database()
      ->merge('icon_bundle')
      ->key(array(
      'name' => $record['name'],
    ))
      ->fields(array(
      'bundle' => $record['bundle'],
      'status' => $record['status'],
    ))
      ->execute();
    if ($status) {
      icon_clear_all_caches();
      return $status;
    }
  }
  return FALSE;
}