Changeset - 04f246d85071
[Not reviewed]
0 0 125
Patrick Altman - 5 years ago 2015-10-16 17:53:02
paltman@gmail.com
Initial commit of the PinaxCon demo site
125 files changed with 4805 insertions and 0 deletions:
0 comments (0 inline, 0 general)
.gitignore
Show inline comments
 
new file 100644
 
*.pyc
 
node_modules/
README.md
Show inline comments
 
new file 100644
 
# PinaxCon
 

	
 
A working demo of Symposion and the Symposion Starter Project.  Online at:
 

	
 
http://conference.pinaxproject.com/
 

	
 

	
 

	
 
## Getting Started
 

	
 
Make sure you are using a virtual environment of some sort (e.g. `virtualenv` or
 
`pyenv`).
 

	
 
```
 
createdb pinaxcon
 
pip install -r requirements.txt
 
./manage.py migrate
 
./manage.py loaddata sites conference proposal_base sitetree sponsor_benefits sponsor_levels
 
./manage.py runserver
 
```
 

	
 

	
 
pinax-boxes
 
pinax-pages
fixtures/conference.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_conference.conference",
 
        "fields": {
 
            "timezone": "US/Eastern",
 
            "start_date": "2040-01-01",
 
            "end_date": "2040-01-04",
 
            "title": "PinaxCon"
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_conference.section",
 
        "fields": {
 
            "conference": 1,
 
            "start_date": "2040-01-01",
 
            "name": "General Sessions",
 
            "end_date": "2040-01-01",
 
            "slug": "general-sessions"
 
        }
 
    }
 
]
fixtures/proposal_base.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_proposals.proposalsection",
 
        "fields": {
 
            "start": null,
 
            "section": 1,
 
            "end": null,
 
            "closed": null,
 
            "published": null
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_proposals.proposalkind",
 
        "fields": {
 
            "section": 1,
 
            "name": "talk",
 
            "slug": "talk"
 
        }
 
    }
 
]
fixtures/sites.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "sites.site",
 
        "fields": {
 
            "domain": "localhost:8000",
 
            "name": "PinaxCon"
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "sites.site",
 
        "fields": {
 
            "domain": "conference.pinaxproject.com",
 
            "name": "PinaxCon"
 
        }
 
    }
 
]
fixtures/sitetree.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "sitetree.tree",
 
        "fields": {
 
            "alias": "main",
 
            "title": "main"
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"about/\"",
 
            "inbreadcrumbs": true,
 
            "title": "About",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 2,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"venue/\"",
 
            "inbreadcrumbs": true,
 
            "title": "Venue",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 3,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "#",
 
            "inbreadcrumbs": true,
 
            "title": "Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 4,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": false
 
        }
 
    },
 
    {
 
        "pk": 4,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "home",
 
            "inbreadcrumbs": true,
 
            "title": "Home",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 1,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 5,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_apply",
 
            "inbreadcrumbs": true,
 
            "title": "Apply to be a Sponsor",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 6,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 6,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_list",
 
            "inbreadcrumbs": true,
 
            "title": "{{ SITE_NAME }} Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 5,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    }
 
]
fixtures/sponsor_benefits.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "weblogo",
 
            "name": "Web Logo",
 
            "description": "Logo to appear on the website"
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "file",
 
            "name": "Print Logo",
 
            "description": "Logo to appear in print"
 
        }
 
    },
 
    {
 
        "pk": 4,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "text",
 
            "name": "Sponsor Description",
 
            "description": "Description to appear on website and in print"
 
        }
 
    },
 
    {
 
        "pk": 9,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 5,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 10,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 6,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 11,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    },
 
    {
 
        "pk": 7,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    }
 
]
fixtures/sponsor_levels.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 10000,
 
            "name": "Gold",
 
            "order": 0
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 5000,
 
            "name": "Silver",
 
            "order": 1
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 2000,
 
            "name": "Bronze",
 
            "order": 2
 
        }
 
    }
 
]
gondor.yml
Show inline comments
 
new file 100644
 
site: eldarion-conferences/pinaxcon
 
exec:
 
  web: gunicorn --bind=0.0.0.0 --log-file - --workers=4 pinaxcon.wsgi
 
branches:
 
  master: primary
manage.py
Show inline comments
 
new file 100755
 
#!/usr/bin/env python
 

	
 
import os
 
import sys
 

	
 

	
 
if __name__ == "__main__":
 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pinaxcon.settings")
 

	
 
    from django.core.management import execute_from_command_line
 

	
 
    execute_from_command_line(sys.argv)
package.json
Show inline comments
 
new file 100644
 
{
 
  "repository": {
 
    "type": "git",
 
    "url": "https://github.com/pinax/pinax-project"
 
  },
 
  "scripts": {
 
     "build": "./node_modules/.bin/webpack --config=static/webpack.config.js -p",
 
     "watch": "./node_modules/.bin/webpack --config=static/webpack.config.js -w"
 
  },
 
  "dependencies": {
 
    "babel-core": "^5.8.23",
 
    "babel-loader": "^5.3.2",
 
    "bootstrap": "^3.3.5",
 
    "css-loader": "^0.17.0",
 
    "extract-text-webpack-plugin": "^0.8.2",
 
    "file-loader": "^0.8.4",
 
    "font-awesome": "^4.4.0",
 
    "html-webpack-plugin": "^1.6.1",
 
    "jquery": "^2.1.4",
 
    "less": "^2.5.1",
 
    "less-loader": "^2.2.0",
 
    "style-loader": "^0.12.3",
 
    "webpack": "^1.12.1"
 
  }
 
}
pinaxcon/__init__.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 

	
 
__about__ = """
 
In addition to what is provided by the "zero" project, this project
 
provides thorough integration with django-user-accounts, adding
 
comprehensive account management functionality. It is a foundation
 
suitable for most sites that have user accounts.
 
"""
 

	
 
default_app_config = "pinaxcon.apps.AppConfig"
pinaxcon/apps.py
Show inline comments
 
new file 100644
 
from importlib import import_module
 

	
 
from django.apps import AppConfig as BaseAppConfig
 

	
 

	
 
class AppConfig(BaseAppConfig):
 

	
 
    name = "pinaxcon"
 

	
 
    def ready(self):
 
        import_module("pinaxcon.receivers")
pinaxcon/hooks.py
Show inline comments
 
new file 100644
 
import markdown
 

	
 
import pinax.boxes.hooks
 
import pinax.pages.hooks
 

	
 

	
 
def markup_renderer(content):
 
    return markdown.markdown(content)
 

	
 

	
 
class PinaxBoxesHookSet(pinax.boxes.hooks.DefaultHookSet):
 

	
 
    def parse_content(self, content):
 
        return markup_renderer(content)
 

	
 

	
 
class PinaxPagesHookSet(pinax.pages.hooks.DefaultHookSet):
 

	
 
    def parse_content(self, content):
 
        return markup_renderer(content)
pinaxcon/proposals/__init__.py
Show inline comments
 
new file 100644
pinaxcon/proposals/admin.py
Show inline comments
 
new file 100644
 
from django.contrib import admin
 

	
 
