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.'); } }