ercore-8.x-1.20/modules/ercore_core/src/Form/ERCoreAdmin.php

modules/ercore_core/src/Form/ERCoreAdmin.php
<?php

namespace Drupal\ercore_core\Form;

/**
 * @file
 * Contains Drupal\ercore\Form\ERCoreAdmin.
 */

use Drupal\Core\Form\ConfigFormBase;
use Drupal\ercore\ErcoreStartDate;
use Drupal\Core\Form\FormStateInterface;

/**
 * Class ERCoreAdmin.
 *
 * Defines ERCore admin page.
 *
 * @package Drupal\ercore\Form
 */
class ERCoreAdmin extends ConfigFormBase {

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'ercore.settings',
    ];
  }

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

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('ercore.settings');
    $form['ercore_epscor_start'] = [
      '#title' => t('Grant Start Date'),
      '#description' => $this->t('The start date for form processing and exports.'),
      '#type' => 'date',
      '#default_value' => $config->get('ercore_epscor_start'),
    ];
    $form['ercore_epscor_number'] = [
      '#type' => 'textfield',
      '#title' => $this->t('EPSCoR Grant Number'),
      '#description' => $this->t('EPSCoR or NSF Grant Number for display and exported forms.'),
      '#default_value' => $config->get('ercore_epscor_number'),
    ];
    $form['ercore_reporting_month'] = [
      '#type' => 'select',
      '#title' => $this->t('Reporting period start month'),
      '#description' => $this->t('Reporting month may differ from start month above.'),
      '#default_value' => $config->get('ercore_reporting_month'),
      '#options' => [
        '01' => 'January',
        '02' => 'February',
        '03' => 'March',
        '04' => 'April',
        '05' => 'May',
        '06' => 'June',
        '07' => 'July',
        '08' => 'August',
        '09' => 'September',
        '10' => 'October',
        '11' => 'November',
        '12' => 'December',
      ],
    ];
    $form['ercore_grant_type'] = [
      '#type' => 'select',
      '#title' => $this->t('Grant Type'),
      '#description' => $this->t('Grant type defines time period involved.'),
      '#default_value' => $config->get('ercore_grant_type'),
      '#options' => [
        '5' => 'Tier One',
        '3' => 'Tier Two',
      ],
    ];
    $form['ercore_grant_extension'] = [
      '#type' => 'select',
      '#title' => $this->t('Grant Extension'),
      '#description' => $this->t('Adjusts grant end date by extension.'),
      '#default_value' => $config->get('ercore_grant_extension'),
      '#options' => [
        '0' => 'No Extension',
        '6' => 'Six month extension',
        '12' => 'One year extension',
      ],
    ];
    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    parent::submitForm($form, $form_state);
    $end = explode('-', $form_state->getValue('ercore_epscor_start'));
    $end[0] += $form_state->getValue('ercore_grant_type');
    $end[1] += $form_state->getValue('ercore_grant_extension');
    if ($end[1] >= 13) {
      $end[0] += 1;
      $end[1] = $end[1] - 12;
    }
    $end[1] = str_pad($end[1], 2, '0', STR_PAD_LEFT);
    $end = implode('-', $end);
    $this->config('ercore.settings')
      ->set('ercore_epscor_number', $form_state->getValue('ercore_epscor_number'))
      ->set('ercore_epscor_start', $form_state->getValue('ercore_epscor_start'))
      ->set('ercore_epscor_end', $end)
      ->set('ercore_grant_type', $form_state->getValue('ercore_grant_type'))
      ->set('ercore_grant_extension', $form_state->getValue('ercore_grant_extension'))
      ->set('ercore_reporting_month', $form_state->getValue('ercore_reporting_month'))
      ->save();
    self::resetFilters();

    // retrieve views info
    $config = $this->config('ercore.settings');
    // $test = $this->config('views.view.ercore_summary_of_proposals_and_grants_totals');
    $min1 = \Drupal::config('views.view.ercore_summary_of_proposals_and_grants_totals')->get('display.default.display_options.filters.field_ercore_pp_proposal_submit_value.group_info.group_items.1.value.min');
    $config_Factory = \Drupal::configFactory()->getEditable('views.view.ercore_summary_of_proposals_and_grants_totals');
  
    // get epscor start date string
    $epscor_start_date_str = $config->get('ercore_epscor_start');
    // get reporting month string
    $rep_month = $config->get('ercore_reporting_month');
    // parse epscore start date string 
    $epscor_start_date = date_parse($epscor_start_date_str);
    
    $separator = "-";
    // assign date components to variables 
    $year = strval($epscor_start_date['year']);
    $month = strval($epscor_start_date['month']);
    $day = strval($epscor_start_date['day']);

    // create new string for reporting date 
    $date_str = $year.$separator.$rep_month.$separator.$day;
    // convert reporting date string to date object
    $date_strtotime = strtotime($date_str);


    function compareDates($report_date, $epscor_start){
      $separator = "-";
      $r_parsed = date_parse($report_date);
      // assign date components to variables 
      $r_year = strval($r_parsed['year']);
      $r_month = strval($r_parsed['month']);
      $r_day = '01';
      $r_date = $r_year.$separator.$r_month.$separator.$r_day;
      if($report_date >= $epscor_start){
        // dpm('this is very hank');
          return date('Y-m-d',strtotime($r_date));
      }
      else{
        // dpm('this is unhank');
        //add a year
        return date('Y-m-d',strtotime($r_date. ' + 1 years'));
      }
    }

    $newDate = compareDates($date_str, $epscor_start_date_str);
    
    $views = ['views.view.ercore_summary_of_proposals_and_grants_totals', 'views.view.publication_totals'];
    $group_fields_proposal = ['field_ercore_pp_proposal_submit_value','field_ercore_pp_award_start_value'];
    $group_fields_pubs = ['field_ercore_pb_submit_date_value', 'field_ercore_pb_date_value'];

    foreach($views as $view){
      if($view === 'views.view.ercore_summary_of_proposals_and_grants_totals'){
        $group_fields = $group_fields_proposal;
      }
      else{
        $group_fields = $group_fields_pubs;
      }
      foreach($group_fields as $key){
        for ($x = 0; $x <= 5; $x++) {
  
          $y=$x+1;
          $add_year_str_x = '+'.$x.' years';
          $add_year_str_y = '+'.$y.' years';
          $sub_day_str = '-1 days' ;
          $min = strtotime($newDate. $add_year_str_x);
          $min_str = date('Y-m-d',$min);
          $max = date('Y-m-d', strtotime($newDate. $add_year_str_y));
          $max_str = date('Y-m-d', strtotime($max. $sub_day_str));
          
          if($x !== 5){
            \Drupal::configFactory()->getEditable($view)
              ->set('display.default.display_options.filters.'.$key.'.group_info.group_items.'.$y.'.value.min', $min_str)
              ->set('display.default.display_options.filters.'.$key.'.group_info.group_items.'.$y.'.value.max', $max_str)
              ->save();
          }
          else {
            \Drupal::configFactory()->getEditable($view)
              ->set('display.default.display_options.filters.'.$key.'.group_info.group_items.'.$y.'.value.value', $min_str)
              ->save();
          }
        }
      }
    }

    /* sets values for undergrad, grad, and doctoral graduation views */

    $grad_views = ['views.view.undergraduate_graduation_dates', 'views.view.graduate_graduation_dates', 'views.view.doctorate_graduation_dates'];
    // get epscor start date string
    $epscor_start_date_str = $config->get('ercore_epscor_start');
    // get reporting month string
    $reporting_start_month = $config->get('ercore_reporting_month');
    // parse epscore start date string 
    $epscor_start_date = date_parse($epscor_start_date_str);

    $separator = "-";
    // assign date components to variables 
    $year = strval($epscor_start_date['year']);
    $month = strval($epscor_start_date['month']);
    $day = strval($epscor_start_date['day']);

    foreach($grad_views as $view){
      if ($view == 'views.view.undergraduate_graduation_dates'){
        $class='under';
      }
      elseif($view == 'views.view.graduate_graduation_dates'){
        $class='master';
      }
      else{
        $class='doc';
      }

      // ! data_export_1 does not have date filter for all three views
      for ($x = 1; $x <= 6; $x++) {

        $add_years_min = $x-1;
        $add_years_max = $x;
        $date_min = $epscor_start_date_str;
        $date_max = date('Y-m-d',strtotime($year.$separator.$reporting_start_month.$separator.'1'.' + '.$add_years_max.' years'.' -1 days'));
        if($x != 1){
          $date_min = date('Y-m-d',strtotime($year.$separator.$reporting_start_month.$separator.'1'.' + '.$add_years_min.' years'));
        }
        // exports -------------------------------------------------------------------------------------------------------------------------
        if($x != 6){
          \Drupal::configFactory()->getEditable($view)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.min', $date_min)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.max', $date_max)
            ->save();

          \Drupal::configFactory()->getEditable($view)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.min', $date_min)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.max', $date_max)
            ->save();
        }
        if($x == 6 && $class != 'under'){

          \Drupal::configFactory()->getEditable($view)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.min', $epscor_start_date_str)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.max', $date_max)
            ->save();

          \Drupal::configFactory()->getEditable($view)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.min', $epscor_start_date_str)
            ->set('display.data_export_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.max', $date_max)
            ->save();
        }
        // exports -------------------------------------------------------------------------------------------------------------------------
        
        // pages ---------------------------------------------------------------------------------------------------------------------------
        
        $overall_min = $epscor_start_date_str;
        $overall_max = date('Y-m-d',strtotime($year.$separator.$reporting_start_month.$separator.'1'.' + 5 years'.' -1 days'));
        $page = $x + 2; 
        
        if($page != 8){

          \Drupal::configFactory()->getEditable($view)
            ->set('display.page_'.$page.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.min', $date_min)
            ->set('display.page_'.$page.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.max', $date_max)
            ->save();

          \Drupal::configFactory()->getEditable($view)
            ->set('display.page_'.$page.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.min', $date_min)
            ->set('display.page_'.$page.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.max', $date_max)
            ->save();
        }
        if($class == 'doc'){
          if($x <= 2){
            \Drupal::configFactory()->getEditable($view)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.min', $overall_min)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.max', $overall_max)
              ->save();

            \Drupal::configFactory()->getEditable($view)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.min', $overall_min)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.max', $overall_max)
              ->save();
          }
        }
        if($class == 'master'){
          if($x == 2){

            \Drupal::configFactory()->getEditable($view)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.min', $overall_min)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_ant_value.value.max', $overall_max)
              ->save();

            \Drupal::configFactory()->getEditable($view)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.min', $overall_min)
              ->set('display.page_'.$x.'.display_options.filters.field_ercore_user_'.$class.'_act_value.value.max', $overall_max)
              ->save();
          }
        }
        // pages ---------------------------------------------------------------------------------------------------------------------------
      }
    }
    
  }

  /**
   * Reset date filters to use new dates.
   */
  public function resetFilters() {
    $filter = \Drupal::service('user.private_tempstore')
      ->get('ercore_core');
    $filter->set('ercore_chosen_range', 0);
    $filter->set('ercore_filter_start', ErcoreStartDate::startString());
    $filter->set('ercore_filter_end', ErcoreStartDate::endString());
    $messenger = \Drupal::messenger();
    $messenger->addMessage('Filters have been reset after base date update.');
  }

}

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

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