fortnox-8.x-1.x-dev/src/Form/ProjectForm.php

src/Form/ProjectForm.php
<?php

namespace Drupal\fortnox\Form;

use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Form\FormStateInterface;
use Drupal\fortnox\Plugin\ResourceTrait;

/**
 * Provides a form for Fortnox project resource edit or create.
 */
class ProjectForm extends ResourceFormBase {

  use ResourceTrait;

  /**
   * {@inheritdoc}
   */
  protected $fields = [
    'textfield' => [
      'Description' => TRUE,
      'ProjectLeader' => FALSE,
      'ProjectNumber' => FALSE,
    ],
    'datelist' => [
      'EndDate' => FALSE,
      'StartDate' => FALSE,
    ],
    'textarea' => [
      'Comments' => FALSE,
    ],
    'select' => [
      'Status' => FALSE,
      'ContactPerson' => FALSE,
    ],
  ];

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'project_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    // Check if we are on edit form and add default values if so.
    $parameters = $this->getRouteMatch()->getParameters()->all();
    $response = [];
    // Get resource ID and use it to get resource values.
    if (!empty($parameters['id'])) {
      $build = [];
      $id = $parameters['id'];
      $submitButtonValue = $this->t('Edit Project');
      if (!empty($parameters['param1']) && !empty($parameters['param2'])) {
        $id .= '/' . $parameters['param1'] . '/' . $parameters['param2'];
      }
      $response = $parameters['resource']->getResponse($build, $id);
    }
    else {
      $submitButtonValue = $this->t('Create Project');
    }
    // If values are found for the resource, create the fields with default
    // values.
    $values = isset($response['Project']) ? $response['Project'] : [];
    $this->createFormFields($form, $values);

    $form['Status']['#options'] = $this->getSelectListOptions('Status');
    $form['ContactPerson']['#options'] = $this->getSelectListOptions('ContactPerson');
    $form['ProjectNumber']['#access'] = FALSE;

    $form['actions'] = [
      '#type' => 'actions',
    ];
    $form['actions']['submit'] = [
      '#type' => 'submit',
      '#value' => $submitButtonValue,
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $startDate = $form_state->getValue('StartDate');
    $endDate = $form_state->getValue('EndDate');
    if ($startDate instanceof DrupalDateTime) {
      $form_state->setValue('StartDate', $startDate->format('Y-m-d'));
    }
    if ($endDate instanceof DrupalDateTime) {
      $form_state->setValue('EndDate', $endDate->format('Y-m-d'));
    }
    if ($startDate instanceof DrupalDateTime && $endDate instanceof DrupalDateTime) {
      $startDate = $startDate->format('Y-m-d');
      $endDate = $endDate->format('Y-m-d');
      $startDate = strtotime($startDate);
      $endDate = strtotime($endDate);
      if ($startDate - $endDate > 0) {
        $form_state->setError($form['StartDate'], $this->t('StartDate should be lower than EndDate.'));
      }
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc