1 {extends file="page.tpl"}
3 {if $pref_mail_method == constant('Galette\Core\Mailing::METHOD_DISABLED') and $GALETTE_MODE neq 'DEMO'}
5 <h1>{_T string="- ERROR -"}</h1>
6 <p>{_T string="Email sent is disabled in the preferences. Ask galette admin"}</p>
8 {elseif !isset($mailing_saved)}
9 <form action="{path_for name="doMailing"}" id="listform" method="post" enctype="multipart/form-data">
11 <section class="mailing_infos">
12 <header class="ui-state-default ui-state-active">{_T string="Mailing information"}</header>
13 {include file="mailing_recipients.tpl"}
15 {if $mailing->current_step eq constant('Galette\Core\Mailing::STEP_SENT')}
16 {assign var="path" value={path_for name="members"}}
17 {assign var="text" value={_T string="Go back to members list"}}
19 {assign var="path" value='#'}
20 {assign var="text" value={_T string="Manage selected members"}}
27 <i class="fas fa-users"></i>
32 {if $mailing->current_step eq constant('Galette\Core\Mailing::STEP_START')}
33 <section class="mailing_attachments">
34 <header class="ui-state-default ui-state-active">{_T string="Attachments"}</header>
36 {if $attachments|@count gt 0}
38 {_T string="Existing attachments:"}
39 <ul id="existing_attachments">
40 {foreach item=attachment from=$attachments}
44 href="?remove_attachment={$attachment->getFileName()}"
45 class="rm_attachement tooltip delete"
47 <i class="fas fa-trash-alt"></i>
48 <span class="sr-only">{_T string="Remove attachment"}</span>
50 {$attachment->getFileName()}
56 <label for="attachment" class="bline tooltip" title="{_T string="Select attachments"}">{_T string="Add attachment"}</label>
57 <span class="tip">{_T string="Select files to add as attachments.<br/>Multiple file selection using 'ctrl' or 'shift' keys are only available on compatible browsers."}</span>
58 <input type="file" name="attachment[]" id="attachment" multiple="multiple">
62 <section class="mailing_write">
63 <header class="ui-state-default ui-state-active">{_T string="Write your mailing"}</header>
65 <label for="sender" class="bline">{_T string="Sender"}</label>
66 <select name="sender" id="sender">
67 <option value="{Galette\Core\GaletteMail::SENDER_PREFS}">{_T string="from preferences"}</option>
68 {if !$login->isSuperAdmin()}
69 <option value="{Galette\Core\GaletteMail::SENDER_CURRENT}">{_T string="current logged in user"}</option>
71 <option value="{Galette\Core\GaletteMail::SENDER_OTHER}">{_T string="other"}</option>
73 <span class="disabled">
74 <label for="sender_name">{_T string="Name"}</label>
75 <input type="text" name="sender_name" id="sender_name" value="{$preferences->pref_email_nom}" disabled="disabled"/>
76 <label for="sender_address">{_T string="Address"}</label>
77 <input type="text" name="sender_address" id="sender_address" value="{$preferences->pref_email}" disabled="disabled"/>
81 <label for="mailing_objet" class="bline">{_T string="Object:"}</label>
82 <input type="text" name="mailing_objet" id="mailing_objet" value="{$mailing->subject}" size="80" required/>
85 <span id="summernote_toggler" class="fright">
86 <a href="javascript:activateMailingEditor('mailing_corps');" id="activate_editor">{_T string="Activate HTML editor"}</a>
88 <label for="mailing_corps" class="bline">{_T string="Message:"}</label>
89 <textarea name="mailing_corps" id="mailing_corps" cols="80" rows="15" required>{if $mailing->message}{$mailing->message|escape}{/if}</textarea>
90 <input type="hidden" name="html_editor_active" id="html_editor_active" value="{if $html_editor_active}1{else}0{/if}"/>
93 <input type="checkbox" name="mailing_html" id="mailing_html" value="1" {if $mailing->html eq 1 or $pref_editor_enabled eq 1}checked="checked"{/if}/><label for="mailing_html">{_T string="Interpret HTML"}</label><br/>
94 <button type="submit" name="mailing_go" id="btnpreview">
95 <i class="fas fa-eye" arai-hidden="true"></i>
98 <button type="submit" name="mailing_save" class="action">
99 <i class="fas fa-save" aria-hidden="true"></i>
102 <button type="submit" name="mailing_confirm"{if $GALETTE_MODE eq 'DEMO'} class="disabled" disabled="disabled"{/if}>
103 <i class="fas fa-rocket" aria-hidden="true"></i>
106 <button type="submit" name="mailing_cancel" formnovalidate>
107 <i class="fas fa-trash" aria-hidden="true"></i>
108 {_T string="Cancel mailing"}
113 {if $mailing->current_step eq constant('Galette\Core\Mailing::STEP_PREVIEW')}
114 <section class="mailing_write" id="mail_preview">
115 <header class="ui-state-default ui-state-active">{_T string="Preview your mailing"}</header>
117 <p><span class="bline">{_T string="Object:"}</span>{$mailing->subject}</p>
119 <span class="bline">{_T string="Message:"}</span><br/>
123 <pre>{$mailing->wrapped_message}</pre>
129 <button type="submit" name="mailing_reset">
130 <i class="fas fa-backward"></i>
131 {_T string="Modifiy mailing"}
133 <button type="submit" name="mailing_confirm"{if $GALETTE_MODE eq 'DEMO'} class="disabled" disabled="disabled"{/if}>
134 <i class="fas fa-rocket" aria-hidden="true"></i>
137 <button type="submit" name="mailing_cancel" formnovalidate>
138 <i class="fas fa-trash" aria-hidden="true"></i>
139 {_T string="Cancel mailing"}
142 <input type="hidden" name="mailing_objet" value="{$mailing->subject}"/>
143 <input type="hidden" name="mailing_corps" value="{if $mailing->message}{$mailing->message|escape}{/if}"/>
154 {block name="javascripts"}
155 {if ($pref_mail_method != constant('Galette\Core\Mailing::METHOD_DISABLED') or $GALETTE_MODE eq 'DEMO') and !isset($mailing_saved)}
156 {if $mailing->current_step neq constant('Galette\Core\Mailing::STEP_SENT')}
157 <script type="text/javascript">
160 $('#btnpreview').click(function(){
161 var _sender = $('#sender').val();
162 var _sender_name = $('#sender_name').val();
163 var _sender_address = $('#sender_address').val();
164 var _subject = $('#mailing_objet').val();
165 var _body = $('#mailing_corps').val();
166 var _html = $('#mailing_html').is(':checked');
167 var _attachments = [];
168 $('#existing_attachments li').each(function(){
169 _attachments[_attachments.length] = $(this).text();
172 url: '{path_for name="mailingPreview"}',
176 sender_name: _sender_name,
177 sender_address: _sender_address,
181 attachments: _attachments
183 {include file="js_loader.tpl"},
184 success: function(res){
185 _preview_dialog(res);
188 alert("{_T string="An error occurred displaying preview :(" escape="js"}");
194 var _preview_dialog = function(res){
195 var _el = $('<div id="ajax_preview" title="{_T string="Mailing preview" escape="js"}"> </div>');
196 _el.appendTo('body').dialog({
201 close: function(event, ui){
205 $('#ajax_preview').append( res );
209 $('#btnusers').click(function(){
211 url: '{path_for name="ajaxMembers"}',
216 {include file="js_loader.tpl"},
217 success: function(res){
218 _members_dialog(res);
221 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
227 var _members_dialog = function(res){
228 var _el = $('<div id="members_list" title="{_T string="Members selection" escape="js"}"> </div>');
229 _el.appendTo('body').dialog({
234 close: function(event, ui){
238 _members_ajax_mapper(res);
241 var _members_ajax_mapper = function(res){
242 $('#members_list').append(res);
243 $('#selected_members ul').css(
245 $('#members_list').innerHeight() - $('#btnvalid').outerHeight() - $('#selected_members header').outerHeight() - 60 // -60 to fix display; do not know why
247 $('#btnvalid').button().click(function(){
248 //first, let's store new recipients in mailing object
249 var _recipients = new Array();
250 $('li[id^="member_"]').each(function(){
251 _recipients[_recipients.length] = this.id.substring(7, this.id.length);
254 url: '{path_for name="mailingRecipients"}',
257 recipients: _recipients
259 {include file="js_loader.tpl"},
260 success: function(res){
261 $('#unreachables_count').remove();
262 $('#recipients_count').replaceWith(res);
263 $('.mailing_infos input:submit, .mailing_infos .button, .mailing_infos input:reset' ).button();
264 $('#members_list').dialog("close");
267 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
272 var _none = $('#none_selected').clone();
273 $('li[id^="member_"]').click(function(){
275 if ( $('#selected_members ul li').length == 0 ) {
276 $('#selected_members ul').append(_none);
279 $('#listing tbody a').click(function(e){
281 var _mid = this.href.match(/.*\/(\d+)$/)[1];
282 var _mname = $(this).text();
283 $('#none_selected').remove()
284 if ( $('#member_' + _mid).length == 0 ) {
285 var _li = '<li id="member_' + _mid + '">' + _mname + '</li>';
286 $('#selected_members ul').append(_li);
287 $('#member_' + _mid).click(function(){
289 if ( $('#selected_members ul li').length == 0 ) {
290 $('#selected_members ul').append(_none);
297 $('#members_list .pages a').click(function(){
298 var _members = new Array();
299 var _unreach = new Array();
300 $('li[id^="member_"]').each(function(){
301 var _mid = this.id.substring(7, this.id.length);
302 if ($(this).hasClass('unreachables')) {
303 _unreach[_unreach.length] = _mid;
305 _members[_members.length] = _mid;
315 unreachables: _unreach
317 {include file="js_loader.tpl"},
318 success: function(res){
319 $('#members_list').empty();
320 _members_ajax_mapper(res);
323 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
330 $('.rm_attachement').click(function(){
332 var _el = $('<div title="{_T string="Remove attachment"}"><p>{_T string="Are you sure you want to remove this attachment?"}</p><p>{_T string="This will immediately remove attachment from disk and cannot be undo."}</p></div>');
333 _el.appendTo('body').dialog({
339 _this.dialog( "close" );
340 window.location.href = '{path_for name="mailing"}' + _link.attr('href');
342 {_T string="Cancel"}: function() {
343 $(this).dialog( "close" );
346 close: function(event, ui){
353 $('#sender').on('change', function() {
355 var _sender_name = $('#sender_name');
356 var _sender_address = $('#sender_address');
357 var _editable = false;
358 var _val = _this.val();
360 case '{Galette\Core\GaletteMail::SENDER_PREFS}':
361 _sender_name.val('{$preferences->pref_email_nom|escape:"javascript"}');
362 _sender_address.val('{$preferences->pref_email|escape:"javascript"}');
365 {if (!$login->isSuperAdmin())}
366 case '{Galette\Core\GaletteMail::SENDER_CURRENT}':
367 _sender_name.val('{$sender_current['name']|escape:"javascript"}');
368 _sender_address.val('{$sender_current['email']|escape:"javascript"}');
371 case '{Galette\Core\GaletteMail::SENDER_OTHER}':
372 _sender_name.val('');
373 _sender_address.val('');
379 _sender_name.removeAttr('disabled');
380 _sender_address.removeAttr('disabled');
381 $('#sender + span').removeClass('disabled');
383 _sender_name.attr('disabled', 'disabled');
384 _sender_address.attr('disabled', 'disabled');
385 $('#sender + span').addClass('disabled');