Ejemplo n.º 1
0
 /**
  * @param bool $fresh
  * @return CRM_Case_XMLRepository
  */
 public static function singleton($fresh = FALSE)
 {
     if (!self::$singleton || $fresh) {
         self::$singleton = new static();
     }
     return self::$singleton;
 }
Ejemplo n.º 2
0
 /**
  * @param CRM_Case_XMLRepository $xmlRepo
  * @param array <string> $caseTypeNames
  */
 public function __construct()
 {
     $this->caseTypeNames = CRM_Case_PseudoConstant::caseType('name');
     $this->xmlRepo = CRM_Case_XMLRepository::singleton();
 }
Ejemplo n.º 3
0
 /**
  * @param bool $triggerRebuild
  * @param bool $sessionReset
  *
  * @throws Exception
  */
 public static function rebuildMenuAndCaches($triggerRebuild = FALSE, $sessionReset = FALSE)
 {
     $config = CRM_Core_Config::singleton();
     $config->clearModuleList();
     // also cleanup all caches
     $config->cleanupCaches($sessionReset || CRM_Utils_Request::retrieve('sessionReset', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET'));
     CRM_Core_Menu::store();
     // also reset navigation
     CRM_Core_BAO_Navigation::resetNavigation();
     // also cleanup module permissions
     $config->cleanupPermissions();
     // rebuild word replacement cache - pass false to prevent operations redundant with this fn
     CRM_Core_BAO_WordReplacement::rebuild(FALSE);
     Civi::service('settings_manager')->flush();
     // Clear js caches
     CRM_Core_Resources::singleton()->flushStrings()->resetCacheCode();
     CRM_Case_XMLRepository::singleton(TRUE);
     // also rebuild triggers if requested explicitly
     if ($triggerRebuild || CRM_Utils_Request::retrieve('triggerRebuild', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET')) {
         CRM_Core_DAO::triggerRebuild();
     }
     CRM_Core_DAO_AllCoreTables::reinitializeCache(TRUE);
     CRM_Core_ManagedEntities::singleton(TRUE)->reconcile();
     //CRM-16257 update Config.IDS.ini might be an old copy
     CRM_Core_IDS::createConfigFile(TRUE);
 }
Ejemplo n.º 4
0
 /**
  * Run all system checks.
  *
  * This functon is wrapped by the System.check api.
  *
  * Calls hook_civicrm_check() for extensions to add or modify messages.
  * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_check
  *
  * @param bool $max
  *   Whether to return just the maximum non-hushed severity
  *
  * @return array
  *   Array of CRM_Utils_Check_Message objects
  */
 public static function checkAll($max = FALSE)
 {
     $checks = array();
     $checks[] = new CRM_Utils_Check_Security();
     $checks[] = new CRM_Utils_Check_Env();
     $compInfo = CRM_Core_Component::getEnabledComponents();
     foreach ($compInfo as $compObj) {
         switch ($compObj->info['name']) {
             case 'CiviCase':
                 $checks[] = new CRM_Utils_Check_Case(CRM_Case_XMLRepository::singleton(), CRM_Case_PseudoConstant::caseType('name'));
                 break;
             default:
         }
     }
     $messages = array();
     foreach ($checks as $check) {
         $messages = array_merge($messages, $check->checkAll());
     }
     CRM_Utils_Hook::check($messages);
     uasort($messages, array(__CLASS__, 'severitySort'));
     $maxSeverity = 1;
     foreach ($messages as $message) {
         if (!$message->isVisible()) {
             continue;
         }
         $maxSeverity = max(1, $message->getLevel());
         break;
     }
     Civi::settings()->set('systemStatusCheckResult', $maxSeverity);
     return $max ? $maxSeverity : $messages;
 }
Ejemplo n.º 5
0
 /**
  * @return SimpleXMLElement|NULL
  */
 public function getXml()
 {
     if ($this->xml === NULL) {
         $this->xml = \CRM_Case_XMLRepository::singleton()->retrieve($this->getCaseType());
     }
     return $this->xml;
 }
Ejemplo n.º 6
0
/**
 * Format definition.
 *
 * @param array $result
 *
 * @return array
 * @throws \CRM_Core_Exception
 */
function _civicrm_api3_case_type_get_formatResult(&$result)
{
    foreach ($result['values'] as $key => $caseType) {
        $caseTypeName = isset($caseType['name']) ? $caseType['name'] : CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $caseType['id'], 'name', 'id', TRUE);
        $xml = CRM_Case_XMLRepository::singleton()->retrieve($caseTypeName);
        if ($xml) {
            $result['values'][$key]['definition'] = CRM_Case_BAO_CaseType::convertXmlToDefinition($xml);
        } else {
            $result['values'][$key]['definition'] = array();
        }
        $result['values'][$key]['is_forkable'] = CRM_Case_BAO_CaseType::isForkable($result['values'][$key]['id']);
        $result['values'][$key]['is_forked'] = CRM_Case_BAO_CaseType::isForked($result['values'][$key]['id']);
    }
    return $result;
}
Ejemplo n.º 7
0
 /**
  * @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;
 }
 /**
  * Tears down the fixture, for example, closes a network connection.
  * This method is called after a test is executed.
  *
  * @access protected
  */
 function tearDown()
 {
     $this->quickCleanup($this->tablesToTruncate, TRUE);
     $this->customDirectories(array('template_path' => FALSE));
     CRM_Case_XMLRepository::singleton(TRUE);
 }
Ejemplo n.º 9
0
 /**
  * Run some sanity checks.
  *
  * This could become a hook so that CiviCRM can run both built-in
  * configuration & sanity checks, and modules/extensions can add
  * their own checks.
  *
  * We might even expose the results of these checks on the Wordpress
  * plugin status page or the Drupal admin/reports/status path.
  *
  * @return array
  *   Array of messages
  * @link https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_requirements
  */
 public function checkAll()
 {
     $checks = array();
     $checks[] = new CRM_Utils_Check_Security();
     $checks[] = new CRM_Utils_Check_Env();
     $compInfo = CRM_Core_Component::getEnabledComponents();
     foreach ($compInfo as $compObj) {
         switch ($compObj->info['name']) {
             case 'CiviCase':
                 $checks[] = new CRM_Utils_Check_Case(CRM_Case_XMLRepository::singleton(), CRM_Case_PseudoConstant::caseType('name'));
                 break;
             default:
         }
     }
     $messages = array();
     foreach ($checks as $check) {
         $messages = array_merge($messages, $check->checkAll());
     }
     CRM_Utils_Hook::check($messages);
     return $messages;
 }
Ejemplo n.º 10
0
 /**
  * Run some sanity checks.
  *
  * This could become a hook so that CiviCRM can run both built-in
  * configuration & sanity checks, and modules/extensions can add
  * their own checks.
  *
  * We might even expose the results of these checks on the Wordpress
  * plugin status page or the Drupal admin/reports/status path.
  *
  * @return array
  *   Array of messages
  * @link https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_requirements
  */
 public function checkAll($showHushed = FALSE)
 {
     $checks = array();
     $checks[] = new CRM_Utils_Check_Security();
     $checks[] = new CRM_Utils_Check_Env();
     $compInfo = CRM_Core_Component::getEnabledComponents();
     foreach ($compInfo as $compObj) {
         switch ($compObj->info['name']) {
             case 'CiviCase':
                 $checks[] = new CRM_Utils_Check_Case(CRM_Case_XMLRepository::singleton(), CRM_Case_PseudoConstant::caseType('name'));
                 break;
             default:
         }
     }
     $messages = array();
     foreach ($checks as $check) {
         $messages = array_merge($messages, $check->checkAll());
     }
     CRM_Utils_Hook::check($messages);
     if (!$showHushed) {
         foreach ($messages as $key => $message) {
             $hush = self::checkHushSnooze($message);
             if ($hush) {
                 unset($messages[$key]);
             }
         }
     }
     uasort($messages, array(__CLASS__, 'severitySort'));
     return $messages;
 }
Ejemplo n.º 11
0
 /**
  * Test create methods with xml file.
  *
  * Success expected.
  */
 public function testCaseTypeCreateWithDefinition()
 {
     // Create Case Type
     $params = $this->fixtures['Application_with_Definition'];
     $result = $this->callAPISuccess('CaseType', 'create', $params);
     $id = $result['id'];
     // Check result
     $result = $this->callAPISuccess('CaseType', 'get', array('id' => $id));
     $this->assertEquals($result['values'][$id]['id'], $id);
     $this->assertEquals($result['values'][$id]['title'], $params['title']);
     $this->assertEquals($result['values'][$id]['definition'], $params['definition']);
     $caseXml = CRM_Case_XMLRepository::singleton()->retrieve('Application_with_Definition');
     $this->assertTrue($caseXml instanceof SimpleXMLElement);
 }
Ejemplo n.º 12
0
 /**
  * Determine if modifications are allowed on the case-type
  *
  * @param int $caseTypeId
  * @return bool
  *   TRUE if the definition can be modified
  */
 public static function isForkable($caseTypeId)
 {
     $caseTypeName = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_CaseType', $caseTypeId, 'name', 'id', TRUE);
     if ($caseTypeName) {
         // if file-based definition explicitly disables "forkable" option, then don't allow changes to definition
         $fileDefinition = CRM_Case_XMLRepository::singleton()->retrieveFile($caseTypeName);
         if ($fileDefinition && isset($fileDefinition->forkable)) {
             return CRM_Utils_String::strtobool((string) $fileDefinition->forkable);
         }
     }
     return TRUE;
 }
Ejemplo n.º 13
0
 /**
  * @param $caseType
  *
  * @return FALSE|SimpleXMLElement
  */
 public function retrieve($caseType)
 {
     return CRM_Case_XMLRepository::singleton()->retrieve($caseType);
 }
Ejemplo n.º 14
0
 /**
  * @param bool $triggerRebuild
  * @param bool $sessionReset
  *
  * @throws Exception
  */
 static function rebuildMenuAndCaches($triggerRebuild = FALSE, $sessionReset = FALSE)
 {
     $config = CRM_Core_Config::singleton();
     $config->clearModuleList();
     // also cleanup all caches
     $config->cleanupCaches($sessionReset || CRM_Utils_Request::retrieve('sessionReset', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET'));
     CRM_Core_Menu::store();
     // also reset navigation
     CRM_Core_BAO_Navigation::resetNavigation();
     // also cleanup module permissions
     $config->cleanupPermissions();
     // also rebuild word replacement cache
     CRM_Core_BAO_WordReplacement::rebuild();
     // Clear dynamic js files
     CRM_Utils_File::flushDynamicResources();
     CRM_Core_BAO_Setting::updateSettingsFromMetaData();
     CRM_Core_Resources::singleton()->resetCacheCode();
     CRM_Case_XMLRepository::singleton(TRUE);
     // also rebuild triggers if requested explicitly
     if ($triggerRebuild || CRM_Utils_Request::retrieve('triggerRebuild', 'Boolean', CRM_Core_DAO::$_nullObject, FALSE, 0, 'GET')) {
         CRM_Core_DAO::triggerRebuild();
     }
     CRM_Core_DAO_AllCoreTables::reinitializeCache(TRUE);
     CRM_Core_ManagedEntities::singleton(TRUE)->reconcile();
 }