вкладка бесплатных уроков

remotes/origin/feature/free-lessons
gzbender 7 years ago
parent 2f2d3f0113
commit ba49c4350c
  1. 4
      api/v1/serializers/config.py
  2. 23
      apps/config/migrations/0015_auto_20190716_2040.py
  3. 4
      apps/config/models.py
  4. 89
      apps/school/templates/school/free_lessons.html
  5. 3
      apps/school/urls.py
  6. 4
      apps/school/views.py
  7. 8
      apps/user/models.py
  8. 5
      apps/user/views.py
  9. 13
      project/templates/blocks/header.html
  10. 27
      project/templates/blocks/popup_ref_link.html
  11. 14
      web/src/js/modules/popup.js
  12. 16
      web/src/js/pages/free-lessons.js
  13. 1
      web/webpack.config.js

@ -30,6 +30,8 @@ class ConfigSerializer(serializers.ModelSerializer):
NUMBER_OF_STUDENTS = serializers.IntegerField()
NUMBER_OF_COUNTRIES = serializers.IntegerField()
NUMBER_OF_CITIES = serializers.IntegerField()
FREE_LESSONS_VIDEO_URL = serializers.CharField(required=False)
FREE_LESSONS_VIDEO_PREVIEW_IMG = serializers.SerializerMethodField()
class Meta:
model = Config
@ -56,6 +58,8 @@ class ConfigSerializer(serializers.ModelSerializer):
'NUMBER_OF_STUDENTS',
'NUMBER_OF_COUNTRIES',
'NUMBER_OF_CITIES',
'FREE_LESSONS_VIDEO_URL',
'FREE_LESSONS_VIDEO_PREVIEW_IMG',
)
def get_SCHOOL_LOGO_IMAGE(self, config):

@ -0,0 +1,23 @@
# Generated by Django 2.0.7 on 2019-07-16 20:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('config', '0014_auto_20190605_1338'),
]
operations = [
migrations.AddField(
model_name='config',
name='FREE_LESSONS_VIDEO_PREVIEW_IMG',
field=models.ImageField(blank=True, null=True, upload_to=''),
),
migrations.AddField(
model_name='config',
name='FREE_LESSONS_VIDEO_URL',
field=models.URLField(blank=True, default='', max_length=126),
),
]

@ -26,6 +26,8 @@ class Config(models.Model):
NUMBER_OF_STUDENTS = models.IntegerField(default=17000)
NUMBER_OF_COUNTRIES = models.IntegerField(default=81)
NUMBER_OF_CITIES = models.IntegerField(default=107)
FREE_LESSONS_VIDEO_URL = models.URLField(max_length=126, default='', blank=True)
FREE_LESSONS_VIDEO_PREVIEW_IMG = models.ImageField(null=True, blank=True)
def save(self, *args, **kwargs):
self.pk = 1
@ -63,5 +65,7 @@ class Config(models.Model):
'NUMBER_OF_STUDENTS': '',
'NUMBER_OF_COUNTRIES': '',
'NUMBER_OF_CITIES': '',
'FREE_LESSONS_VIDEO_URL': '',
'FREE_LESSONS_VIDEO_PREVIEW_IMG': '',
}
return obj

