diff --git a/apps/course/models.py b/apps/course/models.py
index b2233bd4..0c33fd81 100644
--- a/apps/course/models.py
+++ b/apps/course/models.py
@@ -124,11 +124,13 @@ class Course(BaseModel, DeactivatedMixin):
def save(self, *args, **kwargs):
if not self.slug:
- slug = slugify(unidecode(self.title[:90]))
- self.slug = slug
- if self.slug:
- while Course.objects.filter(slug=self.slug).exclude(id=self.id).exists():
- self.slug = slug + str(uuid4())[-4:]
+ self.slug = slugify(unidecode(self.title[:90]))
+ if self.slug:
+ if self.slug.isdigit():
+ self.slug = 'course%s' % self.slug
+ slug = self.slug
+ while Course.objects.filter(slug__iexact=self.slug).exclude(id=self.id).exists():
+ self.slug = '%s_%s' % (slug, str(uuid4())[-4:])
return super().save()
diff --git a/web/src/components/CourseRedactor.vue b/web/src/components/CourseRedactor.vue
index c16a0a4b..b705382b 100644
--- a/web/src/components/CourseRedactor.vue
+++ b/web/src/components/CourseRedactor.vue
@@ -45,7 +45,7 @@
@@ -273,6 +273,7 @@
price: null,
old_price: null,
age: 0,
+ slug: '',
url: '',
coverImage: '',
kit__body: null,
@@ -473,8 +474,8 @@
},
onCourseNameInput() {
this.$v.course.title.$touch();
- if (!this.slugChanged) {
- this.course.url = slugify(this.course.title);
+ if (!this.slugChanged && !this.$v.course.status) {
+ this.course.slug = slugify(this.course.title);
}
},
removeLesson(lessonIndex) {
@@ -741,24 +742,6 @@
}
},
saveCourseDraft: function (newValue, oldValue) {
- //console.log('saveCourseDraft');
- // if (!oldValue.id) {
- // return;
- // }
-
-
- // if(this.live) {
- // if(!this.course.date || this.course.short_description == '' || this.course.title == '') {
- // //console.log('live valiedation error');
- // return;
- // }
- // } else {
- // if(this.course.short_description == '' || this.course.title == '') {
- // //console.log('course validation error');
- // return;
- // }
- // }
-
if (this.savingDebounceTimeout) {
clearTimeout(this.savingDebounceTimeout);
}
@@ -771,13 +754,14 @@
this.courseSaving = true;
this.changeSavingStatus();
const courseObject = this.course;
- courseObject.url = (courseObject.url) ? slugify(courseObject.url):courseObject.url;
+ courseObject.slug = courseObject.slug && slugify(courseObject.slug);
api.saveCourse(courseObject, this.accessToken)
.then((response) => {
this.courseSaving = false;
this.changeSavingStatus(true);
this.courseSyncHook = true;
const courseData = api.convertCourseJson(response.data);
+ this.course.slug = courseData.slug;
if (this.course.coverImage) {
courseData.coverImage = this.course.coverImage;
}
@@ -804,19 +788,11 @@
})
}
});
- if (courseData.url) {
- this.slugChanged = true;
- }
if(courseData.id) {
this.course.id = courseData.id;
}
- /*if(this.live && courseData.date) {
- this.course.date = _.find(this.scheduleOptions, function(item){
- return item.value == courseData.date;
- });
- }*/
this.$nextTick(() => {
this.courseSyncHook = false;
});
@@ -1029,10 +1005,7 @@
}
},
courseFullUrl() {
- if (!this.course.url) {
- return `https://lil.city/course/${this.course.id}`;
- }
- let suffix = this.course.url ? this.course.url : 'ваша_ссылка';
+ let suffix = this.course.slug || this.course.id || 'ваша_ссылка';
return `https://lil.city/course/${suffix}`;
},
},
diff --git a/web/src/js/modules/api.js b/web/src/js/modules/api.js
index ed60c229..929696fd 100644
--- a/web/src/js/modules/api.js
+++ b/web/src/js/modules/api.js
@@ -113,7 +113,7 @@ export const api = {
deferred_start_at: deferredStart,
duration: courseObject.duration || 0,
is_featured: courseObject.is_featured,
- slug: courseObject.url,
+ slug: courseObject.slug,
date: (courseObject.date) ? courseObject.date.value:null,
stream: courseObject.stream,
cover: courseObject.coverImageId ? courseObject.coverImageId : null,
@@ -194,7 +194,7 @@ export const api = {
time: deferredTime,
duration: courseJSON.duration,
is_featured: courseJSON.is_featured,
- url: courseJSON.slug,
+ slug: courseJSON.slug,
stream: courseJSON.stream,
coverImageId: courseJSON.cover && courseJSON.cover.id ? courseJSON.cover.id : null,
coverImage: courseJSON.cover && courseJSON.cover.image ? courseJSON.cover.image : null,