Merge pull request #4327 from jmcclelland/default-dashlets
[civicrm-core.git] / CRM / Case / XMLProcessor / Process.php
index fa05dac55f80141f9599c5339ae05f61bae32788..c7cf7b78ee2a26481fb83e70dfaa20da40d8a1ac 100644 (file)
  *
  */
 class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
+  /**
+   * @param $caseType
+   * @param $params
+   *
+   * @throws Exception
+   */
   function run($caseType, &$params) {
     $xml = $this->retrieve($caseType);
 
@@ -50,6 +56,15 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     $this->process($xml, $params);
   }
 
+  /**
+   * @param $caseType
+   * @param $fieldSet
+   * @param bool $isLabel
+   * @param bool $maskAction
+   *
+   * @return array|bool|mixed
+   * @throws Exception
+   */
   function get($caseType, $fieldSet, $isLabel = FALSE, $maskAction = FALSE) {
     $xml = $this->retrieve($caseType);
     if ($xml === FALSE) {
@@ -72,6 +87,12 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     }
   }
 
+  /**
+   * @param $xml
+   * @param $params
+   *
+   * @throws Exception
+   */
   function process($xml, &$params) {
     $standardTimeline = CRM_Utils_Array::value('standardTimeline', $params);
     $activitySetName  = CRM_Utils_Array::value('activitySetName', $params);
@@ -119,6 +140,10 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     }
   }
 
+  /**
+   * @param $activitySetXML
+   * @param $params
+   */
   function processStandardTimeline($activitySetXML, &$params) {
     if ('Change Case Type' == CRM_Utils_Array::value('activityTypeName', $params)
       && CRM_Utils_Array::value('resetTimeline', $params, TRUE)) {
@@ -133,6 +158,10 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     }
   }
 
