Version 16.77

This commit is contained in:
Antonio Cañas Vargas 2016-11-29 15:02:23 +01:00
parent 6add447c4e
commit c899d13400
8 changed files with 1484 additions and 848 deletions

View File

@ -81,7 +81,7 @@ extern struct Globals Gbl;
/************************ Internal global variables **************************/ /************************ Internal global variables **************************/
/*****************************************************************************/ /*****************************************************************************/
/* /*
1230 actions in one CGI: 1232 actions in one CGI:
0. ActAll Any action (used for statistics) 0. ActAll Any action (used for statistics)
1. ActUnk Unknown action 1. ActUnk Unknown action
2. ActHom Show home menu 2. ActHom Show home menu
@ -1328,7 +1328,7 @@ Profile:
1141. ActMyCrs Select one of my courses 1141. ActMyCrs Select one of my courses
1142. ActSeeMyTT Show the timetable of all courses of the logged user 1142. ActSeeMyTT Show the timetable of all courses of the logged user
1143. ActSeeMyAgd Show my agenda (personal organizer) 1143. ActSeeMyAgd Show my agenda (personal organizer)
1144. ActSeeMyLoc Show my location 1144. ActSeeMyLoc Show my locations
1145. ActFrmMyAcc Show form to the creation or change of user's account 1145. ActFrmMyAcc Show form to the creation or change of user's account
1146. ActReqEdiRecCom Request the edition of the record with the personal data of the user 1146. ActReqEdiRecCom Request the edition of the record with the personal data of the user
1147. ActEdiPrf Show forms to edit preferences 1147. ActEdiPrf Show forms to edit preferences
@ -1344,89 +1344,91 @@ Profile:
1155. ActAnnSee Mark announcement as seen 1155. ActAnnSee Mark announcement as seen
1156. ActChgMyRol Change type of logged user 1156. ActChgMyRol Change type of logged user
1157. ActEdiLoc Edit my locations 1157. ActFrmNewLoc Form to create a new location
1158. ActNewLoc Request the creation of a location 1158. ActEdiOneLoc Edit one location
1159. ActRemLoc Remove a location 1159. ActNewLoc Create new location
1160. ActChgLocStrDat Change start date of a location 1160. ActChgLoc Modify data of an existing location
1161. ActChgLocEndDat Change end date of a location 1161. ActReqRemLoc Request the removal of a location
1162. ActRenLoc Rename a location 1162. ActRemLoc Remove location
1163. ActHidLoc Hide location
1164. ActShoLoc Show location
1163. ActChkUsrAcc Check if already exists a new account without password associated to a ID 1165. ActChkUsrAcc Check if already exists a new account without password associated to a ID
1164. ActCreUsrAcc Create new user account 1166. ActCreUsrAcc Create new user account
1165. ActRemID_Me Remove one of my user's IDs 1167. ActRemID_Me Remove one of my user's IDs
1166. ActNewIDMe Create a new user's ID for me 1168. ActNewIDMe Create a new user's ID for me
1167. ActRemOldNic Remove one of my old nicknames 1169. ActRemOldNic Remove one of my old nicknames
1168. ActChgNic Change my nickname 1170. ActChgNic Change my nickname
1169. ActRemMaiMe Remove one of my old emails 1171. ActRemMaiMe Remove one of my old emails
1170. ActNewMaiMe Change my email address 1172. ActNewMaiMe Change my email address
1171. ActCnfMai Confirm email address 1173. ActCnfMai Confirm email address
1172. ActFrmChgMyPwd Show form to the change of the password 1174. ActFrmChgMyPwd Show form to the change of the password
1173. ActChgPwd Change the password 1175. ActChgPwd Change the password
1174. ActReqRemMyAcc Request the removal of my account 1176. ActReqRemMyAcc Request the removal of my account
1175. ActRemMyAcc Remove my account 1177. ActRemMyAcc Remove my account
1176. ActChgMyData Update my personal data 1178. ActChgMyData Update my personal data
1177. ActReqMyPho Show form to send my photo 1179. ActReqMyPho Show form to send my photo
1178. ActDetMyPho Receive my photo and detect faces on it 1180. ActDetMyPho Receive my photo and detect faces on it
1179. ActUpdMyPho Update my photo 1181. ActUpdMyPho Update my photo
1180. ActReqRemMyPho Request the removal of my photo 1182. ActReqRemMyPho Request the removal of my photo
1181. ActRemMyPho Remove my photo 1183. ActRemMyPho Remove my photo
1182. ActEdiPri Edit my privacy 1184. ActEdiPri Edit my privacy
1183. ActChgPriPho Change privacy of my photo 1185. ActChgPriPho Change privacy of my photo
1184. ActChgPriPrf Change privacy of my public profile 1186. ActChgPriPrf Change privacy of my public profile
1185. ActReqEdiMyIns Request the edition of my institution, centre and department 1187. ActReqEdiMyIns Request the edition of my institution, centre and department
1186. ActChgCtyMyIns Change the country of my institution 1188. ActChgCtyMyIns Change the country of my institution
1187. ActChgMyIns Change my institution 1189. ActChgMyIns Change my institution
1188. ActChgMyCtr Change my centre 1190. ActChgMyCtr Change my centre
1189. ActChgMyDpt Change my department 1191. ActChgMyDpt Change my department
1190. ActChgMyOff Change my office 1192. ActChgMyOff Change my office
1191. ActChgMyOffPho Change my office phone 1193. ActChgMyOffPho Change my office phone
1192. ActReqEdiMyNet Request the edition of my social networks 1194. ActReqEdiMyNet Request the edition of my social networks
1193. ActChgMyNet Change my web and social networks 1195. ActChgMyNet Change my web and social networks
1194. ActChgThe Change theme 1196. ActChgThe Change theme
1195. ActReqChgLan Ask if change language 1197. ActReqChgLan Ask if change language
1196. ActChgLan Change language 1198. ActChgLan Change language
1197. ActChg1stDay Change first day of the week 1199. ActChg1stDay Change first day of the week
1198. ActChgCol Change side columns 1200. ActChgCol Change side columns
1119. ActHidLftCol Hide left side column 1201. ActHidLftCol Hide left side column
1200. ActHidRgtCol Hide right side column 1202. ActHidRgtCol Hide right side column
1201. ActShoLftCol Show left side column 1203. ActShoLftCol Show left side column
1202. ActShoRgtCol Show right side column 1204. ActShoRgtCol Show right side column
1203. ActChgIco Change icon set 1205. ActChgIco Change icon set
1204. ActChgMnu Change menu 1206. ActChgMnu Change menu
1205. ActChgNtfPrf Change whether to notify by email new messages 1207. ActChgNtfPrf Change whether to notify by email new messages
1206. ActPrnUsrQR Show my QR code ready to print 1208. ActPrnUsrQR Show my QR code ready to print
1207. ActPrnMyTT Show the timetable listo to impresión of all my courses 1209. ActPrnMyTT Show the timetable listo to impresión of all my courses
1208. ActEdiTut Edit the timetable of tutorías 1210. ActEdiTut Edit the timetable of tutorías
1209. ActChgTut Modify the timetable of tutorías 1211. ActChgTut Modify the timetable of tutorías
1210. ActChgMyTT1stDay Change first day of week and show timetable of the course 1212. ActChgMyTT1stDay Change first day of week and show timetable of the course
1211. ActReqRemFilBrf Request removal of a file of the briefcase 1213. ActReqRemFilBrf Request removal of a file of the briefcase
1212. ActRemFilBrf Remove a file of the briefcase 1214. ActRemFilBrf Remove a file of the briefcase
1213. ActRemFolBrf Remove a folder empty of the briefcase 1215. ActRemFolBrf Remove a folder empty of the briefcase
1214. ActCopBrf Set source of copy in the briefcase 1216. ActCopBrf Set source of copy in the briefcase
1215. ActPasBrf Paste a folder or file in the briefcase 1217. ActPasBrf Paste a folder or file in the briefcase
1216. ActRemTreBrf Remove a folder no empty of the briefcase 1218. ActRemTreBrf Remove a folder no empty of the briefcase
1217. ActFrmCreBrf Form to crear a folder or file in the briefcase 1219. ActFrmCreBrf Form to crear a folder or file in the briefcase
1218. ActCreFolBrf Create a new folder in the briefcase 1220. ActCreFolBrf Create a new folder in the briefcase
1219. ActCreLnkBrf Create a new link in the briefcase 1221. ActCreLnkBrf Create a new link in the briefcase
1220. ActRenFolBrf Rename a folder of the briefcase 1222. ActRenFolBrf Rename a folder of the briefcase
1221. ActRcvFilBrfDZ Receive a file in the briefcase using Dropzone.js 1223. ActRcvFilBrfDZ Receive a file in the briefcase using Dropzone.js
1222. ActRcvFilBrfCla Receive a file in the briefcase using the classic way 1224. ActRcvFilBrfCla Receive a file in the briefcase using the classic way
1223. ActExpBrf Expand a folder in briefcase 1225. ActExpBrf Expand a folder in briefcase
1224. ActConBrf Contract a folder in briefcase 1226. ActConBrf Contract a folder in briefcase
1225. ActZIPBrf Compress a folder in briefcase 1227. ActZIPBrf Compress a folder in briefcase
1226. ActReqDatBrf Ask for metadata of a file in the briefcase 1228. ActReqDatBrf Ask for metadata of a file in the briefcase
1227. ActChgDatBrf Change metadata of a file in the briefcase 1229. ActChgDatBrf Change metadata of a file in the briefcase
1228. ActDowBrf Download a file in the briefcase 1230. ActDowBrf Download a file in the briefcase
1229. ActReqRemOldBrf Ask for removing old files in the briefcase 1231. ActReqRemOldBrf Ask for removing old files in the briefcase
1230. ActRemOldBrf Remove old files in the briefcase 1232. ActRemOldBrf Remove old files in the briefcase
*/ */
struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
@ -2792,12 +2794,14 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActAnnSee */{1234,-1,TabUnk,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ann_MarkAnnouncementAsSeen ,NULL}, /* ActAnnSee */{1234,-1,TabUnk,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ann_MarkAnnouncementAsSeen ,NULL},
/* ActChgMyRol */{ 589,-1,TabUnk,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Rol_ChangeMyRole ,Usr_ShowFormsLogoutAndRole ,NULL}, /* ActChgMyRol */{ 589,-1,TabUnk,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,Rol_ChangeMyRole ,Usr_ShowFormsLogoutAndRole ,NULL},
/* ActEdiLoc */{1603,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_EditLocations ,NULL}, /* ActFrmNewLoc */{1603,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RequestCreatOrEditLoc ,NULL},
/* ActNewLoc */{1604,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RecFormNewLocation ,NULL}, /* ActEdiOneLoc */{1604,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RequestCreatOrEditLoc ,NULL},
/* ActRemLoc */{1605,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RemoveLocation ,NULL}, /* ActNewLoc */{1605,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RecFormLocation ,NULL},
/* ActChgLocStrDat */{1606,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_ChangeStartDate ,NULL}, /* ActChgLoc */{1606,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RecFormLocation ,NULL},
/* ActChgLocEndDat */{1607,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_ChangeEndDate ,NULL}, /* ActReqRemLoc */{1607,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_AskRemLocation ,NULL},
/* ActRenLoc */{1608,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RenameLocation ,NULL}, /* ActRemLoc */{1608,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_RemoveLocation ,NULL},
/* ActHidLoc */{1609,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_HideLocation ,NULL},
/* ActShoLoc */{1610,-1,TabUnk,ActSeeMyLoc ,0x100,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Loc_ShowLocation ,NULL},
/* ActChkUsrAcc */{1584,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_CheckIfEmptyAccountExists ,NULL}, /* ActChkUsrAcc */{1584,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_CheckIfEmptyAccountExists ,NULL},
/* ActCreUsrAcc */{1163,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_AfterCreationNewAccount ,NULL}, /* ActCreUsrAcc */{1163,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_AfterCreationNewAccount ,NULL},
@ -4491,12 +4495,14 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActRenCrsFulCfg, // #1600 ActRenCrsFulCfg, // #1600
ActRenCrsShoCfg, // #1601 ActRenCrsShoCfg, // #1601
ActSeeMyLoc, // #1602 ActSeeMyLoc, // #1602
ActEdiLoc, // #1603 ActFrmNewLoc, // #1603
ActNewLoc, // #1604 ActEdiOneLoc, // #1604
ActRemLoc, // #1605 ActNewLoc, // #1605
ActChgLocStrDat, // #1606 ActChgLoc, // #1606
ActChgLocEndDat, // #1607 ActReqRemLoc, // #1607
ActRenLoc, // #1608 ActRemLoc, // #1608
ActHidLoc, // #1609
ActShoLoc, // #1610
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -55,9 +55,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1+9+51+14+93+73+70+249+186+155+172+36+31+92) #define Act_NUM_ACTIONS (1+9+51+14+93+73+70+249+186+155+172+36+31+94)
#define Act_MAX_ACTION_COD 1608 #define Act_MAX_ACTION_COD 1610
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 11 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 11
@ -1381,90 +1381,92 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActAutUsrChgLan (ActSeeMyUsgRep+16) #define ActAutUsrChgLan (ActSeeMyUsgRep+16)
#define ActAnnSee (ActSeeMyUsgRep+17) #define ActAnnSee (ActSeeMyUsgRep+17)
#define ActChgMyRol (ActSeeMyUsgRep+18) #define ActChgMyRol (ActSeeMyUsgRep+18)
#define ActEdiLoc (ActSeeMyUsgRep+19) #define ActFrmNewLoc (ActSeeMyUsgRep+19)
#define ActNewLoc (ActSeeMyUsgRep+20) #define ActEdiOneLoc (ActSeeMyUsgRep+20)
#define ActRemLoc (ActSeeMyUsgRep+21) #define ActNewLoc (ActSeeMyUsgRep+21)
#define ActChgLocStrDat (ActSeeMyUsgRep+22) #define ActChgLoc (ActSeeMyUsgRep+22)
#define ActChgLocEndDat (ActSeeMyUsgRep+23) #define ActReqRemLoc (ActSeeMyUsgRep+23)
#define ActRenLoc (ActSeeMyUsgRep+24) #define ActRemLoc (ActSeeMyUsgRep+24)
#define ActChkUsrAcc (ActSeeMyUsgRep+25) #define ActHidLoc (ActSeeMyUsgRep+25)
#define ActCreUsrAcc (ActSeeMyUsgRep+26) #define ActShoLoc (ActSeeMyUsgRep+26)
#define ActRemID_Me (ActSeeMyUsgRep+27) #define ActChkUsrAcc (ActSeeMyUsgRep+27)
#define ActNewIDMe (ActSeeMyUsgRep+28) #define ActCreUsrAcc (ActSeeMyUsgRep+28)
#define ActRemOldNic (ActSeeMyUsgRep+29) #define ActRemID_Me (ActSeeMyUsgRep+29)
#define ActChgNic (ActSeeMyUsgRep+30) #define ActNewIDMe (ActSeeMyUsgRep+30)
#define ActRemMaiMe (ActSeeMyUsgRep+31) #define ActRemOldNic (ActSeeMyUsgRep+31)
#define ActNewMaiMe (ActSeeMyUsgRep+32) #define ActChgNic (ActSeeMyUsgRep+32)
#define ActCnfMai (ActSeeMyUsgRep+33) #define ActRemMaiMe (ActSeeMyUsgRep+33)
#define ActFrmChgMyPwd (ActSeeMyUsgRep+34) #define ActNewMaiMe (ActSeeMyUsgRep+34)
#define ActChgPwd (ActSeeMyUsgRep+35) #define ActCnfMai (ActSeeMyUsgRep+35)
#define ActReqRemMyAcc (ActSeeMyUsgRep+36) #define ActFrmChgMyPwd (ActSeeMyUsgRep+36)
#define ActRemMyAcc (ActSeeMyUsgRep+37) #define ActChgPwd (ActSeeMyUsgRep+37)
#define ActReqRemMyAcc (ActSeeMyUsgRep+38)
#define ActRemMyAcc (ActSeeMyUsgRep+39)
#define ActChgMyData (ActSeeMyUsgRep+38) #define ActChgMyData (ActSeeMyUsgRep+40)
#define ActReqMyPho (ActSeeMyUsgRep+39) #define ActReqMyPho (ActSeeMyUsgRep+41)
#define ActDetMyPho (ActSeeMyUsgRep+40) #define ActDetMyPho (ActSeeMyUsgRep+42)
#define ActUpdMyPho (ActSeeMyUsgRep+41) #define ActUpdMyPho (ActSeeMyUsgRep+43)
#define ActReqRemMyPho (ActSeeMyUsgRep+42) #define ActReqRemMyPho (ActSeeMyUsgRep+44)
#define ActRemMyPho (ActSeeMyUsgRep+43) #define ActRemMyPho (ActSeeMyUsgRep+45)
#define ActEdiPri (ActSeeMyUsgRep+44) #define ActEdiPri (ActSeeMyUsgRep+46)
#define ActChgPriPho (ActSeeMyUsgRep+45) #define ActChgPriPho (ActSeeMyUsgRep+47)
#define ActChgPriPrf (ActSeeMyUsgRep+46) #define ActChgPriPrf (ActSeeMyUsgRep+48)
#define ActReqEdiMyIns (ActSeeMyUsgRep+47) #define ActReqEdiMyIns (ActSeeMyUsgRep+49)
#define ActChgCtyMyIns (ActSeeMyUsgRep+48) #define ActChgCtyMyIns (ActSeeMyUsgRep+50)
#define ActChgMyIns (ActSeeMyUsgRep+49) #define ActChgMyIns (ActSeeMyUsgRep+51)
#define ActChgMyCtr (ActSeeMyUsgRep+50) #define ActChgMyCtr (ActSeeMyUsgRep+52)
#define ActChgMyDpt (ActSeeMyUsgRep+51) #define ActChgMyDpt (ActSeeMyUsgRep+53)
#define ActChgMyOff (ActSeeMyUsgRep+52) #define ActChgMyOff (ActSeeMyUsgRep+54)
#define ActChgMyOffPho (ActSeeMyUsgRep+53) #define ActChgMyOffPho (ActSeeMyUsgRep+55)
#define ActReqEdiMyNet (ActSeeMyUsgRep+54) #define ActReqEdiMyNet (ActSeeMyUsgRep+56)
#define ActChgMyNet (ActSeeMyUsgRep+55) #define ActChgMyNet (ActSeeMyUsgRep+57)
#define ActChgThe (ActSeeMyUsgRep+56) #define ActChgThe (ActSeeMyUsgRep+58)
#define ActReqChgLan (ActSeeMyUsgRep+57) #define ActReqChgLan (ActSeeMyUsgRep+59)
#define ActChgLan (ActSeeMyUsgRep+58) #define ActChgLan (ActSeeMyUsgRep+60)
#define ActChg1stDay (ActSeeMyUsgRep+59) #define ActChg1stDay (ActSeeMyUsgRep+61)
#define ActChgCol (ActSeeMyUsgRep+60) #define ActChgCol (ActSeeMyUsgRep+62)
#define ActHidLftCol (ActSeeMyUsgRep+61) #define ActHidLftCol (ActSeeMyUsgRep+63)
#define ActHidRgtCol (ActSeeMyUsgRep+62) #define ActHidRgtCol (ActSeeMyUsgRep+64)
#define ActShoLftCol (ActSeeMyUsgRep+63) #define ActShoLftCol (ActSeeMyUsgRep+65)
#define ActShoRgtCol (ActSeeMyUsgRep+64) #define ActShoRgtCol (ActSeeMyUsgRep+66)
#define ActChgIco (ActSeeMyUsgRep+65) #define ActChgIco (ActSeeMyUsgRep+67)
#define ActChgMnu (ActSeeMyUsgRep+66) #define ActChgMnu (ActSeeMyUsgRep+68)
#define ActChgNtfPrf (ActSeeMyUsgRep+67) #define ActChgNtfPrf (ActSeeMyUsgRep+69)
#define ActPrnUsrQR (ActSeeMyUsgRep+68) #define ActPrnUsrQR (ActSeeMyUsgRep+70)
#define ActPrnMyTT (ActSeeMyUsgRep+69) #define ActPrnMyTT (ActSeeMyUsgRep+71)
#define ActEdiTut (ActSeeMyUsgRep+70) #define ActEdiTut (ActSeeMyUsgRep+72)
#define ActChgTut (ActSeeMyUsgRep+71) #define ActChgTut (ActSeeMyUsgRep+73)
#define ActChgMyTT1stDay (ActSeeMyUsgRep+72) #define ActChgMyTT1stDay (ActSeeMyUsgRep+74)
#define ActReqRemFilBrf (ActSeeMyUsgRep+73) #define ActReqRemFilBrf (ActSeeMyUsgRep+75)
#define ActRemFilBrf (ActSeeMyUsgRep+74) #define ActRemFilBrf (ActSeeMyUsgRep+76)
#define ActRemFolBrf (ActSeeMyUsgRep+75) #define ActRemFolBrf (ActSeeMyUsgRep+77)
#define ActCopBrf (ActSeeMyUsgRep+76) #define ActCopBrf (ActSeeMyUsgRep+78)
#define ActPasBrf (ActSeeMyUsgRep+77) #define ActPasBrf (ActSeeMyUsgRep+79)
#define ActRemTreBrf (ActSeeMyUsgRep+78) #define ActRemTreBrf (ActSeeMyUsgRep+80)
#define ActFrmCreBrf (ActSeeMyUsgRep+79) #define ActFrmCreBrf (ActSeeMyUsgRep+81)
#define ActCreFolBrf (ActSeeMyUsgRep+80) #define ActCreFolBrf (ActSeeMyUsgRep+82)
#define ActCreLnkBrf (ActSeeMyUsgRep+81) #define ActCreLnkBrf (ActSeeMyUsgRep+83)
#define ActRenFolBrf (ActSeeMyUsgRep+82) #define ActRenFolBrf (ActSeeMyUsgRep+84)
#define ActRcvFilBrfDZ (ActSeeMyUsgRep+83) #define ActRcvFilBrfDZ (ActSeeMyUsgRep+85)
#define ActRcvFilBrfCla (ActSeeMyUsgRep+84) #define ActRcvFilBrfCla (ActSeeMyUsgRep+86)
#define ActExpBrf (ActSeeMyUsgRep+85) #define ActExpBrf (ActSeeMyUsgRep+87)
#define ActConBrf (ActSeeMyUsgRep+86) #define ActConBrf (ActSeeMyUsgRep+88)
#define ActZIPBrf (ActSeeMyUsgRep+87) #define ActZIPBrf (ActSeeMyUsgRep+89)
#define ActReqDatBrf (ActSeeMyUsgRep+88) #define ActReqDatBrf (ActSeeMyUsgRep+90)
#define ActChgDatBrf (ActSeeMyUsgRep+89) #define ActChgDatBrf (ActSeeMyUsgRep+91)
#define ActDowBrf (ActSeeMyUsgRep+90) #define ActDowBrf (ActSeeMyUsgRep+92)
#define ActReqRemOldBrf (ActSeeMyUsgRep+91) #define ActReqRemOldBrf (ActSeeMyUsgRep+93)
#define ActRemOldBrf (ActSeeMyUsgRep+92) #define ActRemOldBrf (ActSeeMyUsgRep+94)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Public types *******************************/ /******************************** Public types *******************************/

