You are here

function uc_object_attributes_form_submit in Ubercart 7.3

Same name and namespace in other branches
  1. 5 uc_attribute/uc_attribute.module \uc_object_attributes_form_submit()
  2. 6.2 uc_attribute/uc_attribute.admin.inc \uc_object_attributes_form_submit()

Form submission handler for uc_object_attributes_form().

See also

uc_object_attributes_form()

File

uc_attribute/uc_attribute.admin.inc, line 746
Attribute administration menu items.

Code

function uc_object_attributes_form_submit($form, &$form_state) {
  if ($form_state['values']['type'] == 'product') {
    $attr_table = 'uc_product_attributes';
    $opt_table = 'uc_product_options';
    $id = 'nid';
  }
  elseif ($form_state['values']['type'] == 'class') {
    $attr_table = 'uc_class_attributes';
    $opt_table = 'uc_class_attribute_options';
    $id = 'pcid';
  }
  if ($form_state['values']['view'] == 'overview' && is_array($form_state['values']['attributes'])) {
    $changed = FALSE;
    foreach ($form_state['values']['attributes'] as $aid => $attribute) {
      if ($attribute['remove']) {
        $remove_aids[] = $aid;
      }
      else {
        $attribute['aid'] = $aid;
        $attribute[$id] = $form_state['values']['id'];
        drupal_write_record($attr_table, $attribute, array(
          'aid',
          $id,
        ));
        $changed = TRUE;
      }
    }
    if (isset($remove_aids)) {
      $id_value = $form_state['values']['id'];
      $select = db_select('uc_attribute_options', 'ao')
        ->fields('ao', array(
        'oid',
      ))
        ->condition('ao.aid', $remove_aids, 'IN');
      db_delete($opt_table)
        ->condition('oid', $select, 'IN')
        ->condition($id, $id_value)
        ->execute();
      db_delete($attr_table)
        ->condition($id, $id_value)
        ->condition('aid', $remove_aids, 'IN')
        ->execute();
      if ($form_state['values']['type'] == 'product') {
        db_delete('uc_product_adjustments')
          ->condition('nid', $id_value)
          ->execute();
      }
      drupal_set_message(format_plural(count($remove_aids), '1 attribute has been removed.', '@count attributes have been removed.'));
    }
    if ($changed) {
      drupal_set_message(t('The changes have been saved.'));
    }
  }
  elseif ($form_state['values']['view'] == 'add') {
    foreach (array_filter($form_state['values']['add_attributes']) as $aid) {

      // Enable all options for added attributes.
      $attribute = uc_attribute_load($aid);
      $oid = 0;
      if (isset($attribute->options)) {
        foreach ($attribute->options as $option) {
          $option->{$id} = $form_state['values']['id'];
          drupal_write_record($opt_table, $option);
          $option->aid = $aid;
        }

        // Make the first option (if any) the default.
        if ($option = reset($attribute->options)) {
          $oid = $option->oid;
        }
      }
      $select = db_select('uc_attributes', 'a')
        ->condition('aid', $aid);
      $select
        ->addExpression(':id', $id, array(
        ':id' => $form_state['values']['id'],
      ));
      $select
        ->addField('a', 'aid');
      $select
        ->addField('a', 'label');
      $select
        ->addField('a', 'ordering');
      $select
        ->addExpression(':oid', 'default_option', array(
        ':oid' => $oid,
      ));
      $select
        ->addField('a', 'required');
      $select
        ->addField('a', 'display');
      db_insert($attr_table)
        ->from($select)
        ->execute();
    }
    $num = count(array_filter($form_state['values']['add_attributes']));
    if ($num > 0) {
      if ($form_state['values']['type'] == 'product') {
        db_delete('uc_product_adjustments')
          ->condition('nid', $form_state['values']['id'])
          ->execute();
      }
      drupal_set_message(format_plural($num, '1 attribute has been added.', '@count attributes have been added.'));
    }
  }
  if ($form_state['values']['type'] == 'product') {
    if (module_exists('entitycache')) {
      cache_clear_all($form_state['values']['id'], 'cache_entity_node');
    }
    $form_state['redirect'] = 'node/' . $form_state['values']['id'] . '/edit/attributes';
  }
  else {
    $form_state['redirect'] = 'admin/store/products/classes/' . $form_state['values']['id'] . '/attributes';
  }
}