+  /**
+   * @param $activitySetXML
+   * @param $params
+   */
   function processActivitySet($activitySetXML, &$params) {
     foreach ($activitySetXML->ActivityTypes as $activityTypesXML) {
       foreach ($activityTypesXML as $activityTypeXML) {
@@ -141,6 +170,12 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     }
   }
 
+  /**
+   * @param $caseRolesXML
+   * @param bool $isCaseManager
+   *
+   * @return array|mixed
+   */
   function &caseRoles($caseRolesXML, $isCaseManager = FALSE) {
     $relationshipTypes = &$this->allRelationshipTypes();
 
@@ -166,6 +201,13 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     return $result;
   }
 
+  /**
+   * @param $relationshipTypeName
+   * @param $params
+   *
+   * @return bool
+   * @throws Exception
+   */
   function createRelationships($relationshipTypeName, &$params) {
     $relationshipTypes = &$this->allRelationshipTypes();
     // get the relationship id
@@ -202,6 +244,11 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     return TRUE;
   }
 
+  /**
+   * @param $params
+   *
+   * @return bool
+   */
   function createRelationship(&$params) {
     $dao = new CRM_Contact_DAO_Relationship();
     $dao->copyValues($params);
@@ -212,6 +259,14 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     return TRUE;
   }
 
+  /**
+   * @param $activityTypesXML
+   * @param bool $maxInst
+   * @param bool $isLabel
+   * @param bool $maskAction
+   *
+   * @return array
+   */
   function activityTypes($activityTypesXML, $maxInst = FALSE, $isLabel = FALSE, $maskAction = FALSE) {
     $activityTypes = &$this->allActivityTypes(TRUE, TRUE);
     $result = array();
@@ -253,6 +308,55 @@ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor {
     return $result;
   }
 
+  /**
+   * @param SimpleXMLElement $caseTypeXML
+   * @return array<string> symbolic activity-type names
+   */
+  function getDeclaredActivityTypes($caseTypeXML) {
+    $result = array();
+
+    if (!empty($caseTypeXML->ActivityTypes) && $caseTypeXML->ActivityTypes->ActivityType) {
+      foreach ($caseTypeXML->ActivityTypes->ActivityType as $activityTypeXML) {
+        $result[] = (string) $activityTypeXML->name;
+      }
+    }
+
+    if (!empty($caseTypeXML->ActivitySets) && $caseTypeXML->ActivitySets->ActivitySet) {
+      foreach ($caseTypeXML->ActivitySets->ActivitySet as $activitySetXML) {
+        if ($activitySetXML->ActivityTypes && $activitySetXML->ActivityTypes->ActivityType) {
+          foreach ($activitySetXML->ActivityTypes->ActivityType as $activityTypeXML) {
+            $result[] = (string) $activityTypeXML->name;
+          }
+        }
+      }
+    }
+
+    $result = array_unique($result);
+    sort($result);
+    return $result;
+  }
+
+  /**
+   * @param SimpleXMLElement $caseTypeXML
+   * @return array<string> symbolic relationship-type names
+   */
+  function getDeclaredRelationshipTypes($caseTypeXML) {
+    $result = array();
+
+    if (!empty($caseTypeXML->CaseRoles) && $caseTypeXML->CaseRoles->RelationshipType) {
+      foreach ($caseTypeXML->CaseRoles->RelationshipType as $relTypeXML) {
+        $result[] = (string) $relTypeXML->name;
+      }
+    }
+
+    $result = array_unique($result);
+    sort($result);
+    return $result;
+  }
+
+  /**
+   * @param $params
+   */
   function deleteEmptyActivity(&$params) {
     $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
     $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
@@ -270,6 +374,11 @@ AND    a.is_current_revision = 1
     CRM_Core_DAO::executeQuery($query, $sqlParams);
   }
 
+  /**
+   * @param $params
+   *
+   * @return bool
+   */
   function isActivityPresent(&$params) {
     $query = "
 SELECT     count(a.id)
@@ -286,12 +395,20 @@ AND        a.is_deleted = 0
     $count = CRM_Core_DAO::singleValueQuery($query, $sqlParams);
 
     // check for max instance
-    $caseType = CRM_Case_BAO_Case::getCaseType($params['caseID'], 'title');
+    $caseType = CRM_Case_BAO_Case::getCaseType($params['caseID'], 'name');
     $maxInstance = self::getMaxInstance($caseType, $params['activityTypeName']);
 
     return $maxInstance ? ($count < $maxInstance ? FALSE : TRUE) : FALSE;
   }
 
+  /**
+   * @param $activityTypeXML
+   * @param $params
+   *
+   * @return bool
+   * @throws CRM_Core_Exception
+   * @throws Exception
+   */
   function createActivity($activityTypeXML, &$params) {
     $activityTypeName = (string) $activityTypeXML->name;
     $activityTypes    = &$this->allActivityTypes(TRUE, TRUE);
@@ -454,6 +571,11 @@ AND        a.is_deleted = 0
     return TRUE;
   }
 
+  /**
+   * @param $activitySetsXML
+   *
+   * @return array
+   */
   static function activitySets($activitySetsXML) {
     $result = array();
     foreach ($activitySetsXML as $activitySetXML) {
@@ -467,6 +589,13 @@ AND        a.is_deleted = 0
     return $result;
   }
 
+  /**
+   * @param $caseType
+   * @param null $activityTypeName
+   *
+   * @return array|bool|mixed
+   * @throws Exception
+   */
   function getMaxInstance($caseType, $activityTypeName = NULL) {
     $xml = $this->retrieve($caseType);
 
@@ -479,11 +608,35 @@ AND        a.is_deleted = 0
     return $activityTypeName ? CRM_Utils_Array::value($activityTypeName, $activityInstances) : $activityInstances;
   }
 
+  /**
+   * @param $caseType
+   *
+   * @return array|mixed
+   */
   function getCaseManagerRoleId($caseType) {
     $xml = $this->retrieve($caseType);
     return $this->caseRoles($xml->CaseRoles, TRUE);
   }
 
+  /**
+   * @param string $caseType
+   * @return array<\Civi\CCase\CaseChangeListener>
+   */
+  function getListeners($caseType) {
+    $xml = $this->retrieve($caseType);
+    $listeners = array();
+    if ($xml->Listeners && $xml->Listeners->Listener) {
+      foreach ($xml->Listeners->Listener as $listenerXML) {
+        $class = (string) $listenerXML;
+        $listeners[] = new $class();
+      }
+    }
+    return $listeners;
+  }
+
+  /**
+   * @return int
+   */
   function getRedactActivityEmail() {
     $xml = $this->retrieve("Settings");
     return ( string ) $xml->RedactActivityEmail ? 1 : 0;