]> git.agnieray.net Git - galette.git/blob - galette/templates/default/mailing_adherents.tpl
d787c9a72248742c65b775d1d5508b6f2344c486
[galette.git] / galette / templates / default / mailing_adherents.tpl
1 {extends file="page.tpl"}
2 {block name="content"}
3 {if $pref_mail_method == constant('Galette\Core\Mailing::METHOD_DISABLED') and $GALETTE_MODE neq 'DEMO'}
4 <div id="errorbox">
5 <h1>{_T string="- ERROR -"}</h1>
6 <p>{_T string="Email sent is disabled in the preferences. Ask galette admin"}</p>
7 </div>
8 {elseif !isset($mailing_saved)}
9 <form action="{path_for name="doMailing"}" id="listform" method="post" enctype="multipart/form-data">
10 <div class="mailing">
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"}
14 <div class="center">
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"}}
18 {else}
19 {assign var="path" value='#'}
20 {assign var="text" value={_T string="Manage selected members"}}
21 {/if}
22 <a
23 id="btnusers"
24 href="{$path}"
25 class="button"
26 >
27 <i class="fas fa-users"></i>
28 {$text}
29 </a>
30 </div>
31 </section>
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>
35 <div>
36 {if $attachments|@count gt 0}
37 <p class="bline">
38 {_T string="Existing attachments:"}
39 <ul id="existing_attachments">
40 {foreach item=attachment from=$attachments}
41 <li>
42
43 <a
44 href="?remove_attachment={$attachment->getFileName()}"
45 class="rm_attachement tooltip delete"
46 >
47 <i class="fas fa-trash-alt"></i>
48 <span class="sr-only">{_T string="Remove attachment"}</span>
49 </a>
50 {$attachment->getFileName()}
51 </li>
52 {/foreach}
53 </ul>
54 </p>
55 {/if}
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">
59 </div>
60 </section>
61
62 <section class="mailing_write">
63 <header class="ui-state-default ui-state-active">{_T string="Write your mailing"}</header>
64 <div>
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>
70 {/if}
71 <option value="{Galette\Core\GaletteMail::SENDER_OTHER}">{_T string="other"}</option>
72 </select>
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"/>
78 </span>
79 </div>
80 <div>
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/>
83 </div>
84 <div>
85 <span id="summernote_toggler" class="fright">
86 <a href="javascript:activateMailingEditor('mailing_corps');" id="activate_editor">{_T string="Activate HTML editor"}</a>
87 </span>
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}"/>
91 </div>
92 <div class="center">
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>
96 {_T string="Preview"}
97 </button>
98 <button type="submit" name="mailing_save" class="action">
99 <i class="fas fa-save" aria-hidden="true"></i>
100 {_T string="Save"}
101 </button>
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>
104 {_T string="Send"}
105 </button>
106 <button type="submit" name="mailing_cancel" formnovalidate>
107 <i class="fas fa-trash" aria-hidden="true"></i>
108 {_T string="Cancel mailing"}
109 </button>
110 </div>
111 </section>
112 {/if}
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>
116 <div>
117 <p><span class="bline">{_T string="Object:"}</span>{$mailing->subject}</p>
118 <p>
119 <span class="bline">{_T string="Message:"}</span><br/>
120 {if $mailing->html}
121 {$mailing->message}
122 {else}
123 <pre>{$mailing->wrapped_message}</pre>
124 {/if}
125 </p>
126 </div>
127 <div>
128 <p>
129 <button type="submit" name="mailing_reset">
130 <i class="fas fa-backward"></i>
131 {_T string="Modifiy mailing"}
132 </button>
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>
135 {_T string="Send"}
136 </button>
137 <button type="submit" name="mailing_cancel" formnovalidate>
138 <i class="fas fa-trash" aria-hidden="true"></i>
139 {_T string="Cancel mailing"}
140 </button>
141
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}"/>
144 </p>
145 </div>
146 {/if}
147
148 </section>
149 </div>
150 </form>
151 {/if}
152 {/block}
153
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">
158 $(function() {
159 {* Preview popup *}
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();
170 });
171 $.ajax({
172 url: '{path_for name="mailingPreview"}',
173 type: "POST",
174 data: {
175 sender: _sender,
176 sender_name: _sender_name,
177 sender_address: _sender_address,
178 subject: _subject,
179 body: _body,
180 html: _html,
181 attachments: _attachments
182 },
183 {include file="js_loader.tpl"},
184 success: function(res){
185 _preview_dialog(res);
186 },
187 error: function() {
188 alert("{_T string="An error occurred displaying preview :(" escape="js"}");
189 }
190 });
191 return false;
192 });
193
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({
197 modal: true,
198 hide: 'fold',
199 width: '80%',
200 height: 500,
201 close: function(event, ui){
202 _el.remove();
203 }
204 });
205 $('#ajax_preview').append( res );
206 }
207
208 {* Members popup *}
209 $('#btnusers').click(function(){
210 $.ajax({
211 url: '{path_for name="ajaxMembers"}',
212 type: "POST",
213 data: {
214 multiple: true
215 },
216 {include file="js_loader.tpl"},
217 success: function(res){
218 _members_dialog(res);
219 },
220 error: function() {
221 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
222 }
223 });
224 return false;
225 });
226
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({
230 modal: true,
231 hide: 'fold',
232 width: '80%',
233 height: 500,
234 close: function(event, ui){
235 _el.remove();
236 }
237 });
238 _members_ajax_mapper(res);
239 }
240
241 var _members_ajax_mapper = function(res){
242 $('#members_list').append(res);
243 $('#selected_members ul').css(
244 'max-height',
245 $('#members_list').innerHeight() - $('#btnvalid').outerHeight() - $('#selected_members header').outerHeight() - 60 // -60 to fix display; do not know why
246 );
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);
252 });
253 $.ajax({
254 url: '{path_for name="mailingRecipients"}',
255 type: "POST",
256 data: {
257 recipients: _recipients
258 },
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");
265 },
266 error: function() {
267 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
268 }
269 });
270 });
271 //Remap links
272 var _none = $('#none_selected').clone();
273 $('li[id^="member_"]').click(function(){
274 $(this).remove();
275 if ( $('#selected_members ul li').length == 0 ) {
276 $('#selected_members ul').append(_none);
277 }
278 });
279 $('#listing tbody a').click(function(e){
280 e.preventDefault();
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(){
288 $(this).remove();
289 if ( $('#selected_members ul li').length == 0 ) {
290 $('#selected_members ul').append(_none);
291 }
292 });
293 }
294 return false;
295 });
296
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;
304 } else {
305 _members[_members.length] = _mid;
306 }
307 });
308
309 $.ajax({
310 url: this.href,
311 type: "POST",
312 data: {
313 multiple: true,
314 members: _members,
315 unreachables: _unreach
316 },
317 {include file="js_loader.tpl"},
318 success: function(res){
319 $('#members_list').empty();
320 _members_ajax_mapper(res);
321 },
322 error: function() {
323 alert("{_T string="An error occurred displaying members interface :(" escape="js"}");
324 }
325 });
326 return false;
327 });
328 }
329
330 $('.rm_attachement').click(function(){
331 var _link = $(this);
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({
334 modal: true,
335 hide: 'fold',
336 buttons: {
337 Ok: function() {
338 var _this = $(this);
339 _this.dialog( "close" );
340 window.location.href = '{path_for name="mailing"}' + _link.attr('href');
341 },
342 {_T string="Cancel"}: function() {
343 $(this).dialog( "close" );
344 }
345 },
346 close: function(event, ui){
347 _el.remove();
348 }
349 });
350 return false;
351 });
352
353 $('#sender').on('change', function() {
354 var _this = $(this);
355 var _sender_name = $('#sender_name');
356 var _sender_address = $('#sender_address');
357 var _editable = false;
358 var _val = _this.val();
359 switch (_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"}');
363 break;
364
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"}');
369 break;
370 {/if}
371 case '{Galette\Core\GaletteMail::SENDER_OTHER}':
372 _sender_name.val('');
373 _sender_address.val('');
374 _editable = true;
375 break;
376 }
377
378 if (_editable) {
379 _sender_name.removeAttr('disabled');
380 _sender_address.removeAttr('disabled');
381 $('#sender + span').removeClass('disabled');
382 } else {
383 _sender_name.attr('disabled', 'disabled');
384 _sender_address.attr('disabled', 'disabled');
385 $('#sender + span').addClass('disabled');
386 }
387 });
388 });
389 </script>
390 {/if}
391 {/if}
392 {/block}