Skip to content

Commit

Permalink
Add MailutilsTemplate UI
Browse files Browse the repository at this point in the history
  • Loading branch information
pfigel committed Jan 12, 2022
1 parent 732603d commit 26551d7
Show file tree
Hide file tree
Showing 7 changed files with 247 additions and 1 deletion.
138 changes: 138 additions & 0 deletions CRM/Mailutils/Form/MailutilsTemplate.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<?php

use Civi\Api4\MailutilsTemplate;
use CRM_Mailutils_ExtensionUtil as E;

/**
* Form controller class
*
* @see https://docs.civicrm.org/dev/en/latest/framework/quickform/
*/
class CRM_Mailutils_Form_MailutilsTemplate extends CRM_Core_Form {

protected $_id = NULL;

/**
* @var array|mixed
*/
private $_values;

public function buildQuickForm() {
$this->add('hidden', 'id', $this->_id);
$this->add(
'text',
'name',
'Name',
[
'class' => 'huge'
],
TRUE
);
$templateCategories = MailutilsTemplate::getFields(FALSE)
->setLoadOptions(TRUE)
->addSelect('options')
->addWhere('name', '=', 'template_category_id')
->execute()
->first()['options'];
$this->add(
'select',
'template_category_id',
'Template Category',
$templateCategories,
TRUE
);
$this->add(
'textarea',
'message',
'Message',
[
'class' => 'huge'
],
TRUE
);
$this->addButtons(array(
array(
'type' => 'submit',
'name' => E::ts('Save'),
'isDefault' => TRUE,
),
));

// export form elements
$this->assign('elementNames', $this->getRenderableElementNames());
parent::buildQuickForm();
}

public function setDefaultValues() {
return $this->_values;
}

public function preProcess() {
$this->_id = CRM_Utils_Request::retrieve('id', 'Positive');
$this->_values = $this->get('values');
if (!is_array($this->_values)) {
$this->_values = [];
if (!empty($this->_id)) {
$mailutilsTemplate = MailutilsTemplate::get(FALSE)
->addWhere('id', '=', $this->_id)
->execute()
->first();
$this->_values = [
'id' => $mailutilsTemplate['id'],
'name' => $mailutilsTemplate['name'],
'template_category_id' => $mailutilsTemplate['template_category_id'],
'message' => $mailutilsTemplate['message'],
];
}
$this->set('values', $this->_values);
}

}

public function postProcess() {
$params = $this->exportValues();
if (!empty($params['id'])) {
$this->_id = $params['id'];
MailutilsTemplate::update(FALSE)
->addWhere('id', '=', $this->_id)
->addValue('name', $params['name'])
->addValue('template_category_id', $params['template_category_id'])
->addValue('message', $params['message'])
->execute();
}
else {
$mailutilsTemplate = MailutilsTemplate::create(FALSE)
->addValue('name', $params['name'])
->addValue('template_category_id', $params['template_category_id'])
->addValue('message', $params['message'])
->execute()
->first();
$this->_id = $mailutilsTemplate['id'];
}
parent::postProcess();
CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/mailutils/template'));
}

/**
* Get the fields/elements defined in this form.
*
* @return array (string)
*/
public function getRenderableElementNames() {
// The _elements list includes some items which should not be
// auto-rendered in the loop -- such as "qfKey" and "buttons". These
// items don't have labels. We'll identify renderable by filtering on
// the 'label'.
$elementNames = array();
foreach ($this->_elements as $element) {
/** @var HTML_QuickForm_Element $element */
$label = $element->getLabel();
if (!empty($label)) {
$elementNames[] = $element->getName();
}
}
$elementNames[] = 'id';
return $elementNames;
}

}
25 changes: 25 additions & 0 deletions CRM/Mailutils/Page/MailutilsTemplates.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

use Civi\Api4\MailutilsTemplate;
use CRM_Mailutils_ExtensionUtil as E;

