Skip to content

Commit 5df2359

Browse files
committed
- (Feature) Added ability to create a front-end form that will trigger the "Front-end Email Form" parcel type to send emails dynamically from users
1 parent c8a76f7 commit 5df2359

File tree

10 files changed

+140
-1
lines changed

10 files changed

+140
-1
lines changed

PostmasterPlugin.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public function addTwigExtension()
3838
public function registerSiteRoutes()
3939
{
4040
$routes = array(
41+
'postmaster/send' => array('action' => 'postmaster/forms/send'),
4142
'postmaster/queue/marshal' => array('action' => 'postmaster/queue/marshal'),
4243
'postmaster/notifications/marshal' => array('action' => 'postmaster/notification/marshal'),
4344
'postmaster/notification/marshal/(?P<notificationId>\d+)' => array('action' => 'postmaster/notification/marshal'),

bootstrap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
'Craft\Plugins\Postmaster\ParcelTypes\DefaultParcelType',
1616
'Craft\Plugins\Postmaster\ParcelTypes\UserEmailParcelType',
1717
'Craft\Plugins\Postmaster\ParcelTypes\SystemEmailParcelType',
18+
'Craft\Plugins\Postmaster\ParcelTypes\EmailFormParcelType',
1819
// 'Craft\Plugins\Postmaster\ParcelTypes\TestParcelType',
1920
));
2021

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
namespace Craft;
3+
4+
class Postmaster_FormsController extends BaseController
5+
{
6+
public function actionSend()
7+
{
8+
$model = new Postmaster_EmailFormModel(craft()->request->getPost());
9+
10+
if(!$model->validate())
11+
{
12+
// Prepare a flash error message for the user.
13+
craft()->userSession->setError(Craft::t('The email could not be sent.'));
14+
15+
craft()->urlManager->setRouteVariables(array(
16+
'email' => $model
17+
));
18+
}
19+
else
20+
{
21+
$event = new Event($this, array(
22+
'email' => $model
23+
));
24+
25+
craft()->postmaster_forms->onEmailFormSend($event);
26+
27+
$this->redirect(craft()->request->getPost('redirect'));
28+
}
29+
}
30+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
namespace Craft\Plugins\Postmaster\ParcelTypes;
3+
4+
use Craft\Event;
5+
use Craft\Postmaster_TransportModel;
6+
use Craft\PostmasterHelper;
7+
use Craft\Plugins\Postmaster\Components\BaseParcelType;
8+
9+
class EmailFormParcelType extends BaseParcelType {
10+
11+
public $name = 'Frontend Email Form';
12+
13+
public $id = 'emailForm';
14+
15+
public function init()
16+
{
17+
$parcelType = $this;
18+
19+
$this->craft()->on('postmaster_forms.emailFormSend', function(Event $event) use ($parcelType)
20+
{
21+
$parcelType->parcel->parse(array_merge($event->params, array(
22+
'post' => $this->craft()->request->getPost()
23+
)));
24+
25+
if($parcelType->validate())
26+
{
27+
$obj = new Postmaster_TransportModel(array(
28+
'service' => $parcelType->parcel->service,
29+
'settings' => $parcelType->settings,
30+
'data' => $event->params
31+
));
32+
33+
$parcelType->parcel->send($obj);
34+
}
35+
});
36+
}
37+
38+
public function validate()
39+
{
40+
return PostmasterHelper::validateExtraConditionals($this->settings->extraConditionals);
41+
}
42+
43+
public function getInputHtml(Array $data = array())
44+
{
45+
return $this->craft()->templates->render('postmaster/parcel_types/email_form/fields', $data);
46+
}
47+
48+
public function getSettingsInputHtml(Array $data = array())
49+
{
50+
return $this->craft()->templates->render('postmaster/parcel_types/email_form/settings', $data);
51+
}
52+
53+
public function getSettingsModelClassName()
54+
{
55+
return '\Craft\Postmaster_EmailFormParcelTypeSettingsModel';
56+
}
57+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
namespace Craft;
3+
4+
class Postmaster_EmailFormModel extends Postmaster_EmailModel
5+
{
6+
7+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
namespace Craft;
3+
4+
class Postmaster_EmailFormParcelTypeSettingsModel extends Postmaster_EmailModel
5+
{
6+
protected function defineAttributes()
7+
{
8+
$attributes = parent::defineAttributes();
9+
$attributes['extraConditionals'] = array(AttributeType::String);
10+
11+
return $attributes;
12+
}
13+
}

models/Postmaster_TransportModel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protected function defineAttributes()
4242
'service' => AttributeType::Mixed,
4343
'settings' => AttributeType::Mixed,
4444
'data' => AttributeType::Mixed,
45-
'senderId' => AttributeType::String,
45+
'senderId' => array(AttributeType::Mixed, 'default' => false),
4646
'sendDate' => array(AttributeType::Mixed, 'default' => false),
4747
'queueId' => array(AttributeType::Mixed, 'default' => false)
4848
);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
namespace Craft;
3+
4+
class Postmaster_FormsService extends BaseApplicationComponent
5+
{
6+
public function onEmailFormSend(Event $event)
7+
{
8+
$this->raiseEvent('onEmailFormSend', $event);
9+
10+
return $event;
11+
}
12+
13+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% import "postmaster/_includes/forms" as postmaster %}
2+
3+
{{ postmaster.emailFields({
4+
section: 'parcelTypeSettings',
5+
name: 'emailForm',
6+
settings: settings
7+
}) }}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% import "_includes/forms" as forms %}
2+
3+
{{ forms.textareaField({
4+
label: "Extra Conditionals"|t,
5+
instructions: "What extra conditionals should be used to validate this parcel? Return `false` is you want to prevent the email from sending."|t,
6+
id: 'extraConditionals',
7+
name: 'settings[parcelTypeSettings][emailForm][extraConditionals]',
8+
value: settings.extraConditionals,
9+
rows: 10
10+
}) }}

0 commit comments

Comments
 (0)