configure.in                            |    2 
 include/add-header.xsl                  |   12 -
 include/evilsedhack                     |   12 -
 vote/2016-mc/Makefile.am                |   14 +
 vote/2016-mc/candidates.wml             |  176 ++++++++++++++++++++++
 vote/2016-mc/index.wml                  |   58 +++++++
 vote/2016-mc/mkical.py                  |  252 +++++++++++++++++++++++++++++++
 vote/2016-mc/rules.wml                  |   58 +++++++
 vote/2016-mc/shuffle.js                 |    8 +
 vote/2016-mc/timeline.ics               |   71 ++++++++
 vote/2016-mc/voting-instructions.txt    |   38 ++++
 vote/2017-board/Makefile.am             |   14 +
 vote/2017-board/candidates.wml          |  163 ++++++++++++++++++++
 vote/2017-board/index.wml               |   57 +++++++
 vote/2017-board/mkical.py               |  253 ++++++++++++++++++++++++++++++++
 vote/2017-board/rules.wml               |  122 +++++++++++++++
 vote/2017-board/shuffle.js              |    8 +
 vote/2017-board/voting-instructions.txt |   40 +++++
 vote/Makefile.am                        |    2 
 vote/include/step3-confirm.php          |    3 
 vote/index.wml                          |    2 
 21 files changed, 1351 insertions(+), 14 deletions(-)

New commits:
commit 6354c4c489cc36ef92d0f3208baacf7f950c03c1
Author: Florian Effenberger <[email protected]>
Date:   Mon Dec 4 16:02:00 2017 +0000

    corrected date of duty, as discussed with Gabriele

diff --git a/vote/2017-board/rules.wml b/vote/2017-board/rules.wml
index a938cff..5ad27df 100644
--- a/vote/2017-board/rules.wml
+++ b/vote/2017-board/rules.wml
@@ -26,12 +26,12 @@
       <li>
 As per § 7 II of our statues, the Board's term lasts two years. The
 current board started its duty on February 18, 2016. Therefore, the old
-board remains in charge until the end of Sunday, February 18, 2018, so the new
-board will be in charge the day after that, which is Monday, February 19, 2018.
+board remains in charge until the end of February 17, 2018, so the new
+board will be in charge the day after that, which is February 18, 2018.
       </li>
 
       <li>
-That upcoming term will then (regularly) end on Tuesday, February 18,
+That upcoming term will then (regularly) end on February 17,
 2020, so the next elections of the Board of Directors will take place
 before.
      </li>
commit babcf1908a2155b61e0174268da67ad4ef71c091
Author: Florian Effenberger <[email protected]>
Date:   Thu Nov 30 09:41:13 2017 +0000

    replaced HTTP by HTTPS and updated favicon before

diff --git a/include/add-header.xsl b/include/add-header.xsl
index 51b5a5b..509f618 100644
--- a/include/add-header.xsl
+++ b/include/add-header.xsl
@@ -52,14 +52,14 @@
           </div>
           <table>
             <tr>
-              <td><a href="http://www.documentfoundation.org/privacy";>Privacy 
Policy</a> | <a href="http://www.documentfoundation.org/imprint";>Impressum 
(Legal Info)</a> | Copyright information: Unless otherwise specified, all text
-     and images on this website are licensed under the <a rel="license" 
href="http://creativecommons.org/licenses/by-sa/3.0/";>Creative Commons
-              Attribution-Share Alike 3.0 License</a>. This site is based on 
the <a href="http://www.gnome.org/";>GNOME Foundation</a> election system, whose 
textual content is itself available under a <a rel="license" 
href="http://creativecommons.org/licenses/by/3.0/";>Creative Commons
+              <td><a href="https://www.documentfoundation.org/privacy";>Privacy 
Policy</a> | <a href="https://www.documentfoundation.org/imprint";>Impressum 
(Legal Info)</a> | Copyright information: Unless otherwise specified, all text
+     and images on this website are licensed under the <a rel="license" 
href="https://creativecommons.org/licenses/by-sa/3.0/";>Creative Commons
+              Attribution-Share Alike 3.0 License</a>. This site is based on 
the <a href="https://www.gnome.org/";>GNOME Foundation</a> election system, 
whose textual content is itself available under a <a rel="license" 
href="https://creativecommons.org/licenses/by/3.0/";>Creative Commons
               Attribution 3.0 License</a>, and the underlying voting code, 
which is available under GPLv2+. This does not include the source code of 
LibreOffice, which is licensed under the GNU Lesser General
-     Public License (<a 
href="http://www.libreoffice.org/download/license/";>Mozilla Public License 
v2.0</a>).<br/>
+     Public License (<a 
href="https://www.libreoffice.org/download/license/";>Mozilla Public License 
v2.0</a>).<br/>
      "LibreOffice" and "The Document Foundation" are registered trademarks. 
Their respective logos and icons are subject to
      international copyright laws. The use of these therefore is subject to our
-     <a href="http://wiki.documentfoundation.org/TradeMark_Policy";>trademark 
policy</a>.
+     <a href="https://wiki.documentfoundation.org/TradeMark_Policy";>trademark 
policy</a>.
   </td>
             </tr>
           </table>
diff --git a/include/evilsedhack b/include/evilsedhack
index def12b2..d902ffd 100755
--- a/include/evilsedhack
+++ b/include/evilsedhack
@@ -11,14 +11,14 @@ cat <<-FOOT
           </div>
           <table>
             <tr>
-              <td><a href="http://www.documentfoundation.org/privacy";>Privacy 
Policy</a> | <a href="http://www.documentfoundation.org/imprint";>Impressum 
(Legal Info)</a> | Copyright information: Unless otherwise specified, all text
-     and images on this website are licensed under the <a rel="license" 
href="http://creativecommons.org/licenses/by-sa/3.0/";>Creative Commons
-     Attribution-Share Alike 3.0 License</a>. This site is based on the <a 
href="http://www.gnome.org/";>GNOME Foundation</a> election system, whose 
textual content is itself available under a <a rel="license" 
href="http://creativecommons.org/licenses/by/3.0/";>Creative Commons
+              <td><a href="https://www.documentfoundation.org/privacy";>Privacy 
Policy</a> | <a href="https://www.documentfoundation.org/imprint";>Impressum 
(Legal Info)</a> | Copyright information: Unless otherwise specified, all text
+     and images on this website are licensed under the <a rel="license" 
href="https://creativecommons.org/licenses/by-sa/3.0/";>Creative Commons
+     Attribution-Share Alike 3.0 License</a>. This site is based on the <a 
href="https://www.gnome.org/";>GNOME Foundation</a> election system, whose 
textual content is itself available under a <a rel="license" 
href="https://creativecommons.org/licenses/by/3.0/";>Creative Commons
               Attribution 3.0 License</a>, and the underlying voting code, 
which is available under GPLv2+. This does not include the source code of 
LibreOffice, which is licensed under the GNU Lesser General
-     Public License (<a 
href="http://www.libreoffice.org/download/license/";>Mozilla Public License 
v2.0</a>).<br/>
+     Public License (<a 
href="https://www.libreoffice.org/download/license/";>Mozilla Public License 
v2.0</a>).<br/>
      "LibreOffice" and "The Document Foundation" are registered trademarks. 
Their respective logos and icons are subject to
      international copyright laws. The use of these therefore is subject to our
-     <a href="http://wiki.documentfoundation.org/TradeMark_Policy";>trademark 
policy</a>.
+     <a href="https://wiki.documentfoundation.org/TradeMark_Policy";>trademark 
policy</a>.
   </td>
             </tr>
           </table>
commit 3f2cdff8753859802a1ade9c14bba56272fd2982
Author: Florian Effenberger <[email protected]>
Date:   Thu Nov 30 09:39:29 2017 +0000

    2017 board elections added

diff --git a/vote/index.wml b/vote/index.wml
index 00d9413..5ba1df6 100644
--- a/vote/index.wml
+++ b/vote/index.wml
@@ -43,6 +43,7 @@
       <li><a href="2014-mc/">Material from the 2014 Membership Committee 
Elections</a></li>
       <li><a href="2015-board/">Material from the 2015 Board of Directors 
elections</a></li>
       <li><a href="2016-mc/">Material from the 2016 Membership Committee 
Elections</a></li>
+      <li><a href="2017-board/">Material from the 2017 Board of Directors 
elections</a></li>
     </ul>
 
 <!-- Do not close the body or html tag because we still add stuff to the 
footer -->
commit 08264ec126ce2ff7d71d7b775efcf70af1007919
Author: Florian Effenberger <[email protected]>
Date:   Thu Nov 30 09:35:50 2017 +0000

    updated candidates and voting instructions, deleted unused timeline.ics file

diff --git a/vote/2017-board/candidates.wml b/vote/2017-board/candidates.wml
index 7cc923a..bf379aa 100644
--- a/vote/2017-board/candidates.wml
+++ b/vote/2017-board/candidates.wml
@@ -45,7 +45,102 @@
 
     <h2>Candidates for The Document Foundation Board of Directors</h2>
 
-    <p>Will be announced after the nomination phase has ended</p>
+    <p>In random order:</p>
+
+    <ol>
+<li><strong>Cor Nouws</strong><br />
+             Affiliation: <em>Nou&amp;Off</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04010.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04010.html</a>
+             <blockquote>
+With (growing) involvement in various places, it feels like a good moment to 
serve on the board of our community; to me: an interesting and challenging 
environment; people with many backgrounds, from different situations and 
locations. The joy we have in our contributions and how we can help each other 
to do maybe even better, in directing skills for creating great products, means 
a lot to me.
+             </blockquote>
+          </li>
+<li><strong>Jan Holešovský</strong><br />
+             Affiliation: <em>Collabora</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04029.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04029.html</a>
+             <blockquote>
+As a long-time contributor to LibreOffice, I would like to continue serving in 
the Board to help make decisions that support doers in their work, and that 
lead to having more people involved in the project. I can offer my experience 
from cross-team work, and from the last two years in the Board. I am deeply 
committed to LibreOffice and its success.
+             </blockquote>
+          </li>
+<li><strong>Franklin Weng</strong><br />
+             Affiliation: <em>Software Liberty Association Taiwan</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04032.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04032.html</a>
+             <blockquote>
+If I'm elected as a member of BoD, firstly I'll do my best to be the bridge 
between the community and Asian countries, and then I'll also focus on 
communicating with people and marketing ODF and LibreOffice to governments of 
different countries.  Besides, I hope to make the products more friendly to 
Asian C/J/K people in the aspect of UI/UX.
+             </blockquote>
+          </li>
+<li><strong>Björn Michaelsen</strong><br />
+             Affiliation: <em>unaffilated</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04034.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04034.html</a>
+             <blockquote>
+I bring lot of experience from prior work on TDFs governance and am an 
unaffiliated contributor to LibreOffice. I think the key to the success of 
LibreOffice is in the project and seeking growth for it by improving the 
experience for contributors and raising the visibility of our community and the 
opportunities for contribution.
+             </blockquote>
+          </li>
+<li><strong>Simon Phipps</strong><br />
+             Affiliation: <em>unaffiliated</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04036.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04036.html</a>
+             <blockquote>
+I've been involved with the LibreOffice project in some way since the 
OpenOffice.org launch in 2000. I still believe LibreOffice is one of software 
freedom movement's most important projects. I have previously served both as 
Membership Chair and and as a Director and have extensive business experience 
which I have used to TDF's advantage. Now independent, I'd be honoured to serve 
again; my priority will be the new challenges of the cloud era.
+             </blockquote>
+          </li>
+<li><strong>Michael Meeks</strong><br />
+             Affiliation: <em>Collabora</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04037.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04037.html</a>
+             <blockquote>
+I'd love to serve you again on the board: as a FLOSS advocate, with passion 
for LibreOffice, deep TDF board knowledge, lots of generic business experience: 
legal, budgeting, interviewing, management, yet also eager to keep LibreOffice 
fun and free. I've a long history of contribution to different FLOSS 
communities in various ways, am currently betting the business on LibreOffice 
and its success, but also want to help growing our volunteer participation.
+             </blockquote>
+          </li>
+<li><strong>Osvaldo Gervasi</strong><br />
+             Affiliation: <em>The University of Perugia, Italy</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04039.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04039.html</a>
+             <blockquote>
+I want to run for a seat in the next BoD after two years of the exciting 
experience as Director, to have the chance to further contribute to the 
project. In particular I want to promote LibreOffice among University students, 
in particular Engineers and Computer Scientists in order to let them approach 
the development of such a great software with the help of TDF, removing the 
barriers that they may encounter and facilitating their work.
+             </blockquote>
+          </li>
+<li><strong>Eike Rathke</strong><br />
+             Affiliation: <em>Red Hat, Inc.</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04040.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04040.html</a>
+             <blockquote>
+I, Eike Rathke, candidate for a seat on the Board of Directors of The Document 
Foundation. I am a LibreOffice core code contributor, working full time on the 
code base employed by Red Hat, Inc. I have been around with the project and TDF 
since 2011. I want TDF to grow and continue to be a prosperous community that 
creates and maintains the framework and conditions for a successful LibreOffice 
development in all its aspects.
+             </blockquote>
+          </li>
+<li><strong>Marina Latini</strong><br />
+             Affiliation: <em>Studio Storti Srl</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04041.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04041.html</a>
+             <blockquote>
+In the last 2 years, I’ve been honoured to serve in TDF BoD. We have done a 
lot and to achieve our purpose we can do much more. I will put all the gained 
experience in order to make our community more inclusive and open, lowering the 
entry barrier and avoiding exclusion. Freedom and inclusivity are the keys of a 
successful community and I would see a TDF inspired by these values.
+             </blockquote>
+          </li>
+<li><strong>Eric Ficheux</strong><br />
+             Affiliation: <em>Nantes Métropole</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04043.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04043.html</a>
+             <blockquote>
+I'm standing for a seat at the TDF Board of Directors for the first time. I 
believe in the LibreOffice project, in the community and in the power of our 
Free Software model. I will commit to do my best to help the project tackle the 
UX and Cloud challenges, to help grow the user and contributor base and make 
our Free software model better known, understood and supported.
+             </blockquote>
+          </li>
+<li><strong>Uwe Altmann</strong><br />
+             Affiliation: <em>unaffiliated</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04045.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04045.html</a>
+             <blockquote>
+I, Uwe Altmann, candidate for a seat on the Board of Directors of The Document 
Foundation. I have been around with the project and TDF since the early 
beginning, mostly in german community and QA for the Mac version. Actually 
I’m more in the marketing trying to start a process to discuss a vision of 
TDFs future. Being more an administrative guy than a coder I would like to 
foster the TDF as organization.
+             </blockquote>
+          </li>
+<li><strong>Daniel Armando Rodriguez</strong><br />
+             Affiliation: <em>unaffiliated</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04046.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04046.html</a>
+             <blockquote>
+If I result chosen as a BoD member my goal is to get more hispanic people 
involved into the project on a regular basis. I commit myself to give my best 
effort for the benefit of the project and to work hard to put a regional 
conference in the map.
+             </blockquote>
+          </li>
+<li><strong>Thorsten Behrens</strong><br />
+             Affiliation: <em>CIB software GmbH</em><br />
+             Full statement at <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/msg04047.html";>https://listarchives.documentfoundation.org/www/board-discuss/msg04047.html</a>
+             <blockquote>
+I'm leading a team of LibreOffice developers at CIB, and am a long-time TDF 
contributor to both code and organisation. Serving in the current board as a 
director, I would like to offer my continued help for the next two years. 
Things I promise to do: improve &amp; professionalize organisation; grow &amp; 
diversify contribution; keep things fun, fair &amp; sustainable; and help with 
the largely-German administrative grunt work.
+             </blockquote>
+          </li>
+
+    </ol>
 
     <h2>Additional Elections-related Information</h2>
 
diff --git a/vote/2017-board/timeline.ics b/vote/2017-board/timeline.ics
deleted file mode 100644
index 3068f1c..0000000
--- a/vote/2017-board/timeline.ics
+++ /dev/null
@@ -1,72 +0,0 @@
-30
-BEGIN:VCALENDAR
-VERSION:2.0
-CALSCALE:GREGORIAN
-METHOD:PUBLISH
-PRODID:-//PYVOBJECT//NONSGML Version 1//EN
-BEGIN:VEVENT
-UID:20171127T153026Z-64985@vm200
-DTSTART;VALUE=DATE:20171019
-DTEND;VALUE=DATE:20171020
-DESCRIPTION:If you are a member of The Document Foundation and are interes
- ted in running for election\, you may nominate yourself by sending an e-ma
- il to [email protected] with your name\, e-mail address\, c
- orporate affiliation (if any)\, and a description of why you'd like to ser
- ve\, before 2017-11-27 (23:59 UTC).\n     You should also send a summary o
- f your candidacy announcement (75 words or less) to discuss@documentfounda
- tion.org.\n    
-SUMMARY:Announcements and list of candidates opens
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-80218@vm200
-DTSTART;VALUE=DATE:20171127
-DTEND;VALUE=DATE:20171128
-DESCRIPTION:If you are a member of The Document Foundation and are interes
- ted in running for election\, you may nominate yourself by sending an e-ma
- il to [email protected] with your name\, e-mail address\, c
- orporate affiliation (if any)\, and a description of why you'd like to ser
- ve\, before 2017-11-27 (23:59 UTC).\n     You should also send a summary o
- f your candidacy announcement (75 words or less) to discuss@documentfounda
- tion.org.\n    
-SUMMARY:List of candidates closed
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-64756@vm200
-DTSTART;VALUE=DATE:20171128
-DTEND;VALUE=DATE:20171129
-DESCRIPTION:You may now start to send your questions to the candidates
-SUMMARY:List of candidates announced
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-25968@vm200
-DTSTART;VALUE=DATE:20171205
-DTEND;VALUE=DATE:20171206
-DESCRIPTION:Please read your email and follow these instructions and submi
- t your vote by 2017-12-12
-SUMMARY:Instructions to vote are sent
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-18131@vm200
-DTSTART;VALUE=DATE:20171212
-DTEND;VALUE=DATE:20171213
-DESCRIPTION:Preliminary results are announced on 2017-12-13
-SUMMARY:Votes must be returned
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-5280@vm200
-DTSTART;VALUE=DATE:20171213
-DTEND;VALUE=DATE:20171214
-DESCRIPTION:The preliminary results can be challenged until 2017-12-18
-SUMMARY:Preliminary results are announced
-END:VEVENT
-BEGIN:VEVENT
-UID:20171127T153026Z-870@vm200
-DTSTART;VALUE=DATE:20171218
-DTEND;VALUE=DATE:20171219
-DESCRIPTION:If there weren't any challenges\, preliminary results are vali
- d
-SUMMARY:Challenges to the results closed
-END:VEVENT
-X-WR-TIMEZONE:UTC
-END:VCALENDAR
-
diff --git a/vote/2017-board/voting-instructions.txt 
b/vote/2017-board/voting-instructions.txt
index 9b0e451..430b9d2 100644
--- a/vote/2017-board/voting-instructions.txt
+++ b/vote/2017-board/voting-instructions.txt
@@ -6,8 +6,9 @@ Dear $member,
 The election of The Document Foundation Board of Directors will soon
 be open.
 
