You are here

class PardotScoreFormBase in Pardot Integration 8

Class PardotScoreFormBase.

@package Drupal\pardot\Form

Hierarchy

Expanded class hierarchy of PardotScoreFormBase

File

src/Form/PardotScoreFormBase.php, line 18

Namespace

Drupal\pardot\Form
View source
class PardotScoreFormBase extends EntityForm {

  /**
   * @var \Drupal\Core\Entity\Query\QueryFactory
   */
  protected $query_factory;

  /**
   * The path condition.
   *
   * @var \Drupal\system\Plugin\Condition\RequestPath
   */
  protected $path_condition;

  /**
   * Construct the PardotScoreFormBase.
   *
   * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory
   *   An entity query factory for the score entity type.
   */
  public function __construct(QueryFactory $query_factory, ExecutableManagerInterface $plugin_factory) {
    $this->query_factory = $query_factory;
    $this->path_condition = $plugin_factory
      ->createInstance('request_path');
  }

  /**
   * Factory method for PardotScoreFormBase.
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('entity.query'), $container
      ->get('plugin.manager.condition'));
  }

  /**
   * Overrides Drupal\Core\Entity\EntityFormController::form().
   *
   * Builds the entity add/edit form.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param array $form_state
   *   An associative array containing the current state of the form.
   *
   * @return array
   *   An associative array containing the score add/edit form.
   */
  public function buildForm(array $form, FormStateInterface $form_state) {

    // Get anything we need from the base class.
    $form = parent::buildForm($form, $form_state);
    $score = $this->entity;

    // Build the form.
    $form['label'] = array(
      '#type' => 'textfield',
      '#title' => $this
        ->t('Label'),
      '#maxlength' => 255,
      '#default_value' => $score
        ->label(),
      '#required' => TRUE,
    );
    $form['id'] = array(
      '#type' => 'machine_name',
      '#title' => $this
        ->t('Machine name'),
      '#default_value' => $score
        ->id(),
      '#machine_name' => array(
        'exists' => array(
          $this,
          'exists',
        ),
        'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
        'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
      ),
      '#disabled' => !$score
        ->isNew(),
    );
    $form['score_value'] = array(
      '#type' => 'number',
      '#title' => $this
        ->t('Score Value'),
      '#description' => $this
        ->t('Assign a score value for the path configured below. This score will be assigned and reported Pardot.'),
      '#default_value' => $score->score_value,
    );

    // Set the path condition.
    if (isset($score->pages)) {
      $this->path_condition
        ->setConfiguration($score->pages);
    }
    else {
      $this->path_condition
        ->setConfiguration(array());
    }

    // Build the path_condition configuration form elements.
    $form += $this->path_condition
      ->buildConfigurationForm($form, $form_state);
    unset($form['negate']);

    // Return the form.
    return $form;
  }

  /**
   * Checks for an existing Pardot Score.
   *
   * @param string|int $entity_id
   *   The entity ID.
   * @param array $element
   *   The form element.
   * @param FormStateInterface $form_state
   *   The form state.
   *
   * @return bool
   *   TRUE if this Pardot Score already exists, FALSE otherwise.
   */
  public function exists($entity_id, array $element, FormStateInterface $form_state) {

    // Use the query factory to build a new Pardot Score entity query.
    $query = $this->query_factory
      ->get('pardot_score');

    // Query the entity ID to see if its in use.
    $result = $query
      ->condition('id', $element['#field_prefix'] . $entity_id)
      ->execute();

    // We don't need to return the ID, only if it exists or not.
    return (bool) $result;
  }

  /**
   * Overrides Drupal\Core\Entity\EntityFormController::actions().
   *
   * To set the submit button text, we need to override actions().
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   An associative array containing the current state of the form.
   *
   * @return array
   *   An array of supported actions for the current entity form.
   */
  protected function actions(array $form, FormStateInterface $form_state) {

    // Get the basic actions from the base class.
    $actions = parent::actions($form, $form_state);

    // Change the submit button text.
    $actions['submit']['#value'] = $this
      ->t('Save');

    // Return the result.
    return $actions;
  }

  /**
   * Overrides Drupal\Core\Entity\EntityFormController::validate().
   *
   * @Todo: Validate pages are entered as <front> or with preceding slash.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   An associative array containing the current state of the form.
   */
  public function validate(array $form, FormStateInterface $form_state) {
    parent::validate($form, $form_state);

    // Add code here to validate your config entity's form elements.
    // Nothing to do here...yet
  }

