! ! !
Patrick Altman - 5 years ago 2015-10-16 17:53:02
paltman@gmail.com
Initial commit of the PinaxCon demo site
125 files changed:
Changeset was too big and was cut off... Show full diff anyway
↑ Collapse Diff ↑
 
new file 100644
1
 
*.pyc
2
 
node_modules/
 
new file 100644
1
 
# PinaxCon
2
 

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

	
5
 
http://conference.pinaxproject.com/
6
 

	
7
 

	
8
 

	
9
 
## Getting Started
10
 

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

	
14
 
```
15
 
createdb pinaxcon
16
 
pip install -r requirements.txt
17
 
./manage.py migrate
18
 
./manage.py loaddata sites conference proposal_base sitetree sponsor_benefits sponsor_levels
19
 
./manage.py runserver
20
 
```
21
 

	
22
 

	
23
 
pinax-boxes
24
 
pinax-pages
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 1,
4
 
        "model": "symposion_conference.conference",
5
 
        "fields": {
6
 
            "timezone": "US/Eastern",
7
 
            "start_date": "2040-01-01",
8
 
            "end_date": "2040-01-04",
9
 
            "title": "PinaxCon"
10
 
        }
11
 
    },
12
 
    {
13
 
        "pk": 1,
14
 
        "model": "symposion_conference.section",
15
 
        "fields": {
16
 
            "conference": 1,
17
 
            "start_date": "2040-01-01",
18
 
            "name": "General Sessions",
19
 
            "end_date": "2040-01-01",
20
 
            "slug": "general-sessions"
21
 
        }
22
 
    }
23
 
]
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 1,
4
 
        "model": "symposion_proposals.proposalsection",
5
 
        "fields": {
6
 
            "start": null,
7
 
            "section": 1,
8
 
            "end": null,
9
 
            "closed": null,
10
 
            "published": null
11
 
        }
12
 
    },
13
 
    {
14
 
        "pk": 1,
15
 
        "model": "symposion_proposals.proposalkind",
16
 
        "fields": {
17
 
            "section": 1,
18
 
            "name": "talk",
19
 
            "slug": "talk"
20
 
        }
21
 
    }
22
 
]
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 1,
4
 
        "model": "sites.site",
5
 
        "fields": {
6
 
            "domain": "localhost:8000",
7
 
            "name": "PinaxCon"
8
 
        }
9
 
    },
10
 
    {
11
 
        "pk": 2,
12
 
        "model": "sites.site",
13
 
        "fields": {
14
 
            "domain": "conference.pinaxproject.com",
15
 
            "name": "PinaxCon"
16
 
        }
17
 
    }
18
 
]
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 1,
4
 
        "model": "sitetree.tree",
5
 
        "fields": {
6
 
            "alias": "main",
7
 
            "title": "main"
8
 
        }
9
 
    },
10
 
    {
11
 
        "pk": 1,
12
 
        "model": "sitetree.treeitem",
13
 
        "fields": {
14
 
            "parent": null,
15
 
            "access_restricted": false,
16
 
            "access_permissions": [],
17
 
            "description": "",
18
 
            "insitetree": true,
19
 
            "hint": "",
20
 
            "url": "pages_page \"about/\"",
21
 
            "inbreadcrumbs": true,
22
 
            "title": "About",
23
 
            "tree": 1,
24
 
            "access_perm_type": 1,
25
 
            "alias": null,
26
 
            "sort_order": 2,
27
 
            "inmenu": true,
28
 
            "access_loggedin": false,
29
 
            "hidden": false,
30
 
            "urlaspattern": true
31
 
        }
32
 
    },
33
 
    {
34
 
        "pk": 2,
35
 
        "model": "sitetree.treeitem",
36
 
        "fields": {
37
 
            "parent": null,
38
 
            "access_restricted": false,
39
 
            "access_permissions": [],
40
 
            "description": "",
41
 
            "insitetree": true,
42
 
            "hint": "",
43
 
            "url": "pages_page \"venue/\"",
44
 
            "inbreadcrumbs": true,
45
 
            "title": "Venue",
46
 
            "tree": 1,
47
 
            "access_perm_type": 1,
48
 
            "alias": null,
49
 
            "sort_order": 3,
50
 
            "inmenu": true,
51
 
            "access_loggedin": false,
52
 
            "hidden": false,
53
 
            "urlaspattern": true
54
 
        }
55
 
    },
56
 
    {
57
 
        "pk": 3,
58
 
        "model": "sitetree.treeitem",
59
 
        "fields": {
60
 
            "parent": null,
61
 
            "access_restricted": false,
62
 
            "access_permissions": [],
63
 
            "description": "",
64
 
            "insitetree": true,
65
 
            "hint": "",
66
 
            "url": "#",
67
 
            "inbreadcrumbs": true,
68
 
            "title": "Sponsors",
69
 
            "tree": 1,
70
 
            "access_perm_type": 1,
71
 
            "alias": null,
72
 
            "sort_order": 4,
73
 
            "inmenu": true,
74
 
            "access_loggedin": false,
75
 
            "hidden": false,
76
 
            "urlaspattern": false
77
 
        }
78
 
    },
79
 
    {
80
 
        "pk": 4,
81
 
        "model": "sitetree.treeitem",
82
 
        "fields": {
83
 
            "parent": null,
84
 
            "access_restricted": false,
85
 
            "access_permissions": [],
86
 
            "description": "",
87
 
            "insitetree": true,
88
 
            "hint": "",
89
 
            "url": "home",
90
 
            "inbreadcrumbs": true,
91
 
            "title": "Home",
92
 
            "tree": 1,
93
 
            "access_perm_type": 1,
94
 
            "alias": null,
95
 
            "sort_order": 1,
96
 
            "inmenu": true,
97
 
            "access_loggedin": false,
98
 
            "hidden": false,
99
 
            "urlaspattern": true
100
 
        }
101
 
    },
102
 
    {
103
 
        "pk": 5,
104
 
        "model": "sitetree.treeitem",
105
 
        "fields": {
106
 
            "parent": 3,
107
 
            "access_restricted": false,
108
 
            "access_permissions": [],
109
 
            "description": "",
110
 
            "insitetree": true,
111
 
            "hint": "",
112
 
            "url": "sponsor_apply",
113
 
            "inbreadcrumbs": true,
114
 
            "title": "Apply to be a Sponsor",
115
 
            "tree": 1,
116
 
            "access_perm_type": 1,
117
 
            "alias": null,
118
 
            "sort_order": 6,
119
 
            "inmenu": true,
120
 
            "access_loggedin": false,
121
 
            "hidden": false,
122
 
            "urlaspattern": true
123
 
        }
124
 
    },
125
 
    {
126
 
        "pk": 6,
127
 
        "model": "sitetree.treeitem",
128
 
        "fields": {
129
 
            "parent": 3,
130
 
            "access_restricted": false,
131
 
            "access_permissions": [],
132
 
            "description": "",
133
 
            "insitetree": true,
134
 
            "hint": "",
135
 
            "url": "sponsor_list",
136
 
            "inbreadcrumbs": true,
137
 
            "title": "{{ SITE_NAME }} Sponsors",
138
 
            "tree": 1,
139
 
            "access_perm_type": 1,
140
 
            "alias": null,
141
 
            "sort_order": 5,
142
 
            "inmenu": true,
143
 
            "access_loggedin": false,
144
 
            "hidden": false,
145
 
            "urlaspattern": true
146
 
        }
147
 
    }
148
 
]
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 2,
4
 
        "model": "symposion_sponsorship.benefit",
5
 
        "fields": {
6
 
            "type": "weblogo",
7
 
            "name": "Web Logo",
8
 
            "description": "Logo to appear on the website"
9
 
        }
10
 
    },
11
 
    {
12
 
        "pk": 3,
13
 
        "model": "symposion_sponsorship.benefit",
14
 
        "fields": {
15
 
            "type": "file",
16
 
            "name": "Print Logo",
17
 
            "description": "Logo to appear in print"
18
 
        }
19
 
    },
20
 
    {
21
 
        "pk": 4,
22
 
        "model": "symposion_sponsorship.benefit",
23
 
        "fields": {
24
 
            "type": "text",
25
 
            "name": "Sponsor Description",
26
 
            "description": "Description to appear on website and in print"
27
 
        }
28
 
    },
29
 
    {
30
 
        "pk": 9,
31
 
        "model": "symposion_sponsorship.benefitlevel",
32
 
        "fields": {
33
 
            "other_limits": "",
34
 
            "benefit": 4,
35
 
            "max_words": null,
36
 
            "level": 1
37
 
        }
38
 
    },
39
 
    {
40
 
        "pk": 5,
41
 
        "model": "symposion_sponsorship.benefitlevel",
42
 
        "fields": {
43
 
            "other_limits": "",
44
 
            "benefit": 3,
45
 
            "max_words": null,
46
 
            "level": 1
47
 
        }
48
 
    },
49
 
    {
50
 
        "pk": 1,
51
 
        "model": "symposion_sponsorship.benefitlevel",
52
 
        "fields": {
53
 
            "other_limits": "",
54
 
            "benefit": 2,
55
 
            "max_words": null,
56
 
            "level": 1
57
 
        }
58
 
    },
59
 
    {
60
 
        "pk": 10,
61
 
        "model": "symposion_sponsorship.benefitlevel",
62
 
        "fields": {
63
 
            "other_limits": "",
64
 
            "benefit": 4,
65
 
            "max_words": null,
66
 
            "level": 2
67
 
        }
68
 
    },
69
 
    {
70
 
        "pk": 6,
71
 
        "model": "symposion_sponsorship.benefitlevel",
72
 
        "fields": {
73
 
            "other_limits": "",
74
 
            "benefit": 3,
75
 
            "max_words": null,
76
 
            "level": 2
77
 
        }
78
 
    },
79
 
    {
80
 
        "pk": 2,
81
 
        "model": "symposion_sponsorship.benefitlevel",
82
 
        "fields": {
83
 
            "other_limits": "",
84
 
            "benefit": 2,
85
 
            "max_words": null,
86
 
            "level": 2
87
 
        }
88
 
    },
89
 
    {
90
 
        "pk": 11,
91
 
        "model": "symposion_sponsorship.benefitlevel",
92
 
        "fields": {
93
 
            "other_limits": "",
94
 
            "benefit": 4,
95
 
            "max_words": null,
96
 
            "level": 3
97
 
        }
98
 
    },
99
 
    {
100
 
        "pk": 7,
101
 
        "model": "symposion_sponsorship.benefitlevel",
102
 
        "fields": {
103
 
            "other_limits": "",
104
 
            "benefit": 3,
105
 
            "max_words": null,
106
 
            "level": 3
107
 
        }
108
 
    },
109
 
    {
110
 
        "pk": 3,
111
 
        "model": "symposion_sponsorship.benefitlevel",
112
 
        "fields": {
113
 
            "other_limits": "",
114
 
            "benefit": 2,
115
 
            "max_words": null,
116
 
            "level": 3
117
 
        }
118
 
    }
119
 
]
 
new file 100644
1
 
[
2
 
    {
3
 
        "pk": 1,
4
 
        "model": "symposion_sponsorship.sponsorlevel",
5
 
        "fields": {
6
 
            "conference": 1,
7
 
            "description": "",
8
 
            "cost": 10000,
9
 
            "name": "Gold",
10
 
            "order": 0
11
 
        }
12
 
    },
13
 
    {
14
 
        "pk": 2,
15
 
        "model": "symposion_sponsorship.sponsorlevel",
16
 
        "fields": {
17
 
            "conference": 1,
18
 
            "description": "",
19
 
            "cost": 5000,
20
 
            "name": "Silver",
21
 
            "order": 1
22
 
        }
23
 
    },
24
 
    {
25
 
        "pk": 3,
26
 
        "model": "symposion_sponsorship.sponsorlevel",
27
 
        "fields": {
28
 
            "conference": 1,
29
 
            "description": "",
30
 
            "cost": 2000,
31
 
            "name": "Bronze",
32
 
            "order": 2
33
 
        }
34
 
    }
35
 
]
 
new file 100644
1
 
site: eldarion-conferences/pinaxcon
2
 
exec:
3
 
  web: gunicorn --bind=0.0.0.0 --log-file - --workers=4 pinaxcon.wsgi
4
 
branches:
5
 
  master: primary
 
new file 100755
1
 
#!/usr/bin/env python
2
 

	
3
 
import os
4
 
import sys
5
 

	
6
 

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

	
10
 
    from django.core.management import execute_from_command_line
11
 

	
12
 
    execute_from_command_line(sys.argv)
 
new file 100644
1
 
{
2
 
  "repository": {
3
 
    "type": "git",
4
 
    "url": "https://github.com/pinax/pinax-project"
5
 
  },
6
 
  "scripts": {
7
 
     "build": "./node_modules/.bin/webpack --config=static/webpack.config.js -p",
8
 
     "watch": "./node_modules/.bin/webpack --config=static/webpack.config.js -w"
9
 
  },
10
 
  "dependencies": {
11
 
    "babel-core": "^5.8.23",
12
 
    "babel-loader": "^5.3.2",
13
 
    "bootstrap": "^3.3.5",
14
 
    "css-loader": "^0.17.0",
15
 
    "extract-text-webpack-plugin": "^0.8.2",
16
 
    "file-loader": "^0.8.4",
17
 
    "font-awesome": "^4.4.0",
18
 
    "html-webpack-plugin": "^1.6.1",
19
 
    "jquery": "^2.1.4",
20
 
    "less": "^2.5.1",
21
 
    "less-loader": "^2.2.0",
22
 
    "style-loader": "^0.12.3",
23
 
    "webpack": "^1.12.1"
24
 
  }
25
 
}
 
new file 100644
1
 
# -*- coding: utf-8 -*-
2
 

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

	
10
 
default_app_config = "pinaxcon.apps.AppConfig"
 
new file 100644
1
 
from importlib import import_module
2
 

	
3
 
from django.apps import AppConfig as BaseAppConfig
4
 

	
5
 

	
6
 
class AppConfig(BaseAppConfig):
7
 

	
8
 
    name = "pinaxcon"
9
 

	
10
 
    def ready(self):
11
 
        import_module("pinaxcon.receivers")
 
new file 100644
1
 
import markdown
2
 

	
3
 
import pinax.boxes.hooks
4
 
import pinax.pages.hooks
5
 

	
6
 

	
7
 
def markup_renderer(content):
8
 
    return markdown.markdown(content)
9
 

	
10
 

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

	
13
 
    def parse_content(self, content):
14
 
        return markup_renderer(content)
15
 

	
16
 

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

	
19
 
    def parse_content(self, content):
20
 
        return markup_renderer(content)
 
new file 100644
 
new file 100644
1
 
from django.contrib import admin
2
 

	
3
 
from .models import TalkProposal
4
 

	
5
 

	
6
 
admin.site.register(TalkProposal)
 
new file 100644
1
 
from django import forms
2
 

	
3
 
from .models import TalkProposal
4
 

	
5
 

	
6
 
class ProposalForm(forms.ModelForm):
7
 

	
8
 
    def clean_description(self):
9
 
        value = self.cleaned_data["description"]
10
 
        if len(value) > 400:
11
 
            raise forms.ValidationError(
12
 
                u"The description must be less than 400 characters"
13
 
            )
14
 
        return value
15
 

	
16
 

	
17
 
class TalkProposalForm(ProposalForm):
18
 

	
19
 
    class Meta:
20
 
        model = TalkProposal
21
 
        fields = [
22
 
            "title",
23
 
            "audience_level",
24
 
            "description",
25
 
            "abstract",
26
 
            "additional_notes",
27
 
            "recording_release",
28
 
        ]
 
new file 100644
1
 
# -*- coding: utf-8 -*-
2
 
from __future__ import unicode_literals
3
 

	
4
 
from django.db import models, migrations
5
 

	
6
 

	
7
 
class Migration(migrations.Migration):
8
 

	
9
 
    dependencies = [
10
 
        ('symposion_proposals', '__first__'),
11
 
    ]
