diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a2b0562..3d4ff10c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,66 @@ stages: - - deploy + - deploy + - db + - stop + +variables: + REVIEW_DOMAIN: back-review.lil.school deploy_prod: stage: deploy script: - rsync -a --stats --delete --exclude="docker/data/" --exclude="docker/.env" ./ /work/www/lil.school/ - cd /work/www/lil.school/docker/ - - docker-compose -f docker-compose-prod.yml up --build -d + - docker-compose -f docker-compose-prod.yml -p back up --build -d environment: - name: prod/site + name: prod url: https://lil.school only: - master tags: - prod + +deploy_review: + stage: deploy + script: + - export REVIEW_HOST=$CI_COMMIT_REF_SLUG-$REVIEW_DOMAIN + - cd docker + - cp .env.review .env + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME up --build -d + environment: + name: review/$CI_COMMIT_REF_SLUG + url: https://$CI_COMMIT_REF_SLUG-$REVIEW_DOMAIN + on_stop: stop-review + tags: + - review + only: + - branches + +stop-review: + stage: stop + environment: + name: review/$CI_COMMIT_REF_SLUG + action: stop + script: + - export REVIEW_HOST=$CI_COMMIT_REF_SLUG-$REVIEW_DOMAIN + - cd docker + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME down + - rm -rf /work/data/back_${CI_COMMIT_REF_NAME}/ + when: manual + only: + - branches + tags: + - review + +prod-db: + stage: db + script: + - export REVIEW_HOST=$CI_COMMIT_REF_SLUG-$REVIEW_DOMAIN + - cd docker + - docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME restart db + - echo 'DROP DATABASE IF EXISTS lilcity; CREATE DATABASE lilcity' | docker-compose -f docker-compose-review.yml -p back$CI_COMMIT_REF_NAME exec -T -u postgres postgres psql postgres + when: manual + only: + - branches + tags: + - review diff --git a/apps/course/templates/course/content/imagetext.html b/apps/course/templates/course/content/imagetext.html index 62ec511b..6385391e 100644 --- a/apps/course/templates/course/content/imagetext.html +++ b/apps/course/templates/course/content/imagetext.html @@ -4,7 +4,11 @@
-
+
+
+ +
+
{{ content.txt | safe }}
diff --git a/apps/course/templates/course/course.html b/apps/course/templates/course/course.html index 630aeb61..f5ba90af 100644 --- a/apps/course/templates/course/course.html +++ b/apps/course/templates/course/course.html @@ -9,7 +9,7 @@ {% block ogtitle %}{{ course.title }} - {{ block.super }}{% endblock ogtitle %} {% block ogurl %}{{ request.build_absolute_uri }}{% endblock ogurl %} {% if course.cover and course.cover.image %} -{% block ogimage %}http://{{request.META.HTTP_HOST}}{{ course.cover.image.url }}{% endblock ogimage %} +{% block ogimage %}http://{{request.META.HTTP_HOST}}{% if course.cover %}{{ course.cover.image.url }}{% else %}{% static 'img/og_courses.jpg' %}{% endif %}{% endblock ogimage %} {% endif %} {% block ogdescription %}{{ course.short_description }}{% endblock ogdescription %} @@ -141,37 +141,45 @@
Описание курса {% if request.user.is_authenticated %} - {% if course.author == request.user and request.user.role >= request.user.AUTHOR_ROLE %} - УРОКИ - - {% elif request.user.role == request.user.ADMIN_ROLE %} - УРОКИ - + {% if course.author == request.user and request.user.role >= request.user.AUTHOR_ROLE %} + УРОКИ + + {% elif request.user.role == request.user.ADMIN_ROLE %} + УРОКИ + + {% else %} + УРОКИ + {% if not paid %} + + + + {% endif %} + + {% endif %} {% else %} УРОКИ - {% if not paid %} + data-popup=".js-popup-auth">УРОКИ - {% endif %} {% endif %} - {% endif %}
{% if course.cover %} diff --git a/apps/course/templates/course/course_only_lessons.html b/apps/course/templates/course/course_only_lessons.html index 3ea64dba..a919e08f 100644 --- a/apps/course/templates/course/course_only_lessons.html +++ b/apps/course/templates/course/course_only_lessons.html @@ -9,7 +9,7 @@ {% block ogtitle %}{{ course.title }} - {{ block.super }}{% endblock ogtitle %} {% block ogurl %}{{ request.build_absolute_uri }}{% endblock ogurl %} {% if course.cover %} -{% block ogimage %}{{ request.build_absolute_uri }}{{ course.cover.url }}{% endblock ogimage %} +{% block ogimage %}http://{{request.META.HTTP_HOST}}{% if course.cover %}{{ course.cover.image.url }}{% else %}{% static 'img/og_courses.jpg' %}{% endif %}{% endblock ogimage %} {% endif %} {% block ogdescription %}{{ course.short_description }}{% endblock ogdescription %} @@ -184,10 +184,15 @@
{% if lesson.cover %}
- +
+ +
{% endif %} -
{{ lesson.short_description | safe }}
+
{{ lesson.short_description | truncatechars_html:800 | safe }}
+
+
+ Перейти к уроку
diff --git a/apps/course/templates/course/courses.html b/apps/course/templates/course/courses.html index 44ee9436..a3277174 100644 --- a/apps/course/templates/course/courses.html +++ b/apps/course/templates/course/courses.html @@ -2,6 +2,7 @@ {% load static %} {% load category_items from lilcity_category %} +{% block ogimage %}http://{{request.META.HTTP_HOST}}{% static 'img/og_courses.jpg' %}{% endblock ogimage %} {% block content %}
diff --git a/apps/course/templates/course/lesson.html b/apps/course/templates/course/lesson.html index 6c9511ae..662a4dd5 100644 --- a/apps/course/templates/course/lesson.html +++ b/apps/course/templates/course/lesson.html @@ -2,11 +2,12 @@ {% load static %} {% block title %}{{ lesson.title }} - {{ block.super }}{% endblock title %} +{% block ogimage %}http://{{request.META.HTTP_HOST}}{% if lesson.course.cover %}{{ lesson.course.cover.image.url }}{% else %}{% static 'img/og_courses.jpg' %}{% endif %}{% endblock ogimage %} {% block content %}
{{ lesson.title }}
@@ -32,7 +33,7 @@ {% if lesson.cover %} {% else %} - + {% endif %} diff --git a/apps/course/views.py b/apps/course/views.py index 90957d68..60b7e308 100644 --- a/apps/course/views.py +++ b/apps/course/views.py @@ -299,7 +299,9 @@ class LessonView(DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['next'] = self.request.GET.get('next', None) - context['next_lesson'] = self.request.GET.get('next_lesson', None) + lessons = list(self.object.course.lessons.values_list('id', flat=True)) + index = lessons.index(self.object.id) + context['next_lesson'] = lessons[index + 1] if index < len(lessons) - 1 else None return context diff --git a/apps/payment/templates/payment/payment_success.html b/apps/payment/templates/payment/payment_success.html index 670678fa..d7821bf9 100644 --- a/apps/payment/templates/payment/payment_success.html +++ b/apps/payment/templates/payment/payment_success.html @@ -5,7 +5,7 @@ {% if school %}
Вы успешно приобрели доступ к урокам онлайн-школы!
{% else %}
Вы успешно приобрели курс!
diff --git a/apps/school/migrations/0017_auto_20180628_2000.py b/apps/school/migrations/0017_auto_20180628_2000.py new file mode 100644 index 00000000..d641cd5e --- /dev/null +++ b/apps/school/migrations/0017_auto_20180628_2000.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.5 on 2018-06-28 20:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('school', '0016_auto_20180429_0818'), + ] + + operations = [ + migrations.AlterField( + model_name='livelesson', + name='short_description', + field=models.TextField(blank=True, default='', verbose_name='Краткое описание урока'), + ), + ] diff --git a/apps/school/migrations/0018_auto_20180629_1501.py b/apps/school/migrations/0018_auto_20180629_1501.py new file mode 100644 index 00000000..0126d518 --- /dev/null +++ b/apps/school/migrations/0018_auto_20180629_1501.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.6 on 2018-06-29 15:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('school', '0017_auto_20180628_2000'), + ] + + operations = [ + migrations.AlterField( + model_name='livelesson', + name='title', + field=models.CharField(blank=True, default='', max_length=100, verbose_name='Название урока'), + ), + ] diff --git a/apps/school/models.py b/apps/school/models.py index 35788640..d6d58df7 100644 --- a/apps/school/models.py +++ b/apps/school/models.py @@ -46,7 +46,7 @@ class SchoolSchedule(models.Model): return dict(self.WEEKDAY_CHOICES).get(self.weekday, '') def is_online(self): - end_at = datetime.combine(now().today(), self.start_at) + timedelta(hours=2) + end_at = datetime.combine(now().today(), self.start_at) + timedelta(hours=1) return self.start_at <= now().time() and end_at.time() >= now().time() and self.weekday == now().isoweekday() def current_live_lesson(self): @@ -98,8 +98,8 @@ class SchoolScheduleImage(models.Model): class LiveLesson(BaseModel, DeactivatedMixin): - title = models.CharField('Название урока', max_length=100) - short_description = models.TextField('Краткое описание урока') + title = models.CharField('Название урока', max_length=100, default='', blank=True) + short_description = models.TextField('Краткое описание урока', default='', blank=True) stream = models.URLField('Ссылка на VIMEO', default='', blank=True) date = models.DateField(default=now, unique=True) cover = models.ForeignKey( @@ -141,5 +141,5 @@ class LiveLesson(BaseModel, DeactivatedMixin): return False else: start_at = school_schedule.start_at - end_at = datetime.combine(now().today(), start_at) + timedelta(hours=2) + end_at = datetime.combine(now().today(), start_at) + timedelta(hours=1) return start_at <= now().time() and end_at.time() >= now().time() diff --git a/apps/school/templates/blocks/_schedule_purchased_item.html b/apps/school/templates/blocks/_schedule_purchased_item.html index 8017a687..b9d1db1f 100644 --- a/apps/school/templates/blocks/_schedule_purchased_item.html +++ b/apps/school/templates/blocks/_schedule_purchased_item.html @@ -6,17 +6,17 @@ {{ school_schedule }}
{% if live_lesson %} - +
{{ live_lesson.date }}
{% endif %}
{{ school_schedule.start_at }} (МСК)
{% if school_schedule.weekday in school_schedules_purchased %} - {% if live_lesson and school_schedule.is_online or live_lesson and is_previous and live_lesson in live_lessons %} - {% include './open_lesson.html' %} - {% endif %} + {% if live_lesson and live_lesson.title %} + {% include './open_lesson.html' %} + {% endif %} {% else %} - {% include './day_pay_btn.html' %} + {% include './day_pay_btn.html' %} {% endif %}
{% comment %} @@ -36,12 +36,12 @@
-
{{ school_schedule.title }}{% if live_lesson %}, +
{{ school_schedule.title }}{% if live_lesson and live_lesson.title %}, {{ live_lesson.title }} {% endif %}
- {% if live_lesson %} + {% if live_lesson and live_lesson.short_description %} {{ live_lesson.short_description }} {% else %} {{ school_schedule.description }} diff --git a/apps/school/templates/blocks/schedule_purchased.html b/apps/school/templates/blocks/schedule_purchased.html index 03e98e92..7f8f035d 100644 --- a/apps/school/templates/blocks/schedule_purchased.html +++ b/apps/school/templates/blocks/schedule_purchased.html @@ -9,7 +9,6 @@
Подписка истекает {{ subscription_ends }}
- {% include './prolong_btn.html' %} {% else %}
Подписка истекла diff --git a/apps/school/templates/school/livelesson_detail.html b/apps/school/templates/school/livelesson_detail.html index 92ca42e1..1bcb3227 100644 --- a/apps/school/templates/school/livelesson_detail.html +++ b/apps/school/templates/school/livelesson_detail.html @@ -10,7 +10,7 @@
{{ livelesson.short_description }}
{% if livelesson.stream_index %} - Если видео не загрузилось обновите страницу diff --git a/apps/school/templates/school/summer_school.html b/apps/school/templates/school/summer_school.html index 133f8d8b..00da0bf8 100644 --- a/apps/school/templates/school/summer_school.html +++ b/apps/school/templates/school/summer_school.html @@ -1,5 +1,6 @@ {% extends "templates/lilcity/index.html" %} {% load static %} {% block title %}Онлайн-школа LilCity{% endblock title%} +{% block ogimage %}http://{{request.META.HTTP_HOST}}{% static 'img/og_summer_school.jpg' %}{% endblock %} {% block content %} {% if not is_purchased %} {% include "../summer/promo.html" %} diff --git a/apps/school/templates/summer/_schedule_purchased_item.html b/apps/school/templates/summer/_schedule_purchased_item.html index 8017a687..b9d1db1f 100644 --- a/apps/school/templates/summer/_schedule_purchased_item.html +++ b/apps/school/templates/summer/_schedule_purchased_item.html @@ -6,17 +6,17 @@ {{ school_schedule }}
{% if live_lesson %} - +
{{ live_lesson.date }}
{% endif %}
{{ school_schedule.start_at }} (МСК)
{% if school_schedule.weekday in school_schedules_purchased %} - {% if live_lesson and school_schedule.is_online or live_lesson and is_previous and live_lesson in live_lessons %} - {% include './open_lesson.html' %} - {% endif %} + {% if live_lesson and live_lesson.title %} + {% include './open_lesson.html' %} + {% endif %} {% else %} - {% include './day_pay_btn.html' %} + {% include './day_pay_btn.html' %} {% endif %}
{% comment %} @@ -36,12 +36,12 @@
-
{{ school_schedule.title }}{% if live_lesson %}, +
{{ school_schedule.title }}{% if live_lesson and live_lesson.title %}, {{ live_lesson.title }} {% endif %}
- {% if live_lesson %} + {% if live_lesson and live_lesson.short_description %} {{ live_lesson.short_description }} {% else %} {{ school_schedule.description }} diff --git a/apps/school/templates/summer/schedule_purchased.html b/apps/school/templates/summer/schedule_purchased.html index 467be723..63e963fd 100644 --- a/apps/school/templates/summer/schedule_purchased.html +++ b/apps/school/templates/summer/schedule_purchased.html @@ -9,7 +9,6 @@
Подписка истекает {{ subscription_ends }}
- {% include './prolong_btn.html' %} {% else %}
Подписка истекла diff --git a/apps/school/views.py b/apps/school/views.py index ae9b64f0..7f4ab734 100644 --- a/apps/school/views.py +++ b/apps/school/views.py @@ -61,26 +61,26 @@ class LiveLessonsDetailView(DetailView): def get(self, request, pk=None): response = super().get(request, pk=pk) - try: - school_payment = SchoolPayment.objects.get( - user=request.user, - add_days=False, - date_start__lte=now(), - date_end__gte=now(), - status__in=[ - Pingback.PINGBACK_TYPE_REGULAR, - Pingback.PINGBACK_TYPE_GOODWILL, - Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, - ], - ) - except SchoolPayment.DoesNotExist: - school_payment = None - if request.user.role not in [User.ADMIN_ROLE, User.TEACHER_ROLE] and not ( - request.user.role == User.USER_ROLE and - school_payment and - school_payment.is_deliverable() - ): - raise Http404 + #try: + # school_payment = SchoolPayment.objects.get( + # user=request.user, + # add_days=False, + # date_start__lte=now(), + # date_end__gte=now(), + # status__in=[ + # Pingback.PINGBACK_TYPE_REGULAR, + # Pingback.PINGBACK_TYPE_GOODWILL, + # Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, + # ], + # ) + #except SchoolPayment.DoesNotExist: + # school_payment = None + #if request.user.role not in [User.ADMIN_ROLE, User.TEACHER_ROLE] and not ( + # request.user.role == User.USER_ROLE and + # school_payment and + # school_payment.is_deliverable() + #): + # raise Http404 return response @@ -122,7 +122,7 @@ class SchoolView(TemplateView): end_at = datetime.combine(now_time.today(), school_schedule.start_at) online = ( school_schedule.start_at <= now_time.time() and - (end_at + timedelta(hours=2)).time() >= now_time.time() and + (end_at + timedelta(hours=1)).time() >= now_time.time() and school_schedule.current_live_lesson() ) if self.request.user.is_authenticated: @@ -183,7 +183,7 @@ class SummerSchoolView(TemplateView): end_at = datetime.combine(now_time.today(), school_schedule.start_at) online = ( school_schedule.start_at <= now_time.time() and - (end_at + timedelta(hours=2)).time() >= now_time.time() and + (end_at + timedelta(hours=1)).time() >= now_time.time() and school_schedule.current_live_lesson() ) if self.request.user.is_authenticated: diff --git a/apps/user/templates/user/profile.html b/apps/user/templates/user/profile.html index cea0b4ee..caddc204 100644 --- a/apps/user/templates/user/profile.html +++ b/apps/user/templates/user/profile.html @@ -67,18 +67,18 @@
- + {% if not simple_user %} - {% endif %}
-
+
{% if is_purchased_future %}
@@ -127,7 +127,7 @@
{% if not simple_user %} -
+
{% if published.exists %} diff --git a/docker/.env.review b/docker/.env.review new file mode 100644 index 00000000..bc750b18 --- /dev/null +++ b/docker/.env.review @@ -0,0 +1,22 @@ +# DEBUG=True +ALLOWED_HOSTS=* +PORT=8000 +CORS_ORIGIN_WHITELIST=lilcity.9ev.ru:8080 +LANG=ru_RU.UTF-8 +POSTGRES_DB=lilcity +POSTGRES_USER=lilcity +POSTGRES_PASSWORD=GPVs/E/{5&qe +DJANGO_SETTINGS_MODULE=project.settings +DATABASE_SERVICE_HOST=db +SECRET_KEY=jelm*91lj(_-o20+6^a+bgv!4s6e_efry^#+f#=1ak&s1xr-2j +MAILGUN_API_KEY=key-ec6af2d43d031d59bff6b1c8fb9390cb +MAILGUN_SENDER_DOMAIN=mail.9ev.ru +DEFAULT_FROM_EMAIL=postmaster@mail.9ev.ru +TWILIO_ACCOUNT=ACdf4a96b776cc764bc3ec0f0e136ba550 +TWILIO_TOKEN=559a6b1fce121759c9af2dcbb3f755ea +TWILIO_FROM_PHONE=+37128914409 +PAYMENTWALL_APP_KEY=d6f02b90cf6b16220932f4037578aff7 +PAYMENTWALL_SECRET_KEY=4ea515bf94e34cf28646c2e12a7b8707 +MIXPANEL_TOKEN=79bd6bfd98667ed977737e6810b8abcd +RAVEN_DSN=https://b545dac0ae0545a1bcfc443326fe5850:6f9c900cef7f4c11b63561030b37d15c@sentry.io/1197254 +ROISTAT_COUNTER_ID=09db30c750035ae3d70a41d5f10d59ec diff --git a/docker/Dockerfile b/docker/Dockerfile index 46722a2f..acaa74c8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -18,4 +18,5 @@ ADD . /app/ COPY --from=front /web/build/ /app/web/build/ RUN python manage.py collectstatic --no-input RUN rm -rf /etc/nginx/ && cp -r docker/conf/nginx /etc/ && cp -r docker/conf/supervisor/* /etc/supervisor/conf.d/ && chown -R www-data:www-data /app/ +EXPOSE 80 ENTRYPOINT ["/app/docker/entrypoint_app.sh"] diff --git a/docker/docker-compose-prod.yml b/docker/docker-compose-prod.yml index 440f2cbf..c3b97c9e 100644 --- a/docker/docker-compose-prod.yml +++ b/docker/docker-compose-prod.yml @@ -10,6 +10,11 @@ services: - .env volumes: - ./data/postgres:/var/lib/postgresql/data + logging: &logging + driver: "json-file" + options: + max-size: "1m" + max-file: "1" redis: image: redis:4.0.9-alpine @@ -18,6 +23,7 @@ services: - "127.0.0.1:6379:6379" volumes: - ./data/redis:/data + logging: *logging app: build: @@ -36,3 +42,4 @@ services: links: - db - redis + logging: *logging diff --git a/docker/docker-compose-review.yml b/docker/docker-compose-review.yml new file mode 100644 index 00000000..9413f978 --- /dev/null +++ b/docker/docker-compose-review.yml @@ -0,0 +1,58 @@ +version: '3' + +services: + db: + image: postgres:10.3-alpine + restart: always + env_file: + - .env + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/postgres:/var/lib/postgresql/data + logging: &logging + driver: "json-file" + options: + max-size: "1m" + max-file: "1" + networks: + - internal + - review + labels: + - traefik.enable=false + + redis: + image: redis:4.0.9-alpine + restart: always + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/redis:/data + logging: *logging + networks: + - internal + - review + labels: + - traefik.enable=false + + app: + build: + context: ../ + dockerfile: docker/Dockerfile + restart: always + env_file: + - .env + volumes: + - /work/data/back_${CI_COMMIT_REF_NAME}/media:/app/media + depends_on: + - db + - redis + logging: *logging + networks: + - internal + - review + labels: + - traefik.frontend.rule=Host:${REVIEW_HOST} + - traefik.docker.network=review + +networks: + internal: + review: + external: + name: review diff --git a/docker/entrypoint_app.sh b/docker/entrypoint_app.sh index a61879d2..a346f89c 100755 --- a/docker/entrypoint_app.sh +++ b/docker/entrypoint_app.sh @@ -1,5 +1,6 @@ #!/bin/sh cd /app +chown www-data:www-data /app/media python manage.py migrate #python manage.py loaddata /app/apps/*/fixtures/*.json python2.7 /usr/bin/supervisord -n diff --git a/project/settings.py b/project/settings.py index fe902536..9323745c 100644 --- a/project/settings.py +++ b/project/settings.py @@ -55,6 +55,7 @@ INSTALLED_APPS = [ 'corsheaders', 'sorl.thumbnail', 'raven.contrib.django.raven_compat', + 'django_user_agents', ] + [ 'apps.auth.apps', 'apps.user', @@ -68,6 +69,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', + 'django_user_agents.middleware.UserAgentMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', diff --git a/project/templates/blocks/about.html b/project/templates/blocks/about.html index 4caf08de..8deec906 100644 --- a/project/templates/blocks/about.html +++ b/project/templates/blocks/about.html @@ -44,21 +44,19 @@
diff --git a/project/templates/blocks/user_menu.html b/project/templates/blocks/user_menu.html index 54ebf6b6..13f4fbdf 100644 --- a/project/templates/blocks/user_menu.html +++ b/project/templates/blocks/user_menu.html @@ -1,7 +1,7 @@ {% load static %} {% load thumbnail %} {% if request.user.is_authenticated %}
-
ДАТА
-
+
-->
ДОСТУП
@@ -656,11 +656,11 @@ this.course = api.convertCourseJson(response.data); this.course.live = this.live; - if (this.live && this.course.date) { + /* if (this.live && this.course.date) { this.course.date = _.find(this.scheduleOptions, (item) => { return item.value == this.course.date; }) - } + } */ this.$nextTick(() => { this.courseLoading = false; @@ -841,11 +841,11 @@ this.course.id = courseData.id; } - if(this.live && courseData.date) { + /*if(this.live && courseData.date) { this.course.date = _.find(this.scheduleOptions, function(item){ return item.value == courseData.date; }); - } + }*/ this.$nextTick(() => { this.courseSyncHook = false; }); diff --git a/web/src/components/LessonRedactor.vue b/web/src/components/LessonRedactor.vue index 82faaadb..a0a245e2 100644 --- a/web/src/components/LessonRedactor.vue +++ b/web/src/components/LessonRedactor.vue @@ -14,16 +14,22 @@
{{ title }}
-
-
- -
-
-
-
- +
+ +
+
+
+ +
+
+
+
+ +
+
@@ -81,6 +87,7 @@ import BlockImages from './blocks/BlockImages' import BlockImageText from './blocks/BlockImageText' import BlockVideo from './blocks/BlockVideo' + import LilImage from "./blocks/Image" import {api} from "../js/modules/api"; import Draggable from 'vuedraggable'; import _ from 'lodash' @@ -105,7 +112,13 @@ if (blockToRemove.data.id) { api.removeContentBlock(blockToRemove, this.accessToken); } - } + }, + onUpdateCoverUrl(newValue) { + this.lesson.coverImage = newValue; + }, + onUpdateCoverId(newValue) { + this.lesson.coverImageId = newValue; + }, }, computed: { title() { @@ -120,10 +133,11 @@ 'block-images': BlockImages, 'block-video': BlockVideo, 'vue-draggable': Draggable, + 'lil-image': LilImage, } } \ No newline at end of file + diff --git a/web/src/img/og_blog.jpg b/web/src/img/og_blog.jpg new file mode 100644 index 00000000..cabead92 Binary files /dev/null and b/web/src/img/og_blog.jpg differ diff --git a/web/src/img/og_courses.jpg b/web/src/img/og_courses.jpg new file mode 100644 index 00000000..918718fe Binary files /dev/null and b/web/src/img/og_courses.jpg differ diff --git a/web/src/img/og_main.jpg b/web/src/img/og_main.jpg new file mode 100644 index 00000000..d9c04f59 Binary files /dev/null and b/web/src/img/og_main.jpg differ diff --git a/web/src/img/og_summer_school.jpg b/web/src/img/og_summer_school.jpg new file mode 100644 index 00000000..2adc8a7a Binary files /dev/null and b/web/src/img/og_summer_school.jpg differ diff --git a/web/src/js/modules/api.js b/web/src/js/modules/api.js index 59c98939..36dc5f99 100644 --- a/web/src/js/modules/api.js +++ b/web/src/js/modules/api.js @@ -204,6 +204,7 @@ export const api = { const isAdding = (!lessonObject.hasOwnProperty('id') || !lessonObject.hasOwnProperty('id')); const lessonJson = { + cover: lessonObject.coverImageId ? lessonObject.coverImageId : null, title: lessonObject.title, short_description: lessonObject.short_description, course: lessonObject.course_id, @@ -284,6 +285,8 @@ export const api = { id: lessonJSON.id, title: lessonJSON.title, short_description: lessonJSON.short_description, + coverImageId: lessonJSON.cover && lessonJSON.cover.id ? lessonJSON.cover.id : null, + coverImage: lessonJSON.cover && lessonJSON.cover.image ? lessonJSON.cover.image : null, content: api.convertContentResponse(lessonJSON.content) } }, diff --git a/web/src/sass/_common.sass b/web/src/sass/_common.sass index 096e0b1b..7e5a870a 100755 --- a/web/src/sass/_common.sass +++ b/web/src/sass/_common.sass @@ -2648,8 +2648,15 @@ a.grey-link flex: 0 0 140px +m display: none + &__pic-wrapper + width: 130px; + height: 130px; + border-radius: 50%; + overflow: hidden; &__pic - display: block + top: 50%; + position: relative; + transform: translateY(-50%); width: 100% &__content flex: 0 0 calc(100% - 165px) @@ -3061,8 +3068,6 @@ a.grey-link border-bottom: 1px solid $border align-items: center justify-content: center - +m - margin: 0 -15px 30px &__btn height: 56px border-bottom: 1px solid $border @@ -3072,7 +3077,8 @@ a.grey-link letter-spacing: 1px transition: border-color .2s, color .2s +m - flex: 0 0 50% + flex: 0 0 35% + font-size: 10px &:not(:last-child) margin-right: 40px +m