diff --git a/CRM/EntityTemplates/BAO/EntityTemplates.php b/CRM/EntityTemplates/BAO/EntityTemplates.php
index 9f6af8c..2de2512 100644
--- a/CRM/EntityTemplates/BAO/EntityTemplates.php
+++ b/CRM/EntityTemplates/BAO/EntityTemplates.php
@@ -21,9 +21,9 @@ class CRM_EntityTemplates_BAO_EntityTemplates extends CRM_Core_DAO_EntityTemplat
* @param array $params
*
* @throws Exception
- * @return CRM_EntityTemplates_BAO_EntityTemplates|CRM_Core_Error
+ * @return CRM_EntityTemplates_BAO_EntityTemplates|CRM_Core_Error|null
*/
- public static function create($params) {
+ public static function add($params) {
if (empty($params['entity_table'])) {
throw new CRM_Core_Exception(ts('Entity Table is mandatory.'));
@@ -40,9 +40,9 @@ class CRM_EntityTemplates_BAO_EntityTemplates extends CRM_Core_DAO_EntityTemplat
}
if (empty($params['form_values'])) {
- return;
+ return NULL;
}
- $params['form_values'] = serialize($params['form_values']);
+ $params['form_values'] = json_encode($params['form_values']);
if (!empty($params['id'])) {
CRM_Utils_Hook::pre('edit', 'EntityTemplates', $params['id'], $params);
@@ -65,4 +65,71 @@ class CRM_EntityTemplates_BAO_EntityTemplates extends CRM_Core_DAO_EntityTemplat
return $entityTemplates;
}
+ /**
+ * Get Form values.
+ *
+ * @param int $templateId
+ *
+ * @return array
+ */
+ public static function getFormValues($templateId) {
+ $formValues = civicrm_api3('EntityTemplates', 'getvalue', [
+ 'id' => $templateId,
+ 'return' => 'form_values',
+ ]);
+ return json_decode($formValues, TRUE);
+ }
+
+ /**
+ * Get all entity template for entity type.
+ *
+ * @param string $entityType
+ *
+ * @return array
+ */
+ public static function getEntityTemplates($entityType) {
+ $templates = civicrm_api3('EntityTemplates', 'get', [
+ 'return' => ['id', 'title'],
+ 'entity_table' => $entityType,
+ ]);
+ return array_column($templates['values'], 'title', 'id');
+ }
+
+ /**
+ * Create Entity Template.
+ *
+ * @param string $formName
+ * @param string $entityTemplate *
+ * @param int $entityTemplateId
+ * @param string $contactType
+ *
+ * @return array|null
+ */
+ public static function getTemplateValues(
+ $formName,
+ $entityTemplate,
+ $entityTemplateId,
+ $contactType
+ ) {
+ try {
+ $params = [
+ 'option_group_id' => "entity_template_for",
+ ];
+ if ($entityTemplate || $contactType) {
+ $params['value'] = $entityTemplate ? $entityTemplate : $contactType;
+ }
+ else {
+ $params['description'] = $formName;
+ }
+ $result = civicrm_api3('OptionValue', 'getsingle', $params);
+
+ if ($formName == $result['description']) {
+ return $result;
+ }
+ }
+ catch (CiviCRM_API3_Exception $e) {
+ }
+ return NULL;
+ }
+
}
diff --git a/CRM/EntityTemplates/Page/EntityTemplates.php b/CRM/EntityTemplates/Page/EntityTemplates.php
index 4134d54..d25a3e0 100644
--- a/CRM/EntityTemplates/Page/EntityTemplates.php
+++ b/CRM/EntityTemplates/Page/EntityTemplates.php
@@ -31,7 +31,7 @@ class CRM_EntityTemplates_Page_EntityTemplates extends CRM_Core_Page_Basic {
CRM_Core_Action::UPDATE => [
'name' => ts('Edit'),
'url' => '%%url%%',
- 'qs' => '%%query%%&isTemplate=1&templateId=%%id%%',
+ 'qs' => '%%query%%&templateId=%%id%%',
'title' => ts('Edit template'),
],
CRM_Core_Action::DELETE => [
@@ -74,6 +74,7 @@ class CRM_EntityTemplates_Page_EntityTemplates extends CRM_Core_Page_Basic {
);
}
list($url, $query) = explode('?', $optionValueName);
+ $query .= "&entityTemplate={$entityType}";
$entityTypeOptions = '';
foreach ($entityTypes as $key => $value) {
$extra = '';
diff --git a/CRM/EntityTemplates/Utils.php b/CRM/EntityTemplates/Utils.php
new file mode 100644
index 0000000..7ca844a
--- /dev/null
+++ b/CRM/EntityTemplates/Utils.php
@@ -0,0 +1,106 @@
+getVar('_action') & CRM_Core_Action::ADD)
+ ) {
+ return;
+ }
+ $form->_entityTemplate = CRM_Utils_Request::retrieve('entityTemplate', 'String', $form);
+ $form->_entityTemplateId = CRM_Utils_Request::retrieve('templateId', 'Integer', $form);
+ $contactType = NULL;
+ if ('CRM_Contact_Form_Contact' == $formName) {
+ $contactType = $form->getVar('_contactType');
+ }
+ $form->_entityTemplateValues = CRM_EntityTemplates_BAO_EntityTemplates::getTemplateValues(
+ $formName,
+ $form->_entityTemplate,
+ $form->_entityTemplateId,
+ $contactType
+ );
+ }
+
+ /**
+ * Build the form object.
+ *
+ * @param string $formName
+ * @param object $form
+ */
+ public static function buildForm($formName, &$form) {
+ if (!empty($form->_entityTemplateValues)) {
+ if ($form->_entityTemplate) {
+ $form->add('hidden', 'entity_template', $form->_entityTemplate);
+ if ($form->_entityTemplateId) {
+ $form->add('hidden', 'entity_template_id', $form->_entityTemplateId);
+ }
+ $form->add('text', 'entity_template_title', ts('Template Title'), [], TRUE);
+ }
+ else {
+ $entities = CRM_EntityTemplates_BAO_EntityTemplates::getEntityTemplates($form->_entityTemplateValues['value']);
+ if (!empty($entities)) {
+ $form->add('select', 'entity_template_id', ts('Templates'), $entities, FALSE, ['placeholder' => ts('- select -'), 'class' => 'crm-select2']);
+ list($url, $query) = explode('?', $form->_entityTemplateValues['name']);
+ $url = CRM_Utils_System::url($url, $query);
+ $form->assign('redirectUrl', $url);
+ }
+ }
+ if ($form->_entityTemplateId) {
+ $formValues = CRM_EntityTemplates_BAO_EntityTemplates::getFormValues($form->_entityTemplateId);
+ $formValues['entity_template_id'] = $form->_entityTemplateId;
+ $form->setDefaults($formValues);
+ }
+ CRM_Core_Region::instance('page-body')->add([
+ 'template' => 'CRM/EntityTemplates/EntityTemplate.tpl',
+ ]);
+ }
+ }
+
+ /**
+ * Add entity template.
+ *
+ * @param string $objectName
+ * @param array $params
+ */
+ public static function addTemplate($objectName, $params) {
+ if (CRM_Utils_Array::value('entity_template', $params) == $objectName) {
+ $id = NULL;
+ if (!empty($params['entity_template_id'])) {
+ $id = $params['entity_template_id'];
+ }
+
+ // unset entity template fields
+ unset(
+ $params['is_entity_template'],
+ $params['entity_template_id'],
+ $params['qfKey'],
+ $params['entryURL']
+ );
+
+ $entityParams = [
+ 'entity_table' => $objectName,
+ 'title' => CRM_Utils_Array::value('entity_template_title', $params, rand()),
+ 'form_values' => $params,
+ ];
+ if ($id) {
+ $entityParams['id'] = $id;
+ }
+
+ civicrm_api3('EntityTemplates', 'create', $entityParams);
+
+ // print message
+ CRM_Core_Session::setStatus(ts('Entity template saved successfully'), ts('Entity template'), 'success');
+ // redirect to list page
+ $url = CRM_Utils_System::url('civicrm/entity/templates', "reset=1&entityType={$objectName}");
+ CRM_Utils_System::redirect($url);
+ }
+ }
+
+}
diff --git a/api/v3/EntityTemplates.php b/api/v3/EntityTemplates.php
index e72338d..421ec82 100644
--- a/api/v3/EntityTemplates.php
+++ b/api/v3/EntityTemplates.php
@@ -25,7 +25,7 @@ function civicrm_api3_entity_templates_create($params) {
* Array of retrieved EntityTemplates property values.
*/
function civicrm_api3_entity_templates_get($params) {
- return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params);
+ return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, TRUE, 'EntityTemplates');
}
/**
diff --git a/entitytemplates.php b/entitytemplates.php
index c05b325..1c7bede 100644
--- a/entitytemplates.php
+++ b/entitytemplates.php
@@ -175,7 +175,7 @@ function entitytemplates_civicrm_entityTypes(&$entityTypes) {
_entitytemplates_civix_civicrm_entityTypes($entityTypes);
$entityTypes[] = [
'name' => 'EntityTemplates',
- 'class' => 'CRM_Core_DAO_EntityTemplates',
+ 'class' => 'CRM_EntityTemplates_BAO_EntityTemplates',
'table' => 'civicrm_entity_templates',
];
}
@@ -197,3 +197,67 @@ function entitytemplates_civicrm_navigationMenu(&$menu) {
]);
_entitytemplates_civix_navigationMenu($menu);
}
+
+/**
+ * Implements hook_civicrm_preProcess().
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_preProcess
+ *
+ */
+function entitytemplates_civicrm_preProcess($formName, &$form) {
+ CRM_EntityTemplates_Utils::preProcess($formName, $form);
+}
+
+/**
+ * Implements hook_civicrm_buildForm().
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_buildForm
+ *
+ */
+function entitytemplates_civicrm_buildForm($formName, &$form) {
+ if ($formName == 'CRM_Admin_Form_Options' && $form->getVar('_gName') == 'entity_template_for') {
+ $form->add(
+ 'text',
+ 'name',
+ ts('Url'),
+ CRM_Core_DAO::getAttribute('CRM_Core_DAO_OptionValue', 'name')
+ );
+ }
+ CRM_EntityTemplates_Utils::buildForm($formName, $form);
+}
+
+/**
+ * Implements hook_civicrm_pre().
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_pre
+ *
+ */
+function entitytemplates_civicrm_pre($op, $objectName, $id, &$params) {
+ if ($op == 'create') {
+ CRM_EntityTemplates_Utils::addTemplate($objectName, $params);
+ }
+}
+
+/**
+ * Implements hook_civicrm_validateForm().
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_validateForm
+ *
+ */
+function entitytemplates_civicrm_validateForm($formName, &$fields, &$files, &$form, &$errors) {
+ if ($form->_entityTemplate) {
+ if (!empty($fields['entity_template_title'])) {
+ $params = [
+ 'title' => $fields['entity_template_title'],
+ 'entity_table' => $form->_entityTemplate,
+ ];
+ if ($form->_entityTemplateId) {
+ $params['id'] = ['NOT IN' => [$form->_entityTemplateId]];
+ }
+ $count = civicrm_api3('EntityTemplates', 'getcount', $params);
+ if ($count) {
+ $errors['entity_template_title'] = ts('Title already exists.');
+ }
+ }
+ }
+}
diff --git a/templates/CRM/EntityTemplates/EntityTemplate.tpl b/templates/CRM/EntityTemplates/EntityTemplate.tpl
new file mode 100644
index 0000000..bf163dc
--- /dev/null
+++ b/templates/CRM/EntityTemplates/EntityTemplate.tpl
@@ -0,0 +1,25 @@
+{if $form.entity_template_title}
+
+{else}
+
+{/if}
+{literal}
+
+{/literal}
diff --git a/templates/CRM/EntityTemplates/Page/EntityTemplates.tpl b/templates/CRM/EntityTemplates/Page/EntityTemplates.tpl
index 32f9eef..0909ea0 100644
--- a/templates/CRM/EntityTemplates/Page/EntityTemplates.tpl
+++ b/templates/CRM/EntityTemplates/Page/EntityTemplates.tpl
@@ -9,14 +9,20 @@
{ts}Title{/ts} |
|
- {foreach from=$rows item=row}
-
- {$row.title} |
- {$row.links} |
+ {if $rows}
+ {foreach from=$rows item=row}
+
+ {$row.title} |
+ {$row.links} |
+
+ {/foreach}
+ {else}
+
+ {ts}None found.{/ts} |
- {/foreach}
+ {/if}
- {crmButton p=$url q="`$query`&isTemplate=1" class="cancel" icon="times"}{ts}Add Template{/ts}{/crmButton}
+ {crmButton p=$url q="`$query`" class="cancel" icon="times"}{ts}Add Template{/ts}{/crmButton}
{crmButton p="civicrm" q="reset=1" class="cancel" icon="times"}{ts}Done{/ts}{/crmButton}