12
 

	
13
 
    operations = [
14
 
        migrations.CreateModel(
15
 
            name='TalkProposal',
16
 
            fields=[
17
 
                ('proposalbase_ptr', models.OneToOneField(primary_key=True, to='symposion_proposals.ProposalBase', parent_link=True, auto_created=True, serialize=False)),
18
 
                ('audience_level', models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate'), (2, b'Experienced')])),
19
 
                ('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)),
20
 
            ],
21
 
            options={
22
 
                'verbose_name': 'talk proposal',
23
 
            },
24
 
            bases=('symposion_proposals.proposalbase',),
25
 
        ),
26
 
    ]
 
new file 100644
 
new file 100644
1
 
from django.db import models
2
 

	
3
 
from symposion.proposals.models import ProposalBase
4
 

	
5
 

	
6
 
class Proposal(ProposalBase):
7
 

	
8
 
    AUDIENCE_LEVEL_NOVICE = 1
9
 
    AUDIENCE_LEVEL_EXPERIENCED = 2
10
 
    AUDIENCE_LEVEL_INTERMEDIATE = 3
11
 

	
12
 
    AUDIENCE_LEVELS = [
13
 
        (AUDIENCE_LEVEL_NOVICE, "Novice"),
14
 
        (AUDIENCE_LEVEL_INTERMEDIATE, "Intermediate"),
15
 
        (AUDIENCE_LEVEL_EXPERIENCED, "Experienced"),
16
 
    ]
17
 

	
18
 
    audience_level = models.IntegerField(choices=AUDIENCE_LEVELS)
19
 

	
20
 
    recording_release = models.BooleanField(
21
 
        default=True,
22
 
        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."
23
 
    )
24
 

	
25
 
    class Meta:
26
 
        abstract = True
27
 

	
28
 

	
29
 
class TalkProposal(Proposal):
30
 

	
31
 
    class Meta:
32
 
        verbose_name = "talk proposal"
 
new file 100644
1
 
from django.dispatch import receiver
2
 

	
3
 
from account.signals import password_changed
4
 
from account.signals import user_sign_up_attempt, user_signed_up
5
 
from account.signals import user_login_attempt, user_logged_in
6
 

	
7
 
from pinax.eventlog.models import log
8
 

	
9
 

	
10
 
@receiver(user_logged_in)
11
 
def handle_user_logged_in(sender, **kwargs):
12
 
    log(
13
 
        user=kwargs.get("user"),
14
 
        action="USER_LOGGED_IN",
15
 
        extra={}
16
 
    )
17
 

	
18
 

	
19
 
@receiver(password_changed)
20
 
def handle_password_changed(sender, **kwargs):
21
 
    log(
22
 
        user=kwargs.get("user"),
23
 
        action="PASSWORD_CHANGED",
24
 
        extra={}
25
 
    )
26
 

	
27
 

	
28
 
@receiver(user_login_attempt)
29
 
def handle_user_login_attempt(sender, **kwargs):
30
 
    log(
31
 
        user=None,
32
 
        action="LOGIN_ATTEMPTED",
33
 
        extra={
34
 
            "username": kwargs.get("username"),
35
 
            "result": kwargs.get("result")
36
 
        }
37
 
    )
38
 

	
39
 

	
40
 
@receiver(user_sign_up_attempt)
41
 
def handle_user_sign_up_attempt(sender, **kwargs):
42
 
    log(
43
 
        user=None,
44
 
        action="SIGNUP_ATTEMPTED",
45
 
        extra={
46
 
            "username": kwargs.get("username"),
47
 
            "email": kwargs.get("email"),
48
 
            "result": kwargs.get("result")
49
 
        }
50
 
    )
51
 

	
52
 

	
53
 
@receiver(user_signed_up)
54
 
def handle_user_signed_up(sender, **kwargs):
55
 
    log(
56
 
        user=kwargs.get("user"),
57
 
        action="USER_SIGNED_UP",
58
 
        extra={}
59
 
    )
 
new file 100644
1
 
import os
2
 
import dj_database_url
3
 

	
4
 

	
5
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
6
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
7
 
BASE_DIR = PACKAGE_ROOT
8
 

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

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

	
15
 
ALLOWED_HOSTS = [
16
 
    os.environ.get("GONDOR_INSTANCE_DOMAIN"),
17
 
    "conference.pinaxproject.com"
18
 
]
19
 

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

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

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

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

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

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

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

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

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

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

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

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

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

	
80
 
TEMPLATES = [
81
 
    {
82
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
83
 
        "DIRS": [
84
 
            os.path.join(PACKAGE_ROOT, "templates"),
85
 
        ],
86
 
        "APP_DIRS": True,
87
 
        "OPTIONS": {
88
 
            "debug": DEBUG,
89
 
            "context_processors": [
90
 
                "django.contrib.auth.context_processors.auth",
91
 
                "django.core.context_processors.debug",
92
 
                "django.core.context_processors.i18n",
93
 
                "django.core.context_processors.media",
94
 
                "django.core.context_processors.static",
95
 
                "django.core.context_processors.tz",
96
 
                "django.core.context_processors.request",
97
 
                "django.contrib.messages.context_processors.messages",
98
 
                "account.context_processors.account",
99
 
                "pinax_theme_bootstrap.context_processors.theme",
100
 
                "symposion.reviews.context_processors.reviews",
101
 
            ],
102
 
        },
103
 
    },
104
 
]
105
 

	
106
 
MIDDLEWARE_CLASSES = [
107
 
    "django.contrib.sessions.middleware.SessionMiddleware",
108
 
    "django.middleware.common.CommonMiddleware",
109
 
    "django.middleware.csrf.CsrfViewMiddleware",
110
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
111
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
112
 
    "django.contrib.messages.middleware.MessageMiddleware",
113
 
    "reversion.middleware.RevisionMiddleware",
114
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
115
 
]
116
 

	
117
 
ROOT_URLCONF = "pinaxcon.urls"
118
 

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

	
122
 
INSTALLED_APPS = [
123
 
    "django.contrib.admin",
124
 
    "django.contrib.auth",
125
 
    "django.contrib.contenttypes",
126
 
    "django.contrib.messages",
127
 
    "django.contrib.sessions",
128
 
    "django.contrib.sites",
129
 
    "django.contrib.staticfiles",
130
 

	
131
 
    # theme
132
 
    "bootstrapform",
133
 
    "pinax_theme_bootstrap",
134
 

	
135
 
    # external
136
 
    "account",
137
 
    "easy_thumbnails",
138
 
    "taggit",
139
 
    "reversion",
140
 
    "metron",
141
 
    "sitetree",
142
 
    "pinax.boxes",
143
 
    "pinax.eventlog",
144
 
    "pinax.pages",
145
 

	
146
 
    # symposion
147
 
    "symposion",
148
 
    "symposion.conference",
149
 
    "symposion.proposals",
150
 
    "symposion.reviews",
151
 
    "symposion.schedule",
152
 
    "symposion.speakers",
153
 
    "symposion.sponsorship",
154
 
    "symposion.teams",
155
 

	
156
 
    # project
157
 
    "pinaxcon",
158
 
    "pinaxcon.proposals"
159
 
]
160
 

	
161
 
# A sample logging configuration. The only tangible logging
162
 
# performed by this configuration is to send an email to
163
 
# the site admins on every HTTP 500 error when DEBUG=False.
164
 
# See http://docs.djangoproject.com/en/dev/topics/logging for
165
 
# more details on how to customize your logging configuration.
166
 
LOGGING = {
167
 
    "version": 1,
168
 
    "disable_existing_loggers": False,
169
 
    "filters": {
170
 
        "require_debug_false": {
171
 
            "()": "django.utils.log.RequireDebugFalse"
172
 
        }
173
 
    },
174
 
    "handlers": {
175
 
        "mail_admins": {
176
 
            "level": "ERROR",
177
 
            "filters": ["require_debug_false"],
178
 
            "class": "django.utils.log.AdminEmailHandler"
179
 
        }
180
 
    },
181
 
    "loggers": {
182
 
        "django.request": {
183
 
            "handlers": ["mail_admins"],
184
 
            "level": "ERROR",
185
 
            "propagate": True,
186
 
        },
187
 
    }
188
 
}
189
 

	
190
 
FIXTURE_DIRS = [
191
 
    os.path.join(PROJECT_ROOT, "fixtures"),
192
 
]
193
 

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

	
196
 
ACCOUNT_OPEN_SIGNUP = True
197
 
ACCOUNT_EMAIL_UNIQUE = True
198
 
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
199
 
ACCOUNT_LOGIN_REDIRECT_URL = "home"
200
 
ACCOUNT_LOGOUT_REDIRECT_URL = "home"
201
 
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
202
 
ACCOUNT_USE_AUTH_AUTHENTICATE = True
203
 

	
204
 
AUTHENTICATION_BACKENDS = [
205
 
    "symposion.teams.backends.TeamPermissionsBackend",
206
 
    "account.auth_backends.UsernameAuthenticationBackend",
207
 
]
208
 

	
209
 
CONFERENCE_ID = 1
210
 
PROPOSAL_FORMS = {
211
 
    "talk": "pinaxcon.proposals.forms.TalkProposalForm",
212
 
}
213
 
PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
214
 
PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
 
new file 100644
1
 
{% load i18n %}
2
 
{% load account_tags %}
3
 

	
4
 

	
5
 
<ul class="nav navbar-nav pull-right">
6
 
    {% if request.user.is_authenticated %}
7
 
        <span class="navbar-text">
8
 
            <i class="fa fa-user"></i> {% user_display request.user %}
9
 
        </span>
10
 
        <li>
11
 
            <a href="{% url "dashboard" %}"><i class="fa fa-tasks"></i> {% trans "Dashboard" %}</a>
12
 
        </li>
13
 
        <li>
14
 
            <a href="{% url 'account_settings' %}"><i class="fa fa-cog"></i> {% trans "Settings" %}</a>
15
 
        </li>
16
 
        <li>
17
 
            <a id="account_logout" href="{% url 'account_logout' %}"><i class="fa fa-power-off"></i> {% trans "Log out" %}</a>
18
 
        </li>
19
 
    {% else %}
20
 
        <li><a href="{% url 'account_login' %}">{% trans "Log in" %}</a></li>
21
 
        {% if ACCOUNT_OPEN_SIGNUP %}
22
 
            <li><a href="{% url 'account_signup' %}">{% trans "Sign up" %}</a></li>
23
 
        {% endif %}
24
 
    {% endif %}
25
 
</ul>
26
 

	
27
 
<form id="accountLogOutForm" style="display: none;" action="{% url 'account_logout' %}" method="POST">
28
 
    {% csrf_token %}
29
 
</form>
 
new file 100644
1
 
{% load sponsorship_tags %}
2
 
{% load thumbnail %}
3
 
{% load pinax_boxes_tags %}
4
 

	
5
 
{% sponsor_levels as levels %}
6
 

	
7
 
<h4>Sponsors</h4>
8
 

	
9
 
<div class="sponsor-list">
10
 
    {% box "sponsor-top" %}
11
 
    {% for level in levels %}
12
 
        {% if level.sponsors %}
13
 
            <h3 style="margin-top: 3em;">{{ level.name }}</h3>
14
 
\
15
 
            {% for sponsor in level.sponsors %}
16
 
                <div style="margin: 10px 0;">
17
 
                    <a href="{{ sponsor.external_url }}">
18
 
                        <img src="{% thumbnail sponsor.website_logo '100x60' %}" alt="{{ sponsor.name }}" />
19
 
                    </a>
20
 
                </div>
21
 
            {% endfor %}
22
 
        {% endif %}
23
 
    {% endfor %}
24
 
</div>
 
new file 100644
1
 
<div class="pull-left">
2
 
    &copy;2015
3
 
</div>
4
 

	
5
 
<div class="pull-right">
6
 
    Site powered by <a href="http://eldarion.com/symposion/"><b>Symposion</b></a>.
7
 
</div>
 
new file 100644
1
 
<script src='/site_media/static/js/site.js?45281e7e2f5ad8c9f8a5'></script>
 
new file 100644
1
 
<link href='/site_media/static/css/site.css?45281e7e2f5ad8c9f8a5' rel='stylesheet' />
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load i18n %}
4
 
{% load proposal_tags %}
5
 
{% load review_tags %}
6
 
{% load teams_tags %}
7
 

	
8
 
{% block head_title %}Dashboard{% endblock %}
9
 

	
10
 
{% block body_class %}auth{% endblock %}
11
 

	
12
 
{% block body %}
13
 
    <div class="panel panel-default">
14
 
        <div class="panel-heading">
15
 
            <div class="pull-right">
16
 
                {% if not user.speaker_profile %}
17
 
                    <a href="{% url "speaker_create" %}" class="btn btn-xs btn-default">
18
 
                        <i class="fa fa-plus-sign"></i> Create a speaker profile
19
 
                    </a>
20
 
                {% else %}
21
 
                    <a href="{% url "speaker_edit" %}" class="btn btn-xs btn-default">
22
 
                        <i class="fa fa-pencil"></i> Edit your speaker profile
23
 
                    </a>
24
 
                    <a href="{% url "proposal_submit" %}" class="btn btn-xs btn-default">
25
 
                        <i class="fa fa-plus-sign"></i> Submit a new proposal
26
 
                    </a>
27
 
                {% endif %}
28
 
            </div>
29
 
            <h3 class="panel-title">
30
 
                <i class="fa fa-bullhorn"></i>
31
 
                {% trans "Speaking" %}
32
 
            </h3>
33
 
        </div>
34
 

	
35
 
        <div class="panel-body">
36
 
            {% if not user.speaker_profile %}
37
 
                <p>To submit a proposal, you must first <a href="{% url "speaker_create" %}">create a speaker profile</a>.</p>
38
 
            {% else %}
39
 
                <h4>Your Proposals</h4>
40
 
                {% if not user.speaker_profile.proposals.exists %}
41
 
                    <p>No proposals submitted yet.</p>
42
 
                {% endif %}
43
 
            {% endif %}
44
 
        </div>
45
 
        {% if user.speaker_profile.proposals.exists %}
46
 
            <table class="table">
47
 
                <tr>
48
 
                    <th>Title</th>
49
 
                    <th>Session type</th>
50
 
                    <th>Status</th>
51
 
                    <th>Actions</th>
52
 
                </tr>
53
 
                {% for proposal in user.speaker_profile.proposals.all %}
54
 
                    {% include "symposion/proposals/_proposal_row.html" %}
55
 
                {% endfor %}
56
 
            </table>
57
 
        {% endif %}
58
 

	
59
 
        {% if user.speaker_profile %}
60
 
            {% associated_proposals as associated_proposals %}
61
 
            {% if associated_proposals %}
62
 
                <div class="panel-body">
63
 
                    <h4>Proposals you have joined as an additional speaker</h4>
64
 
                </div>
65
 
                <table class="table">
66
 
                    <tr>
67
 
                        <th>Title</th>
68
 
                        <th>Session type</th>
69
 
                        <th>Status</th>
70
 
                        <th>Actions</th>
71
 
                    </tr>
72
 
                    {% for proposal in associated_proposals %}
73
 
                        {% include "symposion/proposals/_proposal_row.html" %}
74
 
                    {% endfor %}
75
 
                </table>
76
 
            {% endif %}
77
 

	
78
 
            {% pending_proposals as pending_proposals %}
79
 
            {% if pending_proposals %}
80
 
                <div class="panel-body"><h4>Proposals you have been invited to join</h4></div>
81
 
                <table class="table">
82
 
                    <tr>
83
 
                        <th>Title</th>
84
 
                        <th>Session type</th>
85
 
                        <th>Status</th>
86
 
                        <th>Actions</th>
87
 
                    </tr>
88
 
                    {% for proposal in pending_proposals %}
89
 
                        {% include "symposion/proposals/_pending_proposal_row.html" %}
90
 
                    {% endfor %}
91
 
                </table>
92
 
            {% endif %}
93
 
        {% endif %}
94
 
    </div>
95
 

	
96
 
    <div class="panel panel-default">
97
 
        <div class="panel-heading">
98
 
            <div class="pull-right header-actions">
99
 
                {% if not user.sponsorships.exists %}
100
 
                    <a href="{% url "sponsor_apply" %}" class="btn btn-xs btn-default">
101
 
                        <i class="fa fa-plus-sign"></i>
102
 
                        Apply to be a sponsor
103
 
                    </a>
104
 
                {% endif %}
105
 
            </div>
106
 
            <h3 class="panel-title">
107
 
                <i class="fa fa-briefcase"></i>
108
 
                {% trans "Sponsorship" %}
109
 
            </h3>
110
 
        </div>
111
 

	
112
 
        <div class="panel-body">
113
 
            {% if not user.sponsorships.exists %}
114
 
                <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>.
115
 
            {% else %}
116
 
                <h4>Your Sponsorship</h4>
117
 
                <ul class="list-group">
118
 
                    {% for sponsorship in user.sponsorships.all %}
119
 
                        <li class="list-group-item">
120
 
                            <a href="{% url "sponsor_detail" sponsorship.pk %}"><b>{{ sponsorship.name }}</b></a>
121
 
                            ({{ sponsorship.level }})
122
 
                            {% if not sponsorship.active %}
123
 
                                <span class="label label-warning">awaiting approval</span>
124
 
                            {% endif %}
125
 
                        </li>
126
 
                    {% endfor %}
127
 
                </ul>
128
 
            {% endif %}
129
 
            {% if user.is_staff %}
130
 
                <p>
131
 
                    As staff, you can directly <a href="{% url "sponsor_add" %}">add a sponsor</a> if the organization isn't
132
 
                    applying themselves.
133
 
                </p>
134
 
            {% endif %}
135
 
        </div>
136
 
    </div>
137
 

	
138
 
    {% if review_sections %}
139
 
        <div class="panel panel-default">
140
 
            <div class="panel-heading">
141
 
                <h3 class="panel-title">
142
 
                    <i class="fa fa-briefcase"></i>
143
 
                    {% trans "Reviews" %}
144
 
                </h3>
145
 
            </div>
146
 
            <div class="panel-body">
147
 
                <h4>Reviews by Section</h4>
148
 
                <ul>
149
 
                    {% for section in review_sections %}
150
 
                        <h5>{{ section }}</h5>
151
 
                        <li><a href="{% url "review_section" section.section.slug %}">All</a></li>
152
 
                        <li><a href="{% url "user_reviewed" section.section.slug %}">Reviewed by you</a></li>
153
 
                        <li><a href="{% url "user_not_reviewed" section.section.slug %}">Not Reviewed by you</a></li>
154
 
                    {% endfor %}
155
 
                </ul>
156
 

	
157
 
                {% comment %}
158
 
                <h4>My Assignments</h4>
159
 
                <table class="table">
160
 
                    <thead>
161
 
                        <td>Proposal Title</td>
162
 
                        <td>Score</td>
163
 
                    </thead>
164
 
                    <tbody>
165
 
                        <tr>
166
 
                            <td>Title Three</td>
167
 
                            <td>-1</td>
168
 
                        </tr>
169
 
                        <tr>
170
 
                            <td>Title Four</td>
171
 
                            <td>+2</td>
172
 
                        </tr>
173
 
                    </tbody>
174
 
                </table>
175
 
                {% endcomment %}
176
 

	
177
 
            </div>
178
 
    </div>
179
 
    {% endif %}
180
 

	
181
 
    {% available_teams as available_teams %}
182
 
    {% if user.memberships.exists or available_teams %}
183
 
        <div class="panel panel-default">
184
 
            <div class="panel-heading">
185
 
                <h3 class="panel-title">
186
 
                    <i class="fa fa-group"></i>
187
 
                    {% trans "Teams" %}
188
 
                </h3>
189
 
            </div>
190
 

	
191
 
            {% if user.memberships.exists %}
192
 
                <div class="panel-body">
193
 
                    <h4>Your Teams</h4>
194
 
                </div>
195
 
                <table class="table table-striped">
196
 
                    {% for membership in user.memberships.all %}
197
 
                        <tr>
198
 
                            <td>
199
 
                                <a href="{% url "team_detail" membership.team.slug %}">{{ membership.team.name }}</a>
200
 
                                {% if membership.team.description %}<br>{{ membership.team.description }}{% endif %}
201
 
                            </td>
202
 
                            <td>
203
 
                                <span class="label{% if membership.state == 'invited' %} label-info{% endif %}">{{ membership.get_state_display }}</span>
204
 
                            </td>
205
 
                            <td>
206
 
                                {% if membership.state == "manager" or user.is_staff %}
207
 
                                    {% if membership.team.applicants %}{{ membership.team.applicants.count }} applicant{{ membership.team.applicants.count|pluralize }}{% endif %}
208
 
                                {% endif %}
209
 
                            </td>
210
 
                        </tr>
211
 
                    {% endfor %}
212
 
                </table>
213
 
            {% endif %}
214
 
            {% if available_teams %}
215
 
                <div class="panel-body">
216
 
                    <h4>Available Teams</h4>
217
 
                </div>
218
 
                <table class="table table-striped">
219
 
                    {% for team in available_teams %}
220
 
                        <tr>
221
 
                            <td>
222
 
                                <a href="{% url team_detail team.slug %}">{{ team }}</a>
223
 
                                {% if team.description %}<br>{{ team.description }}{% endif %}
224
 
                            </td>
225
 
                            <td>
226
 
                                <span class="label label-default">{{ team.get_access_display }}</span>
227
 
                            </td>
228
 
                        </tr>
229
 
                    {% endfor %}
230
 
                </table>
231
 
            {% endif %}
232
 
        </div>
233
 
    {% endif %}
234
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load i18n %}
4
 
