/**
  * Validates the data and generates the slug for the data
  * @param mixed $data The data object of the model
  * @return null
  * @throws zibo\library\validation\exception\ValidationException when the data is not valid
  */
 public function validate($data)
 {
     $slugString = $this->getSlugString($data);
     if ($slugString) {
         $slug = $baseSlug = String::safeString($slugString);
         $index = 1;
         do {
             $query = $this->createQuery();
             $query->addCondition('{slug} = %1%', $slug);
             if ($data->id) {
                 $query->addCondition('{id} <> %1%', $data->id);
             }
             if ($query->count()) {
                 $slug = $baseSlug . '-' . $index;
                 $index++;
             } else {
                 break;
             }
         } while (true);
         $data->slug = $slug;
     }
     parent::validate($data);
 }
 /**
  * Validates the provided subscriber
  * @param joppa\mailinglist\model\data\SubscriberData $data The subscriber to validate
  * @return null
  * @throws zibo\library\validation\exception\ValidationException when a validation exception occurs
  */
 public function validate($data)
 {
     try {
         parent::validate($data);
         $exception = new ValidationException();
     } catch (ValidationException $e) {
         $exception = $e;
     }
     $query = $this->createQuery(false);
     $query->addCondition('{email} = %1%', $data->email);
     if ($data->id) {
         $query->addCondition('{id} <> %1%', $data->id);
     }
     if ($query->count()) {
         $error = new ValidationError(self::TRANSLATION_ERROR_SUBSCRIBED, '%email% is already subscribed', array('email' => $data->email));
         $exception->addErrors('email', array($error));
     }
     if ($exception->hasErrors()) {
         throw $exception;
     }
 }