  /**
   * {@inheritdoc}
   *
   * Converts submitted form values into plugin configuration array.
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {

    // Submit condition plugin configurations.
    $this->path_condition
      ->submitConfigurationForm($form, $form_state);
    $form_state
      ->setValue('pages', $this->path_condition
      ->getConfiguration());
    parent::submitForm($form, $form_state);
  }

  /**
   * Overrides Drupal\Core\Entity\EntityFormController::save().
   *
   * Saves the entity. This is called after submit() has built the entity from
   * the form values. Do not override submit() as save() is the preferred
   * method for entity form controllers.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   An associative array containing the current state of the form.
   */
  public function save(array $form, FormStateInterface $form_state) {
    $score = $this
      ->getEntity();

    // Drupal already populated the form values in the entity object. Each
    // form field was saved as a public variable in the entity class. PHP
    // allows Drupal to do this even if the method is not defined ahead of
    // time.
    $status = $score
      ->save();

    // Grab the URL of the new entity. We'll use it in the message.
    $url = $score
      ->urlInfo();

    // Create an edit link.
    $edit_link = $this
      ->l($this
      ->t('Edit'), $url);
    if ($status == SAVED_UPDATED) {

      // If we edited an existing entity...
      drupal_set_message($this
        ->t('Pardot Score %label has been updated.', array(
        '%label' => $score
          ->label(),
      )));
      $this
        ->logger('contact')
        ->notice('Pardot Score %label has been updated.', [
        '%label' => $score
          ->label(),
        'link' => $edit_link,
      ]);
    }
    else {

      // If we created a new entity...
      drupal_set_message($this
        ->t('Pardot Score %label has been added.', array(
        '%label' => $score
          ->label(),
      )));
      $this
        ->logger('contact')
        ->notice('Pardot Score %label has been added.', [
        '%label' => $score
          ->label(),
        'link' => $edit_link,
      ]);
    }

    // Redirect the user back to the listing route after the save operation.
    $form_state
      ->setRedirect('pardot.scores.list');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
EntityForm::$entity protected property The entity being used by this form. 7
EntityForm::$entityTypeManager protected property The entity type manager. 3
EntityForm::$moduleHandler protected property The module handler service.
EntityForm::$operation protected property The name of the current operation.
EntityForm::$privateEntityManager private property The entity manager.
EntityForm::actionsElement protected function Returns the action form element for the current entity form.
EntityForm::afterBuild public function Form element #after_build callback: Updates the entity with submitted data.
EntityForm::buildEntity public function Builds an updated entity object based upon the submitted form values. Overrides EntityFormInterface::buildEntity 2
EntityForm::copyFormValuesToEntity protected function Copies top-level form values to entity properties 7
EntityForm::form public function Gets the actual form array to be built. 30
EntityForm::getBaseFormId public function Returns a string identifying the base form. Overrides BaseFormIdInterface::getBaseFormId 5
EntityForm::getEntity public function Gets the form entity. Overrides EntityFormInterface::getEntity
EntityForm::getEntityFromRouteMatch public function Determines which entity will be used by this form from a RouteMatch object. Overrides EntityFormInterface::getEntityFromRouteMatch 1
EntityForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId 10
EntityForm::getOperation public function Gets the operation identifying the form. Overrides EntityFormInterface::getOperation
EntityForm::init protected function Initialize the form state and the entity before the first form build. 3
EntityForm::prepareEntity protected function Prepares the entity object before the form is built first. 3
EntityForm::prepareInvokeAll protected function Invokes the specified prepare hook variant.
EntityForm::processForm public function Process callback: assigns weights and hides extra fields.
EntityForm::setEntity public function Sets the form entity. Overrides EntityFormInterface::setEntity
EntityForm::setEntityManager public function Sets the entity manager for this form. Overrides EntityFormInterface::setEntityManager
EntityForm::setEntityTypeManager public function Sets the entity type manager for this form. Overrides EntityFormInterface::setEntityTypeManager
EntityForm::setModuleHandler public function Sets the module handler for this form. Overrides EntityFormInterface::setModuleHandler
EntityForm::setOperation public function Sets the operation for this form. Overrides EntityFormInterface::setOperation
EntityForm::__get public function
EntityForm::__set public function
FormBase::$configFactory protected property The config factory. 1
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
FormBase::validateForm public function Form validation handler. Overrides FormInterface::validateForm 62
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PardotScoreFormBase::$path_condition protected property The path condition.
PardotScoreFormBase::$query_factory protected property
PardotScoreFormBase::actions protected function Overrides Drupal\Core\Entity\EntityFormController::actions(). Overrides EntityForm::actions 2
PardotScoreFormBase::buildForm public function Overrides Drupal\Core\Entity\EntityFormController::form(). Overrides EntityForm::buildForm
PardotScoreFormBase::create public static function Factory method for PardotScoreFormBase. Overrides FormBase::create
PardotScoreFormBase::exists public function Checks for an existing Pardot Score.
PardotScoreFormBase::save public function Overrides Drupal\Core\Entity\EntityFormController::save(). Overrides EntityForm::save
PardotScoreFormBase::submitForm public function Converts submitted form values into plugin configuration array. Overrides EntityForm::submitForm
PardotScoreFormBase::validate public function Overrides Drupal\Core\Entity\EntityFormController::validate().
PardotScoreFormBase::__construct public function Construct the PardotScoreFormBase.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.