[Libreoffice-commits] .: configure.in vote/2013-confpoll vote/index.wml vote/Makefile.am

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 15 08:02:54 PST 2013


 configure.in                               |    1 
 vote/2013-confpoll/Makefile.am             |   14 +
 vote/2013-confpoll/candidates.wml          |   87 ++++++++++
 vote/2013-confpoll/index.wml               |   51 +++++
 vote/2013-confpoll/mkical.py               |  250 +++++++++++++++++++++++++++++
 vote/2013-confpoll/rules.wml               |  104 ++++++++++++
 vote/2013-confpoll/timeline.ics            |   67 +++++++
 vote/2013-confpoll/voting-instructions.txt |   40 ++++
 vote/Makefile.am                           |    2 
 vote/index.wml                             |    1 
 10 files changed, 616 insertions(+), 1 deletion(-)

New commits:
commit ab999f2adec4b3a5cb2b71e03b771e3f44d70dc3
Author: Thorsten Behrens <tbehrens at suse.com>
Date:   Tue Jan 15 16:59:48 2013 +0100

    New poll: 2013 LibOCon location

diff --git a/configure.in b/configure.in
index 981746b..e285942 100644
--- a/configure.in
+++ b/configure.in
@@ -18,4 +18,5 @@ vote/include/Makefile
 vote/2011/Makefile
 vote/2012-confpoll/Makefile
 vote/2012-mc/Makefile
+vote/2013-confpoll/Makefile
 ])
