Version 17.19

This commit is contained in:
Antonio Cañas Vargas 2017-10-06 15:13:19 +02:00
parent 39294f3b5e
commit f15e79f0a0
11 changed files with 376 additions and 132 deletions

View File

@ -248,19 +248,20 @@
// TODO: "Administrar varios profesores no editores" -> debería poder hacerlo un profesor (Perico)
// TODO: Copy icon/link64x64.gif to public directory in swad.ugr.es and openswad.org
// TODO: Mover PROFILE.Briefcase a FILES.Briefcase en la ayuda de GitHub (aquí ya está cambiado)
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.18 (2017-10-06)"
#define Log_PLATFORM_VERSION "SWAD 17.19 (2017-10-06)"
#define CSS_FILE "swad17.0.css"
#define JS_FILE "swad17.17.1.js"
// 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
/*
Version 17.19: Oct 06, 2017 New file browser for project documents. Not finished. (232781 lines)
Version 17.18: Oct 06, 2017 New view in projects for project file browser. (232547 lines)
1 change necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1697','es','N','Editar archivos proyecto');

View File

@ -336,9 +336,15 @@
/* Folders for courses, inside public and private swad directories */
#define Cfg_FOLDER_CRS "crs" // If not exists, it should be created during installation inside swad private and public directory!
/* Folders for groups, inside public and private swad directories */
#define Cfg_FOLDER_GRP "grp" // Created automatically the first time it is accessed
/* Folder for users, inside private swad directory */
#define Cfg_FOLDER_USR "usr" // Created automatically the first time it is accessed
/* Folders for projects, inside public and private swad directories */
#define Cfg_FOLDER_PRJ "prj" // Created automatically the first time it is accessed
/* Folder for temporary HTML output of this CGI, inside private swad directory */
#define Cfg_FOLDER_OUT "out" // Created automatically the first time it is accessed

View File

