ercore-8.x-1.20/modules/ercore_core/src/Controller/ERCoreCoreExportController.php

modules/ercore_core/src/Controller/ERCoreCoreExportController.php
<?php

namespace Drupal\ercore_core\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\ercore_core\ErcoreCollaborationBuild;
use Drupal\ercore_core\ErcoreEngagementBuild;
use Drupal\ercore_core\ErcoreExcel;
use Drupal\ercore_core\ErcoreOutputs;
use Drupal\ercore_core\ErcoreParticipantBuild;
use Drupal\ercore_core\ErcoreSalary;
use PhpOffice\PhpSpreadsheet\Spreadsheet;

/**
 * Controller routines for page example routes.
 */
class ERCoreCoreExportController extends ControllerBase {

  /**
   * {@inheritdoc}
   */
  protected function getModuleName() {
    return 'ercore_core';
  }

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

  /**
   * ERCore Accomplishments.
   */
  public function ercoreAccomplishments() {
    $file_name = 'Report';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/Report.xls';
    $spreadsheet = ErcoreExcel::getFile($file_path);
    $spreadsheet->setActiveSheetIndexByName('A - Salary Support');
    $spreadsheet = self::ercoreSalaryData($spreadsheet);
    $spreadsheet->setActiveSheetIndexByName('B - Participants');
    $spreadsheet = self::ercoreParticipantData($spreadsheet);
    $spreadsheet->setActiveSheetIndexByName('C - Collaborations');
    $spreadsheet = self::ercoreCollaborationData($spreadsheet);
    $spreadsheet->setActiveSheetIndexByName('D - External Engagement');
    $spreadsheet = self::ercoreEngagementsData($spreadsheet);
    $spreadsheet->setActiveSheetIndexByName('E - Outputs');
    $spreadsheet = self::ercoreOutputsData($spreadsheet);
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  /**
   * ERCore Collaborations - Table A.
   */
  public function ercoreSalaryExport() {
    $file_name = 'Salary-Support';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/Salary-Support.xls';
    $spreadsheet = self::ercoreSalaryData(ErcoreExcel::getFile($file_path));
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  /**
   * Process Salary Data - Table A.
   *
   * @param \PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet
   *   Receives template for data to be added to.
   *
   * @return \PhpOffice\PhpSpreadsheet\Spreadsheet
   *   Return spreadsheet with data.
   */
  public function ercoreSalaryData(Spreadsheet $spreadsheet) {
    $salary_data = ErcoreSalary::filteredUsers();
    $row = 7;
    foreach ($salary_data as $university => $participants) {
      $row_count = count($participants);
      $spreadsheet->getActiveSheet()
        ->insertNewRowBefore($row + 1, $row_count + 1);
      foreach ($participants as $participant) {
        $data_row = [
          '0' => $participant['institution'],
          '1' => $participant['department'],
          '2' => $participant['name'],
        ];
        $spreadsheet->getActiveSheet()
          ->fromArray($data_row, NULL, 'A' . $row);
        $row++;
      }
      $spreadsheet->getActiveSheet()
        ->mergeCells('A' . $row . ':C' . $row)
        ->mergeCells('D' . $row . ':G' . $row)
        ->mergeCells('H' . $row . ':K' . $row)
        ->getStyle('A' . $row)->getAlignment()->setHorizontal('left');
      $spreadsheet->getActiveSheet()
        ->getStyle('A' . $row)->getFill()->setFillType('solid');
      $spreadsheet->getActiveSheet()
        ->getStyle('D' . $row)->getFill()->setFillType('solid');
      $spreadsheet->getActiveSheet()
        ->getStyle('H' . $row)->getFill()->setFillType('solid');
      $spreadsheet->getActiveSheet()
        ->getStyle('L' . $row)->getFill()->setFillType('solid');
      $spreadsheet->getActiveSheet()
        ->getStyle('A' . $row)->getFill()->getStartColor()->setARGB('D3D3D3');
      $spreadsheet->getActiveSheet()
        ->getStyle('D' . $row)->getFill()->getStartColor()->setARGB('D3D3D3');
      $spreadsheet->getActiveSheet()
        ->getStyle('H' . $row)->getFill()->getStartColor()->setARGB('D3D3D3');
      $spreadsheet->getActiveSheet()
        ->getStyle('L' . $row)->getFill()->getStartColor()->setARGB('D3D3D3');
      $spreadsheet->getActiveSheet()
        ->setCellValue('A' . $row, 'Total for ' . $university);
      $row++;
    }
    $spreadsheet->getActiveSheet()
      ->removeRow($row)
      ->removeRow($row);
    return $spreadsheet;
  }

  /**
   * ERCore Participants - Table B.
   */
  public function ercoreParticipantExport() {
    $file_name = 'Participants';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/Participants.xls';
    $spreadsheet = self::ercoreParticipantData(ErcoreExcel::getFile($file_path));
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  /**
   * Process Participant Data - Table B.
   *
   * @param \PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet
   *   Receives template for data to be added to.
   *
   * @return \PhpOffice\PhpSpreadsheet\Spreadsheet
   *   Return spreadsheet with data.
   */
  public function ercoreParticipantData(Spreadsheet $spreadsheet) {
    $institutions = ErcoreParticipantBuild::getData();
    $row = 4;
    $row_count = count($institutions) * 7;
    $spreadsheet->getActiveSheet()->insertNewRowBefore($row + 1, $row_count);
    foreach ($institutions as $institution) {
      $spreadsheet->getActiveSheet()
        ->mergeCells('A' . $row . ':A' . ($row + 6));
      $spreadsheet->getActiveSheet()
        ->setCellValue('A' . $row, $institution['name']);
      foreach ($institution['data'] as $type) {
        $spreadsheet->getActiveSheet()
          ->setCellValue('B' . $row, $type->name);
        $spreadsheet->getActiveSheet()
          ->setCellValue('C' . $row, $type->total);
        $spreadsheet->getActiveSheet()
          ->setCellValue('D' . $row, $type->male);
        $spreadsheet->getActiveSheet()
          ->setCellValue('E' . $row, $type->female);
        $spreadsheet->getActiveSheet()
          ->setCellValue('F' . $row, $type->black);
        $spreadsheet->getActiveSheet()
          ->setCellValue('G' . $row, $type->hispanic);
        $spreadsheet->getActiveSheet()
          ->setCellValue('H' . $row, $type->other);
        $spreadsheet->getActiveSheet()
          ->setCellValue('I' . $row, $type->disabled);
        $roles = ErcoreParticipantBuild::ercoreNoNewValues();
        if (!in_array($type->name, $roles)) {
          $spreadsheet->getActiveSheet()
            ->setCellValue('J' . $row, $type->new);
        }
        else {
          $spreadsheet->getActiveSheet()
            ->setCellValue('J' . $row, 'n/a');
          $spreadsheet->getActiveSheet()
            ->getStyle('J' . $row)->getFill()->setFillType('solid');
          $spreadsheet->getActiveSheet()
            ->getStyle('J' . $row)
            ->getFill()
            ->getStartColor()
            ->setARGB('D3D3D3');
        }
        $row++;
      }
    }
    $spreadsheet->getActiveSheet()
      ->removeRow($row)
      ->removeRow($row);
    $advisory = ['0', '0', '0', '0', '0', '0', '0', '0'];
    $spreadsheet->getActiveSheet()->fromArray($advisory, NULL, 'C' . $row);
    return $spreadsheet;
  }

  /**
   * ERCore Collaborations - Table C.
   */
  public function ercoreCollaborationExport() {
    $file_name = 'Collaborations';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/Collaborations.xls';
    $spreadsheet = self::ercoreCollaborationData(ErcoreExcel::getFile($file_path));
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  /**
   * Process Collaboration Data - Table C.
   *
   * @param \PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet
   *   Receives template for data to be added to.
   *
   * @return \PhpOffice\PhpSpreadsheet\Spreadsheet
   *   Return spreadsheet with data.
   */
  public function ercoreCollaborationData(Spreadsheet $spreadsheet) {
    $table_rows = ErcoreCollaborationBuild::getData();
    $row = 5;
    foreach ($table_rows as $table_row) {
      $spreadsheet->getActiveSheet()
        ->setCellValue('B' . $row, $table_row->localInstitutions);
      $spreadsheet->getActiveSheet()
        ->setCellValue('C' . $row, $table_row->localCollaborators);
      $spreadsheet->getActiveSheet()
        ->setCellValue('D' . $row, $table_row->domesticInstitutions);
      $spreadsheet->getActiveSheet()
        ->setCellValue('E' . $row, $table_row->domesticCollaborators);
      $spreadsheet->getActiveSheet()
        ->setCellValue('F' . $row, $table_row->foreignInstitutions);
      $spreadsheet->getActiveSheet()
        ->setCellValue('G' . $row, $table_row->foreignCollaborators);
      $row++;
    }
    return $spreadsheet;
  }

  /**
   * ERCore Engagements - Table D.
   */
  public function ercoreEngagementExport() {
    $file_name = 'External-Engagement';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/External-Engagement.xls';
    $spreadsheet = self::ercoreEngagementsData(ErcoreExcel::getFile($file_path));
    $all = ErcoreEngagementBuild::getIndividualDataList();
    foreach ($all as $nid => $entity) {
      $myWorksheet = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'Node '. $nid);
        $spreadsheet->addSheet($myWorksheet);
    }
    $spreadsheet = self::ercoreEngagementsList($spreadsheet);
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  public function ercoreEngagementsList(Spreadsheet $spreadsheet) {
    $all = ErcoreEngagementBuild::getIndividualDataList();
    $engagements = ErcoreEngagementBuild::buildAggregationArray();
    $keys = ErcoreEngagementBuild::buildEngagementKeyList();
    $types = ErcoreEngagementBuild::dataTypes();
    $name = "Node ";
    $node_title = '';

    foreach ($all as $nid => $entity) {
      $col = 'A';
      $typeRow = 5;
      if( isset( $entity ) ){
        $node_title = $entity->label();
        $spreadsheet ->getSheetByName($name.$nid)
          ->setCellValue($col . 1, $node_title);
        foreach ($engagements as $type => $value){
          $col = 'C';
          $row = 4;
          foreach ($value as $inst => $val){
            if($inst === 'other' || $inst === 'total'){
              $spreadsheet->getSheetByName($name.$nid)
                ->setCellValue($col . count($engagements), $inst);
              $col++;
            } else {
              foreach($val as $position => $v){
                $spreadsheet ->getSheetByName($name.$nid)
                  ->setCellValue($col . $row, $type);
                $spreadsheet->getSheetByName($name.$nid)
                  ->setCellValue($col . count($engagements), $inst.$position);
                  $col++;

              }
            }
          }
          $spreadsheet->getSheetByName($name.$nid)
                  ->setCellValue('B' . $typeRow, $type);
          $typeRow++;
        }
      }
    }

    $types = ErcoreEngagementBuild::dataTypes();
    $nodes = ErcoreEngagementBuild::getNodes();
    foreach($all as $nid => $entity){
      if( isset( $entity ) ){
        $node_title = $entity->label();
        $row = 5;
        $key = '';
        foreach ($engagements as $type => $value){
          $col = 'C';
          foreach ($value as $inst => $val){
            $dataType = gettype($val);
            if ($dataType === 'array'){
              foreach($val as $position => $v){
                $key = 'field_ercore_ee_';
                $key.=$inst;
                $key.='_';
                $key.=$position;
                $key.='_';
                switch($type){
                  case 'male':
                    $key.='m';
                    break;
                  case 'female':
                    $key.='f';
                    break;
                  case 'minority':
                    $key.='mn';
                    break;
                  case 'total':
                    $key.='t';
                    break;
                  default:
                    break;
                }
                $spreadsheet ->getSheetByName($name.$nid)
                    ->setCellValue($col . $row, $entity->get($key)->value);
                    $col++;
              }
            } else {
              $key = 'field_ercore_ee_';
              if($inst === 'other'){
                $key.=$inst;
              } else {
                $key.='t';
              }
                $key.='_';
                switch($type){
                  case 'male':
                    $key.='m';
                    break;
                  case 'female':
                    $key.='f';
                    break;
                  case 'minority':
                    $key.='mn';
                    break;
                  case 'total':
                    $key.='t';
                    break;
                  default:
                    break;
                }
              $spreadsheet ->getSheetByName($name.$nid)
                    ->setCellValue($col . $row, $entity->get($key)->value);
                    $col++;
            }
          }
          $row++;
        }
      }
    }
    return $spreadsheet;
  }


  /**
   * Process Engagements Data - Table D.
   *
   * @param \PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet
   *   Receives template for data to be added to.
   *
   * @return \PhpOffice\PhpSpreadsheet\Spreadsheet
   *   Return spreadsheet with data.
   */
  public function ercoreEngagementsData(Spreadsheet $spreadsheet) {

    $data = ErcoreEngagementBuild::getData();
    $types = ErcoreEngagementBuild::dataTypes();
    foreach ($types as $row => $type) {
      $spreadsheet->getActiveSheet()
        ->setCellValue('B' . $row, $data[$type]->ariFac);
      $spreadsheet->getActiveSheet()
        ->setCellValue('C' . $row, $data[$type]->ariStu);
      $spreadsheet->getActiveSheet()
        ->setCellValue('D' . $row, $data[$type]->puiFac);
      $spreadsheet->getActiveSheet()
        ->setCellValue('E' . $row, $data[$type]->puiStu);
      $spreadsheet->getActiveSheet()
        ->setCellValue('F' . $row, $data[$type]->msiFac);
      $spreadsheet->getActiveSheet()
        ->setCellValue('G' . $row, $data[$type]->msiStu);
      $spreadsheet->getActiveSheet()
        ->setCellValue('H' . $row, $data[$type]->k12tch);
      $spreadsheet->getActiveSheet()
        ->setCellValue('I' . $row, $data[$type]->k12dir);
      $spreadsheet->getActiveSheet()
        ->setCellValue('J' . $row, $data[$type]->k12ttr);
      $spreadsheet->getActiveSheet()
        ->setCellValue('K' . $row, $data[$type]->other);
      $spreadsheet->getActiveSheet()
        ->setCellValue('L' . $row, $data[$type]->total);
    }
    return $spreadsheet;
  }

  /**
   * ERCore Outputs - Table E.
   */
  public function ercoreOutputsExport() {
    $file_name = 'Outputs';
    $file_path = drupal_get_path('module', 'ercore_core') . '/files/Outputs.xls';
    $spreadsheet = self::ercoreOutputsData(ErcoreExcel::getFile($file_path));
    ErcoreExcel::returnFile($file_name, $spreadsheet);
  }

  /**
   * Process Outputs Data - Table E.
   *
   * @param \PhpOffice\PhpSpreadsheet\Spreadsheet $spreadsheet
   *   Receives template for data to be added to.
   *
   * @return \PhpOffice\PhpSpreadsheet\Spreadsheet
   *   Return spreadsheet with data.
   */
  public function ercoreOutputsData(Spreadsheet $spreadsheet) {
    $data = ErcoreOutputs::getData();
    // Patents.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B4', $data['patents']['awarded']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D4', $data['patents']['awarded']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B5', $data['patents']['pending']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D5', $data['patents']['pending']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B6', $data['patents']['licensed']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D6', $data['patents']['licensed']['cumulative']);
    // Proposals.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B8', $data['proposals']['submitted']['current']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('C8', $data['proposals']['submitted']['current']['funds']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D8', $data['proposals']['submitted']['cumulative']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('E8', $data['proposals']['submitted']['cumulative']['funds']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B9', $data['proposals']['awarded']['current']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('C9', $data['proposals']['awarded']['current']['funds']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D9', $data['proposals']['awarded']['cumulative']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('E9', $data['proposals']['awarded']['cumulative']['funds']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B10', $data['proposals']['pending']['current']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('C10', $data['proposals']['pending']['current']['funds']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D10', $data['proposals']['pending']['cumulative']['number']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('E10', $data['proposals']['pending']['cumulative']['funds']);
    // Publications.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B12', $data['publications']['primary']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D12', $data['publications']['primary']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B13', $data['publications']['partial']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D13', $data['publications']['partial']['cumulative']);
    // New Hires.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B15', $data['hired']['male']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D15', $data['hired']['male']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B16', $data['hired']['female']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D16', $data['hired']['female']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B17', $data['hired']['minority']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D17', $data['hired']['minority']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B18', $data['hired']['disabled']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D18', $data['hired']['disabled']['cumulative']);
    // Post-Docs.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B20', $data['post-doc']['male']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D20', $data['post-doc']['male']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B21', $data['post-doc']['female']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D21', $data['post-doc']['female']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B22', $data['post-doc']['minority']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D22', $data['post-doc']['minority']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B23', $data['post-doc']['disabled']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D23', $data['post-doc']['disabled']['cumulative']);
    // Graduate.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B25', $data['graduate']['male']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D25', $data['graduate']['male']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B26', $data['graduate']['female']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D26', $data['graduate']['female']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B27', $data['graduate']['minority']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D27', $data['graduate']['minority']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B28', $data['graduate']['disabled']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D28', $data['graduate']['disabled']['cumulative']);
    // Undergraduate.
    $spreadsheet->getActiveSheet()
      ->setCellValue('B30', $data['undergraduate']['male']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D30', $data['undergraduate']['male']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B31', $data['undergraduate']['female']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D31', $data['undergraduate']['female']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B32', $data['undergraduate']['minority']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D32', $data['undergraduate']['minority']['cumulative']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('B33', $data['undergraduate']['disabled']['current']);
    $spreadsheet->getActiveSheet()
      ->setCellValue('D33', $data['undergraduate']['disabled']['cumulative']);
    return $spreadsheet;
  }

}

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

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