Unverified Commit 6526e85d authored by IKEDA Soji's avatar IKEDA Soji Committed by GitHub
Browse files

Merge branch 'sympa-6.2' into issue-893

parents d1bfa2fe d2a043dd
...@@ -7,12 +7,13 @@ ...@@ -7,12 +7,13 @@
- . ~/bashrc - . ~/bashrc
- coverage-install - coverage-install
- coverage-setup - coverage-setup
- cpanm --quiet --notest --installdeps . --with-develop - cpanm --quiet --notest --installdeps --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold
- autoreconf -i - autoreconf -i
- ./configure - ./configure
- cd src; make; cd .. - cd src; make; cd ..
- make check-local TEST_FILES='xt/perltidy.t' || true - make check-local TEST_FILES='xt/perltidy.t' || true
- make check-local TEST_FILES='t/compile_executables.t t/compile_modules.t t/Language.t t/compile_scenarios.t t/parse_templates.t t/pod-syntax.t' - make check-local
- coverage-report - coverage-report
- make clean - make clean
...@@ -38,3 +39,5 @@ ...@@ -38,3 +39,5 @@
<<: *job <<: *job
"5.28": "5.28":
<<: *job <<: *job
"5.30":
<<: *job
...@@ -28,7 +28,7 @@ before_install: ...@@ -28,7 +28,7 @@ before_install:
install: install:
- cpan-install --coverage - cpan-install --coverage
- cpanm --installdeps --notest --with-develop --with-feature=soap --with-feature=ldap . - cpanm --installdeps --notest --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold - cpanm --notest --quiet Unicode::CaseFold
before_script: before_script:
...@@ -39,7 +39,7 @@ script: ...@@ -39,7 +39,7 @@ script:
- ./configure - ./configure
- cd src; make; cd .. - cd src; make; cd ..
- make check-local TEST_FILES='xt/perltidy.t' || true - make check-local TEST_FILES='xt/perltidy.t' || true
- make check-local TEST_FILES='t/compile_executables.t t/compile_modules.t t/Language.t t/compile_scenarios.t t/parse_templates.t t/pod-syntax.t' - make check-local
after_success: after_success:
- coverage-report - coverage-report
......
...@@ -27,26 +27,34 @@ SUBDIRS = src default doc po www ...@@ -27,26 +27,34 @@ SUBDIRS = src default doc po www
check_SCRIPTS = \ check_SCRIPTS = \
t/01_Conf.t \ t/01_Conf.t \
t/02_Sympa_DatabaseManager.t \ t/Config_XML.t \
t/DataSource_LDAP2.t \
t/DatabaseManager.t \
t/Database_LDAP.t \
t/Language.t \ t/Language.t \
t/LockedFile.t \ t/LockedFile.t \
t/Message_smime.t \
t/Message_urlize.t \
t/Regexps.t \ t/Regexps.t \
t/compile_modules.t \ t/Scenario.t \
t/compile_executables.t \ t/Tools_Data.t \
t/compile_scenarios.t \ t/Tools_File.t \
t/Config_XML.t \
t/Database_LDAP.t \
t/DataSource_LDAP2.t \
t/parse_templates.t \
t/pod-syntax.t \
t/tools_data.t \
t/tools_file.t \
t/Tools_Password.t \ t/Tools_Password.t \
t/Tools_SMIME.t \ t/Tools_SMIME.t \
t/Tools_Text.t \ t/Tools_Text.t \
t/tools_time.t t/Tools_Time.t \
t/WWW_Tools.t \
t/compile_executables.t \
t/compile_modules.t \
t/compile_scenarios.t \
t/parse_templates.t \
t/pod-syntax.t
check_DATA = \ check_DATA = \
src/lib/Sympa/Test/MockLDAP.pm \ src/lib/Sympa/Test/MockLDAP.pm \
t/data/list_data/test/config \
t/data/sympa.conf \
t/data/sympa.sqlite \
t/data/etc/auth.conf \
t/locale/cs/LC_MESSAGES/sympa.mo \ t/locale/cs/LC_MESSAGES/sympa.mo \
t/locale/cs/LC_MESSAGES/web_help.mo \ t/locale/cs/LC_MESSAGES/web_help.mo \
t/locale/zh_TW/LC_MESSAGES/sympa.mo \ t/locale/zh_TW/LC_MESSAGES/sympa.mo \
...@@ -57,10 +65,17 @@ check_DATA = \ ...@@ -57,10 +65,17 @@ check_DATA = \
t/pki/key/ca.pem \ t/pki/key/ca.pem \
t/pki/key/rousse_nopassword.pem \ t/pki/key/rousse_nopassword.pem \
t/pki/key/rousse_password.pem \ t/pki/key/rousse_password.pem \
t/samples/urlize-deep-nested-mixed.eml \
t/samples/urlize-encoding.eml \
t/samples/urlize-nested-alternative-and-related.eml \
t/samples/urlize-nested-alternative.eml \
t/samples/urlize-nested-mixed.eml \
t/samples/urlize-nested-mutiple-attachments.eml \
t/samples/urlize-simple-mutiple-attachments.eml \
t/samples/urlize-simple.eml \
t/samples/signed.eml \
t/samples/unsigned.eml \
t/stub/Sympa/Constants.pm \ t/stub/Sympa/Constants.pm \
t/data/sympa.conf \
t/data/sympa.sqlite \
t/data/etc/auth.conf \
xt/perlcriticrc xt/perlcriticrc
noinst_SCRIPTS = \ noinst_SCRIPTS = \
xt/critic.t \ xt/critic.t \
......
# Change Log # Change Log
## [6.2.54](https://github.com/sympa-community/sympa/tree/6.2.54) (2020-02-24)
[Full Changelog](https://github.com/sympa-community/sympa/compare/6.2.52...6.2.54)
**Changes** (since 6.2.52) **:**
- Format of `family_signoff` link has been changed [\#854](https://github.com/sympa-community/sympa/pull/854). See [the documentation](https://sympa-community.github.io/manual/customize/basics-families.html#family-unsubscription) for details.
**Implemented enhancements:**
- Prevent welcome emails on import with `--quiet`. [\#851](https://github.com/sympa-community/sympa/pull/851) ([racke](https://github.com/racke))
**Fixed bugs:**
- \[SA 2020-001\] Security flaws in CSRF prevension [\#886](https://github.com/sympa-community/sympa/issues/886)
- Death of the wwsympa process bug [\#876](https://github.com/sympa-community/sympa/issues/876)
- Spurious errors for PGP/MIME multipart/signed messages [\#867](https://github.com/sympa-community/sympa/issues/867)
- WWSympa: review: Unable to sort by "Sources" column in subscriber list [\#866](https://github.com/sympa-community/sympa/issues/866)
- Bugs in scenario processing [\#849](https://github.com/sympa-community/sympa/issues/849) [\#846](https://github.com/sympa-community/sympa/issues/846) [\#845](https://github.com/sympa-community/sympa/issues/845) [\#844](https://github.com/sympa-community/sympa/issues/844) [\#841](https://github.com/sympa-community/sympa/issues/841)
- Data source: File: gecos was ignored [\#873](https://github.com/sympa-community/sympa/pull/873) ([ikedas](https://github.com/ikedas))
- Urlize mode bug fixes [\#840](https://github.com/sympa-community/sympa/pull/840) ([dverdin](https://github.com/dverdin)) [\#871](https://github.com/sympa-community/sympa/pull/871) ([ikedas](https://github.com/ikedas))
**Merged pull requests:**
- Update test suite [\#874](https://github.com/sympa-community/sympa/pull/874) ([ikedas](https://github.com/ikedas))
- Deprecate one-time ticket (work in progress) [\#853](https://github.com/sympa-community/sympa/pull/853) [\#854](https://github.com/sympa-community/sympa/pull/854) ([ikedas](https://github.com/ikedas))
- Deprecate `filesystem_encoding` parameter [\#829](https://github.com/sympa-community/sympa/pull/829) [\#838](https://github.com/sympa-community/sympa/pull/838) ([ikedas](https://github.com/ikedas))
## [6.2.52](https://github.com/sympa-community/sympa/tree/6.2.52) (2019-12-27) ## [6.2.52](https://github.com/sympa-community/sympa/tree/6.2.52) (2019-12-27)
[Full Changelog](https://github.com/sympa-community/sympa/compare/6.2.50...6.2.52) [Full Changelog](https://github.com/sympa-community/sympa/compare/6.2.50...6.2.52)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ(2.60) AC_PREREQ(2.60)
AC_INIT(sympa, 6.2.52, sympa-developpers@listes.renater.fr) AC_INIT(sympa, 6.2.54, sympa-developpers@listes.renater.fr)
AM_INIT_AUTOMAKE([foreign -Wall -Werror 1.9 tar-pax]) AM_INIT_AUTOMAKE([foreign -Wall -Werror 1.9 tar-pax])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_PO_SUBDIRS AM_PO_SUBDIRS
......
...@@ -179,9 +179,11 @@ recommends 'Net::SMTP'; ...@@ -179,9 +179,11 @@ recommends 'Net::SMTP';
# Normalizes file names represented by Unicode # Normalizes file names represented by Unicode
# Note: Perl 5.8.1 bundles version 0.23. # Note: Perl 5.8.1 bundles version 0.23.
# Note: Perl 5.10.1 bundles this version (per Unicode 5.1.0). # Note: Perl 5.10.1 bundles 1.03 (per Unicode 5.1.0).
recommends 'Unicode::Normalize', '>= 1.03'; recommends 'Unicode::Normalize', '>= 1.03';
recommends 'Unicode::UTF8', '>= 0.58';
### Features ### Features
## ##
...@@ -296,10 +298,11 @@ feature 'soap', 'Required if you want to run the Sympa SOAP server that provides ...@@ -296,10 +298,11 @@ feature 'soap', 'Required if you want to run the Sympa SOAP server that provides
requires 'SOAP::Lite', '>= 0.712'; requires 'SOAP::Lite', '>= 0.712';
}; };
feature 'Unicode::Normalize', 'Normalizes file names represented by Unicode.' => sub { feature 'safe-unicode', 'Sanitises inputs with Unicode text.' => sub {
# Note: Perl 5.8.1 bundles version 0.23. # Note: Perl 5.8.1 bundles version 0.23.
# Note: Perl 5.10.1 bundles this version (per Unicode 5.1.0). # Note: Perl 5.10.1 bundles 1.03 (per Unicode 5.1.0).
requires 'Unicode::Normalize', '>= 1.03'; requires 'Unicode::Normalize', '>= 1.03';
requires 'Unicode::UTF8', '>= 0.58';
}; };
on 'test' => sub { on 'test' => sub {
......
...@@ -86,6 +86,8 @@ nobase_default_DATA = \ ...@@ -86,6 +86,8 @@ nobase_default_DATA = \
scenari/d_read.private \ scenari/d_read.private \
scenari/d_read.private-https \ scenari/d_read.private-https \
scenari/d_read.public \ scenari/d_read.public \
scenari/family_signoff.auth \
scenari/family_signoff.closed \
scenari/global_remind.listmaster \ scenari/global_remind.listmaster \
scenari/info.open \ scenari/info.open \
scenari/info.private \ scenari/info.private \
...@@ -216,8 +218,6 @@ nobase_default_DATA = \ ...@@ -216,8 +218,6 @@ nobase_default_DATA = \
web_tt2/editsubscriber.tt2 \ web_tt2/editsubscriber.tt2 \
web_tt2/edit_template.tt2 \ web_tt2/edit_template.tt2 \
web_tt2/error.tt2 \ web_tt2/error.tt2 \
web_tt2/family_signoff.tt2 \
web_tt2/family_signoff_request.tt2 \
web_tt2/footer.tt2 \ web_tt2/footer.tt2 \
web_tt2/get_closed_lists.tt2 \ web_tt2/get_closed_lists.tt2 \
web_tt2/get_inactive_lists.tt2 \ web_tt2/get_inactive_lists.tt2 \
......
...@@ -10,7 +10,7 @@ Subject: [%"List \"%1@%2\" creation request from %3"|loc(list.name,domain,email) ...@@ -10,7 +10,7 @@ Subject: [%"List \"%1@%2\" creation request from %3"|loc(list.name,domain,email)
[% 'info' | url_abs([list.name]) %] [% 'info' | url_abs([list.name]) %]
[%|loc%]To activate/delete this mailing list:[%END%] [%|loc%]To activate/delete this mailing list:[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %] [% 'get_pending_lists' | url_abs %]
[%- ELSIF type == 'list_created' -%] [%- ELSIF type == 'list_created' -%]
[% PROCESS 'list_created.tt2' -%] [% PROCESS 'list_created.tt2' -%]
...@@ -30,7 +30,7 @@ Subject: [%"List \"%1\" renaming"|loc(list.name)|qencode%] ...@@ -30,7 +30,7 @@ Subject: [%"List \"%1\" renaming"|loc(list.name)|qencode%]
[% END %] [% END %]
[%|loc%]To activate/delete this mailing list:[%END%] [%|loc%]To activate/delete this mailing list:[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %] [% 'get_pending_lists' | url_abs %]
[% ELSIF type == 'no_db' -%] [% ELSIF type == 'no_db' -%]
Subject: [%"No database"|loc|qencode%] Subject: [%"No database"|loc|qencode%]
......
...@@ -32,7 +32,7 @@ Subject: [%"FYI: %1 List \"%2\" from %3 %4"|loc(type,list.name,who,gecos)|qencod ...@@ -32,7 +32,7 @@ Subject: [%"FYI: %1 List \"%2\" from %3 %4"|loc(type,list.name,who,gecos)|qencod
[%|loc(who,gecos,list.name)%]WARNING: %1 %2 failed to unsubscribe from %3 because their address was not found in the list. [%|loc(who,gecos,list.name)%]WARNING: %1 %2 failed to unsubscribe from %3 because their address was not found in the list.
You may help this person looking for similar email in subscriber list using the following link :[%END%] You may help this person looking for similar email in subscriber list using the following link :[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %] [% 'search' | url_abs([list.name,who]) %]
[% ELSIF type == 'erase_customizing' -%] [% ELSIF type == 'erase_customizing' -%]
Subject: [%"List \"%1\" customizations have been removed"|loc(list.name)|qencode%] Subject: [%"List \"%1\" customizations have been removed"|loc(list.name)|qencode%]
......
...@@ -15,7 +15,7 @@ Content-Disposition: inline ...@@ -15,7 +15,7 @@ Content-Disposition: inline
[% IF method == 'md5' -%] [% IF method == 'md5' -%]
[%|loc(mod_spool_size)%]%1 messages are awaiting moderation.[%END%] [%|loc(mod_spool_size)%]%1 messages are awaiting moderation.[%END%]
[%|loc%]To view the messages, please click on the following URL:[%END%] <[% 'ticket' | url_abs([one_time_ticket]) %]> [%|loc%]To view the messages, please click on the following URL:[%END%] <[% 'modindex' | url_abs([list.name]) %]>
[% IF request_topic -%][%|loc()%]This mailing list is configured to require topics; that's probably why this message went through the moderation process.[%END%] [% IF request_topic -%][%|loc()%]This mailing list is configured to require topics; that's probably why this message went through the moderation process.[%END%]
......
...@@ -242,10 +242,10 @@ ...@@ -242,10 +242,10 @@
[%~ ELSIF report_entry == 'unable_to_load_create_list_templates' ~%] [%~ ELSIF report_entry == 'unable_to_load_create_list_templates' ~%]
[%|loc%]Unable to load create_list templates.[%END%] [%|loc%]Unable to load create_list templates.[%END%]
[%~ ELSIF report_entry == 'sync_include_failed' ~%] [%~ ELSIF report_entry == 'sync_include_failed' # No longer used ~%]
[%|loc%]Failed to include members[%END%] [%|loc%]Failed to include members[%END%]
[%~ ELSIF report_entry == 'sync_include_admin_failed' ~%] [%~ ELSIF report_entry == 'sync_include_admin_failed' # No longer used ~%]
[%|loc%]Failed to include list admins[%END%] [%|loc%]Failed to include list admins[%END%]
[%~ ELSIF report_entry == 'no_owner_defined' ~%] [%~ ELSIF report_entry == 'no_owner_defined' ~%]
...@@ -408,12 +408,27 @@ ...@@ -408,12 +408,27 @@
[%~ ELSIF report_entry == 'no_msg_document' ~%] [%~ ELSIF report_entry == 'no_msg_document' ~%]
[%|loc(report_param.list)%]No message and no document to moderate for list %1[%END%] [%|loc(report_param.list)%]No message and no document to moderate for list %1[%END%]
[%~ ELSIF report_entry == 'subscribers_updated' ~%] [%~ ELSIF report_entry == 'member_updated' # No longer used ~%]
[%|loc%]The list of list members have been built/updated.[%END%] [%|loc%]The list of list subscribers have been built/updated.[%END%]
[%~ ELSIF report_entry == 'subscribers_updated_soon' ~%] [%~ ELSIF report_entry == 'owner_updated' # No longer used ~%]
[%|loc%]The list of list owners have been built/updated.[%END%]
[%~ ELSIF report_entry == 'editor_updated' # No longer used ~%]
[%|loc%]The list of list moderators have been built/updated.[%END%]
[%~ ELSIF report_entry == 'subscribers_updated_soon' # No longer used ~%]
[%|loc%]The list of list members will be built/updated soon (a few minutes).[%END%] [%|loc%]The list of list members will be built/updated soon (a few minutes).[%END%]
[%~ ELSIF report_entry == 'member_updated_soon' ~%]
[%|loc%]The list of list subscribers will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize members with data sources".[%END%]
[%~ ELSIF report_entry == 'owner_updated_soon' ~%]
[%|loc%]The list of list owners will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize owners with data sources".[%END%]
[%~ ELSIF report_entry == 'editor_updated_soon' ~%]
[%|loc%]The list of moderators will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize moderators with data sources".[%END%]
[%~ ELSIF report_entry == 'subscribers_noticed_deleted_topics' ~%] [%~ ELSIF report_entry == 'subscribers_noticed_deleted_topics' ~%]
[%|loc%]Concerned subscribers have been notified about deleted topics.[%END%] [%|loc%]Concerned subscribers have been notified about deleted topics.[%END%]
......
[%# request_auth.tt2 ~%] [%# request_auth.tt2 ~%]
To: [% to %] To: [% to %]
[% IF conf.wwsympa_url && type == 'signoff' -%] [% IF conf.wwsympa_url && type == 'family_signoff' -%]
Subject: [%"%1 / unsubscribing from family %2"|loc(conf.title,family.name)|qencode%]
[%- ELSIF conf.wwsympa_url && type == 'signoff' -%]
Subject: [%"%1 / unsubscribing from %2"|loc(conf.title,list.name)|qencode%] Subject: [%"%1 / unsubscribing from %2"|loc(conf.title,list.name)|qencode%]
[%- ELSIF conf.wwsympa_url && type == 'subscribe' -%] [%- ELSIF conf.wwsympa_url && type == 'subscribe' -%]
Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%] Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%]
...@@ -8,7 +10,10 @@ Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%] ...@@ -8,7 +10,10 @@ Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%]
Subject: [%"AUTH ${keyauth} ${cmd}"|qencode%] Subject: [%"AUTH ${keyauth} ${cmd}"|qencode%]
[%- END %] [%- END %]
[% IF type == 'signoff' -%] [% IF type == 'family_signoff' -%]
[%|loc(family.name)-%]You requested that your e-mail address be removed from family '%1'.[%- END -%]
[%- ELSIF type == 'signoff' -%]
[%|loc(list.name)-%]You requested that your e-mail address be removed from list '%1'.[%- END -%] [%|loc(list.name)-%]You requested that your e-mail address be removed from list '%1'.[%- END -%]
[%- ELSIF type == 'subscribe' -%] [%- ELSIF type == 'subscribe' -%]
......
...@@ -36,17 +36,6 @@ Subject: [%"Management of list %1"|loc(list.name)|qencode%] ...@@ -36,17 +36,6 @@ Subject: [%"Management of list %1"|loc(list.name)|qencode%]
[%|loc%]Owner and moderator guide:[%END%] [% 'help' | url_abs(['admin.html']) %] [%|loc%]Owner and moderator guide:[%END%] [% 'help' | url_abs(['admin.html']) %]
[% END -%] [% END -%]
[% ELSIF type == 'ticket_to_family_signoff' -%]
Subject: [%"Unsubscribing from family %1"|loc(family)|qencode%]
[% IF context == 'family_signoff'%]
[%|loc(family,ip)%]Somebody (probably you) requested to unsubscribe you from family %1. This query was issued from the IP address %2.
To confirm and be removed from all the lists of this family, please click the link below: [%END%]
[% ELSE %]
[%|loc(family)%]You have requested to be removed from family %1. To confirm and be removed from all the lists of this family, please click the link below: [%END%]
[% END %]
[% 'ticket' | url_abs([one_time_ticket]) %]
[% ELSIF type == 'hundred_percent_error' -%] [% ELSIF type == 'hundred_percent_error' -%]
Subject: [%"No valid recipient in list %1"|loc(list.name)|qencode%] Subject: [%"No valid recipient in list %1"|loc(list.name)|qencode%]
......
# family_signoff.auth
title.gettext need authentication
!equal([sender],[email]) smtp,dkim,md5,smime -> request_auth([email])
true() smtp,dkim -> request_auth([email])
true() md5,smime -> do_it
# family_signoff.closed
title.gettext impossible
true() smtp,dkim,md5,smime -> reject(reason='unsub_closed')
...@@ -56,6 +56,8 @@ ...@@ -56,6 +56,8 @@
[%|loc%]Add subscribers[%END%] [%|loc%]Add subscribers[%END%]
[%~ ELSIF heldaction == 'del' ~%] [%~ ELSIF heldaction == 'del' ~%]
[%|loc%]Delete selected email addresses[%END%] [%|loc%]Delete selected email addresses[%END%]
[%~ ELSIF heldaction == 'family_signoff' ~%]
[%|loc%]Global unsubscription[%END%]
[%~ ELSIF heldaction == 'move_user' ~%] [%~ ELSIF heldaction == 'move_user' ~%]
[%|loc%]Changing user's email[%END%] [%|loc%]Changing user's email[%END%]
[%~ ELSIF heldaction == 'remind' || heldaction == 'global_remind' ~%] [%~ ELSIF heldaction == 'remind' || heldaction == 'global_remind' ~%]
...@@ -217,6 +219,16 @@ ...@@ -217,6 +219,16 @@
[%|loc(shared_doc.name)%]Do you really want to delete %1?[%END%] [%|loc(shared_doc.name)%]Do you really want to delete %1?[%END%]
</strong> </strong>
</p> </p>
[%~ ELSIF confirm_action == 'family_signoff' ~%]
<h2>
<i class="fa fa-check-circle"></i>
[%|loc%]Global unsubscription[%END%]
</h2>
<p>
<strong>
[%|loc(family)%]Do you really want to unsubscribe from the lists in family %1?[%END%]
</strong>
</p>
[%~ ELSIF confirm_action == 'move_list' ~%] [%~ ELSIF confirm_action == 'move_list' ~%]
<h2> <h2>
<i class="fa fa-check-circle"></i> <i class="fa fa-check-circle"></i>
...@@ -387,6 +399,9 @@ ...@@ -387,6 +399,9 @@
<input type="hidden" name="heldaction" value="[% heldaction %]" /> <input type="hidden" name="heldaction" value="[% heldaction %]" />
<input type="hidden" name="listname" value="[% listname %]" /> <input type="hidden" name="listname" value="[% listname %]" />
<input type="hidden" name="email" value="[% email %]" /> <input type="hidden" name="email" value="[% email %]" />
[% IF heldaction == 'family_signoff' ~%]
<input type="hidden" name="family" value="[% family %]" />
[%~ END %]
[%~ ELSIF confirm_action == 'auth_add' ~%] [%~ ELSIF confirm_action == 'auth_add' ~%]
[% FOREACH i = id ~%] [% FOREACH i = id ~%]
<input type="hidden" name="id" value="[% i %]" /> <input type="hidden" name="id" value="[% i %]" />
...@@ -453,6 +468,8 @@ ...@@ -453,6 +468,8 @@
<input type="hidden" name="d_admin" value="[% d_admin %]" /> <input type="hidden" name="d_admin" value="[% d_admin %]" />
[%~ ELSIF confirm_action == 'd_delete' ~%] [%~ ELSIF confirm_action == 'd_delete' ~%]
<input type="hidden" name="path" value="[% shared_doc.paths.join("/") %]" /> <input type="hidden" name="path" value="[% shared_doc.paths.join("/") %]" />
[%~ ELSIF confirm_action == 'family_signoff' ~%]
<input type="hidden" name="email" value="[% email %]" />
[%~ ELSIF confirm_action == 'move_user' ~%] [%~ ELSIF confirm_action == 'move_user' ~%]
<input type="hidden" name="current_email" value="[% current_email %]" /> <input type="hidden" name="current_email" value="[% current_email %]" />
<input type="hidden" name="email" value="[% email %]" /> <input type="hidden" name="email" value="[% email %]" />
...@@ -507,6 +524,7 @@ ...@@ -507,6 +524,7 @@
# Confirmation common hidden fields # Confirmation common hidden fields
#%] #%]
<input type="hidden" name="action" value="[% confirm_action %]" /> <input type="hidden" name="action" value="[% confirm_action %]" />
<input type="hidden" name="family" value="[% family %]" />
<input type="hidden" name="list" value="[% list %]" /> <input type="hidden" name="list" value="[% list %]" />
<input type="hidden" name="previous_action" value="[% previous_action %]" /> <input type="hidden" name="previous_action" value="[% previous_action %]" />
......
<!-- family_signoff.tt2 -->
<h3>[%|loc%]Global unsubscription[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You successfully unsubscribed the address %1 from family %2.[% END %]
</p>
<!-- end family_signoff.tt2 -->
<!-- family_signoff_request.tt2 -->
<h3>[%|loc%]Global unsubscription request[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You clicked a link to unsubscribe the address %1 from family %2.[% END %]
</p>
<p>
[%|loc(family)%]A confirmation request was just sent to this address. By clicking the link it contains, you will be completely unsubscribed from all the lists from family %1[% END %]
</p>
<!-- end family_signoff_request.tt2 -->
<!-- family_signoff_request2.tt2 -->
<h3>[%|loc%]Global unsubscription[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You successfully unsubscribed the address %1 from family %2.[% END %]
</p>
<!-- end family_signoff_request2.tt2 -->
...@@ -55,12 +55,13 @@ ...@@ -55,12 +55,13 @@
</a> </a>
<br /> <br />
[% IF may_sync %] [% IF may_include.member %]
<br /> <br />
<form name="synchronize_list_members" action="[% path_cgi %]" method="post"> <form name="synchronize_list_members" action="[% path_cgi %]" method="post">
<input class="MainMenuLinks heavyWork" type="submit" name="action_sync_include" <input class="MainMenuLinks heavyWork" type="submit" name="action_sync_include"
value="[%|loc%]Synchronize members with data sources[%END%]" /> value="[%|loc%]Synchronize members with data sources[%END%]" />
<input type="hidden" name="list" value="[% list %]"/> <input type="hidden" name="list" value="[% list %]"/>
<input type="hidden" name="role" value="member"/>
</form> </form>
[% END %] [% END %]
<hr> <hr>
...@@ -456,6 +457,21 @@ ...@@ -456,6 +457,21 @@
</fieldset> </fieldset>
</form> </form>
[% IF may_include.$role ~%]
<br />
<form name="sync_include" action="[% path_cgi %]" method="post">
<input class="MainMenuLinks heavyWork" type="submit"
name="action_sync_include"
value="[% IF role == 'owner' ~%]
[%|loc%]Synchronize owners with data sources[%END%]
[%~ ELSE ~%]
[%|loc%]Synchronize moderators with data sources[%END%]
[%~ END %]" />
<input type="hidden" name="list" value="[% list %]"/>
<input type="hidden" name="role" value="[% role %]"/>
</form>
[%~ END %]
[%# AJAX modal dialog ~%] [%# AJAX modal dialog ~%]
<div id="edit" class="reveal medium" data-reveal role="dialog" <div id="edit" class="reveal medium" data-reveal role="dialog"
aria-labelledby="[%|loc%]View user[%END%]" aria-hidden="true"> aria-labelledby="[%|loc%]View user[%END%]" aria-hidden="true">
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment