Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Sakai/API/SakaiProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ public enum SakaiAPI {
case assignmentSite(String)
case assignmentItem(String)
case assignmentMy
case webContent(String) // Site ID
case syllabus(String) // Site ID
case gradebook(String) // Site ID
}

extension SakaiAPI: CachePolicyGettable {
Expand Down Expand Up @@ -125,6 +128,12 @@ extension SakaiAPI: TargetType {
return "/direct/assignment/item/\(assignmentId).json"
case .assignmentMy:
return "/direct/assignment/my.json"
case .webContent(let siteId):
return "/direct/webcontent/site/\(siteId).json"
case .syllabus(let siteId):
return "/direct/syllabus/site/\(siteId).json"
case .gradebook(let siteId):
return "/direct/gradebook/site/\(siteId).json"
}
}

Expand Down
29 changes: 29 additions & 0 deletions Sakai/Models/Announcement.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,35 @@ public struct SakaiAnnouncement: Codable {
public let siteTitle : String?
public internal(set) var title : String?
public var displaySiteTitle: String?

public static let announcementList = [
SakaiAnnouncement(
announcementId: "e91cbf73-0320-4e5a-a789-35ae750894da",
attachments: [SakaiAnnouncementAttachment](),
body: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus commodo metus sit amet dolor sodales faucibus. Praesent vitae odio scelerisque, imperdiet libero et, luctus ex. Nullam nibh enim, ultrices vitae felis nec, tristique pharetra leo. Vivamus blandit nisi vitae nisi pretium, id gravida dolor blandit.",
strippedBody: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus commodo metus sit amet dolor sodales faucibus. Praesent vitae odio scelerisque, imperdiet libero et, luctus ex. Nullam nibh enim, ultrices vitae felis nec, tristique pharetra leo. Vivamus blandit nisi vitae nisi pretium, id gravida dolor blandit.",
channel: "b4021848-bd0a-4f60-bb70-b192e23dad26",
createdByDisplayName: "User 1",
createdOn: 1598633248537,
id: "0e4eb233-1caf-4bc0-8b9d-173e0e16238c",
siteId: "e91cbf73-0320-4e5a-a789-35ae750894da",
siteTitle: "",
title: "Suspendisse tortor"
),
SakaiAnnouncement(
announcementId: "c4d4b1b1-3044-4665-a4e6-b4f51813c193",
attachments: [SakaiAnnouncementAttachment](),
body: "Duis pharetra sapien non ante venenatis, ultrices euismod nibh rhoncus. Sed ante nisi, egestas sed est quis, faucibus vestibulum elit. Suspendisse tincidunt id metus id dignissim. In ut vulputate mauris. Vivamus facilisis gravida tortor tempor fermentum. Aenean hendrerit magna et elit hendrerit, in porttitor arcu dapibus. Vivamus condimentum nunc sed enim rhoncus, ullamcorper pulvinar purus elementum.",
strippedBody: "Duis pharetra sapien non ante venenatis, ultrices euismod nibh rhoncus. Sed ante nisi, egestas sed est quis, faucibus vestibulum elit. Suspendisse tincidunt id metus id dignissim. In ut vulputate mauris. Vivamus facilisis gravida tortor tempor fermentum. Aenean hendrerit magna et elit hendrerit, in porttitor arcu dapibus. Vivamus condimentum nunc sed enim rhoncus, ullamcorper pulvinar purus elementum.",
channel: "b4021848-bd0a-4f60-bb70-b192e23dad26",
createdByDisplayName: "User 1",
createdOn: 1598633248537,
id: "649ca16c-63b3-44a9-866f-7f4ba356b7fc",
siteId: "e91cbf73-0320-4e5a-a789-35ae750894da",
siteTitle: "",
title: "Lorem Ipsum"
)
]
}

