Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 33 |
CRAP | |
0.00% |
0 / 773 |
| CourseMaterialService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 33 |
34782.00 | |
0.00% |
0 / 773 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
| __clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
| addCourseMaterial | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 32 |
|||
| updateCourseMaterial | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
| addStaffDocument | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 17 |
|||
| updateStaffDocuments | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
| getDocumentCategories | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
| getDocumentSubCategories | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
| getStaffDocuments | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 18 |
|||
| createCourseMaterialService | |
0.00% |
0 / 1 |
210.00 | |
0.00% |
0 / 51 |
|||
| updateCourseMaterialDetails | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 21 |
|||
| getAllCourseMaterials | |
0.00% |
0 / 1 |
506.00 | |
0.00% |
0 / 97 |
|||
| getResourceIdByDocumentId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| deleteCourseMaterial | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 33 |
|||
| checkResourceHasCopied | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 11 |
|||
| lockOrUnlockDocument | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 13 |
|||
| deleteCourseMaterialLikes | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| deleteCourseMaterialComments | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| deleteCourseMaterialRatings | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| getCourseMaterialDetails | |
0.00% |
0 / 1 |
156.00 | |
0.00% |
0 / 80 |
|||
| getCourseMaterialComments | |
0.00% |
0 / 1 |
156.00 | |
0.00% |
0 / 61 |
|||
| postComment | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 18 |
|||
| deleteComment | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 22 |
|||
| userHasPermissionToViewThisDocument | |
0.00% |
0 / 1 |
420.00 | |
0.00% |
0 / 43 |
|||
| markOrUnmarkUserLike | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 19 |
|||
| copyCourseMaterials | |
0.00% |
0 / 1 |
182.00 | |
0.00% |
0 / 37 |
|||
| isDocumentShared | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
| getCourseMaterialsBySbsId | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 38 |
|||
| getCourseMaterialById | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 17 |
|||
| getVideoContentByVideoId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
| getVideoMaterialsBySbsId | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 18 |
|||
| getUploadedCourseMaterialByTopicId | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
|||
| <?php | |
| namespace com\linways\core\ams\professional\service; | |
| use com\linways\base\util\SecurityUtils; | |
| use com\linways\core\ams\professional\constant\BackendTypes; | |
| use com\linways\core\ams\professional\constant\ResourceContext; | |
| use com\linways\core\ams\professional\constant\UserType; | |
| use com\linways\core\ams\professional\dto\CourseMaterial; | |
| use com\linways\core\ams\professional\exception\ProfessionalException; | |
| use com\linways\core\ams\professional\mapper\CourseMaterialServiceMapper; | |
| use com\linways\core\ams\professional\request\AddCourseMaterialRequest; | |
| use com\linways\core\ams\professional\request\AddResourceRequest; | |
| use com\linways\core\ams\professional\request\AddStaffDocumentRequest; | |
| use com\linways\core\ams\professional\request\CheckUserCourseMaterialPermission; | |
| use com\linways\core\ams\professional\request\CopyCourseMaterialRequest; | |
| use com\linways\core\ams\professional\request\DeleteCommentRequest; | |
| use com\linways\core\ams\professional\request\DeleteCourseMaterialRequest; | |
| use com\linways\core\ams\professional\request\GetAllCourseMaterialsRequest; | |
| use com\linways\core\ams\professional\request\GetCourseMaterialDetailsRequest; | |
| use com\linways\core\ams\professional\request\GetCourseMaterialRequest; | |
| use com\linways\core\ams\professional\request\GetPreSignedUrlRequest; | |
| use com\linways\core\ams\professional\request\GetStaffDocumentsRequest; | |
| use com\linways\core\ams\professional\request\LockOrUnlockDocumentRequest; | |
| use com\linways\core\ams\professional\request\MarkUnMarkUserLikeRequest; | |
| use com\linways\core\ams\professional\request\PostCommentRequest; | |
| use com\linways\core\ams\professional\request\RemoveResourceRequest; | |
| use com\linways\core\ams\professional\request\UpdateCourseMaterialRequest; | |
| use com\linways\core\ams\professional\request\UpdateStaffDocumentRequest; | |
| use com\linways\core\ams\professional\response\GetAllCourseMaterialResponse; | |
| use com\linways\core\ams\professional\util\CommonUtil; | |
| use com\linways\core\ams\professional\service\StaffService; | |
| /** | |
| * | |
| * @author jithinvijayan | |
| * @Date 16/03/20 | |
| */ | |
| class CourseMaterialService extends BaseService | |
| { | |
| /** | |
| * @var null | |
| */ | |
| private static $_instance = null; | |
| private $mapper = []; | |
| /** | |
| * Locked down the constructor|Prevent any outside instantiation of this class | |
| * | |
| * CourseMaterialService constructor. | |
| */ | |
| private function __construct() | |
| { | |
| $this->mapper = CourseMaterialServiceMapper::getInstance()->getMapper(); | |
| } | |
| /** | |
| * Prevent any object or instance of that class to be cloned | Prevent any copy of this object | |
| */ | |
| private function __clone() | |
| { | |
| } | |
| /** | |
| * Have a single globally accessible static method | |
| * | |
| * @return CourseMaterialService|null | |
| */ | |
| public static function getInstance() | |
| { | |
| if (!is_object(self::$_instance)) | |
| self::$_instance = new self (); | |
| return self::$_instance; | |
| } | |
| /** | |
| * @param AddCourseMaterialRequest $request | |
| * @return integer|object|null | |
| * @throws ProfessionalException | |
| * @deprecated | |
| */ | |
| public function addCourseMaterial(AddCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $documentId = null; | |
| $request = CommonUtil::convertObjectToUTF8Format($request); | |
| if (empty($request->staffId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_STAFF_ID, "Invalid staff details given"); | |
| } | |
| if (empty($request->subjectId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_SUBJECT_ID, "Invalid subject details given"); | |
| } | |
| if (empty($request->documentTitle)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_TITLE, "Invalid document title given"); | |
| } | |
| if (empty($request->documentPath)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_TITLE, "Invalid document path given"); | |
| } | |
| $sql = " INSERT INTO course_material ( materialName, materialDocPath, materialPdfPath, materialImgPath, | |
| materialSwfPath, staffID, batchID, subjectID,semID) | |
| VALUES ('$request->documentTitle','$request->documentPath','$request->documentPath','$request->imagePath', | |
| '$request->docSWF','$request->staffId','$request->batchId', '$request->subjectId', | |
| (SELECT semID FROM sbs_relation WHERE subjectID='$request->subjectId' AND batchID='$request->batchId' | |
| AND staffID='$request->staffId' | |
| LIMIT 1 | |
| ) | |
| )"; | |
| try { | |
| $documentId = $this->executeQueryForObject($sql, true); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $documentId; | |
| } | |
| /** | |
| * Updating course material details | |
| * | |
| * @param UpdateCourseMaterialRequest $request | |
| * @throws ProfessionalException | |
| * @deprecated | |
| */ | |
| public function updateCourseMaterial(UpdateCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $request = CommonUtil::convertObjectToUTF8Format($request); | |
| if (!preg_match("/[A-Za-z0-9\-\&\_\+\*]+/", $request->title)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_TITLE, "Title is invalid or empty"); | |
| } | |
| if (!preg_match("/[A-Za-z0-9\-\&\_\+\*]+/", $request->topic)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_TOPIC, "Topic is invalid or empty"); | |
| } | |
| $sql = "UPDATE course_material SET materialName ='$request->title',materialTopic='$request->topic', | |
| materialDesc ='$request->description',shareDoc =$request->isShared | |
| WHERE materialID = $request->documentId"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Adding staff documents to the storage | |
| * | |
| * @param AddStaffDocumentRequest $request | |
| * @return Object | |
| * @throws ProfessionalException | |
| */ | |
| public function addStaffDocument(AddStaffDocumentRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->staffId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_STAFF_ID, "Invalid staff details given"); | |
| } | |
| if (empty($request->departmentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DEPARTMENT_ID, "Invalid department details given"); | |
| } | |
| $sql = "INSERT INTO staff_document(docName, docPath, docPDFPath, docImgPath, docSWFPath, staffID, deptID, resourceId) | |
| VALUES ('$request->name', '$request->path', '$request->pdfPath', '$request->imagePath', | |
| '$request->docSWF', '$request->staffId', '$request->departmentId', '$request->resourceId');"; | |
| try { | |
| return $this->executeQueryForObject($sql, true); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Updating course material details | |
| * | |
| * @param UpdateStaffDocumentRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function updateStaffDocuments(UpdateStaffDocumentRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (!preg_match("/[A-Za-z0-9\-\&\_\+\*]+/", $request->title)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_TITLE, "Title is invalid or empty"); | |
| } | |
| if (!preg_match("/[A-Za-z0-9\-\&\_\+\*]+/", $request->topic)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_TOPIC, "Subject is invalid or empty"); | |
| } | |
| $sql = "UPDATE staff_document SET docName ='$request->title',docSubject='$request->topic', | |
| docDsc ='$request->description',docCatID ='$request->categoryId', | |
| docSubCatID='$request->subCategoryId' | |
| WHERE docID = $request->documentId"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @return array|object | |
| * @throws ProfessionalException | |
| */ | |
| public function getDocumentCategories() | |
| { | |
| $sql = "SELECT catID as id, catName as name | |
| FROM doccategory"; | |
| try { | |
| return $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param $categoryId | |
| * @return Object | |
| * @throws ProfessionalException | |
| */ | |
| public function getDocumentSubCategories($categoryId) | |
| { | |
| $categoryId = (int)$this->realEscapeString($categoryId); | |
| $sql = "SELECT subCatID as id, subCatName as name | |
| FROM docsubcategory WHERE catID=$categoryId"; | |
| try { | |
| return $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param GetStaffDocumentsRequest $request | |
| * @return Object|array | |
| * @throws ProfessionalException | |
| */ | |
| public function getStaffDocuments(GetStaffDocumentsRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $sql = "SELECT sd.docName as name,sd.docSubject as subject, sd.docCatID as categoryId, sd.docSubCatID as subCategoryId, sd.docDsc as description, lr.path, sd.resourceId, lr.backend_type, lr.storage_object FROM staff_document sd INNER JOIN lin_resource lr ON lr.id=sd.resourceId WHERE 1=1"; | |
| if ($request->documentId) { | |
| $sql .= " AND docID=$request->documentId "; | |
| } | |
| if ($request->staffId) { | |
| $sql .= " AND staffID=$request->staffId"; | |
| } | |
| try { | |
| if (!empty($request->documentId)) { | |
| return $this->executeQueryForObject($sql); | |
| } | |
| return $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param AddCourseMaterialRequest $request | |
| * @return Object|integer | |
| * @throws Exception | |
| * @throws ProfessionalException | |
| */ | |
| public function createCourseMaterialService(AddCourseMaterialRequest $request) | |
| { | |
| $jsonObject = json_decode($request->storageObject); | |
| $request = $this->realEscapeObject($request); | |
| $jsonObject = $this->realEscapeObject($jsonObject); | |
| if (empty($request->name)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_NAME, "Invalid document details given"); | |
| } | |
| if (empty($request->staffId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_STAFF_ID, "Invalid staff details given"); | |
| } | |
| if (empty($request->batchId) && empty($request->pseudoSubjectId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "invalid request sent"); | |
| } | |
| $addResourceObject = new AddResourceRequest(); | |
| $addResourceObject->storageObject = json_encode($jsonObject); | |
| $addResourceObject->backendType = $request->backendType; | |
| $addResourceObject->context = ResourceContext::COURSE_MATERIALS; | |
| if ($request->backendType === BackendTypes::S3) { | |
| $addResourceObject->path = $jsonObject->key; | |
| } elseif ($request->backendType === BackendTypes::GOOGLE_DRIVE) { | |
| $addResourceObject->path = $jsonObject->url; | |
| } | |
| $addResourceObject->createdBy = $request->createdBy; | |
| $addResourceObject->updatedBy = $request->updatedBy; | |
| $this->beginTransaction(); | |
| $resourceId = ResourceService::getInstance()->addResources($addResourceObject); | |
| if (empty($resourceId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_RESOURCE_ID, "Invalid document details given"); | |
| } | |
| $request->subjectId = $request->subjectId ? $request->subjectId : "NULL"; | |
| $request->pseudoSubjectId = $request->pseudoSubjectId ? $request->pseudoSubjectId : "NULL"; | |
| $request->batchId = $request->batchId ? $request->batchId : "NULL"; | |
| $request->semesterId = $request->semesterId ? $request->semesterId : "NULL"; | |
| $request->topicId = $request->topicId?$request->topicId:"NULL"; | |
| $id = SecurityUtils::getRandomString(); | |
| $sql = "INSERT INTO course_materials (id, resource_id, name, topic, staff_id, batch_id, semester_id, subject_id, | |
| pseudo_subject_id, description,is_shared_document,topic_id,created_by, created_date, updated_by, updated_date) | |
| VALUES ('$id','$resourceId','$request->name','$request->topic', | |
| $request->staffId,$request->batchId,$request->semesterId,$request->subjectId, | |
| $request->pseudoSubjectId,'$request->description',$request->isSharedDocument, | |
| $request->topicId, | |
| $request->createdBy,UTC_TIMESTAMP(),$request->updatedBy,UTC_TIMESTAMP())"; | |
| try { | |
| $this->executeQueryForObject($sql); | |
| $this->commit(); | |
| return $id; | |
| } catch (\Exception $e) { | |
| $this->rollback(); | |
| throw new Exception($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param UpdateCourseMaterialRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function updateCourseMaterialDetails(UpdateCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid document details given"); | |
| } | |
| if (empty($request->name)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_NAME, "Invalid document name given"); | |
| } | |
| if (empty($request->topic)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_TOPIC, "Invalid document topic given"); | |
| } | |
| $sql = "UPDATE course_materials | |
| SET name = '$request->name',topic = '$request->topic',description ='$request->description', | |
| is_shared_document = $request->isShared,updated_date = UTC_TIMESTAMP(),updated_by = $request->updatedBy | |
| WHERE id ='$request->documentId'"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param GetAllCourseMaterialsRequest $request | |
| * @return GetAllCourseMaterialResponse | |
| * @throws ProfessionalException | |
| */ | |
| public function getAllCourseMaterials(GetAllCourseMaterialsRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $response = new GetAllCourseMaterialResponse(); | |
| $limitQuery = ""; | |
| $conditionQuery = ""; | |
| $limitConditionQuery = ""; | |
| if (!empty($request->staffId)) { | |
| $conditionQuery .= " AND cm.staff_id =$request->staffId "; | |
| $limitConditionQuery .= " AND staff_id =$request->staffId "; | |
| } | |
| if (!empty($request->batchId)) { | |
| $conditionQuery .= " AND cm.batch_id =$request->batchId "; | |
| $limitConditionQuery .= " AND batch_id =$request->batchId "; | |
| } | |
| if (!empty($request->semesterId)) { | |
| $conditionQuery .= " AND cm.semester_id =$request->semesterId "; | |
| $limitConditionQuery .= " AND semester_id =$request->semesterId "; | |
| } | |
| if (!empty($request->subjectId)) { | |
| $conditionQuery .= " AND cm.subject_id =$request->subjectId "; | |
| $limitConditionQuery .= " AND subject_id =$request->subjectId "; | |
| } | |
| if (!empty($request->pseudoSubjectId)) { | |
| $conditionQuery .= " AND cm.pseudo_subject_id =$request->pseudoSubjectId "; | |
| $limitConditionQuery .= " AND pseudo_subject_id =$request->pseudoSubjectId "; | |
| } | |
| if (!$request->showPrivateDocuments) { | |
| $conditionQuery .= " AND cm.is_private = 0 "; | |
| $limitConditionQuery .= " AND is_private = 0 "; | |
| } | |
| if ($request->showSharedDocumentsOnly) { | |
| $conditionQuery .= " AND cm.is_shared_document=1 "; | |
| $limitConditionQuery .= " AND is_shared_document=1 "; | |
| } | |
| if (!empty($request->excludedSubjectId)) { | |
| $conditionQuery .= " AND cm.subject_id!=$request->excludedSubjectId "; | |
| $limitConditionQuery .= " AND subject_id!=$request->excludedSubjectId "; | |
| } | |
| if (!empty($request->excludedBatchId)) { | |
| $conditionQuery .= " AND cm.batch_id !=$request->excludedBatchId "; | |
| $limitConditionQuery .= " AND batch_id !=$request->excludedBatchId "; | |
| } | |
| if (!empty($request->excludedSemesterId)) { | |
| $conditionQuery .= " AND cm.semester_id !=$request->excludedSemesterId "; | |
| $limitConditionQuery .= " AND semester_id !=$request->excludedSemesterId "; | |
| } | |
| if (!empty($request->excludedStaffId)) { | |
| $conditionQuery .= " AND cm.staff_id !=$request->excludedStaffId "; | |
| $limitConditionQuery .= " AND staff_id !=$request->excludedStaffId "; | |
| } | |
| if (!empty($request->pseudoSubjectIds)) { | |
| $conditionQuery .= " AND cm.pseudo_subject_id IN (" . implode(",", $request->pseudoSubjectIds) . ")"; | |
| $limitConditionQuery .= " AND pseudo_subject_id IN (" . implode(",", $request->pseudoSubjectIds) . ")"; | |
| } | |
| if ($request->toDate && $request->fromDate == "") { | |
| $conditionQuery .= " AND DATE(cm.created_date) <= '".$request->toDate."' "; | |
| $limitConditionQuery .= " AND created_date <= '".$request->toDate."' "; | |
| } | |
| if ($request->toDate == "" && $request->fromDate) { | |
| $conditionQuery .= " AND DATE(cm.created_date) >= '".$request->fromDate."' "; | |
| $limitConditionQuery .= " AND created_date >= '".$request->fromDate."' "; | |
| } | |
| if ($request->toDate && $request->toDate) { | |
| $conditionQuery .= " AND DATE(cm.created_date) between '".$request->fromDate."' AND '".$request->toDate."' "; | |
| $limitConditionQuery .= " AND created_date between '".$request->fromDate."' AND '".$request->toDate."' "; | |
| } | |
| if ($request->addPagination) { | |
| $limitQuery = " INNER JOIN (SELECT id FROM course_materials WHERE is_active=1 $limitConditionQuery | |
| ORDER BY updated_date DESC LIMIT $request->startIndex,$request->endIndex ) | |
| AS temp ON temp.id = cm.id "; | |
| } | |
| $request->orderType = strtolower($request->orderType) === 'asc' ? 'ASC' : 'DESC'; | |
| $sql = "SELECT cm.id,cm.name,cm.topic,cm.description,cm.is_shared_document,cm.is_private, | |
| DATE_FORMAT(CONVERT_TZ(cm.created_date,'+00:00',@@global.time_zone),'%d-%m-%Y %h:%i:%s %p') as created_date, | |
| lr.id as resource_id,lr.context,lr.backend_type,lr.storage_object,lr.path, | |
| sa.staffID as staff_id,sa.staffName as staff_name, | |
| b.batchID as batch_id,b.batchName as batch_name, | |
| s.semID as semester_id,s.semName as semester_name,cm.visitors, | |
| su.subjectID as subject_id,su.subjectName as subject_name,su.subjectDesc as subject_description, | |
| ps.pseudosubjectID as pseudo_subject_id,ps.subjectName as pseudo_subject_name | |
| FROM course_materials cm | |
| INNER JOIN lin_resource lr on cm.resource_id = lr.id | |
| INNER JOIN staffaccounts sa ON sa.staffID = cm.staff_id | |
| LEFT JOIN batches b on cm.batch_id = b.batchID | |
| LEFT JOIN semesters s on cm.semester_id = s.semID | |
| LEFT JOIN subjects su ON su.subjectID = cm.subject_id | |
| LEFT JOIN pseudosubjects ps ON ps.pseudosubjectID = cm.pseudo_subject_id | |
| WHERE cm.is_active=1 $conditionQuery ORDER BY cm.updated_date $request->orderType "; | |
| $totalSql = "SELECT COUNT(id) as totalRecords FROM course_materials WHERE is_active=1 $limitConditionQuery"; | |
| try { | |
| $response->documents = $this->executeQueryForList($sql, $this->mapper[CourseMaterialServiceMapper::GET_ALL_COURSE_MATERIALS]); | |
| $response->totalRecords = $this->executeQueryForObject($totalSql)->totalRecords; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $response; | |
| } | |
| /** | |
| * @param string $documentId | |
| * @return mixed|string | |
| * @throws ProfessionalException | |
| */ | |
| public function getResourceIdByDocumentId($documentId) | |
| { | |
| $sql = "SELECT resource_id as id FROM course_materials WHERE id ='$documentId'"; | |
| try { | |
| return $this->executeQueryForObject($sql)->id; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Deleting course material | |
| * | |
| * @param DeleteCourseMaterialRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function deleteCourseMaterial(DeleteCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $sql = "DELETE FROM course_materials WHERE id ='$request->documentId'"; | |
| try { | |
| $resourceId = $this->getResourceIdByDocumentId($request->documentId); | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid course material details given"); | |
| } | |
| if (empty($request->staffId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_STAFF_ID, "Invalid staff details given"); | |
| } | |
| $removeRequest = new RemoveResourceRequest(); | |
| $removeRequest->resourceId = $resourceId; | |
| $removeRequest->accessKey = getenv('AWS_ACCESS_KEY'); | |
| $removeRequest->secretKey = getenv('AWS_CLIENT_SECRET_KEY'); | |
| $this->beginTransaction(); | |
| SubjectPlanService::getInstance()->deleteCourseMaterialFromActualPlanByMaterialId($request->documentId); | |
| SubjectPlanService::getInstance()->deleteCourseMaterialFromProposesPlanMaterialId($request->documentId); | |
| PseudoSubjectPlanService::getInstance()->deletePseudoSubjectActualPlanCourseMaterialsByMaterialId($request->documentId); | |
| PseudoSubjectPlanService::getInstance()->deletePseudoSubjectProposedPlanCourseMaterialsByMaterialId($request->documentId); | |
| $this->deleteCourseMaterialComments($request->documentId); | |
| $this->deleteCourseMaterialLikes($request->documentId); | |
| $this->deleteCourseMaterialRatings($request->documentId); | |
| $this->executeQuery($sql); | |
| if (!$this->checkResourceHasCopied($resourceId)) { | |
| ResourceService::getInstance()->removeResource($removeRequest); | |
| } | |
| $this->commit(); | |
| } catch (\Exception $e) { | |
| $this->rollback(); | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Checking if the resource has been copied | |
| * | |
| * @param $resourceId | |
| * @return bool | |
| * @throws ProfessionalException | |
| */ | |
| private function checkResourceHasCopied($resourceId) | |
| { | |
| $sql = "SELECT COUNT(id) as totalRecords | |
| FROM course_materials | |
| WHERE resource_id ='$resourceId'"; | |
| try { | |
| $count = $this->executeQueryForObject($sql)->totalRecords; | |
| return !empty($count); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Making document private or not | |
| * @param LockOrUnlockDocumentRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function lockOrUnlockDocument(LockOrUnlockDocumentRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid document details given"); | |
| } | |
| $sql = "UPDATE course_materials SET is_private=$request->isLocked, updated_by = $request->updatedBy, | |
| updated_date = UTC_TIMESTAMP() WHERE id = '$request->documentId'"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param $documentId | |
| * @throws ProfessionalException | |
| */ | |
| private function deleteCourseMaterialLikes($documentId) | |
| { | |
| $sql = "DELETE FROM course_material_likes WHERE course_material_id = '$documentId'"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getMessage(), $e->getCode()); | |
| } | |
| } | |
| /** | |
| * @param $documentId | |
| * @throws ProfessionalException | |
| */ | |
| private function deleteCourseMaterialComments($documentId) | |
| { | |
| $sql = "DELETE FROM course_material_comments WHERE course_material_id = '$documentId'"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getMessage(), $e->getCode()); | |
| } | |
| } | |
| /** | |
| * @param $documentId | |
| * @throws ProfessionalException | |
| */ | |
| private function deleteCourseMaterialRatings($documentId) | |
| { | |
| $sql = "DELETE FROM course_material_ratings WHERE course_material_id = '$documentId'"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getMessage(), $e->getCode()); | |
| } | |
| } | |
| /** | |
| * @param GetCourseMaterialDetailsRequest $request | |
| * @return CourseMaterial|object | |
| * @throws ProfessionalException | |
| */ | |
| public function getCourseMaterialDetails(GetCourseMaterialDetailsRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid document details given"); | |
| } | |
| $conditionQuery = ""; | |
| if (!empty($request->staffId) && !$request->showSharedDocuments) { | |
| $conditionQuery .= " AND cm.staff_id =$request->staffId "; | |
| } | |
| if (!empty($request->batchId)) { | |
| $conditionQuery .= " AND cm.batch_id =$request->batchId "; | |
| } | |
| if (!empty($request->semesterId)) { | |
| $conditionQuery .= " AND cm.semester_id =$request->semesterId "; | |
| } | |
| if (!empty($request->subjectId)) { | |
| $conditionQuery .= " AND cm.subject_id =$request->subjectId "; | |
| } | |
| if (!empty($request->pseudoSubjectId)) { | |
| $conditionQuery .= " AND cm.pseudo_subject_id =$request->pseudoSubjectId "; | |
| } | |
| if (!$request->showPrivateDocuments) { | |
| $conditionQuery .= " AND cm.is_private = 0"; | |
| } | |
| if ($request->showSharedDocuments) { | |
| $conditionQuery .= " AND (cm.is_shared_document=1 OR cm.staff_id =$request->staffId) "; | |
| } | |
| $sql = "SELECT cm.id,cm.name,cm.topic,cm.description,cm.is_shared_document, | |
| DATE_FORMAT(CONVERT_TZ(cm.created_date,'+00:00',@@global.time_zone),'%d-%m-%Y %h:%i:%s %p') as created_date, | |
| lr.id as resource_id,lr.context,lr.backend_type,lr.storage_object, | |
| sa.staffID as staff_id,sa.staffName as staff_name, | |
| b.batchID as batch_id,b.batchName as batch_name, | |
| s.semID as semester_id,s.semName as semester_name, | |
| su.subjectID as subject_id,su.subjectName as subject_name,su.subjectDesc as subject_description, | |
| ps.pseudosubjectID as pseudo_subject_id,ps.subjectName as pseudo_subject_name, | |
| cmr.rating,cml.total_likes,cmc.total_comments,cmr.number_of_ratings, | |
| IF(cml2.id,true,false) as is_liked | |
| FROM course_materials cm | |
| INNER JOIN lin_resource lr on cm.resource_id = lr.id | |
| INNER JOIN staffaccounts sa ON sa.staffID = cm.staff_id | |
| LEFT JOIN batches b on cm.batch_id = b.batchID | |
| LEFT JOIN semesters s on cm.semester_id = s.semID | |
| LEFT JOIN subjects su ON su.subjectID = cm.subject_id | |
| LEFT JOIN pseudosubjects ps ON ps.pseudosubjectID = cm.pseudo_subject_id | |
| LEFT JOIN ( | |
| SELECT AVG(rate) as rating,COUNT(id) as number_of_ratings,course_material_id | |
| FROM course_material_ratings | |
| WHERE course_material_id='$request->documentId' | |
| ) as cmr ON cmr.course_material_id = cm.id | |
| LEFT JOIN ( | |
| SELECT COUNT(id) as total_likes,course_material_id | |
| FROM course_material_likes | |
| WHERE course_material_id ='$request->documentId' | |
| ) as cml ON cml.course_material_id = cm.id | |
| LEFT JOIN ( | |
| SELECT COUNT(id) as total_comments,course_material_id | |
| FROM course_material_comments | |
| WHERE course_material_id ='$request->documentId' AND is_active=1 | |
| ) as cmc on cm.id = cmc.course_material_id | |
| LEFT JOIN course_material_likes cml2 ON cm.id = cml2.course_material_id | |
| AND cml2.user_id = $request->userId AND cml2.user_type ='$request->userType' | |
| LEFT JOIN course_material_ratings cmr2 ON cm.id = cmr2.course_material_id | |
| AND cmr2.user_id = $request->userId AND cmr2.user_type ='$request->userType' | |
| WHERE cm.id = '$request->documentId' AND cm.is_active=1 $conditionQuery | |
| ORDER BY cm.updated_date DESC "; | |
| try { | |
| $document = $this->executeQueryForObject($sql, false, $this->mapper[CourseMaterialServiceMapper::GET_ALL_COURSE_MATERIALS]); | |
| if ($document) { | |
| $getUrlRequest = new GetPreSignedUrlRequest(); | |
| $getUrlRequest->secretKey = getenv('AWS_CLIENT_SECRET_KEY'); | |
| $getUrlRequest->accessKey = getenv('AWS_ACCESS_KEY'); | |
| $getUrlRequest->resourceId = $document->resource->id; | |
| $url = ResourceService::getInstance()->getPreSignedUrlByResourceId($getUrlRequest); | |
| $document->resource->url = $url->url; | |
| } | |
| return $document; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param GetCourseMaterialDetailsRequest $request | |
| * @return Object | |
| * @throws ProfessionalException | |
| */ | |
| public function getCourseMaterialComments(GetCourseMaterialDetailsRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid document details given"); | |
| } | |
| $conditionQuery = ""; | |
| if (!empty($request->staffId)) { | |
| $conditionQuery .= " AND cm.staff_id =$request->staffId "; | |
| } | |
| if (!empty($request->batchId)) { | |
| $conditionQuery .= " AND cm.batch_id =$request->batchId "; | |
| } | |
| if (!empty($request->semesterId)) { | |
| $conditionQuery .= " AND cm.semester_id =$request->semesterId "; | |
| } | |
| if (!empty($request->subjectId)) { | |
| $conditionQuery .= " AND cm.subject_id =$request->subjectId "; | |
| } | |
| if (!empty($request->pseudoSubjectId)) { | |
| $conditionQuery .= " AND cm.pseudo_subject_id =$request->pseudoSubjectId "; | |
| } | |
| if (!$request->showPrivateDocuments) { | |
| $conditionQuery .= " AND cm.is_private = 0"; | |
| } | |
| if (!empty($request->commentId)) { | |
| $conditionQuery .= " AND cmc.id = $request->commentId "; | |
| } | |
| $staffUser = UserType::STAFF; | |
| $studentUser = UserType::STUDENT; | |
| $response = []; | |
| $sql = "SELECT cmc.id,cmc.comment, | |
| IF(sa.staffID,sa.staffName,st.studentName) as userName, | |
| IF(sa.staffID,'STAFF','STUDENT') as userType, | |
| IF(sa.staffID,sa.staffID,st.studentID) as userId, | |
| IF(sa.staffID,sa.myImage,st.myImage) as userImage, | |
| DATE_FORMAT(CONVERT_TZ(cmc.created_date,'+00:00',@@global.time_zone),'%d-%m-%Y %h:%i:%s %p') | |
| AS commentedTime, | |
| IF(cmc.user_id=$request->userId AND cmc.user_type='$request->userType',true,false) as isDeletable, | |
| sa.staffID | |
| FROM course_materials cm | |
| INNER JOIN course_material_comments cmc on cm.id = cmc.course_material_id | |
| LEFT JOIN staffaccounts sa ON sa.staffID = cmc.user_id AND cmc.user_type ='$staffUser' | |
| LEFT JOIN studentaccount st ON st.studentID = cmc.user_id AND cmc.user_type ='$studentUser' | |
| WHERE cmc.is_active=1 AND cm.id ='$request->documentId' $conditionQuery | |
| ORDER BY cmc.updated_date DESC "; | |
| try { | |
| $results = $this->executeQueryForList($sql); | |
| foreach ($results as $result) { | |
| if($result->staffID) | |
| { | |
| $profilePicture = StaffService::getInstance()->getStaffProfilePic($result->staffID); | |
| $imagePath = $profilePicture->docpath; | |
| $result->userImage = $imagePath; | |
| } | |
| $response[] = $result; | |
| } | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $response; | |
| } | |
| /** | |
| * Posting comments | |
| * | |
| * @param PostCommentRequest $request | |
| * @return Object | |
| * @throws ProfessionalException | |
| */ | |
| public function postComment(PostCommentRequest $request) | |
| { | |
| $comment = null; | |
| $sql = "INSERT INTO course_material_comments (course_material_id, user_id, user_type, comment, created_by, | |
| created_date, updated_by, updated_date) | |
| VALUES ('$request->documentId',$request->userId,'$request->userType','$request->comment',$request->createdBy, | |
| UTC_TIMESTAMP(),$request->updatedBy,UTC_TIMESTAMP())"; | |
| try { | |
| $commentId = $this->executeQueryForObject($sql, true); | |
| $getComment = new GetCourseMaterialDetailsRequest(); | |
| $getComment->documentId = $request->documentId; | |
| $getComment->userType = $request->userType; | |
| $getComment->userId = $request->userId; | |
| $getComment->commentId = $commentId; | |
| return $this->getCourseMaterialComments($getComment)[0]; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Soft deleting comments | |
| * | |
| * @param DeleteCommentRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function deleteComment(DeleteCommentRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->commentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_COMMENT_ID, "Invalid comment details given"); | |
| } | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "Invalid document details given"); | |
| } | |
| if (empty($request->userId) && empty($request->userType)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| $sql = "UPDATE course_material_comments SET is_active=0,updated_date=UTC_TIMESTAMP(),updated_by = $request->updatedBy | |
| WHERE course_material_id='$request->documentId' AND id = $request->commentId "; | |
| /** | |
| * Checking anyone can delete anyone's comments. | |
| * Default false | |
| */ | |
| if (!$request->userHasPermissionToDeleteComment) { | |
| $sql .= " AND user_id =$request->userId AND user_type ='$request->userType'"; | |
| } | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param CheckUserCourseMaterialPermission $request | |
| * @return integer | |
| * @throws ProfessionalException | |
| */ | |
| public function userHasPermissionToViewThisDocument(CheckUserCourseMaterialPermission $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->userType) || empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| $conditionQuery = ""; | |
| if ($request->userType === UserType::STUDENT) { | |
| if (empty($request->staffId) || ((empty($request->batchId) || empty($request->subjectId)) && empty($request->pseudoSubjectId))) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| } elseif ($request->userType === UserType::STAFF) { | |
| if (empty($request->semesterId) || | |
| empty($request->staffId) || | |
| empty($request->batchId) || | |
| (empty($request->subjectId) && empty($request->pseudoSubjectId))) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| $conditionQuery .= " AND is_private = 0"; | |
| } else { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| if (!empty($request->staffId)) { | |
| $conditionQuery .= " AND staff_id =$request->staffId "; | |
| } | |
| if (!empty($request->batchId)) { | |
| $conditionQuery .= " AND batch_id =$request->batchId "; | |
| } | |
| if (!empty($request->semesterId)) { | |
| $conditionQuery .= " AND semester_id =$request->semesterId "; | |
| } | |
| if (!empty($request->subjectId)) { | |
| $conditionQuery .= " AND subject_id =$request->subjectId "; | |
| } | |
| if (!empty($request->pseudoSubjectId)) { | |
| $conditionQuery .= " AND pseudo_subject_id =$request->pseudoSubjectId "; | |
| } | |
| $sql = "SELECT id FROM course_materials WHERE is_active=1 $conditionQuery"; | |
| try { | |
| return $this->executeQueryForObject($sql)->id; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param MarkUnMarkUserLikeRequest $request | |
| * @return Object|integer | |
| * @throws ProfessionalException | |
| */ | |
| public function markOrUnmarkUserLike(MarkUnMarkUserLikeRequest $request) | |
| { | |
| if (empty($request->documentId) || empty($request->userType) || empty($request->userId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid request sent"); | |
| } | |
| try { | |
| if ($request->isLiked) { | |
| $sql = "INSERT INTO course_material_likes (course_material_id, user_id, user_type, created_by, created_date) | |
| VALUES ('$request->documentId',$request->userId,'$request->userType',$request->createdBy,UTC_TIMESTAMP())"; | |
| return $this->executeQueryForObject($sql, true); | |
| } else { | |
| $sql = "DELETE FROM course_material_likes WHERE course_material_id = '$request->documentId' | |
| AND user_type ='$request->userType' AND user_id =$request->userId"; | |
| $this->executeQuery($sql); | |
| } | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return null; | |
| } | |
| /** | |
| * @param CopyCourseMaterialRequest $request | |
| * @return String | |
| * @throws ProfessionalException | |
| */ | |
| public function copyCourseMaterials(CopyCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->pseudoSubjectId)) { | |
| if (empty($request->semesterId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_SEMESTER_ID, "Invalid semester details given"); | |
| } | |
| if (empty($request->batchId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_BATCH_ID, "Invalid batch details given"); | |
| } | |
| } | |
| if (empty($request->staffId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_STAFF_ID, "Invalid staff details given"); | |
| } | |
| if (empty($request->documentId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_DOCUMENT_ID, "No document selected for copying"); | |
| } | |
| if (empty($request->subjectId) && empty($request->pseudoSubjectId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_SUBJECT_ID, "Invalid subject details given"); | |
| } | |
| $request->subjectId = $request->subjectId ? $request->subjectId : "NULL"; | |
| $request->pseudoSubjectId = $request->pseudoSubjectId ? $request->pseudoSubjectId : "NULL"; | |
| $request->batchId = $request->batchId ? $request->batchId : "NULL"; | |
| $request->semesterId = $request->semesterId ? $request->semesterId : "NULL"; | |
| try { | |
| $newId = SecurityUtils::getRandomString(); | |
| $sql = "INSERT INTO course_materials (id, resource_id, name, topic, staff_id, batch_id, semester_id, subject_id, | |
| pseudo_subject_id, description, created_by, created_date, updated_by, updated_date) | |
| SELECT '$newId',resource_id,name,topic,$request->staffId,$request->batchId,$request->semesterId, | |
| $request->subjectId, $request->pseudoSubjectId,description,staff_id,UTC_TIMESTAMP(), | |
| $request->staffId,UTC_TIMESTAMP() | |
| FROM course_materials WHERE id ='$request->documentId'"; | |
| $this->executeQueryForObject($sql); | |
| return $newId; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param $documentId | |
| * @return bool | |
| * @throws ProfessionalException | |
| */ | |
| public function isDocumentShared($documentId) | |
| { | |
| $sql = "SELECT id FROM course_materials | |
| WHERE is_shared_document=1 AND is_active=1 AND id= '$documentId'"; | |
| try { | |
| return $this->executeQueryForObject($sql)->id ? true : false; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * @param GetCourseMaterialRequest $request | |
| * @return array|object | |
| * @throws ProfessionalException | |
| */ | |
| public function getCourseMaterialsBySbsId(GetCourseMaterialRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->sbsId)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_SBS_ID, "Invalid request sent"); | |
| } | |
| if (empty($request->accessKey) || empty($request->secretKey)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_AWS_KEYS, "Invalid request sent"); | |
| } | |
| $sql = "SELECT t1.name, t1.resource_id as resourceId, | |
| DATE_FORMAT(CONVERT_TZ(t1.created_date,'+00:00',@@global.time_zone),'%d-%m-%Y %h:%i:%s %p') as createdDate, | |
| CONVERT(t1.description USING utf8) as description, | |
| CONVERT(t1.topic USING utf8) as topic,t1.visitors | |
| FROM course_materials t1 | |
| INNER JOIN sbs_relation t2 ON t1.staff_id = t2.staffID AND t1.batch_id = t2.batchID | |
| AND t1.subject_id = t2.subjectID AND t1.semester_id = t2.semID | |
| WHERE t2.sbsID= " . $request->sbsId; | |
| try { | |
| $courseMaterials = $this->executeQueryForList($sql); | |
| if ($request->generateUrl) { | |
| foreach ($courseMaterials as $courseMaterial) { | |
| $getRequest = new GetPreSignedUrlRequest(); | |
| $getRequest->resourceId = $courseMaterial->resourceId; | |
| $getRequest->secretKey = $request->secretKey; | |
| $getRequest->accessKey = $request->accessKey; | |
| try { | |
| $url = ResourceService::getInstance()->getPreSignedUrlByResourceId($getRequest); | |
| } catch (\Throwable $th) { | |
| $url = new \stdClass(); | |
| $url->url = ""; | |
| } | |
| $courseMaterial->url = $url->url; | |
| } | |
| } | |
| return $courseMaterials; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function getCourseMaterialById($id) | |
| { | |
| $id = $this->realEscapeObject($id); | |
| $sql = "SELECT t1.name, t1.resource_id as resourceId, | |
| DATE_FORMAT(CONVERT_TZ(t1.created_date,'+00:00',@@global.time_zone),'%d-%m-%Y %h:%i:%s %p') as createdDate, | |
| t1.description, t1.topic, sa.staffName, sa.staffID | |
| FROM course_materials t1 | |
| INNER JOIN sbs_relation t2 ON t1.staff_id = t2.staffID AND t1.batch_id = t2.batchID | |
| AND t1.subject_id = t2.subjectID AND t1.semester_id = t2.semID | |
| INNER JOIN staffaccounts sa ON sa.staffID=t1.staff_id | |
| WHERE t1.id= '$id'"; | |
| try { | |
| $courseMaterials = $this->executeQueryForObject($sql); | |
| return $courseMaterials; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function getVideoContentByVideoId($videoId) | |
| { | |
| $videoId = $this->realEscapeObject($videoId); | |
| $sql = "SELECT * FROM batch_video_repository where id='$videoId'"; | |
| try { | |
| return $this->executeQueryForObject($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function getVideoMaterialsBySbsId($request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $where = []; | |
| $request->sbsId?$where []= " sbs.sbsID = $request->sbsId ":""; | |
| $request->staffId?$where []= " sbs.staffID = $request->staffId ":""; | |
| $request = $this->realEscapeObject($request); | |
| $sql = "select bvr.id,bvr.title,bvr.url,bvr.description,bvr.keywords,bvr.thumbnail,bvr.batchID,bat.batchName,null as createdDate,null as resourceId | |
| from sbs_relation sbs | |
| inner join batch_video_repository bvr on bvr.batchID = sbs.batchID and bvr.staffID = sbs.staffID | |
| inner join batches bat on bat.batchID = sbs.batchID | |
| ".($where?" WHERE ".implode(' AND ',$where):"")." | |
| group by bvr.id;"; | |
| try { | |
| return empty($where)?[]:$this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function getUploadedCourseMaterialByTopicId($topicId,$psId) | |
| { | |
| $topicId = $this->realEscapeString($topicId); | |
| $psId = $this->realEscapeString($psId); | |
| $psCond = $psId?" AND pseudo_subject_id = $psId":" AND pseudo_subject_id IS NULL "; | |
| $sql = "SELECT id as courseMatId, name, topic, topic_id as topicId | |
| from course_materials where topic_id = $topicId $psCond"; | |
| try { | |
| return $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| } |