[foundation-web] election/2013: initial setup



commit e8a782e30cf5e3119d14dbee9965011ea88acc2f
Author: Tobias Mueller (ideabox) <tobiasmue gnome org>
Date:   Wed Apr 3 17:02:15 2013 +0200

    election/2013: initial setup

 configure.in                                       |    1 +
 foundation.gnome.org/vote/2013/Makefile.am         |   14 +
 foundation.gnome.org/vote/2013/candidates.wml      |  216 ++++++++++++++++
 foundation.gnome.org/vote/2013/index.wml           |   64 +++++
 foundation.gnome.org/vote/2013/mkical.py           |  258 ++++++++++++++++++++
 foundation.gnome.org/vote/2013/rules.wml           |  145 +++++++++++
 foundation.gnome.org/vote/2013/timeline.ics        |   79 ++++++
 foundation.gnome.org/vote/2013/votes.blt           |    1 +
 .../vote/2013/voting-instructions.txt              |   32 +++
 foundation.gnome.org/vote/Makefile.am              |    2 +-
 10 files changed, 811 insertions(+), 1 deletions(-)
---
diff --git a/configure.in b/configure.in
index 332ab34..587c9b9 100644
--- a/configure.in
+++ b/configure.in
@@ -47,4 +47,5 @@ foundation.gnome.org/vote/2009/Makefile
 foundation.gnome.org/vote/2010/Makefile
 foundation.gnome.org/vote/2011/Makefile
 foundation.gnome.org/vote/2012/Makefile
+foundation.gnome.org/vote/2013/Makefile
 ])
diff --git a/foundation.gnome.org/vote/2013/Makefile.am b/foundation.gnome.org/vote/2013/Makefile.am
new file mode 100644
index 0000000..b46f64d
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2013
+ 
+page_SCRIPTS = \
+       index.html \
+       candidates.html\
+       rules.html 
+
+page_DATA = \
+       timeline.ics
+       mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/foundation.gnome.org/vote/2013/candidates.wml b/foundation.gnome.org/vote/2013/candidates.wml
new file mode 100644
index 0000000..53c2294
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/candidates.wml
@@ -0,0 +1,216 @@
+<?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>GNOME Foundation 2013 Elections Candidates</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  </head>
+
+  <body>
+    <h1>Candidates for the GNOME Foundation 2013 Elections</h1>
+
+    <p>
+      Below you will find a list of candidates who are running for the
+      GNOME 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://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#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 require a significant amount of time and effort
+      and the ability to work and communicate with other people, companies, and
+      the media. The board of directors will represent GNOME to companies and
+      the world in a very real way. 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 on the
+      <a href="http://foundation.gnome.org";>GNOME Foundation Web Site</a>.
+    </p>
+
+    <p>
+      If you have any questions, please send them to either
+      <a href="http://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#46;org</a>
+      or to us at <a
+      href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+    </p>
+
+    <h2>Candidates for the GNOME Foundation Board of Directors</h2>
+
+    <ol>
+        <p>
+          <!--
+            <li><strong>David Nielsen</strong><br />
+                Affiliation: <em>None</em><br />
+                Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00000.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00000.html</a>
+                <blockquote>
+                     I have been part of GNOME in various roles since the early 2.x days
+                    and I think it is time together volunteer for an organizational role. I have
+                    already arranged 2 hackfests under GNOME and found that I enjoy the
+                    work and that I have a talent for the required fundraising as well as
+                    drumming up excitement. I have plenty of sparetime as I am retired on
+                    medical grounds and I would love to dedicate some of it towards
+                    dragging GNOME kicking and screaming into the 21th century. I have
+                    plenty of ideas for how to raise funds and for where GNOME can (and
+                    should) go in the future.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+
+
+        <p>
+            <li><strong>Bastien Nocera</strong><br />
+            Affiliation: <em>Red Hat UK Ltd</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00001.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00001.html</a>
+                <blockquote>
+                    I intend to carry on being a point of contact for developer relations,
+                    and a technical advisor within the Board itself. I'm also the one asking
+                    naive questions about US employment law and accountancy rules.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+        
+        
+        
+        <p>
+            <li><strong>Emmanuele Bassi</strong><br />
+            Affiliation: <em>Intel Corporation</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00002.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00002.html</a>
+                <blockquote>
+                    I have contributed to GNOME for the past 10 years as a developer and
+                    maintainer; I served on the GUADEC papers committee multiple times, as
+                    well as a Director of the Foundation's Board for the past year in the
+                    role of Secretary.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+        
+        <p>
+            <li><strong>Andreas Nilsson</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00003.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00003.html</a>
+                <blockquote>
+                     I've been involved in GNOME since 2005 doing a variety of things. Mainly graphics and 
websites. I served on the Board of Directors between 2010 and 2011. If I get elected, I want to primary focus 
on two things. Fundraising and getting new developers. I want to make our fundraising campaigns really 
effective and make it as fun and rewarding to make donations to the GNOME project as possible. I'm happy that 
we have now been able to release the new, more effective Friends of GNOME site, but there is more we can do 
in this area. For new developers, I'm happy with the outcome of the GSOC and WOP's we've been running, and we 
should continue to do these, but I also want to make sure the inroads for potential contributors who visit 
our website is as clear as possible. I'm sure I will get very much tangled up in whatever pops up during the 
way for the board (as things tend to do), but I will keep these two items in mind as goals for the term. 
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Joanmarie Diggs</strong><br />
+            Affiliation: <em>Igalia, S.L.</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00004.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00004.html</a>
+                <blockquote>
+                    I have contributed to GNOME for the past five+ years as a developer and
+                    maintainer of the Orca screen reader and as a member of the GNOME
+                    Accessibility Team. For most of those years, my GNOME-related work had
+                    to be done evenings, weekends, and holidays as a community contributor.
+                    Joining Igalia in October 2011 has made it possible for GNOME
+                    Accessibility to become part of my DayJob, which in turn has given me a
+                    very precious commodity: spare time. I would like to spend some of that
+                    time serving on the GNOME Foundation Board.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+        
+        <p>
+            <li><strong>Tobias Mueller</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00005.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00005.html</a>
+                <blockquote>
+                    I am a Free Software enthusiast and GNOME activist for about 5 years now. I mainly 
worked in the Bugsquad and the Membership Committee.
+                    Now, I want to do something new and help making GNOME a successful Free Software project.
+                    I have experience with working with people, i.e. by organising events like a GNOME 
party, various booths at conferences or by hosting a (mid-size) conference at our university.
+                    I want to improve the Bylaws and the visibility of Teams within GNOME.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+        
+        <p>
+            <li><strong>Max Huang</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00006.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00006.html</a>
+                <blockquote>
+                    I am a freelancer who teach linux in the training center, also a
+                    Novell CNI instructor. I have contributed to GNOME for the past 2
+                    years for GNOME.Asia. Teaching linux at school and have workshop with
+                    open source and linux at school.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+
+
+
+        
+        <p>
+            <li><strong>Shaun McCance</strong><br />
+            Affiliation: <em>Syllogist LLC (freelance)</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00007.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00007.html</a>
+                <blockquote>
+                    If elected, I want to work to make our treasurer duties simpler and
+                    more understandable, whether as the treasurer again or as an advisor
+                    to a new treasurer. The treasurer role is inevitably difficult for
+                    somebody without a background in accounting. We need to make sure we
+                    can smoothly transition year to year, because handling GNOME's money
+                    is one of the most important things the Foundation does.
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+        </p>
+        
+        <p>
+            <li><strong>Seif Lotfy</strong><br />
+            Affiliation: <em>Collabora Ltd.</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2013-May/msg00008.html";>https://mail.gnome.org/archives/foundation-announce/2013-May/msg00008.html</a>
+                <blockquote>                   
+                Currently, I spend nearly 50% of my working time on GNOME-related projects, thanks to 
Collabora. I also spend a lot of my time working on deploying Zeitgeist into some smaller projects like Gedit 
(the dashboard plugin), which greatly benefited from design collaboration with Hylke Bons and Garrett LeSage.
+
+                Sometimes misunderstandings and miscommunication happen in the community, especially between 
different teams who may share similar goals but different viewpoints. This blurred vision was evident in 
mailing-lists over the past few weeks. (Thankfully Olav did a great job moderating the lists to not let it 
get too out-of-hand.) 
+                </blockquote>
+                <!-- NOT YET Verified Member -->
+            </li>
+          -->
+        </p>
+        
+    </ol>
+
+
+
+
+
+    <h2>Additional Elections-related Information</h2>
+
+    <p>
+      Note, that according to the
+      <a href="http://www.gnome.org/wp-content/uploads/2011/11/bylaws.pdf";>Bylaws</a> Article VIII Section 2d
+      there is a 2-person maximum on the number of people affiliated with any
+      one company that can be on the board: if more than 2 persons from one
+      company get elected, only the top 2 vote getters will get on.
+      You will be able to vote for up to 7 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 gnome org">elections gnome org</a>.
+    </p>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2013/index.wml b/foundation.gnome.org/vote/2013/index.wml
new file mode 100644
index 0000000..8671b2d
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/index.wml
@@ -0,0 +1,64 @@
+<?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>GNOME Foundation 2013 Elections</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta name="author" content="Tobias Mueller" />
+  </head>
+
+  <body>
+
+    <h1>GNOME Foundation 2013 Elections</h1>
+
+    <p>
+      The GNOME Foundation Membership currently elects the Board of 
+      Directors each year for July, 1st. Any member can nominate 
+      themself to run in the elections. The overall elections process 
+      is overseen by the Membership and Elections Committee, which can 
+      be reached at <a
+      href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+    </p>
+
+    <p>
+      The elections results from the 2013 Board of Directors elections 
+      will be archived here for public access.
+    </p>
+
+    <h2>2013 Elections Materials:</h2>
+    <ul>
+      <!--
+        <li>
+            <a href="https://mail.gnome.org/archives/foundation-list/2013-June/msg00025.html";>Election 
results announcement</a>
+        </li>
+        <li>
+            <a href="../../vote/results.php?election_id=17">Detailed election results</a>
+        </li>
+        <li>
+            <a href="../../vote/votes.php?election_id=17">List of all votes</a>
+        </li>
+        <li>
+            <a href="../../vote/vote.php?election_id=17">Interface to vote</a>
+        </li>
+
+        <li>
+            <a href="candidates.html">List of candidates for Board of Directors</a>
+        </li>
+      -->
+        <li>
+            <a href="http://www.gnome.org/foundation/membership/?date=2013-05-30";>List of registered 
voters</a>
+        </li>
+    
+        <li>
+            <a href="rules.html">Elections Rules and Timeline</a> (webcal <a
+            href="webcal://vote.gnome.org/2013/timeline.ics">timeline</a>)
+        </li>
+    
+        <li>
+            <a href="../overview.html">Overview of the Board of Directors role</a>
+        </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2013/mkical.py b/foundation.gnome.org/vote/2013/mkical.py
new file mode 100644
index 0000000..35d3199
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/mkical.py
@@ -0,0 +1,258 @@
+#!/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    = (YEAR, 5,  6)
+CANDIDATES_CLOSED_DATE    = (YEAR, 5, 19)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 5, 22)
+VOTING_OPENED_DATE        = (YEAR, 5, 26)
+VOTING_CLOSED_DATE        = (YEAR, 6,  9)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 6, 11)
+CHALLENGE_CLOSED_DATE     = (YEAR, 6, 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 GNOME Foundation and are interested 
+    in running for election, you may nominate yourself by sending an 
+    e-mail to foundation-announce gnome 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 elections gnome org  If you are not yet a 
+    GNOME Foundation member and would like to stand for election, 
+    you must first apply for membership and be accepted to be eligible 
+    to run. (You may, however, announce your candidacy prior to formal 
+    acceptance of your application;
+    should your application not be accepted, you will not be included in 
+    the list of candidates.)""") + '''
+    '''
+)
+
+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.WARN, 'error': logging.ERROR,
+                'critical': logging.CRITICAL}.get(options.loglevel, logging.WARN)
+    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/foundation.gnome.org/vote/2013/rules.wml b/foundation.gnome.org/vote/2013/rules.wml
new file mode 100644
index 0000000..87d61f6
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/rules.wml
@@ -0,0 +1,145 @@
+<?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>GNOME Foundation 2013 Elections Rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <h1>Rules &amp; Timeline for the GNOME Foundation 2013 Elections</h1>
+
+    <h2>Elections Rules</h2> 
+
+    <ol>
+      <li>
+        See the <a 
href="https://git.gnome.org/browse/foundation-web/tree/foundation.gnome.org/about/bylaws.rst";>GNOME 
Foundation Bylaws</a> (<a href="http://www.gnome.org/foundation/governance/attachment/bylaws-2/";>PDF</a>) for
+        general rules.
+      </li>
+      <li>
+       There are 7 board slots that are to be filled during these elections.
+      </li>
+      <li>
+        Members of the GNOME Foundation as of
+        <!-- CANDIDATES_ANNOUNCED_DATE -->2013-05-22
+        
+        are eligible to vote in the elections. Members without voting rights
+        such as <a 
href="https://mail.gnome.org/archives/foundation-announce/2012-May/msg00015.html";>Emeritus members</a>
+        are not eligible to vote.
+        Anyone who has made a 
+        contribution to GNOME can apply for membership by completing the
+        <a href="http://foundation.gnome.org/membership/apply/";>application</a>.
+      </li>
+      <li>
+        Any eligible voter is eligible to be elected to the Board of Directors.
+        To announce your candidacy, send a message to
+        <a 
href="http://mail.gnome.org/archives/foundation-announce/";>foundation-announce&#64;gnome&#46;org</a>
+        with your full name, e-mail, corporate affiliation (if any), and a
+        description of your reasons for wanting to serve as a director.
+        Candidacies must be announced prior to
+        <!-- CANDIDATES_CLOSED_DATE -->2013-05-19, 23:59 UTC.
+        
+      </li>
+      <li>
+        All candidates should mail a summary of their candicacy announcement
+        (see previous rule) to <a
+        href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+        Summaries should be no more than 75 words of continuous text (i.e. no
+        bullet lists or multiple paragraphs) and must be received by the
+        nomination deadline given above. A compilation of the summaries will
+        be mailed to all registered voters several days prior to the elections.
+      </li>
+      <li>
+        All discussion related to the elections should be held on
+        <a href="http://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#46;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
+       <!-- VOTING_OPENED_DATE -->2013-05-26,
+       
+       and votes must be returned by
+       <!-- VOTING_CLOSED_DATE -->2013-06-09, 23:59 UTC.
+      </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 GNOME Foundation Membership and Elections Committee is
+        responsible for counting the votes.
+        The committee serves at the pleasure of the GNOME Board of Directors
+        as per Section 9.1 of the bylaws.
+      </li>
+      <li>
+       The 7 candidates voted for most as counted by a <a 
href="http://mail.gnome.org/archives/foundation-list/2009-March/msg00012.html";>single transferable
+       vote system</a> will be elected, except that no more than two
+       individuals affiliated with any one corporation may be elected. Should
+       more than two of the top seven vote-getters be affiliated with the
+       same company, only the two with the most votes will be considered
+       elected. For a full definition of corporate affiliation, see the
+       <a href="https://live.gnome.org/Foundation/Charter";>GNOME Foundation charter</a>.
+      </li>
+      <li>
+        In the event of a tie for the final slot on the board, the Elections
+        Committee will schedule run-off elections as soon as possible. 
+      </li>
+      <li>
+        The Elections Committee will announce preliminary results as soon as
+        possible after the elections close, 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:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>
+        prior to
+        <!-- PRELIMINARY_RESULTS_DATE -->2013-06-18.
+        
+        The decision of the Elections Committee as
+        to any challenge shall be final. Once any challenges have been
+        resolved, the Elections Committee shall announce the final results.
+      </li>
+      <li>
+        Any questions regarding these procedures should be directed to the
+        Elections Committee by e-mail to <a
+        href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+        The committee shall have the power to make any necessary changes or
+        clarifications to these rules at any point during the elections.
+      </li>
+    </ol>
+
+    <h2>Timeline</h2>
+    <p><small>(all deadlines are 23:59 UTC)</small></p> 
+    <ul>
+      <li>
+        <!-- CANDIDATES_OPENED_DATE -->2013-05-06: Announcements and list of candidates opens.
+      </li>
+      <li>
+        <!-- CANDIDATES_CLOSED_DATE -->2013-05-19: Last day to announce candidacies, submit summary 
statements.
+      </li>
+      <li>
+        <!-- CANDIDATES_ANNOUNCED_DATE -->2013-05-22: Final list of candidates.
+      </li>
+      <li>
+        <!-- VOTING_OPENED_DATE -->2013-05-26: Instructions mailed to eligible voters, voting begins.
+      </li>
+      <li>
+        <!-- VOTING_CLOSED_DATE -->2013-06-09: Voting closes.
+      </li>
+      <li>
+        <!-- PRELIMINARY_RESULTS_DATE -->2013-06-11: Preliminary results are announced.
+      </li>
+      <li>
+        <!-- CHALLENGE_CLOSED_DATE -->2013-06-18: Last day to challenge preliminary results.
+      </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2013/timeline.ics b/foundation.gnome.org/vote/2013/timeline.ics
new file mode 100644
index 0000000..452cfee
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/timeline.ics
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:20130402T013514Z-24544 ideabox
+DTSTART;VALUE=DATE:20130506
+DTEND;VALUE=DATE:20130507
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+  in running for election\, you may nominate yourself by sending an e-mail 
+ to foundation-announce gnome org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2013-05-19 (23:59 UTC).\n     You should also send a summary of your
+  candidacy announcement (75 words or less) to elections gnome org  If you 
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+  not be included in the list of candidates.)\n    
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-38448 ideabox
+DTSTART;VALUE=DATE:20130519
+DTEND;VALUE=DATE:20130520
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+  in running for election\, you may nominate yourself by sending an e-mail 
+ to foundation-announce gnome org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2013-05-19 (23:59 UTC).\n     You should also send a summary of your
+  candidacy announcement (75 words or less) to elections gnome org  If you 
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+  not be included in the list of candidates.)\n    
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-69020 ideabox
+DTSTART;VALUE=DATE:20130522
+DTEND;VALUE=DATE:20130523
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-43791 ideabox
+DTSTART;VALUE=DATE:20130526
+DTEND;VALUE=DATE:20130527
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2013-06-09
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-29541 ideabox
+DTSTART;VALUE=DATE:20130609
+DTEND;VALUE=DATE:20130610
+DESCRIPTION:Preliminary results are announced on 2013-06-11
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-46711 ideabox
+DTSTART;VALUE=DATE:20130611
+DTEND;VALUE=DATE:20130612
+DESCRIPTION:The preliminary results can be challenged until 2013-06-18
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20130402T013514Z-20809 ideabox
+DTSTART;VALUE=DATE:20130618
+DTEND;VALUE=DATE:20130619
+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/foundation.gnome.org/vote/2013/votes.blt b/foundation.gnome.org/vote/2013/votes.blt
new file mode 100644
index 0000000..10bda90
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/votes.blt
@@ -0,0 +1 @@
+fill me with the ballot after the election
diff --git a/foundation.gnome.org/vote/2013/voting-instructions.txt 
b/foundation.gnome.org/vote/2013/voting-instructions.txt
new file mode 100644
index 0000000..047dc6a
--- /dev/null
+++ b/foundation.gnome.org/vote/2013/voting-instructions.txt
@@ -0,0 +1,32 @@
+Dear %(firstname)s %(lastname)s,
+
+The election of the GNOME Foundation Board will soon be open.
+
+Voting will run from 2013-05-26 (Sunday) until 2013-06-09, 23:59 UTC.
+
+To vote, please go to http://vote.gnome.org/vote.php?id=17
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+http://vote.gnome.org/2013/candidates.html
+
+When instructed to do so, enter the following details:
+
+   E-mail: %(email)s
+   Vote token: %(token_or_last_renewed_on)s
+
+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,
+  Tobias Mueller
+  on behalf of the GNOME Membership and Elections Commitee
diff --git a/foundation.gnome.org/vote/Makefile.am b/foundation.gnome.org/vote/Makefile.am
index 41bd645..a1427b1 100644
--- a/foundation.gnome.org/vote/Makefile.am
+++ b/foundation.gnome.org/vote/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = include 2004-10 2005-10 2000 2001 2002 2003 2004 2005 2006 2007 2007-10 2009 2010 2011 2012
+SUBDIRS = include 2004-10 2005-10 2000 2001 2002 2003 2004 2005 2006 2007 2007-10 2009 2010 2011 2012 2013
 
 urlpath = /vote
  



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]