Added extension code
This commit is contained in:
		
							
								
								
									
										220
									
								
								CRM/RelateEntities/Utils.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								CRM/RelateEntities/Utils.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,220 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
class CRM_RelateEntities_Utils {
 | 
			
		||||
  public static $_entityRefs = [];
 | 
			
		||||
 | 
			
		||||
  public static function getList() {
 | 
			
		||||
    $requiredParameters = [
 | 
			
		||||
      'entityId' => 'Integer',
 | 
			
		||||
      'entityTable' => 'String',
 | 
			
		||||
      'entityTableB' => 'String',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    $optionalParameters = [];
 | 
			
		||||
 | 
			
		||||
    $params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
 | 
			
		||||
    $params += CRM_Core_Page_AJAX::validateParams($requiredParameters, $optionalParameters);
 | 
			
		||||
    $params['offset'] = ($params['page'] - 1) * $params['rp'];
 | 
			
		||||
    $params['rowCount'] = $params['rp'];
 | 
			
		||||
    $params['sort'] = CRM_Utils_Array::value('sortBy', $params);
 | 
			
		||||
 | 
			
		||||
    $relatedEntities = self::getrelatedEntitiesSelector($params);
 | 
			
		||||
    CRM_Utils_JSON::output($relatedEntities);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static function getrelatedEntitiesSelector($params) {
 | 
			
		||||
 | 
			
		||||
    $total = self::getRelatedEntities(
 | 
			
		||||
      $params['entityTable'], $params['entityId'], TRUE, TRUE,
 | 
			
		||||
      $params['entityTableB']
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    $results = self::getRelatedEntities(
 | 
			
		||||
      $params['entityTable'], $params['entityId'], TRUE, FALSE,
 | 
			
		||||
      $params['entityTableB']
 | 
			
		||||
    );
 | 
			
		||||
    $relatedEntities = [];
 | 
			
		||||
    $links = new CRM_RelateEntities_Page_Tab();
 | 
			
		||||
    $links = $links->links();
 | 
			
		||||
    while ($results->fetch()) {
 | 
			
		||||
      $action = CRM_Core_Action::UPDATE + CRM_Core_Action::DELETE + CRM_Core_Action::ADD;
 | 
			
		||||
      $class = ' crm-entity ';
 | 
			
		||||
      if ($results->is_active) {
 | 
			
		||||
        $action += CRM_Core_Action::DISABLE;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        $class .= ' disabled';
 | 
			
		||||
        $action += CRM_Core_Action::ENABLE;
 | 
			
		||||
      }
 | 
			
		||||
      $relatedEntity = [
 | 
			
		||||
        'DT_RowId' => $results->id,
 | 
			
		||||
        'DT_RowClass' => $class,
 | 
			
		||||
        'DT_RowAttr' => [
 | 
			
		||||
          'data-entity' => 'RelateEntities',
 | 
			
		||||
          'data-id' => $results->id,
 | 
			
		||||
        ],
 | 
			
		||||
        'name' => self::buildName($results->entity_id, $params['entityTableB']),
 | 
			
		||||
        'is_active' => $results->is_active ? ts('Yes') : ts('No'),
 | 
			
		||||
        'relationship_name' => $results->relationship_name,
 | 
			
		||||
      ];
 | 
			
		||||
      $relatedEntity['links'] = CRM_Core_Action::formLink(
 | 
			
		||||
        $links,
 | 
			
		||||
        $action,
 | 
			
		||||
        ['id' => $results->id, 'entityTable' => $params['entityTable']],
 | 
			
		||||
        ts('more'),
 | 
			
		||||
        FALSE,
 | 
			
		||||
        'relatedentity.manage.action',
 | 
			
		||||
        'RelatedEntity',
 | 
			
		||||
        $results->id
 | 
			
		||||
      );
 | 
			
		||||
      array_push($relatedEntities, $relatedEntity);
 | 
			
		||||
    }
 | 
			
		||||
    $relatedEntitiesDT = [];
 | 
			
		||||
    $relatedEntitiesDT['data'] = $relatedEntities;
 | 
			
		||||
    $relatedEntitiesDT['recordsTotal'] = $total;
 | 
			
		||||
    $relatedEntitiesDT['recordsFiltered'] = $total;
 | 
			
		||||
    return $relatedEntitiesDT;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static function buildName($entityId, $entityTable) {
 | 
			
		||||
    $name = '';
 | 
			
		||||
    $createLink = TRUE;
 | 
			
		||||
    try {
 | 
			
		||||
      switch ($entityTable) {
 | 
			
		||||
        case 'Contact':
 | 
			
		||||
          $return = 'sort_name';
 | 
			
		||||
          $url = 'civicrm/contact/view';
 | 
			
		||||
          $q = "reset=1&cid=$entityId";
 | 
			
		||||
          break;
 | 
			
		||||
        case 'FinancialType':
 | 
			
		||||
          $return = 'name';
 | 
			
		||||
          $url = 'civicrm/admin/financial/financialType';
 | 
			
		||||
          $q = "action=update&id={$entityId}&reset=1";
 | 
			
		||||
          break;
 | 
			
		||||
        case 'MembershipType':
 | 
			
		||||
          $return = 'name';
 | 
			
		||||
          $url = 'civicrm/admin/member/membershipType';
 | 
			
		||||
          $q = "action=update&id={$entityId}&reset=1";
 | 
			
		||||
          break;
 | 
			
		||||
      }
 | 
			
		||||
      $name = civicrm_api3($entityTable, 'getvalue', ['id' => $entityId, 'return' => $return]);
 | 
			
		||||
      if ($createLink) {
 | 
			
		||||
        $name = CRM_Utils_System::href($name, $url, $q);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    catch (Exception $e) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return $name;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static function buildEntitiesList(&$form, $entityTable, $entityId) {
 | 
			
		||||
    $results = self::getRelatedEntities($entityTable, $entityId, TRUE, FALSE, NULL, TRUE);
 | 
			
		||||
    $relatedEntities = [];
 | 
			
		||||
    while ($results->fetch()) {
 | 
			
		||||
      $entityRef = self::getEntityTable($results->entity_table, TRUE);
 | 
			
		||||
      $relatedEntities[$entityRef] = [
 | 
			
		||||
        'label' => preg_replace('/(?<!\ )[A-Z]/', ' $0', $entityRef),
 | 
			
		||||
        'columns' => self::getColumnHeaders($entityTable, $entityRef),
 | 
			
		||||
      ];
 | 
			
		||||
    }
 | 
			
		||||
    $form->assign('entityTable', $entityTable);
 | 
			
		||||
    $form->assign('entityId', $entityId);
 | 
			
		||||
    $form->assign('relatedEntities', $relatedEntities);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public function getColumnHeaders($entityTable, $entityRef) {
 | 
			
		||||
    return [
 | 
			
		||||
      'relationship_name' => ts('Relationship Type'),
 | 
			
		||||
      'name' => ts('Title'),
 | 
			
		||||
      'is_active' => ts('Is Active?'),
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static function getEntityTable($entityTable, $returnEntityRef = FALSE) {
 | 
			
		||||
    if (empty($entityTable)) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (empty(self::$_entityRefs)) {
 | 
			
		||||
      $entityTypesClasses = array_flip(CRM_Core_DAO_AllCoreTables::daoToClass());
 | 
			
		||||
      $entityTablesClasses = array_flip(CRM_Core_DAO_AllCoreTables::tables());
 | 
			
		||||
      self::$_entityRefs = array_combine($entityTablesClasses, $entityTypesClasses);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ($returnEntityRef) {
 | 
			
		||||
      return CRM_Utils_Array::value($entityTable, self::$_entityRefs);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return array_search($entityTable, self::$_entityRefs);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public static function getRelatedEntities(
 | 
			
		||||
    $entityTableA, $entityIdA, $all = TRUE, $getCount = FALSE, $entityTableB = NULL,
 | 
			
		||||
    $groupBy = FALSE
 | 
			
		||||
  ) {
 | 
			
		||||
    $entityTableA = self::getEntityTable($entityTableA);
 | 
			
		||||
    if (empty($entityTableA) || empty($entityIdA)) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $isActiveClause = '';
 | 
			
		||||
    if (!$all) {
 | 
			
		||||
      $isActiveClause = ' AND cre.is_active = 1 ';
 | 
			
		||||
    }
 | 
			
		||||
    $selectClause = '*';
 | 
			
		||||
    if ($getCount) {
 | 
			
		||||
      $selectClause = ' count(*) ';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $queryParams = [
 | 
			
		||||
      1 => [$entityTableA, 'String'],
 | 
			
		||||
      2 => [$entityIdA, 'Integer'],
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    $entityTable1Clause = $entityTable2Clause = '';
 | 
			
		||||
    $entityTableB = self::getEntityTable($entityTableB);
 | 
			
		||||
    if ($entityTableB) {
 | 
			
		||||
      $entityTable1Clause = ' AND `entity_table_a`= %3 ';
 | 
			
		||||
      $entityTable2Clause = ' AND `entity_table_b`= %3 ';
 | 
			
		||||
      $queryParams[3] = [$entityTableB, 'String'];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $groupByClause = '';
 | 
			
		||||
    if ($groupBy) {
 | 
			
		||||
      $groupByClause = ' GROUP BY entity_table ';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $query = "
 | 
			
		||||
      SELECT {$selectClause} FROM (
 | 
			
		||||
        SELECT
 | 
			
		||||
          cre.`id`, cre.`entity_table_a` entity_table, cre.`entity_id_a` entity_id,
 | 
			
		||||
          crt.`label_b_a` relationship_name, cre.`is_active`
 | 
			
		||||
        FROM `civicrm_relate_entities` cre
 | 
			
		||||
        INNER JOIN civicrm_relationship_type crt
 | 
			
		||||
          ON crt.id = cre.relationship_type_id
 | 
			
		||||
        WHERE `entity_table_b`= %1 AND  `entity_id_b` = %2
 | 
			
		||||
          {$isActiveClause} $entityTable1Clause
 | 
			
		||||
        UNION
 | 
			
		||||
 | 
			
		||||
        SELECT
 | 
			
		||||
          cre.`id`, cre.`entity_table_b` entity_table, cre.`entity_id_b`,
 | 
			
		||||
          crt.`label_a_b` relationship_name, cre.`is_active`
 | 
			
		||||
        FROM `civicrm_relate_entities` cre
 | 
			
		||||
        INNER JOIN civicrm_relationship_type crt
 | 
			
		||||
          ON crt.id = cre.relationship_type_id
 | 
			
		||||
        WHERE `entity_table_a`= %1 AND `entity_id_a` = %2
 | 
			
		||||
          {$isActiveClause} $entityTable2Clause
 | 
			
		||||
      ) AS temp
 | 
			
		||||
      $groupByClause
 | 
			
		||||
    ";
 | 
			
		||||
 | 
			
		||||
    if ($getCount) {
 | 
			
		||||
      return CRM_Core_DAO::singleValueQuery($query, $queryParams);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      return CRM_Core_DAO::executeQuery($query, $queryParams);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user