diff --git a/vote/2013-confpoll/Makefile.am b/vote/2013-confpoll/Makefile.am
new file mode 100644
index 0000000..7216e31
--- /dev/null
+++ b/vote/2013-confpoll/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2013-confpoll
+ 
+page_SCRIPTS = \
+	index.html \
+	candidates.html\
+	rules.html 
+
+page_DATA = \
+	timeline.ics
+	mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/vote/2013-confpoll/candidates.wml b/vote/2013-confpoll/candidates.wml
new file mode 100644
index 0000000..9981dcc
--- /dev/null
+++ b/vote/2013-confpoll/candidates.wml
@@ -0,0 +1,87 @@
+<?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 LibreOffice 2013 Conference Location Candidates</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  </head>
+
+  <body>
+    <h1>Candidates for the LibreOffice 2013 Conference</h1>
+
+    <p>
+      Below you will find a list of candidates who applied for running
+      the LibreOffice 2013 conference. A short summary statement from
+      each candidate and a link to their full application is provided
+      to help you learn more about them. Please refer to the <a
+      href="http://listarchives.documentfoundation.org/www/discuss/">discuss@documentfoundation.org</a>
+      list for further information, and for questions towards the
+      candidates. The announcement blog post about the applicants is
+      <a href="http://blog.documentfoundation.org/2012/12/17/libreoffice-conference-2013-proposals/">here</a>.
+    </p>
+
+    <p>
+      If you have any questions, please send them to either
+      <a href="http://listarchives.documentfoundation.org/www/discuss/">discuss@documentfoundation.org</a>
+      or to the board at <a
+      href="mailto:info@documentfoundation.org">info@documentfoundation.org</a>.
+    </p>
+
+    <h2>List of proposals for the LibreOffice 2013 conference</h2>
+
+    <ol>
+        <li><strong>Milano, Italy</strong><br />
+           Full application at <a href="http://documentfoundation.files.wordpress.com/2012/12/milan2013.pdf">http://tdfsc.files.wordpress.com/2012/01/libocon2012_berlin_proposal.pdf</a>
+           <blockquote>
+Milan is the second largest city in Italy, and the largest
+metropolitan area with over 5 million people. The city has several
+universities plus a polytechnic school, and hosts the headquarters of
+the largest IT companies in Italy.  Milan is also rich in history and
+arts, with monuments dating back to the 5th century and several
+masterpieces like the Duomo and Leonardo's Last Supper. It is also the
+fashion capital of Italy, and a financial and commercial city.  The
+LibreOffice Conference 2013 will be organized by a group of
+enthusiastic individuals and organizations, gathered around the IT
+Department of the State University, which will be the main venue for
+the event. The conference will be the launch event for the Italian
+association: LibreItalia.  LibreOffice is at the heart of several of
+the most important migrations projects in Italy, including Provincia
+di Milano and Regione Umbria..  Milan is served by three airports,
+with direct flights to most European cities and several destinations
+in America, Africa and Asia Pacific.
+           </blockquote>
+        </li>
+        <li><strong>Montreal, Canada</strong><br />
+           Full application at <a href="http://documentfoundation.files.wordpress.com/2012/12/montreal2013.pdf">http://tdfsc.files.wordpress.com/2012/01/libocon2012_zaragoza_proposal.pdf</a>
+           <blockquote>
+Montreal is an internationally recognized high-tech hub and ranks
+second in North America for hosting international meetings. It has a
+strong and solid local FLOSS community, and as a French-speaking city
+on the North American continent, it is the natural bridge between the
+free/libre and open source software (FLOSS) communities on both sides
+of the Atlantic. Its night life is famous, with 11 university
+establishments, including four major universities (two French-
+language, two English-language), hosting a higher percentage of
+university students compared to the overall population than any other
+major city in North America. Montreal is an internationally recognized
+high-tech hub, information and communication technology clusters
+employ 100k+ people in 5,000 establishments and is among the most
+dynamic in the world both for its creativity and cutting edge
+technology.
+           </blockquote>
+        </li>
+
+    </ol>
+
+
+    <h2>Additional Poll-related Information</h2>
+
+    <p>
+      If you have any futher question, please consult the
+      <a href="rules.html">Rules for this poll</a> or write to
+      <a href="mailto:info at documentfoundation.org">info at documentfoundation.org</a>.
+    </p>
+
+  </body>
+</html>
diff --git a/vote/2013-confpoll/index.wml b/vote/2013-confpoll/index.wml
new file mode 100644
index 0000000..8905d01
--- /dev/null
+++ b/vote/2013-confpoll/index.wml
@@ -0,0 +1,51 @@
+<?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 LibreOffice 2013 Conference Location Poll</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta name="author" content="Thorsten Behrens" />
+  </head>
+
+  <body>
+
+    <h1>The LibreOffice 2013 Conference Location Poll</h1>
+
+    <p>
+      The Document Foundation Membership is asked to vote for one of
+      our <a href="http://blog.documentfoundation.org/2012/12/17/libreoffice-conference-2013-proposals/">two conference location proposals</a>.
+    </p>
+
+    <p>
+      The poll results from the LibreOffice 2013 Conference Location Poll
+      will be archived here for public access.
+    </p>
+
+    <h2>LibreOffice 2013 Conference Poll Materials:</h2>
+    <ul>
+        <li>
+            <a href="../results.php?election_id=4">Detailed election results</a>
+        </li>
+        <li>
+            <a href="../votes.php?election_id=4">List of all votes</a>
+        </li>
+        <li>
+            <a href="../vote.php?election_id=4">Interface to vote</a>
+        </li>
+        <li>
+            <a href="candidates.html">List of conference location candidates</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> (webcal <a
+            href="webcal://elections.documentfoundation.org/voting/vote/2013-confpoll/timeline.ics">timeline</a>)
+        </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/vote/2013-confpoll/mkical.py b/vote/2013-confpoll/mkical.py
new file mode 100755
index 0000000..5a901d4
--- /dev/null
+++ b/vote/2013-confpoll/mkical.py
@@ -0,0 +1,250 @@
+#!/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 = 2013
+CANDIDATES_OPENED_DATE    = (2012, 10, 2)
+CANDIDATES_CLOSED_DATE    = (2012, 12, 16)
+CANDIDATES_ANNOUNCED_DATE = (2012, 12, 17)
+VOTING_OPENED_DATE        = (YEAR, 1, 16)
+VOTING_CLOSED_DATE        = (YEAR, 2, 4)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 2, 5)
+CHALLENGE_CLOSED_DATE     = (YEAR, 2, 8)
+
+
+
+### 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 have the team and resources to organize a conference, you may send a nomination to
+    info at documentfoundation.org with your name, e-mail 
+    address, and a detailed description of your proposal, before
+    %s (23:59 UTC).""" % d(*CANDIDATES_CLOSED_DATE)) + '''
+    ''' + c("""    
+    You should also send a summary of your candidacy announcement 
+    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,
+                '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/2013-confpoll/rules.wml b/vote/2013-confpoll/rules.wml
new file mode 100644
index 0000000..04c14e8
--- /dev/null
+++ b/vote/2013-confpoll/rules.wml
@@ -0,0 +1,104 @@
+<?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 LibreOffice 2013 conference location poll rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>Rules & Timeline for the LibreOffice 2013 conference location poll</h1>
+
+    <h2>Poll Rules</h2> 
+
+    <ol>
+      <li>
+        Members of The Document Foundation as of 2013-01-01
+        
+        are eligible to vote in this poll. Anyone who has made a 
+        contribution to The Document Foundation can apply for membership by completing the
+        <a href="http://www.documentfoundation.org/foundation/application-for-tdf-community-membership/">application</a>.
+        Also, your membership needs to be valid at least until the end
+        of the poll (2013-01-28).
+        
+      </li>
+      <li>
+        All discussion related to this poll should be held on
+        <a href="http://listarchives.documentfoundation.org/www/discuss/">discuss@documentfoundation.org</a>.
+        Members are invited to ask questions to one or all candidates on that
+        list.
+      </li>
+      <li>
+      	Instructions explaining how to vote will be sent via e-mail to all
+      	eligible voters on
+      	2013-01-14,
+      	
+      	and votes must be returned by 2013-01-28, 23:59 UTC.
+      </li>
+      <li>
+        Votes will be held confidential during this poll, 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>
+        The poll concludes the 2013 LibreOffice conference location by
+        simple majority. Every member can vote for exactly one
+        location. Empty votes are discarded.
+      </li>
+      <li>
+        In the event of a tie, the board will schedule a run-off poll as soon as possible.
+      </li>
+      <li>
+        The board will announce preliminary results as soon as
+        possible after the poll closes, along with instructions on how to
+        access the votes archive and how to independently verify the vote
+        count.
+      </li>
+      <li>
+        Any eligible voter may challenge the preliminary results by e-mailing
+        <a
+        href="mailto:info@documentfoundation.org">info@documentfoundation.org</a>
+        prior to 2013-02-01.
+        
+        The decision of the board as to any challenge shall be final. Once all challenges have been
+        resolved, the board shall announce the final results.
+      </li>
+      <li>
+        Any questions regarding these procedures should be directed to the
+        board by e-mail to <a
+        href="mailto:info@documentfoundation.org">info@documentfoundation.org</a>.
+        The board reserves the right to make any necessary changes or
+        clarifications to these rules at any point during the poll.
+      </li>
+    </ol>
+
+    <h2>Timeline</h2>
+    <p><small>(all deadlines are 23:59 UTC)</small></p> 
+    <ul>
+      <li>
+        2013-01-15: Announcement of the poll
+      </li>
+      <li>
+        2013-01-16: Instructions mailed to eligible voters, voting starts.
+      </li>
+      <li>
+        2013-02-04: Voting closes.
+      </li>
+      <li>
+        2013-02-05: Preliminary results are announced.
+      </li>
+      <li>
+        2013-02-08: Last day to challenge preliminary results.
+      </li>
+      <li>
+        2013-02-09: Announcement of final results.
+      </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/vote/2013-confpoll/timeline.ics b/vote/2013-confpoll/timeline.ics
new file mode 100644
index 0000000..543fd7e
--- /dev/null
+++ b/vote/2013-confpoll/timeline.ics
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:20130115T155316Z-54572 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20121002
+DTEND;VALUE=DATE:20121003
+DESCRIPTION:If you have the team and resources to organize a conference\, 
+ you may send a nomination to info at documentfoundation.org with your name\, 
+ e-mail address\, and a detailed description of your proposal\, before 2012
+ -12-16 (23:59 UTC).\n     You should also send a summary of your candidacy
+  announcement to discuss at documentfoundation.org.\n    
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-16643 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20121216
+DTEND;VALUE=DATE:20121217
+DESCRIPTION:If you have the team and resources to organize a conference\, 
+ you may send a nomination to info at documentfoundation.org with your name\, 
+ e-mail address\, and a detailed description of your proposal\, before 2012
+ -12-16 (23:59 UTC).\n     You should also send a summary of your candidacy
+  announcement to discuss at documentfoundation.org.\n    
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-64711 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20121217
+DTEND;VALUE=DATE:20121218
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-45145 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20130116
+DTEND;VALUE=DATE:20130117
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2013-02-04
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-32146 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20130204
+DTEND;VALUE=DATE:20130205
+DESCRIPTION:Preliminary results are announced on 2013-02-05
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-98493 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20130205
+DTEND;VALUE=DATE:20130206
+DESCRIPTION:The preliminary results can be challenged until 2013-02-08
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20130115T155316Z-65440 at thinkpad.bad.example
+DTSTART;VALUE=DATE:20130208
+DTEND;VALUE=DATE:20130209
+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/2013-confpoll/voting-instructions.txt b/vote/2013-confpoll/voting-instructions.txt
new file mode 100644
index 0000000..d23f6f9
--- /dev/null
+++ b/vote/2013-confpoll/voting-instructions.txt
@@ -0,0 +1,40 @@
+info at documentfoundation.org
+thb at documentfoundation.org
+Your LibreOffice 2013 Conference Location Poll Voting Token
+
+Dear $member,
+
+The poll for the LibreOffice 2013 conference location will soon be
+open.
+
+Voting will run from 2013-01-16 (Wednesday) until 2013-02-04, 23:59 UTC.
+
+To vote, please go to
+
+ https://elections.documentfoundation.org/vote.php?election_id=4
+
+and follow the instructions there.
+
+A list of candidates and their statements are available at
+https://elections.documentfoundation.org/2013-confpoll/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 candidate (you can
+choose at most one). 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 poll 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/Makefile.am b/vote/Makefile.am
index 0cf09df..efc96ce 100644
--- a/vote/Makefile.am
+++ b/vote/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = include 2011 2012-confpoll 2012-mc
+SUBDIRS = include 2011 2012-confpoll 2012-mc 2013-confpoll
 
 urlpath = /vote
  
diff --git a/vote/index.wml b/vote/index.wml
index 37a9ef7..f898463 100644
--- a/vote/index.wml
+++ b/vote/index.wml
@@ -38,6 +38,7 @@
       <li><a href="2011/">Material from the 2011 BoD Elections</a></li>
       <li><a href="2012-confpoll/">Material from the 2012 conference location poll</a></li>
       <li><a href="2012-mc/">Material from the 2012 Membership Committee Elections</a></li>
+      <li><a href="2013-confpoll/">Material from the 2013 conference location poll</a></li>
     </ul>
 
 <!-- Do not close the body or html tag because we still add stuff to the footer -->


More information about the Libreoffice-commits mailing list