Skip to content

Commit 499be38

Browse files
authored
Update purchase button behavior (#1129)
* Add new model version * Persist Course.is_enabled * Update Course.canContinue * Update behavior * Refactor rename * Refactor rename * Rearrange code
1 parent 02a0478 commit 499be38

File tree

12 files changed

+783
-19
lines changed

12 files changed

+783
-19
lines changed

Stepic.xcodeproj/project.pbxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2692,6 +2692,7 @@
26922692
2C57B2A0240945B2008284F0 /* SubmissionsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubmissionsRepository.swift; sourceTree = "<group>"; };
26932693
2C580B802754FE7800BAEE60 /* WishlistEntriesPersistenceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WishlistEntriesPersistenceService.swift; sourceTree = "<group>"; };
26942694
2C5967EA23E7828800072800 /* SubmissionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubmissionTests.swift; sourceTree = "<group>"; };
2695+
2C5A92FE27D75A4C0086559D /* Model_course_update_purchase_button_behavior_v95.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model_course_update_purchase_button_behavior_v95.xcdatamodel; sourceTree = "<group>"; };
26952696
2C5AB2B122F9BC78005E7AA0 /* Model_step_options_limits.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model_step_options_limits.xcdatamodel; sourceTree = "<group>"; };
26962697
2C5B3812257280C6007BF21E /* AuthorsCourseListWidgetCoverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorsCourseListWidgetCoverView.swift; sourceTree = "<group>"; };
26972698
2C5BE9DB233C0A100098EB2F /* katex */ = {isa = PBXFileReference; lastKnownFileType = folder; path = katex; sourceTree = "<group>"; };
@@ -14714,6 +14715,7 @@
1471414715
08D1EF6E1BB5618700BE84E6 /* Model.xcdatamodeld */ = {
1471514716
isa = XCVersionGroup;
1471614717
children = (
14718+
2C5A92FE27D75A4C0086559D /* Model_course_update_purchase_button_behavior_v95.xcdatamodel */,
1471714719
2C9E699127ABFFB40090FC83 /* Model_course_acquired_skills_v94.xcdatamodel */,
1471814720
2C97FFF9278CB90600EC7E74 /* Model_course_revenue_fixes_v93.xcdatamodel */,
1471914721
2CED149D2756D83E00BB013D /* Model_mobile_tiers_v92.xcdatamodel */,
@@ -14810,7 +14812,7 @@
1481014812
0802AC531C7222B200C4F3E6 /* Model_v2.xcdatamodel */,
1481114813
08D1EF6F1BB5618700BE84E6 /* Model.xcdatamodel */,
1481214814
);
14813-
currentVersion = 2C9E699127ABFFB40090FC83 /* Model_course_acquired_skills_v94.xcdatamodel */;
14815+
currentVersion = 2C5A92FE27D75A4C0086559D /* Model_course_update_purchase_button_behavior_v95.xcdatamodel */;
1481414816
path = Model.xcdatamodeld;
1481514817
sourceTree = "<group>";
1481614818
versionGroupType = wrapper.xcdatamodel;

Stepic/Legacy/Model/Entities/Course/Course+CoreDataProperties.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ extension Course {
1313
@NSManaged var managedFeatured: NSNumber?
1414
@NSManaged var managedPublic: NSNumber?
1515
@NSManaged var managedIsProctored: NSNumber?
16+
@NSManaged var managedIsEnabled: NSNumber
1617
@NSManaged var managedIsFavorite: NSNumber?
1718
@NSManaged var managedIsArchived: NSNumber?
1819
@NSManaged var managedIsInWishlist: NSNumber?
@@ -64,6 +65,8 @@ extension Course {
6465

6566
@NSManaged var managedCanViewRevenue: NSNumber?
6667
@NSManaged var managedCanCreateAnnouncements: NSNumber
68+
@NSManaged var managedCanEditCourse: NSNumber
69+
@NSManaged var managedCanBeBought: NSNumber
6770

6871
// MARK: Relationships
6972
@NSManaged var managedAuthors: NSOrderedSet?
@@ -270,6 +273,15 @@ extension Course {
270273
}
271274
}
272275

276+
var isEnabled: Bool {
277+
get {
278+
self.managedIsEnabled.boolValue
279+
}
280+
set {
281+
self.managedIsEnabled = NSNumber(value: newValue)
282+
}
283+
}
284+
273285
var isFavorite: Bool {
274286
get {
275287
self.managedIsFavorite?.boolValue ?? false
@@ -569,6 +581,24 @@ extension Course {
569581
}
570582
}
571583

584+
var canEditCourse: Bool {
585+
get {
586+
self.managedCanEditCourse.boolValue
587+
}
588+
set {
589+
self.managedCanEditCourse = NSNumber(value: newValue)
590+
}
591+
}
592+
593+
var canBeBought: Bool {
594+
get {
595+
self.managedCanBeBought.boolValue
596+
}
597+
set {
598+
self.managedCanBeBought = NSNumber(value: newValue)
599+
}
600+
}
601+
572602
var progress: Progress? {
573603
get {
574604
managedProgress

Stepic/Legacy/Model/Entities/Course/Course.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ final class Course: NSManagedObject, ManagedObject, IDFetchable {
5656

5757
var canContinue: Bool {
5858
self.totalUnits > 0
59-
&& self.scheduleType != "ended"
6059
&& self.scheduleType != "upcoming"
60+
&& self.scheduleType != "ended"
61+
&& (self.isEnabled || !self.canEditCourse)
6162
}
6263

6364
var canWriteReview: Bool {
@@ -112,6 +113,7 @@ final class Course: NSManagedObject, ManagedObject, IDFetchable {
112113
self.isArchived = json[JSONKey.isArchived.rawValue].boolValue
113114
self.isInWishlist = json[JSONKey.isInWishlist.rawValue].boolValue
114115
self.isProctored = json[JSONKey.isProctored.rawValue].boolValue
116+
self.isEnabled = json[JSONKey.isEnabled.rawValue].bool ?? true
115117
self.readiness = json[JSONKey.readiness.rawValue].float
116118

117119
self.summary = json[JSONKey.summary.rawValue].stringValue
@@ -163,9 +165,14 @@ final class Course: NSManagedObject, ManagedObject, IDFetchable {
163165
self.canViewRevenue =
164166
actionsDictionary[JSONKey.viewRevenue.rawValue]?.dictionary?[JSONKey.enabled.rawValue]?.bool ?? false
165167
self.canCreateAnnouncements = actionsDictionary[JSONKey.createAnnouncements.rawValue]?.string != nil
168+
self.canEditCourse = actionsDictionary[JSONKey.editCourse.rawValue]?.string != nil
169+
self.canBeBought =
170+
actionsDictionary[JSONKey.canBeBought.rawValue]?.dictionary?[JSONKey.enabled.rawValue]?.bool ?? false
166171
} else {
167172
self.canViewRevenue = false
168173
self.canCreateAnnouncements = false
174+
self.canEditCourse = false
175+
self.canBeBought = false
169176
}
170177
}
171178

@@ -240,13 +247,16 @@ final class Course: NSManagedObject, ManagedObject, IDFetchable {
240247
case previewLesson = "preview_lesson"
241248
case previewUnit = "preview_unit"
242249
case isProctored = "is_proctored"
250+
case isEnabled = "is_enabled"
251+
case canBeBought = "can_be_bought"
243252
case defaultPromoCodeName = "default_promo_code_name"
244253
case defaultPromoCodePrice = "default_promo_code_price"
245254
case defaultPromoCodeDiscount = "default_promo_code_discount"
246255
case defaultPromoCodeExpireDate = "default_promo_code_expire_date"
247256
case actions
248257
case viewRevenue = "view_revenue"
249258
case enabled
259+
case editCourse = "edit_course"
250260
case createAnnouncements = "create_announcements"
251261
case announcements
252262
case acquiredSkills = "acquired_skills"

Stepic/Legacy/Model/Model.xcdatamodeld/.xccurrentversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<plist version="1.0">
44
<dict>
55
<key>_XCCurrentVersionName</key>
6-
<string>Model_course_acquired_skills_v94.xcdatamodel</string>
6+
<string>Model_course_update_purchase_button_behavior_v95.xcdatamodel</string>
77
</dict>
88
</plist>

Stepic/Legacy/Model/Model.xcdatamodeld/Model_course_acquired_skills_v94.xcdatamodel/contents

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21D49" minimumToolsVersion="Xcode 7.0" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
2+
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21D62" minimumToolsVersion="Xcode 7.0" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
33
<entity name="Announcement" representedClassName=".Announcement" syncable="YES">
44
<attribute name="managedClickCount" optional="YES" attributeType="Integer 64" usesScalarValueType="NO" syncable="YES"/>
55
<attribute name="managedCourseId" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="NO" syncable="YES"/>

0 commit comments

Comments
 (0)