{% load pinax_boxes_tags %}
5
 

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

	
8
 
{% block body_class %}home{% endblock %}
9
 

	
10
 
{% block body %}
11
 
    {% box "homepage" %}
12
 
{% endblock %}
 
new file 100644
1
 
{% include "pinax/boxes/_box_body.html" %}
 
new file 100644
1
 
{% load i18n %}
2
 

	
3
 
{% if form %}
4
 
    <div id="edit_{{ label }}" class="modal fade">
5
 
        <div class="modal-dialog">
6
 
            <div class="modal-content">
7
 
                <form id="edit_form_{{ label }}" accept-charset="UTF-8" class="modal-form" method="POST" action="{{ form_action }}?next={{ request.path }}">
8
 
                    <div class="modal-header">
9
 
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
10
 
                        <h4 class="modal-title">{% trans "Editing content:" %} {{ label }}</h4>
11
 
                    </div>
12
 
                    <div class="modal-body">
13
 
                        {% csrf_token %}
14
 
                        {{ form.content }}
15
 
                    </div>
16
 
                    <div class="modal-footer">
17
 
                        <button type="submit" class="btn btn-primary">Save changes</button>
18
 
                    </div>
19
 
                </form>
20
 
            </div>
21
 
        </div>
22
 
    </div>
