ercore-8.x-1.20/modules/ercore_core/src/ErcoreCollaborationBuild.php

modules/ercore_core/src/ErcoreCollaborationBuild.php
<?php

namespace Drupal\ercore_core;

use Drupal\ercore\ErcoreStartDate;

/**
 * Class ErcoreCollaborationBuild.
 *
 * @package Drupal\ercore_core
 */
class ErcoreCollaborationBuild {

  /**
   * Data types which form row headers.
   *
   * @return array
   *   Return array of data types.
   */
  public static function dataTypes() {
    return [
      'academic' => 'Academic Research Institutions',
      'undergrad' => 'Primarily Undergraduate Institutions',
      'black' => 'Historically Black Colleges and Universities',
      'hispanic' => 'Hispanic Serving Institutions',
      'tribal' => 'Tribal Colleges and Universities',
      'lab' => 'National Laboratories',
      'industry' => 'Industry',
      'none' => 'None/Other',
      'totals' => 'Totals',
    ];
  }

  /**
   * Builds data array for participant data block.
   *
   * @return array
   *   Returns array of objects.
   */
  public static function buildDataArray() {
    $dataArray = [];
    foreach (self::dataTypes() as $key => $type) {
      $dataArray[$key] = new ErcoreCollaboration();
      $dataArray[$key]->setName($type);
    }
    return $dataArray;
  }

  /**
   * Build Node ID array.
   *
   * @return array
   *   Array of User IDs.
   */
  public static function getNodeIds() {
    $query = \Drupal::entityQuery('node')
      ->condition('type', 'ercore_collaboration')
      ->condition('status', 1);
    return $query->execute();
  }

  /**
   * Build data object.
   *
   * @return array
   *   Array of Users.
   */
  public static function getNodes() {
    $ids = self::getNodeIds();
    $nodes = [];
    foreach ($ids as $id) {
      $node = \Drupal::entityTypeManager()->getStorage('node')->load($id);
      if (!$node->get('field_ercore_collaboration_start')->isEmpty()) {
        $collaboration_start = $node->get('field_ercore_collaboration_start')->getValue();
        if (!$node->get('field_ercore_collaboration_end')->isEmpty()) {
          $end = $node->get('field_ercore_collaboration_end')->getValue();
          $collaboration_end = ErcoreStartDate::dateArgumentToUnix($end[0]['value']);
        }
        else {
          $collaboration_end = ErcoreStartDate::endUnix();
        }
        if (!$node->get('field_ercore_cn_collaborator')->isEmpty()) {
          $nodes[$id] = [
            'start' => ErcoreStartDate::dateArgumentToUnix($collaboration_start[0]['value']),
            'end' => $collaboration_end,
            'count' => 0,
          ];
          $externals = $node->get('field_ercore_cn_collaborator')->getValue();
          foreach ($externals as $external) {
            $pid = $external['target_id'];
            $type = '';
            $category = '';
            $title='';
            $collaborator = \Drupal::entityTypeManager()
              ->getStorage('paragraph')
              ->load($pid);

            if (!$collaborator->get('field_ercore_cr_inst')->isEmpty()) {
              
              // field_ercore_cn_collaborator

              $institution = $collaborator->get('field_ercore_cr_inst')->entity;

              if (!empty($institution)) {
                
                if (!$institution->get('field_ercore_inst_type')->isEmpty()) {
                  $type = $institution->get('field_ercore_inst_type')->value;
                }
                if (!$institution->get('field_ercore_inst_category')->isEmpty()) 
                {
                  $category = $institution->get('field_ercore_inst_category')->value;
                }
                if (!$institution->get('title')->isEmpty()) 
                {
                  
                  $title = $institution->get('title')->value;
                }
              
              $nodes[$id]['data'][$category][$type][] = $pid;
              $nodes[$id]['institution'][$category][$type][] = $institution->id();
              }
              
              $nodes[$id]['count'] += 1;
            }
          }
        }
      }
    }

    // print_r(var_dump($nodes));
    return $nodes;
  }

  /**
   * Filter data by date.
   *
   * @param bool $entire_range
   *   Use cumulative date or filtered.
   *
   * @return array
   *   Array of User IDs.
   */
  public static function filteredNodes($entire_range = FALSE) {
    $dates = ercore_get_filter_dates();
    if ($entire_range === TRUE) {
      $dates = ercore_get_project_filter_dates();
    }
    $filtered = [];
    $nodes = self::getNodes();
    foreach ($nodes as $nid => $node) {
      if (($node['start'] <= $dates['end'] && $node['end'] >= $dates['start'])
        || ($node['start'] <= $dates['end'] && empty($node['end']))) {
        $filtered[$nid] = $node;
      }
    }
    return $filtered;
  }

  /**
   * Counts external collaborators.
   *
   * @param bool $entire_range
   *   Use cumulative date or filtered.
   *
   * @return int
   *   Count of external collaborators.
   */
  public static function countExternals($entire_range = FALSE) {
    $count = 0;
    $nodes = self::filteredNodes($entire_range);
    foreach ($nodes as $node) {
      $count += $node['count'];
    }
    return $count;
  }

  /**
   * Gets all Participant data.
   */
  public static function getData() {
    $data = self::buildDataArray();
    $nodes = self::filteredNodes();
    $institution_array = [];
    foreach ($nodes as $nid => $node) {
      foreach ($node['data'] as $key => $external) {

        $data[$key]->groupData($external);
        $data['totals']->groupData($external);
        
      }
      foreach ($node['institution'] as $category => $cat_val){
        foreach ($cat_val as $type => $nids){
          foreach ($nids as $nid){
          $institution_array[$category][$type][]=$nid;
          }
        }
      }
    }
    
    foreach ($institution_array as $institution_array_key => $institution_array_val){
      $data[$institution_array_key]->groupInst($institution_array_val);
      $data['totals']->groupInstTot($institution_array_val);
    }

    return $data;
  }

}

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

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