Version 17.16.2

This commit is contained in:
Antonio Cañas Vargas 2017-10-03 12:47:49 +02:00
parent 49f3c6e51b
commit f2f5ed1e06
6 changed files with 81 additions and 47 deletions

View File

@ -248,17 +248,22 @@
// 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
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 17.16 (2017-10-02)"
#define Log_PLATFORM_VERSION "SWAD 17.16.2 (2017-10-03)"
#define CSS_FILE "swad17.0.css"
#define JS_FILE "swad17.15.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.16.2: Oct 03, 2017 Fixed bug in pagination of projects. (232061 lines)
Version 17.16.1: Oct 03, 2017 Changing expansion of file subtrees. Not finished.
Fixed bug in notifications about new private files. (232060 lines)
Version 17.16: Oct 02, 2017 Briefcase moved from profile tab to files tab. (232028 lines)
Version 17.15: Oct 02, 2017 Status in projects changed for proposal. (231985 lines)
4 changes necessary in database:

View File

@ -65,10 +65,10 @@ extern struct Globals Gbl;
typedef enum
{
Brw_EXPAND_TREE_NOTHING,
Brw_EXPAND_TREE_PLUS,
Brw_EXPAND_TREE_MINUS,
} Brw_ExpandTree_t;
Brw_ICON_TREE_NOTHING, // No icon to expand/contract a subtree
Brw_ICON_TREE_EXPAND, // Icon to expand a contracted subtree
Brw_ICON_TREE_CONTRACT, // Icon to contract a expanded subtree
} Brw_IconTree_t;
struct Brw_NumObjects
{
@ -1489,9 +1489,12 @@ static long Brw_GetGrpLastAccZone (const char *FieldNameDB);
static void Brw_ResetFileBrowserSize (void);
static void Brw_CalcSizeOfDirRecursive (unsigned Level,char *Path);
static void Brw_ListDir (unsigned Level,
bool TreeContracted,
const char Path[PATH_MAX + 1],
const char PathInTree[PATH_MAX + 1]);
static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
static bool Brw_WriteRowFileBrowser (unsigned Level,
bool TreeContracted,
Brw_IconTree_t IconThisRow,
const char PathInTree[PATH_MAX + 1],
const char *FileName);
static void Brw_PutIconsRemoveCopyPaste (unsigned Level,
@ -1507,14 +1510,15 @@ static void Brw_PutIconCopy (const char PathInTree[PATH_MAX + 1],
static void Brw_PutIconPasteOn (const char PathInTree[PATH_MAX + 1],
const char *FileName,const char *FileNameToShow);
static void Brw_PutIconPasteOff (void);
static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_ExpandTree_t ExpandTree,
static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_IconTree_t IconThisRow,
const char PathInTree[PATH_MAX + 1],
const char *FileName,const char *FileNameToShow);
const char *FileName,
const char *FileNameToShow);
static void Brw_IndentDependingOnLevel (unsigned Level);
static void Brw_PutIconShow (unsigned Level,const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconHide (unsigned Level,const char *PathInTree,const char *FileName,const char *FileNameToShow);
static bool Brw_CheckIfAnyUpperLevelIsHidden (unsigned CurrentLevel);
static void Brw_PutIconFolder (unsigned Level,Brw_ExpandTree_t ExpandTree,
static void Brw_PutIconFolder (unsigned Level,Brw_IconTree_t IconSubtree,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconNewFileOrFolder (void);
static void Brw_PutIconFileWithLinkToViewMetadata (unsigned Size,
@ -3697,8 +3701,15 @@ static void Brw_ShowFileBrowser (void)
fprintf (Gbl.F.Out,"<table class=\"BROWSER_TABLE\">");
Brw_SetFullPathInTree (Brw_RootFolderInternalNames[Gbl.FileBrowser.Type],".");
Gbl.FileBrowser.FileType = Brw_IS_FOLDER;
if (Brw_WriteRowFileBrowser (0,Brw_EXPAND_TREE_NOTHING,Brw_RootFolderInternalNames[Gbl.FileBrowser.Type],"."))
Brw_ListDir (1,Gbl.FileBrowser.Priv.PathRootFolder,Brw_RootFolderInternalNames[Gbl.FileBrowser.Type]);
if (Brw_WriteRowFileBrowser (0,
false, // Tree not contracted
Brw_ICON_TREE_NOTHING,
Brw_RootFolderInternalNames[Gbl.FileBrowser.Type],
"."))
Brw_ListDir (1,
false, // Tree not contracted
Gbl.FileBrowser.Priv.PathRootFolder,
Brw_RootFolderInternalNames[Gbl.FileBrowser.Type]);
fprintf (Gbl.F.Out,"</table>");
/***** Show and store number of documents found *****/
@ -5076,6 +5087,7 @@ static void Brw_CalcSizeOfDirRecursive (unsigned Level,char *Path)
/*****************************************************************************/
static void Brw_ListDir (unsigned Level,
bool TreeContracted,
const char Path[PATH_MAX + 1],
const char PathInTree[PATH_MAX + 1])
{
@ -5088,7 +5100,7 @@ static void Brw_ListDir (unsigned Level,
char PathFileRel[PATH_MAX + 1];
char PathFileInExplTree[PATH_MAX + 1];
struct stat FileStatus;
Brw_ExpandTree_t ExpandTree = Brw_EXPAND_TREE_NOTHING; // Initialized to avoid warning
Brw_IconTree_t IconSubtree = Brw_ICON_TREE_NOTHING; // Initialized to avoid warning
/***** Scan directory *****/
if ((NumFiles = scandir (Path,&FileList,NULL,alphasort)) >= 0) // No error
@ -5112,18 +5124,18 @@ static void Brw_ListDir (unsigned Level,
else if (S_ISDIR (FileStatus.st_mode)) // It's a directory
{
if (Gbl.FileBrowser.FullTree)
ExpandTree = Brw_EXPAND_TREE_NOTHING;
IconSubtree = Brw_ICON_TREE_NOTHING;
else
{
/***** Check if this subdirectory has files or folders in it *****/
if ((NumFilesInSubdir = scandir (PathFileRel,&SubdirFileList,NULL,NULL)) >= 0) // No error
{
if (NumFilesInSubdir <= 2)
ExpandTree = Brw_EXPAND_TREE_NOTHING;
IconSubtree = Brw_ICON_TREE_NOTHING;
else
/***** Check if the tree starting at this subdirectory must be expanded *****/
ExpandTree = Brw_GetIfExpandedTree (Gbl.FileBrowser.Priv.FullPathInTree) ? Brw_EXPAND_TREE_MINUS :
Brw_EXPAND_TREE_PLUS;
IconSubtree = Brw_GetIfExpandedTree (Gbl.FileBrowser.Priv.FullPathInTree) ? Brw_ICON_TREE_CONTRACT :
Brw_ICON_TREE_EXPAND;
for (NumFileInSubdir = 0;
NumFileInSubdir < NumFilesInSubdir;
NumFileInSubdir++)
@ -5136,18 +5148,26 @@ static void Brw_ListDir (unsigned Level,
/***** Write a row for the subdirectory *****/
Gbl.FileBrowser.FileType = Brw_IS_FOLDER;
if (Brw_WriteRowFileBrowser (Level,ExpandTree,PathInTree,FileList[NumFile]->d_name))
if (ExpandTree == Brw_EXPAND_TREE_MINUS ||
ExpandTree == Brw_EXPAND_TREE_NOTHING)
if (Level < Brw_MAX_DIR_LEVELS)
/* List subtree starting at this this directory */
Brw_ListDir (Level + 1,PathFileRel,PathFileInExplTree);
if (Brw_WriteRowFileBrowser (Level,
TreeContracted,
IconSubtree,
PathInTree,
FileList[NumFile]->d_name))
if (Level < Brw_MAX_DIR_LEVELS)
/* List subtree starting at this this directory */
Brw_ListDir (Level + 1,
TreeContracted || IconSubtree == Brw_ICON_TREE_EXPAND,
PathFileRel,PathFileInExplTree);
}
else if (S_ISREG (FileStatus.st_mode)) // It's a regular file
{
Gbl.FileBrowser.FileType = Str_FileIs (FileList[NumFile]->d_name,"url") ? Brw_IS_LINK :
Brw_IS_FILE;
Brw_WriteRowFileBrowser (Level,Brw_EXPAND_TREE_NOTHING,PathInTree,FileList[NumFile]->d_name);
Brw_WriteRowFileBrowser (Level,
TreeContracted,
Brw_ICON_TREE_NOTHING,
PathInTree,
FileList[NumFile]->d_name);
}
}
free ((void *) FileList[NumFile]);
@ -5165,7 +5185,9 @@ static void Brw_ListDir (unsigned Level,
// If it is not the first row, it is shown or not depending on whether it is hidden or not
// If the row is visible, return true. If it is hidden, return false
static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
static bool Brw_WriteRowFileBrowser (unsigned Level,
bool TreeContracted,
Brw_IconTree_t IconThisRow,
const char PathInTree[PATH_MAX + 1],
const char *FileName)
{
@ -5278,7 +5300,10 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
FileName,FileNameToShow);
/***** Start this row *****/
fprintf (Gbl.F.Out,"<tr>");
fprintf (Gbl.F.Out,"<tr");
if (TreeContracted) // This row is inside a contracted subtree
fprintf (Gbl.F.Out," style=\"display:none;\"");
fprintf (Gbl.F.Out,">");
/****** If current action allows file administration... ******/
Gbl.FileBrowser.ICanEditFileOrFolder = false;
@ -5309,8 +5334,10 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
/* Indent depending on level */
if (Level)
Brw_IndentAndWriteIconExpandContract (Level,ExpandTree,
PathInTree,FileName,FileNameToShow);
Brw_IndentAndWriteIconExpandContract (Level,IconThisRow,
PathInTree,
FileName,
FileNameToShow);
/* Put icon to show/hide file or folder */
if (AdminDocsZone || AdminMarks)
@ -5324,7 +5351,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
/***** File or folder icon *****/
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
/* Icon with folder */
Brw_PutIconFolder (Level,ExpandTree,
Brw_PutIconFolder (Level,IconThisRow,
PathInTree,FileName,FileNameToShow);
else // File or link
{
@ -5633,9 +5660,10 @@ static void Brw_PutIconPasteOff (void)
/*************** Indent and write icon to expand/contract folder *************/
/*****************************************************************************/
static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_ExpandTree_t ExpandTree,
static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_IconTree_t IconThisRow,
const char PathInTree[PATH_MAX + 1],
const char *FileName,const char *FileNameToShow)
const char *FileName,
const char *FileNameToShow)
{
extern const char *Txt_Expand;
extern const char *Txt_Contract;
@ -5647,15 +5675,15 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_ExpandTree_
Brw_IndentDependingOnLevel (Level);
fprintf (Gbl.F.Out,"<td class=\"BM%u\">",Gbl.RowEvenOdd);
switch (ExpandTree)
switch (IconThisRow)
{
case Brw_EXPAND_TREE_NOTHING:
case Brw_ICON_TREE_NOTHING:
fprintf (Gbl.F.Out,"<img src=\"%s/tr16x16.gif\""
" alt=\"\" title=\"\""
" class=\"ICO20x20\" />",
Gbl.Prefs.IconsURL);
break;
case Brw_EXPAND_TREE_PLUS:
case Brw_ICON_TREE_EXPAND:
/***** Form to expand folder *****/
sprintf (FileBrowserId,"file_browser_%u",Gbl.FileBrowser.Id);
Act_FormStartAnchor (Brw_ActExpandFolder[Gbl.FileBrowser.Type],FileBrowserId);
@ -5672,7 +5700,7 @@ static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_ExpandTree_
Act_FormEnd ();
Lay_EndSection ();
break;
case Brw_EXPAND_TREE_MINUS:
case Brw_ICON_TREE_CONTRACT:
/***** Form to contract folder *****/
sprintf (FileBrowserId,"file_browser_%u",Gbl.FileBrowser.Id);
Act_FormStartAnchor (Brw_ActContractFolder[Gbl.FileBrowser.Type],FileBrowserId);
@ -5789,7 +5817,7 @@ static bool Brw_CheckIfAnyUpperLevelIsHidden (unsigned CurrentLevel)
/** Write link e icon to upload or paste files, or to create folder or link **/
/*****************************************************************************/
static void Brw_PutIconFolder (unsigned Level,Brw_ExpandTree_t ExpandTree,
static void Brw_PutIconFolder (unsigned Level,Brw_IconTree_t IconSubtree,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Upload_file_or_create_folder_in_FOLDER;
@ -5814,7 +5842,7 @@ static void Brw_PutIconFolder (unsigned Level,Brw_ExpandTree_t ExpandTree,
" alt=\"%s\" title=\"%s\""
" class=\"ICO20x20\" />",
Gbl.Prefs.IconsURL,
(ExpandTree == Brw_EXPAND_TREE_PLUS) ? "closed" :
(IconSubtree == Brw_ICON_TREE_EXPAND) ? "closed" :
"open",
Gbl.Title,
Gbl.Title);
@ -5825,7 +5853,7 @@ static void Brw_PutIconFolder (unsigned Level,Brw_ExpandTree_t ExpandTree,
" alt=\"%s\" title=\"%s\""
" class=\"ICO20x20\" />",
Gbl.Prefs.IconsURL,
(ExpandTree == Brw_EXPAND_TREE_PLUS) ? "closed" :
(IconSubtree == Brw_ICON_TREE_EXPAND) ? "closed" :
"open",
Txt_Folder,
Txt_Folder);

View File

@ -1236,11 +1236,12 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
break;
case Brw_ADMI_TEACH_GRP: // Notify all teachers in group except me
sprintf (Query,"SELECT crs_grp_usr.UsrCod"
" FROM crs_grp_usr,crs_grp,crs_usr"
" FROM crs_grp_usr,crs_grp,crs_grp_types,crs_usr"
" WHERE crs_grp_usr.GrpCod=%ld"
" AND crs_grp_usr.UsrCod<>%ld"
" AND crs_grp_usr.GrpCod=crs_grp.GrpCod"
" AND crs_grp.CrsCod=crs_usr.CrsCod"
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
" AND crs_grp_types.CrsCod=crs_usr.CrsCod"
" AND crs_usr.Role=%u", // Notify teachers only
Gbl.CurrentCrs.Grps.GrpCod,
Gbl.Usrs.Me.UsrDat.UsrCod,

View File

@ -166,7 +166,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -273,7 +273,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,1);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -366,7 +366,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -470,7 +470,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -562,7 +562,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);
@ -653,7 +653,7 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Act_FormStartAnchor (ActSeePrj,Pagination->Anchor);
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Prj_PutHiddenParamPrjOrder ();
Grp_PutParamWhichGrps ();
Prj_PutParamWhichPrjs ();
break;
case Pag_GAMES:
Act_FormStartAnchor (ActSeeAllGam,Pagination->Anchor);

View File

@ -88,7 +88,6 @@ static void Prj_ShowProjectsInCurrentPage (void);
static void Prj_PutFormToSelectWhichProjecsToShow (void);
static void Prj_ShowFormToSelWhichPrjs (Act_Action_t Action,void (*FuncParams) ());
static void Prj_PutParamWhichPrjs (void);
static void Prj_GetParamWhichPrjs (void);
static void Prj_ShowProjectsHead (bool PrintView);
@ -347,7 +346,7 @@ static void Prj_ShowFormToSelWhichPrjs (Act_Action_t Action,void (*FuncParams) (
/************* Parameter to show only my projects or all projects ************/
/*****************************************************************************/
static void Prj_PutParamWhichPrjs (void)
void Prj_PutParamWhichPrjs (void)
{
Prj_GetParamWhichPrjs ();

View File

@ -108,6 +108,7 @@ typedef enum
void Prj_SeeProjects (void);
void Prj_ShowTableAllProjects (void);
void Prj_PutParamWhichPrjs (void);
void Prj_PrintOneProject (void);
void Prj_ReqAddStd (void);