View File

@ -172,17 +172,23 @@
// TODO: List only confirmed emails to send a message with MESSAGES > Email ? // TODO: List only confirmed emails to send a message with MESSAGES > Email ?
// TODO: When activating folders in groups, go to section for that type of group
// TODO: I can not remove a folder inside assignments (see swad.ugr.es -> EC -> assignment acanas)
// TODO: When teacher sees "No hay estudiantes", put a button to add students
// TODO: When admin sees "No hay profesores", put a button to add teachers
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.76 (2016-11-29)" #define Log_PLATFORM_VERSION "SWAD 16.77 (2016-11-29)"
#define CSS_FILE "swad16.69.css" #define CSS_FILE "swad16.69.css"
#define JS_FILE "swad16.46.1.js" #define JS_FILE "swad16.46.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 16.77: Nov 29, 2016 Changes in location. Not finished. (209483 lines)
Version 16.76: Nov 29, 2016 New form to create location. Not finished. (208936 lines) Version 16.76: Nov 29, 2016 New form to create location. Not finished. (208936 lines)
8 changes necessary in database: 8 changes necessary in database:
CREATE TABLE IF NOT EXISTS locations (LocCod INT NOT NULL AUTO_INCREMENT,StartDate DATE NOT NULL,EndDate DATE NOT NULL,Location VARCHAR(255) NOT NULL,UNIQUE INDEX(LocCod)); CREATE TABLE IF NOT EXISTS locations (LocCod INT NOT NULL AUTO_INCREMENT,StartDate DATE NOT NULL,EndDate DATE NOT NULL,Location VARCHAR(255) NOT NULL,UNIQUE INDEX(LocCod));

