summaryrefslogtreecommitdiff
path: root/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl
diff options
context:
space:
mode:
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl')
-rw-r--r--www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/edit.html178
-rw-r--r--www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/main.html10
-rw-r--r--www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/report.html194
3 files changed, 382 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/edit.html b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/edit.html
new file mode 100644
index 00000000..825f3a57
--- /dev/null
+++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/edit.html
@@ -0,0 +1,178 @@
+<!--
+ Implicit Controller: CrmMailingABEditCtrl
+
+ An ABTest includes two mailings, but we don't require the user to enter two complete mailings. For
+ simplicity, the email composition UI generally displays A (unless we specifically decided to expose an
+ individual field from B). At the end of the composition process, the controller's "sync" operation will
+ merge shared settings from "A" into "B".
+-->
+<div ng-form="crmMailingABEdit">
+ <div class="crm-block crm-form-block crmMailing">
+ <div crm-ui-wizard>
+ <div crm-ui-wizard-step="10" crm-title="ts('Setup')" ng-form="setupForm">
+ <div
+ crm-mailing-ab-block-setup="{
+ help: 1,
+ abName: 1,
+ campaign: 1,
+ testing_criteria: 1
+ }"
+ crm-abtest="abtest"></div>
+ </div>
+ <div crm-ui-wizard-step="11" crm-title="ts('Target')" ng-form="targetForm">
+ <div
+ crm-mailing-ab-block-setup="{
+ recipients: 1,
+ group_percentage: 1
+ }"
+ crm-abtest="abtest"></div>
+ </div>
+ <div crm-ui-wizard-step="20" crm-title="ts('Compose')" ng-if="abtest.ab.testing_criteria != 'full_email'" ng-form="composeForm">
+ <div crm-ui-tab-set>
+ <div crm-ui-tab id="tab-mailing" crm-title="ts('Mailing')">
+ <div
+ ng-if="abtest.ab.testing_criteria == 'from'"
+ crm-mailing-ab-block-mailing="{
+ msg_template_id: 1,
+ fromAddressA: 1,
+ fromAddressB: 1,
+ subject: 1
+ }"
+ crm-abtest="abtest"></div>
+ <div
+ ng-if="abtest.ab.testing_criteria == 'subject'"
+ crm-mailing-ab-block-mailing="{
+ msg_template_id: 1,
+ fromAddress: 1,
+ replyTo: 1,
+ subjectA: 1,
+ subjectB: 1
+ }"
+ crm-abtest="abtest"></div>
+ <div crm-ui-accordion="{title: ts('HTML')}">
+ <div crm-mailing-body-html crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Plain Text'), collapsed: !abtest.mailings.a.body_text}">
+ <div crm-mailing-body-text crm-mailing="abtest.mailings.a"></div>
+ </div>
+ </div>
+ <!--
+ FIXME: Attachment UI works, but we haven't implemented backend logic for copying/sharing
+ of attachments among mailings A/B/C.
+ <div crm-ui-tab id="tab-attachment" crm-title="ts('Attachments')">
+ <div crm-attachments="abtest.attachments.a"></div>
+ </div>
+ -->
+ <div crm-ui-tab id="tab-header" crm-title="ts('Header and Footer')">
+ <div crm-mailing-block-header-footer crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-tab id="tab-pub" crm-title="ts('Publication')">
+ <div crm-mailing-block-publication crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-tab id="tab-response" crm-title="ts('Responses')">
+ <div crm-mailing-block-responses crm-mailing="abtest.mailings.a"></div>
+ </div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Preview (A)')}">
+ <div crm-mailing-block-preview crm-mailing="abtest.mailings.a" on-preview="previewMailing('a', preview.mode)" on-send="sendTest('a', preview.recipient)"></div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Preview (B)')}">
+ <div crm-mailing-block-preview crm-mailing="abtest.mailings.b" on-preview="previewMailing('b', preview.mode)" on-send="sendTest('b', preview.recipient)"></div>
+ </div>
+ </div>
+ <div crm-ui-wizard-step="21" crm-title="ts('Compose (A)')" ng-if="abtest.ab.testing_criteria == 'full_email'" ng-form="composeAForm">
+ <div crm-ui-tab-set>
+ <div crm-ui-tab id="tab-mailingA" crm-title="ts('Mailing')">
+ <div
+ crm-mailing-ab-block-mailing="{
+ msg_template_idA: 1,
+ fromAddressA: 1,
+ replyToA: 1,
+ subjectA: 1
+ }"
+ crm-abtest="abtest"></div>
+ <div crm-ui-accordion="{title: ts('HTML')}">
+ <div crm-mailing-body-html crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Plain Text'), collapsed: !abtest.mailings.a.body_text}">
+ <div crm-mailing-body-text crm-mailing="abtest.mailings.a"></div>
+ </div>
+ </div>
+ <div crm-ui-tab id="tab-attachmentA" crm-title="ts('Attachments')">
+ <div crm-attachments="abtest.attachments.a"></div>
+ </div>
+ <div crm-ui-tab id="tab-headerA" crm-title="ts('Header and Footer')">
+ <div crm-mailing-block-header-footer crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-tab id="tab-pubA" crm-title="ts('Publication')">
+ <div crm-mailing-block-publication crm-mailing="abtest.mailings.a"></div>
+ </div>
+ <div crm-ui-tab id="tab-responseA" crm-title="ts('Responses')">
+ <div crm-mailing-block-responses crm-mailing="abtest.mailings.a"></div>
+ </div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Preview')}">
+ <div crm-mailing-block-preview crm-mailing="abtest.mailings.a" on-preview="previewMailing('a', preview.mode)" on-send="sendTest('a', preview.recipient)"></div>
+ </div>
+ </div>
+ <div crm-ui-wizard-step="22" crm-title="ts('Compose (B)')" ng-if="abtest.ab.testing_criteria == 'full_email'" ng-form="composeBForm">
+ <div crm-ui-tab-set>
+ <div crm-ui-tab id="tab-mailingB" crm-title="ts('Mailing')">
+ <div
+ crm-mailing-ab-block-mailing="{
+ msg_template_idB: 1,
+ fromAddressB: 1,
+ replyToB: 1,
+ subjectB: 1
+ }"
+ crm-abtest="abtest"></div>
+ <div crm-ui-accordion="{title: ts('HTML')}">
+ <div crm-mailing-body-html crm-mailing="abtest.mailings.b"></div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Plain Text'), collapsed: !abtest.mailings.b.body_text}">
+ <div crm-mailing-body-text crm-mailing="abtest.mailings.b"></div>
+ </div>
+ </div>
+ <div crm-ui-tab id="tab-attachmentB" crm-title="ts('Attachments')">
+ <div crm-attachments="abtest.attachments.b"></div>
+ </div>
+ <div crm-ui-tab id="tab-headerB" crm-title="ts('Header and Footer')">
+ <div crm-mailing-block-header-footer crm-mailing="abtest.mailings.b"></div>
+ </div>
+ <div crm-ui-tab id="tab-pubB" crm-title="ts('Publication')">
+ <div crm-mailing-block-publication crm-mailing="abtest.mailings.b"></div>
+ </div>
+ <div crm-ui-tab id="tab-responseB" crm-title="ts('Responses')">
+ <div crm-mailing-block-responses crm-mailing="abtest.mailings.b"></div>
+ </div>
+ </div>
+ <div crm-ui-accordion="{title: ts('Preview')}">
+ <div crm-mailing-block-preview crm-mailing="abtest.mailings.b" on-preview="previewMailing('b', preview.mode)" on-send="sendTest('b', preview.recipient)"></div>
+ </div>
+ </div>
+ <div crm-ui-wizard-step="30" crm-title="ts('Schedule')" ng-form="schedForm">
+ <div
+ crm-mailing-ab-block-setup="{
+ scheduled_date: 1,
+ declare_winning_time: 1
+ }"
+ crm-abtest="abtest"></div>
+ <center>
+ <a class="button crmMailing-submit-button" ng-click="submit()" ng-class="{blocking: block.check(), disabled: crmMailingAB.$invalid}">
+ <div>{{ts('Submit Mailing')}}</div>
+ </a>
+ </center>
+ </div>
+ <span crm-ui-wizard-buttons style="float:right;">
+ <button
+ crm-icon="fa-trash"
+ ng-show="checkPerm('delete in CiviMail')"
+ ng-disabled="block.check()"
+ crm-confirm="{title:ts('Delete Draft'), message:ts('Are you sure you want to permanently delete this mailing?')}"
+ on-yes="delete()">{{ts('Delete Draft')}}
+ </button>
+ <button crm-icon="fa-floppy-o" ng-disabled="block.check()" ng-click="save().then(leave) ">{{ts('Save Draft')}}</button>
+ </span>
+ </div>
+ </div>
+</div>
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/main.html b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/main.html
new file mode 100644
index 00000000..15822f6e
--- /dev/null
+++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/main.html
@@ -0,0 +1,10 @@
+<!--
+ Implicit Controller: CrmMailingABEditCtrl
+-->
+<div crm-ui-debug="abtest.ab"></div>
+<div crm-ui-debug="abtest.mailings"></div>
+
+<form name="crmMailingAB" novalidate>
+ <div ng-include="'~/crmMailingAB/EditCtrl/edit.html'" ng-if="!isSubmitted()"></div>
+ <div ng-include="'~/crmMailingAB/EditCtrl/report.html'" ng-if="isSubmitted()"></div>
+</form>
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/report.html b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/report.html
new file mode 100644
index 00000000..68b79245
--- /dev/null
+++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/EditCtrl/report.html
@@ -0,0 +1,194 @@
+<!--
+ Implicit Controller: CrmMailingABEditCtrl
+-->
+<div class="messages help">
+ <div class="msg-title crm-title">{{ts('A/B Test Results')}}: {{abtest.ab.name}}</div>
+ {{ts('This report displays the current results for your A/B test. You can return to this page to view the latest statistics by navigating to "Manage A/B Tests" and clicking "Results".')}}
+</div>
+<div ng-controller="CrmMailingABReportCtrl">
+ <table class="crm-mailing-ab-table">
+ <thead>
+ <tr ng-show="abtest.ab.status == 'Testing'">
+ <td></td>
+ <td ng-repeat="am in getActiveMailings()">
+ <button crm-icon="fa-trophy" ng-click="selectWinner(am.name)">{{ts('Select as Final')}}</button>
+ </td>
+ <td></td>
+ </tr>
+ </thead>
+
+ <thead>
+ <tr>
+ <th>{{ts('Delivery')}}</th>
+ <th ng-repeat="am in getActiveMailings()" class="crm-mailing-ab-col">{{am.title}}</th>
+ <th ng-show="abtest.ab.status == 'Testing'">{{ts('Final')}}</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td>{{ts('Status')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <span ng-repeat="job in am.mailing.jobs" ng-hide="job.is_test == 1 || job.parent_id != null">{{job.status}}</span>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'">{{ts('Not selected')}}</td>
+ </tr>
+ <tr>
+ <td>{{ts('Scheduled')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div ng-repeat="job in am.mailing.jobs" ng-hide="job.is_test == 1 || job.parent_id != null">{{job.scheduled_date}}</div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Started at')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div ng-repeat="job in am.mailing.jobs" ng-hide="job.is_test == 1 || job.parent_id != null">{{job.start_date || ts('Not started')}}</div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Completed at')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div ng-repeat="job in am.mailing.jobs" ng-hide="job.is_test == 1 || job.parent_id != null">{{job.end_date || ts('Not completed')}}</div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ </tbody>
+
+ <thead>
+ <tr>
+ <th>{{ts('Performance')}}</th>
+ <th ng-repeat="am in getActiveMailings()" class="crm-mailing-ab-col">{{am.title}}</th>
+ <th ng-show="abtest.ab.status == 'Testing'">{{ts('Final')}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr ng-repeat="statType in statTypes">
+ <td>{{statType.title}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <a
+ class="crm-hover-button action-item"
+ ng-href="{{statUrl(am.mailing, statType, 'search')}}"
+ ng-if="checkPerm('view all contacts') || checkPerm('edit all contacts')"
+ title="{{ts('Search for contacts using \'%1\'', {1: statType.title})}}"
+ crm-icon="fa-search"
+ ></a>
+ <a
+ class="crm-hover-button action-item"
+ ng-href="{{statUrl(am.mailing, statType, 'events')}}"
+ title="{{ts('Browse events of type \'%1\'', {1: statType.title})}}"
+ >{{stats[am.name][statType.name] || ts('n/a')}} </a> {{stats[am.name][rateStats[statType.name]] || ' '}}
+ <a
+ class="crm-hover-button action-item"
+ ng-href="{{statUrl(am.mailing, statType, 'report')}}"
+ title="{{ts('Reports for \'%1\'', {1: statType.title})}}"
+ crm-icon="clipboard"
+ ></a>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ </tbody>
+
+ <thead>
+ <tr>
+ <th>{{ts('Details')}}</th>
+ <th ng-repeat="am in getActiveMailings()" class="crm-mailing-ab-col">{{am.title}}</th>
+ <th ng-show="abtest.ab.status == 'Testing'">{{ts('Final')}}</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td>{{ts('Mailing Name')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ {{am.mailing.name}}
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('From')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ "{{am.mailing.from_name}}" &lt;{{am.mailing.from_email}}&gt;
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Subject')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ {{am.mailing.subject}}
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr ng-controller="ViewRecipCtrl">
+ <td>{{ts('Recipients')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div ng-show="getIncludesAsString(am.mailing)">
+ <strong>{{ts('Include:')}}</strong> {{getIncludesAsString(am.mailing)}}
+ </div>
+ <div ng-show="getExcludesAsString(am.mailing)">
+ <strong>{{ts('Exclude:')}}</strong> <s>{{getExcludesAsString(am.mailing)}}</s>
+ </div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Content')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <a crm-icon="fa-television" class="crm-hover-button action-item" ng-click="previewMailing(am.name,'html')" ng-show="am.mailing.body_html">{{ts('HTML')}}</a>
+ <a crm-icon="fa-file-text-o" class="crm-hover-button action-item" ng-click="previewMailing(am.name,'text')" ng-show="am.mailing.body_text">{{ts('Text')}}</a>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Attachments')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div ng-repeat="file in am.attachments.files"><a ng-href="{{file.url}}" target="_blank">{{file.name}}</a></div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Tracking')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div crm-mailing-review-bool crm-on="am.mailing.url_tracking=='1'" crm-title="ts('Click-Throughs')"></div>
+ <div crm-mailing-review-bool crm-on="am.mailing.open_tracking=='1'" crm-title="ts('Opens')"></div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Responding')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ <div crm-mailing-review-bool crm-on="am.mailing.override_verp=='0'" crm-title="ts('Track Replies')"></div>
+ <div crm-mailing-review-bool crm-on="am.mailing.override_verp=='0' && mailing.forward_replies=='1'" crm-title="ts('Forward Replies')"></div>
+ <div ng-controller="PreviewComponentCtrl">
+ <div ng-show="am.mailing.override_verp == '0' && mailing.auto_responder"><a crm-icon="fa-envelope" class="crm-hover-button action-item" ng-click="previewComponent(ts('Auto-Respond'), am.mailing.reply_id)">{{ts('Auto-Respond')}}</a></div>
+ <div><a crm-icon="fa-envelope" class="crm-hover-button action-item" ng-click="previewComponent(ts('Opt-out'), am.mailing.optout_id)">{{ts('Opt-out')}}</a></div>
+ <div><a crm-icon="fa-envelope" class="crm-hover-button action-item" ng-click="previewComponent(ts('Resubscribe'), am.mailing.resubscribe_id)">{{ts('Resubscribe')}}</a></div>
+ <div><a crm-icon="fa-envelope" class="crm-hover-button action-item" ng-click="previewComponent(ts('Unsubscribe'), am.mailing.unsubscribe_id)">{{ts('Unsubscribe')}}</a></div>
+ </div>
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ <tr>
+ <td>{{ts('Publication')}}</td>
+ <td ng-repeat="am in getActiveMailings()">
+ {{am.mailing.visibility}}
+ </td>
+ <td ng-show="abtest.ab.status == 'Testing'"></td>
+ </tr>
+ </tbody>
+
+ </table>
+
+ <!--
+ <div crm-ui-tab-set>
+ <div crm-ui-tab id="tab-opens" crm-title="ts('Opens (WIP)')">
+ <div crm-mailing-ab-stats="{criteria: 'open', split_count: 5}" crm-abtest="abtest"></div>
+ </div>
+ <div crm-ui-tab id="tab-clicks" crm-title="ts('Total Clicks (WIP)')">
+ <div crm-mailing-ab-stats="{criteria: 'total unique clicks', split_count: 5}" crm-abtest="abtest"></div>
+ </div>
+ </div>
+ -->
+
+</div>