Compare commits
10 commits
1a41a0bee2
...
c4766d9198
Author | SHA1 | Date | |
---|---|---|---|
|
c4766d9198 | ||
|
96cf72e970 | ||
|
aeacf7f8a8 | ||
|
e83dafef90 | ||
|
420974154a | ||
|
bea1998043 | ||
|
00f074c152 | ||
|
630f50c452 | ||
|
6bd1ab9f8f | ||
|
f5eabe0aa3 |
11 changed files with 112 additions and 32 deletions
|
@ -91,9 +91,9 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
||||||
max_length=64,
|
max_length=64,
|
||||||
verbose_name="Free text line 1",
|
verbose_name="Free text line 1",
|
||||||
help_text="A line of free text that will appear on your badge. Use "
|
help_text="A line of free text that will appear on your badge. Use "
|
||||||
"this for your Twitter handle, IRC nick, your preferred "
|
"this for your Mastodon or Twitter handle, IRC nick, "
|
||||||
"pronouns or anything else you'd like people to see on "
|
"your preferred pronouns or anything else you'd like people "
|
||||||
"your badge.",
|
"to see on your badge.",
|
||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
free_text_2 = models.CharField(
|
free_text_2 = models.CharField(
|
||||||
|
@ -114,9 +114,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
||||||
|
|
||||||
address_line_1 = models.CharField(
|
address_line_1 = models.CharField(
|
||||||
verbose_name="Address line 1",
|
verbose_name="Address line 1",
|
||||||
help_text="This address, if provided, will appear on your invoices. "
|
help_text="This address, if provided, will appear on your invoices.",
|
||||||
"It is also where we will ship your Open Hardware Kit "
|
|
||||||
"if you are allocated one.",
|
|
||||||
max_length=1024,
|
max_length=1024,
|
||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
|
@ -195,6 +193,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
||||||
help_text="Select to be subscribed to the low-traffic lca-announce "
|
help_text="Select to be subscribed to the low-traffic lca-announce "
|
||||||
"mailing list",
|
"mailing list",
|
||||||
blank=True,
|
blank=True,
|
||||||
|
default=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
lca_chat = models.BooleanField(
|
lca_chat = models.BooleanField(
|
||||||
|
|
|
@ -67,12 +67,12 @@
|
||||||
|
|
||||||
|
|
||||||
{% block proposals_body %}
|
{% block proposals_body %}
|
||||||
<p>Pay for your linux.conf.au attendance with your Visa, Mastercard, or American Express credit or debit card. Card payments are processed by <a href="https://stripe.com">Stripe</a>.</p>
|
<p>Pay your invoice with your Visa, Mastercard, or American Express credit or debit card. Card payments are processed by <a href="https://stripe.com">Stripe</a>.</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
No data on this form is retained by {% conference_name %}, rather it is
|
No data on this form is retained by {% conference_name %}, rather it is
|
||||||
sent to Stripe. In particular, credit card details are not sent
|
sent to Stripe. In particular, credit card details are not sent
|
||||||
to linux.conf.au. You must allow JavaScript from <code>js.stripe.com</code> and <code>stripe.network</code> to complete payment.
|
to Linux Australia. You must allow JavaScript from <code>js.stripe.com</code> and <code>stripe.network</code> to complete payment.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>You have <strong>${{ invoice.balance_due }}</strong> remaining to pay on this invoice.</p>
|
<p>You have <strong>${{ invoice.balance_due }}</strong> remaining to pay on this invoice.</p>
|
||||||
|
|
|
@ -131,7 +131,7 @@
|
||||||
|
|
||||||
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a> <a
|
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a> <a
|
||||||
href="https://twitter.com/_everythingopen" alt="Twitter"><i class="fab fa-twitter"></i></a> <a
|
href="https://twitter.com/_everythingopen" alt="Twitter"><i class="fab fa-twitter"></i></a> <a
|
||||||
href="https://www.facebook.com/linuxconferenceaustralia/" alt="Facebook"><i class="fab fa-facebook"></i></a> <a
|
href="https://www.facebook.com/EverythingOpenConference" alt="Facebook"><i class="fab fa-facebook"></i></a> <a
|
||||||
href="https://www.linkedin.com/showcase/everythingopen/" alt="LinkedIn"><i class="fab fa-linkedin"></i></a>
|
href="https://www.linkedin.com/showcase/everythingopen/" alt="LinkedIn"><i class="fab fa-linkedin"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 pb-4 text-center">
|
<div class="col-md-4 pb-4 text-center">
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
<h3>Account Management</h3>
|
<h3>Account Management</h3>
|
||||||
<p>If you would like to change your registered email address or password, you can use our self-service account management portal</p>
|
<p>If you would like to change your registered email address or password, you can use our self-service account management portal</p>
|
||||||
<div>
|
<div>
|
||||||
<a class="btn btn-primary" role="button" href="https://login.everythingopen.au/manage/">Account Management</a>
|
<a class="btn btn-primary" role="button" href="https://login.linux.conf.au/manage/">Account Management</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<h3>New Proposal</h3>
|
<h3>New Proposal</h3>
|
||||||
<p>Click one of the following links to create a speaking or miniconf proposal.</p>
|
<p>Click one of the following links to create a session proposal.</p>
|
||||||
<p>Once submitted you will be able to see the status of your proposals, as well manage the submission and co-speakers from this page</p>
|
<p>Once submitted you will be able to see the status of your proposals, as well manage the submission and co-speakers from this page.</p>
|
||||||
<div>
|
<div>
|
||||||
{% for kind in proposal_kinds %}
|
{% for kind in proposal_kinds %}
|
||||||
<a class="btn btn-outline-primary mb-2" href="{% url "proposal_submit_kind" kind.slug %}">{{ kind }}</a>
|
<a class="btn btn-outline-primary mb-2" href="{% url "proposal_submit_kind" kind.slug %}">{{ kind }}</a>
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
<h3>Speaker Profile</h3>
|
<h3>Speaker Profile</h3>
|
||||||
{% if not user.speaker_profile %}
|
{% if not user.speaker_profile %}
|
||||||
<p>
|
<p>
|
||||||
To create a speaking or miniconf proposal you must first create a speaker
|
To create a session proposal you must first create a speaker profile.
|
||||||
profile.
|
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p>
|
<p>
|
||||||
Your speaker profile is independent of your attendee profile and the
|
Your speaker profile is independent of your attendee profile.
|
||||||
details you provide here will be used during selection and to populate
|
The details you provide here will be used during the session selection process,
|
||||||
your speaker bio on the conference website.
|
and to populate your speaker bio on the conference website.
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
{% if not user.speaker_profile %}
|
{% if not user.speaker_profile %}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<h2 class="mb-3">{% trans "Speaking and Miniconfs" %}</h2>
|
<h2 class="mb-3">{% trans "Speaking and Sessions" %}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
{% with timetable|day_has_tracks:timetable.day as has_tracks %}
|
{% with timetable|day_has_tracks:timetable.day as has_tracks %}
|
||||||
{% if has_tracks %}
|
{% if has_tracks %}
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="time"><em>Miniconf</em></th>
|
<th scope="row" class="time"><em>Track</em></th>
|
||||||
{% for room in timetable.rooms %}
|
{% for room in timetable.rooms %}
|
||||||
{% with room|trackname:timetable.day as track_name %}
|
{% with room|trackname:timetable.day as track_name %}
|
||||||
<th scope="column" class="track-name">{% if track_name %}<p>{{ track_name }}</p>{% endif %}</th>
|
<th scope="column" class="track-name">{% if track_name %}<p>{{ track_name }}</p>{% endif %}</th>
|
||||||
|
|
|
@ -39,7 +39,7 @@ CairoSVG==2.4.2
|
||||||
PyJWT==2.0.0
|
PyJWT==2.0.0
|
||||||
|
|
||||||
# Registripe
|
# Registripe
|
||||||
django-countries>=6.1.3
|
django-countries==7.3.2
|
||||||
pinax-stripe==4.4.0
|
pinax-stripe==4.4.0
|
||||||
requests==2.24.0
|
requests==2.24.0
|
||||||
stripe==2.55.0
|
stripe==2.55.0
|
||||||
|
|
|
@ -18,12 +18,17 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col-6">
|
<div class="col-lg-6">
|
||||||
<p><strong id="note"></strong></p>
|
<p><strong id="note"></strong></p>
|
||||||
<video id="preview"" autoplay style=" height: 400px;"></video>
|
<video id="preview"" autoplay style=" height: 400px;"></video>
|
||||||
|
|
||||||
|
<p>Select camera:</p>
|
||||||
|
<ul id="camera-list" class="list-group">
|
||||||
|
<li class="list-group-item active" aria-current="true">No camera found</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-6">
|
<div class="col-lg-6">
|
||||||
<div id="code_div" class="form-group has-feedback has-error">
|
<div id="code_div" class="form-group has-feedback has-error">
|
||||||
<label class="control-label" for="bpcode">Boarding Pass Code</label>
|
<label class="control-label" for="bpcode">Boarding Pass Code</label>
|
||||||
<input id="bptext" type="text" class="form-control" id="bpcode" placeholder="Code">
|
<input id="bptext" type="text" class="form-control" id="bpcode" placeholder="Code">
|
||||||
|
@ -43,6 +48,9 @@
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
let scanner = new Instascan.Scanner({ video: document.getElementById('preview') });
|
let scanner = new Instascan.Scanner({ video: document.getElementById('preview') });
|
||||||
|
let activeCameraId = null;
|
||||||
|
let availableCameras = [];
|
||||||
|
|
||||||
scanner.addListener('scan', function (content) {
|
scanner.addListener('scan', function (content) {
|
||||||
// This should ensure we start with the lca base domain. However, I don't have the time for this
|
// This should ensure we start with the lca base domain. However, I don't have the time for this
|
||||||
// considering we have quite a few domains right now.
|
// considering we have quite a few domains right now.
|
||||||
|
@ -57,9 +65,66 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function startCamera(cameras) { scanner.start(cameras[0]); }
|
function startCamera(cameras) {
|
||||||
|
// Update available cameras.
|
||||||
|
availableCameras = cameras;
|
||||||
|
|
||||||
|
// Display the cameras on the page.
|
||||||
|
let cameraList = document.getElementById('camera-list');
|
||||||
|
cameraList.innerHTML = "";
|
||||||
|
|
||||||
|
for (let i = 0; i < cameras.length; ++i) {
|
||||||
|
let camera = cameras[i];
|
||||||
|
|
||||||
|
let cameraItem = document.createElement('li');
|
||||||
|
cameraItem.textContent = formatCameraName(camera.name);
|
||||||
|
cameraItem.setAttribute('data-cameraid', camera.id);
|
||||||
|
|
||||||
|
let classNames = "list-group-item";
|
||||||
|
if (i == 0) {
|
||||||
|
classNames = classNames + " active";
|
||||||
|
}
|
||||||
|
cameraItem.className = classNames;
|
||||||
|
|
||||||
|
cameraItem.addEventListener("click", (event) => {
|
||||||
|
selectCamera(cameraItem);
|
||||||
|
|
||||||
|
let activeCameras = cameraList.getElementsByClassName("active");
|
||||||
|
for (let j = 0; j < activeCameras.length; ++j) {
|
||||||
|
let newClassNames = activeCameras[j].className.replace(" active", "");
|
||||||
|
activeCameras[j].className = newClassNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
cameraItem.className = cameraItem.className + " active";
|
||||||
|
});
|
||||||
|
|
||||||
|
cameraList.appendChild(cameraItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.start(cameras[0]);
|
||||||
|
}
|
||||||
|
|
||||||
function errorCamera(error) { console.error(e); }
|
function errorCamera(error) { console.error(e); }
|
||||||
|
|
||||||
|
function formatCameraName(name) {
|
||||||
|
return name || '(unknown)';
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectCamera(cameraItem) {
|
||||||
|
let cameraId = cameraItem.dataset.cameraid;
|
||||||
|
|
||||||
|
// Find the camera in the list.
|
||||||
|
let camera = null;
|
||||||
|
for (let i = 0; i < availableCameras.length; ++i) {
|
||||||
|
if (availableCameras[i].id === cameraId) {
|
||||||
|
camera = availableCameras[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.start(camera);
|
||||||
|
}
|
||||||
|
|
||||||
Instascan.Camera.getCameras().then(startCamera).catch(errorCamera);
|
Instascan.Camera.getCameras().then(startCamera).catch(errorCamera);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,16 @@
|
||||||
{% block body %}
|
{% block body %}
|
||||||
{% load registrasion_tags %}
|
{% load registrasion_tags %}
|
||||||
{% load lca2018_tags %}
|
{% load lca2018_tags %}
|
||||||
|
{% load waffle_tags %}
|
||||||
|
|
||||||
{% items_purchased as purchased %}
|
{% items_purchased as purchased %}
|
||||||
{% items_pending as pending %}
|
{% items_pending as pending %}
|
||||||
{% items_purchased 1 as ticket %}
|
{% items_purchased 1 as ticket %}
|
||||||
<!-- {% items_purchased 6 as shirts %} -->
|
<!-- {% items_purchased 6 as shirts %} -->
|
||||||
<!-- {% total_items_purchased 3 as penguin_dinner_count %} -->
|
{% total_items_purchased 3 as penguin_dinner_count %}
|
||||||
<!-- {% total_items_purchased 4 as speakers_dinner_count %} -->
|
<!-- {% total_items_purchased 4 as speakers_dinner_count %} -->
|
||||||
<!-- {% total_items_purchased 5 as pdns_count %} -->
|
<!-- {% total_items_purchased 5 as pdns_count %} -->
|
||||||
|
{% items_purchased 5 as raffle_tickets %}
|
||||||
{% ticket_type as ticket_type %}
|
{% ticket_type as ticket_type %}
|
||||||
|
|
||||||
<a type="button" class="btn btn-outline-primary" href="{% url 'regidesk:check_in_scanner' %}">Return to scanning page</a>
|
<a type="button" class="btn btn-outline-primary" href="{% url 'regidesk:check_in_scanner' %}">Return to scanning page</a>
|
||||||
|
@ -36,10 +39,10 @@
|
||||||
<dt class="col-sm-3">Free Text 2</dt>
|
<dt class="col-sm-3">Free Text 2</dt>
|
||||||
<dd class="col-sm-9">{{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_2 }}</dd>
|
<dd class="col-sm-9">{{ user.attendee.attendeeprofilebase.attendeeprofile.free_text_2 }}</dd>
|
||||||
|
|
||||||
{% comment "Not needed for EO2023" %}
|
|
||||||
<dt class="col-sm-3">Penguin Dinner Tickets</dt>
|
<dt class="col-sm-3">Penguin Dinner Tickets</dt>
|
||||||
<dd class="col-sm-9">{{ penguin_dinner_count }}</dd>
|
<dd class="col-sm-9">{{ penguin_dinner_count }}</dd>
|
||||||
|
|
||||||
|
{% comment "Not needed for EO2023" %}
|
||||||
<dt class="col-sm-3">Speaker Dinner Tickets</dt>
|
<dt class="col-sm-3">Speaker Dinner Tickets</dt>
|
||||||
<dd class="col-sm-9">{{ speakers_dinner_count }}</dd>
|
<dd class="col-sm-9">{{ speakers_dinner_count }}</dd>
|
||||||
|
|
||||||
|
@ -54,7 +57,7 @@
|
||||||
<dd class="col-sm-9">{{ user.username }}</dd>
|
<dd class="col-sm-9">{{ user.username }}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
{% comment "Not needed for EO2023" %}
|
{% flag "checkin_shirts" %}
|
||||||
<h4>Shirts ordered</h4>
|
<h4>Shirts ordered</h4>
|
||||||
<table class="table card-text">
|
<table class="table card-text">
|
||||||
{% for shirt in shirts%}
|
{% for shirt in shirts%}
|
||||||
|
@ -64,10 +67,23 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
{% endcomment %}
|
{% endflag %}
|
||||||
|
|
||||||
|
{% flag "checkin_raffle" %}
|
||||||
|
<h4>Raffle Tickets</h4>
|
||||||
|
<table class="table card-text">
|
||||||
|
{% for raffle in raffle_tickets %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ raffle.product }}</td>
|
||||||
|
<td>{{ raffle.quantity }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endflag %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% flag "checkin_venueless" %}
|
||||||
<div class="card my-3">
|
<div class="card my-3">
|
||||||
<div class="card-header">Venueless</div>
|
<div class="card-header">Venueless</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -83,6 +99,7 @@
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endflag %}
|
||||||
|
|
||||||
<div class="card my-3">
|
<div class="card my-3">
|
||||||
<div class="card-header">Badge Preview</div>
|
<div class="card-header">Badge Preview</div>
|
||||||
|
@ -128,7 +145,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% comment "Not needed for EO2023" %}
|
{% flag "checkin_schwag" %}
|
||||||
<div class="card {% if check_in.schwag_given %}border-success{% else %}border-danger{% endif %} my-3">
|
<div class="card {% if check_in.schwag_given %}border-success{% else %}border-danger{% endif %} my-3">
|
||||||
<div class="card-header {% if check_in.schwag_given %}text-white bg-success{% endif %}">Schwag</div>
|
<div class="card-header {% if check_in.schwag_given %}text-white bg-success{% endif %}">Schwag</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -142,7 +159,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endcomment %}
|
{% endflag %}
|
||||||
|
|
||||||
<div class="card my-3">
|
<div class="card my-3">
|
||||||
<div class="card-header">Log Exception</div>
|
<div class="card-header">Log Exception</div>
|
||||||
|
@ -155,7 +172,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% comment "Not needed for EO2023" %}
|
{% flag "checkin_bulk" %}
|
||||||
<div class="card my-3 {% if check_in.checked_in_bool and check_in.schwag_given %}border-success{% elif check_in.checked_in_bool or check_in.schwag_given %}card-warning{% else %}card-danger{% endif %}">
|
<div class="card my-3 {% if check_in.checked_in_bool and check_in.schwag_given %}border-success{% elif check_in.checked_in_bool or check_in.schwag_given %}card-warning{% else %}card-danger{% endif %}">
|
||||||
<div class="card-header {% if check_in.checked_in_bool and check_in.schwag_given %}text-white bg-success{% elif check_in.checked_in_bool or check_in.schwag_given %}bg-warning{% endif %}">Bulk actions</div>
|
<div class="card-header {% if check_in.checked_in_bool and check_in.schwag_given %}text-white bg-success{% elif check_in.checked_in_bool or check_in.schwag_given %}bg-warning{% endif %}">Bulk actions</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -176,7 +193,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endcomment %}
|
{% endflag %}
|
||||||
|
|
||||||
<a type="button" class="btn btn-outline-primary" href="{% url 'regidesk:check_in_scanner' %}">Return to scanning page</a>
|
<a type="button" class="btn btn-outline-primary" href="{% url 'regidesk:check_in_scanner' %}">Return to scanning page</a>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue