[Libreoffice-commits] voting.git: configure.in include/add-header.xsl include/evilsedhack vote/2015-board vote/index.wml vote/overview.wml

Florian Effenberger floeff at documentfoundation.org
Fri Dec 4 07:39:04 PST 2015


 configure.in                            |    1 
 include/add-header.xsl                  |   12 -
 include/evilsedhack                     |   12 -
 vote/2015-board/Makefile.am             |   14 +
 vote/2015-board/candidates.wml          |  151 +++++++++++++++++++
 vote/2015-board/index.wml               |   57 +++++++
 vote/2015-board/mkical.py               |  253 ++++++++++++++++++++++++++++++++
 vote/2015-board/rules.wml               |  114 ++++++++++++++
 vote/2015-board/timeline.ics            |   72 +++++++++
 vote/2015-board/voting-instructions.txt |   39 ++++
 vote/index.wml                          |    5 
 vote/overview.wml                       |    2 
 12 files changed, 717 insertions(+), 15 deletions(-)

New commits:
commit ab2701a6b4970bed7b34bebf4d04726aa048fd5b
Author: Florian Effenberger <floeff at documentfoundation.org>
Date:   Fri Dec 4 14:26:21 2015 +0000

    2015 Board Elections
    
    Change-Id: I474ae65e30ef6e2fe77a13fededd6eca2d253c1a
    Reviewed-on: https://gerrit.libreoffice.org/20400
    Reviewed-by: Florian Effenberger <floeff at documentfoundation.org>
    Tested-by: Florian Effenberger <floeff at documentfoundation.org>

diff --git a/configure.in b/configure.in
index decfd68..7de36f7 100644
--- a/configure.in
+++ b/configure.in
@@ -21,4 +21,5 @@ vote/2012-mc/Makefile
 vote/2013-confpoll/Makefile
 vote/2013-board/Makefile
 vote/2014-mc/Makefile
+vote/2015-board/Makefile
 ])
diff --git a/include/add-header.xsl b/include/add-header.xsl
index 7758dcc..32eb3c0 100644
--- a/include/add-header.xsl
+++ b/include/add-header.xsl
@@ -52,12 +52,12 @@
           </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 
-              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/">LGPLv3</a>).<br/>
-     "LibreOffice" and "The Document Foundation" are registered trademarks. Their respective logos and icons are subject to 
+              <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
+              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/>
+     "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>.
   </td>
diff --git a/include/evilsedhack b/include/evilsedhack
index 5e30061..04e0a6d 100755
--- a/include/evilsedhack
+++ b/include/evilsedhack
@@ -11,12 +11,12 @@ 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 
-              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/">LGPLv3</a>).<br/>
-     "LibreOffice" and "The Document Foundation" are registered trademarks. Their respective logos and icons are subject to 
+              <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
+              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/>
+     "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>.
   </td>
