ercore-8.x-1.20/modules/ercore_core/src/Form/ERCoreAccomplishments.php
modules/ercore_core/src/Form/ERCoreAccomplishments.php
<?php
namespace Drupal\ercore_core\Form;
/**
* @file
* Contains Drupal\ercore\Form\ERCoreAccomplishments.
*/
use Drupal\ercore\ErcoreStartDate;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\ercore_core\ErcoreCollaborationBuild;
use Drupal\ercore_core\ErcoreEngagementBuild;
use Drupal\ercore_core\ErcoreOutputs;
use Drupal\ercore_core\ErcoreParticipantBuild;
use Drupal\Core\Entity;
/**
* Class ERCoreAccomplishments.
*
* Defines ERCore Accomplishments.
*
* @package Drupal\ercore\Form
*/
class ERCoreAccomplishments extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'ERCoreAccomplishments';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$institutions = self::getInstitutions();
$other = ErcoreOutputs::getData();
$this->temp = \Drupal::service('user.private_tempstore')
->get('ercore_core');
if ($this->temp->get('ercore_filter_start')) {
$filterStart = $this->temp->get('ercore_filter_start');
}
else {
$filterStart = ErcoreStartDate::startString();
}
if ($this->temp->get('ercore_filter_end')) {
$filterEnd = $this->temp->get('ercore_filter_end');
}
else {
$filterEnd = ErcoreStartDate::endString();
}
$url = Url::fromRoute('ercore_core.accomplishments_export');
$link = Link::fromTextAndUrl('Download EPSCoR Reporting Core Tables.', $url);
$form['#attached']['library'][] = 'ercore_core/ercore-core-exports.library';
$form['date_filter'] = \Drupal::formBuilder()->getForm('Drupal\ercore_core\Form\ERCoreDateFilter');
$form['data'] = [
'#theme' => 'table',
'#caption' => 'Accomplishments Data',
'#header' => [
t('Categories of Accomplishments'),
'Inception through ' . ErcoreStartDate::endField(),
],
'#rows' => [
'collaborations' => [
Link::fromTextAndUrl('Collaborations', Url::fromUri('internal:/collaborations')),
count(ErcoreCollaborationBuild::filteredNodes(TRUE)),
],
'collaborators' => [
Link::fromTextAndUrl('External Collaborators', Url::fromUri('internal:/collaborators')),
ErcoreCollaborationBuild::countExternals(TRUE),
],
'events' => [
Link::fromTextAndUrl('Engagement Events', Url::fromUri('internal:/events')),
count(ErcoreEngagementBuild::filteredNodes(TRUE)),
],
'engagements' => [
Link::fromTextAndUrl('External Engagements', Url::fromUri('internal:/engagements')),
ErcoreEngagementBuild::countExternals(TRUE),
],
'proposals' => [
Link::fromTextAndUrl('Grants and Proposals', Url::fromUri('internal:/proposals')),
$other['proposals']['submitted']['cumulative']['number'],
],
'highlights' => [
Link::fromTextAndUrl('Highlights', Url::fromUri('internal:/highlights')),
self::getHighlights(TRUE),
],
'honors' => [
Link::fromTextAndUrl('Honors and Awards', Url::fromUri('internal:/honors')),
self::getHonors(TRUE),
],
'institutions' => [
Link::fromTextAndUrl('Institutions', Url::fromUri('internal:/institutions')),
$institutions,
],
'others' => [
Link::fromTextAndUrl('Other Research Products', Url::fromUri('internal:/other-research-products')),
self::getOtherProducts(TRUE),
],
'participants' => [
Link::fromTextAndUrl('Participants', Url::fromUri('internal:/participants')),
count(ErcoreParticipantBuild::getFilteredUsers(TRUE)),
],
'patents' => [
Link::fromTextAndUrl('Patents', Url::fromUri('internal:/patents')),
$other['patents']['awarded']['cumulative'],
],
'publications' => [
Link::fromTextAndUrl('Publications', Url::fromUri('internal:/publications')),
$other['publications']['primary']['cumulative'] + $other['publications']['partial']['cumulative'],
],
],
];
if (!ErcoreStartDate::isDefaultRange()) {
$form['data']['#header'][] = ErcoreStartDate::dateArgumentToField($filterStart) . ' to ' . ErcoreStartDate::dateArgumentToField($filterEnd);
$form['data']['#rows']['collaborations'][] = count(ErcoreCollaborationBuild::filteredNodes(FALSE));
$form['data']['#rows']['collaborators'][] = ErcoreCollaborationBuild::countExternals(FALSE);
$form['data']['#rows']['events'][] = count(ErcoreEngagementBuild::filteredNodes(FALSE));
$form['data']['#rows']['engagements'][] = ErcoreEngagementBuild::countExternals(FALSE);
$form['data']['#rows']['proposals'][] = $other['proposals']['submitted']['current']['number'];
$form['data']['#rows']['highlights'][] = self::getHighlights(FALSE);
$form['data']['#rows']['honors'][] = self::getHonors(FALSE);
$form['data']['#rows']['institutions'][] = $institutions;
$form['data']['#rows']['others'][] = self::getOtherProducts(FALSE);
$form['data']['#rows']['participants'][] = count(ErcoreParticipantBuild::getFilteredUsers(FALSE));
$form['data']['#rows']['patents'][] = $other['patents']['awarded']['current'];
$form['data']['#rows']['publications'][] = $other['publications']['primary']['current'] + $other['publications']['partial']['current'];
}
$form['export_link'] = [
'#markup' => '<p class="epscor-download">' . $link->toString() . '</p>',
];
return $form;
}
/**
* Build Node ID array.
*
* @return int
* Institution count.
*/
public static function getInstitutions() {
$query = \Drupal::entityQuery('node')
->condition('type', 'ercore_institution')
->condition('status', 1);
return count($query->execute());
}
/**
* Build Node ID array.
*
* @param bool $entire_range
* Use cumulative date or filtered.
*
* @return int
* Highlight count.
*/
public static function getHighlights($entire_range = FALSE) {
$count = 0;
$filter = ercore_get_filter_dates();
if ($entire_range === TRUE) {
$filter = ercore_get_project_filter_dates();
}
$query = \Drupal::entityQuery('node')
->condition('type', 'ercore_j_highlight')
->condition('status', 1);
$ids = $query->execute();
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
foreach ($ids as $id) {
$node = $node_storage->load($id);
$date = ErcoreStartDate::dateArgumentToUnix($node->get('field_ercore_hi_date')->value);
if ($filter['start'] <= $date && $date <= $filter['end']) {
$count++;
}
}
return $count;
}
/**
* Build Node ID array.
*
* @param bool $entire_range
* Use cumulative date or filtered.
*
* @return int
* Honor count.
*/
public static function getHonors($entire_range = FALSE) {
$count = 0;
$filter = ercore_get_filter_dates();
if ($entire_range === TRUE) {
$filter = ercore_get_project_filter_dates();
}
$query = \Drupal::entityQuery('node')
->condition('type', 'ercore_j_honor')
->condition('status', 1);
$ids = $query->execute();
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
foreach ($ids as $id) {
$node = $node_storage->load($id);
$date = ErcoreStartDate::dateArgumentToUnix($node->get('field_ercore_hn_date')->value);
if ($filter['start'] <= $date && $date <= $filter['end']) {
$count++;
}
}
return $count;
}
/**
* Build Node ID array.
*
* @param bool $entire_range
* Use cumulative date or filtered.
*
* @return int
* Other Product count.
*/
public static function getOtherProducts($entire_range = FALSE) {
$count = 0;
$filter = ercore_get_filter_dates();
if ($entire_range === TRUE) {
$filter = ercore_get_project_filter_dates();
}
$query = \Drupal::entityQuery('node')
->condition('type', 'ercore_other_product')
->condition('status', 1);
$ids = $query->execute();
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
foreach ($ids as $id) {
$node = $node_storage->load($id);
$date = ErcoreStartDate::dateArgumentToUnix($node->get('field_ercore_op_date')->value);
if ($filter['start'] <= $date && $date <= $filter['end']) {
$count++;
}
}
return $count;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
// We don't use this, but the interface requires us to implement it.
}
}