View File

@ -357,11 +357,11 @@ struct Globals
} MyCrss; } MyCrss;
struct struct
{ {
bool LstIsRead; // Is the list already read from database, or it needs to be read? bool LstIsRead; // Is the list already read from database, or it needs to be read?
unsigned Num; // Number of locations unsigned Num; // Number of locations
struct Location *Lst; // List of locations long *LstLocCods; // List of location codes
struct Location EditingLoc; Loc_Order_t SelectedOrderType;
Loc_OrderType_t SelectedOrderType; long LocCodToEdit; // Used as parameter in contextual links
} Locs; } Locs;
Usr_ShowUsrsType_t ListType; // My preference about user's list type Usr_ShowUsrsType_t ListType; // My preference about user's list type
unsigned NumFollowers; // Number of users who follow me unsigned NumFollowers; // Number of users who follow me

View File

@ -227,8 +227,9 @@ const char *Hlp_PROFILE_Courses = WIKI "PROFILE.Courses";
const char *Hlp_PROFILE_Timetable = WIKI "PROFILE.Timetable"; const char *Hlp_PROFILE_Timetable = WIKI "PROFILE.Timetable";
const char *Hlp_PROFILE_Location = WIKI "PROFILE.Location"; const char *Hlp_PROFILE_Location = WIKI "PROFILE.Location";
const char *Hlp_PROFILE_Location_edit = WIKI "PROFILE.Location#edit"; const char *Hlp_PROFILE_Location_new_location = WIKI "PROFILE.Location#new-location";
const char *Hlp_PROFILE_Location_edit_location = WIKI "PROFILE.Location#edit-location";
const char *Hlp_PROFILE_Record = WIKI "PROFILE.Record"; const char *Hlp_PROFILE_Record = WIKI "PROFILE.Record";
const char *Hlp_PROFILE_Institution = WIKI "PROFILE.Institution"; const char *Hlp_PROFILE_Institution = WIKI "PROFILE.Institution";

