diff --git a/swad_changelog.h b/swad_changelog.h
index 045aa746b..b5aab8a45 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -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:
diff --git a/swad_file_browser.c b/swad_file_browser.c
index b2e3f67d1..719beb725 100644
--- a/swad_file_browser.c
+++ b/swad_file_browser.c
@@ -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,"
");
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,"
");
/***** 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,"");
+ 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,"",Gbl.RowEvenOdd);
- switch (ExpandTree)
+ switch (IconThisRow)
{
- case Brw_EXPAND_TREE_NOTHING:
+ case Brw_ICON_TREE_NOTHING:
fprintf (Gbl.F.Out,"",
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);
diff --git a/swad_notification.c b/swad_notification.c
index 5deae6213..a8adbb0b6 100644
--- a/swad_notification.c
+++ b/swad_notification.c
@@ -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,
diff --git a/swad_pagination.c b/swad_pagination.c
index 6aa178073..9d75c1248 100644
--- a/swad_pagination.c
+++ b/swad_pagination.c
@@ -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);
diff --git a/swad_project.c b/swad_project.c
index 6f5e9656c..5062e4866 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -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 ();
diff --git a/swad_project.h b/swad_project.h
index 80644cb42..abc1199a6 100644
--- a/swad_project.h
+++ b/swad_project.h
@@ -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);
|