public struct SakaiAnnouncementAttachment: Codable {
Expand Down
42 changes: 42 additions & 0 deletions Sakai/Models/Gradebook.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//
// SakaiGradebook.swift
// Sakai
//
// Created by Zachary Joseph Shyi-An Burk on 8/29/20.
//

import Foundation

public struct SakaiGradebook: Codable {
public let assignments: [SakaiGradebookAssignment]
public let siteId: String
public let siteName: String
public let entityReference: String
public let entityURL: String
public let entityTitle: String

public static let gradebook = SakaiGradebook(
assignments: [
SakaiGradebookAssignment(
grade: "90.00",
itemName: "Exam 1",
points: 100,
userId: "2cab5dd1-337d-4a8f-ab2e-b77228c45f25",
userName: "Zachary Burk"
)
],
siteId: "883e3c03-217a-4ead-b6e4-75f43134466f",
siteName: "DENT205.001.FA20",
entityReference: "/gradebook",
entityURL: "https://sakai.unc.edu/direct/gradebook",
entityTitle: "site"
)
}

public struct SakaiGradebookAssignment: Codable {
public let grade: String
public let itemName: String
public let points: Int
public let userId: String
public let userName: String
}
7 changes: 7 additions & 0 deletions Sakai/Models/Site.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,13 @@ public struct SakaiSite: Decodable {
public let title : String
public let type : String?
public let userRoles : [String]?

public static let portalSiteList = [
SakaiPortalSiteSection(term: "Fall 2020", sites: [
SakaiPortalSite(id: "e91cbf73-0320-4e5a-a789-35ae750894da", title: "DENT100.001.FA20"),
SakaiPortalSite(id: "b4021848-bd0a-4f60-bb70-b192e23dad26", title: "DENT101.001.FA20"),
])
]
}

// A revised approach to handling Sites, using the Portal HTML
Expand Down
8 changes: 8 additions & 0 deletions Sakai/Models/SitePage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,15 @@ public struct SitePage: Decodable {
public struct SitePageTool: Decodable {
public let toolId: String?
public let pageOrder: Int?
public let placementId: String?
public let context: String?
public let description: String?
public let siteId: String?
public let id: String
public let title: String?
public let pageId: String?
public let url : URL?
public let home: Bool?
public var toolPath: String {
get {
return "/portal/tool-reset/\(id)"
Expand All @@ -51,5 +55,9 @@ public struct SitePageTool: Decodable {
case title
case pageId
case url
case placementId
case context
case description
case home
}
}
55 changes: 55 additions & 0 deletions Sakai/Models/Syllabus.swift

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions Sakai/Models/WebContent.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// SakaiWebContent.swift
// Sakai
//
// Created by Zachary Joseph Shyi-An Burk on 8/28/20.
//

import Foundation

public struct SakaiWebContent: Decodable {
public let title: String
public let url: String
public let entityReference: String
public let entityURL: String
public let entityTitle: String
}
25 changes: 25 additions & 0 deletions Sakai/Services/GradebookService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// GradebookService.swift
// Sakai
//
// Created by Zachary Joseph Shyi-An Burk on 8/29/20.
//

import Foundation

public class GradebookService {

public func getSiteGradebook(id: String, completion: @escaping NetworkServiceResponse<SakaiGradebook>) {
SakaiAPIClient.shared.session.prepAuthedRoute { (sessionResult) in
if let authError = sessionResult.error {
completion(.failure(authError))
return
}

sakaiProvider.request(.gradebook(id)) { result in
completion(ResponseHelper.handle(SakaiGradebook.self, result: result))
}
}
}
}

3 changes: 3 additions & 0 deletions Sakai/Services/SakaiAPIClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ final public class SakaiAPIClient: NSObject {
public let chat: ChatService = ChatService()
public let calendar: CalendarService = CalendarService()
public let assignement: AssignmentService = AssignmentService()
public let webContent: WebContentService = WebContentService()
public let syllabus: SyllabusService = SyllabusService()
public let gradebook: GradebookService = GradebookService()
public internal(set) var loggedInUserSession: SakaiSession?

internal var username: String? = nil
Expand Down
26 changes: 26 additions & 0 deletions Sakai/Services/SyllabusService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

//
// SyllabusService.swift
// Sakai
//
// Created by Zachary Joseph Shyi-An Burk on 8/28/20.
//

import Foundation

public class SyllabusService {

public func getSiteSyllabus(id: String, completion: @escaping NetworkServiceResponse<SakaiSyllabus>) {
SakaiAPIClient.shared.session.prepAuthedRoute { (sessionResult) in
if let authError = sessionResult.error {
completion(.failure(authError))
return
}

sakaiProvider.request(.syllabus(id)) { result in
completion(ResponseHelper.handle(SakaiSyllabus.self, result: result))
}
}
}
}

33 changes: 33 additions & 0 deletions Sakai/Services/WebContentService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// WebContentService.swift
// Sakai
//
// Created by Zachary Joseph Shyi-An Burk on 8/28/20.
//

import Foundation

public class WebContentService {

public func getSiteWebContent(id: String, completion: @escaping NetworkServiceResponse<[SakaiWebContent]>) {
SakaiAPIClient.shared.session.prepAuthedRoute { (sessionResult) in
if let authError = sessionResult.error {
completion(.failure(authError))
return
}

sakaiProvider.request(.webContent(id)) { result in
let result = ResponseHelper.handle([SakaiWebContent].self, result: result, atKeyPath: "webcontent_collection")

guard let webContent: [SakaiWebContent] = result.value else {
completion(result)
return
}

completion(.success(webContent))
return
}
}
}
}