File diff suppressed because it is too large Load Diff

View File

@ -28,33 +28,51 @@
/*****************************************************************************/ /*****************************************************************************/
#include "swad_date.h" #include "swad_date.h"
#include "swad_place.h" #include "swad_user.h"
/*****************************************************************************/ /*****************************************************************************/
/************************** Public types and constants ***********************/ /************************** Public types and constants ***********************/
/*****************************************************************************/ /*****************************************************************************/
#define Loc_MAX_LENGTH_LOCATION 255 #define Loc_MAX_LENGTH_ASSIGNMENT_TITLE 255
#define Loc_MAX_LENGTH_FOLDER 32
#define Loc_NUM_TYPES_SEND_WORK 2
typedef enum typedef enum
{ {
LOC_START_DATE, Loc_DO_NOT_SEND_WORK = 0,
LOC_END_DATE Loc_SEND_WORK = 1,
} Loc_StartOrEndDate_t; } Loc_SendWork_t;
#define Loc_NUM_DATES 2
typedef enum
{
Loc_START_TIME = 0,
Loc_END_TIME = 1,
} Loc_StartOrEndTime_t;
struct Location struct Location
{ {
long LocCod; long LocCod;
struct Date StartDate; bool Hidden;
struct Date EndDate; long UsrCod;
char Location[Loc_MAX_LENGTH_LOCATION+1]; time_t TimeUTC[Loc_NUM_DATES];
bool Open;
char Title[Loc_MAX_LENGTH_ASSIGNMENT_TITLE+1];
Loc_SendWork_t SendWork;
char Folder[Loc_MAX_LENGTH_FOLDER+1];
bool IBelongToCrsOrGrps; // I can do this location
// (it is associated to no groups
// or, if associated to groups,
// I belong to any of the groups)
}; };
typedef enum typedef enum
{ {
Loc_ORDER_BY_START_DATE = 0, Loc_ORDER_BY_START_DATE = 0,
Loc_ORDER_BY_END_DATE = 1, Loc_ORDER_BY_END_DATE = 1,
} Loc_OrderType_t; } Loc_Order_t;
#define Loc_DEFAULT_ORDER_TYPE Loc_ORDER_BY_START_DATE #define Loc_DEFAULT_ORDER_TYPE Loc_ORDER_BY_START_DATE
@ -63,15 +81,24 @@ typedef enum
/*****************************************************************************/ /*****************************************************************************/
void Loc_SeeLocations (void); void Loc_SeeLocations (void);
void Loc_EditLocations (void); void Loc_PutHiddenParamLocOrderType (void);
void Loc_RequestCreatOrEditLoc (void);
void Loc_GetListLocations (void); void Loc_GetListLocations (void);
void Loc_GetDataOfLocationByCod (struct Location *Loc);
void Loc_FreeListLocations (void); void Loc_FreeListLocations (void);
void Loc_GetNotifLocation (char *SummaryStr,char **ContentStr,long LocCod,unsigned MaxChars,bool GetContent);
long Loc_GetParamLocCod (void); long Loc_GetParamLocCod (void);
void Loc_AskRemLocation (void);
void Loc_RemoveLocation (void); void Loc_RemoveLocation (void);
void Loc_ChangeStartDate (void); void Loc_HideLocation (void);
void Loc_ChangeEndDate (void); void Loc_ShowLocation (void);
void Loc_RenameLocation (void); void Loc_RecFormLocation (void);
void Loc_RecFormNewLocation (void); void Loc_RemoveCrsLocations (long CrsCod);
unsigned Loc_GetNumLocationsInCrs(long CrsCod);
unsigned Loc_GetNumCoursesWithLocations (Sco_Scope_t Scope);
unsigned Loc_GetNumLocations (Sco_Scope_t Scope,unsigned *NumNotif);
#endif #endif