from .models import TalkProposal
 

	
 

	
 
admin.site.register(TalkProposal)
pinaxcon/proposals/forms.py
Show inline comments
 
new file 100644
 
from django import forms
 

	
 
from .models import TalkProposal
 

	
 

	
 
class ProposalForm(forms.ModelForm):
 

	
 
    def clean_description(self):
 
        value = self.cleaned_data["description"]
 
        if len(value) > 400:
 
            raise forms.ValidationError(
 
                u"The description must be less than 400 characters"
 
            )
 
        return value
 

	
 

	
 
class TalkProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = TalkProposal
 
        fields = [
 
            "title",
 
            "audience_level",
 
            "description",
 
            "abstract",
 
            "additional_notes",
 
            "recording_release",
 
        ]
pinaxcon/proposals/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
from __future__ import unicode_literals
 

	
 
from django.db import models, migrations
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    dependencies = [
 
        ('symposion_proposals', '__first__'),
 
    ]
 

	
 
    operations = [
 
        migrations.CreateModel(
 
            name='TalkProposal',
 
            fields=[
 
                ('proposalbase_ptr', models.OneToOneField(primary_key=True, to='symposion_proposals.ProposalBase', parent_link=True, auto_created=True, serialize=False)),
 
                ('audience_level', models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate'), (2, b'Experienced')])),
 
                ('recording_release', models.BooleanField(help_text=b'By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box.', default=True)),
 
            ],
 
            options={
 
                'verbose_name': 'talk proposal',
 
            },
 
            bases=('symposion_proposals.proposalbase',),
 
        ),
 
    ]
pinaxcon/proposals/migrations/__init__.py
Show inline comments
 
new file 100644
pinaxcon/proposals/models.py
Show inline comments
 
new file 100644
 
from django.db import models
 

	
 
from symposion.proposals.models import ProposalBase
 

	
 

	
 
class Proposal(ProposalBase):
 

	
 
    AUDIENCE_LEVEL_NOVICE = 1
 
    AUDIENCE_LEVEL_EXPERIENCED = 2
 
    AUDIENCE_LEVEL_INTERMEDIATE = 3
 

	
 
    AUDIENCE_LEVELS = [
 
        (AUDIENCE_LEVEL_NOVICE, "Novice"),
 
        (AUDIENCE_LEVEL_INTERMEDIATE, "Intermediate"),
 
        (AUDIENCE_LEVEL_EXPERIENCED, "Experienced"),
 
    ]
 

	
 
    audience_level = models.IntegerField(choices=AUDIENCE_LEVELS)
 

	
 
    recording_release = models.BooleanField(
 
        default=True,
 
        help_text="By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box."
 
    )
 

	
 
    class Meta:
 
        abstract = True
 

	
 

	
 
class TalkProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "talk proposal"
pinaxcon/receivers.py
Show inline comments
 
new file 100644
 
from django.dispatch import receiver
 

	
 
from account.signals import password_changed
 
from account.signals import user_sign_up_attempt, user_signed_up
 
from account.signals import user_login_attempt, user_logged_in
 

	
 
from pinax.eventlog.models import log
 

	
 

	
 
@receiver(user_logged_in)
 
def handle_user_logged_in(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="USER_LOGGED_IN",
 
        extra={}
 
    )
 

	
 

	
 
@receiver(password_changed)
 
def handle_password_changed(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="PASSWORD_CHANGED",
 
        extra={}
 
    )
 

	
 

	
 
@receiver(user_login_attempt)
 
def handle_user_login_attempt(sender, **kwargs):
 
    log(
 
        user=None,
 
        action="LOGIN_ATTEMPTED",
 
        extra={
 
            "username": kwargs.get("username"),
 
            "result": kwargs.get("result")
 
        }
 
    )
 

	
 

	
 
@receiver(user_sign_up_attempt)
 
def handle_user_sign_up_attempt(sender, **kwargs):
 
    log(
 
        user=None,
 
        action="SIGNUP_ATTEMPTED",
 
        extra={
 
            "username": kwargs.get("username"),
 
            "email": kwargs.get("email"),
 
            "result": kwargs.get("result")
 
        }
 
    )
 

	
 

	
 
@receiver(user_signed_up)
 
def handle_user_signed_up(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="USER_SIGNED_UP",
 
        extra={}
 
    )
pinaxcon/settings.py
Show inline comments
 
new file 100644
 
import os
 
import dj_database_url
 

	
 

	
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
 
BASE_DIR = PACKAGE_ROOT
 

	
 
DEBUG = bool(int(os.environ.get("DEBUG", "1")))
 

	
 
DATABASES = {
 
    "default": dj_database_url.config(default="postgres://localhost/pinaxcon")
 
}
 

	
 
ALLOWED_HOSTS = [
 
    os.environ.get("GONDOR_INSTANCE_DOMAIN"),
 
    "conference.pinaxproject.com"
 
]
 

	
 
# Local time zone for this installation. Choices can be found here:
 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
 
# although not all choices may be available on all operating systems.
 
# On Unix systems, a value of None will cause Django to use the same
 
# timezone as the operating system.
 
# If running in a Windows environment this must be set to the same as your
 
# system time zone.
 
TIME_ZONE = "UTC"
 

	
 
# Language code for this installation. All choices can be found here:
 
# http://www.i18nguy.com/unicode/language-identifiers.html
 
LANGUAGE_CODE = "en-us"
 

	
 
SITE_ID = int(os.environ.get("SITE_ID", 1))
 

	
 
# If you set this to False, Django will make some optimizations so as not
 
# to load the internationalization machinery.
 
USE_I18N = True
 

	
 
# If you set this to False, Django will not format dates, numbers and
 
# calendars according to the current locale.
 
USE_L10N = True
 

	
 
# If you set this to False, Django will not use timezone-aware datetimes.
 
USE_TZ = True
 

	
 
# Absolute filesystem path to the directory that will hold user-uploaded files.
 
# Example: "/home/media/media.lawrence.com/media/"
 
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
 

	
 
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
 
# trailing slash.
 
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
 
MEDIA_URL = "/site_media/media/"
 

	
 
# Absolute path to the directory static files should be collected to.
 
# Don"t put anything in this directory yourself; store your static files
 
# in apps" "static/" subdirectories and in STATICFILES_DIRS.
 
# Example: "/home/media/media.lawrence.com/static/"
 
STATIC_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "static")
 

	
 
# URL prefix for static files.
 
# Example: "http://media.lawrence.com/static/"
 
STATIC_URL = "/site_media/static/"
 

	
 
# Additional locations of static files
 
STATICFILES_DIRS = [
 
    os.path.join(PROJECT_ROOT, "static", "dist"),
 
]
 

	
 
# List of finder classes that know how to find static files in
 
# various locations.
 
STATICFILES_FINDERS = [
 
    "django.contrib.staticfiles.finders.FileSystemFinder",
 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
 
]
 

	
 
# Make this unique, and don't share it with anybody.
 
SECRET_KEY = "6r&z0i#!k-thu4nv^zzx!f$fbp(&#2i5mq_^%%@ihu_qxxotl_"
 

	
 
TEMPLATES = [
 
    {
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 
        "DIRS": [
 
            os.path.join(PACKAGE_ROOT, "templates"),
 
        ],
 
        "APP_DIRS": True,
 
        "OPTIONS": {
 
            "debug": DEBUG,
 
            "context_processors": [
 
                "django.contrib.auth.context_processors.auth",
 
                "django.core.context_processors.debug",
 
                "django.core.context_processors.i18n",
 
                "django.core.context_processors.media",
 
                "django.core.context_processors.static",
 
                "django.core.context_processors.tz",
 
                "django.core.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "account.context_processors.account",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
            ],
 
        },
 
    },
 
]
 

	
 
MIDDLEWARE_CLASSES = [
 
    "django.contrib.sessions.middleware.SessionMiddleware",
 
    "django.middleware.common.CommonMiddleware",
 
    "django.middleware.csrf.CsrfViewMiddleware",
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
 
    "reversion.middleware.RevisionMiddleware",
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
 
]
 

	
 
ROOT_URLCONF = "pinaxcon.urls"
 

	
 
# Python dotted path to the WSGI application used by Django's runserver.
 
WSGI_APPLICATION = "pinaxcon.wsgi.application"
 

	
 
INSTALLED_APPS = [
 
    "django.contrib.admin",
 
    "django.contrib.auth",
 
    "django.contrib.contenttypes",
 
    "django.contrib.messages",
 
    "django.contrib.sessions",
 
    "django.contrib.sites",
 
    "django.contrib.staticfiles",
 

	
 
    # theme
 
    "bootstrapform",
 
    "pinax_theme_bootstrap",
 

	
 
    # external
 
    "account",
 
    "easy_thumbnails",
 
    "taggit",
 
    "reversion",
 
    "metron",
 
    "sitetree",
 
    "pinax.boxes",
 
    "pinax.eventlog",
 
    "pinax.pages",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.sponsorship",
 
    "symposion.teams",
 

	
 
    # project
 
    "pinaxcon",
 
    "pinaxcon.proposals"
 
]
 

	
 
# A sample logging configuration. The only tangible logging
 
# performed by this configuration is to send an email to
 
# the site admins on every HTTP 500 error when DEBUG=False.
 
# See http://docs.djangoproject.com/en/dev/topics/logging for
 
# more details on how to customize your logging configuration.
 
LOGGING = {
 
    "version": 1,
 
    "disable_existing_loggers": False,
 
    "filters": {
 
        "require_debug_false": {
 
            "()": "django.utils.log.RequireDebugFalse"
 
        }
 
    },
 
    "handlers": {
 
        "mail_admins": {
 
            "level": "ERROR",
 
            "filters": ["require_debug_false"],
 
            "class": "django.utils.log.AdminEmailHandler"
 
        }
 
    },
 
    "loggers": {
 
        "django.request": {
 
            "handlers": ["mail_admins"],
 
            "level": "ERROR",
 
            "propagate": True,
 
        },
 
    }
 
}
 

	
 
FIXTURE_DIRS = [
 
    os.path.join(PROJECT_ROOT, "fixtures"),
 
]
 

	
 
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
 

	
 
ACCOUNT_OPEN_SIGNUP = True
 
ACCOUNT_EMAIL_UNIQUE = True
 
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
 
ACCOUNT_LOGIN_REDIRECT_URL = "home"
 
ACCOUNT_LOGOUT_REDIRECT_URL = "home"
 
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
 
ACCOUNT_USE_AUTH_AUTHENTICATE = True
 

	
 
AUTHENTICATION_BACKENDS = [
 
    "symposion.teams.backends.TeamPermissionsBackend",
 
    "account.auth_backends.UsernameAuthenticationBackend",
 
]
 

	
 
CONFERENCE_ID = 1
 
PROPOSAL_FORMS = {
 
    "talk": "pinaxcon.proposals.forms.TalkProposalForm",
 
}
 
PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
 
PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
pinaxcon/templates/_account_bar.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% load account_tags %}
 

	
 

	
 
<ul class="nav navbar-nav pull-right">
 
    {% if request.user.is_authenticated %}
 
        <span class="navbar-text">
 
            <i class="fa fa-user"></i> {% user_display request.user %}
 
        </span>
 
        <li>
 
            <a href="{% url "dashboard" %}"><i class="fa fa-tasks"></i> {% trans "Dashboard" %}</a>
 
        </li>
 
        <li>
 
            <a href="{% url 'account_settings' %}"><i class="fa fa-cog"></i> {% trans "Settings" %}</a>
 
        </li>
 
        <li>
 
            <a id="account_logout" href="{% url 'account_logout' %}"><i class="fa fa-power-off"></i> {% trans "Log out" %}</a>
 
        </li>
 
    {% else %}
 
        <li><a href="{% url 'account_login' %}">{% trans "Log in" %}</a></li>
 
        {% if ACCOUNT_OPEN_SIGNUP %}
 
            <li><a href="{% url 'account_signup' %}">{% trans "Sign up" %}</a></li>
 
        {% endif %}
 
    {% endif %}
 
</ul>
 

	
 
<form id="accountLogOutForm" style="display: none;" action="{% url 'account_logout' %}" method="POST">
 
    {% csrf_token %}
 
</form>
pinaxcon/templates/_default_sidebar.html
Show inline comments
 
new file 100644
 
{% load sponsorship_tags %}
 
{% load thumbnail %}
 
{% load pinax_boxes_tags %}
 

	
 
{% sponsor_levels as levels %}
 

	
 
<h4>Sponsors</h4>
 

	
 
<div class="sponsor-list">
 
    {% box "sponsor-top" %}
 
    {% for level in levels %}
 
        {% if level.sponsors %}
 
            <h3 style="margin-top: 3em;">{{ level.name }}</h3>
 
\
 
            {% for sponsor in level.sponsors %}
 
                <div style="margin: 10px 0;">
 
                    <a href="{{ sponsor.external_url }}">
 
                        <img src="{% thumbnail sponsor.website_logo '100x60' %}" alt="{{ sponsor.name }}" />
 
                    </a>
 
                </div>
 
            {% endfor %}
 
        {% endif %}
 
    {% endfor %}
 
</div>
pinaxcon/templates/_footer.html
Show inline comments
 
new file 100644
 
<div class="pull-left">
 
    &copy;2015
 
</div>
 

	
 
<div class="pull-right">
 
    Site powered by <a href="http://eldarion.com/symposion/"><b>Symposion</b></a>.
 
</div>
pinaxcon/templates/_scripts.html
Show inline comments
 
new file 100644
 
<script src='/site_media/static/js/site.js?45281e7e2f5ad8c9f8a5'></script>
pinaxcon/templates/_styles.html
Show inline comments
 
new file 100644
 
<link href='/site_media/static/css/site.css?45281e7e2f5ad8c9f8a5' rel='stylesheet' />
pinaxcon/templates/dashboard.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load i18n %}
 
{% load proposal_tags %}
 
{% load review_tags %}
 
{% load teams_tags %}
 

	
 
{% block head_title %}Dashboard{% endblock %}
 

	
 
{% block body_class %}auth{% endblock %}
 

	
 
{% block body %}
 
    <div class="panel panel-default">
 
        <div class="panel-heading">
 
            <div class="pull-right">
 
                {% if not user.speaker_profile %}
 
                    <a href="{% url "speaker_create" %}" class="btn btn-xs btn-default">
 
                        <i class="fa fa-plus-sign"></i> Create a speaker profile
 
                    </a>
 
                {% else %}
 
                    <a href="{% url "speaker_edit" %}" class="btn btn-xs btn-default">
 
                        <i class="fa fa-pencil"></i> Edit your speaker profile
 
                    </a>
 
                    <a href="{% url "proposal_submit" %}" class="btn btn-xs btn-default">
 
                        <i class="fa fa-plus-sign"></i> Submit a new proposal
 
                    </a>
 
                {% endif %}
 
            </div>
 
            <h3 class="panel-title">
 
                <i class="fa fa-bullhorn"></i>
 
                {% trans "Speaking" %}
 
            </h3>
 
        </div>
 

	
 
        <div class="panel-body">
 
            {% if not user.speaker_profile %}
 
                <p>To submit a proposal, you must first <a href="{% url "speaker_create" %}">create a speaker profile</a>.</p>
 
            {% else %}
 
                <h4>Your Proposals</h4>
 
                {% if not user.speaker_profile.proposals.exists %}
 
                    <p>No proposals submitted yet.</p>
 
                {% endif %}
 
            {% endif %}
 
        </div>
 
        {% if user.speaker_profile.proposals.exists %}
 
            <table class="table">
 
                <tr>
 
                    <th>Title</th>
 
                    <th>Session type</th>
 
                    <th>Status</th>
 
                    <th>Actions</th>
 
                </tr>
 
                {% for proposal in user.speaker_profile.proposals.all %}
 
                    {% include "symposion/proposals/_proposal_row.html" %}
 
                {% endfor %}
 
            </table>
 
        {% endif %}
 

	
 
        {% if user.speaker_profile %}
 
            {% associated_proposals as associated_proposals %}
 
            {% if associated_proposals %}
 
                <div class="panel-body">
 
                    <h4>Proposals you have joined as an additional speaker</h4>
 
                </div>
 
                <table class="table">
 
                    <tr>
 
                        <th>Title</th>
 
                        <th>Session type</th>
 
                        <th>Status</th>
 
                        <th>Actions</th>
 
                    </tr>
 
                    {% for proposal in associated_proposals %}
 
                        {% include "symposion/proposals/_proposal_row.html" %}
 
                    {% endfor %}
 
                </table>
 
            {% endif %}
 

	
 
            {% pending_proposals as pending_proposals %}
 
            {% if pending_proposals %}
 
                <div class="panel-body"><h4>Proposals you have been invited to join</h4></div>
 
                <table class="table">
 
                    <tr>
 
                        <th>Title</th>
 
                        <th>Session type</th>
 
                        <th>Status</th>
 
                        <th>Actions</th>
 
                    </tr>
 
                    {% for proposal in pending_proposals %}
 
                        {% include "symposion/proposals/_pending_proposal_row.html" %}
 
                    {% endfor %}
 
                </table>
 
            {% endif %}
 
        {% endif %}
 
    </div>
 

	
 
    <div class="panel panel-default">
 
        <div class="panel-heading">
 
            <div class="pull-right header-actions">
 
                {% if not user.sponsorships.exists %}
 
                    <a href="{% url "sponsor_apply" %}" class="btn btn-xs btn-default">
 
                        <i class="fa fa-plus-sign"></i>
 
                        Apply to be a sponsor
 
                    </a>
 
                {% endif %}
 
            </div>
 
            <h3 class="panel-title">
 
                <i class="fa fa-briefcase"></i>
 
                {% trans "Sponsorship" %}
 
            </h3>
 
        </div>
 

	
 
        <div class="panel-body">
 
            {% if not user.sponsorships.exists %}
 
                <p>If you or your organization would be interested in sponsorship opportunities, <a href="{% url "sponsor_apply" %}">use our online form to apply to be a sponsor</a>.
 
            {% else %}
 
                <h4>Your Sponsorship</h4>
 
                <ul class="list-group">
 
                    {% for sponsorship in user.sponsorships.all %}
 
                        <li class="list-group-item">
 
                            <a href="{% url "sponsor_detail" sponsorship.pk %}"><b>{{ sponsorship.name }}</b></a>
 
                            ({{ sponsorship.level }})
 
                            {% if not sponsorship.active %}
 
                                <span class="label label-warning">awaiting approval</span>
 
                            {% endif %}
 
                        </li>
 
                    {% endfor %}
 
                </ul>
 
            {% endif %}
 
            {% if user.is_staff %}
 
                <p>
 
                    As staff, you can directly <a href="{% url "sponsor_add" %}">add a sponsor</a> if the organization isn't
 
                    applying themselves.
 
                </p>
 
            {% endif %}
 
        </div>
 
    </div>
 

	
 
    {% if review_sections %}
 
        <div class="panel panel-default">
 
            <div class="panel-heading">
 
                <h3 class="panel-title">
 
                    <i class="fa fa-briefcase"></i>
 
                    {% trans "Reviews" %}
 
                </h3>
 
            </div>
 
            <div class="panel-body">
 
                <h4>Reviews by Section</h4>
 
                <ul>
 
                    {% for section in review_sections %}
 
                        <h5>{{ section }}</h5>
 
                        <li><a href="{% url "review_section" section.section.slug %}">All</a></li>
 
                        <li><a href="{% url "user_reviewed" section.section.slug %}">Reviewed by you</a></li>
 
                        <li><a href="{% url "user_not_reviewed" section.section.slug %}">Not Reviewed by you</a></li>
 
                    {% endfor %}
 
                </ul>
 

	
 
                {% comment %}
 
                <h4>My Assignments</h4>
 
                <table class="table">
 
                    <thead>
 
                        <td>Proposal Title</td>
 
                        <td>Score</td>
 
                    </thead>
 
                    <tbody>
 
                        <tr>
 
                            <td>Title Three</td>
 
                            <td>-1</td>
 
                        </tr>
 
                        <tr>
 
                            <td>Title Four</td>
 
                            <td>+2</td>
 
                        </tr>
 
                    </tbody>
 
                </table>
 
                {% endcomment %}
 

	
 
            </div>
 
    </div>
 
    {% endif %}
 

	
 
    {% available_teams as available_teams %}
 
    {% if user.memberships.exists or available_teams %}
 
        <div class="panel panel-default">
 
            <div class="panel-heading">
 
                <h3 class="panel-title">
 
                    <i class="fa fa-group"></i>
 
                    {% trans "Teams" %}
 
                </h3>
 
            </div>
 

	
 
            {% if user.memberships.exists %}
 
                <div class="panel-body">
 
                    <h4>Your Teams</h4>
 
                </div>
 
                <table class="table table-striped">
 
                    {% for membership in user.memberships.all %}
 
                        <tr>
 
                            <td>
 
                                <a href="{% url "team_detail" membership.team.slug %}">{{ membership.team.name }}</a>
 
                                {% if membership.team.description %}<br>{{ membership.team.description }}{% endif %}
 
                            </td>
 
                            <td>
 
                                <span class="label{% if membership.state == 'invited' %} label-info{% endif %}">{{ membership.get_state_display }}</span>
 
                            </td>
 
                            <td>
 
                                {% if membership.state == "manager" or user.is_staff %}
 
                                    {% if membership.team.applicants %}{{ membership.team.applicants.count }} applicant{{ membership.team.applicants.count|pluralize }}{% endif %}
 
                                {% endif %}
 
                            </td>
 
                        </tr>
 
                    {% endfor %}
 
                </table>
 
            {% endif %}
 
            {% if available_teams %}
 
                <div class="panel-body">
 
                    <h4>Available Teams</h4>
 
                </div>
 
                <table class="table table-striped">
 
                    {% for team in available_teams %}
 
                        <tr>
 
                            <td>
 
                                <a href="{% url team_detail team.slug %}">{{ team }}</a>
 
                                {% if team.description %}<br>{{ team.description }}{% endif %}
 
                            </td>
 
                            <td>
 
                                <span class="label label-default">{{ team.get_access_display }}</span>
 
                            </td>
 
                        </tr>
 
                    {% endfor %}
 
                </table>
 
            {% endif %}
 
        </div>
 
    {% endif %}
 
{% endblock %}
pinaxcon/templates/homepage.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load i18n %}
 
{% load pinax_boxes_tags %}
 

	
 
{% block head_title %}{% trans "Welcome" %}{% endblock %}
 

	
 
{% block body_class %}home{% endblock %}
 

	
 
{% block body %}
 
    {% box "homepage" %}
 
{% endblock %}
pinaxcon/templates/pinax/boxes/_box.html
Show inline comments
 
new file 100644
 
{% include "pinax/boxes/_box_body.html" %}
pinaxcon/templates/pinax/boxes/_box_body.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 

	
 
{% if form %}
 
    <div id="edit_{{ label }}" class="modal fade">
 
        <div class="modal-dialog">
 
            <div class="modal-content">
 
                <form id="edit_form_{{ label }}" accept-charset="UTF-8" class="modal-form" method="POST" action="{{ form_action }}?next={{ request.path }}">
 
                    <div class="modal-header">
 
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
 
                        <h4 class="modal-title">{% trans "Editing content:" %} {{ label }}</h4>
 
                    </div>
 
                    <div class="modal-body">
 
                        {% csrf_token %}
 
                        {{ form.content }}
 
                    </div>
 
                    <div class="modal-footer">
 
                        <button type="submit" class="btn btn-primary">Save changes</button>
 
                    </div>
 
                </form>
 
            </div>
 
        </div>
 
    </div>
 
{% endif %}
 

	
 
<div id="content_{{ label }}" class="content-box {% if form %}editable{% endif %}">
 
    {% if form %}
 
        <a href="#edit_{{ label }}" data-toggle="modal" class="btn btn-default btn-sm edit-toggle">
 
            <i class="fa fa-pencil"></i>
 
            Edit this content
 
        </a>
 
    {% endif %}
 
    {{ box.content_html|safe }}
 
</div>
pinaxcon/templates/pinax/pages/file_create.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load bootstrap %}
 

	
 
{% block head_title %}Upload File{% endblock %}
 

	
 
{% block body_outer %}
 
    <h1>Upload File</h1>
 
    <form method="POST" action="{% url "file_create" %}" enctype="multipart/form-data">
 
        {% csrf_token %}
 
        {{ form|bootstrap }}
 
        <div class="form-actions">
 
            <button class="btn btn-primary" type="submit">Upload</button>
 
        </div>
 
    </form>
 
{% endblock %}
pinaxcon/templates/pinax/pages/file_list.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% block head_title %}Uploaded Files{% endblock %}
 

	
 
{% block body_outer %}
 
    <h1>Files</h1>
 
    {% for file in files %}
 
        <div style="margin-top: 1em;">
 
            <form class="pull-right" action="{% url "file_delete" file.pk %}" method="post">
 
                {% csrf_token %}
 
                <button type="submit" class="btn btn-error"><i class="fa fa-trash"></i> delete</button>
 
            </form>
 
            <h3><a href="{{ file.download_url }}">{{ file.file }}</a></h3>
 
            <span style="font-style:italic; color: #999;">Uploaded {{ file.created|date:"N j, Y" }}</span>
 
        </div>
 
    {% empty %}
 
        <p>No uploaded files.</p>
 
    {% endfor %}
 
    <div style="margin-top: 2em">
 
        <a class="btn btn-success" href="{% url "file_create" %}">
 
            <i class="fa fa-plus"></i>
 
            Add File
 
        </a>
 
    </div>
 
{% endblock %}
pinaxcon/templates/pinax/pages/page_detail.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load sitetree %}
 
{% load i18n %}
 

	
 
{% block body_class %}cms-page{% endblock %}
 

	
 
{% block head_title %}{{ page.title }}{% endblock %}
 

	
 
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
 

	
 
{% block body %}
 
    {% if editable %}
 
        <div class="pull-right">
 
            <a href="{% url 'pages_page_edit' page.path %}" class="btn btn-sm btn-default">
 
                <i class="fa fa-pencil"></i>
 
                Edit this page
 
            </a>
 
        </div>
 
    {% endif %}
 
    <h2>{{ page.title }}</h2>
 

	
 
    <div class="page-content">
 
        {{ page.body_html|safe }}
 
    </div>
 

	
 
{% endblock %}
pinaxcon/templates/pinax/pages/page_edit.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load sitetree %}
 
{% load i18n %}
 
{% load bootstrap %}
 

	
 
{% block body_class %}cms-page{% endblock %}
 

	
 
{% block head_title %}Create Page{% endblock %}
 

	
 
{% block page_title %}{% trans "Edit page at:" %} {{ path }}{% endblock %}
 
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
 

	
 
{% block body %}
 
    <form method="POST" action="">
 
        {% csrf_token %}
 
        {{ form|bootstrap }}
 
        <div class="form-actions">
 
            <input class="btn btn-primary" type="submit" value="Save" />
 
        </div>
 
    </form>
 
{% endblock %}
pinaxcon/templates/site_base.html
Show inline comments
 
new file 100644
 
{% extends "theme_bootstrap/base.html" %}
 

	
 
{% load staticfiles %}
 
{% load metron_tags %}
 
{% load i18n %}
 
{% load sitetree %}
 

	
 

	
 
{% block styles %}
 
    {% include "_styles.html" %}
 
{% endblock %}
 

	
 

	
 
{% block extra_head_base %}
 
    {% block extra_head %}{% endblock %}
 
{% endblock %}
 

	
 
{% block nav %}
 
    {% sitetree_menu from "main" include "trunk" template "sitetree/menu_bootstrap3.html" %}
 
{% endblock %}
 

	
 
{% block body_base %}
 
    <section id="content_body">
 
        <div class="container">
 
            {% include "_messages.html" %}
 
            <div class="row">
 
                <div class="col-md-9">
 
                    {% block body %}
 
                    {% endblock %}
 
                </div>
 
                <div class="col-md-3">
 
                    {% block sidebar %}
 
                        {% include "_default_sidebar.html" %}
 
                    {% endblock %}
 
                </div>
 
            </div>
 
        </div>
 
    </section>
 
{% endblock %}
 

	
 

	
 
{% block footer %}
 
    {% include "_footer.html" %}
 
{% endblock %}
 

	
 

	
 
{% block scripts %}
 
    {% include "_scripts.html" %}
 
{% endblock %}
 

	
 
{% block extra_body_base %}
 
    {% analytics %}
 
    {% block extra_body %}{% endblock %}
 
{% endblock %}
pinaxcon/templates/site_base_onecolumn.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 

	
 
{% block body_base %}
 
    <section id="content_body">
 
        <div class="container">
 
            {% include "_messages.html" %}
 
            {% block body %}
 
            {% endblock %}
 
        </div>
 
    </section>
 
{% endblock %}
pinaxcon/templates/symposion/conference/user_list.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% load i18n %}
 
{% load sitetree %}
 

	
 
{% block head_title %}User List{% endblock %}
 

	
 
{% block extra_style %}
 
    <style type="text/css">
 
        div.dataTables_length label {
 
            float: left;
 
            text-align: left;
 
        }
 
        div.dataTables_length select {
 
            width: 75px;
 
        }
 
        div.dataTables_filter label {
 
            float: right;
 
        }
 
        div.dataTables_info {
 
            padding-top: 8px;
 
        }
 
        div.dataTables_paginate {
 
            float: right;
 
            margin: 0;
 
        }
 
        table.table {
 
            clear: both;
 
            margin-bottom: 6px !important;
 
            background-color: white;
 
        }
 
        table.table thead .sorting,
 
        table.table thead .sorting_asc,
 
        table.table thead .sorting_desc,
 
        table.table thead .sorting_asc_disabled,
 
        table.table thead .sorting_desc_disabled {
 
            cursor: pointer;
 
            *cursor: hand;
 
        }
 
        table.dataTable th:active {
 
            outline: none;
 
        }
 
    </style>
 
{% endblock %}
 

	
 
{% block body_outer %}
 
    <h1>User List</h1>
 
    <table class="table table-striped table-bordered table-reviews">
 
        <thead>
 
            <th>{% trans "Email" %}</th>
 
            <th>{% trans "Name" %}</th>
 
            <th>{% trans "Speaker Profile?" %}</th>
 
        </thead>
 

	
 
        <tbody>
 
            {% for user in users %}
 
                <tr>
 
                    <td>{{ user.email }}</td>
 
                    <td>{{ user.get_full_name }}</td>
 
                    <td>
 
                        {% if user.speaker_profile %}
 
                            <a href="{% url "speaker_profile" user.speaker_profile.pk %}">{{ user.speaker_profile }}</a>
 
                        {% else %}
 
                            <a href="{% url "speaker_create_staff" user.pk %}" class="btn btn-xs">create</a>
 
                        {% endif %}
 
                    </td>
 
                </tr>
 
            {% endfor %}
 
        </tbody>
 
    </table>
 
{% endblock %}
 

	
 
{% block extra_script %}
 
    <script src="{{ STATIC_URL }}datatables/js/jquery.dataTables.min.js" type="text/javascript"></script>
 
    <script src="{{ STATIC_URL }}tabletools/js/TableTools.min.js" type="text/javascript"></script>
 
    <script src="{{ STATIC_URL }}datatables/js/dataTables.bootstrap.js" type="text/javascript"></script>
 
    <script type="text/javascript">
 
        $(function() {
 
            $(".tip").tooltip();
 
            $("table.table-reviews").dataTable({
 
                "sDom": "<'row'<'col-md-3'l><'col-md-3'T><'col-md-4'f>r>t<'row'<'col-md-3'i><'col-md-5'p>>",
 
                "sPaginationType": "bootstrap",
 
                "bStateSave": true,
 
                "oTableTools": {
 
                    "aButtons": [
 
                        "copy",
 
                        "csv",
 
                        "print"
 
                    ],
 
                    "sSwfPath": "{{ STATIC_URL }}tabletools/swf/copy_csv_xls.swf"
 
                }
 
            });
 
        });
 
    </script>
 
{% endblock %}
pinaxcon/templates/symposion/emails/proposal_new_message/message.html
Show inline comments
 
new file 100644
 
{% load account_tags %}
 
{% load i18n %}
 
{% user_display message.user as user %}
 
<p>
 
  {% blocktrans with title=proposal.title %}<b>{{ user }}</b> has added a message on <b>{{ title }}</b>.{% endblocktrans %}
 
</p>
 
<blockquote>
 
    {{ message.message|safe }}
 
</blockquote>
 
<p>
 
    {% if reviewer %}{% url 'review_detail' proposal.pk as detail_url %}{% else %}{% url 'proposal_detail' proposal.pk as detail_url %}{% endif %}
 
    {% blocktrans %} Respond online at <a href="http://{{ current_site }}{{ detail_url }}#proposal-feedback">http://{{ current_site }}{{ detail_url }}#proposal-feedback</a>{% endblocktrans %}
 
</p>
pinaxcon/templates/symposion/emails/proposal_new_message/subject.txt
Show inline comments
 
new file 100644
 
{% load account_tags i18n %}{% user_display message.user as user %}{% blocktrans with title=proposal.title %}New message on "{{ title }}" from {{ user }}{% endblocktrans %}
pinaxcon/templates/symposion/emails/proposal_updated/message.html
Show inline comments
 
new file 100644
 
{% load account_tags %}
 
{% load i18n %}
 
{% user_display user as username %}
 
<p>
 
  {% blocktrans with title=proposal.title %}<b>{{ username }}</b> has made changes to <b>{{ title }}</b> which you have previously reviewed or commented on.{% endblocktrans %}
 
</p>
 
<p>
 
    {% url 'review_detail' proposal.pk as detail_url %}
 
    {% blocktrans %}View the latest version of the proposal online at <a href="http://{{ current_site }}{{ detail_url }}">http://{{ current_site }}{{ detail_url }}</a>{% endblocktrans %}
 
</p>
pinaxcon/templates/symposion/emails/proposal_updated/subject.txt
Show inline comments
 
new file 100644
 
{% load account_tags i18n %}{% user_display user as username %}{% blocktrans with title=proposal.title %}"{{ title }}" has been updated by {{ username }}{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_addition/message.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% url 'dashboard' as dashboard_url %}
 
{% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %}
 
<p>{{ username }} attached you as an additional speaker to a
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
 

	
 
<p>For more details, visit the {{ site_name }} speaker dashboard:
 
    <a href="http://{{ current_site }}{{ dashboard_url }}">http://{{ current_site }}{{ dashboard_url ]}</a>
 
</p>
 
{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_addition/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_invite/message.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% url 'speaker_create_token' token as token_url %}
 
{% blocktrans with invitator=proposal.speaker.name title=proposal.title site_name=current_site.name %}
 
<p>{{ invitator }} attached you as an additional speaker to a
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
 

	
 
<p>Go to</p>
 

	
 
<p><a href="http://{{ current_site }}{{ token_url }}">http://{{ current_site }}{{ token_url }}</a></p>
 

	
 
<p>to confirm.</p>
 

	
 
<p>If you don't have account on the website, you will be asked to create one.</p>
 
{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_invite/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_no_profile/message.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% url 'speaker_create_token' token as token_url %}
 
{% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %}
 
<p>{{ username }} attached you as an additional speaker to a
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
 

	
 
<p>Go to</p>
 

	
 
<p><a href="http://{{ current_site }}{{ token_url }}">http://{{ current_site }}{{ token_url }}</a></p>
 

	
 
<p>to confirm and fill out your speaker profile.</p>
 
{% endblocktrans %}
pinaxcon/templates/symposion/emails/speaker_no_profile/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
pinaxcon/templates/symposion/emails/sponsor_signup/message.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% blocktrans with sponsor_name=sponsor.name applicant=sponsor.applicant contact=sponsor.contact_name email=sponsor.contact_email level=sponsor.level %}
 
<p>{{ sponsor_name }} has applied to be a sponsor.</p>
 

	
 
<ul>
 
    <li><b>Applicant</b>: {{ applicant }}</li>
 
    <li><b>Sponsor Name</b>: {{ sponsor_name }}</li>
 
    <li><b>Sponsor Contact</b>: {{ contact }}</li>
 
    <li><b>Sponsor Contact Email</b>: {{ email }}</li>
 
    <li><b>Sponsorship Level</b>: {{ level }}</li>
 
</ul>
 
{% endblocktrans %}
pinaxcon/templates/symposion/emails/sponsor_signup/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n %}{% trans "New Sponsor Application" %}
pinaxcon/templates/symposion/emails/teams_user_applied/message.html
Show inline comments
 
new file 100644
 
{% load i18n account_tags %}
 
{% user_display user as username %}
 
{% blocktrans with team_name=team team_url=team.get_absolute_url site_name=current_site.name site_url=current_site %}
 
    <p>
 
        User "{{ username }}" has applied to join <b>{{ team_name }}</b> on {{ site_name }}.
 
    </p>
 

	
 
    <p>
 
        To accept this application and see any other pending applications, visit the following url:
 
        <a href="http://{{ site_url }}{{ team_url }}">http://{{ site_url }}{{ team_url }}</a>
 
    </p>
 
{% endblocktrans %}
pinaxcon/templates/symposion/emails/teams_user_applied/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n account_tags %}{% user_display user as username %}{% blocktrans %}{{ username}} has applied to to join "{{ team }}"{% endblocktrans %}
...
 
\ No newline at end of file
pinaxcon/templates/symposion/emails/teams_user_invited/message.html
Show inline comments
 
new file 100644
 
{% load i18n account_tags %}
 

	
 
{% blocktrans with team_name=team team_url=team.get_absolute_url site_name=current_site.name site_url=current_site %}
 
    <p>
 
        You have been invited to join <b>{{ team_name }}</b> on {{ site_name }}.
 
    </p>
 

	
 
    <p>
 
        To accept this invitation, visit the following url:
 
        <a href="http://{{ site_url }}{{ team_url }}">http://{{ site_url }}{{ team_url }}</a>
 
    </p>
 
{% endblocktrans %}
...
 
\ No newline at end of file
pinaxcon/templates/symposion/emails/teams_user_invited/subject.txt
Show inline comments
 
new file 100644
 
{% load i18n %}{% blocktrans %}You have been invited to join "{{ team }}"{% endblocktrans %}
...
 
\ No newline at end of file
pinaxcon/templates/symposion/proposals/_pending_proposal_row.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 

	
 
<tr>
 
    <td>
 
        <a href="{% url "proposal_detail" proposal.pk %}">{{ proposal.title }}</a>
 
    </td>
 

	
 
    <td>{{ proposal.kind.name }}</td>
 

	
 
    <td>
 
        {% if proposal.cancelled %}
 
            <span class="label label-danger">{% trans 'Cancelled' %}</span>
 
        {% else %}
 
            {% if request.user == proposal.speaker.user %}
 
                {% if proposal.result.status == "accepted" %}
 
                    <span class="label label-success">{% trans 'Accepted' %}</span>
 
                {% else %}
 
                    <span class="label label-default">{% trans 'Submitted' %}</span>
 
                {% endif %}
 
            {% else %}
 
                <span class="label label-default">{% trans 'Invited' %}</span>
 
            {% endif %}
 
        {% endif %}
 
    </td>
 

	
 
    <td>
 
        {% if not proposal.cancelled %}
 
            <div class="btn-group">
 
                <a class="btn btn-xs dropdown-toggle" data-toggle="dropdown" href="#">
 
                {% trans 'Choose Response' %}
 
                <span class="caret"></span>
 
                </a>
 
                <ul class="dropdown-menu">
 
                    <li><a href="{% url "proposal_pending_join" proposal.id %}">
 
			{% trans 'Accept invitation' %}</a></li>
 
                    <li><a href="{% url "proposal_pending_decline" proposal.id
 
		    %}">{% trans 'Decline invitation' %}</a></li>
 
                </ul>
 
            </div>
 
        {% endif %}
 
    </td>
 
</tr>
pinaxcon/templates/symposion/proposals/_proposal_fields.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 

	
 
<dl class="dl-horizontal">
 
    <dt>{% trans "Submitted by" %}</dt>
 
    <dd>{{ proposal.speaker }}</dd>
 

	
 
    <dt>{% trans "Track" %}</dt>
 
    <dd>{{ proposal.track }}&nbsp;</dd>
 

	
 
    <dt>{% trans "Audience Level" %}</dt>
 
    <dd>{{ proposal.get_audience_level_display }}&nbsp;</dd>
 

	
 
    {% if proposal.additional_speakers.all %}
 
        <dt>{% trans "Additional Speakers" %}</dt>
 
        <dd>
 
            {% for speaker in proposal.additional_speakers.all %}
 
                <li>
 
                    {% if speaker.user %}
 
                        <strong>{{ speaker.name }}</strong> &lt;{{ speaker.email }}&gt;
 
                    {% else %}
 
                        {{ speaker.email }} ({% trans "Invitation Sent" %})
 
                    {% endif %}
 
                </li>
 
            {% endfor %}
 
        </dd>
 
    {% endif %}
 

	
 
    <dt>{% trans "Description" %}</dt>
 
    <dd>{{ proposal.description }}&nbsp;</dd>
 

	
 
    <dt>{% trans "Abstract" %}</dt>
 
    <dd>{{ proposal.abstract|safe }}&nbsp;</dd>
 

	
 
    <dt>{% trans "Notes" %}</dt>
 
    <dd>{{ proposal.additional_notes|safe }}&nbsp;</dd>
 

	
 
    <dt>{% trans "Speaker Bio" %}</dt>
 
    <dd>{{ proposal.speaker.biography|safe }}&nbsp;</dd>
 

	
 
    <dt>{% trans "Documents" %}</dt>
 
    <dd>
 
        {% if proposal.supporting_documents.exists %}
 
            <table class="table table-striped">
 
                {% for document in proposal.supporting_documents.all %}
 
                    <tr>
 
                        <td><a href="{{ document.download_url }}">{{ document.description }}</a></td>
 
                        <td>
 
                        <form style="margin: 0;" method="post" action="{% url "proposal_document_delete" document.pk %}">
 
                            {% csrf_token %}
 
                            <button type="submit" class="btn btn-xs">delete</button>
 
                        </form>
 
                    </td>
 
                    </tr>
 
                {% endfor %}
 
            </table>
 
        {% else %}
 
            No supporting documents attached to this proposal.
 
        {% endif %}
 
    </dd>
 
