function uc_object_attributes_form_submit in Ubercart 7.3
Same name and namespace in other branches
- 5 uc_attribute/uc_attribute.module \uc_object_attributes_form_submit()
- 6.2 uc_attribute/uc_attribute.admin.inc \uc_object_attributes_form_submit()
Form submission handler for uc_object_attributes_form().
See also
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';
}
}