@ -130,6 +130,7 @@ const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER] =
Brw_ADMI_SHARE_INS, // Brw_ADMI_SHARE_INS = 24
Brw_ADMI_TEACH_CRS, // Brw_ADMI_TEACH_CRS = 25
Brw_ADMI_TEACH_GRP, // Brw_ADMI_TEACH_GRP = 26
Brw_ADMI_DOCUM_PRJ, // Brw_ADMI_DOCUM_PRJ = 27
};
// Browsers viewable shown in search for documents
const Brw_FileBrowser_t Brw_FileBrowserForFoundDocs[Brw_NUM_TYPES_FILE_BROWSER] =
@ -161,6 +162,7 @@ const Brw_FileBrowser_t Brw_FileBrowserForFoundDocs[Brw_NUM_TYPES_FILE_BROWSER]
Brw_ADMI_SHARE_INS, // Brw_ADMI_SHARE_INS = 24
Brw_ADMI_TEACH_CRS, // Brw_ADMI_TEACH_CRS = 25
Brw_ADMI_TEACH_GRP, // Brw_ADMI_TEACH_GRP = 26
Brw_ADMI_DOCUM_PRJ, // Brw_ADMI_DOCUM_PRJ = 27
};
// Browsers types for database "clipboard" table
static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE_BROWSER] =
@ -192,6 +194,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE
Brw_ADMI_SHARE_INS, // Brw_ADMI_SHARE_INS = 24
Brw_ADMI_TEACH_CRS, // Brw_ADMI_TEACH_CRS = 25
Brw_ADMI_TEACH_GRP, // Brw_ADMI_TEACH_GRP = 26
Brw_ADMI_DOCUM_PRJ, // Brw_ADMI_DOCUM_PRJ = 27
};
// Browsers types for database "expanded_folders" table
static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYPES_FILE_BROWSER] =
@ -223,6 +226,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYP
Brw_ADMI_SHARE_INS, // Brw_ADMI_SHARE_INS = 24
Brw_ADMI_TEACH_CRS, // Brw_ADMI_TEACH_CRS = 25
Brw_ADMI_TEACH_GRP, // Brw_ADMI_TEACH_GRP = 26
Brw_ADMI_DOCUM_PRJ, // Brw_ADMI_DOCUM_PRJ = 27
};
// Browsers types for database "file_browser_last" table
// Assignments and works are stored as one in file_browser_last...
@ -256,6 +260,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_file_browser_last[Brw_NUM_TY
Brw_ADMI_SHARE_INS, // Brw_ADMI_SHARE_INS = 24
Brw_ADMI_TEACH_CRS, // Brw_ADMI_TEACH_CRS = 25
Brw_ADMI_TEACH_GRP, // Brw_ADMI_TEACH_GRP = 26
Brw_ADMI_DOCUM_PRJ, // Brw_ADMI_DOCUM_PRJ = 27
};
// Internal names of root folders
@ -288,6 +293,7 @@ const char *Brw_RootFolderInternalNames[Brw_NUM_TYPES_FILE_BROWSER] =
Brw_INTERNAL_NAME_ROOT_FOLDER_SHARED_FILES, // Brw_ADMI_SHARE_INS
Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TEACH_CRS
Brw_INTERNAL_NAME_ROOT_FOLDER_TEACHERS, // Brw_ADMI_TEACH_GRP
Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECTS, // Brw_ADMI_DOCUM_PRJ
};
static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
@ -319,6 +325,7 @@ static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
true, // Brw_ADMI_SHARE_INS
true, // Brw_ADMI_TEACH_CRS
true, // Brw_ADMI_TEACH_GRP
true, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -349,6 +356,7 @@ static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
ActAdmShaIns, // Brw_ADMI_SHARE_INS
ActAdmTchCrs, // Brw_ADMI_TEACH_CRS
ActAdmTchGrp, // Brw_ADMI_TEACH_GRP
ActAdmDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
@ -380,6 +388,7 @@ static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_SHARE_INS
ActUnk, // Brw_ADMI_TEACH_CRS
ActUnk, // Brw_ADMI_TEACH_GRP
ActUnk, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -410,6 +419,7 @@ static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_SHARE_INS
ActUnk, // Brw_ADMI_TEACH_CRS
ActUnk, // Brw_ADMI_TEACH_GRP
ActUnk, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
@ -441,6 +451,7 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_SHARE_INS
ActChgToAdmTch, // Brw_ADMI_TEACH_CRS
ActChgToAdmTch, // Brw_ADMI_TEACH_GRP
ActUnk, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActShow[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -471,6 +482,7 @@ static const Act_Action_t Brw_ActShow[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_SHARE_INS
ActUnk, // Brw_ADMI_TEACH_CRS
ActUnk, // Brw_ADMI_TEACH_GRP
ActUnk, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActHide[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -501,6 +513,7 @@ static const Act_Action_t Brw_ActHide[Brw_NUM_TYPES_FILE_BROWSER] =
ActUnk, // Brw_ADMI_SHARE_INS
ActUnk, // Brw_ADMI_TEACH_CRS
ActUnk, // Brw_ADMI_TEACH_GRP
ActUnk, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -531,6 +544,7 @@ static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActReqDatShaIns, // Brw_ADMI_SHARE_INS
ActReqDatTchCrs, // Brw_ADMI_TEACH_CRS
ActReqDatTchGrp, // Brw_ADMI_TEACH_GRP
ActReqDatDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -561,6 +575,7 @@ static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActDowShaIns, // Brw_ADMI_SHARE_INS
ActDowTchCrs, // Brw_ADMI_TEACH_CRS
ActDowTchGrp, // Brw_ADMI_TEACH_GRP
ActDowDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -591,6 +606,7 @@ static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActReqRemFilShaIns, // Brw_ADMI_SHARE_INS
ActReqRemFilTchCrs, // Brw_ADMI_TEACH_CRS
ActReqRemFilTchGrp, // Brw_ADMI_TEACH_GRP
ActReqRemFilDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -621,6 +637,7 @@ static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActRemFilShaIns, // Brw_ADMI_SHARE_INS
ActRemFilTchCrs, // Brw_ADMI_TEACH_CRS
ActRemFilTchGrp, // Brw_ADMI_TEACH_GRP
ActRemFilDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -651,6 +668,7 @@ static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActRemFolShaIns, // Brw_ADMI_SHARE_INS
ActRemFolTchCrs, // Brw_ADMI_TEACH_CRS
ActRemFolTchGrp, // Brw_ADMI_TEACH_GRP
ActRemFolDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -681,6 +699,7 @@ static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER
ActRemTreShaIns, // Brw_ADMI_SHARE_INS
ActRemTreTchCrs, // Brw_ADMI_TEACH_CRS
ActRemTreTchGrp, // Brw_ADMI_TEACH_GRP
ActRemTreDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -711,6 +730,7 @@ static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
ActCopShaIns, // Brw_ADMI_SHARE_INS
ActCopTchCrs, // Brw_ADMI_TEACH_CRS
ActCopTchGrp, // Brw_ADMI_TEACH_GRP
ActCopDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -741,6 +761,7 @@ static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
ActPasShaIns, // Brw_ADMI_SHARE_INS
ActPasTchCrs, // Brw_ADMI_TEACH_CRS
ActPasTchGrp, // Brw_ADMI_TEACH_GRP
ActPasDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -771,6 +792,7 @@ static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
ActFrmCreShaIns, // Brw_ADMI_SHARE_INS
ActFrmCreTchCrs, // Brw_ADMI_TEACH_CRS
ActFrmCreTchGrp, // Brw_ADMI_TEACH_GRP
ActFrmCreDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -801,6 +823,7 @@ static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActCreFolShaIns, // Brw_ADMI_SHARE_INS
ActCreFolTchCrs, // Brw_ADMI_TEACH_CRS
ActCreFolTchGrp, // Brw_ADMI_TEACH_GRP
ActCreFolDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -831,6 +854,7 @@ static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
ActCreLnkShaIns, // Brw_ADMI_SHARE_INS
ActCreLnkTchCrs, // Brw_ADMI_TEACH_CRS
ActCreLnkTchGrp, // Brw_ADMI_TEACH_GRP
ActCreLnkDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -861,6 +885,7 @@ static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActRenFolShaIns, // Brw_ADMI_SHARE_INS
ActRenFolTchCrs, // Brw_ADMI_TEACH_CRS
ActRenFolTchGrp, // Brw_ADMI_TEACH_GRP
ActRenFolDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -891,6 +916,7 @@ static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER]
ActRcvFilShaInsDZ, // Brw_ADMI_SHARE_INS
ActRcvFilTchCrsDZ, // Brw_ADMI_TEACH_CRS
ActRcvFilTchGrpDZ, // Brw_ADMI_TEACH_GRP
ActRcvFilDocPrjDZ, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -921,6 +947,7 @@ static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
ActRcvFilShaInsCla, // Brw_ADMI_SHARE_INS
ActRcvFilTchCrsCla, // Brw_ADMI_TEACH_CRS
ActRcvFilTchGrpCla, // Brw_ADMI_TEACH_GRP
ActRcvFilDocPrjCla, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -951,6 +978,7 @@ static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROW
ActAdmShaIns, // Brw_ADMI_SHARE_INS
ActAdmTchCrs, // Brw_ADMI_TEACH_CRS
ActAdmTchGrp, // Brw_ADMI_TEACH_GRP
ActAdmDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -981,6 +1009,7 @@ static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActExpShaIns, // Brw_ADMI_SHARE_INS
ActExpTchCrs, // Brw_ADMI_TEACH_CRS
ActExpTchGrp, // Brw_ADMI_TEACH_GRP
ActExpDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -1011,6 +1040,7 @@ static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActConShaIns, // Brw_ADMI_SHARE_INS
ActConTchCrs, // Brw_ADMI_TEACH_CRS
ActConTchGrp, // Brw_ADMI_TEACH_GRP
ActConDocPrj, // Brw_ADMI_DOCUM_PRJ
};
static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{
@ -1041,6 +1071,7 @@ static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
ActChgDatShaIns, // Brw_ADMI_SHARE_INS
ActChgDatTchCrs, // Brw_ADMI_TEACH_CRS
ActChgDatTchGrp, // Brw_ADMI_TEACH_GRP
ActChgDatDocPrj, // Brw_ADMI_DOCUM_PRJ
};
/* All quotas must be multiple of 1 GiB (Gibibyte)*/
@ -1103,6 +1134,10 @@ static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
#define Brw_MAX_FILES_WORKS_PER_STD 500
#define Brw_MAX_FOLDS_WORKS_PER_STD 50
#define Brw_MAX_QUOTA_PRJ ( 2ULL*Brw_GiB)
#define Brw_MAX_FILES_PRJ 500
#define Brw_MAX_FOLDS_PRJ 50
#define Brw_MAX_QUOTA_MARKS_CRS ( 1ULL*Brw_GiB)
#define Brw_MAX_FILES_MARKS_CRS 500
#define Brw_MAX_FOLDS_MARKS_CRS 50
@ -2113,6 +2148,29 @@ void Brw_GetParAndInitFileBrowser (void)
Gbl.FileBrowser.Type = Brw_ADMI_WORKS_CRS;
break;
/***** Documents in project *****/
case ActAdmDocPrj:
case ActReqRemFilDocPrj:
case ActRemFilDocPrj:
case ActRemFolDocPrj:
case ActCopDocPrj:
case ActPasDocPrj:
case ActRemTreDocPrj:
case ActFrmCreDocPrj:
case ActCreFolDocPrj:
case ActCreLnkDocPrj:
case ActRenFolDocPrj:
case ActRcvFilDocPrjDZ:
case ActRcvFilDocPrjCla:
case ActExpDocPrj:
case ActConDocPrj:
case ActZIPDocPrj:
case ActReqDatDocPrj:
case ActChgDatDocPrj:
case ActDowDocPrj:
Gbl.FileBrowser.Type = Brw_ADMI_DOCUM_PRJ;
break;
/***** Marks *****/
case ActSeeAdmMrk: // Access to a marks zone from menu
/* Set file browser type acording to last group accessed */
@ -2658,26 +2716,26 @@ static void Brw_SetPathFileBrowser (void)
case Brw_ADMI_SHARE_GRP:
case Brw_SHOW_MARKS_GRP:
case Brw_ADMI_MARKS_GRP:
sprintf (Path,"%s/grp",
Gbl.CurrentCrs.PathPriv);
sprintf (Path,"%s/%s",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_GRP);
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/grp/%ld",
Gbl.CurrentCrs.PathPriv,
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%ld",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_GRP,
Gbl.CurrentCrs.Grps.GrpCod);
break;
case Brw_ADMI_ASSIG_USR:
case Brw_ADMI_WORKS_USR:
sprintf (Path,"%s/usr",
Gbl.CurrentCrs.PathPriv);
sprintf (Path,"%s/%s",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR);
Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/usr/%02u",
Gbl.CurrentCrs.PathPriv,
sprintf (Path,"%s/%s/%02u",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100));
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/usr/%02u/%ld",
Gbl.CurrentCrs.PathPriv,
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%ld",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100),
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
@ -2685,20 +2743,29 @@ static void Brw_SetPathFileBrowser (void)
case Brw_ADMI_WORKS_CRS:
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
{
sprintf (Path,"%s/usr",
Gbl.CurrentCrs.PathPriv);
sprintf (Path,"%s/%s",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR);
Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/usr/%02u",
Gbl.CurrentCrs.PathPriv,
sprintf (Path,"%s/%s/%02u",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Other.UsrDat.UsrCod % 100));
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/usr/%02u/%ld",
Gbl.CurrentCrs.PathPriv,
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%ld",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Other.UsrDat.UsrCod % 100),
Gbl.Usrs.Other.UsrDat.UsrCod);
}
break;
case Brw_ADMI_DOCUM_PRJ:
sprintf (Path,"%s/%s",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ);
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%ld",
Gbl.CurrentCrs.PathPriv,Cfg_FOLDER_PRJ,
Gbl.CurrentCrs.Grps.GrpCod);
break;
case Brw_ADMI_BRIEF_USR:
Str_Copy (Gbl.FileBrowser.Priv.PathAboveRootFolder,
Gbl.Usrs.Me.PathDir,
@ -3072,18 +3139,6 @@ static void Brw_SetMaxQuota (void)
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_SHARE_GRP;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_SHARE_GRP;
break;
case Brw_SHOW_MARKS_CRS:
case Brw_ADMI_MARKS_CRS:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_CRS;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_MARKS_CRS;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_MARKS_CRS;
break;
case Brw_SHOW_MARKS_GRP:
case Brw_ADMI_MARKS_GRP:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_GRP;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_MARKS_GRP;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_MARKS_GRP;
break;
case Brw_ADMI_ASSIG_USR:
case Brw_ADMI_ASSIG_CRS:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_ASSIG_PER_STD;
@ -3096,6 +3151,23 @@ static void Brw_SetMaxQuota (void)
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_WORKS_PER_STD;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_WORKS_PER_STD;
break;
case Brw_ADMI_DOCUM_PRJ:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_PRJ;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_PRJ;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_PRJ;
break;
case Brw_SHOW_MARKS_CRS:
case Brw_ADMI_MARKS_CRS:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_CRS;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_MARKS_CRS;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_MARKS_CRS;
break;
case Brw_SHOW_MARKS_GRP:
case Brw_ADMI_MARKS_GRP:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_MARKS_GRP;
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_MARKS_GRP;
Gbl.FileBrowser.Size.MaxFolds = Brw_MAX_FOLDS_MARKS_GRP;
break;
case Brw_ADMI_BRIEF_USR:
Gbl.FileBrowser.Size.MaxQuota = Brw_MAX_QUOTA_BRIEF[Gbl.Usrs.Me.Role.Max];
Gbl.FileBrowser.Size.MaxFiles = Brw_MAX_FILES_BRIEF;
@ -3570,7 +3642,8 @@ static void Brw_ShowFileBrowser (void)
extern const char *Hlp_FILES_Homework_for_students;
extern const char *Hlp_FILES_Homework_for_teachers;
extern const char *Hlp_FILES_Marks;
extern const char *Hlp_PROFILE_Briefcase;
extern const char *Hlp_FILES_Briefcase;
extern const char *Hlp_ASSESSMENT_Projects;
extern const char *Txt_Documents_area;
extern const char *Txt_Documents_management_area;
@ -3581,6 +3654,7 @@ static void Brw_ShowFileBrowser (void)
extern const char *Txt_Assignments_area;
extern const char *Txt_Works_area;
extern const char *Txt_Temporary_private_storage_area;
extern const char *Txt_Project_documents;
const char *Brw_TitleOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER];
const char *Brw_HelpOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER];
@ -3617,35 +3691,37 @@ static void Brw_ShowFileBrowser (void)
Brw_TitleOfFileBrowser[Brw_ADMI_SHARE_INS] = Txt_Shared_files_area; // Brw_ADMI_SHARE_INS
Brw_TitleOfFileBrowser[Brw_ADMI_TEACH_CRS] = Txt_Teachers_files_area; // Brw_ADMI_TEACH_CRS
Brw_TitleOfFileBrowser[Brw_ADMI_TEACH_GRP] = Txt_Teachers_files_area; // Brw_ADMI_TEACH_GRP
Brw_TitleOfFileBrowser[Brw_ADMI_DOCUM_PRJ] = Txt_Project_documents; // Brw_ADMI_DOCUM_PRJ
/***** Set help link of file browser *****/
Brw_HelpOfFileBrowser[Brw_UNKNOWN ] = NULL; // Brw_UNKNOWN
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_CRS] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_CRS
Brw_HelpOfFileBrowser[Brw_SHOW_MARKS_CRS] = Hlp_FILES_Marks; // Brw_SHOW_MARKS_CRS
Brw_HelpOfFileBrowser[Brw_SHOW_MARKS_CRS] = Hlp_FILES_Marks; // Brw_SHOW_MARKS_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_CRS] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_SHARE_CRS] = Hlp_FILES_Shared; // Brw_ADMI_SHARE_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_SHARE_GRP] = Hlp_FILES_Shared; // Brw_ADMI_SHARE_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_WORKS_USR] = Hlp_FILES_Homework_for_students; // Brw_ADMI_WORKS_USR
Brw_HelpOfFileBrowser[Brw_ADMI_WORKS_CRS] = Hlp_FILES_Homework_for_teachers; // Brw_ADMI_WORKS_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_MARKS_CRS] = Hlp_FILES_Marks; // Brw_ADMI_MARKS_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_BRIEF_USR] = Hlp_PROFILE_Briefcase; // Brw_ADMI_BRIEF_USR
Brw_HelpOfFileBrowser[Brw_ADMI_MARKS_CRS] = Hlp_FILES_Marks; // Brw_ADMI_MARKS_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_BRIEF_USR] = Hlp_FILES_Briefcase; // Brw_ADMI_BRIEF_USR
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_GRP] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_GRP] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_GRP
Brw_HelpOfFileBrowser[Brw_SHOW_MARKS_GRP] = Hlp_FILES_Marks; // Brw_SHOW_MARKS_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_MARKS_GRP] = Hlp_FILES_Marks; // Brw_ADMI_MARKS_GRP
Brw_HelpOfFileBrowser[Brw_SHOW_MARKS_GRP] = Hlp_FILES_Marks; // Brw_SHOW_MARKS_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_MARKS_GRP] = Hlp_FILES_Marks; // Brw_ADMI_MARKS_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_ASSIG_USR] = Hlp_FILES_Homework_for_students; // Brw_ADMI_ASSIG_USR
Brw_HelpOfFileBrowser[Brw_ADMI_ASSIG_CRS] = Hlp_FILES_Homework_for_teachers; // Brw_ADMI_ASSIG_CRS
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_DEG] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_DEG
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_DEG] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_DEG
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_CTR] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_CTR
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_CTR] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_CTR
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_INS] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_INS
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_INS] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_INS
Brw_HelpOfFileBrowser[Brw_SHOW_DOCUM_INS] = Hlp_FILES_Documents; // Brw_SHOW_DOCUM_INS
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_INS] = Hlp_FILES_Documents; // Brw_ADMI_DOCUM_INS
Brw_HelpOfFileBrowser[Brw_ADMI_SHARE_DEG] = Hlp_FILES_Shared; // Brw_ADMI_SHARE_DEG
Brw_HelpOfFileBrowser[Brw_ADMI_SHARE_CTR] = Hlp_FILES_Shared; // Brw_ADMI_SHARE_CTR
Brw_HelpOfFileBrowser[Brw_ADMI_SHARE_INS] = Hlp_FILES_Shared; // Brw_ADMI_SHARE_INS
Brw_HelpOfFileBrowser[Brw_ADMI_TEACH_CRS] = Hlp_FILES_Private; // Brw_ADMI_TEACH_CRS
Brw_HelpOfFileBrowser[Brw_ADMI_TEACH_GRP] = Hlp_FILES_Private; // Brw_ADMI_TEACH_GRP
Brw_HelpOfFileBrowser[Brw_ADMI_DOCUM_PRJ] = Hlp_ASSESSMENT_Projects; // Brw_ADMI_DOCUM_PRJ
/***** Set contextual icon in box *****/
Gbl.FileBrowser.IconViewEdit = Brw_ICON_NONE;
@ -3964,6 +4040,7 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
extern const char *Txt_accessible_for_reading_and_writing_by_you_and_the_teachers_of_the_course;
extern const char *Txt_accessible_only_for_reading_by_you_and_the_teachers_of_the_course;
extern const char *Txt_the_marks_of_a_student_chosen_at_random_;
extern const char *Txt_accessible_for_reading_and_writing_by_project_members;
extern const char *Txt_nobody_else_can_access_this_content;
char Subtitle[1024];
@ -4086,6 +4163,10 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
sprintf (Subtitle,"%s",
Gbl.Usrs.Other.UsrDat.FullName);
break;
case Brw_ADMI_DOCUM_PRJ:
sprintf (Subtitle,"(%s)",
Txt_accessible_for_reading_and_writing_by_project_members);
break;
case Brw_ADMI_BRIEF_USR:
sprintf (Subtitle,"%s<br />(%s)",
Gbl.Usrs.Me.UsrDat.FullName,
@ -4943,6 +5024,9 @@ static void Brw_GetAndUpdateDateLastAccFileBrowser (void)
case Brw_ADMI_MARKS_GRP:
Cod = Gbl.CurrentCrs.Grps.GrpCod;
break;
case Brw_ADMI_DOCUM_PRJ:
Cod = Gbl.CurrentCrs.Prjs.PrjCod;
break;
case Brw_ADMI_BRIEF_USR:
Cod = -1L;
break;
@ -6763,6 +6847,7 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_shared_files_area;
extern const char *Txt_assignments_area;
extern const char *Txt_works_area;
extern const char *Txt_project_documents;
extern const char *Txt_marks_management_area;
extern const char *Txt_temporary_private_storage_area;
extern const char *Txt_institution;
@ -6770,6 +6855,7 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_degree;
extern const char *Txt_course;
extern const char *Txt_group;
extern const char *Txt_project;
extern const char *Txt_user[Usr_NUM_SEXS];
extern const char *Txt_file_folder;
extern const char *Txt_file;
@ -6781,6 +6867,7 @@ static void Brw_WriteCurrentClipboard (void)
struct Degree Deg;
struct Course Crs;
struct GroupData GrpDat;
struct Project Prj;
struct UsrData UsrDat;
char TxtClipboardZone[1024];
char FileNameToShow[NAME_MAX + 1];
@ -6927,6 +7014,16 @@ static void Brw_WriteCurrentClipboard (void)
Txt_user[UsrDat.Sex],UsrDat.FullName);
Usr_UsrDataDestructor (&UsrDat);
break;
case Brw_ADMI_DOCUM_PRJ:
Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Prj_GetDataOfProjectByCod (&Prj);
Crs.CrsCod = Prj.CrsCod;
Crs_GetDataOfCourseByCod (&Crs);
sprintf (TxtClipboardZone,"%s, %s <strong>%s</strong>, %s <strong>%s</strong>",
Txt_project_documents,
Txt_course,Crs.ShrtName,
Txt_project,Prj.Title);
break;
case Brw_ADMI_MARKS_CRS:
Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod;
Crs_GetDataOfCourseByCod (&Crs);
@ -7097,6 +7194,10 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Grps.GrpCod)
return true; // I am in the group of the clipboard
break;
case Brw_ADMI_DOCUM_PRJ:
if (Gbl.FileBrowser.Clipboard.Cod == Gbl.CurrentCrs.Prjs.PrjCod)
return true; // I am in the project of the clipboard
break;
case Brw_ADMI_BRIEF_USR:
return true;
default:
@ -7648,6 +7749,12 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
(unsigned) FileBrowser,
Gbl.CurrentCrs.Crs.CrsCod,WorksUsrCod);
break;
case Brw_ADMI_DOCUM_PRJ:
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser=%u AND Cod=%ld",
(unsigned) FileBrowser,
Gbl.CurrentCrs.Prjs.PrjCod);
break;
case Brw_ADMI_BRIEF_USR:
sprintf (Query,"DELETE FROM clipboard"
" WHERE UsrCod=%ld AND FileBrowser=%u",
@ -7733,6 +7840,7 @@ static void Brw_PasteClipboard (void)
struct Degree Deg;
struct Course Crs;
struct GroupData GrpDat;
struct Project Prj;
char PathOrg[PATH_MAX + 1];
struct Brw_NumObjects Pasted;
long FirstFilCod = -1L; // First file code of the first file or link pasted. Important: initialize here to -1L
@ -7804,9 +7912,9 @@ static void Brw_PasteClipboard (void)
Grp_GetDataOfGroupByCod (&GrpDat);
Crs.CrsCod = GrpDat.CrsCod;
if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathOrg,"%s/%s/%ld/grp/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,
Gbl.FileBrowser.Clipboard.Cod,
sprintf (PathOrg,"%s/%s/%ld/%s/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,Cfg_FOLDER_GRP,
GrpDat.GrpCod,
Gbl.FileBrowser.Clipboard.Path);
else
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
@ -7815,26 +7923,31 @@ static void Brw_PasteClipboard (void)
case Brw_ADMI_WORKS_USR:
Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod;
if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathOrg,"%s/%s/%ld/usr/%02u/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,
sprintf (PathOrg,"%s/%s/%ld/%s/%02u/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100),
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.FileBrowser.Clipboard.Path);
else
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
break;
case Brw_ADMI_ASSIG_CRS:
case Brw_ADMI_WORKS_CRS:
Crs.CrsCod = Gbl.FileBrowser.Clipboard.Cod;
if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathOrg,"%s/%s/%ld/usr/%02u/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,
(unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100),
Gbl.FileBrowser.Clipboard.WorksUsrCod,
Gbl.FileBrowser.Clipboard.Path);
case Brw_ADMI_DOCUM_PRJ:
Prj.PrjCod = Gbl.FileBrowser.Clipboard.Cod;
Prj_GetDataOfProjectByCod (&Prj);
if (Prj.PrjCod > 0)
{
Crs.CrsCod = Prj.CrsCod;
if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathOrg,"%s/%s/%ld/%s/%02u/%ld/%s",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod,Cfg_FOLDER_PRJ,
(unsigned) (Prj.PrjCod % 100),
Prj.PrjCod,
Gbl.FileBrowser.Clipboard.Path);
else
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
}
else
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
break;
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
break;
case Brw_ADMI_BRIEF_USR:
sprintf (PathOrg,"%s/%s",
@ -10083,6 +10196,7 @@ void Brw_ChgFileMetadata (void)
case Brw_ADMI_ASSIG_CRS:
case Brw_ADMI_WORKS_USR:
case Brw_ADMI_WORKS_CRS:
case Brw_ADMI_DOCUM_PRJ:
case Brw_ADMI_BRIEF_USR:
PublicFileAfterEdition = false; // Files in these zones can not be public
License = Brw_GetParLicense ();
@ -11659,6 +11773,7 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
extern const char *Txt_Shared_files_area;
extern const char *Txt_Assignments_area;
extern const char *Txt_Works_area;
extern const char *Txt_Project_documents;
extern const char *Txt_Marks_area;
extern const char *Txt_Temporary_private_storage_area;
extern const char *Txt_Go_to_X;
@ -11813,6 +11928,9 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
case Brw_ADMI_WORKS_USR:
Title = Txt_Works_area;
break;
case Brw_ADMI_DOCUM_PRJ:
Title = Txt_Project_documents;
break;
case Brw_ADMI_MARKS_CRS:
case Brw_ADMI_MARKS_GRP:
Title = Txt_Marks_area;

View File

@ -39,7 +39,7 @@
#define Brw_MAX_CHARS_FOLDER 30 // 30
#define Brw_MAX_BYTES_FOLDER NAME_MAX // 255
#define Brw_NUM_TYPES_FILE_BROWSER 27
#define Brw_NUM_TYPES_FILE_BROWSER 28
// The following types are stored in several database tables as numeric fields,
// so don't change numbers!
typedef enum
@ -71,6 +71,7 @@ typedef enum
Brw_ADMI_SHARE_INS = 24,
Brw_ADMI_TEACH_CRS = 25,
Brw_ADMI_TEACH_GRP = 26,
Brw_ADMI_DOCUM_PRJ = 27,
} Brw_FileBrowser_t;
// The following types are stored in files and clipboard tables as numeric fields, so don't change numbers!
@ -153,6 +154,7 @@ struct FileMetadata
#define Brw_INTERNAL_NAME_ROOT_FOLDER_SHARED "comun" // TODO: It should be "sha"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_ASSIGNMENTS "actividades" // TODO: It should be "asg"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_WORKS "trabajos" // TODO: It should be "wrk"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECTS "prj"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_MARKS "calificaciones" // TODO: It should be "mrk"
#define Brw_INTERNAL_NAME_ROOT_FOLDER_BRIEF "maletin" // TODO: It should be "brf"

