You are here

function i18n_commerce_product_product_form_validate in Internationalization for commerce product 7

Validation handler for commerce_product_product_form().

1 string reference to 'i18n_commerce_product_product_form_validate'
i18n_commerce_product_form_commerce_product_ui_product_form_alter in ./i18n_commerce_product.forms.inc
Implements hook_form_FORM_ID_alter().

File

./i18n_commerce_product.forms.inc, line 97
Internationalization (i18n) module - Commerce product handling.

Code

function i18n_commerce_product_product_form_validate($form, &$form_state) {
  $form_state['commerce_product']->tproduct_id = isset($form_state['values']['tproduct_id']) ? $form_state['values']['tproduct_id'] : NULL;
  $product = $form_state['commerce_product'];

  // TODO: Resolve workflow issues pertaining to token replacement in SKUs.
  // Perform token replacement on the entered SKU.
  // $sku = commerce_product_replace_sku_tokens($form_state['values']['sku'], $product);
  // Until the above is resolved, simply use the SKU as entered with no tokens.
  $sku = $form_state['values']['sku'];

  // If invalid tokens were specified, throw an error.
  if ($sku === FALSE) {
    form_set_error('sku', t('The SKU contains invalid tokens.'));
  }
  else {

    // Ensure the proposed SKU is unique or reused only during product updates.
    $query = new EntityFieldQuery();
    $query
      ->entityCondition('entity_type', 'commerce_product')
      ->propertyCondition('sku', $sku);
    $result = $query
      ->execute();
    if (!empty($result)) {
      $product_id = key($result['commerce_product']);
      if ($product_id != $product->product_id && $product_id != $product->tproduct_id) {
        form_set_error('sku', t('This SKU is <a href="!url">already in use</a> and must be unique. Please supply another value.', array(
          '!url' => url('admin/commerce/products/' . $product_id),
        )));
      }
    }

    // Validate the SKU for invalid characters.
    if (!commerce_product_validate_sku($sku)) {
      form_set_error('sku', t('The SKU %sku contains invalid characters.', array(
        '%sku' => $sku,
      )));
    }

    // Trim leading and trailing whitespace from the SKU.
    form_set_value($form['sku'], trim($sku), $form_state);
  }

  // Notify field widgets to validate their data.
  field_attach_form_validate('commerce_product', $product, $form, $form_state);
}