@ -0,0 +1,89 @@
{% extends "templates/lilcity/index.html" %} {% load static %}
{% block title %}Месяц открытых дверей в LilCity{% endblock title%}
{% block ogimage %}http://{{request.META.HTTP_HOST}}{% static 'img/og_camp.jpg' %}{% endblock %}
{% block ogsite-name %}Первая образовательная онлайн-платформа креативного мышления для детей{% endblock ogsite-name %}
{% block content %}
<div class="main main_default" style="background-image: url({% static 'img/bg-2.jpg' %});">
<div class="main__center center">
<div class="main__title">
<span class="main__bold">Месяц открытых дверей!</span>
</div>
</div>
</div>
<div class="section section_video">
<div class="section__center center center_sm" style="text-align: center;">
<img class="main-video-preview js-video-modal" data-video-url="{{ config.FREE_LESSONS_VIDEO_URL|safe }}" data-trial-lesson="1"
src="{% if config.FREE_LESSONS_VIDEO_PREVIEW_IMG %}{{ config.FREE_LESSONS_VIDEO_PREVIEW_IMG.url }}{% endif %}"/>
<div style="margin-top: 15px;">Приглашай друзей и получай лилики.
<a href="#" class="btn btn_stroke-black"
{% if not user.is_authenticated %}
data-popup=".js-popup-auth"
data-auth-next-url="{% url 'user-bonuses' %}"
{% else %}
data-popup=".js-popup-ref-link"
{% endif %}
>Пригласить</a></div>
</div>
</div>
<div class="section section_school">
<div class="section__center center">
<div class="title title_center">Бесплатно в кругосветку с Lil School!</div>
<div class="text text_lg text_left">
<p>Друзья, в августе мы приглашаем вас в путешествие!<br>
В тур под названием «Кругосветка с Lil School» по программе «всё включено».</p>
<p>Творчество, креатив и потрясающие идеи!<br>
В августе 4 раза в неделю наши преподаватели БЕСПЛАТНО приглашают вас посетить одну из стран нашего многообразного Мира!</p>
<p>Когда?<br>
Со 2 по 19 августа.</p>
<p>Где?<br>
Здесь на этой странице будут уроки.</p>
<p>Стоимость?<br>
БЕСПЛАТНО!</p>
<p>Это всё?<br>
Конечно, НЕТ!<br>
Мы и наши партнёры приготовили для вас призы! После каждого занятия наши друзья - спонсоры будут выбирать одну работу урока и дарить автору подарок!<br>
А мы? А мы в конце месяца подарим... та - та - та - там! iPad!</p>
<p>Что делать?<br>
Регистрируйтесь на платформе, если не делали этого ранее. Готовьте материалы, хорошее настроение, устройство с доступом в Интернет и занимайтесь в своё удовольствие.
Выкладывайте работы у себя в аккаунте, в конце августа мы разыграем iPad!</p>
<p>Ну что, кто с нами в кругосветку?</p>
</div>
</div>
</div>
{% endblock %}
{% block foot %}
{% include "templates/blocks/popup_ref_link.html" %}
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(document).on('popup-opened', (e, popup) => {
$('#referrer-url').select();
});
$('#referrer-url').click(function(){
$(this).select();
});
const clipboard = new ClipboardJS('#copy-referrer-url-btn');
clipboard.on('success', e => {
console.log(123);
//showNotification('success', 'Ссылка скопирована');
});
clipboard.on('error', function(e) {
console.error('Action:', e.action);
console.error('Trigger:', e.trigger);
});
});
</script>
<!--<script type="text/javascript" src="{% static 'freeLessons.js' %}"></script>-->
{% endblock foot %}

@ -4,7 +4,7 @@ from .views import (
LiveLessonsView, LiveLessonEditView,
LiveLessonsDetailView, SchoolView,
SchoolSchedulesPrintView, DrawingCampView,
DrawingCampLessonsView)
DrawingCampLessonsView, FreeLessonsView)
urlpatterns = [
path('', SchoolView.as_view(), name='school'),
@ -18,4 +18,5 @@ urlpatterns = [
path('camp/lessons/<int:pk>/edit', LiveLessonEditView.as_view(), name='camp-lessons-edit', kwargs={'is_camp': True}),
re_path(r'^camp/(?P<lesson_date>\d+\-\d+\-\d+)', LiveLessonsDetailView.as_view(), name='camp-lesson-detail',
kwargs={'is_camp': True}),
path('free/', FreeLessonsView.as_view(), name='free-lessons'),
]

@ -375,3 +375,7 @@ class DrawingCampView(TemplateView):
'prolong_date_start': subscription_ends + timedelta(days=1) if subscription_ends else None,
})
return context
class FreeLessonsView(TemplateView):
template_name = 'school/free_lessons.html'

@ -1,10 +1,12 @@
from json import dumps
import short_url
from django.db.models import Q
from django.utils.functional import cached_property
from rest_framework.authtoken.models import Token
from phonenumber_field.modelfields import PhoneNumberField
from django.conf import settings
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
@ -110,6 +112,12 @@ class User(AbstractUser):
def url(self):
return reverse('user', args=[self.slug or self.id])
@property
def ref_url(self):
return 'https://%s%s?referrer=%s' % (
settings.MAIN_HOST, reverse('index'), short_url.encode_url(self.id)
) if self.id else ''
def serialized(self):
user_data = serializers.user.UserSerializer(instance=self).data
user_data = dumps(user_data, ensure_ascii=False)

@ -4,7 +4,6 @@ from uuid import uuid4
from os.path import splitext
from datetime import timedelta
from paymentwall import Pingback
import short_url
from django.conf import settings
from django.contrib.auth import login
@ -376,9 +375,7 @@ class BonusHistoryView(TemplateView):
context['bonuses'] = request.user.bonuses.filter(
Q(payment__isnull=False, payment__status__in=Payment.PW_PAID_STATUSES) | Q(is_service=True),
)
context['referrer_url'] = 'https://%s%s?referrer=%s' % (
settings.MAIN_HOST, reverse('index'), short_url.encode_url(request.user.id)
)
context['referrer_url'] = request.user.ref_url
context['share_text'] = '%s приглашает вас и ваших детей в первую онлайн школу креативного мышления Lil School. ' \
'Занимайтесь с ребёнком творчеством, не выходя из дома. ' \
'Перейдите по ссылке и получите скидку %d%% на первую покупку' \