View File

@ -463,6 +463,7 @@ struct Globals
struct
{
Prj_WhichProjects_t WhichPrjs; // Show my projects or all projects
long PrjCod;
} Prjs;
struct
{

View File

@ -1474,6 +1474,27 @@ const char *Hlp_FILES_Marks =
"FILES.Marks.en";
#endif
const char *Hlp_FILES_Briefcase =
#if L==1
"FILES.Briefcase.es";
#elif L==2
"FILES.Briefcase.en";
#elif L==3
"FILES.Briefcase.en";
#elif L==4
"FILES.Briefcase.es";
#elif L==5
"FILES.Briefcase.en";
#elif L==6
"FILES.Briefcase.es";
#elif L==7
"FILES.Briefcase.en";
#elif L==8
"FILES.Briefcase.en";
#elif L==9
"FILES.Briefcase.en";
#endif
/***** USERS tab *****/
const char *Hlp_USERS_Groups =
@ -3646,24 +3667,3 @@ const char *Hlp_PROFILE_Preferences_notifications =
#elif L==9
"PROFILE.Preferences.en#notifications";
#endif
const char *Hlp_PROFILE_Briefcase =
#if L==1
"PROFILE.Briefcase.es";
#elif L==2
"PROFILE.Briefcase.en";
#elif L==3
"PROFILE.Briefcase.en";
#elif L==4
"PROFILE.Briefcase.es";
#elif L==5
"PROFILE.Briefcase.en";
#elif L==6
"PROFILE.Briefcase.es";
#elif L==7
"PROFILE.Briefcase.en";
#elif L==8
"PROFILE.Briefcase.en";
#elif L==9
"PROFILE.Briefcase.en";
#endif

View File

@ -221,9 +221,10 @@ void Lay_WriteStartOfPage (void)
case ActFrmCreAsgCrs: // Brw_ADMI_ASSIG_CRS
case ActFrmCreWrkUsr: // Brw_ADMI_WORKS_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WORKS_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOCUM_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MARKS_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MARKS_GRP
case ActFrmCreBrf: // Brw_ADMI_BRIEF_USR
case ActFrmCreBrf: // Brw_ADMI_BRIEF_USR
fprintf (Gbl.F.Out,"<link rel=\"StyleSheet\""
" href=\"%s/dropzone/css/dropzone.css\""
" type=\"text/css\" />\n",
@ -594,6 +595,7 @@ static void Lay_WriteScripts (void)
case ActFrmCreAsgCrs: // Brw_ADMI_ASSIG_CRS
case ActFrmCreWrkUsr: // Brw_ADMI_WORKS_USR
case ActFrmCreWrkCrs: // Brw_ADMI_WORKS_CRS
case ActFrmCreDocPrj: // Brw_ADMI_DOCUM_PRJ
case ActFrmCreMrkCrs: // Brw_ADMI_MARKS_CRS
case ActFrmCreMrkGrp: // Brw_ADMI_MARKS_GRP
case ActFrmCreBrf: // Brw_ADMI_BRIEF_USR

View File

@ -568,6 +568,7 @@ void Prj_FileBrowserPrj (void)
/***** Get project data *****/
Prj.PrjCod = Prj_GetParamPrjCod ();
Prj_GetDataOfProjectByCod (&Prj);
Gbl.CurrentCrs.Prjs.PrjCod = Prj.PrjCod; // Used in file browser
/***** Start box and table *****/
Box_StartBoxTable (NULL,Prj.Title,NULL,
@ -1959,7 +1960,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
if (Prj->PrjCod > 0)
{
/***** Build query *****/
sprintf (Query,"SELECT PrjCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
sprintf (Query,"SELECT PrjCod,CrsCod,DptCod,Hidden,Preassigned,NumStds,Proposal,"
"UNIX_TIMESTAMP(StartTime),"
"UNIX_TIMESTAMP(EndTime),"
"NOW() BETWEEN StartTime AND EndTime,"
@ -1969,19 +1970,20 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj)
Prj->PrjCod,Gbl.CurrentCrs.Crs.CrsCod);
/*
row[ 0]: PrjCod
row[ 1]: DptCod
row[ 2]: Hidden
row[ 3]: Preassigned
row[ 4]: NumStds
row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: NOW() BETWEEN StartTime AND EndTime
row[ 9]: Title
row[10]: Description
row[11]: Knowledge
row[12]: Materials
row[13]: URL
row[ 1]: CrsCod
row[ 2]: DptCod
row[ 3]: Hidden
row[ 4]: Preassigned
row[ 5]: NumStds
row[ 6]: Proposal
row[ 7]: UNIX_TIMESTAMP(StartTime)
row[ 8]: UNIX_TIMESTAMP(EndTime)
row[ 9]: NOW() BETWEEN StartTime AND EndTime
row[10]: Title
row[11]: Description
row[12]: Knowledge
row[13]: Materials
row[14]: URL
*/
/***** Get data of project *****/
@ -2016,79 +2018,83 @@ static void Prj_GetDataOfProject (struct Project *Prj,const char *Query)
row = mysql_fetch_row (mysql_res);
/*
row[ 0]: PrjCod
row[ 1]: DptCod
row[ 2]: Hidden
row[ 3]: Preassigned
row[ 4]: NumStds
row[ 5]: Proposal
row[ 6]: UNIX_TIMESTAMP(StartTime)
row[ 7]: UNIX_TIMESTAMP(EndTime)
row[ 8]: NOW() BETWEEN StartTime AND EndTime
row[ 9]: Title
row[10]: Description
row[11]: Knowledge
row[12]: Materials
row[13]: URL
row[ 1]: CrsCod
row[ 2]: DptCod
row[ 3]: Hidden
row[ 4]: Preassigned
row[ 5]: NumStds
row[ 6]: Proposal
row[ 7]: UNIX_TIMESTAMP(StartTime)
row[ 8]: UNIX_TIMESTAMP(EndTime)
row[ 9]: NOW() BETWEEN StartTime AND EndTime
row[10]: Title
row[11]: Description
row[12]: Knowledge
row[13]: Materials
row[14]: URL
*/
/* Get code of the project (row[0]) */
Prj->PrjCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get code of the department (row[1]) */
Prj->DptCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get code of the course (row[1]) */
Prj->CrsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get whether the project is hidden or not (row[2]) */
Prj->Hidden = (row[2][0] == 'Y');
/* Get code of the department (row[2]) */
Prj->DptCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get if project is preassigned or not (row[3]) */
Prj->Preassigned = (row[3][0] == 'Y') ? Prj_PREASSIGNED :
Prj_NOT_PREASSIGNED;
/* Get whether the project is hidden or not (row[3]) */
Prj->Hidden = (row[3][0] == 'Y');
/* Get if project is preassigned or not (row[4]) */
NumLong = Str_ConvertStrCodToLongCod (row[4]);
Prj->Preassigned = (row[4][0] == 'Y') ? Prj_PREASSIGNED :
Prj_NOT_PREASSIGNED;
/* Get if project is preassigned or not (row[5]) */
NumLong = Str_ConvertStrCodToLongCod (row[5]);
if (NumLong >= 0)
Prj->NumStds = (unsigned) NumLong;
else
Prj->NumStds = 1;
/* Get project status (row[5]) */
/* Get project status (row[6]) */
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
for (Proposal = (Prj_Proposal_t) 0;
Proposal <= (Prj_Proposal_t) (Prj_NUM_PROPOSAL_TYPES - 1);
Proposal++)
if (!strcmp (Prj_Proposal_DB[Proposal],row[5]))
if (!strcmp (Prj_Proposal_DB[Proposal],row[6]))
{
Prj->Proposal = Proposal;
break;
}
/* Get start date (row[6] holds the start UTC time) */
Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[6]);
/* Get start date (row[7] holds the start UTC time) */
Prj->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[7]);
/* Get end date (row[7] holds the end UTC time) */
Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[7]);
/* Get end date (row[8] holds the end UTC time) */
Prj->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[8]);
/* Get whether the project is open or closed (row[8]) */
Prj->Open = (row[8][0] == '1');
/* Get whether the project is open or closed (row[9]) */
Prj->Open = (row[9][0] == '1');
/* Get the title of the project (row[9]) */
Str_Copy (Prj->Title,row[9],
/* Get the title of the project (row[10]) */
Str_Copy (Prj->Title,row[10],
Prj_MAX_BYTES_PROJECT_TITLE);
/* Get the description of the project (row[10]) */
Str_Copy (Prj->Description,row[10],
/* Get the description of the project (row[11]) */
Str_Copy (Prj->Description,row[11],
Cns_MAX_BYTES_TEXT);
/* Get the required knowledge for the project (row[11]) */
Str_Copy (Prj->Knowledge,row[11],
/* Get the required knowledge for the project (row[12]) */
Str_Copy (Prj->Knowledge,row[12],
Cns_MAX_BYTES_TEXT);
/* Get the required materials for the project (row[12]) */
Str_Copy (Prj->Materials,row[12],
/* Get the required materials for the project (row[13]) */
Str_Copy (Prj->Materials,row[13],
Cns_MAX_BYTES_TEXT);
/* Get the URL of the project (row[13]) */
Str_Copy (Prj->URL,row[13],
/* Get the URL of the project (row[14]) */
Str_Copy (Prj->URL,row[14],
Cns_MAX_BYTES_WWW);
}
@ -2104,10 +2110,11 @@ static void Prj_ResetProject (struct Project *Prj)
{
if (Prj->PrjCod <= 0) // If > 0 ==> keep value
Prj->PrjCod = -1L;
Prj->CrsCod = -1L;
Prj->Hidden = false;
Prj->Preassigned = Prj_PREASSIGNED_DEFAULT;
Prj->NumStds = 1;
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
Prj->Proposal = Prj_PROPOSAL_DEFAULT;
Prj->TimeUTC[Dat_START_TIME] =
Prj->TimeUTC[Dat_END_TIME ] = (time_t) 0;
Prj->Open = false;
@ -2116,7 +2123,7 @@ static void Prj_ResetProject (struct Project *Prj)
Prj->Description[0] = '\0';
Prj->Knowledge[0] = '\0';
Prj->Materials[0] = '\0';
Prj->URL[0] = '\0';
Prj->URL[0] = '\0';
}
/*****************************************************************************/

View File

@ -70,6 +70,7 @@ typedef enum
struct Project
{
long PrjCod;
long CrsCod;
bool Hidden;
Prj_Preassigned_t Preassigned;
unsigned NumStds;

View File

@ -1723,6 +1723,27 @@ const char *Txt_accessible_for_reading_and_writing_by_administrators_of_the_inst
"acess&iacute;vel para leitura e escrita pelos administradores da institui&ccedil;&atilde;o";
#endif
const char *Txt_accessible_for_reading_and_writing_by_project_members =
#if L==1
"accessible per a lectura i escriptura per membres del projecte";
#elif L==2
"zug&auml;nglich zum Lesen und Schreiben von Projektmitgliedern";
#elif L==3
"accessible for reading and writing by project members";
#elif L==4
"accesible para lectura y escritura por miembros del proyecto";
#elif L==5
"accessible pour la lecture et l'écriture par les membres du projet";
#elif L==6
"accesible para lectura y escritura por miembros del proyecto"; // Okoteve traducción
#elif L==7
"accessibile per la lettura e la scrittura da parte dei membri del progetto";
#elif L==8
"dost&eogon;pne do czytania i pisania przez cz&lstrok;onk&oacute;w projektu";
#elif L==9
"acess&iacute;vel para leitura e escrita por membros do projeto";
#endif
const char *Txt_accessible_for_reading_and_writing_by_students_and_teachers_of_the_centre =
#if L==1
"accessible per a lectura i escriptura per estudiants i professors del centre";
@ -30789,6 +30810,69 @@ const char *Txt_Private_available_to_certain_users_identified =
"Privado, dispon&iacute;vel para alguns usu&aacute;rios identificados";
#endif
const char *Txt_project =
#if L==1
"projecte";
#elif L==2
"Projekt";
#elif L==3
"project";
#elif L==4
"proyecto";
#elif L==5
"project";
#elif L==6
"proyecto"; // Okoteve traducción
#elif L==7
"progetto";
#elif L==8
"projektowe";
#elif L==9
"projeto";
#endif
const char *Txt_Project_documents =
#if L==1
"Documents del projecte";
#elif L==2
"Projektdokumente";
#elif L==3
"Project documents";
#elif L==4
"Documentos del proyecto";
#elif L==5
"Documents du project";
#elif L==6
"Documentos del proyecto"; // Okoteve traducción
#elif L==7
"Documenti di progetto";
#elif L==8
"Dokumenty projektowe";
#elif L==9
"Documentos do projeto";
#endif
const char *Txt_project_documents =
#if L==1
"documents del projecte";
#elif L==2
"Projektdokumente";
#elif L==3
"project documents";
#elif L==4
"documentos del proyecto";
#elif L==5
"documents du project";
#elif L==6
"documentos del proyecto"; // Okoteve traducción
#elif L==7
"documenti di progetto";
#elif L==8
"dokumenty projektowe";
#elif L==9
"documentos do projeto";
#endif
const char *Txt_Project_X_is_now_hidden = // Warning: it is very important to include %s in the following sentences
#if L==1
"El projecte <strong>%s</strong> ara est&agrave; ocult.";
@ -37975,6 +38059,27 @@ const char *Txt_ROOT_FOLDER_EXTERNAL_NAMES[Brw_NUM_TYPES_FILE_BROWSER] =
"prywatne"
#elif L==9
"privados"
#endif
,
// Brw_ADMI_DOCUM_PRJ
#if L==1
"projecte"
#elif L==2
"Projekt"
#elif L==3
"project"
#elif L==4
"proyecto"
#elif L==5
"projet"
#elif L==6
"proyecto" // Okoteve traducción
#elif L==7
"progetto"
#elif L==8
"projekt"
#elif L==9
"projeto"
#endif
};

View File

@ -83,6 +83,7 @@ const Act_Action_t ZIP_ActZIPFolder[Brw_NUM_TYPES_FILE_BROWSER] =
ActZIPShaIns, // Brw_ADMI_SHARE_INS
ActZIPTchCrs, // Brw_ADMI_TEACH_CRS
ActZIPTchGrp, // Brw_ADMI_TEACH_GRP
ActZIPDocPrj, // Brw_ADMI_DOCUM_PRJ
};
/*****************************************************************************/