// swad_course.c: edition of courses #ifndef _SWAD_CRS #define _SWAD_CRS /* SWAD (Shared Workspace At a Distance in Spanish), is a web platform developed at the University of Granada (Spain), and used to support university teaching. This file is part of SWAD core. Copyright (C) 1999-2019 Antonio Caņas Vargas This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ /*****************************************************************************/ /********************************* Headers ***********************************/ /*****************************************************************************/ #include // To access MySQL databases #include // For boolean type #include "swad_degree.h" #include "swad_user.h" /*****************************************************************************/ /***************************** Public constants ******************************/ /*****************************************************************************/ #define Crs_MAX_COURSES_PER_USR 100 // Used in list of my courses and list of distinct courses in sent or received messages #define Crs_MAX_CHARS_INSTITUTIONAL_CRS_COD (16 - 1) // 15 #define Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD ((Crs_MAX_CHARS_INSTITUTIONAL_CRS_COD + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 255 #define Crs_MIN_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS 6 #define Crs_DEF_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS 12 #define Crs_MAX_MONTHS_WITHOUT_ACCESS_TO_REMOVE_OLD_CRSS 60 /*****************************************************************************/ /******************************* Public types ********************************/ /*****************************************************************************/ typedef enum { Crs_STATUS_BIT_PENDING = (1 << 0), // Course is requested, but not yet activated Crs_STATUS_BIT_REMOVED = (1 << 1), // Course has been removed } Crs_Status_Bits_t; typedef unsigned Crs_Status_t; #define Crs_MAX_STATUS ((Crs_Status_t) 3) #define Crs_WRONG_STATUS ((Crs_Status_t) (Crs_MAX_STATUS + 1)) #define Crs_NUM_STATUS_TXT 4 typedef enum { Crs_STATUS_UNKNOWN = 0, // Other Crs_STATUS_ACTIVE = 1, // 00 (Status == 0) Crs_STATUS_PENDING = 2, // 01 (Status == Crs_STATUS_BIT_PENDING) Crs_STATUS_REMOVED = 3, // 1- (Status & Crs_STATUS_BIT_REMOVED) } Crs_StatusTxt_t; typedef enum { Crs_ACTIVE_COURSES = 0, // Courses with all Status bits == 0 Crs_ALL_COURSES_EXCEPT_REMOVED = 1, // Courses with Status bit Crs_STATUS_BIT_REMOVED == 0 } Crs_WhatCourses_t; struct Course { long CrsCod; char InstitutionalCrsCod[Crs_MAX_BYTES_INSTITUTIONAL_CRS_COD + 1]; // Institutional code of the course long DegCod; unsigned Year; // Year: 0 (optatives), 1, 2, 3... unsigned Status; // Course status long RequesterUsrCod; // User code of the person who requested the creation of this course char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1]; // Short name of course char FullName[Hie_MAX_BYTES_FULL_NAME + 1]; // Full name of course unsigned NumUsrs[Rol_NUM_ROLES]; // Number of users }; /*****************************************************************************/ /***************************** Public prototypes *****************************/ /*****************************************************************************/ void Crs_ShowIntroduction (void); void Crs_PrintConfiguration (void); void Crs_ContEditAfterChgCrsInConfig (void); unsigned Crs_GetNumCrssTotal (void); unsigned Crs_GetNumCrssInCty (long CtyCod); unsigned Crs_GetNumCrssInIns (long InsCod); unsigned Crs_GetNumCrssInCtr (long CtrCod); unsigned Crs_GetNumCrssInDeg (long DegCod); unsigned Crs_GetNumCrssWithUsrs (Rol_Role_t Role,const char *SubQuery); void Crs_WriteSelectorOfCourse (void); void Crs_ShowCrssOfCurrentDeg (void); void Crs_FreeListCoursesInCurrentDegree (void); void Crs_WriteSelectorMyCoursesInBreadcrumb (void); void Crs_EditCourses (void); void Crs_RecFormReqCrs (void); void Crs_RecFormNewCrs (void); void Crs_RemoveCourse (void); bool Crs_GetDataOfCourseByCod (struct Course *Crs); void Crs_RemoveCourseCompletely (long CrsCod); void Crs_ChangeInsCrsCodInConfig (void); void Crs_ChangeInsCrsCod (void); void Crs_ChangeCrsDegInConfig (void); void Crs_ChangeCrsYearInConfig (void); void Crs_ChangeCrsYear (void); void Crs_UpdateInstitutionalCrsCod (struct Course *Crs,const char *NewInstitutionalCrsCod); void Crs_RenameCourseShort (void); void Crs_RenameCourseFull (void); void Crs_RenameCourseShortInConfig (void); void Crs_RenameCourseFullInConfig (void); void Crs_ChangeCrsStatus (void); void Crs_ContEditAfterChgCrs (void); void Crs_PutIconToSelectMyCoursesInBreadcrumb (void); void Crs_PutIconToSelectMyCourses (void); void Crs_PutParamCrsCod (long CrsCod); void Crs_ReqSelectOneOfMyCourses (void); void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role); void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss); void Crs_UpdateCrsLast (void); void Crs_PutLinkToRemoveOldCrss (void); void Crs_AskRemoveOldCrss (void); void Crs_RemoveOldCrss (void); #endif