</dl>
pinaxcon/templates/symposion/proposals/_proposal_row.html
Show inline comments
 
new file 100644
 
<tr>
 
    <td>
 
        <a href="{% url "proposal_detail" proposal.pk %}">{{ proposal.title }}</a>
 
    </td>
 

	
 
    <td>{{ proposal.kind.name }}</td>
 

	
 
    <td>
 
        {% if proposal.cancelled %}
 
            <span class="label label-danger">Cancelled</span>
 
        {% else %}
 
            {% if request.user == proposal.speaker.user %}
 
                {% if proposal.result.status == "accepted" %}
 
                    <span class="label label-success">Accepted</span>
 
                {% else %}
 
                    <span class="label label-default">Submitted</span>
 
                {% endif %}
 
            {% else %}
 
                <span class="label label-default">Associated</span>
 
            {% endif %}
 
        {% endif %}
 
    </td>
 

	
 
    <td>
 
        {% if not proposal.cancelled %}
 
            {% if request.user == proposal.speaker.user and proposal.can_edit %}
 
                <a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-xs"><i class="fa fa-pencil"></i> Edit</a>
 
                <a href="{% url "proposal_speaker_manage" proposal.id %}" class="btn btn-xs"><i class="fa fa-user"></i> Manage Additional Speakers</a>
 
            {% endif %}
 
        {% endif %}
 
    </td>
 
</tr>
pinaxcon/templates/symposion/proposals/base.html
Show inline comments
 
new file 100644
 
{% extends "site_base.html" %}
 

	
 
{% block body_outer %}
 
    {% block body %}{% endblock %}
 
{% endblock %}
pinaxcon/templates/symposion/proposals/document_create.html
Show inline comments
 
new file 100644
 
{% extends "symposion/proposals/base.html" %}
 

	
 
{% load bootstrap %}
 

	
 
{% block page_title %}Upload Document to '{{ proposal.title }}'{% endblock %}
 

	
 
{% block body %}
 
    <form method="POST" action="" enctype="multipart/form-data" class="form form-horizontal">
 
        {% csrf_token %}
 
        <fieldset>
 
            {{ form|bootstrap_horizontal }}
 
        </fieldset>
 
        <div class="form-actions">
 
            <input class="btn btn-primary" type="submit" value="Upload" />
 
        </div>
 
    </form>
 
{% endblock %}
pinaxcon/templates/symposion/proposals/proposal_cancel.html
Show inline comments
 
new file 100644
 
{% extends "symposion/proposals/base.html" %}
 

	
 
{% load i18n %}
 

	
 
{% block head_title %}{% trans 'Cancel Proposal' %}{% endblock %}
 

	
 
{% block body %}
 
    <h1>Cancel: {{ proposal.title }}</h1>
 

	
 
    <form method="POST" action="" enctype="multipart/form-data">
 
        {% csrf_token %}
 
        <p>Are you sure you want to cancel <b>{{ proposal.title }}</b>?</p>
 
        <input class="btn btn-danger" type="submit" value="I am sure" />
 
        <a class="btn btn-default" href="{% url "proposal_detail" proposal.pk %}">{% trans 'No, keep it for now' %}</a>
 
    </form>
 
{% endblock %}
pinaxcon/templates/symposion/proposals/proposal_detail.html
Show inline comments
 
new file 100644
 
{% extends "symposion/proposals/base.html" %}
 

	
 
{% load i18n %}
 
{% load account_tags %}
 
{% load bootstrap %}
 

	
 
{% block head_title %}{{ proposal.title }}{% endblock %}
 

	
 
{% block body %}
 
    <div class="pull-right">
 
        {% if not proposal.cancelled %}
 
            {% if request.user == proposal.speaker.user %}
 
                <a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-default">
 
                    {% trans "Edit this proposal" %}
 
                </a>
 
                <a href="{% url "proposal_cancel" proposal.pk %}" class="btn btn-default">
 
                    {% trans "Cancel this proposal" %}
 
                </a>
 
            {% else %}
 
                <a href="{% url "proposal_leave" proposal.pk %}" class="btn btn-default">
 
                    {% trans "Remove me from this proposal" %}
 
                </a>
 
            {% endif %}
 
        {% else %}
 
            {% trans 'Cancelled' }
 
        {% endif %}
 
    </div>
 

	
 
    <h3>#{{ proposal.number }}: {{ proposal.title }} ({{ proposal.speaker }}, Track: {{ proposal.track }})</h3>
 

	
 
    <div class="tabbable">
 
        <ul class="nav nav-tabs">
 
            <li class="active"><a href="#proposal-detail" data-toggle="tab">{% trans "Proposal Details" %}</a></li>
 
            {% if request.user == proposal.speaker.user %}
 
                <li><a href="#proposal-documents" data-toggle="tab">{% trans "Supporting Documents" %}</a></li>
 
            {% endif %}
 
            {% if message_form %}
 
                <li><a href="#proposal-feedback" data-toggle="tab">{% trans "Reviewer Feedback" %} <span class="badge">{{ proposal.messages.all|length }}</span></a></li>
 
            {% endif %}
 
        </ul>
 
        <div class="tab-content">
 
            <div class="tab-pane active" id="proposal-detail">
 
                {% include "symposion/proposals/_proposal_fields.html" %}
 
            </div>
 
            {% if request.user == proposal.speaker.user %}
 
                <div class="tab-pane" id="proposal-documents">
 
                    <h3>{% trans 'Supporting Documents' %}</h3>
 

	
 
                    {% if proposal.supporting_documents.exists %}
 
                        <table class="table table-striped">
 
                            {% for document in proposal.supporting_documents.all %}
 
                                <tr>
 
                                    <td><a href="{{ document.download_url }}">{{ document.description }}</a></td>
 
                                    <td>
 
                                    <form style="margin: 0;" method="post" action="{% url "proposal_document_delete" document.pk %}">
 
                                        {% csrf_token %}
 
                                        <button type="submit" class="btn btn-xs">{% trans 'delete' %}</button>
 
                                    </form>
 
                                </td>
 
                                </tr>
 
                            {% endfor %}
 
                        </table>
 
                    {% else %}
 
                        <p>{% trans 'No supporting documents attached to this proposal.' %}</p>
 
                    {% endif %}
 
                    <a class="btn btn-default btn-sm{% if proposal.cancelled %} btn-disabled{% endif %}" href="{% url "proposal_