CRM-15002: fix broken Link Case functionality
[civicrm-core.git] / CRM / Case / Info.php
index b77352ef8f51e21166817b72c583b5cf7c627e22..d62a10cbdbcddc6353a8e3c13837a1e30282b541 100644 (file)
@@ -42,6 +42,9 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
   protected $keyword = 'case';
 
   // docs inherited from interface
+  /**
+   * @return array
+   */
   public function getInfo() {
     return array(
       'name' => 'CiviCase',
@@ -52,54 +55,45 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
     );
   }
 
-  // docs inherited from interface
-  public function getManagedEntities() {
-    // Use hook_civicrm_caseTypes to build a list of OptionValues
-    // In the long run, we may want more specialized logic for this, but
-    // this design is fairly convenient and will allow us to replace it
-    // without changing the hook_civicrm_caseTypes interface.
-    $entities = array();
-
-    $caseTypes = array();
-    CRM_Utils_Hook::caseTypes($caseTypes);
-
-    $proc = new CRM_Case_XMLProcessor();
-    $caseTypesGroupId = civicrm_api3('OptionGroup', 'getvalue', array('name' => 'case_type', 'return' => 'id'));
-    if (!is_numeric($caseTypesGroupId)) {
-      throw new CRM_Core_Exception("Found invalid ID for OptionGroup (case_type)");
-    }
-    foreach ($caseTypes as $name => $caseType) {
-      $xml = $proc->retrieve($name);
-      if (!$xml) {
-        throw new CRM_Core_Exception("Failed to load XML for case type (" . $name . ")");
-      }
+  /**
+   * {@inheritDoc}
+   */
+  public function getAngularModules() {
+    $result = array();
+    $result['crmCaseType'] = array(
+      'ext' => 'civicrm',
+      'js' => array('js/angular-crmCaseType.js'),
+      'css' => array('css/angular-crmCaseType.css'),
+    );
 
-      if (isset($caseType['module'], $caseType['name'], $caseType['file'])) {
-        $entities[] = array(
-          'module' => $caseType['module'],
-          'name' => $caseType['name'],
-          'entity' => 'OptionValue',
-          'params' => array(
-            'version' => 3,
-            'name' => $caseType['name'],
-            'label' => (string) $xml->name,
-            'description' => (string) $xml->description, // CRM_Utils_Array::value('description', $caseType, ''),
-            'option_group_id' => $caseTypesGroupId,
-            'filter' => empty($xml->filter) ? 0 : 1,
-            'grouping' => $xml->grouping,
-            'is_reserved' => 1,
-          ),
-        );
-      }
-      else {
-        throw new CRM_Core_Exception("Invalid case type");
-      }
-    }
+    CRM_Core_Resources::singleton()->addSetting(array(
+      'crmCaseType' => array(
+        'REL_TYPE_CNAME' => CRM_Case_XMLProcessor::REL_TYPE_CNAME,
+      ),
+    ));
+    return $result;
+  }
 
+  // docs inherited from interface
+  /**
+   * @return array
+   * @throws CRM_Core_Exception
+   */
+  public function getManagedEntities() {
+    $entities = array_merge(
+      CRM_Case_ManagedEntities::createManagedCaseTypes(),
+      CRM_Case_ManagedEntities::createManagedActivityTypes(CRM_Case_XMLRepository::singleton(), CRM_Core_ManagedEntities::singleton()),
+      CRM_Case_ManagedEntities::createManagedRelationshipTypes(CRM_Case_XMLRepository::singleton(), CRM_Core_ManagedEntities::singleton())
+    );
     return $entities;
   }
 
   // docs inherited from interface
+  /**
+   * @param bool $getAllUnconditionally
+   *
+   * @return array
+   */
   public function getPermissions($getAllUnconditionally = FALSE) {
     return array(
       'delete in CiviCase',
@@ -110,12 +104,53 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
     );
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getReferenceCounts($dao) {
+    $result = array();
+    if ($dao instanceof CRM_Core_DAO_OptionValue) {
+      /** @var $dao CRM_Core_DAO_OptionValue */
+      $activity_type_gid = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', 'activity_type', 'id', 'name');
+      if ($activity_type_gid == $dao->option_group_id) {
+        $count = CRM_Case_XMLRepository::singleton()
+          ->getActivityReferenceCount($dao->name);
+        if ($count > 0) {
+          $result[] = array(
+            'name' => 'casetypexml:activities',
+            'type' => 'casetypexml',
+            'count' => $count,
+          );
+        }
+      }
+    }
+    elseif ($dao instanceof CRM_Contact_DAO_RelationshipType) {
+      /** @var $dao CRM_Contact_DAO_RelationshipType */
+      $count = CRM_Case_XMLRepository::singleton()
+        ->getRelationshipReferenceCount($dao->{CRM_Case_XMLProcessor::REL_TYPE_CNAME});
+      if ($count > 0) {
+        $result[] = array(
+          'name' => 'casetypexml:relationships',
+          'type' => 'casetypexml',
+          'count' => $count,
+        );
+      }
+    }
+    return $result;
+  }
+
   // docs inherited from interface
+  /**
+   * @return array
+   */
   public function getUserDashboardElement() {
     return array();
   }
 
   // docs inherited from interface
+  /**
+   * @return array
+   */
   public function registerTab() {
     return array('title' => ts('Cases'),
       'url' => 'case',
@@ -124,6 +159,9 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
   }
 
   // docs inherited from interface
+  /**
+   * @return array
+   */
   public function registerAdvancedSearchPane() {
     return array('title' => ts('Cases'),
       'weight' => 50,
@@ -131,11 +169,17 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
   }
 
   // docs inherited from interface
+  /**
+   * @return null
+   */
   public function getActivityTypes() {
     return NULL;
   }
 
   // add shortcut to Create New
+  /**
+   * @param $shortCuts
+   */
   public function creatNewShortcut(&$shortCuts) {
     if (CRM_Core_Permission::check('access all cases and activities') ||
       CRM_Core_Permission::check('add cases')
@@ -173,7 +217,6 @@ class CRM_Case_Info extends CRM_Core_Component_Info {
     ) {
       $config = CRM_Core_Config::singleton();
       CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample.mysql');
-      CRM_Admin_Form_Setting_Component::loadCaseSampleData($config->dsn, $config->sqlDir . 'case_sample1.mysql');
       if (!CRM_Case_BAO_Case::createCaseViews()) {
         $msg = ts("Could not create the MySQL views for CiviCase. Your mysql user needs to have the 'CREATE VIEW' permission");
         CRM_Core_Error::fatal($msg);