class CRM_Mailutils_Page_MailutilsTemplates extends CRM_Core_Page {

public function run() {
// Example: Set the page-title dynamically; alternatively, declare a static title in xml/Menu/*.xml
// CRM_Utils_System::setTitle(E::ts('MailutilsTemplates'));

$mailutilsTemplates = MailutilsTemplate::get(FALSE)
->addSelect('*', 'template_category_id:label')
->addOrderBy('template_category_id:label', 'ASC')
->addOrderBy('name', 'ASC')
->execute();
foreach ($mailutilsTemplates as $id => $mailutilsTemplate) {
$mailutilsTemplates[$id]['category'] = $mailutilsTemplate['template_category_id:label'];
}
$this->assign('mailutilsTemplates', $mailutilsTemplates);

parent::run();
}

}
2 changes: 1 addition & 1 deletion info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<url desc="Support">https://github.com/greenpeace-cee/mailutils/issues</url>
<url desc="Licensing">https://www.gnu.org/licenses/agpl-3.0.html</url>
</urls>
<releaseDate>2022-01-11</releaseDate>
<releaseDate>2022-01-12</releaseDate>
<version>1.1-alpha.1</version>
<develStage>alpha</develStage>
<requires>
Expand Down
19 changes: 19 additions & 0 deletions mailutils.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,3 +171,22 @@ function mailutils_civicrm_permission(&$permissions) {
],
];
}

function mailutils_civicrm_navigationMenu(&$menu) {
_mailingwork_civix_insert_navigation_menu($menu, 'Mailings', array(
'label' => E::ts('Mailutils'),
'name' => 'Mailutils',
'permission' => 'access mailutils',
'operator' => 'OR',
'separator' => 2,
));
_mailingwork_civix_insert_navigation_menu($menu, 'Mailings/Mailutils', array(
'label' => E::ts('Templates'),
'name' => 'Mailutils_Templates',
'url' => 'civicrm/mailutils/template',
'permission' => 'access mailutils',
'operator' => 'OR',
'separator' => 0,
));
_mailingwork_civix_navigationMenu($menu);
}
27 changes: 27 additions & 0 deletions templates/CRM/Mailutils/Form/MailutilsTemplate.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{* HEADER *}

<div class="crm-submit-buttons">
{include file="CRM/common/formButtons.tpl" location="top"}
</div>

{* FIELD EXAMPLE: OPTION 1 (AUTOMATIC LAYOUT) *}

{foreach from=$elementNames item=elementName}
<div class="crm-section">
<div class="label">{$form.$elementName.label}</div>
<div class="content">{$form.$elementName.html}</div>
<div class="clear"></div>
</div>
{/foreach}

{* FIELD EXAMPLE: OPTION 2 (MANUAL LAYOUT)
<div>
<span>{$form.favorite_color.label}</span>
<span>{$form.favorite_color.html}</span>
</div>
{* FOOTER *}
<div class="crm-submit-buttons">
{include file="CRM/common/formButtons.tpl" location="bottom"}
</div>
22 changes: 22 additions & 0 deletions templates/CRM/Mailutils/Page/MailutilsTemplates.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<div class="crm-submit-buttons">
<a href="{crmURL p="civicrm/mailutils/template/add"}" class="button"><span><i class="crm-i fa-plus-circle" aria-hidden="true"></i> Add Template</span></a>
</div>
<table cellpadding="0" cellspacing="0" border="0">
<tr class="columnheader">
<th>{ts}Name{/ts}</th>
<th>{ts}Category{/ts}</th>
<th colspan="2">{ts}Message{/ts}</th>
</tr>
{foreach from=$mailutilsTemplates item=row}
<tr class="crm-entity {cycle values="odd-row,even-row"}">
<td>{$row.name|escape}</td>
<td>{$row.category|escape}</td>
<td>{$row.message|escape|nl2br}</td>
<td>
<span>
<a class="action-item crm-hover-button" href="{crmURL p="civicrm/mailutils/template/add" q="reset=1&id=`$row.id`"}">Edit</a>
</span>
</td>
</tr>
{/foreach}
</table>
15 changes: 15 additions & 0 deletions xml/Menu/mailutils.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<menu>
<item>
<path>civicrm/mailutils/template</path>
<page_callback>CRM_Mailutils_Page_MailutilsTemplates</page_callback>
<title>Mailutils Templates</title>
<access_arguments>access mailutils</access_arguments>
</item>
<item>
<path>civicrm/mailutils/template/add</path>
<page_callback>CRM_Mailutils_Form_MailutilsTemplate</page_callback>
<title>Manage Mailutils Template</title>
<access_arguments>access mailutils</access_arguments>
</item>
</menu>

0 comments on commit 26551d7

Please sign in to comment.