You are here

function styles_style_save_preset in Styles 7.2

Save a style/preset instance.

@TODO: Throw an error instead?

Parameters

string $field_type: The field type of the style/preset to save.

string $container_name: The container.

string $style_name: The name of the style to save to.

string $preset_name: The name of the preset.

boolean $delete_only: If TRUE, then we delete only, rather than saving.

Return value

boolean Return TRUE, or FALSE if the save was not successful.

1 call to styles_style_save_preset()
styles_ui_style_edit_form_submit in contrib/styles_ui/styles_ui.admin.inc
Submission handler for the add style form.

File

./styles.module, line 572
Bundles similar display formatters together.

Code

function styles_style_save_preset($field_type, $container_name, $style_name, $preset_name, $delete_only = FALSE) {
  $query = db_select('styles_presets', 'p');
  $query
    ->addField('p', 'pid');
  $query
    ->condition('p.name', $preset_name);
  $query
    ->condition('p.field_type', $field_type);
  $query
    ->condition('p.container_name', $container_name);
  $result = $query
    ->execute();
  foreach ($result as $preset) {
    $preset = (array) $preset;
  }
  if (empty($preset)) {
    $preset = array(
      'name' => $preset_name,
      'field_type' => $field_type,
      'container_name' => $container_name,
    );
    drupal_write_record('styles_presets', $preset);
  }
  $styles = styles_default_styles($field_type);
  if (!isset($styles['styles'][$style_name])) {
    return FALSE;
  }
  else {
    $style = $styles['styles'][$style_name];
  }
  if (!isset($style['sid'])) {
    return FALSE;
  }

  // Delete old style/preset instances for this container.
  // Unfortunately, we can't use joins with DeleteQuery. See following comment.
  db_query("DELETE FROM {styles_preset_instances} WHERE {styles_preset_instances}.sid = :sid AND EXISTS (SELECT * FROM {styles} s, {styles_presets} p WHERE s.sid = {styles_preset_instances}.sid AND p.pid = {styles_preset_instances}.pid AND s.field_type = p.field_type AND p.container_name = :container_name);", array(
    ':sid' => $style['sid'],
    ':container_name' => $container_name,
  ));

  // @TODO: See if there's a way to implement something like the following:
  //   db_delete('styles_preset_instances')
  //     ->join('styles', 's')
  //     ->join('styles_presets', 'p')
  //     ->condition('s.sid', 'styles_preset_instances.sid')
  //     ->condition('styles_preset_instances.pid', 'p.pid')
  //     ->condition('s.field_type', 'p.field_type')
  //     ->condition('styles_preset_instances.sid', $style['sid'])
  //     ->condition('p.container_name', $container_name)
  //     ->execute();
  // Write the revised style for an update, unless we're only deleting the old.
  if (!$delete_only) {
    $record = array(
      'sid' => $style['sid'],
      'pid' => $preset['pid'],
    );
    drupal_write_record('styles_preset_instances', $record);
  }

  // Let other modules update as necessary on save.
  module_invoke_all('styles_preset_save', $field_type, $container_name, $style_name, $preset_name, $delete_only);

  // Clear all caches and flush.
  styles_style_flush($style);
  return TRUE;
}