diff --git a/vote/2015-board/Makefile.am b/vote/2015-board/Makefile.am
new file mode 100644
index 0000000..0f46813
--- /dev/null
+++ b/vote/2015-board/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2015-board
+
+page_SCRIPTS = \
+	index.html \
+	candidates.html\
+	rules.html
+
+page_DATA = \
+	timeline.ics
+	mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/vote/2015-board/candidates.wml b/vote/2015-board/candidates.wml
new file mode 100644
index 0000000..b950f04
--- /dev/null
+++ b/vote/2015-board/candidates.wml
@@ -0,0 +1,151 @@
+<?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 2015 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 2015 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="http://listarchives.documentfoundation.org/www/board-discuss/">board-discuss@documentfoundation.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="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:board-discuss@documentfoundation.org">board-discuss@documentfoundation.org</a> (public list)
+      or in private to the Membership Committee at <a
+      href="mailto:elections@documentfoundation.org">elections@documentfoundation.org</a>.
+    </p>
+
+    <h2>Candidates for The Document Foundation Board of Directors</h2>
+
+    <p>In alphabetical order by surname:</p>
+
+    <ol>
+<li><strong>Thorsten Behrens</strong><br />
+             Affiliation: <em>CIB</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03763.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03763.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 chairman, I'd love to offer my continued help to push things even further for the next two years. Things I promise to do: having eyes and ears open for the community, grow the contributor base, keep things fun, fair & sustainable, and help with the largely-German administrative grunt work.
+             </blockquote>
+          </li>
+<li><strong>Osvaldo Gervasi</strong><br />
+             Affiliation: <em>Department of Mathematics and Computer Science, University of Perugia, Italy </em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03740.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03740.html</a>
+             <blockquote>
+Hi, I am a University researcher, I inspired LibreUmbria and co-founded LibreItalia. My candidacy is aimed to pursue the extraordinarily successful TDF activity, contributing with new ideas for the near challenging future. I believe we have to still increase the number of developers, collecting contributions from technicians attracted by FLOSS and LibreOffice, and reinforce the role of local communities, extending the aims and the successful actions LibreItalia has achieved in the last two years.
+             </blockquote>
+          </li>
+<li><strong>Jan Holešovský</strong><br />
+             Affiliation: <em>Collabora</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03751.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03751.html</a>
+             <blockquote>
+As a long-time contributor to LibreOffice, I would like to serve in the Board to help making 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: I am primarily a developer, but very active in the Design team, and recently interested in the work of the Documentation team too. I am deeply committed to LibreOffice and its
+success.
+             </blockquote>
+          </li>
+<li><strong>Marina Latini</strong><br />
+             Affiliation: <em>Studio Storti Srl</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03741.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03741.html</a>
+             <blockquote>
+I'm a free software activist from 2007 when I realized the importance of open standards as a key element for the personal freedom. Over the years I worked to promote free software and open standards, with particular attention to the office suite (OOo before and now LibreOffice). My technical background allowed me to turn passion into a job, and together with others, carry on the success of LibreOffice in Italy (as Founder of LibreItalia).
+             </blockquote>
+          </li>
+ <li><strong>Joel Madero</strong><br />
+             Affiliation: <em>None</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03744.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03744.html</a>
+             <blockquote>
+I view the job of the Board of Directors as one of creating an ecosystem where those who want to get work done are given the chance to do so. I believe the Board should remove barriers and invest in tools that will help the ecosystem thrive. I believe that each one of our contributors should be respected. Finally, I believe in transparency in the decisions we make, and always encouraging member feedback.
+             </blockquote>
+          </li>
+<li><strong>Andreas Mantke</strong><br />
+             Affiliation: <em>None</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03745.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03745.html</a>
+             <blockquote>
+56 years old, living in Duisburg, Germany, no corporate affiliation. I worked with the community since 2002 in different areas, e.g. created and run the extensions/templates-site, gave presentations about our project and run boothes. I served on the BoD for the last four years and like to run for another two years, because I believe in our way of a stable independent meritocratic (open and transparent) organization for our office software project.
+             </blockquote>
+          </li>
+<li><strong>Michael Meeks</strong><br />
+             Affiliation: <em>Collabora</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03749.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03749.html</a>
+             <blockquote>
+I'd love to serve you again on the board: as a Free Software 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 to grow our volunteer participation.
+             </blockquote>
+          </li>
+ <li><strong>Björn Michaelsen</strong><br />
+             Affiliation: <em>Canonical</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03750.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03750.html</a>
+             <blockquote>
+Im a longtime contributor to the LibreOffice codebase and maintain LibreOffice packages on Ubuntu. While I do work in quite a few of TDFs formal and informal bodies, I am still regulary active on the code. Beyond that I did take part and
+led various efforts beyond pure code at both TDF and for LibreOffice: from administration, training to organization and coordination. I aim to help LibreOffice to continue to grow organically.
+             </blockquote>
+          </li>
+ <li><strong>Simon Phipps</strong><br />
+             Affiliation: <em>Meshed Insights Ltd </em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03753.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03753.html</a>
+             <blockquote>
+After more than 30 years in the computer industry, I bring wide experience to the Board including management (at IBM, Sun, and others), open source (such as from 8 years at OSI including 3 as president) and LibreOffice (15 years if association with the predecessor project is counted). I've been involved in TDF from its beginning, ran its first elections as an MC member, participated in core team discussions and represented TDF in negotiations.
+             </blockquote>
+          </li>
+<li><strong>Eike Rathke</strong><br />
+             Affiliation: <em>Red Hat, Inc.</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03760.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03760.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>Norbert Thiebaud</strong><br />
+             Affiliation: <em>None</em><br />
+             Full statement at <a href="http://listarchives.documentfoundation.org/www/board-discuss/msg03717.html">http://listarchives.documentfoundation.org/www/board-discuss/msg03717.html</a>
+             <blockquote>
+I've been a volunteer in the project since its creation five years ago. These days, aside from my duties on the Board, I mostly work on Infra, particularly the tools and systems used by the developers (gerrit, continuous integration, automated testing, ....). I also do the Releases for the MacOSX platform and some coding, mostly low key clean-up and other fairly easy hacking.
+             </blockquote>
+          </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 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:elections at documentfoundation.org">elections at documentfoundation.org</a>.
+    </p>
+
+  </body>
+</html>
diff --git a/vote/2015-board/index.wml b/vote/2015-board/index.wml
new file mode 100644
index 0000000..4eddb44
--- /dev/null
+++ b/vote/2015-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 2015 Board of Directors Election</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>The Document Foundation 2015 Board of Directors Election</h1>
+
+    <p>
+      The Document Foundation Membership currently elects the Board of
+      Directors every other year for February, 18th. 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@documentfoundation.org">elections@documentfoundation.org</a>.
+    </p>
+
+    <p>
+      The elections results from the 2015 Board of Directors elections
+      will be archived here for public access.
+    </p>
+
+    <h2>2015 Elections Materials:</h2>
+    <ul>
+        <li>
+            <a href="../results.php?election_id=7">Detailed election results</a>
+        </li>
+        <li>
+            <a href="../votes.php?election_id=7">List of all votes</a>
+        </li>
+        <li>
+            <a href="../vote.php?election_id=7">Interface to vote</a>
+        </li>
+        <li>
+            <a href="candidates.html">List of candidates for Board of Directors</a>
+        </li>
+
+        <li>
+            <a href="http://www.documentfoundation.org/foundation/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/2015-board/mkical.py b/vote/2015-board/mkical.py
new file mode 100755
index 0000000..ad2be44
--- /dev/null
+++ b/vote/2015-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 = 2015
+CANDIDATES_OPENED_DATE    = (YEAR, 10, 19)
+CANDIDATES_CLOSED_DATE    = (YEAR, 11, 26)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 11, 26)
+VOTING_OPENED_DATE        = (YEAR, 12, 04)
+VOTING_CLOSED_DATE        = (YEAR, 12, 11)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 12, 12)
+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 elections at documentfoundation.org 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 discuss at documentfoundation.org. """) + '''
+    '''
+)
+
+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/2015-board/rules.wml b/vote/2015-board/rules.wml
new file mode 100644
index 0000000..24ff015
--- /dev/null
+++ b/vote/2015-board/rules.wml
@@ -0,0 +1,114 @@
+<?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 2015 Board of Directors Election Rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>Rules & Timeline for The Document Foundation 2015 Board of Directors Election</h1>
+
+    <h2>Elections 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 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, 2014. Therefore, the old
+board remains in charge until the end of February 17, 2016, so the new
+board will be in charge the day after that, which is February 18, 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 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 given that with the acceptance of their new role they
+lose their current role in the MC, they would have to step down from the
+Membership Committee 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).
+      </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>
+2015-10-19: announcement of the elections; and start of the nomination phase
+      </li>
+      <li>
+2015-11-26, 24:00 CET/UTC+1: end of the nomination phase (one week before the election starts, as per § 7 II)
+      </li>
+      <li>
+2015-12-04, 00:00 CET/UTC+1: official start of the elections (at least 45 days after #1, as per § 7 II)
+      </li>
+      <li>
+2015-12-11, 24:00 CET/UTC+1: end of the elections
+      </li>
+      <li>
+2015-12-12: announcement of the preliminary results
+      </li>
+      <li>
+2015-12-14, 00:00 CET/UTC+1: start of the challenging phase
+      </li>
+      <li>
+2015-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/2015-board/timeline.ics b/vote/2015-board/timeline.ics
new file mode 100644
index 0000000..5650c4b
--- /dev/null
+++ b/vote/2015-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:20131205T152434Z-54960 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131023
+DTEND;VALUE=DATE:20131024
+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 elections at documentfoundation.org with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2013-12-02 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss at documentfounda
+ tion.org.\n
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-35653 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131202
+DTEND;VALUE=DATE:20131203
+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 elections at documentfoundation.org with your name\, e-mail address\, c
+ orporate affiliation (if any)\, and a description of why you'd like to ser
+ ve\, before 2013-12-02 (23:59 UTC).\n     You should also send a summary o
+ f your candidacy announcement (75 words or less) to discuss at documentfounda
+ tion.org.\n
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-26291 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131206
+DTEND;VALUE=DATE:20131207
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-26977 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131210
+DTEND;VALUE=DATE:20131211
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2013-12-17
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-27867 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131217
+DTEND;VALUE=DATE:20131218
+DESCRIPTION:Preliminary results are announced on 2013-12-18
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-81180 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131218
+DTEND;VALUE=DATE:20131219
+DESCRIPTION:The preliminary results can be challenged until 2013-12-23
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20131205T152434Z-59 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20131223
+DTEND;VALUE=DATE:20131224
+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/2015-board/voting-instructions.txt b/vote/2015-board/voting-instructions.txt
new file mode 100644
index 0000000..eb60176
--- /dev/null
+++ b/vote/2015-board/voting-instructions.txt
@@ -0,0 +1,39 @@
+elections at documentfoundation.org
+Cor Nouws <elections at documentfoundation.org>
+Your Document Foundation 2015 Board Elections Voting Token
+Dear $member,
+
+The election of The Document Foundation Board of Directors will soon
+be open.
+
+Voting will run from 2015-12-04, 00:00 CET/UTC+1 until
+2015-12-11, 24:00 CET/UTC+1.
+
+To vote, please go to
+https://elections.documentfoundation.org/vote.php?election_id=7
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+https://elections.documentfoundation.org/2015-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,
+  Cor Nouws
+  Chairman of the Membership Committee
+  The Document Foundation
diff --git a/vote/index.wml b/vote/index.wml
index 7e32257..1bc3e23 100644
--- a/vote/index.wml
+++ b/vote/index.wml
@@ -21,12 +21,12 @@
     <p>
       The Document Foundation Membership holds its Board of
 	  Directors and Membership Committee elections usually every two
-      years. Any member can nominate themself to run in the election. 
+      years. Any member can nominate themself to run in the election.
     </p>
     <p>
       In addition, sometimes the membership is asked to collectively
       decide on important changes, or is polled e.g. for conference
-	  locations. 
+	  locations.
     </p>
     <p>
       The ones responsible for running the then-current election
@@ -41,6 +41,7 @@
       <li><a href="2013-confpoll/">Material from the 2013 conference location poll</a></li>
       <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>
     </ul>
 
 <!-- Do not close the body or html tag because we still add stuff to the footer -->
diff --git a/vote/overview.wml b/vote/overview.wml
index 9f3af1d..bf9bf81 100644
--- a/vote/overview.wml
+++ b/vote/overview.wml
@@ -63,7 +63,7 @@ society</p>
       <li>
         Announce your candidacy by sending an email to <a
         href="mailto:board-discuss@documentfoundation.org">board-discuss@documentfoundation.org</a>
-        <b>and</b> <a href="mailto:elections@documentfoundation.org">elections@documentfoundation.org</a>with a description of how you have contributed to The Document Foundation and why you want
+        <b>and</b> <a href="mailto:elections@documentfoundation.org">elections@documentfoundation.org</a> with a description of how you have contributed to The Document Foundation and why you want
         to be on the Board of Directors.
       </li>
     </ol>


More information about the Libreoffice-commits mailing list