-Voting will run from 2017-12-05, 00:00 CET/UTC+1 until
-2017-12-12, 24:00 CET/UTC+1.
+Voting will run
+from 2017-12-05, 00:00 CET/UTC+1 (i.e. beginning of the day 05)
+until 2017-12-12, 24:00 CET/UTC+1 (i.e. end of the day 12).
 
 To vote, please go to
 https://elections.documentfoundation.org/vote.php?election_id=9
@@ -26,10 +27,10 @@ voting token above. Then select your preferred candidates 
in order of
 preference. A third step will show you your choice, and ask you to
 confirm or return to the previous step. Finally, after confirming your
 choice, a unique identifier will be given to you which will allow you to
-verify after the election that your vote was counted correctly. To ensure
-anonymity, no link will be kept between this token and your identifiers,
-so please keep this token safe. Once you have voted, you will not be able
-to vote again.
+verify after the election that your vote was counted correctly. To
+ensure anonymity, no link will be kept between this token and your
+identifiers, so please keep this token safe. Once you have voted, you
+will not be able to vote again.
 
 Thank you for your vote!
 
commit 56bde491ef5b97ee2f3c393dea15d6c628da23a8
Author: Florian Effenberger <[email protected]>
Date:   Thu Nov 30 09:35:04 2017 +0000

    last year's name shuffling script, to present list of candidates in random 
order

diff --git a/vote/2017-board/shuffle.js b/vote/2017-board/shuffle.js
new file mode 100644
index 0000000..49a939a
--- /dev/null
+++ b/vote/2017-board/shuffle.js
@@ -0,0 +1,8 @@
+window.onload = shuffle;
+
+function shuffle() {
+    var ol = document.querySelector('ol');
+    for (var i = ol.children.length; i >= 0; i--) {
+        ol.appendChild(ol.children[Math.random() * i | 0]);
+    }
+}
commit 291973a4ddceb988b4027516db35ae0c7c8f7a69
Author: Florian Effenberger <[email protected]>
Date:   Thu Nov 30 09:34:30 2017 +0000

    2017 board elections created

diff --git a/vote/2017-board/Makefile.am b/vote/2017-board/Makefile.am
new file mode 100644
index 0000000..56f3ab5
--- /dev/null
+++ b/vote/2017-board/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2017-board
+
+page_SCRIPTS = \
+       index.html \
+       candidates.html\
+       rules.html
+
+page_DATA = \
+       timeline.ics
+       mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/vote/2017-board/candidates.wml b/vote/2017-board/candidates.wml
new file mode 100644
index 0000000..7cc923a
--- /dev/null
+++ b/vote/2017-board/candidates.wml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2017 Board of Directors Election 
Candidates</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  </head>
+
+  <body>
+    <h1>Candidates for The Document Foundation 2017 Board of Directors 
Election</h1>
+
+    <p>
+      Below you will find a list of candidates who are running for
+      The Document Foundation Board of Directors. A short summary statement 
from
+      each candidate and a link to their full candidacy announcement is
+      provided to help you learn more about them. We encourage all voters
+      to read the full candidacy statements and related discussions on
+      <a 
href="https://listarchives.documentfoundation.org/www/board-discuss/";>board-discuss&#64;documentfoundation&#46;org</a>.
+    </p>
+
+    <p> When deciding who you should vote for, please carefully
+    consider the various tasks the Board of Directors must
+    perform. This <a href="../overview.html">overview</a> may be
+    helpful. Keep in mind that the board will make a number of
+    important decisions and will also have to perform many tasks which
+    might require a significant amount of time and effort and the
+    ability to work and communicate with other people, companies, and
+    the media. It is a good idea to strive for a well-balanced board
+    consisting of people with various backgrounds, skills, and
+    perspectives.  </p>
+
+    <p>
+      Additional elections details can be found in the
+      <a href="https://www.documentfoundation.org/satzung.pdf";>Document 
Foundation statutes</a> (and the non-binding
+      <a href="https://www.documentfoundation.org/statutes.pdf";>English 
version</a>).
+    </p>
+
+    <p>
+      If you have any questions, please send them to either
+      <a 
href="mailto:board-discuss&#64;documentfoundation&#46;org";>board-discuss&#64;documentfoundation&#46;org</a>
 (public list)
+      or in private to the Membership Committee at <a
+      
href="mailto:elections&#64;documentfoundation&#46;org";>elections&#64;documentfoundation&#46;org</a>.
+    </p>
+
+    <h2>Candidates for The Document Foundation Board of Directors</h2>
+
+    <p>Will be announced after the nomination phase has ended</p>
+
+    <h2>Additional Elections-related Information</h2>
+
+    <p>
+      Note, that according to the
+      <a href="https://www.documentfoundation.org/satzung.pdf";>Document 
Foundation statutes</a> (and the non-binding
+      <a href="https://www.documentfoundation.org/statutes.pdf";>English 
version</a>),
+      there is a 1/3 maximum on the number of people affiliated with any one 
company that can be on the board or
+      amongst the deputies. For details refer to the statutes. You will be 
able to vote for up to 10 candidates of your choice, with no
+      restrictions, except that you cannot vote more than once for the same 
candidate.
+    </p>
+
+    <p>
+      If you have any futher question, please consult the
+      <a href="rules.html">Rules for this election</a> or write to
+      <a 
href="mailto:[email protected]";>[email protected]</a>.
+    </p>
+    <script src="shuffle.js" />
+  </body>
+</html>
diff --git a/vote/2017-board/index.wml b/vote/2017-board/index.wml
new file mode 100644
index 0000000..43e5192
--- /dev/null
+++ b/vote/2017-board/index.wml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2017 Board of Directors Election</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>The Document Foundation 2017 Board of Directors Election</h1>
+
+    <p>
+      The Document Foundation Membership currently elects the Board of
+      Directors every other year. Any member can
+      nominate themself to run in the elections. The overall elections
+      process is overseen by the Membership Committee,
+      which can be reached
+      at <a 
href="mailto:elections&#64;documentfoundation&#46;org";>elections&#64;documentfoundation&#46;org</a>.
+    </p>
+
+    <p>
+      The elections results from the 2017 Board of Directors elections
+      will be archived here for public access.
+    </p>
+
+    <h2>2017 Elections Materials:</h2>
+    <ul>
+        <li>
+            <a href="../results.php?election_id=9">Detailed election 
results</a>
+        </li>
+        <li>
+            <a href="../votes.php?election_id=9">List of all votes</a>
+        </li>
+        <li>
+            <a href="../vote.php?election_id=9">Interface to vote</a>
+        </li>
+        <li>
+            <a href="candidates.html">List of candidates for Board of 
Directors</a>
+        </li>
+
+        <li>
+            <a 
href="https://www.documentfoundation.org/governance/members/";>List of 
registered voters</a>
+        </li>
+
+        <li>
+            <a href="rules.html">Elections Rules and Timeline</a>
+        </li>
+
+        <li>
+            <a href="../overview.html">Overview of the Board of Directors 
role</a>
+        </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/vote/2017-board/mkical.py b/vote/2017-board/mkical.py
new file mode 100755
index 0000000..9be841a
--- /dev/null
+++ b/vote/2017-board/mkical.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+'''
+This Python script creates a simple iCal file based on hardcoded events
+in this file.
+'''
+
+import calendar
+import datetime
+import logging
+import math
+import os
+import vobject
+
+
+#### Configure these variables
+YEAR = 2017
+CANDIDATES_OPENED_DATE    = (YEAR, 10, 19)
+CANDIDATES_CLOSED_DATE    = (YEAR, 11, 27)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 11, 28)
+VOTING_OPENED_DATE        = (YEAR, 12, 05)
+VOTING_CLOSED_DATE        = (YEAR, 12, 12)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 12, 13)
+CHALLENGE_CLOSED_DATE     = (YEAR, 12, 18)
+
+
+
+### I'm sorry that these functions clutter your calendar-creating experience
+### Please scroll down a bit to edit the description texts
+
+#### Application Data
+def c(multilinestring):
+    '''
+    A helper functions which cleans up a multiline string, so that
+    it doesn't contain any newlines or multiple whitespaces
+    '''
+    stripped = [l.strip() for l in multilinestring.splitlines()]
+    ret = " ".join (stripped)
+    return ret
+
+def d(year, month, day):
+    '''
+    Just a tiny wrapper around datetime.datetime to create a datetime object
+    '''
+    return datetime.date(year, month, day)
+
+
+
+CANDIDATES_OPENED = (
+    d(*CANDIDATES_OPENED_DATE),
+    'Announcements and list of candidates opens',
+    c("""If you are a member of The Document Foundation and are interested
+    in running for election, you may nominate yourself by sending an
+    e-mail to [email protected] with your name, e-mail
+    address, corporate affiliation (if any), and a description of why
+    you'd like to serve, before
+    %s (23:59 UTC).""" % d(*CANDIDATES_CLOSED_DATE)) + '''
+    ''' + c("""
+    You should also send a summary of your candidacy announcement
+    (75 words or less) to [email protected]. """) + '''
+    '''
+)
+
+CANDIDATES_CLOSED = (
+    d(*CANDIDATES_CLOSED_DATE),
+    'List of candidates closed',
+    CANDIDATES_OPENED[2] # Get the same text again
+)
+
+CANDIDATES_ANNOUNCED = (
+    d(*CANDIDATES_ANNOUNCED_DATE),
+    'List of candidates announced',
+    'You may now start to send your questions to the candidates'
+)
+
+VOTING_OPENED = (
+    d(*VOTING_OPENED_DATE),
+    'Instructions to vote are sent',
+    'Please read your email and follow these instructions and submit your vote 
by %s' % d(*VOTING_CLOSED_DATE)
+)
+VOTING_CLOSED = (
+    d(*VOTING_CLOSED_DATE),
+    'Votes must be returned',
+    'Preliminary results are announced on %s' % d(*PRELIMINARY_RESULTS_DATE)
+)
+
+
+PRELIMINARY_RESULTS = (
+    d(*PRELIMINARY_RESULTS_DATE),
+    'Preliminary results are announced',
+    'The preliminary results can be challenged until %s' % 
d(*CHALLENGE_CLOSED_DATE)
+)
+
+CHALLENGE_CLOSED = (
+    d(*CHALLENGE_CLOSED_DATE),
+    'Challenges to the results closed',
+    "If there weren't any challenges, preliminary results are valid"
+)
+
+
+
+
+def create_ical(eventlist):
+    '''Generates an ical stream based on the list given as eventlist.
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('create_ical')
+
+    cal = vobject.iCalendar()
+    cal.add('method').value = 'PUBLISH'
+    cal.add('calscale').value = 'GREGORIAN'
+    cal.add('x-wr-timezone').value = 'UTC'
+
+    for (timestamp, summary, description) in eventlist:
+        log.debug('creating %s, %s', timestamp, description)
+        vevent = cal.add('vevent')
+        vevent.add('dtstart').value = timestamp
+        vevent.add('dtend').value = timestamp + datetime.timedelta(1)
+        vevent.add('summary').value = summary
+        vevent.add('description').value = description
+
+    stream = cal.serialize()
+    return stream
+
+
+def wraptext(s, width):
+    '''Wraps a string @s at @width characters.
+
+    >>> wraptext('fooo', 2)
+    ['fo','oo']
+    '''
+    l = len(s)
+    nr_frames = int(math.ceil(float(l)/width))
+    print nr_frames
+    frames = []
+    for i in xrange(nr_frames):
+        start, end = i*width, (i+1) * width
+        frames.append(s[start:end])
+        # One could (and prolly should) yield that
+    return frames
+
+def ordinal(n):
+    n = int(n)
+    if 10 <= n % 100 < 20:
+        return str(n) + 'th'
+    else:
+       return  str(n) + {1 : 'st', 2 : 'nd', 3 : 'rd'}.get(n % 10, "th")
+
+
+def cal_for_month(month, events, width=80, year=datetime.datetime.now().year):
+    '''Generates a textual calendar for the @month in @year.
+    It will return a string with the calendar on the left hand side and the
+    events on the right hand side.
+    @events shall be a list with tuples: timestamp, summary, description.
+
+    Returns a string with the calendar
+    '''
+    log = logging.getLogger('cal_for_month')
+
+    cal = calendar.TextCalendar()
+    calstrings = cal.formatmonth(year, month, 3).splitlines()
+
+    for (timestamp, summary, description) in events:
+        log.debug('creating %s, %s', timestamp, summary)
+        year, month, day = timestamp.year, timestamp.month, timestamp.day
+        maxwidth = max([len(cs) for cs in calstrings])
+        rightwidth = 80 - maxwidth
+        for i, line in enumerate(calstrings):
+            needles =      (" %d " % day,
+                           " %d\n" % day)
+            replacement = "(%d)" % day
+            # Find the day so that we can highlight it and add a comment
+            day_in_week = False
+            for needle in needles:
+                if needle in line+"\n":
+                    # k, this looks a bit weird but we have that corner
+                    # case with the day being at the end of the line
+                    # which in turn will have been split off
+                    day_in_week = True
+                    break # Set the needle to the found one
+            if day_in_week == False: # Nothing found, try next week
+                log.debug('Day (%d) not found in %s', day, line)
+                continue
+            else:
+                log.debug('Day (%d) found in %s', day, line)
+                new_line = (line+"\n").replace(needle, replacement).rstrip()
+                new_line += "   %s (%s)" % (summary, ordinal(day))
+                # Replace in-place for two events in the same week
+                # FIXME: This has bugs :-(
+                calstrings[i] = new_line
+
+    return os.linesep.join(calstrings)
+
+def create_textcal(eventlist):
+    '''Generates a multiline string containing a calendar with the
+    events written on the side
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('textcal')
+    log.debug('Generating from %s', eventlist)
+    months = set(map(lambda x: x[0].month, eventlist))
+    year = set(map(lambda x: x[0].year, eventlist)).pop()
+
+    final_cal = []
+    for month in months:
+        events = filter(lambda x: x[0].month == month, eventlist)
+        log.debug('Events for %d: %s', month, events)
+        month_cal = cal_for_month(month, events, year=year)
+        final_cal.append(month_cal)
+
+    return os.linesep.join(final_cal)
+
+if __name__ == "__main__":
+    from optparse import OptionParser
+    parser = OptionParser("usage: %prog [options]")
+    parser.add_option("-l", "--loglevel", dest="loglevel", help="Sets the 
loglevel to one of debug, info, warn, error, critical",
+                      default=None)
+    parser.add_option("-i", "--ical",
+                      action="store_true", dest="ical", default=False,
+                      help="print iCal file to stdout")
+    parser.add_option("-t", "--textcal",
+                      action="store_true", dest="tcal", default=False,
+                      help="print textual calendar to stdout")
+    (options, args) = parser.parse_args()
+
+    loglevel = {'debug': logging.DEBUG, 'info': logging.INFO,
+                'warning': logging.WARNING, 'error': logging.ERROR,
+                'critical': logging.CRITICAL}.get(options.loglevel, 
logging.WARNING)
+    print loglevel
+    logging.basicConfig( level=loglevel )
+    log = logging.getLogger()
+
+    eventlist = [
+        CANDIDATES_OPENED,
+        CANDIDATES_CLOSED,
+        CANDIDATES_ANNOUNCED,
+        VOTING_OPENED,
+        VOTING_CLOSED,
+        PRELIMINARY_RESULTS,
+        CHALLENGE_CLOSED,
+    ]
+
+    if not any([options.ical, options.tcal]):
+        parser.error("You want to select either ical or textcal output. See 
--help for details")
+    if options.ical:
+        ical = create_ical( eventlist )
+        print ical
+    if options.tcal:
+        tcal = create_textcal( eventlist )
+        print tcal
diff --git a/vote/2017-board/rules.wml b/vote/2017-board/rules.wml
new file mode 100644
index 0000000..a938cff
--- /dev/null
+++ b/vote/2017-board/rules.wml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2017 Board of Directors Election 
Rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>Rules &amp; Timeline for The Document Foundation 2017 Board of 
Directors Election</h1>
+
+    <h2>Elections Rules</h2>
+
+    <ol>
+      <li>
+      See the <a 
href="https://www.documentfoundation.org/satzung.pdf";>Document Foundation 
statutes</a> (and the non-binding
+      <a href="https://www.documentfoundation.org/statutes.pdf";>English 
version</a>)
+      for general rules.
+      </li>
+      <li>
+       There are 7 board positions and 3 deputy roles that are to be filled 
during these elections.
+      </li>
+
+      <li>
+As per § 7 II of our statues, the Board's term lasts two years. The
+current board started its duty on February 18, 2016. Therefore, the old
+board remains in charge until the end of Sunday, February 18, 2018, so the new
+board will be in charge the day after that, which is Monday, February 19, 2018.
+      </li>
+
+      <li>
+That upcoming term will then (regularly) end on Tuesday, February 18,
+2020, so the next elections of the Board of Directors will take place
+before.
+     </li>
+
+      <li>
+As per § 6 III, only members of the Board of Trustees of The Document
+Foundation, as well as current members of any of its bodies, are
+eligible to be elected into the Board of Directors, and the election is
+overseen by the Membership Committee (§ 7 II).
+      </li>
+
+      <li>
+The active electoral right is reserved to those who have been members of
+the Board of Trustees before this announcement (§ 7 II).
+      </li>
+
+      <li>
+§ 6 III also states that members of the Board of Directors or their
+deputies may not be members of the Membership Committee and vice versa.
+This means that current members of the Membership Committee are eligible
+to be elected, but with the acceptance of their new role they lose their
+current role in the MC. For clarification, they would have to step down
+from the Membership Committee, with effect no later than to the
+beginning of the new term of the Board of Directors, the minute before
+accepting to become a member of the Board of Directors.
+      </li>
+
+      <li>
+There is one more notable limitation: Per § 8 IV of the statutes, a
+maximum of 1/3 members of the Board of Directors is allowed to work on
+an employment basis for the same company, organization, entities,
+affiliates or subdivisions.
+      </li>
+
+      <li>
+Nomination of candidates fulfilling the above requirements, as well as
+self nomination is welcome. In total, at least seven Board of Directors
+members are required, and given there are enough candidates, up to three
+deputies can be elected (§ 7 II). As deputies are on duty quite often,
+we encourage many candidates to participate.
+      </li>
+
+      <li>
+Re-election of current members of the Board of Directors is explicitly
+permitted (§ 7 II).
+      </li>
+
+      <li>
+        Votes will be held confidential during the elections, but an
+        anonymized archive of all submitted votes will be made publicly
+        accessible at its conclusion.
+      </li>
+      <li>
+        The Document Foundation Membership Committee is
+        responsible for counting the votes.
+      </li>
+    </ol>
+
+    <h2>Timeline</h2>
+    <ul>
+      <li>
+2017-10-19: announcement of the elections; and start of the nomination phase
+      </li>
+      <li>
+2017-11-27, 24:00 CET/UTC+1: end of the nomination phase (one week before the 
election starts, as per § 7 II)
+      </li>
+      <li>
+2017-12-05, 00:00 CET/UTC+1: official start of the elections (at least 45 days 
after announcement of the elections, as per § 7 II)
+      </li>
+      <li>
+2017-12-12, 24:00 CET/UTC+1: end of the elections
+      </li>
+      <li>
+2017-12-13: announcement of the preliminary results and acknowledgement of role
+      </li>
+      <li>
+2017-12-14, 00:00 CET/UTC+1: start of the challenging phase
+      </li>
+      <li>
+2017-12-18, 24:00 CET/UTC+1: end of the challenging phase
+      </li>
+      <li>
+afterwards: official announcement of the final results
+      </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/vote/2017-board/timeline.ics b/vote/2017-board/timeline.ics
new file mode 100644
index 0000000..3068f1c
--- /dev/null
+++ b/vote/2017-board/timeline.ics
@@ -0,0 +1,72 @@
+30
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:20171127T153026Z-64985@vm200
+DTSTART;VALUE=DATE:20171019
+DTEND;VALUE=DATE:20171020
+DESCRIPTION:If you are a member of The Document Foundation and are interes
+ ted in running for election\, you may nominate yourself by sending an e-ma
+ il to [email protected] with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2017-11-27 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss@documentfounda
+ tion.org.\n    
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-80218@vm200
+DTSTART;VALUE=DATE:20171127
+DTEND;VALUE=DATE:20171128
+DESCRIPTION:If you are a member of The Document Foundation and are interes
+ ted in running for election\, you may nominate yourself by sending an e-ma
+ il to [email protected] with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2017-11-27 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss@documentfounda
+ tion.org.\n    
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-64756@vm200
+DTSTART;VALUE=DATE:20171128
+DTEND;VALUE=DATE:20171129
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-25968@vm200
+DTSTART;VALUE=DATE:20171205
+DTEND;VALUE=DATE:20171206
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2017-12-12
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-18131@vm200
+DTSTART;VALUE=DATE:20171212
+DTEND;VALUE=DATE:20171213
+DESCRIPTION:Preliminary results are announced on 2017-12-13
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-5280@vm200
+DTSTART;VALUE=DATE:20171213
+DTEND;VALUE=DATE:20171214
+DESCRIPTION:The preliminary results can be challenged until 2017-12-18
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20171127T153026Z-870@vm200
+DTSTART;VALUE=DATE:20171218
+DTEND;VALUE=DATE:20171219
+DESCRIPTION:If there weren't any challenges\, preliminary results are vali
+ d
+SUMMARY:Challenges to the results closed
+END:VEVENT
+X-WR-TIMEZONE:UTC
+END:VCALENDAR
+
diff --git a/vote/2017-board/voting-instructions.txt 
b/vote/2017-board/voting-instructions.txt
new file mode 100644
index 0000000..9b0e451
--- /dev/null
+++ b/vote/2017-board/voting-instructions.txt
@@ -0,0 +1,39 @@
[email protected]
+Gabriele Ponzo <[email protected]>
+Your Document Foundation 2017 Board Elections Voting Token
+Dear $member,
+
+The election of The Document Foundation Board of Directors will soon
+be open.
+
+Voting will run from 2017-12-05, 00:00 CET/UTC+1 until
+2017-12-12, 24:00 CET/UTC+1.
+
+To vote, please go to
+https://elections.documentfoundation.org/vote.php?election_id=9
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+https://elections.documentfoundation.org/2017-board/candidates.html
+
+When instructed to do so, enter the following details:
+
+   E-mail: $email
+   Vote token: $token
+
+The election has 4 steps - first, you must identify yourself using the
+voting token above. Then select your preferred candidates in order of
+preference. A third step will show you your choice, and ask you to
+confirm or return to the previous step. Finally, after confirming your
+choice, a unique identifier will be given to you which will allow you to
+verify after the election that your vote was counted correctly. To ensure
+anonymity, no link will be kept between this token and your identifiers,
+so please keep this token safe. Once you have voted, you will not be able
+to vote again.
+
+Thank you for your vote!
+
+Regards,
+  Gabriele Ponzo
+  Chairman of the Membership Committee
+  The Document Foundation
commit fe59b57f12f5f97d071ea5e7aa76e6b42b8ba3e4
Author: Florian Effenberger <[email protected]>
Date:   Tue Nov 28 07:41:17 2017 +0000

    added 2017-board

diff --git a/configure.in b/configure.in
index 14e038c..32ccfab 100644
--- a/configure.in
+++ b/configure.in
@@ -22,4 +22,6 @@ vote/2013-confpoll/Makefile
 vote/2013-board/Makefile
 vote/2014-mc/Makefile
 vote/2015-board/Makefile
+vote/2016-mc/Makefile
+vote/2017-board/Makefile
 ])