23
 
{% endif %}
24
 

	
25
 
<div id="content_{{ label }}" class="content-box {% if form %}editable{% endif %}">
26
 
    {% if form %}
27
 
        <a href="#edit_{{ label }}" data-toggle="modal" class="btn btn-default btn-sm edit-toggle">
28
 
            <i class="fa fa-pencil"></i>
29
 
            Edit this content
30
 
        </a>
31
 
    {% endif %}
32
 
    {{ box.content_html|safe }}
33
 
</div>
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load bootstrap %}
4
 

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

	
7
 
{% block body_outer %}
8
 
    <h1>Upload File</h1>
9
 
    <form method="POST" action="{% url "file_create" %}" enctype="multipart/form-data">
10
 
        {% csrf_token %}
11
 
        {{ form|bootstrap }}
12
 
        <div class="form-actions">
13
 
            <button class="btn btn-primary" type="submit">Upload</button>
14
 
        </div>
15
 
    </form>
16
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

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

	
5
 
{% block body_outer %}
6
 
    <h1>Files</h1>
7
 
    {% for file in files %}
8
 
        <div style="margin-top: 1em;">
9
 
            <form class="pull-right" action="{% url "file_delete" file.pk %}" method="post">
10
 
                {% csrf_token %}
11
 
                <button type="submit" class="btn btn-error"><i class="fa fa-trash"></i> delete</button>
12
 
            </form>
13
 
            <h3><a href="{{ file.download_url }}">{{ file.file }}</a></h3>
14
 
            <span style="font-style:italic; color: #999;">Uploaded {{ file.created|date:"N j, Y" }}</span>
15
 
        </div>
16
 
    {% empty %}
17
 
        <p>No uploaded files.</p>
18
 
    {% endfor %}
19
 
    <div style="margin-top: 2em">
20
 
        <a class="btn btn-success" href="{% url "file_create" %}">
21
 
            <i class="fa fa-plus"></i>
22
 
            Add File
23
 
        </a>
24
 
    </div>
25
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load sitetree %}
4
 
{% load i18n %}
5
 

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

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

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

	
12
 
{% block body %}
13
 
    {% if editable %}
14
 
        <div class="pull-right">
15
 
            <a href="{% url 'pages_page_edit' page.path %}" class="btn btn-sm btn-default">
16
 
                <i class="fa fa-pencil"></i>
17
 
                Edit this page
18
 
            </a>
19
 
        </div>
20
 
    {% endif %}
21
 
    <h2>{{ page.title }}</h2>
22
 

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

	
27
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load sitetree %}
4
 
{% load i18n %}
5
 
{% load bootstrap %}
6
 

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

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

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

	
14
 
{% block body %}
15
 
    <form method="POST" action="">
16
 
        {% csrf_token %}
17
 
        {{ form|bootstrap }}
18
 
        <div class="form-actions">
19
 
            <input class="btn btn-primary" type="submit" value="Save" />
20
 
        </div>
21
 
    </form>
22
 
{% endblock %}
 
new file 100644
1
 
{% extends "theme_bootstrap/base.html" %}
2
 

	
3
 
{% load staticfiles %}
4
 
{% load metron_tags %}
5
 
{% load i18n %}
6
 
{% load sitetree %}
7
 

	
8
 

	
9
 
{% block styles %}
10
 
    {% include "_styles.html" %}
11
 
{% endblock %}
12
 

	
13
 

	
14
 
{% block extra_head_base %}
15
 
    {% block extra_head %}{% endblock %}
16
 
{% endblock %}
17
 

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

	
22
 
{% block body_base %}
23
 
    <section id="content_body">
24
 
        <div class="container">
25
 
            {% include "_messages.html" %}
26
 
            <div class="row">
27
 
                <div class="col-md-9">
28
 
                    {% block body %}
29
 
                    {% endblock %}
30
 
                </div>
31
 
                <div class="col-md-3">
32
 
                    {% block sidebar %}
33
 
                        {% include "_default_sidebar.html" %}
