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,
|
||||
verbose_name="Free text line 1",
|
||||
help_text="A line of free text that will appear on your badge. Use "
|
||||
"this for your Twitter handle, IRC nick, your preferred "
|
||||
"pronouns or anything else you'd like people to see on "
|
||||
"your badge.",
|
||||
"this for your Mastodon or Twitter handle, IRC nick, "
|
||||
"your preferred pronouns or anything else you'd like people "
|
||||
"to see on your badge.",
|
||||
blank=True,
|
||||
)
|
||||
free_text_2 = models.CharField(
|
||||
|
@ -114,9 +114,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
|
||||
address_line_1 = models.CharField(
|
||||
verbose_name="Address line 1",
|
||||
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.",
|
||||
help_text="This address, if provided, will appear on your invoices.",
|
||||
max_length=1024,
|
||||
blank=True,
|
||||
)
|
||||
|
@ -195,6 +193,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
help_text="Select to be subscribed to the low-traffic lca-announce "
|
||||
"mailing list",
|
||||
blank=True,
|
||||
default=False,
|
||||
)
|
||||
|
||||
lca_chat = models.BooleanField(
|
||||
|
|
|
@ -67,12 +67,12 @@
|
|||
|
||||
|
||||
{% 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>
|
||||
No data on this form is retained by {% conference_name %}, rather it is
|
||||
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>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
|
||||
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>
|
||||
</div>
|
||||
<div class="col-md-4 pb-4 text-center">
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<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>
|
||||
<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>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<h3>New Proposal</h3>
|
||||
<p>Click one of the following links to create a speaking or miniconf 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>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>
|
||||
<div>
|
||||
{% for kind in proposal_kinds %}
|
||||
<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>
|
||||
{% if not user.speaker_profile %}
|
||||
<p>
|
||||
To create a speaking or miniconf proposal you must first create a speaker
|
||||
profile.
|
||||
To create a session proposal you must first create a speaker profile.
|
||||
</p>
|
||||
{% endif %}
|
||||
<p>
|
||||
Your speaker profile is independent of your attendee profile and the
|
||||
details you provide here will be used during selection and to populate
|
||||
your speaker bio on the conference website.
|
||||
Your speaker profile is independent of your attendee profile.
|
||||
The details you provide here will be used during the session selection process,
|
||||
and to populate your speaker bio on the conference website.
|
||||
</p>
|
||||
<div>
|
||||
{% if not user.speaker_profile %}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="mb-3">{% trans "Speaking and Miniconfs" %}</h2>
|
||||
<h2 class="mb-3">{% trans "Speaking and Sessions" %}</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
{% with timetable|day_has_tracks:timetable.day as has_tracks %}
|
||||
{% if has_tracks %}
|
||||
<tr>
|
||||
<th scope="row" class="time"><em>Miniconf</em></th>
|
||||
<th scope="row" class="time"><em>Track</em></th>
|
||||
{% for room in timetable.rooms %}
|
||||
{% with room|trackname:timetable.day as track_name %}
|
||||
<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
|
||||
|
||||
# Registripe
|
||||
django-countries>=6.1.3
|
||||
django-countries==7.3.2
|
||||
pinax-stripe==4.4.0
|
||||
requests==2.24.0
|
||||
stripe==2.55.0
|
||||
|
|
|
@ -18,12 +18,17 @@
|
|||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-6">
|
||||
<div class="col-lg-6">
|
||||
<p><strong id="note"></strong></p>
|
||||
<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 class="col-6">
|
||||
<div class="col-lg-6">
|
||||
<div id="code_div" class="form-group has-feedback has-error">
|
||||
<label class="control-label" for="bpcode">Boarding Pass Code</label>
|
||||
<input id="bptext" type="text" class="form-control" id="bpcode" placeholder="Code">
|
||||
|
@ -43,6 +48,9 @@
|
|||
|
||||
<script type="text/javascript">
|
||||
let scanner = new Instascan.Scanner({ video: document.getElementById('preview') });
|
||||
let activeCameraId = null;
|
||||
let availableCameras = [];
|
||||
|
||||
scanner.addListener('scan', function (content) {
|
||||
// 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.
|
||||
|
@ -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 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);
|
||||
</script>
|
||||
|
||||
|
|
|
@ -6,13 +6,16 @@
|
|||
{% block body %}
|
||||
{% load registrasion_tags %}
|
||||
{% load lca2018_tags %}
|
||||
{% load waffle_tags %}
|
||||
|
||||
{% items_purchased as purchased %}
|
||||
{% items_pending as pending %}
|
||||
{% items_purchased 1 as ticket %}
|
||||
<!-- {% 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 5 as pdns_count %} -->
|
||||
{% items_purchased 5 as raffle_tickets %}
|
||||
{% ticket_type as ticket_type %}
|
||||
|
||||
<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>
|
||||
<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>
|
||||
<dd class="col-sm-9">{{ penguin_dinner_count }}</dd>
|
||||
|
||||
{% comment "Not needed for EO2023" %}
|
||||
<dt class="col-sm-3">Speaker Dinner Tickets</dt>
|
||||
<dd class="col-sm-9">{{ speakers_dinner_count }}</dd>
|
||||
|
||||
|
@ -54,7 +57,7 @@
|
|||
<dd class="col-sm-9">{{ user.username }}</dd>
|
||||
</dl>
|
||||
|
||||
{% comment "Not needed for EO2023" %}
|
||||
{% flag "checkin_shirts" %}
|
||||
<h4>Shirts ordered</h4>
|
||||
<table class="table card-text">
|
||||
{% for shirt in shirts%}
|
||||
|
@ -64,10 +67,23 @@
|
|||
</tr>
|
||||
{% endfor %}
|
||||
</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>
|
||||
|
||||
{% flag "checkin_venueless" %}
|
||||
<div class="card my-3">
|
||||
<div class="card-header">Venueless</div>
|
||||
<div class="card-body">
|
||||
|
@ -83,6 +99,7 @@
|
|||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
{% endflag %}
|
||||
|
||||
<div class="card my-3">
|
||||
<div class="card-header">Badge Preview</div>
|
||||
|
@ -128,7 +145,7 @@
|
|||
</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-header {% if check_in.schwag_given %}text-white bg-success{% endif %}">Schwag</div>
|
||||
<div class="card-body">
|
||||
|
@ -142,7 +159,7 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endcomment %}
|
||||
{% endflag %}
|
||||
|
||||
<div class="card my-3">
|
||||
<div class="card-header">Log Exception</div>
|
||||
|
@ -155,7 +172,7 @@
|
|||
</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-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">
|
||||
|
@ -176,7 +193,7 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endcomment %}
|
||||
{% endflag %}
|
||||
|
||||
<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