Added possibility to change the main product reference

This commit is contained in:
Julien Chanséaume
2014-07-21 15:01:49 +02:00
committed by Julien Chanseaume
parent f37625e5cf
commit eaad1afdff
6 changed files with 31 additions and 14 deletions

View File

@@ -92,7 +92,7 @@ class Product extends BaseAction implements EventSubscriberInterface
$product $product
->setDispatcher($event->getDispatcher()) ->setDispatcher($event->getDispatcher())
->setRef($event->getRef())
->setLocale($event->getLocale()) ->setLocale($event->getLocale())
->setTitle($event->getTitle()) ->setTitle($event->getTitle())
->setDescription($event->getDescription()) ->setDescription($event->getDescription())

View File

@@ -158,6 +158,7 @@ class ProductController extends AbstractSeoCrudController
$changeEvent $changeEvent
->setLocale($formData['locale']) ->setLocale($formData['locale'])
->setRef($formData['ref'])
->setTitle($formData['title']) ->setTitle($formData['title'])
->setChapo($formData['chapo']) ->setChapo($formData['chapo'])
->setDescription($formData['description']) ->setDescription($formData['description'])

View File

@@ -218,13 +218,13 @@ abstract class BaseController extends ContainerAware
if ($form->get("error_message")->getData() != null) { if ($form->get("error_message")->getData() != null) {
$errorMessage = $form->get("error_message")->getData(); $errorMessage = $form->get("error_message")->getData();
} else { } else {
$errorMessage = sprintf("Missing or invalid data: %s", $this->getErrorMessages($form)); $errorMessage = sprintf($this->getTranslator()->trans("Missing or invalid data: %s"), $this->getErrorMessages($form));
} }
throw new FormValidationException($errorMessage); throw new FormValidationException($errorMessage);
} }
} else { } else {
throw new FormValidationException(sprintf("Wrong form method, %s expected.", $expectedMethod)); throw new FormValidationException(sprintf($this->getTranslator()->trans("Wrong form method, %s expected."), $expectedMethod));
} }
} }

View File

@@ -22,17 +22,15 @@ class ProductCreationForm extends BaseForm
{ {
protected function buildForm($change_mode = false) protected function buildForm($change_mode = false)
{ {
$ref_constraints = array(new NotBlank());
if (! $change_mode) {
$ref_constraints[] = new Callback(array(
"methods" => array(array($this, "checkDuplicateRef"))
));
}
$this->formBuilder $this->formBuilder
->add("ref", "text", array( ->add("ref", "text", array(
"constraints" => $ref_constraints, "constraints" => array(
new NotBlank(),
new Callback(array(
"methods" => array(array($this, "checkDuplicateRef"))
))
),
"label" => Translator::getInstance()->trans('Product reference *'), "label" => Translator::getInstance()->trans('Product reference *'),
"label_attr" => array("for" => "ref") "label_attr" => array("for" => "ref")
)) ))

View File

@@ -12,9 +12,12 @@
namespace Thelia\Form; namespace Thelia\Form;
use Propel\Runtime\ActiveQuery\Criteria;
use Symfony\Component\Validator\Constraints\GreaterThan; use Symfony\Component\Validator\Constraints\GreaterThan;
use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\ExecutionContextInterface;
use Thelia\Core\Translation\Translator; use Thelia\Core\Translation\Translator;
use Thelia\Model\ProductQuery;
class ProductModificationForm extends ProductCreationForm class ProductModificationForm extends ProductCreationForm
{ {
@@ -49,6 +52,23 @@ class ProductModificationForm extends ProductCreationForm
$this->addStandardDescFields(array('title', 'locale')); $this->addStandardDescFields(array('title', 'locale'));
} }
public function checkDuplicateRef($value, ExecutionContextInterface $context)
{
$data = $context->getRoot()->getData();
$count = ProductQuery::create()
->filterById($data['id'], Criteria::NOT_EQUAL)
->filterByRef($value)->count();
if ($count > 0) {
$context->addViolation(
Translator::getInstance()->trans(
"A product with reference %ref already exists. Please choose another reference.",
array('%ref' => $value)
));
}
}
public function getName() public function getName()
{ {
return "thelia_product_modification"; return "thelia_product_modification";

View File

@@ -40,9 +40,7 @@
{$label} : {$label} :
</label> </label>
<div class="control-input"> <div class="control-input">
{* If ref's 'value is not empty the field is disable and the value is sent with an hidden field *} <input type="text" id="{$label_attr.for}" name="{$name}" class="form-control" value="{$value}"{if $required} aria-required="true" required{/if}>
<input type="text" id="{$label_attr.for}" {if $value}name="{$name}_disabled" disabled{else}name="{$name}"{/if} class="form-control" value="{$value}"{if $required} aria-required="true" required{/if}>
{if $value}<input type="hidden" name="{$name}" value="{$value}">{/if}
</div> </div>
</div> </div>
{/form_field} {/form_field}