break;
default:
- throw new CRM_Core_Exception("Unrecognized entity type: $entityType");
+ if (strpos($entityType, 'Model') !== FALSE) {
+ $entity = str_replace('Model', '', $entityType);
+ $backboneModel = self::convertCiviModelToBackboneModel(
+ $entity,
+ ts('%1', [1 => $entity]),
+ $availableFields
+ );
+ if (!empty($backboneModel['schema'])) {
+ $civiSchema[$entityType] = $backboneModel;
+ }
+ }
+ if (!isset($civiSchema[$entityType])) {
+ throw new CRM_Core_Exception("Unrecognized entity type: $entityType");
+ }
}
}
}
+ /**
+ * Test that with an extension adding in UF Fields for an enttiy that isn't supplied by Core e.g. Grant
+ * That an appropriate entitytype can be specfied in the backbone.marionette profile editor e.g. GrantModel
+ */
+ public function testGetSchemaWithHooks() {
+ CRM_Utils_Hook::singleton()->setHook('civicrm_alterUFFields', [$this, 'hook_civicrm_alterUFFIelds']);
+ $schema = CRM_UF_Page_ProfileEditor::getSchema(['IndividualModel', 'GrantModel']);
+ $this->assertEquals('Grant', $schema['GrantModel']['schema']['grant_decision_date']['civiFieldType']);
+ }
+
+ /**
+ * Tries to load up the profile schema for a model where there is no corresponding set of fields avaliable.
+ *
+ * @expectedException \CRM_Core_Exception
+ */
+ public function testGetSchemaWithHooksWithInvalidModel() {
+ CRM_Utils_Hook::singleton()->setHook('civicrm_alterUFFields', [$this, 'hook_civicrm_alterUFFIelds']);
+ $schema = CRM_UF_Page_ProfileEditor::getSchema(['IndividualModel', 'GrantModel', 'PledgeModel']);
+ }
+
+ public function hook_civicrm_alterUFFIelds(&$fields) {
+ $fields['Grant'] = CRM_Grant_BAO_Grant::exportableFields();
+ }
+
}