View File

@ -6842,25 +6842,25 @@ const char *Txt_Created_new_link_X = // Warning: it is very important to include
"Criado nova liga&ccedil;&atilde;o <strong>%s</strong>."; "Criado nova liga&ccedil;&atilde;o <strong>%s</strong>.";
#endif #endif
const char *Txt_Created_new_location = const char *Txt_Created_new_location_X = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Creada nova ubicaci&oacute;."; "Creada nova ubicaci&oacute; <strong>%s</strong>.";
#elif L==2 #elif L==2
"Neuer Standort eingegeben."; "Neuer Standort <strong>%s</strong> eingegeben.";
#elif L==3 #elif L==3
"Created new location."; "Created new location <strong>%s</strong>.";
#elif L==4 #elif L==4
"Creada nueva ubicaci&oacute;n."; "Creada nueva ubicaci&oacute;n <strong>%s</strong>.";
#elif L==5 #elif L==5
"Cr&eacute;&eacute; nouvel emplacement."; "Cr&eacute;&eacute; nouvel emplacement <strong>%s</strong>.";
#elif L==6 #elif L==6
"Creada nueva ubicaci&oacute;n."; // Okoteve traducción "Creada nueva ubicaci&oacute;n <strong>%s</strong>."; // Okoteve traducción
#elif L==7 #elif L==7
"Creata nuova posizione."; "Creata nuova posizione <strong>%s</strong>.";
#elif L==8 #elif L==8
"Utworzono nowe lokacja."; "Utworzono nowe lokacja <strong>%s</strong>.";
#elif L==9 #elif L==9
"Criado nova localiza&ccedil;&atilde;o."; "Criado nova localiza&ccedil;&atilde;o <strong>%s</strong>.";
#endif #endif
const char *Txt_Created_new_place_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Created_new_place_X = // Warning: it is very important to include %s in the following sentences
@ -17110,25 +17110,25 @@ const char *Txt_Location =
"Localiza&ccedil;&atilde;o"; "Localiza&ccedil;&atilde;o";
#endif #endif
const char *Txt_Location_removed = const char *Txt_Location_X_removed = // Warning: it is very important to include %s in the following sentences
#if L==1 #if L==1
"Ubicaci&oacute; eliminada."; "Ubicaci&oacute; <strong>%s</strong> eliminada.";
#elif L==2 #elif L==2
"Standort entfernt."; "Standort <strong>%s</strong> entfernt.";
#elif L==3 #elif L==3
"Location removed."; "Location <strong>%s</strong> removed.";
#elif L==4 #elif L==4
"Ubicaci&oacute;n eliminada."; "Ubicaci&oacute;n <strong>%s</strong> eliminada.";
#elif L==5 #elif L==5
"Emplacement supprim&eacute;."; "Emplacement <strong>%s</strong> supprim&eacute;.";
#elif L==6 #elif L==6
"Ubicaci&oacute;n eliminada."; // Okoteve traducción "Ubicaci&oacute;n <strong>%s</strong> eliminada."; // Okoteve traducción
#elif L==7 #elif L==7
"Posizione rimossa."; "Posizione <strong>%s</strong> rimossa.";
#elif L==8 #elif L==8
"Lokacja usuniete."; "Lokacja <strong>%s</strong> usuniete.";
#elif L==9 #elif L==9
"Localiza&ccedil;&atilde;o removida."; "Localiza&ccedil;&atilde;o <strong>%s</strong> removida.";
#endif #endif
const char *Txt_Locations = const char *Txt_Locations =
@ -24572,6 +24572,27 @@ const char *Txt_No_institutions =
"N&atilde;o h&aacute; institu&ccedil;&otilde;es."; "N&atilde;o h&aacute; institu&ccedil;&otilde;es.";
#endif #endif
const char *Txt_No_locations =
#if L==1
"No hi ha ubicacions.";
#elif L==2
"Es gibt keine Standorte.";
#elif L==3
"No locations.";
#elif L==4
"No existen ubicaciones.";
#elif L==5
"Il n'y a pas d'emplacements.";
#elif L==6
"No existen ubicaciones."; // Okoteve traducción
#elif L==7
"Non ci sono posizioni.";
#elif L==8
"Brak lokalizacje.";
#elif L==9
"N&atilde;o existem localiza&ccedil;&otilde;es.";
#endif
const char *Txt_No_BR_msgs = const char *Txt_No_BR_msgs =
#if L==1 #if L==1
"N&ordm;<br />mens."; // Necessita traduccio "N&ordm;<br />mens."; // Necessita traduccio
@ -30787,6 +30808,27 @@ const char *Txt_Remove_link =
"Remover liga&ccedil;&atilde;o"; "Remover liga&ccedil;&atilde;o";
#endif #endif
const char *Txt_Remove_location =
#if L==1
"Eliminar ubicaci&oacute;";
#elif L==2
"Entfernen Standort";
#elif L==3
"Remove location";
#elif L==4
"Eliminar ubicaci&oacute;n";
#elif L==5
"Supprimer emplacement";
#elif L==6
"Eliminar ubicaci&oacute;n"; // Okoteve traducción
#elif L==7
"Rimuovere posizione";
#elif L==8
"Usu&nacute; lokacja";
#elif L==9
"Remover localiza&ccedil;&atilde;o";
#endif
const char *Txt_Remove_logo = const char *Txt_Remove_logo =
#if L==1 #if L==1
"Eliminar logo"; "Eliminar logo";
@ -42287,27 +42329,6 @@ const char *Txt_The_date_of_the_holiday_X_has_changed_to_Y = // Warning: it is v
"The date of the holiday <strong>%s</strong> has changed to <strong>%s</strong>."; // Necessita de tradução "The date of the holiday <strong>%s</strong> has changed to <strong>%s</strong>."; // Necessita de tradução
#endif #endif
const char *Txt_The_date_of_the_location_has_changed_to_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"La fecha de la festividad ha cambiado a <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"The date of the location has changed to <strong>%s</strong>."; // Need Übersetzung
#elif L==3
"The date of the location has changed to <strong>%s</strong>.";
#elif L==4
"La fecha de la ubicaci&oacute;n ha cambiado a <strong>%s</strong>.";
#elif L==5
"The date of the location has changed to <strong>%s</strong>."; // Besoin de traduction
#elif L==6
"La fecha de la ubicaci&oacute;n ha cambiado a <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"La data delle posizione &egrave; cambiata a <strong>%s</strong>.";
#elif L==8
"The date of the location has changed to <strong>%s</strong>."; // Potrzebujesz tlumaczenie
#elif L==9
"The date of the location has changed to <strong>%s</strong>."; // Necessita de tradução
#endif
const char *Txt_The_date_range_must_be_less_than_or_equal_to_X_days = // Warning: it is very important to include %u in the following sentences const char *Txt_The_date_range_must_be_less_than_or_equal_to_X_days = // Warning: it is very important to include %u in the following sentences
#if L==1 #if L==1
"El rango de fechas debe ser menor o igual a %u d&iacute;as."; // Necessita traduccio "El rango de fechas debe ser menor o igual a %u d&iacute;as."; // Necessita traduccio
@ -43580,48 +43601,6 @@ const char *Txt_The_list_of_X_users_is_too_large_to_be_displayed = // Warning: i
"The list of %u users is too large to be displayed."; // Necessita de tradução "The list of %u users is too large to be displayed."; // Necessita de tradução
#endif #endif
const char *Txt_The_location_has_changed_to_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"La ubicaci&oacute; ha canviat a <strong>%s</strong>.";
#elif L==2
"Der Standort wurde in <strong>%s</strong> ge&auml;ndert.";
#elif L==3
"The location has changed to <strong>%s</strong>.";
#elif L==4
"La ubicaci&oacute;n ha cambiado a <strong>%s</strong>.";
#elif L==5
"L'emplacement a chang&eacute; en <strong>%s</strong>.";
#elif L==6
"La ubicaci&oacute;n ha cambiado a <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"La posizione &egrave; cambiato a <strong>%s</strong>.";
#elif L==8
"Zmieniona na miejscu <strong>%s</strong>.";
#elif L==9
"A localiza&ccedil;&atilde;o mudou para <strong>%s</strong>.";
#endif
const char *Txt_The_location_has_not_changed =
#if L==1
"La ubicaci&oacute; no ha canviat.";
#elif L==2
"Der Standort wurde nicht ge&auml;ndert.";
#elif L==3
"The location has not changed.";
#elif L==4
"La ubicaci&oacute;n no ha cambiado.";
#elif L==5
"L'emplacement n'a pas chang&eacute;.";
#elif L==6
"La ubicaci&oacute;n no ha cambiado."; // Okoteve traducción
#elif L==7
"La posizione non &egrave; cambiato.";
#elif L==8
"Miejsca nie uleg&lstrok;a zmianie.";
#elif L==9
"A localiza&ccedil;&atilde;o n&atilde;o foi alterado.";
#endif
const char *Txt_The_lower_limit_of_correct_answers_must_be_less_than_or_equal_to_the_upper_limit = const char *Txt_The_lower_limit_of_correct_answers_must_be_less_than_or_equal_to_the_upper_limit =
#if L==1 #if L==1
"El l&iacute;mite inferior del intervalo de respuestas correctas" "El l&iacute;mite inferior del intervalo de respuestas correctas"
@ -46634,27 +46613,6 @@ const char *Txt_There_are_no_links =
"There are no links."; // Necessita de tradução "There are no links."; // Necessita de tradução
#endif #endif
const char *Txt_There_are_no_locations =
#if L==1
"No hi ha ubicacions.";
#elif L==2
"Es gibt keine Standorte.";
#elif L==3
"There are no locations.";
#elif L==4
"No existen ubicaciones.";
#elif L==5
"Il n'y a pas d'emplacements.";
#elif L==6
"No existen ubicaciones."; // Okoteve traducción
#elif L==7
"Non ci sono posizioni.";
#elif L==8
"Brak lokalizacje.";
#elif L==9
"N&atilde;o existem localiza&ccedil;&otilde;es.";
#endif
const char *Txt_There_are_no_places = const char *Txt_There_are_no_places =
#if L==1 #if L==1
"No existen lugares."; // Necessita traduccio "No existen lugares."; // Necessita traduccio
@ -52169,27 +52127,6 @@ const char *Txt_You_can_not_leave_the_IP_address_empty =
"You can not leave the IP address empty."; // Necessita de tradução "You can not leave the IP address empty."; // Necessita de tradução
#endif #endif
const char *Txt_You_can_not_leave_the_location_empty =
#if L==1
"No es pot deixar la ubicaci&oacute; buido.";
#elif L==2
"Sie k&ouml;nnen den Standort nicht leer lassen.";
#elif L==3
"You can not leave the location empty.";
#elif L==4
"No puede dejar la ubicaci&oacute;n vac&iacute;a.";
#elif L==5
"Vous ne pouvez pas laisser l'emplacement vide.";
#elif L==6
"No puede dejar la ubicaci&oacute;n vac&iacute;a."; // Okoteve traducción
#elif L==7
"Non puoi lasciare la posizione vuota.";
#elif L==8
"Nie mo&zdot;na pozostawi&cacute; miejsca pustego.";
#elif L==9
"Voc&ecirc; n&atilde;o pode deixar a localiza&ccedil;&atilde;o vazia.";
#endif
const char *Txt_You_can_not_leave_the_logo_empty = const char *Txt_You_can_not_leave_the_logo_empty =
#if L==1 #if L==1
"No puede dejar el logo vac&iacute;o."; // Necessita traduccio "No puede dejar el logo vac&iacute;o."; // Necessita traduccio
@ -54092,27 +54029,6 @@ const char *Txt_You_must_specify_the_name_of_the_new_type_of_group =
"You must specify the name of the new type of group."; // Necessita de tradução "You must specify the name of the new type of group."; // Necessita de tradução
#endif #endif
const char *Txt_You_must_specify_the_new_location =
#if L==1
"Cal especificar la nova ubicaci&oacute;.";
#elif L==2
"Sie m&uuml;ssen den neuen Speicherort angeben.";
#elif L==3
"You must specify the new location.";
#elif L==4
"Debe especificar la nueva ubicaci&oacute;n.";
#elif L==5
"Vous devez sp&eacute;cifier le nouvel emplacement.";
#elif L==6
"Debe especificar la nueva ubicaci&oacute;n."; // Okoteve traducción
#elif L==7
"Devi specificare la nuova posizione.";
#elif L==8
"Musisz poda&cacute; nazw&eogon; nowej lokalizacji.";
#elif L==9
"Voc&ecirc; deve especificar a nova localiza&ccedil;&atilde;o.";
#endif
const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_banner = const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_banner =
#if L==1 #if L==1
"Debe especificar el nombre breve y el nombre completo" "Debe especificar el nombre breve y el nombre completo"