public function deleteModuleData(ModulesRequest $request) { $isModuleItem = false; if (!$request->getModuleId()) { throw new InvalidParameterInRequestObjectException(get_class($request), "moduleId", "Parameter is required"); } if (!isset($_SESSION)) { session_start(); } $domain = $_SESSION['domain']; $token = \Crypt::decrypt($_SESSION['userToken']); $courseId = $_SESSION['courseID']; $scope = "module"; $urlPieces = array(); $urlArgs = array(); $urlPieces[] = "https://{$domain}/api/v1/courses/{$courseId}"; $urlPieces[] = "modules/{$request->getModuleId()}"; if ($request->getModuleItemId()) { $isModuleItem = true; $urlPieces[] = "items/{$request->getModuleItemId()}"; $scope = "module_item"; } //Attach token $urlArgs[] = "access_token={$token}"; $url = GuzzleHelper::constructUrl($urlPieces, $urlArgs); try { //delete from Canvas $response = GuzzleHelper::makeRequest($request, $url, true); if ($response->getStatusCode() === "200") { $dbHelper = new DbHelper(); /* * NOTE: * Cascading delete is not yet supported in OctoberCMS, so we have to do all the cascading deletes manually. * See https://github.com/octobercms/october/issues/419 */ if ($isModuleItem) { //delete the module item and its contents from DB $dbHelper->deleteModuleItemCascade($request->getModuleId(), $request->getModuleItemId()); //delete module item's contents // $this->deleteModuleItemsContent($courseId, $request->moduleId, $request->moduleItemId); } else { //DELETE MODULE //this will delete this module, its module items, and the content from DB $dbHelper->deleteModuleCascade($courseId, $request->getModuleId()); } } return $response; } catch (\GuzzleHttp\Exception\ClientException $e) { if ($e->hasResponse()) { if ($e->getResponse()->getStatusCode() === "404") { //This can be caused because the module/moduleItem doesn't exist. Just return return null; } } return "An error occurred. Unable to delete module data"; } }