@ -33,11 +33,16 @@
</a>
</div> -->
<!--<div class="header__group">-->
<!--<a class="header__section {% active_link 'school:drawing-camp' %}" href="{% url 'school:drawing-camp' %}">-->
<!--РИСОВАЛЬНЫЙ ЛАГЕРЬ {% if online or livelesson.is_online %}-->
<!--<div class="header__dot"></div>-->
<!--{% endif %}-->
<!--</a>-->
<!--</div>-->
<div class="header__group">
<a class="header__section {% active_link 'school:drawing-camp' %}" href="{% url 'school:drawing-camp' %}">
РИСОВАЛЬНЫЙ ЛАГЕРЬ {% if online or livelesson.is_online %}
<div class="header__dot"></div>
{% endif %}
<a class="header__section {% active_link 'school:free-lessons' %}" href="{% url 'school:free-lessons' %}">
БЕСПЛАТНЫЕ УРОКИ
</a>
</div>
<div class="header__group">

@ -0,0 +1,27 @@
{% load static %}
<div class="popup js-popup-ref-link">
<div class="popup__wrap popup__wrap_sm js-popup-wrap">
<button class="popup__close js-popup-close">
<svg class="icon icon-close">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-close"></use>
</svg>
</button>
<div class="popup__body">
<div class="referrer-url" style="padding: 30px; flex-direction: column;">
<div class="referrer-url__text-column">
<div class="referrer-url__title">Приглашайте друзей в Lil School</div>
<div class="referrer-url__text">
Получайте {{ config.REFERRER_BONUS }}% от суммы их первой покупки.
<br>
Просто отправьте эту ссылку, по которой ваши друзья могут присоединиться к нам:
</div>
</div>
<div class="referrer-url__url-column" style="margin-top: 20px;">
<input id="referrer-url" class="referrer-url__input field__input" type="text" value="{{ request.user.ref_url }}" readonly="readonly">
<!--<button id="copy-referrer-url-btn" class="referrer-url__btn go__btn btn" data-clipboard-target="#referrer-url">Копировать ссылку</button>-->
</div>
</div>
</div>
</div>
</div>

@ -281,12 +281,18 @@ $(document).ready(function () {
if( data === '.js-popup-auth') {
showDef.then(() => {
const login = auth.find('.js-auth-login');
const pass = auth.find('.js-auth-pass');
const login = popup.find('.js-auth-login');
const pass = popup.find('.js-auth-pass');
pass.css('display', 'none');
login.css('display', 'block');
});
}
if(data === '.js-popup-ref-link') {
showDef.then(() => {
$('#referrer-url').select();
});
}
});
$('.js-popup-close').on('click', function(e){
@ -378,7 +384,7 @@ $(document).ready(function () {
setTimeout(function(){
popup.addClass('visible');
resolve();
$(document).trigger('popup-opened', popup);
$(document).trigger('popup-opened', [popup]);
}, 100);
});
}
@ -395,7 +401,7 @@ $(document).ready(function () {
setTimeout(function(){
popup.removeClass('open');
resolve();
$(document).trigger('popup-closed', popup);
$(document).trigger('popup-closed', [popup]);
}, 300);
});
}

@ -0,0 +1,16 @@
import $ from 'jquery';
import ClipboardJS from 'clipboard';
import {showNotification} from '../modules/notification';
$(document).ready(function () {
$(document).on('popup-opened', (e, popup) => {
$('#referrer-url').select();
});
const clipboard = new ClipboardJS('#copy-referrer-url-btn');
clipboard.on('success', e => {
showNotification('success', 'Ссылка скопирована');
});
$('#referrer-url').click(function(){
$(this).select();
});
});

@ -15,6 +15,7 @@ module.exports = {
contestEdit: "./src/js/pages/contest-edit.js",
profile: "./src/js/pages/profile.js",
liveLesson: "./src/js/pages/live-lesson.js",
freeLessons: "./src/js/pages/free-lessons.js",
userGalleryEdit: "./src/js/pages/user-gallery-edit.js",
mixpanel: "./src/js/third_party/mixpanel-2-latest.js",
sprite: glob('./src/icons/*.svg'),

Loading…
Cancel
Save