Version 16.61

This commit is contained in:
Antonio Cañas Vargas 2016-11-14 16:47:46 +01:00
parent 54eef99ee4
commit adde1a92f8
14 changed files with 198 additions and 3298 deletions

View File

@ -36,7 +36,7 @@ OBJS = swad_account.o swad_action.o swad_agenda.o swad_announcement.o \
swad_enrollment.o swad_exam.o \
swad_file.o swad_file_browser.o swad_follow.o swad_forum.o \
swad_global.o swad_group.o \
swad_help.o swad_holiday.o \
swad_help.o swad_hierarchy.o swad_holiday.o \
swad_icon.o swad_ID.o swad_image.o swad_indicator.o \
swad_info.o swad_institution.o \
swad_layout.o swad_link.o swad_logo.o \

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,7 @@
#include "swad_database.h"
#include "swad_global.h"
#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_institution.h"
#include "swad_logo.h"
#include "swad_parameter.h"
@ -721,7 +722,7 @@ void Ctr_ShowCtrsOfCurrentIns (void)
Ctr_GetListCentres (Gbl.CurrentIns.Ins.InsCod);
/***** Write menu to select country and institution *****/
Deg_WriteMenuAllCourses ();
Hie_WriteMenuAllCourses ();
/***** List centres *****/
Ctr_ListCentres ();
@ -1764,7 +1765,7 @@ void Ctr_ChangeCtrInsInConfig (void)
Gbl.CurrentIns.Ins.InsCod = NewIns.InsCod;
/***** Initialize again current course, degree, centre... *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/***** Write message to show the change made *****/
sprintf (Gbl.Message,Txt_The_centre_X_has_been_moved_to_the_institution_Y,

View File

@ -157,13 +157,17 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.59.3 (2016-11-14)"
#define CSS_FILE "swad16.59.css"
#define Log_PLATFORM_VERSION "SWAD 16.61 (2016-11-14)"
#define CSS_FILE "swad16.60.1.css"
#define JS_FILE "swad16.46.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 16.61: Nov 14, 2016 New module swad_hierarchy. (207159 lines)
Version 16.60.1: Nov 14, 2016 Changes in layout of file browser. (207096 lines)
Version 16.60: Nov 14, 2016 Code refactoring in file browser.
Fixed bug in assigments, reported by Javier Fernández Baldomero. (207101 lines)
Version 16.59.3: Nov 14, 2016 Code refactoring in file browser. (207072 lines)
Version 16.59.2: Nov 14, 2016 Fix bug in user's usage report. (207077 lines)
Version 16.59.1: Nov 14, 2016 Fix bug in deletion of a notice, reported by Javier Fernández Baldomero and others. (207076 lines)

View File

@ -39,6 +39,7 @@
#include "swad_exam.h"
#include "swad_global.h"
#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_indicator.h"
#include "swad_logo.h"
#include "swad_notification.h"
@ -970,7 +971,7 @@ void Crs_ShowCrssOfCurrentDeg (void)
Crs_GetListCoursesInDegree (Crs_ALL_COURSES_EXCEPT_REMOVED);
/***** Write menu to select country, institution, centre and degree *****/
Deg_WriteMenuAllCourses ();
Hie_WriteMenuAllCourses ();
/***** Show list of courses *****/
Crs_ListCourses ();
@ -2444,7 +2445,7 @@ void Crs_ChangeCrsDegInConfig (void)
Gbl.CurrentDeg.Deg.DegCod = NewDeg.DegCod;
/***** Initialize again current course, degree, centre... *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_course_X_has_been_moved_to_the_degree_Y,

View File

@ -41,6 +41,7 @@
#include "swad_exam.h"
#include "swad_global.h"
#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_indicator.h"
#include "swad_info.h"
#include "swad_logo.h"
@ -77,9 +78,6 @@ typedef enum
/**************************** Private constants ******************************/
/*****************************************************************************/
#define Deg_MAX_LENGTH_SHORT_NAME_DEGREE_ON_PAGE_HEAD 20 // Adjust depending on the size of the style used for the degree on the page head
#define Deg_MAX_LENGTH_SHORT_NAME_COURSE_ON_PAGE_HEAD 20 // Adjust depending on the size of the style used for the degree on the page head
/*****************************************************************************/
/**************************** Private prototypes *****************************/
/*****************************************************************************/
@ -87,8 +85,6 @@ typedef enum
static void Deg_Configuration (bool PrintView);
static void Deg_PutIconsToPrintAndUpload (void);
static void Deg_WriteSelectorOfDegree (void);
static void Deg_ListDegreesForEdition (void);
static bool Deg_CheckIfICanEditADegree (struct Degree *Deg);
static Deg_StatusTxt_t Deg_GetStatusTxtFromStatusBits (Deg_Status_t Status);
@ -584,104 +580,11 @@ static void Deg_PutIconsToPrintAndUpload (void)
Log_PutIconToChangeLogo (Sco_SCOPE_DEG);
}
/*****************************************************************************/
/*** Write menu to select country, institution, centre, degree and course ****/
/*****************************************************************************/
void Deg_WriteMenuAllCourses (void)
{
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Country;
extern const char *Txt_Institution;
extern const char *Txt_Centre;
extern const char *Txt_Degree;
extern const char *Txt_Course;
/***** Start of table *****/
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_2\""
" style=\"margin:0 auto 12px auto;\">");
/***** Write a 1st selector
with all the countries *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],Txt_Country);
Cty_WriteSelectorOfCountry ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
if (Gbl.CurrentCty.Cty.CtyCod > 0)
{
/***** Write a 2nd selector
with the institutions of selected country *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],Txt_Institution);
Ins_WriteSelectorOfInstitution ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
if (Gbl.CurrentIns.Ins.InsCod > 0)
{
/***** Write a 3rd selector
with all the centres of selected institution *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],Txt_Centre);
Ctr_WriteSelectorOfCentre ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
{
/***** Write a 4th selector
with all the degrees of selected centre *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],Txt_Degree);
Deg_WriteSelectorOfDegree ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
if (Gbl.CurrentDeg.Deg.DegCod > 0)
{
/***** Write a 5th selector
with all the courses of selected degree *****/
fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s RIGHT_MIDDLE\">"
"%s:"
"</td>"
"<td class=\"LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],Txt_Course);
Crs_WriteSelectorOfCourse ();
fprintf (Gbl.F.Out,"</td>"
"</tr>");
}
}
}
}
/***** End of table *****/
fprintf (Gbl.F.Out,"</table>");
}
/*****************************************************************************/
/*************************** Write selector of degree ************************/
/*****************************************************************************/
static void Deg_WriteSelectorOfDegree (void)
void Deg_WriteSelectorOfDegree (void)
{
extern const char *Txt_Degree;
char Query[512];
@ -743,341 +646,6 @@ static void Deg_WriteSelectorOfDegree (void)
Act_FormEnd ();
}
/*****************************************************************************/
/************* Write hierarchy breadcrumb in the top of the page *************/
/*****************************************************************************/
void Deg_WriteHierarchyBreadcrumb (void)
{
extern const char *The_ClassBreadcrumb[The_NUM_THEMES];
extern const char *Txt_System;
extern const char *Txt_Country;
extern const char *Txt_Institution;
extern const char *Txt_Centre;
extern const char *Txt_Degree;
char DegreeShortName[Deg_MAX_LENGTH_DEGREE_FULL_NAME+1]; // Full name of degree
char ClassOn[64];
char ClassSemiOff[64];
char ClassOff[64];
/***** CSS classes *****/
strcpy (ClassOn,The_ClassBreadcrumb[Gbl.Prefs.Theme]);
sprintf (ClassSemiOff,"BC_SEMIOFF %s",The_ClassBreadcrumb[Gbl.Prefs.Theme]);
sprintf (ClassOff,"BC_OFF %s",The_ClassBreadcrumb[Gbl.Prefs.Theme]);
/***** Form to go to the system *****/
Act_FormGoToStart (ActMnu);
Par_PutHiddenParamUnsigned ("NxtTab",(unsigned) TabSys);
Act_LinkFormSubmit (Txt_System,ClassOn,NULL);
fprintf (Gbl.F.Out,"%s</a>",Txt_System);
Act_FormEnd ();
if (Gbl.CurrentCty.Cty.CtyCod > 0) // Country selected...
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassOn);
/***** Form to go to see institutions of this country *****/
Act_FormGoToStart (ActSeeIns);
Cty_PutParamCtyCod (Gbl.CurrentCty.Cty.CtyCod);
Act_LinkFormSubmit (Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language],ClassOn,NULL);
fprintf (Gbl.F.Out,"%s</a>",
Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language]);
Act_FormEnd ();
}
else
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassSemiOff);
/***** Form to go to select countries *****/
Act_FormGoToStart (ActSeeCty);
Act_LinkFormSubmit (Txt_Country,ClassSemiOff,NULL);
fprintf (Gbl.F.Out,"%s</a>",Txt_Country);
Act_FormEnd ();
}
if (Gbl.CurrentIns.Ins.InsCod > 0) // Institution selected...
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassOn);
/***** Form to see centres of this institution *****/
Act_FormGoToStart (ActSeeCtr);
Ins_PutParamInsCod (Gbl.CurrentIns.Ins.InsCod);
Act_LinkFormSubmit (Gbl.CurrentIns.Ins.FullName,ClassOn,NULL);
fprintf (Gbl.F.Out,"%s</a>",
Gbl.CurrentIns.Ins.ShrtName);
Act_FormEnd ();
}
else if (Gbl.CurrentCty.Cty.CtyCod > 0)
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassSemiOff);
/***** Form to go to select institutions *****/
Act_FormGoToStart (ActSeeIns);
Act_LinkFormSubmit (Txt_Institution,ClassSemiOff,NULL);
fprintf (Gbl.F.Out,"%s</a>",Txt_Institution);
Act_FormEnd ();
}
else
/***** Separator and hidden institution *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; %s</span>",
ClassOff,Txt_Institution);
if (Gbl.CurrentCtr.Ctr.CtrCod > 0) // Centre selected...
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassOn);
/***** Form to see degrees of this centre *****/
Act_FormGoToStart (ActSeeDeg);
Ctr_PutParamCtrCod (Gbl.CurrentCtr.Ctr.CtrCod);
Act_LinkFormSubmit (Gbl.CurrentCtr.Ctr.FullName,ClassOn,NULL);
fprintf (Gbl.F.Out,"%s</a>",
Gbl.CurrentCtr.Ctr.ShrtName);
Act_FormEnd ();
}
else if (Gbl.CurrentIns.Ins.InsCod > 0)
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassSemiOff);
/***** Form to go to select centres *****/
Act_FormGoToStart (ActSeeCtr);
Act_LinkFormSubmit (Txt_Centre,ClassSemiOff,NULL);
fprintf (Gbl.F.Out,"%s</a>",Txt_Centre);
Act_FormEnd ();
}
else
/***** Separator and hidden centre *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; %s</span>",
ClassOff,Txt_Centre);
if (Gbl.CurrentDeg.Deg.DegCod > 0) // Degree selected...
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassOn);
/***** Form to go to see courses of this degree *****/
Act_FormGoToStart (ActSeeCrs);
Deg_PutParamDegCod (Gbl.CurrentDeg.Deg.DegCod);
Act_LinkFormSubmit (Gbl.CurrentDeg.Deg.FullName,ClassOn,NULL);
strcpy (DegreeShortName,Gbl.CurrentDeg.Deg.ShrtName);
Str_LimitLengthHTMLStr (DegreeShortName,
Deg_MAX_LENGTH_SHORT_NAME_DEGREE_ON_PAGE_HEAD);
fprintf (Gbl.F.Out,"%s</a>",
DegreeShortName);
Act_FormEnd ();
}
else if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
{
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",ClassSemiOff);
/***** Form to go to select degrees *****/
Act_FormGoToStart (ActSeeDeg);
Act_LinkFormSubmit (Txt_Degree,ClassSemiOff,NULL);
fprintf (Gbl.F.Out,"%s</a>",Txt_Degree);
Act_FormEnd ();
}
else
/***** Separator and hidden degree *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; %s</span>",
ClassOff,Txt_Degree);
/***** Separator *****/
fprintf (Gbl.F.Out,"<span class=\"%s\"> &gt; </span>",
(Gbl.CurrentCrs.Crs.CrsCod > 0) ? ClassOn :
((Gbl.CurrentDeg.Deg.DegCod > 0) ? ClassSemiOff :
ClassOff));
}
/*****************************************************************************/
/*************** Write course full name in the top of the page ***************/
/*****************************************************************************/
void Deg_WriteBigNameCtyInsCtrDegCrs (void)
{
extern const char *The_ClassCourse[The_NUM_THEMES];
extern const char *Txt_TAGLINE;
fprintf (Gbl.F.Out,"<h1 id=\"main_title\" class=\"%s\">",
The_ClassCourse[Gbl.Prefs.Theme]);
/***** Logo *****/
if (Gbl.CurrentCrs.Crs.CrsCod > 0 ||
Gbl.CurrentDeg.Deg.DegCod > 0)
Log_DrawLogo (Sco_SCOPE_DEG,Gbl.CurrentDeg.Deg.DegCod,
Gbl.CurrentDeg.Deg.ShrtName,40,"TOP_LOGO",false);
else if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
Log_DrawLogo (Sco_SCOPE_CTR,Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentCtr.Ctr.ShrtName,40,"TOP_LOGO",false);
else if (Gbl.CurrentIns.Ins.InsCod > 0)
Log_DrawLogo (Sco_SCOPE_INS,Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.ShrtName,40,"TOP_LOGO",false);
else if (Gbl.CurrentCty.Cty.CtyCod > 0)
Cty_DrawCountryMap (&Gbl.CurrentCty.Cty,"COUNTRY_MAP_TITLE");
else
fprintf (Gbl.F.Out,"<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\""
" class=\"TOP_LOGO\" />",
Gbl.Prefs.IconsURL,Cfg_PLATFORM_LOGO_SMALL_FILENAME,
Cfg_PLATFORM_SHORT_NAME,Cfg_PLATFORM_FULL_NAME);
/***** Text *****/
fprintf (Gbl.F.Out,"<div id=\"big_name_container\">");
if (Gbl.CurrentCty.Cty.CtyCod > 0)
fprintf (Gbl.F.Out,"<div id=\"big_full_name\">"
"%s" // Full name
"</div>"
"<div class=\"NOT_SHOWN\">"
" / " // To separate
"</div>"
"<div id=\"big_short_name\">"
"%s" // Short name
"</div>",
(Gbl.CurrentCrs.Crs.CrsCod > 0) ? Gbl.CurrentCrs.Crs.FullName :
((Gbl.CurrentDeg.Deg.DegCod > 0) ? Gbl.CurrentDeg.Deg.FullName :
((Gbl.CurrentCtr.Ctr.CtrCod > 0) ? Gbl.CurrentCtr.Ctr.FullName :
((Gbl.CurrentIns.Ins.InsCod > 0) ? Gbl.CurrentIns.Ins.FullName :
Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language]))),
(Gbl.CurrentCrs.Crs.CrsCod > 0) ? Gbl.CurrentCrs.Crs.ShrtName :
((Gbl.CurrentDeg.Deg.DegCod > 0) ? Gbl.CurrentDeg.Deg.ShrtName :
((Gbl.CurrentCtr.Ctr.CtrCod > 0) ? Gbl.CurrentCtr.Ctr.ShrtName :
((Gbl.CurrentIns.Ins.InsCod > 0) ? Gbl.CurrentIns.Ins.ShrtName :
Gbl.CurrentCty.Cty.Name[Gbl.Prefs.Language]))));
else // No country specified ==> home page
fprintf (Gbl.F.Out,"<div id=\"big_full_name\">"
"%s: %s" // Full name
"</div>"
"<div class=\"NOT_SHOWN\">"
" / " // To separate
"</div>"
"<div id=\"big_short_name\">"
"%s" // Short name
"</div>",
Cfg_PLATFORM_SHORT_NAME,Txt_TAGLINE,
Cfg_PLATFORM_SHORT_NAME);
fprintf (Gbl.F.Out,"</div>"
"</h1>");
}
/*****************************************************************************/
/**************** Initialize values related to current course ****************/
/*****************************************************************************/
void Deg_InitCurrentCourse (void)
{
/***** If numerical course code is available, get course data *****/
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
{
if (Crs_GetDataOfCourseByCod (&Gbl.CurrentCrs.Crs)) // Course found
Gbl.CurrentDeg.Deg.DegCod = Gbl.CurrentCrs.Crs.DegCod;
else
{
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
/***** If numerical degree code is available, get degree data *****/
if (Gbl.CurrentDeg.Deg.DegCod > 0)
{
if (Deg_GetDataOfDegreeByCod (&Gbl.CurrentDeg.Deg)) // Degree found
{
Gbl.CurrentCtr.Ctr.CtrCod = Gbl.CurrentDeg.Deg.CtrCod;
Gbl.CurrentDegTyp.DegTyp.DegTypCod = Gbl.CurrentDeg.Deg.DegTypCod;
Gbl.CurrentIns.Ins.InsCod = Deg_GetInsCodOfDegreeByCod (Gbl.CurrentDeg.Deg.DegCod);
/***** Degree type is available, so get degree type data *****/
if (!DT_GetDataOfDegreeTypeByCod (&Gbl.CurrentDegTyp.DegTyp)) // Degree type not found
{
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegTypCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
else
{
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
/***** If centre code is available, get centre data *****/
if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
{
if (Ctr_GetDataOfCentreByCod (&Gbl.CurrentCtr.Ctr)) // Centre found
Gbl.CurrentIns.Ins.InsCod = Gbl.CurrentCtr.Ctr.InsCod;
else
Gbl.CurrentCtr.Ctr.CtrCod = -1L;
}
/***** If numerical institution code is available, get institution data *****/
if (Gbl.CurrentIns.Ins.InsCod > 0)
{
if (Ins_GetDataOfInstitutionByCod (&Gbl.CurrentIns.Ins,Ins_GET_BASIC_DATA)) // Institution found
Gbl.CurrentCty.Cty.CtyCod = Gbl.CurrentIns.Ins.CtyCod;
else
{
Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
/***** If numerical country code is available, get country data *****/
if (Gbl.CurrentCty.Cty.CtyCod > 0)
{
if (!Cty_GetDataOfCountryByCod (&Gbl.CurrentCty.Cty,Cty_GET_BASIC_DATA)) // Country not found
{
Gbl.CurrentCty.Cty.CtyCod =
Gbl.CurrentIns.Ins.InsCod =
Gbl.CurrentCtr.Ctr.CtrCod =
Gbl.CurrentDeg.Deg.DegCod =
Gbl.CurrentCrs.Crs.CrsCod = -1L;
}
}
/***** Initialize default fields for edition to current values *****/
Gbl.Inss.EditingIns.CtyCod = Gbl.CurrentCty.Cty.CtyCod;
Gbl.Ctrs.EditingCtr.InsCod =
Gbl.Dpts.EditingDpt.InsCod = Gbl.CurrentIns.Ins.InsCod;
Gbl.Degs.EditingDeg.CtrCod = Gbl.CurrentCtr.Ctr.CtrCod;
Gbl.Degs.EditingDeg.DegTypCod = Gbl.CurrentDegTyp.DegTyp.DegTypCod;
/***** Initialize paths *****/
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
{
/***** Paths of course directories *****/
sprintf (Gbl.CurrentCrs.PathPriv,"%s/%s/%ld",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Gbl.CurrentCrs.Crs.CrsCod);
sprintf (Gbl.CurrentCrs.PathRelPubl,"%s/%s/%ld",
Cfg_PATH_SWAD_PUBLIC ,Cfg_FOLDER_CRS,Gbl.CurrentCrs.Crs.CrsCod);
sprintf (Gbl.CurrentCrs.PathURLPubl,"%s/%s/%ld",
Cfg_URL_SWAD_PUBLIC,Cfg_FOLDER_CRS,Gbl.CurrentCrs.Crs.CrsCod);
/***** If any of the course directories does not exist, create it *****/
if (!Fil_CheckIfPathExists (Gbl.CurrentCrs.PathPriv))
Fil_CreateDirIfNotExists (Gbl.CurrentCrs.PathPriv);
if (!Fil_CheckIfPathExists (Gbl.CurrentCrs.PathRelPubl))
Fil_CreateDirIfNotExists (Gbl.CurrentCrs.PathRelPubl);
/***** Count number of groups in current course (used only in some actions) *****/
Gbl.CurrentCrs.Grps.NumGrps = Grp_CountNumGrpsInCurrentCrs ();
}
}
/*****************************************************************************/
/************* Show the degrees belonging to the current centre **************/
/*****************************************************************************/
@ -1091,7 +659,7 @@ void Deg_ShowDegsOfCurrentCtr (void)
Deg_GetListDegsOfCurrentCtr ();
/***** Write menu to select country, institution and centre *****/
Deg_WriteMenuAllCourses ();
Hie_WriteMenuAllCourses ();
/***** Show list of degrees *****/
Deg_ListDegrees ();
@ -2512,7 +2080,7 @@ void Deg_ChangeDegCtrInConfig (void)
Gbl.CurrentCtr.Ctr.CtrCod = NewCtr.CtrCod;
/***** Initialize again current course, degree, centre... *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/***** Create message to show the change made *****/
sprintf (Gbl.Message,Txt_The_degree_X_has_been_moved_to_the_centre_Y,
@ -2858,7 +2426,7 @@ unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery)
/***** Write institutions, centres and degrees administrated by an admin *****/
/*****************************************************************************/
void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
extern const char *Txt_all_degrees;

View File

@ -98,10 +98,7 @@ void Deg_DrawDegreeLogoAndNameWithLink (struct Degree *Deg,Act_Action_t Action,
void Deg_ShowConfiguration (void);
void Deg_PrintConfiguration (void);
void Deg_WriteMenuAllCourses (void);
void Deg_WriteHierarchyBreadcrumb (void);
void Deg_WriteBigNameCtyInsCtrDegCrs (void);
void Deg_InitCurrentCourse (void);
void Deg_WriteSelectorOfDegree (void);
void Deg_ShowDegsOfCurrentCtr (void);
@ -149,8 +146,6 @@ unsigned Deg_GetNumDegsInCtr (long CtrCod);
unsigned Deg_GetNumDegsWithCrss (const char *SubQuery);
unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery);
void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan);
unsigned Deg_ListDegsFound (const char *Query);
#endif

View File

@ -1476,26 +1476,21 @@ 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,const char *Path,const char *PathInTree);
static bool Brw_WriteRowFileBrowser (unsigned Level,
Brw_FileType_t FileType,Brw_ExpandTree_t ExpandTree,
static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
const char *PathInTree,const char *FileName);
static void Brw_PutIconsRemoveCopyPaste (unsigned Level,Brw_FileType_t FileType,
static void Brw_PutIconsRemoveCopyPaste (unsigned Level,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static bool Brw_CheckIfCanPasteIn (unsigned Level);
static void Brw_PutIconRemoveFile (Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconRemoveFile (const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconRemoveDir (const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconCopy (Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameShow);
static void Brw_PutIconCopy (const char *PathInTree,const char *FileName,const char *FileNameShow);
static void Brw_PutIconPasteOn (const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconPasteOff (void);
static void Brw_IndentAndWriteIconExpandContract (unsigned Level,Brw_ExpandTree_t ExpandTree,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_IndentDependingOnLevel (unsigned Level);
static void Brw_PutIconShow (unsigned Level,Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_PutIconHide (unsigned Level,Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
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,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
@ -1504,13 +1499,14 @@ static void Brw_PutIconFileWithLinkToViewMetadata (unsigned Size,
struct FileMetadata *FileMetadata,
const char *FileNameToShow);
static void Brw_PutIconFile (unsigned Size,Brw_FileType_t FileType,const char *FileName);
static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileType,
static void Brw_WriteFileName (unsigned Level,bool IsPublic,
const char *PathInTree,const char *FileName,const char *FileNameToShow);
static void Brw_GetFileNameToShow (Brw_FileBrowser_t FileBrowser,unsigned Level,Brw_FileType_t FileType,
static void Brw_GetFileNameToShow (Brw_FileBrowser_t FileBrowser,unsigned Level,
Brw_FileType_t FileType,
const char *FileName,char *FileNameToShow);
static void Brw_LimitLengthFileNameToShow (Brw_FileType_t FileType,const char *FileName,char *FileNameToShow);
static void Brw_WriteDatesAssignment (void);
static void Brw_WriteFileSizeAndDate (Brw_FileType_t FileType,struct FileMetadata *FileMetadata);
static void Brw_WriteFileSizeAndDate (struct FileMetadata *FileMetadata);
static void Brw_WriteFileOrFolderPublisher (unsigned Level,unsigned long UsrCod);
static void Brw_AskConfirmRemoveFolderNotEmpty (void);
@ -1518,8 +1514,8 @@ static inline void Brw_GetAndWriteClipboard (void);
static void Brw_WriteCurrentClipboard (void);
static bool Brw_GetMyClipboard (void);
static bool Brw_CheckIfClipboardIsInThisTree (void);
static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path);
static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path);
static void Brw_AddPathToClipboards (void);
static void Brw_UpdatePathInClipboard (void);
static long Brw_GetCodForClipboard (void);
static long Brw_GetWorksUsrCodForClipboard (void);
@ -3370,22 +3366,22 @@ static void Brw_GetSelectedGroupData (struct GroupData *GrpDat,bool AbortOnError
static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
{
extern const char *Txt_Write_a_message_to_X;
extern const char *Txt_View_record_for_this_course;
bool ShowPhoto;
char PhotoURL[PATH_MAX+1];
/***** Show user's photo *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\" style=\"width:100px;\">");
fprintf (Gbl.F.Out,"<td class=\"LEFT_TOP\" style=\"width:64px;\">");
ShowPhoto = Pho_ShowUsrPhotoIsAllowed (UsrDat,PhotoURL);
Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL :
NULL,
"PHOTO93x124",Pho_ZOOM,false);
"PHOTO60x80",Pho_ZOOM,false);
fprintf (Gbl.F.Out,"</td>");
/***** Start form to send a message to this user *****/
fprintf (Gbl.F.Out,"<td class=\"MSG_AUT LEFT_TOP\" style=\"width:200px;\">");
fprintf (Gbl.F.Out,"<td class=\"MSG_AUT LEFT_TOP\" style=\"width:180px;\">");
Act_FormStart (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActSeeRecOneStd :
ActSeeRecOneTch);
ActSeeRecOneTch);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
/***** Show user's ID *****/
@ -3393,9 +3389,7 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
/***** Show user's name *****/
fprintf (Gbl.F.Out,"<br />");
sprintf (Gbl.Title,Txt_Write_a_message_to_X,
UsrDat->FullName);
Act_LinkFormSubmit (Gbl.Title,"MSG_AUT",NULL);
Act_LinkFormSubmit (Txt_View_record_for_this_course,"MSG_AUT",NULL);
fprintf (Gbl.F.Out,"%s",UsrDat->Surname1);
if (UsrDat->Surname2[0])
fprintf (Gbl.F.Out," %s",UsrDat->Surname2);
@ -3407,7 +3401,8 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
if (UsrDat->Email[0])
{
fprintf (Gbl.F.Out,"<br />"
"<a href=\"mailto:%s\" target=\"_blank\" class=\"MSG_AUT\">",
"<a href=\"mailto:%s\" target=\"_blank\""
" class=\"MSG_AUT\">",
UsrDat->Email);
Str_LimitLengthHTMLStr (UsrDat->Email,25);
fprintf (Gbl.F.Out,"%s</a>",UsrDat->Email);
@ -3641,7 +3636,8 @@ static void Brw_ShowFileBrowser (void)
/***** List recursively the directory *****/
fprintf (Gbl.F.Out,"<table class=\"BROWSER_TABLE\">");
Brw_SetFullPathInTree (Brw_RootFolderInternalNames[Gbl.FileBrowser.Type],".");
if (Brw_WriteRowFileBrowser (0,Brw_IS_FOLDER,Brw_EXPAND_TREE_NOTHING,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]);
fprintf (Gbl.F.Out,"</table>");
@ -5044,7 +5040,8 @@ static void Brw_ListDir (unsigned Level,const char *Path,const char *PathInTree)
}
/***** Write a row for the subdirectory *****/
if (Brw_WriteRowFileBrowser (Level,Brw_IS_FOLDER,ExpandTree,PathInTree,FileList[NumFile]->d_name))
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)
@ -5052,10 +5049,11 @@ static void Brw_ListDir (unsigned Level,const char *Path,const char *PathInTree)
Brw_ListDir (Level + 1,PathFileRel,PathFileInExplTree);
}
else if (S_ISREG (FileStatus.st_mode)) // It's a regular file
Brw_WriteRowFileBrowser (Level,
Str_FileIs (FileList[NumFile]->d_name,"url") ? Brw_IS_LINK :
Brw_IS_FILE,
Brw_EXPAND_TREE_NOTHING,PathInTree,FileList[NumFile]->d_name);
{
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);
}
}
free ((void *) FileList[NumFile]);
}
@ -5072,8 +5070,7 @@ static void Brw_ListDir (unsigned Level,const char *Path,const char *PathInTree)
// 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_FileType_t FileType,Brw_ExpandTree_t ExpandTree,
static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
const char *PathInTree,const char *FileName)
{
bool RowSetAsHidden = false;
@ -5110,7 +5107,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
if (SeeDocsZone || AdminDocsZone ||
SeeMarks || AdminMarks)
{
RowSetAsHidden = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,
RowSetAsHidden = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FileType,
Gbl.FileBrowser.Priv.FullPathInTree);
if (RowSetAsHidden && Level && (SeeDocsZone || SeeMarks))
return false;
@ -5118,13 +5115,13 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
{
if (RowSetAsHidden) // this row is marked as hidden
{
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
Gbl.FileBrowser.HiddenLevels[Level] = true;
LightStyle = true;
}
else // this row is not marked as hidden
{
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
Gbl.FileBrowser.HiddenLevels[Level] = false;
LightStyle = Brw_CheckIfAnyUpperLevelIsHidden (Level);
}
@ -5142,8 +5139,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
/***** Is this row public or private? *****/
if (SeeDocsZone || AdminDocsZone || SharedZone)
{
RowSetAsPublic = (FileType == Brw_IS_FOLDER) ? Brw_GetIfFolderHasPublicFiles (Gbl.FileBrowser.Priv.FullPathInTree) :
FileMetadata.IsPublic;
RowSetAsPublic = (Gbl.FileBrowser.FileType == Brw_IS_FOLDER) ? Brw_GetIfFolderHasPublicFiles (Gbl.FileBrowser.Priv.FullPathInTree) :
FileMetadata.IsPublic;
if (Gbl.FileBrowser.ShowOnlyPublicFiles && !RowSetAsPublic)
return false;
}
@ -5154,28 +5151,34 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
IsRecent = true;
/* Style of the text in this row */
Gbl.FileBrowser.TxtStyle = (LightStyle ? (FileType == Brw_IS_FOLDER || !IsRecent ? "LST_HID" :
"LST_REC_HID") :
(FileType == Brw_IS_FOLDER || !IsRecent ? "LST" :
"LST_REC"));
Gbl.FileBrowser.InputStyle = (LightStyle ? (FileType == Brw_IS_FOLDER || !IsRecent ? "LST_EDIT_HID" :
"LST_EDIT_REC_HID") :
(FileType == Brw_IS_FOLDER || !IsRecent ? "LST_EDIT" :
"LST_EDIT_REC"));
Gbl.FileBrowser.TxtStyle = (LightStyle ? (Gbl.FileBrowser.FileType == Brw_IS_FOLDER || !IsRecent ? "LST_HID" :
"LST_REC_HID") :
(Gbl.FileBrowser.FileType == Brw_IS_FOLDER || !IsRecent ? "LST" :
"LST_REC"));
Gbl.FileBrowser.InputStyle = (LightStyle ? (Gbl.FileBrowser.FileType == Brw_IS_FOLDER || !IsRecent ? "LST_EDIT_HID" :
"LST_EDIT_REC_HID") :
(Gbl.FileBrowser.FileType == Brw_IS_FOLDER || !IsRecent ? "LST_EDIT" :
"LST_EDIT_REC"));
/***** Get data of assignment using the name of the folder *****/
if (AssignmentsZone && Level == 1)
if (AssignmentsZone)
{
strncpy (Gbl.FileBrowser.Asg.Folder,FileName,Asg_MAX_LENGTH_FOLDER);
Gbl.FileBrowser.Asg.Folder[Asg_MAX_LENGTH_FOLDER] = '\0';
Asg_GetDataOfAssignmentByFolder (&Gbl.FileBrowser.Asg);
// The data of this assignment remains in Gbl.FileBrowser.Asg
// for all subsequent rows with Level > 1 (files or folders inside this folder),
// and they are overwritten on the next row with level == 1 (next assignment)
if (Level == 1) // Main folder of the assignment
{
strncpy (Gbl.FileBrowser.Asg.Folder,FileName,Asg_MAX_LENGTH_FOLDER);
Gbl.FileBrowser.Asg.Folder[Asg_MAX_LENGTH_FOLDER] = '\0';
Asg_GetDataOfAssignmentByFolder (&Gbl.FileBrowser.Asg);
// The data of this assignment remains in Gbl.FileBrowser.Asg
// for all subsequent rows with Level > 1 (files or folders inside this folder),
// and they are overwritten on the next row with level == 1 (next assignment)
}
}
else // Not an assignment zone
Gbl.FileBrowser.Asg.AsgCod = -1L;
/***** Get the name of the file to show *****/
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Level,FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Level,
Gbl.FileBrowser.FileType,
FileName,FileNameToShow);
/***** Start this row *****/
@ -5193,10 +5196,10 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
Gbl.FileBrowser.Clipboard.IsThisFile = true;
/* Check if I can modify (remove, rename, etc.) this file or folder */
Gbl.FileBrowser.ICanEditFileOrFolder = Brw_CheckIfICanEditFileOrFolder (Level);
Gbl.FileBrowser.ICanEditFileOrFolder = Brw_CheckIfICanEditFileOrFolder (Level);
/* Put icons to remove, copy and paste */
Brw_PutIconsRemoveCopyPaste (Level,FileType,PathInTree,FileName,FileNameToShow);
Brw_PutIconsRemoveCopyPaste (Level,PathInTree,FileName,FileNameToShow);
}
/***** Indentation depending on level, icon, and file/folder name *****/
@ -5216,15 +5219,13 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
if (AdminDocsZone || AdminMarks)
{
if (RowSetAsHidden) // this row is marked as hidden
Brw_PutIconShow (Level,FileType,
PathInTree,FileName,FileNameToShow);
Brw_PutIconShow (Level,PathInTree,FileName,FileNameToShow);
else // this row is not marked as hidden
Brw_PutIconHide (Level,FileType,
PathInTree,FileName,FileNameToShow);
Brw_PutIconHide (Level,PathInTree,FileName,FileNameToShow);
}
/***** File or folder icon *****/
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
/* Icon with folder */
Brw_PutIconFolder (Level,ExpandTree,
PathInTree,FileName,FileNameToShow);
@ -5242,7 +5243,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
Brw_PutIconNewFileOrFolder ();
/* File or folder name */
Brw_WriteFileName (Level,FileMetadata.IsPublic,FileType,
Brw_WriteFileName (Level,FileMetadata.IsPublic,
PathInTree,FileName,FileNameToShow);
/* End of the column */
@ -5252,16 +5253,16 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
if (AdminMarks)
/***** Header and footer rows *****/
Mrk_GetAndWriteNumRowsHeaderAndFooter (FileType,PathInTree,FileName);
Mrk_GetAndWriteNumRowsHeaderAndFooter (Gbl.FileBrowser.FileType,PathInTree,FileName);
if (AssignmentsZone && Level == 1)
/***** Start and end dates of assignment *****/
Brw_WriteDatesAssignment ();
else
/***** File date and size *****/
Brw_WriteFileSizeAndDate (FileType,&FileMetadata);
Brw_WriteFileSizeAndDate (&FileMetadata);
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
{
/***** Put icon to download ZIP of folder *****/
fprintf (Gbl.F.Out,"<td class=\"BM%u\">",Gbl.RowEvenOdd);
@ -5308,22 +5309,22 @@ void Brw_SetFullPathInTree (const char *PathInTreeUntilFileOrFolder,const char *
/****************** Put icons to remove, copy and paste **********************/
/*****************************************************************************/
static void Brw_PutIconsRemoveCopyPaste (unsigned Level,Brw_FileType_t FileType,
static void Brw_PutIconsRemoveCopyPaste (unsigned Level,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
/***** Icon to remove folder, file or link *****/
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
/* Icon to remove a folder */
Brw_PutIconRemoveDir (PathInTree,FileName,FileNameToShow);
else // File or link
/* Icon to remove a file or link */
Brw_PutIconRemoveFile (FileType,PathInTree,FileName,FileNameToShow);
Brw_PutIconRemoveFile (PathInTree,FileName,FileNameToShow);
/***** Icon to copy *****/
Brw_PutIconCopy (FileType,PathInTree,FileName,FileNameToShow);
Brw_PutIconCopy (PathInTree,FileName,FileNameToShow);
/***** Icon to paste *****/
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
{
if (Brw_CheckIfCanPasteIn (Level))
/* Icon to paste active */
@ -5345,19 +5346,25 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
{
char PathDstWithFile[PATH_MAX+1];
/* If there is nothing in clipboard... */
/***** If not in a folder... *****/
if (Gbl.FileBrowser.FileType != Brw_IS_FOLDER)
return false;
/***** If there is nothing in clipboard... *****/
if (Gbl.FileBrowser.Clipboard.FileBrowser == Brw_UNKNOWN)
return false;
/* Do not paste a link in marks... */
/***** Do not paste a link in marks... *****/
if (Gbl.FileBrowser.Clipboard.FileType == Brw_IS_LINK &&
(Gbl.FileBrowser.Type == Brw_ADMI_MARKS_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_MARKS_GRP))
return false;
/**** If I can not create elements into this folder... *****/
if (!Brw_CheckIfICanCreateIntoFolder (Level))
return false; // Pasting into top level of assignments is forbidden
/**** If we are in the same tree of the clipboard... *****/
if (Gbl.FileBrowser.Clipboard.IsThisTree) // We are in the same tree of the clipboard ==> we can paste or not depending on the subtree
{
/***** Construct the name of the file or folder destination *****/
@ -5372,10 +5379,9 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
/*****************************************************************************/
/******************* Write link e icon to remove a file **********************/
/*****************************************************************************/
// FileType can be Brw_IS_FILE or Brw_IS_LINK
// Gbl.FileBrowser.FileType can be Brw_IS_FILE or Brw_IS_LINK
static void Brw_PutIconRemoveFile (Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
static void Brw_PutIconRemoveFile (const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Remove_FILE_OR_LINK_X;
@ -5401,7 +5407,7 @@ static void Brw_PutIconRemoveFile (Brw_FileType_t FileType,
default:
break;
}
Brw_ParamListFiles (FileType,PathInTree,FileName);
Brw_ParamListFiles (Gbl.FileBrowser.FileType,PathInTree,FileName);
sprintf (Gbl.Title,Txt_Remove_FILE_OR_LINK_X,FileNameToShow);
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/remove-on64x64.png\""
" alt=\"%s\" title=\"%s\""
@ -5465,8 +5471,7 @@ static void Brw_PutIconRemoveDir (const char *PathInTree,const char *FileName,co
/************** Write link e icon to copy a file o a folder ******************/
/*****************************************************************************/
static void Brw_PutIconCopy (Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
static void Brw_PutIconCopy (const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Copy_FOLDER_FILE_OR_LINK_X;
extern const char *Txt_Copy_not_allowed;
@ -5493,7 +5498,7 @@ static void Brw_PutIconCopy (Brw_FileType_t FileType,
default:
break;
}
Brw_ParamListFiles (FileType,PathInTree,FileName);
Brw_ParamListFiles (Gbl.FileBrowser.FileType,PathInTree,FileName);
sprintf (Gbl.Title,Txt_Copy_FOLDER_FILE_OR_LINK_X,FileNameToShow);
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/copy_on16x16.gif\""
" alt=\"%s\" title=\"%s\""
@ -5693,8 +5698,7 @@ static void Brw_IndentDependingOnLevel (unsigned Level)
/****************** Put link and icon to show file or folder *****************/
/*****************************************************************************/
static void Brw_PutIconShow (unsigned Level,Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
static void Brw_PutIconShow (unsigned Level,const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Show_FOLDER_FILE_OR_LINK_X;
@ -5709,7 +5713,7 @@ static void Brw_PutIconShow (unsigned Level,Brw_FileType_t FileType,
default:
break;
}
Brw_ParamListFiles (FileType,PathInTree,FileName);
Brw_ParamListFiles (Gbl.FileBrowser.FileType,PathInTree,FileName);
sprintf (Gbl.Title,Txt_Show_FOLDER_FILE_OR_LINK_X,FileNameToShow);
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/eye-slash-%s64x64.png\""
" alt=\"%s\" title=\"%s\""
@ -5727,8 +5731,7 @@ static void Brw_PutIconShow (unsigned Level,Brw_FileType_t FileType,
/****************** Put link and icon to hide file or folder *****************/
/*****************************************************************************/
static void Brw_PutIconHide (unsigned Level,Brw_FileType_t FileType,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
static void Brw_PutIconHide (unsigned Level,const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Hide_FOLDER_FILE_OR_LINK_X;
@ -5743,7 +5746,7 @@ static void Brw_PutIconHide (unsigned Level,Brw_FileType_t FileType,
default:
break;
}
Brw_ParamListFiles (FileType,PathInTree,FileName);
Brw_ParamListFiles (Gbl.FileBrowser.FileType,PathInTree,FileName);
sprintf (Gbl.Title,Txt_Hide_FOLDER_FILE_OR_LINK_X,FileNameToShow);
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/eye-%s64x64.png\""
" alt=\"%s\" title=\"%s\""
@ -5948,7 +5951,7 @@ static void Brw_PutIconFile (unsigned Size,Brw_FileType_t FileType,const char *F
/********** Write central part with the name of a file or folder *************/
/*****************************************************************************/
static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileType,
static void Brw_WriteFileName (unsigned Level,bool IsPublic,
const char *PathInTree,const char *FileName,const char *FileNameToShow)
{
extern const char *Txt_Check_marks_in_file_X;
@ -5956,7 +5959,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileT
extern const char *Txt_Public_open_educational_resource_OER_for_everyone;
/***** Name and link of the folder, file or link *****/
if (FileType == Brw_IS_FOLDER)
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER)
{
/***** Start of cell *****/
fprintf (Gbl.F.Out,"<td class=\"%s LEFT_MIDDLE",
@ -5981,10 +5984,6 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileT
case Brw_ADMI_WORKS_CRS:
Usr_PutHiddenParUsrCodAll (Brw_ActRenameFolder[Gbl.FileBrowser.Type],Gbl.Usrs.Select.All);
Usr_PutParamOtherUsrCodEncrypted ();
fprintf (Gbl.F.Out,"<strong>%ld</strong>",
Gbl.FileBrowser.Asg.AsgCod); // TODO: Remove this!!!!!!!!!!!!!!!
break;
default:
break;
@ -6050,7 +6049,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileT
default:
break;
}
Brw_ParamListFiles (FileType,PathInTree,FileName);
Brw_ParamListFiles (Gbl.FileBrowser.FileType,PathInTree,FileName);
/* Link to the form and to the file */
sprintf (Gbl.Title,(Gbl.FileBrowser.Type == Brw_SHOW_MARKS_CRS ||
@ -6079,7 +6078,8 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,Brw_FileType_t FileT
/*********************** Which filename must be shown? ***********************/
/*****************************************************************************/
static void Brw_GetFileNameToShow (Brw_FileBrowser_t FileBrowser,unsigned Level,Brw_FileType_t FileType,
static void Brw_GetFileNameToShow (Brw_FileBrowser_t FileBrowser,unsigned Level,
Brw_FileType_t FileType,
const char *FileName,char *FileNameToShow)
{
extern const char *Txt_ROOT_FOLDER_EXTERNAL_NAMES[Brw_NUM_TYPES_FILE_BROWSER];
@ -6157,9 +6157,7 @@ static void Brw_WriteDatesAssignment (void)
UniqueId++;
/***** Write start date *****/
fprintf (Gbl.F.Out,"<table>"
"<tr>"
"<td id=\"asg_start_date_%u\" class=\"%s RIGHT_MIDDLE\">",
fprintf (Gbl.F.Out,"<span id=\"asg_start_date_%u\" class=\"%s RIGHT_MIDDLE\">",
UniqueId,
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
"ASG_LST_DATE_RED");
@ -6168,20 +6166,18 @@ static void Brw_WriteDatesAssignment (void)
"</script>",
UniqueId,
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_START_TIME],Txt_Today);
fprintf (Gbl.F.Out,"</td>");
fprintf (Gbl.F.Out,"</span>");
/***** Arrow *****/
fprintf (Gbl.F.Out,"<td class=\"RIGHT_MIDDLE\" style=\"width:20px;\">"
"<img src=\"%s/arrow%s16x12.gif\""
fprintf (Gbl.F.Out,"<img src=\"%s/arrow%s16x12.gif\""
" alt=\"\" title=\"\""
" class=\"ICO20x15B\" />"
"</td>",
" class=\"ICO20x15\" />",
Gbl.Prefs.IconsURL,
Gbl.FileBrowser.Asg.Open ? "green" :
"red");
/***** Write end date *****/
fprintf (Gbl.F.Out,"<td id=\"asg_end_date_%u\" class=\"%s RIGHT_MIDDLE\">",
fprintf (Gbl.F.Out,"<span id=\"asg_end_date_%u\" class=\"%s RIGHT_MIDDLE\">",
UniqueId,
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
"ASG_LST_DATE_RED");
@ -6190,9 +6186,7 @@ static void Brw_WriteDatesAssignment (void)
"</script>",
UniqueId,
(long) Gbl.FileBrowser.Asg.TimeUTC[Asg_END_TIME],Txt_Today);
fprintf (Gbl.F.Out,"</td>"
"</tr>"
"</table>");
fprintf (Gbl.F.Out,"</span>");
}
else
fprintf (Gbl.F.Out,"&nbsp;(%s)",
@ -6204,14 +6198,14 @@ static void Brw_WriteDatesAssignment (void)
/****************** Write size and date of a file or folder ******************/
/*****************************************************************************/
static void Brw_WriteFileSizeAndDate (Brw_FileType_t FileType,struct FileMetadata *FileMetadata)
static void Brw_WriteFileSizeAndDate (struct FileMetadata *FileMetadata)
{
extern const char *Txt_Today;
static unsigned UniqueId = 0;
char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING];
/***** Write the file size *****/
if (FileType == Brw_IS_FILE)
if (Gbl.FileBrowser.FileType == Brw_IS_FILE)
Fil_WriteFileSizeBrief ((double) FileMetadata->Size,FileSizeStr);
else
FileSizeStr[0] = '\0';
@ -6225,8 +6219,8 @@ static void Brw_WriteFileSizeAndDate (Brw_FileType_t FileType,struct FileMetadat
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE COLOR%u\">"
"&nbsp;",
Gbl.FileBrowser.TxtStyle,Gbl.RowEvenOdd);
if (FileType == Brw_IS_FILE ||
FileType == Brw_IS_LINK)
if (Gbl.FileBrowser.FileType == Brw_IS_FILE ||
Gbl.FileBrowser.FileType == Brw_IS_LINK)
{
UniqueId++;
fprintf (Gbl.F.Out,"<span id=\"filedate%u\"></span>"
@ -6324,7 +6318,8 @@ void Brw_AskRemFileFromTree (void)
Brw_ParamListFiles (Gbl.FileBrowser.FileType,Gbl.FileBrowser.Priv.PathInTreeUntilFilFolLnk,Gbl.FileBrowser.FilFolLnkName);
/* Show question */
Brw_GetFileNameToShow (Gbl.FileBrowser.FileType,Gbl.FileBrowser.Level,Gbl.FileBrowser.FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.FileType,Gbl.FileBrowser.Level,
Gbl.FileBrowser.FileType,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X,
FileNameToShow);
@ -6568,11 +6563,9 @@ void Brw_CopyFromFileBrowser (void)
/***** Put the path in the clipboard *****/
if (Brw_GetMyClipboard ())
Brw_UpdatePathInClipboard (Gbl.FileBrowser.FileType,
Gbl.FileBrowser.Priv.FullPathInTree);
Brw_UpdatePathInClipboard ();
else
Brw_AddPathToClipboards (Gbl.FileBrowser.FileType,
Gbl.FileBrowser.Priv.FullPathInTree);
Brw_AddPathToClipboards ();
/***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
@ -6796,7 +6789,8 @@ static void Brw_WriteCurrentClipboard (void)
LevelClipboard++;
if (LevelClipboard) // Is not the root folder?
{
Brw_GetFileNameToShow (Gbl.FileBrowser.Clipboard.FileBrowser,LevelClipboard,Gbl.FileBrowser.Clipboard.FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.Clipboard.FileBrowser,LevelClipboard,
Gbl.FileBrowser.Clipboard.FileType,
Gbl.FileBrowser.Clipboard.FileName,FileNameToShow);
switch (Gbl.FileBrowser.Clipboard.FileType)
{
@ -6961,7 +6955,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
/***************************** Add path to clipboards ************************/
/*****************************************************************************/
static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path)
static void Brw_AddPathToClipboards (void)
{
long Cod = Brw_GetCodForClipboard ();
long WorksUsrCod = Brw_GetWorksUsrCodForClipboard ();
@ -6976,7 +6970,7 @@ static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path)
"'%u','%s')",
Gbl.Usrs.Me.UsrDat.UsrCod,(unsigned) Gbl.FileBrowser.Type,
Cod,WorksUsrCod,
(unsigned) FileType,Path);
(unsigned) Gbl.FileBrowser.FileType,Gbl.FileBrowser.Priv.FullPathInTree);
DB_QueryINSERT (Query,"can not add source of copy to clipboard");
}
@ -6984,7 +6978,7 @@ static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path)
/************************** Update path in my clipboard **********************/
/*****************************************************************************/
static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path)
static void Brw_UpdatePathInClipboard (void)
{
long Cod = Brw_GetCodForClipboard ();
long WorksUsrCod = Brw_GetWorksUsrCodForClipboard ();
@ -6996,7 +6990,8 @@ static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path)
"FileType='%u',Path='%s'"
" WHERE UsrCod='%ld'",
(unsigned) Gbl.FileBrowser.Type,
Cod,WorksUsrCod,(unsigned) FileType,Path,
Cod,WorksUsrCod,
(unsigned) Gbl.FileBrowser.FileType,Gbl.FileBrowser.Priv.FullPathInTree,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update source of copy in clipboard");
}
@ -8015,7 +8010,8 @@ void Brw_ShowFormFileBrowser (void)
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{
/***** Name of the folder to be shown ****/
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Gbl.FileBrowser.FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Gbl.FileBrowser.FileType,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
/***** 1. Form to create a new folder *****/
@ -8092,7 +8088,7 @@ static void Brw_PutFormToCreateAFolder (const char *FileNameToShow)
"%s: "
"</label>"
"<input type=\"text\" name=\"NewFolderName\""
" size=\"32\" maxlength=\"40\" value=\"\" />",
" size=\"30\" maxlength=\"40\" value=\"\" />",
The_ClassForm[Gbl.Prefs.Theme],Txt_Folder);
/* Button to send and end frame *****/
@ -8421,7 +8417,8 @@ void Brw_RecFolderFileBrowser (void)
PathCompleteInTreeIncludingFolder,false,Brw_LICENSE_DEFAULT);
/* The folder has been created sucessfully */
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_The_folder_X_has_been_created_inside_the_folder_Y,
Gbl.FileBrowser.NewFilFolLnkName,FileNameToShow);
@ -8721,7 +8718,8 @@ static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType)
/* Show message of confirmation */
if (UploadType == Brw_CLASSIC_UPLOAD)
{
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_The_file_X_has_been_placed_inside_the_folder_Y,
Gbl.FileBrowser.NewFilFolLnkName,
@ -8901,7 +8899,8 @@ void Brw_RecLinkFileBrowser (void)
PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT);
/* Show message of confirmation */
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_The_link_X_has_been_placed_inside_the_folder_Y,
FileName,FileNameToShow);
@ -9055,7 +9054,8 @@ void Brw_SetDocumentAsVisible (void)
Brw_RemoveAffectedClipboards (Gbl.FileBrowser.Type,Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.UsrCod);
/***** Write message of confirmation *****/
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Gbl.FileBrowser.FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Gbl.FileBrowser.FileType,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_FILE_FOLDER_OR_LINK_X_is_now_visible,
FileNameToShow);
@ -9087,7 +9087,8 @@ void Brw_SetDocumentAsHidden (void)
Brw_RemoveAffectedClipboards (Gbl.FileBrowser.Type,Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.UsrCod);
/***** Write confirmation message *****/
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Gbl.FileBrowser.FileType,
Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,
Gbl.FileBrowser.FileType,
Gbl.FileBrowser.FilFolLnkName,FileNameToShow);
sprintf (Gbl.Message,Txt_FILE_FOLDER_OR_LINK_X_is_now_hidden,FileNameToShow);
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
@ -11116,11 +11117,23 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
return Brw_CheckIfICanModifySharedFileOrFolder ();
case Brw_ADMI_ASSIG_USR:
case Brw_ADMI_ASSIG_CRS:
return (Gbl.FileBrowser.Asg.AsgCod <= 0 || // If folder does not correspond to any assignment
(!Gbl.FileBrowser.Asg.Hidden && // If assignment is visible (not hidden)
Gbl.FileBrowser.Asg.IBelongToCrsOrGrps && // If I can do this assignment
((Gbl.Usrs.Me.LoggedRole == Rol_STUDENT && Gbl.FileBrowser.Asg.Open) ||
Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER)));
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return true; // Folder can be removed or renamed
if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden
return false; // Do not edit anything in hidden assigments
if (Gbl.FileBrowser.FileType == Brw_IS_FOLDER && // The main folder of an assignment
Level == 1)
return false; // Do not remove / rename main folder of assigment
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment
return false; // I can not edit this assignment
return ((Gbl.Usrs.Me.LoggedRole == Rol_STUDENT && // Students can edit
Gbl.FileBrowser.Asg.Open) || // inside open assignments
Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER); // Teachers can edit
// inside open or closed assignments
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}
@ -11132,6 +11145,10 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
{
/***** If not in a folder... *****/
if (Gbl.FileBrowser.FileType != Brw_IS_FOLDER)
return false;
/***** I must be student, teacher, admin or superuser to edit *****/
if (Gbl.Usrs.Me.MaxRole < Rol_STUDENT)
return false;
@ -11145,12 +11162,23 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
{
case Brw_ADMI_ASSIG_USR:
case Brw_ADMI_ASSIG_CRS:
return (Level != 0 &&
(Gbl.FileBrowser.Asg.AsgCod <= 0 || // If folder does not correspond to any assignment
(!Gbl.FileBrowser.Asg.Hidden && // If assignment is visible (not hidden)
Gbl.FileBrowser.Asg.IBelongToCrsOrGrps && // If I can do this assignment
((Gbl.Usrs.Me.LoggedRole == Rol_STUDENT && Gbl.FileBrowser.Asg.Open) ||
Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER))));
if (Level == 0) // If root folder
return false; // Folders of assigments (level 1)
// can only be created automatically
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return false; // Do not create anything out of assignments
if (Gbl.FileBrowser.Asg.Hidden) // If assignment is hidden
return false; // Do not create anything in hidden assigments
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment
return false; // I can not create anything inside this assignment
return ((Gbl.Usrs.Me.LoggedRole == Rol_STUDENT && // Students can create
Gbl.FileBrowser.Asg.Open) || // inside open assignments
Gbl.Usrs.Me.LoggedRole >= Rol_TEACHER); // Teachers can create
// inside open or closed assignments
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}

View File

@ -34,6 +34,7 @@
#include "swad_database.h"
#include "swad_global.h"
#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_institution.h"
#include "swad_logo.h"
#include "swad_parameter.h"
@ -645,7 +646,7 @@ void Ins_ShowInssOfCurrentCty (void)
Ins_GetListInstitutions (Gbl.CurrentCty.Cty.CtyCod,Ins_GET_EXTRA_DATA);
/***** Write menu to select country *****/
Deg_WriteMenuAllCourses ();
Hie_WriteMenuAllCourses ();
/***** List institutions *****/
Ins_ListInstitutions ();
@ -1791,7 +1792,7 @@ void Ins_ChangeInsCtyInConfig (void)
Gbl.CurrentCty.Cty.CtyCod = NewCty.CtyCod;
/***** Initialize again current course, degree, centre... *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/***** Write message to show the change made *****/
sprintf (Gbl.Message,Txt_The_country_of_the_institution_X_has_changed_to_Y,

View File

@ -37,6 +37,7 @@
#include "swad_database.h"
#include "swad_exam.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
#include "swad_logo.h"
#include "swad_MFU.h"
#include "swad_notice.h"
@ -853,7 +854,7 @@ static void Lay_WritePageTopHeading (void)
/* 2nd. row, 2nd. column: degree and course */
fprintf (Gbl.F.Out,"<div id=\"head_row_2_hierarchy\">");
Lay_WriteBreadcrumb ();
Deg_WriteBigNameCtyInsCtrDegCrs ();
Hie_WriteBigNameCtyInsCtrDegCrs ();
fprintf (Gbl.F.Out,"</div>");
/* 2nd. row, 3rd. column */
@ -879,7 +880,7 @@ static void Lay_WritePageTopHeading (void)
static void Lay_WriteBreadcrumb (void)
{
fprintf (Gbl.F.Out,"<div id=\"breadcrumb\">");
Deg_WriteHierarchyBreadcrumb ();
Hie_WriteHierarchyBreadcrumb ();
Crs_WriteSelectorMyCourses ();
fprintf (Gbl.F.Out,"</div>");
}

View File

@ -34,8 +34,8 @@
#include "swad_config.h"
#include "swad_connected.h"
#include "swad_database.h"
#include "swad_degree.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
#include "swad_MFU.h"
#include "swad_parameter.h"
#include "swad_preference.h"
@ -114,7 +114,7 @@ int main (int argc, char *argv[])
{
Par_CreateListOfParams ();
Par_GetMainParameters ();
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
if (!Gbl.WebService.IsWebService)
{

View File

@ -51047,27 +51047,6 @@ const char *Txt_Write_a_message =
"Escrever uma mensagem";
#endif
const char *Txt_Write_a_message_to_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"Escriu un missatge a %s";
#elif L==2
"Schreiben Sie %s eine Nachricht";
#elif L==3
"Write a message to %s";
#elif L==4
"Escribir un mensaje a %s";
#elif L==5
"&Eacute;crire un message &agrave; %s";
#elif L==6
"Escribir un mensaje a %s"; // Okoteve traducción
#elif L==7
"Scrivi un messaggio a %s";
#elif L==8
"Napisz wiadomo&sacute;&cacute; do %s";
#elif L==9
"Escrever uma mensagem para %s";
#endif
const char *Txt_Wrong_file_type =
#if L==1
"Tipus d'arxiu incorrecte.";

View File

@ -46,6 +46,7 @@
#include "swad_global.h"
#include "swad_group.h"
#include "swad_help.h"
#include "swad_hierarchy.h"
#include "swad_ID.h"
#include "swad_MFU.h"
#include "swad_nickname.h"
@ -2572,7 +2573,7 @@ static void Usr_SetUsrRoleAndPrefs (void)
Gbl.CurrentCrs.Crs.CrsCod = Gbl.Usrs.Me.UsrLast.LastCrs;
/* Initialize again current course, degree, centre... */
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/* Get again my role in this course */
Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB = Rol_GetRoleInCrs (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Usrs.Me.UsrDat.UsrCod);
@ -3250,7 +3251,7 @@ static void Usr_WriteRowAdmData (unsigned NumUsr,struct UsrData *UsrDat)
"</tr>");
/***** Write degrees which are administrated by this administrator *****/
Deg_GetAndWriteInsCtrDegAdminBy (UsrDat->UsrCod,
Hie_GetAndWriteInsCtrDegAdminBy (UsrDat->UsrCod,
Gbl.Usrs.Listing.WithPhotos ? Usr_NUM_MAIN_FIELDS_DATA_ADM :
Usr_NUM_MAIN_FIELDS_DATA_ADM-1);
}

View File

@ -105,6 +105,7 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/
#include "swad_database.h"
#include "swad_file_browser.h"
#include "swad_global.h"
#include "swad_hierarchy.h"
#include "swad_ID.h"
#include "swad_notice.h"
#include "swad_notification.h"
@ -1356,7 +1357,7 @@ int swad__getCourseInfo (struct soap *soap,
strcpy (getCourseInfo->infoSrc,NamesInWSForInfoSrc[InfoSrc]);
/***** Set paths *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
/***** Get info text *****/
getCourseInfo->infoTxt = NULL;
@ -4605,7 +4606,7 @@ int swad__getFile (struct soap *soap,
}
/***** Set paths *****/
Deg_InitCurrentCourse ();
Hie_InitCurrentCourse ();
Brw_SetFullPathInTree (FileMetadata.PathInTreeUntilFilFolLnk,
FileMetadata.FilFolLnkName);
Brw_InitializeFileBrowser ();