34
 
                    {% endblock %}
35
 
                </div>
36
 
            </div>
37
 
        </div>
38
 
    </section>
39
 
{% endblock %}
40
 

	
41
 

	
42
 
{% block footer %}
43
 
    {% include "_footer.html" %}
44
 
{% endblock %}
45
 

	
46
 

	
47
 
{% block scripts %}
48
 
    {% include "_scripts.html" %}
49
 
{% endblock %}
50
 

	
51
 
{% block extra_body_base %}
52
 
    {% analytics %}
53
 
    {% block extra_body %}{% endblock %}
54
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 

	
4
 
{% block body_base %}
5
 
    <section id="content_body">
6
 
        <div class="container">
7
 
            {% include "_messages.html" %}
8
 
            {% block body %}
9
 
            {% endblock %}
10
 
        </div>
11
 
    </section>
12
 
{% endblock %}
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% load i18n %}
4
 
{% load sitetree %}
5
 

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

	
8
 
{% block extra_style %}
9
 
    <style type="text/css">
10
 
        div.dataTables_length label {
11
 
            float: left;
12
 
            text-align: left;
13
 
        }
14
 
        div.dataTables_length select {
15
 
            width: 75px;
16
 
        }
17
 
        div.dataTables_filter label {
18
 
            float: right;
19
 
        }
20
 
        div.dataTables_info {
21
 
            padding-top: 8px;
22
 
        }
23
 
        div.dataTables_paginate {
24
 
            float: right;
25
 
            margin: 0;
26
 
        }
27
 
        table.table {
28
 
            clear: both;
29
 
            margin-bottom: 6px !important;
30
 
            background-color: white;
31
 
        }
32
 
        table.table thead .sorting,
33
 
        table.table thead .sorting_asc,
34
 
        table.table thead .sorting_desc,
35
 
        table.table thead .sorting_asc_disabled,
36
 
        table.table thead .sorting_desc_disabled {
37
 
            cursor: pointer;
38
 
            *cursor: hand;
39
 
        }
40
 
        table.dataTable th:active {
41
 
            outline: none;
42
 
        }
43
 
    </style>
44
 
{% endblock %}
45
 

	
46
 
{% block body_outer %}
47
 
    <h1>User List</h1>
48
 
    <table class="table table-striped table-bordered table-reviews">
49
 
        <thead>
50
 
            <th>{% trans "Email" %}</th>
51
 
            <th>{% trans "Name" %}</th>
52
 
            <th>{% trans "Speaker Profile?" %}</th>
53
 
        </thead>
54
 

	
55
 
        <tbody>
56
 
            {% for user in users %}
57
 
                <tr>
58
 
                    <td>{{ user.email }}</td>
59
 
                    <td>{{ user.get_full_name }}</td>
60
 
                    <td>
61
 
                        {% if user.speaker_profile %}
62
 
                            <a href="{% url "speaker_profile" user.speaker_profile.pk %}">{{ user.speaker_profile }}</a>
63
 
                        {% else %}
64
 
                            <a href="{% url "speaker_create_staff" user.pk %}" class="btn btn-xs">create</a>
65
 
                        {% endif %}
66
 
                    </td>
67
 
                </tr>
68
 
            {% endfor %}
69
 
        </tbody>
70
 
    </table>
71
 
{% endblock %}
72
 

	
73
 
{% block extra_script %}
74
 
    <script src="{{ STATIC_URL }}datatables/js/jquery.dataTables.min.js" type="text/javascript"></script>
75
 
    <script src="{{ STATIC_URL }}tabletools/js/TableTools.min.js" type="text/javascript"></script>
76
 
    <script src="{{ STATIC_URL }}datatables/js/dataTables.bootstrap.js" type="text/javascript"></script>
77
 
    <script type="text/javascript">
78
 
        $(function() {
79
 
            $(".tip").tooltip();
80
 
            $("table.table-reviews").dataTable({
81
 
                "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>>",
82
 
                "sPaginationType": "bootstrap",
83
 
                "bStateSave": true,
84
 
                "oTableTools": {
85
 
                    "aButtons": [
86
 
                        "copy",
87
 
                        "csv",
88
 
                        "print"
89
 
                    ],
90
 
                    "sSwfPath": "{{ STATIC_URL }}tabletools/swf/copy_csv_xls.swf"
91
 
                }
92
 
            });
93
 
        });
94
 
    </script>
95
 
{% endblock %}
 
new file 100644
1
 
{% load account_tags %}
2
 
{% load i18n %}
3
 
{% user_display message.user as user %}
4
 
<p>
5
 
  {% blocktrans with title=proposal.title %}<b>{{ user }}</b> has added a message on <b>{{ title }}</b>.{% endblocktrans %}
6
 
</p>
7
 
<blockquote>
8
 
    {{ message.message|safe }}
9
 
</blockquote>
10
 
<p>
11
 
    {% if reviewer %}{% url 'review_detail' proposal.pk as detail_url %}{% else %}{% url 'proposal_detail' proposal.pk as detail_url %}{% endif %}
12
 
    {% blocktrans %} Respond online at <a href="http://{{ current_site }}{{ detail_url }}#proposal-feedback">http://{{ current_site }}{{ detail_url }}#proposal-feedback</a>{% endblocktrans %}
13
 
</p>
 
new file 100644
1
 
{% load account_tags i18n %}{% user_display message.user as user %}{% blocktrans with title=proposal.title %}New message on "{{ title }}" from {{ user }}{% endblocktrans %}
 
new file 100644
1
 
{% load account_tags %}
2
 
{% load i18n %}
3
 
{% user_display user as username %}
4
 
<p>
5
 
  {% blocktrans with title=proposal.title %}<b>{{ username }}</b> has made changes to <b>{{ title }}</b> which you have previously reviewed or commented on.{% endblocktrans %}
6
 
</p>
7
 
<p>
8
 
    {% url 'review_detail' proposal.pk as detail_url %}
9
 
    {% blocktrans %}View the latest version of the proposal online at <a href="http://{{ current_site }}{{ detail_url }}">http://{{ current_site }}{{ detail_url }}</a>{% endblocktrans %}
10
 
</p>
 
new file 100644
1
 
{% load account_tags i18n %}{% user_display user as username %}{% blocktrans with title=proposal.title %}"{{ title }}" has been updated by {{ username }}{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}
2
 
{% url 'dashboard' as dashboard_url %}
3
 
{% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %}
4
 
<p>{{ username }} attached you as an additional speaker to a
5
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
6
 

	
7
 
<p>For more details, visit the {{ site_name }} speaker dashboard:
8
 
    <a href="http://{{ current_site }}{{ dashboard_url }}">http://{{ current_site }}{{ dashboard_url ]}</a>
9
 
</p>
10
 
{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}
2
 
{% url 'speaker_create_token' token as token_url %}
3
 
{% blocktrans with invitator=proposal.speaker.name title=proposal.title site_name=current_site.name %}
4
 
<p>{{ invitator }} attached you as an additional speaker to a
5
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
6
 

	
7
 
<p>Go to</p>
8
 

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

	
11
 
<p>to confirm.</p>
12
 

	
13
 
<p>If you don't have account on the website, you will be asked to create one.</p>
14
 
{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}
2
 
{% url 'speaker_create_token' token as token_url %}
3
 
{% blocktrans with username=proposal.speaker.name site_name=current_site.name title=proposal.title %}
4
 
<p>{{ username }} attached you as an additional speaker to a
5
 
    talk proposal for {{ site_name }} entitled "{{ title }}".</p>
6
 

	
7
 
<p>Go to</p>
8
 

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

	
11
 
<p>to confirm and fill out your speaker profile.</p>
12
 
{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}{% blocktrans with name=proposal.speaker.name title=proposal.title %}{{ name }} has invited you to join as a speaker on {{ title }}{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}
2
 
{% blocktrans with sponsor_name=sponsor.name applicant=sponsor.applicant contact=sponsor.contact_name email=sponsor.contact_email level=sponsor.level %}
3
 
<p>{{ sponsor_name }} has applied to be a sponsor.</p>
4
 

	
5
 
<ul>
6
 
    <li><b>Applicant</b>: {{ applicant }}</li>
7
 
    <li><b>Sponsor Name</b>: {{ sponsor_name }}</li>
8
 
    <li><b>Sponsor Contact</b>: {{ contact }}</li>
9
 
    <li><b>Sponsor Contact Email</b>: {{ email }}</li>
10
 
    <li><b>Sponsorship Level</b>: {{ level }}</li>
11
 
</ul>
12
 
{% endblocktrans %}
 
new file 100644
1
 
{% load i18n %}{% trans "New Sponsor Application" %}
 
new file 100644
1
 