diff --git a/vote/Makefile.am b/vote/Makefile.am
index eb9d3f4..9f930a6 100644
--- a/vote/Makefile.am
+++ b/vote/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = include 2011 2012-confpoll 2012-mc 2013-confpoll 2013-board 2014-mc
+SUBDIRS = include 2011 2012-confpoll 2012-mc 2013-confpoll 2013-board 2014-mc 
2015-board 2016-mc 2017-board
 
 urlpath = /vote
  
commit 4dece65dc68e3c76789d7741d19fcd30334a9ad5
Author: Florian Effenberger <[email protected]>
Date:   Tue Nov 28 07:40:34 2017 +0000

    set number of total seats available

diff --git a/vote/include/step2-choose.php b/vote/include/step2-choose.php
index 01fdcae..5cbf78b 100644
--- a/vote/include/step2-choose.php
+++ b/vote/include/step2-choose.php
@@ -14,7 +14,7 @@ function step2_do () {
   $result .= "Once you are happy with the order, submit your vote. You will 
have ";
   $result .= "the chance to review and confirm your ballot on the next 
page.</p>";
 
-  $result .= "<p>You can vote for up to 9 candidates of your choice, with no 
restrictions. ";
+  $result .= "<p>You can vote for up to 10 candidates of your choice, with no 
restrictions. ";
   $result .= "Your vote will be counted for your first choice candidate as ";
   $result .= "long as the candidate is still in the race, and when the 
candidate is eliminated, your ";
   $result .= "vote will transfer to the next preference candidate still in the 
";
commit fba3a2a82099022af788fba9e9cf27ff32f2764a
Author: Florian Effenberger <[email protected]>
Date:   Mon Nov 27 14:37:54 2017 +0000

    updated page headers to have favicon in VHost instead of main TDF site

diff --git a/include/add-header.xsl b/include/add-header.xsl
index 32eb3c0..51b5a5b 100644
--- a/include/add-header.xsl
+++ b/include/add-header.xsl
@@ -20,7 +20,7 @@
       <link rel="stylesheet" type="text/css" 
href="//www.documentfoundation.org/themes/tdf/css/layout.css?m=1300292397"/>
       <link rel="stylesheet" type="text/css" 
href="//www.documentfoundation.org/themes/tdf/css/typography.css?m=1292094211"/>
       <link rel="stylesheet" type="text/css" 
href="//www.documentfoundation.org/themes/tdf/css/form.css?m=1305575430"/>
-      <link rel="icon" href="//www.documentfoundation.org/favicon.ico"/>
+      <link rel="icon" href="//elections.documentfoundation.org/favicon.ico"/>
       <xsl:copy-of select="@*"/>
       <xsl:apply-templates select="node()"/>
     </head>
diff --git a/include/evilsedhack b/include/evilsedhack
index 04e0a6d..def12b2 100755
--- a/include/evilsedhack
+++ b/include/evilsedhack
@@ -2,7 +2,7 @@
 PAGE=$1
 ROOT=$2
 
-sed "s,<head>,<head><meta http-equiv=\"Content-Type\" content=\"text/html; 
charset=UTF-8\" /><link rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/layout.css?m=1300292397\"/><link
 rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/typography.css?m=1292094211\"/><link
 rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/form.css?m=1305575430\"/><link
 rel=\"icon\" 
href=\"//www.documentfoundation.org/favicon.ico\"/>,i;s,<body>,<body 
xmlns=\"//www.w3.org/1999/xhtml\"><div id=\"BgContainer\"><div 
id=\"Container\"><div id=\"Header\"><h1>The Document Foundation</h1><p>The home 
of LibreOffice</p></div><div class=\"clear\"><!-- --></div><div 
id=\"Layout\">,i;s,<\/body>/,//,g" $PAGE
+sed "s,<head>,<head><meta http-equiv=\"Content-Type\" content=\"text/html; 
charset=UTF-8\" /><link rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/layout.css?m=1300292397\"/><link
 rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/typography.css?m=1292094211\"/><link
 rel=\"stylesheet\" type=\"text/css\" 
href=\"//www.documentfoundation.org/themes/tdf/css/form.css?m=1305575430\"/><link
 rel=\"icon\" 
href=\"//elections.documentfoundation.org/favicon.ico\"/>,i;s,<body>,<body 
xmlns=\"//www.w3.org/1999/xhtml\"><div id=\"BgContainer\"><div 
id=\"Container\"><div id=\"Header\"><h1>The Document Foundation</h1><p>The home 
of LibreOffice</p></div><div class=\"clear\"><!-- --></div><div 
id=\"Layout\">,i;s,<\/body>/,//,g" $PAGE
 
 cat <<-FOOT
         <div id="Footer">
commit 1576cc5e4f59a93313738bff8baf1ec223590bef
Author: sdfsdf <sdfsdf@sfsdfsdf>
Date:   Sat Sep 10 13:25:36 2016 +0000

    new voting

diff --git a/vote/2016-mc/Makefile.am b/vote/2016-mc/Makefile.am
new file mode 100644
index 0000000..b7b182f
--- /dev/null
+++ b/vote/2016-mc/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2014-mc
+ 
+page_SCRIPTS = \
+       index.html \
+       candidates.html\
+       rules.html 
+
+page_DATA = \
+       timeline.ics
+       mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/vote/2016-mc/candidates.wml b/vote/2016-mc/candidates.wml
new file mode 100644
index 0000000..6759614
--- /dev/null
+++ b/vote/2016-mc/candidates.wml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2016 Membership Committee Election 
Candidates</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  </head>
+
+  <body>
+    <h1>Candidates for The Document Foundation 2016 Membership Committee 
Election</h1>
+
+    <p>
+Below you will find a list of candidates who are running for The Document 
Foundation Membership Committee. A short summary statement from each candidate 
and a link to their full candidacy announcement is provided to help you learn 
more about them. We encourage all voters to read the full candidacy statements 
and related discussions on <a 
href="http://listarchives.documentfoundation.org/www/board-discuss/";>[email protected]</a>.
 
+    </p>
+
+    <p> When deciding whom you should vote for, please carefully
+    consider the various tasks Membership Committee seat holders must
+    perform. This <a href="../overview-mc.html">overview</a> may be
+    helpful. Keep in mind that the committee will decide on granting
+    membership, and renewal thereof, and also plays an important role
+    as a counter-balance to the board of directors. It is a good idea
+    to strive for a well-balanced committee, consisting of people with
+    various backgrounds, skills, and perspectives. </p>
+
+    <p>
+      Additional elections details can be found in the
+      <a href="http://www.documentfoundation.org/satzung.pdf";>Document 
Foundation statutes</a> (and the non-binding
+      <a href="http://www.documentfoundation.org/statutes.pdf";>English 
version</a>).
+    </p>
+
+    <p>
+      If you have any questions, please send them to either
+      <a 
href="mailto:[email protected]";>[email protected]</a>
 (public list)
+      or in private to the Board of Directors at <a
+      
href="mailto:[email protected]";>[email protected]</a>.
+    </p>
+
+    <h2>Candidates for The Document Foundation Membership Committee</h2>
+
+    <p>In random order:</p>
+
+    <ol>
+        <li><strong>Miklos Vajna</strong><br />
+           Affiliation: <em>Collabora</em><br />
+           <blockquote>
+           I am hacking on LibreOffice since its birth, contributing features 
and
+fixes mostly around Writer. I would like to be part of the Membership
+Committee to ensure that every aspect of the TDF community is
+represented in the committee, including developers. Given my background,
+I'm happy to help the work of the committee also at a technical level
+(git, gerrit issues).
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Charles-H. Schulz</strong><br />
+           Affiliation: <em>none</em><br />
+           <blockquote>
+I would like to continue my work inside the Membership Committee for another 
term. I therefore declare my candidacy for the Membership Committee. I have 
been among the founders of the Document Foundation, a former board member and 
these days I'm mostly active in social networking and website edition for the 
LibreOffice project. 
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Gabriele Ponzo</strong><br />
+           Affiliation: <em> external collaborations with Studio 
Storti</em><br />
+           <blockquote>
+I would like to continue my work inside the Membership Committee for another 
term. I therefore declare my candidacy for the Membership Committee. I've been 
part of LibreUmbria and LibreDifesa projects as well as of other migrations as 
TDF Certified Trainer and Migration expert. It's been an interesting and 
challenging experience to be part of current MC and I'd like to continue 
serving our great community and Foundation.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Andras Timar</strong><br />
+           Affiliation: <em>Collabora</em><br />
+           <blockquote>
+           I would like to continue my work inside the Membership Committee 
for another term. I therefore declare my candidacy for the Membership 
Committee. (I have been working as a deputy member of Membership Committee 
since 2014.) I have been involved in OpenOffice.org, then LibreOffice for 14 
years, I know a lot of people from the community, and I have a good overview of 
development and localization. I have time and desire to serve in this position.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Noel John Grandin</strong><br />
+           Affiliation: <em>Peralex Electronics, Collabora UK</em><br />
+           <blockquote>
+           Running for membership committee, 3+ years of contributing my own 
special brand of disruption to the LibreOffice codebase, 20+ years of 
experience in the software industry. 30+ years of programming.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Katarina Behrens</strong><br />
+           Affiliation: <em>CIB</em><br />
+           <blockquote>
+           I'm a long-time LibreOffice code contributor, working for CIB as a 
professional 
+LibreOffice bug squasher. I'd like to put my connection with both code and 
design community (together 
+with the knowledge of multiple languages) to good use in the Membership 
+Committee. By serving there, I'd love to help building a diverse community, 
+where everyone regardless of their gender, ethnicity or disability has their 
+say and where both code and non-code contributions are equally valued.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Antonio Faccioli</strong><br />
+           Affiliation: <em>Studio Storti</em><br />
+           <blockquote>
+           I would like to make available to all members of the Foundation my 
passion and my determination to consolidate and bring more people to the 
community LibreOffice. I think a large and cohesive group of members can only 
strengthen the project.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Cor Nouws</strong><br />
+           Affiliation: <em>Nou&amp;Off</em><br />
+           <blockquote>
+           I would like to be a candidate for the Membership Committee (MC) 
with
+the upcoming elections. Since quite early (say 2004  ) I'm an active member of 
this community
+with some emphasis on QA, marketing but also contributions to UX, l10n
+and tiny bits for development. I help in the Dutch language community
+and run a small company dedicated to make organizations happy and smart
+users of LibreOffice. The great variety in our community inspires me;
+therefore as member of the MC (too), I try to help building a diverse,
+strong community.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Klaus-Jürgen Weghorn</strong><br />
+           Affiliation: <em>none</em><br />
+           <blockquote>           
+I am a civil engineer and urban planner and therefore more familiar with the 
user side than with the development. For LibO I'm working e.g on some marketing 
stuff like the presentations and logos for our conferences and the badges for 
our Month of LibreOffice.
+Currently I'm a member of the Membership Committee and would like to continue 
my work there.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Stephan Bergmann</strong><br />
+           Affiliation: <em>Red Hat, Inc.</em><br />
+           <blockquote>
+           I've been around the LibreOffice (and formerly 
StarOffice/OpenOffice.org) ecosystem for nearly two decades now.  And still 
feel excited about the enthusiasm of the LO community in my daily work.  So I'd 
like to give back some of that enthusiasm by serving on the Membership 
Committee.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Gustavo Buzzatti Pacheco</strong><br />
+           Affiliation: <em>none</em><br />
+           <blockquote>
+           I'm from Porto Alegre, Brazil. I have been working in our Community 
since 2003, mainly in the Brazilian project in many areas (documentation, 
digital inclusion, marketing, extensions,...). Currently, I'm the hand behind 
the @opendocument account on Twitter where I spread the news about LibreOffice, 
OpenDocument and Free Software around the World. I think our Membership 
Committee should continue to represent our global and plural project, so I 
would like to contribute with my colaborative experience.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+        <li><strong>Ellen Pape</strong><br />
+           Affiliation: <em>none</em><br />
+           <blockquote>
+I am an instructor in IT business, teacher in a distance learning school and
+social media manager. My collaboration with Open Office startet, when I made
+the membership administration for FrODeV, the entity that helped to create
+the TDF. Since then I represented Libre Office in various opportunities.
+Last was the Didacta Fair in Cologne. Under
+https://blog.documentfoundation.org/blog/2016/03/02/libreoffice-didacta/ you
+can see our report (in English) and download in German, Spanish and French).
+Also I am taking care of the german account of Libre Office in Facebook,
+Twitter and Google+. I would like to contribute in the membership committee.
+           </blockquote>
+            <!-- Verified Member -->
+        </li>
+    </ol>
+
+
+
+    <h2>Additional elections-related Information</h2>
+
+    <p>
+      Note, that according to the
+      <a href="http://www.documentfoundation.org/satzung.pdf";>Document 
Foundation statutes</a> (and the non-binding
+      <a href="http://www.documentfoundation.org/statutes.pdf";>English 
version</a>),
+      there is a 1/3 maximum on the number of people affiliated with any one 
company that can be on the committee or
+      amongst the deputies. For details refer to the statutes. You will be 
able to vote for up to 9 candidates of your choice, with no
+      restrictions, except that you cannot vote more than once for the same 
candidate.
+    </p>
+
+    <p>
+      If you have any futher question, please consult the
+      <a href="rules.html">Rules for this election</a> or write to
+      <a 
href="mailto:[email protected]";>[email protected]</a>.
+</p>
+    <script src="shuffle.js" />
+  </body>
+</html>
diff --git a/vote/2016-mc/index.wml b/vote/2016-mc/index.wml
new file mode 100644
index 0000000..682f75e
--- /dev/null
+++ b/vote/2016-mc/index.wml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2016 Membership Committee Election</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>The Document Foundation 2016 Membership Committee Election</h1>
+
+    <p>
+      The Document Foundation Membership currently elects the
+      Membership Committee during autumn of every other year. Any
+      member can nominate
+      themself to run in the elections. The overall elections process
+      is overseen by the Board of Directors, which can
+      be reached at <a
+      
href="mailto:elections&#64;documentfoundation&#46;org";>elections&#64;documentfoundation&#46;org</a>.
+    </p>
+
+    <p>
+      The elections results from the 2016 Membership Committee elections 
+      will be archived here for public access.
+    </p>
+
+    <h2>2016 Membership Committee Elections Materials:</h2>
+    <ul>
+        <li>
+            <a href="../results.php?election_id=8">Detailed election 
results</a>
+        </li>
+        <li>
+            <a href="../votes.php?election_id=8">List of all votes</a>
+        </li>
+        <li>
+            <a href="../vote.php?election_id=8">Interface to vote</a>
+        </li>
+        <li>
+            <a href="candidates.html">List of candidates for the Membership 
Committee</a>
+        </li>
+
+        <li>
+            <a 
href="http://www.documentfoundation.org/governance/members/";>List of registered 
voters</a>
+        </li>
+    
+        <li>
+            <a href="rules.html">Elections Rules and Timeline</a>
+        </li>
+    
+        <li>
+            <a href="../overview-mc.html">Overview of the Membership Committee 
work</a>
+        </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/vote/2016-mc/mkical.py b/vote/2016-mc/mkical.py
new file mode 100755
index 0000000..9c8b784
--- /dev/null
+++ b/vote/2016-mc/mkical.py
@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+'''
+This Python script creates a simple iCal file based on hardcoded events
+in this file.
+'''
+
+import calendar
+import datetime
+import logging
+import math
+import os
+import vobject
+
+
+#### Configure these variables
+YEAR = 2016
+CANDIDATES_OPENED_DATE    = (YEAR, 7, 25) # In 2012, begin earlier in May
+CANDIDATES_CLOSED_DATE    = (YEAR, 8, 31)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 9,  8)
+VOTING_OPENED_DATE        = (YEAR, 9,  8)
+VOTING_CLOSED_DATE        = (YEAR, 9, 14)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 9, 15)
+CHALLENGE_CLOSED_DATE     = (YEAR, 9, 17)
+
+
+
+### I'm sorry that these functions clutter your calendar-creating experience
+### Please scroll down a bit to edit the description texts
+
+#### Application Data
+def c(multilinestring):
+    '''
+    A helper functions which cleans up a multiline string, so that
+    it doesn't contain any newlines or multiple whitespaces
+    '''
+    stripped = [l.strip() for l in multilinestring.splitlines()]
+    ret = " ".join (stripped)
+    return ret
+    
+def d(year, month, day):
+    '''
+    Just a tiny wrapper around datetime.datetime to create a datetime object
+    '''
+    return datetime.date(year, month, day)
+
+
+
+CANDIDATES_OPENED = (
+    d(*CANDIDATES_OPENED_DATE),
+    'Announcements and list of candidates opens',
+    c("""If you are a member of The Document Foundation and are interested 
+    in running for election, you may nominate yourself by sending an 
+    e-mail to [email protected] with your name, e-mail 
+    address, corporate affiliation (if any), and a description of why 
+    you'd like to serve, before
+    %s (23:59 UTC).""" % d(*CANDIDATES_CLOSED_DATE)) + '''
+    ''' + c("""    
+    You should also send a summary of your candidacy announcement 
+    (75 words or less) to [email protected]. """) + '''
+    '''
+)
+
+CANDIDATES_CLOSED = (
+    d(*CANDIDATES_CLOSED_DATE),
+    'List of candidates closed',
+    CANDIDATES_OPENED[2] # Get the same text again
+)
+
+CANDIDATES_ANNOUNCED = (
+    d(*CANDIDATES_ANNOUNCED_DATE),
+    'List of candidates announced',
+    'You may now start to send your questions to the candidates'
+)
+
+VOTING_OPENED = (
+    d(*VOTING_OPENED_DATE),
+    'Instructions to vote are sent',
+    'Please read your email and follow these instructions and submit your vote 
by %s' % d(*VOTING_CLOSED_DATE)
+)
+VOTING_CLOSED = (
+    d(*VOTING_CLOSED_DATE),
+    'Votes must be returned',
+    'Preliminary results are announced on %s' % d(*PRELIMINARY_RESULTS_DATE)
+)
+
+
+PRELIMINARY_RESULTS = (
+    d(*PRELIMINARY_RESULTS_DATE),
+    'Preliminary results are announced',
+    'The preliminary results can be challenged until %s' % 
d(*CHALLENGE_CLOSED_DATE)
+)
+
+CHALLENGE_CLOSED = (
+    d(*CHALLENGE_CLOSED_DATE),
+    'Challenges to the results closed',
+    "If there weren't any challenges, preliminary results are valid"
+)
+
+
+
+
+def create_ical(eventlist):
+    '''Generates an ical stream based on the list given as eventlist.
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('create_ical')
+
+    cal = vobject.iCalendar()
+    cal.add('method').value = 'PUBLISH'
+    cal.add('calscale').value = 'GREGORIAN'
+    cal.add('x-wr-timezone').value = 'UTC'
+    
+    for (timestamp, summary, description) in eventlist:
+        log.debug('creating %s, %s', timestamp, description)
+        vevent = cal.add('vevent')
+        vevent.add('dtstart').value = timestamp
+        vevent.add('dtend').value = timestamp + datetime.timedelta(1)
+        vevent.add('summary').value = summary
+        vevent.add('description').value = description
+    
+    stream = cal.serialize()
+    return stream
+
+
+def wraptext(s, width):
+    '''Wraps a string @s at @width characters.
+    
+    >>> wraptext('fooo', 2)
+    ['fo','oo']
+    '''
+    l = len(s)
+    nr_frames = int(math.ceil(float(l)/width))
+    print nr_frames
+    frames = []
+    for i in xrange(nr_frames):
+        start, end = i*width, (i+1) * width
+        frames.append(s[start:end])
+        # One could (and prolly should) yield that
+    return frames
+
+def ordinal(n):
+    n = int(n)
+    if 10 <= n % 100 < 20:
+        return str(n) + 'th'
+    else:
+       return  str(n) + {1 : 'st', 2 : 'nd', 3 : 'rd'}.get(n % 10, "th")
+                       
+
+def cal_for_month(month, events, width=80, year=datetime.datetime.now().year):
+    '''Generates a textual calendar for the @month in @year.
+    It will return a string with the calendar on the left hand side and the
+    events on the right hand side.
+    @events shall be a list with tuples: timestamp, summary, description.
+    
+    Returns a string with the calendar
+    '''
+    log = logging.getLogger('cal_for_month')
+
+    cal = calendar.TextCalendar()
+    calstrings = cal.formatmonth(year, month, 3).splitlines()
+
+    for (timestamp, summary, description) in events:
+        log.debug('creating %s, %s', timestamp, summary)
+        year, month, day = timestamp.year, timestamp.month, timestamp.day
+        maxwidth = max([len(cs) for cs in calstrings])
+        rightwidth = 80 - maxwidth
+        for i, line in enumerate(calstrings):
+            needles =      (" %d " % day,
+                           " %d\n" % day)
+            replacement = "(%d)" % day
+            # Find the day so that we can highlight it and add a comment
+            day_in_week = False
+            for needle in needles:
+                if needle in line+"\n":
+                    # k, this looks a bit weird but we have that corner 
+                    # case with the day being at the end of the line 
+                    # which in turn will have been split off
+                    day_in_week = True
+                    break # Set the needle to the found one
+            if day_in_week == False: # Nothing found, try next week
+                log.debug('Day (%d) not found in %s', day, line)
+                continue
+            else:
+                log.debug('Day (%d) found in %s', day, line)
+                new_line = (line+"\n").replace(needle, replacement).rstrip()
+                new_line += "   %s (%s)" % (summary, ordinal(day))
+                # Replace in-place for two events in the same week
+                # FIXME: This has bugs :-( 
+                calstrings[i] = new_line
+                    
+    return os.linesep.join(calstrings)
+
+def create_textcal(eventlist):
+    '''Generates a multiline string containing a calendar with the 
+    events written on the side
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('textcal')
+    log.debug('Generating from %s', eventlist)
+    months = set(map(lambda x: x[0].month, eventlist))
+    year = set(map(lambda x: x[0].year, eventlist)).pop()
+    
+    final_cal = []
+    for month in months:
+        events = filter(lambda x: x[0].month == month, eventlist)
+        log.debug('Events for %d: %s', month, events)
+        month_cal = cal_for_month(month, events, year=year)
+        final_cal.append(month_cal)
+        
+    return os.linesep.join(final_cal)
+
+if __name__ == "__main__":
+    from optparse import OptionParser
+    parser = OptionParser("usage: %prog [options]")
+    parser.add_option("-l", "--loglevel", dest="loglevel", help="Sets the 
loglevel to one of debug, info, warn, error, critical", 
+                      default=None)
+    parser.add_option("-i", "--ical",
+                      action="store_true", dest="ical", default=False,
+                      help="print iCal file to stdout")
+    parser.add_option("-t", "--textcal",
+                      action="store_true", dest="tcal", default=False,
+                      help="print textual calendar to stdout")
+    (options, args) = parser.parse_args()
+
+    loglevel = {'debug': logging.DEBUG, 'info': logging.INFO,
+                'warn': logging.WARNING, 'error': logging.ERROR,
+                'critical': logging.CRITICAL}.get(options.loglevel, 
logging.WARNING)
+    logging.basicConfig( level=loglevel )
+    log = logging.getLogger()
+    
+    eventlist = [
+        CANDIDATES_OPENED,
+        CANDIDATES_CLOSED,
+        CANDIDATES_ANNOUNCED,
+        VOTING_OPENED,
+        VOTING_CLOSED,
+        PRELIMINARY_RESULTS,
+        CHALLENGE_CLOSED,
+    ]
+    
+    if not any([options.ical, options.tcal]):
+        parser.error("You want to select either ical or textcal output. See 
--help for details")
+    if options.ical:
+        ical = create_ical( eventlist )
+        print ical
+    if options.tcal:
+        tcal = create_textcal( eventlist )
+        print tcal
diff --git a/vote/2016-mc/rules.wml b/vote/2016-mc/rules.wml
new file mode 100644
index 0000000..64368bb
--- /dev/null
+++ b/vote/2016-mc/rules.wml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>The Document Foundation 2016 Membership Committee Election 
Rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>Rules &amp; Timeline for The Document Foundation 2016 Membership 
Committee Election</h1>
+
+    <h2>Election Rules</h2>
+
+    <ol>
+      <li>
+      See the <a href="http://www.documentfoundation.org/satzung.pdf";>Document 
Foundation statutes</a> (and the non-binding
+      <a href="http://www.documentfoundation.org/statutes.pdf";>English 
version</a>)
+      for general rules.
+      </li>
+      <li>
+       There are 5 committee seats and 4 deputy roles that are to be filled 
during these elections.
+      </li>
+<li>As per § 12 II of our statues, the Membership Committee's term lasts two 
years. The current committee started its duty on September 19, 2014. Therefore, 
the old committee remains in charge until the end of September 18, 2016, so the 
new committee will be in charge the day after that, which is September 19, 
2016.</li>
+
+<li>As per § 6 III, only members of the Board of Trustees of The Document 
Foundation, as well as current members of any of its bodies, are eligible to be 
elected into the Membership Committee, and the election is overseen by the 
Board of Directors (§ 12 II).</li>
+
+<li>The active electoral right is reserved to those who have been members of 
the Board of Trustees before this announcement (§ 12 II).</li>
+
+<li>§ 6 III also states that members of the Board of Directors or their 
deputies may not be members of the Membership Committee and vice versa. This 
means that current members of the Board of Directors are eligible to be 
elected, but given that with the acceptance of their new role they lose their 
current role in the board, they would have to step down from the Board of 
Directors the minute before accepting to become a member of the Membership 
Committee.</li>
+
+<li>There is one more notable limitation: Per § 8 IV of the statutes, a 
maximum of 1/3 members of the Membership Committee is allowed to work on an 
employment basis for the same company, organization, entities, affiliates or 
subdivisions.</li>
+
+<li>Nomination of candidates fulfilling the above requirements, as well as 
self nomination is welcome. In total, at least five Membership Committee 
members are required, and given there are enough candidates, up to four 
deputies can be elected (§ 12 II).</li>
+
+<li>Re-election of current members of the Membership Committee is explicitly 
permitted (§ 12 II).</li>
+
+<li>Votes will be held confidential during the elections, but an anonymized 
archive of all submitted votes will be made publicly accessible at its 
conclusion.</li>
+
+<li>The Document Foundation Board of Directors is responsible for counting the 
votes.</li>
+
+<li>All discussion related to the elections should be held on 
[email protected]. Members are invited to ask questions to 
one or all candidates on that list.</li>
+    </ol>
+
+    <h2>Timeline</h2>
+    <ul>
+    <li>1. 2016-07-25: announcement of the elections; and start of the 
nomination phase</li>
+    <li>2. 2016-08-31, 24:00 CET/UTC+2: end of the nomination phase (one week 
before the election starts, as per § 12 II)</li>
+    <li>3. 2016-09-08, 00:00 CET/UTC+2: official start of the elections (at 
least 45 days after #1, as per § 12 II)</li>
+    <li>4. 2016-09-14, 24:00 CET/UTC+2: end of the elections</li>
+    <li>5. 2016-09-15: announcement of the preliminary results; and start of 
the challenging phase</li>
+    <li>6. 2016-09-17, 24:00 CET/UTC+2: end of the challenging phase</li>
+    <li>7. 2016-09-18: official announcement of the final results</li>
+    <li>8. 2016-09-19: new Membership Committee officially in charge</li>
+    </ul>
+  </body>
+</html>
diff --git a/vote/2016-mc/shuffle.js b/vote/2016-mc/shuffle.js
new file mode 100644
index 0000000..49a939a
--- /dev/null
+++ b/vote/2016-mc/shuffle.js
@@ -0,0 +1,8 @@
+window.onload = shuffle;
+
+function shuffle() {
+    var ol = document.querySelector('ol');
+    for (var i = ol.children.length; i >= 0; i--) {
+        ol.appendChild(ol.children[Math.random() * i | 0]);
+    }
+}
diff --git a/vote/2016-mc/timeline.ics b/vote/2016-mc/timeline.ics
new file mode 100644
index 0000000..033d07c
--- /dev/null
+++ b/vote/2016-mc/timeline.ics
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140719
+DTEND;VALUE=DATE:20140720
+DESCRIPTION:If you are a member of The Document Foundation and are interes
+ ted in running for election\, you may nominate yourself by sending an e-ma
+ il to [email protected] with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2014-08-27 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss@documentfounda
+ tion.org.\n    
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140827
+DTEND;VALUE=DATE:20140828
+DESCRIPTION:If you are a member of The Document Foundation and are interes
+ ted in running for election\, you may nominate yourself by sending an e-ma
+ il to [email protected] with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2014-08-27 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss@documentfounda
+ tion.org.\n    
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140904
+DTEND;VALUE=DATE:20140905
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140904
+DTEND;VALUE=DATE:20140905
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2014-09-11
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140911
+DTEND;VALUE=DATE:20140912
+DESCRIPTION:Preliminary results are announced on 2014-09-12
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140912
+DTEND;VALUE=DATE:20140913
+DESCRIPTION:The preliminary results can be challenged until 2014-09-17
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:[email protected]
+DTSTART;VALUE=DATE:20140917
+DTEND;VALUE=DATE:20140918
+DESCRIPTION:If there weren't any challenges\, preliminary results are vali
+ d
+SUMMARY:Challenges to the results closed
+END:VEVENT
+X-WR-TIMEZONE:UTC
+END:VCALENDAR
+
diff --git a/vote/2016-mc/voting-instructions.txt 
b/vote/2016-mc/voting-instructions.txt
new file mode 100644
index 0000000..4f41b10
--- /dev/null
+++ b/vote/2016-mc/voting-instructions.txt
@@ -0,0 +1,38 @@
[email protected]
[email protected]
+Your Document Foundation 2016 Membership Committee Elections Voting Token
+Dear $member,
+
+The election of The Document Foundation Membership Committee will soon
+be open.
+
+Voting will run from 2016-09-08, 00:00 CET/UTC+2
+until 2016-09-14, 24:00 CET/UTC+2.
+
+To vote, please go to
+https://elections.documentfoundation.org/vote.php?election_id=8
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+https://elections.documentfoundation.org/2016-mc/candidates.html
+
+When instructed to do so, enter the following details:
+
+   E-mail: $email
+   Vote token: $token
+
+The election has 4 steps - first, you must identify yourself using the
+voting token above. Then select your preferred candidates in order of
+preference. A third step will show you your choice, and ask you to
+confirm or return to the previous step. Finally, after confirming your
+choice, a unique identifier will be given to you which will allow you
+to verify after the election that your vote was counted correctly. To
+ensure anonymity, no link will be kept between this token and your
+identifiers, so please keep this token safe. Once you have voted, you
+will not be able to vote again.
+
+Thank you for your vote!
+
+Regards,
+  Thorsten Behrens
+  On behalf of The Document Foundation Board of Directors
diff --git a/vote/include/step2-choose.php b/vote/include/step2-choose.php
index 5cbf78b..01fdcae 100644
--- a/vote/include/step2-choose.php
+++ b/vote/include/step2-choose.php
@@ -14,7 +14,7 @@ function step2_do () {
   $result .= "Once you are happy with the order, submit your vote. You will 
have ";
   $result .= "the chance to review and confirm your ballot on the next 
page.</p>";
 
-  $result .= "<p>You can vote for up to 10 candidates of your choice, with no 
restrictions. ";
+  $result .= "<p>You can vote for up to 9 candidates of your choice, with no 
restrictions. ";
   $result .= "Your vote will be counted for your first choice candidate as ";
   $result .= "long as the candidate is still in the race, and when the 
candidate is eliminated, your ";
   $result .= "vote will transfer to the next preference candidate still in the 
";
diff --git a/vote/include/step3-confirm.php b/vote/include/step3-confirm.php
index 560d424..6e4e179 100644
--- a/vote/include/step3-confirm.php
+++ b/vote/include/step3-confirm.php
@@ -41,7 +41,8 @@ function step3_do () {
   }
 
   $result .= "<p>To confirm this vote, please continue to the next step. ";
-  $result .= "To modify your choice, hit the \"Back\" button in your 
browser.</p>\n";
+  /*$result .= "To modify your choice, hit the \"Back\" button in your 
browser.</p>\n";*/
+  $result .= "To modify your choice, please close your browser and start the 
voting process again.</p>\n";
 
   return $result;
 }
diff --git a/vote/index.wml b/vote/index.wml
index 1bc3e23..00d9413 100644
--- a/vote/index.wml
+++ b/vote/index.wml
@@ -42,6 +42,7 @@
       <li><a href="2013-board/">Material from the 2013 board of directors 
elections</a></li>
       <li><a href="2014-mc/">Material from the 2014 Membership Committee 
Elections</a></li>
       <li><a href="2015-board/">Material from the 2015 Board of Directors 
elections</a></li>
+      <li><a href="2016-mc/">Material from the 2016 Membership Committee 
Elections</a></li>
     </ul>
 
 <!-- Do not close the body or html tag because we still add stuff to the 
footer -->
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to