{% load i18n account_tags %}
2
 
{% user_display user as username %}
3
 
{% blocktrans with team_name=team team_url=team.get_absolute_url site_name=current_site.name site_url=current_site %}
4
 
    <p>
5
 
        User "{{ username }}" has applied to join <b>{{ team_name }}</b> on {{ site_name }}.
6
 
    </p>
7
 

	
8
 
    <p>
9
 
        To accept this application and see any other pending applications, visit the following url:
10
 
        <a href="http://{{ site_url }}{{ team_url }}">http://{{ site_url }}{{ team_url }}</a>
11
 
    </p>
12
 
{% endblocktrans %}
 
new file 100644
1
 
{% load i18n account_tags %}{% user_display user as username %}{% blocktrans %}{{ username}} has applied to to join "{{ team }}"{% endblocktrans %}
...
 
 No newline at end of file
 
new file 100644
1
 
{% load i18n account_tags %}
2
 

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

	
8
 
    <p>
9
 
        To accept this invitation, visit the following url:
10
 
        <a href="http://{{ site_url }}{{ team_url }}">http://{{ site_url }}{{ team_url }}</a>
11
 
    </p>
12
 
{% endblocktrans %}
...
 
 No newline at end of file
 
new file 100644
1
 
{% load i18n %}{% blocktrans %}You have been invited to join "{{ team }}"{% endblocktrans %}
...
 
 No newline at end of file
 
new file 100644
1
 
{% load i18n %}
2
 

	
3
 
<tr>
4
 
    <td>
5
 
        <a href="{% url "proposal_detail" proposal.pk %}">{{ proposal.title }}</a>
6
 
    </td>
7
 

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

	
10
 
    <td>
11
 
        {% if proposal.cancelled %}
12
 
            <span class="label label-danger">{% trans 'Cancelled' %}</span>
13
 
        {% else %}
14
 
            {% if request.user == proposal.speaker.user %}
15
 
                {% if proposal.result.status == "accepted" %}
16
 
                    <span class="label label-success">{% trans 'Accepted' %}</span>
17
 
                {% else %}
18
 
                    <span class="label label-default">{% trans 'Submitted' %}</span>
19
 
                {% endif %}
20
 
            {% else %}
21
 
                <span class="label label-default">{% trans 'Invited' %}</span>
22
 
            {% endif %}
23
 
        {% endif %}
24
 
    </td>
25
 

	
26
 
    <td>
27
 
        {% if not proposal.cancelled %}
28
 
            <div class="btn-group">
29
 
                <a class="btn btn-xs dropdown-toggle" data-toggle="dropdown" href="#">
30
 
                {% trans 'Choose Response' %}
31
 
                <span class="caret"></span>
32
 
                </a>
33
 
                <ul class="dropdown-menu">
34
 
                    <li><a href="{% url "proposal_pending_join" proposal.id %}">
35
 
			{% trans 'Accept invitation' %}</a></li>
36
 
                    <li><a href="{% url "proposal_pending_decline" proposal.id
37
 
		    %}">{% trans 'Decline invitation' %}</a></li>
38
 
                </ul>
39
 
            </div>
40
 
        {% endif %}
41
 
    </td>
42
 
</tr>
 
new file 100644
1
 
{% load i18n %}
2
 

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

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

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

	
13
 
    {% if proposal.additional_speakers.all %}
14
 
        <dt>{% trans "Additional Speakers" %}</dt>
15
 
        <dd>
16
 
            {% for speaker in proposal.additional_speakers.all %}
17
 
                <li>
18
 
                    {% if speaker.user %}
19
 
                        <strong>{{ speaker.name }}</strong> &lt;{{ speaker.email }}&gt;
20
 
                    {% else %}
21
 
                        {{ speaker.email }} ({% trans "Invitation Sent" %})
22
 
                    {% endif %}
23
 
                </li>
24
 
            {% endfor %}
25
 
        </dd>
26
 
    {% endif %}
27
 

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

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

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

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

	
40
 
    <dt>{% trans "Documents" %}</dt>
41
 
    <dd>
42
 
        {% if proposal.supporting_documents.exists %}
43
 
            <table class="table table-striped">
44
 
                {% for document in proposal.supporting_documents.all %}
45
 
                    <tr>
46
 
                        <td><a href="{{ document.download_url }}">{{ document.description }}</a></td>
47
 
                        <td>
48
 
                        <form style="margin: 0;" method="post" action="{% url "proposal_document_delete" document.pk %}">
49
 
                            {% csrf_token %}
50
 
                            <button type="submit" class="btn btn-xs">delete</button>
51
 
                        </form>
52
 
                    </td>
53
 
                    </tr>
54
 
                {% endfor %}
55
 
            </table>
56
 
        {% else %}
57
 
            No supporting documents attached to this proposal.
58
 
        {% endif %}
59
 
    </dd>
60
 
</dl>
 
new file 100644
1
 
<tr>
2
 
    <td>
3
 
        <a href="{% url "proposal_detail" proposal.pk %}">{{ proposal.title }}</a>
4
 
    </td>
5
 

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

	
8
 
    <td>
9
 
        {% if proposal.cancelled %}
10
 
            <span class="label label-danger">Cancelled</span>
11
 
        {% else %}
12
 
            {% if request.user == proposal.speaker.user %}
13
 
                {% if proposal.result.status == "accepted" %}
14
 
                    <span class="label label-success">Accepted</span>
15
 
                {% else %}
16
 
                    <span class="label label-default">Submitted</span>
17
 
                {% endif %}
18
 
            {% else %}
19
 
                <span class="label label-default">Associated</span>
20
 
            {% endif %}
21
 
        {% endif %}
22
 
    </td>
23
 

	
24
 
    <td>
25
 
        {% if not proposal.cancelled %}
26
 
            {% if request.user == proposal.speaker.user and proposal.can_edit %}
27
 
                <a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-xs"><i class="fa fa-pencil"></i> Edit</a>
28
 
                <a href="{% url "proposal_speaker_manage" proposal.id %}" class="btn btn-xs"><i class="fa fa-user"></i> Manage Additional Speakers</a>
29
 
            {% endif %}
30
 
        {% endif %}
31
 
    </td>
32
 
</tr>
 
new file 100644
1
 
{% extends "site_base.html" %}
2
 

	
3
 
{% block body_outer %}
4
 
    {% block body %}{% endblock %}
5
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load bootstrap %}
4
 

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

	
7
 
{% block body %}
8
 
    <form method="POST" action="" enctype="multipart/form-data" class="form form-horizontal">
9
 
        {% csrf_token %}
10
 
        <fieldset>
11
 
            {{ form|bootstrap_horizontal }}
12
 
        </fieldset>
13
 
        <div class="form-actions">
14
 
            <input class="btn btn-primary" type="submit" value="Upload" />
15
 
        </div>
16
 
    </form>
17
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load i18n %}
4
 

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

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

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

	
3
 
{% load i18n %}
4
 
{% load account_tags %}
5
 
{% load bootstrap %}
6
 

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

	
9
 
{% block body %}
10
 
    <div class="pull-right">
11
 
        {% if not proposal.cancelled %}
12
 
            {% if request.user == proposal.speaker.user %}
13
 
                <a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-default">
14
 
                    {% trans "Edit this proposal" %}
15
 
                </a>
16
 
                <a href="{% url "proposal_cancel" proposal.pk %}" class="btn btn-default">
17
 
                    {% trans "Cancel this proposal" %}
18
 
                </a>
19
 
            {% else %}
20
 
                <a href="{% url "proposal_leave" proposal.pk %}" class="btn btn-default">
21
 
                    {% trans "Remove me from this proposal" %}
22
 
                </a>
23
 
            {% endif %}
24
 
        {% else %}
25
 
            {% trans 'Cancelled' }
26
 
        {% endif %}
27
 
    </div>
28
 

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

	
31
 
    <div class="tabbable">
32
 
        <ul class="nav nav-tabs">
33
 
            <li class="active"><a href="#proposal-detail" data-toggle="tab">{% trans "Proposal Details" %}</a></li>
34
 
            {% if request.user == proposal.speaker.user %}
35
 
                <li><a href="#proposal-documents" data-toggle="tab">{% trans "Supporting Documents" %}</a></li>
36
 
            {% endif %}
37
 
            {% if message_form %}
38
 
                <li><a href="#proposal-feedback" data-toggle="tab">{% trans "Reviewer Feedback" %} <span class="badge">{{ proposal.messages.all|length }}</span></a></li>
39
 
            {% endif %}
40
 
        </ul>
41
 
        <div class="tab-content">
42
 
            <div class="tab-pane active" id="proposal-detail">
43
 
                {% include "symposion/proposals/_proposal_fields.html" %}
44
 
            </div>
45
 
            {% if request.user == proposal.speaker.user %}
46
 
                <div class="tab-pane" id="proposal-documents">
47
 
                    <h3>{% trans 'Supporting Documents' %}</h3>
48
 

	
49
 
                    {% if proposal.supporting_documents.exists %}
50
 
                        <table class="table table-striped">
51
 
                            {% for document in proposal.supporting_documents.all %}
52
 
                                <tr>
53
 
                                    <td><a href="{{ document.download_url }}">{{ document.description }}</a></td>
54
 
                                    <td>
55
 
                                    <form style="margin: 0;" method="post" action="{% url "proposal_document_delete" document.pk %}">
56
 
                                        {% csrf_token %}
57
 
                                        <button type="submit" class="btn btn-xs">{% trans 'delete' %}</button>
58
 
                                    </form>
59
 
                                </td>
60
 
                                </tr>
61
 
                            {% endfor %}
62
 
                        </table>
63
 
                    {% else %}
64
 
                        <p>{% trans 'No supporting documents attached to this proposal.' %}</p>
65
 
                    {% endif %}
66
 
                    <a class="btn btn-default btn-sm{% if proposal.cancelled %} btn-disabled{% endif %}" href="{% url "proposal_document_create" proposal.pk %}"><i class="fa fa-upload"></i> {% trans 'Add Document' %}</a>
67
 
                </div>
68
 
            {% endif %}
69
 

	
70
 
    {% if message_form %}
71
 
        <div class="tab-pane" id="proposal-feedback">
72
 

	
73
 
            <h3>{% trans 'Conversation with Reviewers' %}</h3>
74
 

	
75
 
            {% for message in proposal.messages.all %}
76
 
                <div class="review-box">
77
 
                    <div class="comment">{{ message.message|safe }}</div>
78
 
                    <div class="dateline"><b>{% user_display message.user %}</b> {{ message.submitted_at|timesince }} ago</div>
79
 
                </div>
80
 
                <div class="clear"></div>
81
 
            {% endfor %}
82
 

	
83
 
            <h3>{% trans 'Leave a Message' %}</h3>
84
 

	
85
 
            <p>{% trans 'You can leave a message for the reviewers here.' %}</p>
86
 

	
87
 
            <form action="" method="POST" accept-charset="utf-8">
88
 
                {% csrf_token %}
89
 
                <fieldset>
90
 
                    {{ message_form|bootstrap }}
91
 
                </fieldset>
92
 
                <div class="actions">
93
 
                    <button type="submit" name="message_submit" class="btn btn-primary">{% trans 'Submit' %}</button>
94
 
                </div>
95
 
            </form>
96
 
        </div>
97
 
    {% endif %}
98
 
    </div>
99
 
</div>
100
 
{% endblock %}
101
 

	
102
 
{% block extra_script %}
103
 
    <script src="{{ STATIC_URL }}symposion/js/jquery.history.js"></script>
104
 
    <script type="text/javascript">
105
 
        $(function() {
106
 
            var History = window.History;
107
 

	
108
 
            $(window).bind("anchorchange", function() {
109
 
                $(".nav-tabs a[href='" + location.hash + "']").click();
110
 
            });
111
 

	
112
 
            $('#.nav-tabs a[data-toggle="tab"]').on('shown', function (e) {
113
 
                if (History.enabled) {
114
 
                    History.pushState(null, null, $(e.target).attr("href"));
115
 
                }
116
 
            });
117
 
        });
118
 
    </script>
119
 
{% endblock extra_script %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load bootstrap %}
4
 

	
5
 
{% block head_title %}Editing {{ proposal.title }}{% endblock %}
6
 

	
7
 
{% block body %}
8
 
    <h1>Edit: {{ proposal.title }}</h1>
9
 

	
10
 
    <p><a href="{% url "proposal_speaker_manage" proposal.pk %}">Manage speakers</a></p>
11
 

	
12
 
    <form method="POST" action="" enctype="multipart/form-data">
13
 
        {% csrf_token %}
14
 
        <fieldset>
15
 
            {{ form|bootstrap }}
16
 
        </fieldset>
17
 
        <div class="form-actions">
18
 
            <input class="btn btn-primary" type="submit" value="Save" />
19
 
            <a class="btn btn-default" href="{% url "proposal_detail" proposal.pk %}">Cancel</a>
20
 
        </div>
21
 
    </form>
22
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% block body %}
4
 
    <h3>Leaving {{ proposal.title }}</h3>
5
 

	
6
 
    <form method="POST" action="" enctype="multipart/form-data">
7
 
        {% csrf_token %}
8
 
        <p>Are you sure you wish to leave as a speaker on <b>{{ proposal.title }}</b>?</p>
9
 
        <input type="submit" class="btn btn-primary" value="I am sure" />
10
 
    </form>
11
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load i18n %}
4
 
{% load bootstrap %}
5
 

	
6
 
{% block body %}
7
 
    <h1>{% trans 'Proposal:' %} {{ proposal.title }}</h1>
8
 

	
9
 
    <p>
10
 
      <a href="{% url "proposal_edit" proposal.pk %}">{% trans 'Edit proposal' %}
11
 
      </a>
12
 
    </p>
13
 

	
14
 
    <h2>{% trans 'Current Speakers' %}</h2>
15
 

	
16
 
    {% for speaker in speakers %}
17
 
        {% if speaker.user %}
18
 
            <p><b>{{ speaker.name }}</b> &mdash; {{ speaker.email }}</p>
19
 
        {% else %}
20
 
            <p>{{ speaker.email }} &mdash; {% trans 'pending invitation' %}</p>
21
 
        {% endif %}
22
 
    {% endfor %}
23
 

	
24
 
    <h2>{% trans 'Add another speaker' %}</h2>
25
 

	
26
 
    <form method="POST" action="" enctype="multipart/form-data">
27
 
        {% csrf_token %}
28
 
        {{ add_speaker_form|bootstrap }}
29
 
        <div class="form-action">
30
 
            <input type="submit" value="Add speaker" class="btn btn-primary" />
31
 
        </div>
32
 
    </form>
33
 
{% endblock %}
34
 

	
35
 
{% block extra_body %}
36
 
    <script type="text/javascript">
37
 
    $(function() {
38
 
        $("#id_email").focus();
39
 
    });
40
 
    </script>
41
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load pinax_boxes_tags %}
4
 
{% load i18n %}
5
 

	
6
 
{% block page_title %}{% trans "Submit A Proposal" %}{% endblock %}
7
 

	
8
 
{% block body %}
9
 
    {% box "proposal_submit" %}
10
 

	
11
 
    {% if kinds %}
12
 
        <p>Select what kind of proposal you'd like to submit:</p>
13
 

	
14
 
        {% for kind in kinds %}
15
 
            <a href="{% url "proposal_submit_kind" kind.slug %}" class="btn btn-default">{{ kind }}</a>
16
 
        {% endfor %}
17
 
    {% else %}
18
 
        <p>Proposals are not currently open for submission.</p>
19
 
    {% endif %}
20
 
{% endblock %}
 
new file 100644
1
 
{% extends "symposion/proposals/base.html" %}
2
 

	
3
 
{% load bootstrap %}
4
 
{% load pinax_boxes_tags %}
5
 
{% load i18n %}
6
 

	
7
 
{% block page_title %}Submit a Proposal for a {{ kind.name }}{% endblock %}
8
 

	
9
 
{% block body %}
10
 
    {% box "example_proposal" %}
11
 

	
12
 
    <form method="POST" action="" enctype="multipart/form-data" class="form-horizontal">
13
 
        {% csrf_token %}
14
 
        <fieldset>
15
 
            {{ proposal_form|bootstrap_horizontal }}
16
 
        </fieldset>
17
 
        <div class="form-actions">
18
 
            <p>
19
 
                You will be able to edit your proposal after it has been submitted. The program committee may ask questions, provide feedback, and even suggest changes to your proposal as part of the review processes.
20
 
            </p>
21
 
            <input class="btn btn-primary" type="submit" name="finish" value="Save" />
22
 
            <!-- <span style="float: right; padding: 4px 6px">or</span> -->
23
 
            <input class="btn btn-default" type="submit" name="add-speakers" value="Save and Add Additional Speakers" />
24
 
        </div>
25
 
    </form>
26
 
{% endblock %}
 
new file 100644
1
 
    <b>Body</b> may include the following variables which will be substituted in the email with a value
2
 
    specific to each proposal:
3
 
<ul>
4
 
    <li><code>{% templatetag openvariable %} proposal.title {% templatetag closevariable %}</code> e.g. {{ proposals.0.title }}
5