mirror of https://github.com/acanas/swad-core.git
Version 15.70
This commit is contained in:
parent
3c484f727e
commit
85cee5a30f
1844
swad_action.c
1844
swad_action.c
File diff suppressed because it is too large
Load Diff
|
@ -70,11 +70,9 @@ typedef enum
|
|||
|
||||
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
||||
|
||||
// #define Act_NUM_ACTIONS (7+52+15+90+73+68+205+183+154+171+27+80)
|
||||
// #define Act_NUM_ACTIONS (7+52+15+90+73+67+205+183+154+171+27+80)
|
||||
#define Act_NUM_ACTIONS (7+52+15+90+72+67+205+183+154+171+27+80)
|
||||
#define Act_NUM_ACTIONS (7+52+15+90+72+67+205+183+154+171+27+82)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1487
|
||||
#define Act_MAX_ACTION_COD 1489
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
||||
|
||||
|
@ -1352,6 +1350,9 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
|||
#define ActChgDatBrf (ActSeeAllStaCrs+79)
|
||||
#define ActDowBrf (ActSeeAllStaCrs+80)
|
||||
|
||||
#define ActAskRemOldBrf (ActSeeAllStaCrs+81)
|
||||
#define ActRemOldBrf (ActSeeAllStaCrs+82)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -113,18 +113,19 @@
|
|||
// TODO: Reply to all
|
||||
// TODO: Reply icons should appear without text
|
||||
// TODO: Link to remove messages is too wide. For example: "Remove these X messages".
|
||||
// TODO: Remove old files in briefcase!!!!! Disk almost full!!!!!
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.68.1 (2015/12/20)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.70 (2015/12/21)"
|
||||
#define CSS_FILE "swad15.65.1.css"
|
||||
|
||||
// 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 15.70: Dec 21, 2015 New action to remove old files in briefcase. Not finished. (187352 lines)
|
||||
Version 15.69: Dec 20, 2015 New option in briefcase to ask for removing old files. (187270 lines)
|
||||
Version 15.68.1: Dec 20, 2015 Fixed bugs in connected users. (187171 lines)
|
||||
Version 15.68: Dec 19, 2015 Show guests in connected users.
|
||||
Optimization in queries about connected users. (187158 lines)
|
||||
|
|
|
@ -496,7 +496,7 @@
|
|||
#define Cfg_TIME_TO_CHANGE_BANNER ((time_t)( 5UL*60UL)) // After these seconds, change banner
|
||||
#define Cfg_NUMBER_OF_BANNERS 1 // Number of banners to show simultaneously
|
||||
|
||||
#define Cfg_TIME_TO_DELETE_Svc_KEY ((time_t)( 7UL*24UL*60UL*60UL)) // After these seconds, a web service key is removed
|
||||
#define Cfg_TIME_TO_DELETE_WEB_SERVICE_KEY ((time_t)( 7UL*24UL*60UL*60UL)) // After these seconds, a web service key is removed
|
||||
|
||||
#define Cfg_TIME_TO_DELETE_HTML_OUTPUT ((time_t)( 30UL*60UL)) // Remove the HTML output files older than these seconds
|
||||
|
||||
|
@ -507,6 +507,8 @@
|
|||
#define Cfg_TIME_TO_DELETE_BROWSER_CLIPBOARD ((time_t)( 15UL*60UL)) // Paths older than these seconds are removed from clipboard
|
||||
#define Cfg_TIME_TO_DELETE_BROWSER_ZIP_FILES ((time_t)( 2UL*60UL*60UL)) // Temporary zip files are deleted after these seconds
|
||||
|
||||
#define Cfg_MONTHS_TO_DELETE_OLD_BRIEFCASE_FILES 24 // Months to remove old files in briefcase
|
||||
|
||||
#define Cfg_TIME_TO_DELETE_MARKS_TMP_FILES ((time_t)( 2UL*60UL*60UL)) // Temporary files with students' marks are deleted after these seconds
|
||||
|
||||
#define Cfg_TIME_TO_DELETE_PARAMS_TO_COMMANDS ((time_t)( 15UL*60UL)) // Temporary files with params to commands are deleted after these seconds
|
||||
|
|
|
@ -1335,7 +1335,7 @@ static void Brw_InitHiddenLevels (void);
|
|||
static void Brw_ShowSizeOfFileTree (void);
|
||||
static void Brw_StoreSizeOfFileTreeInDB (void);
|
||||
|
||||
static void Brw_PutFormToShowOrAdminParams (void);
|
||||
static void Brw_PutParamsContextualLink (void);
|
||||
static void Brw_PutFormToShowOrAdmin (Brw_ShowOrAdmin_t ShowOrAdmin,
|
||||
Act_Action_t Action);
|
||||
|
||||
|
@ -1453,6 +1453,10 @@ static bool Brw_CheckIfIHavePermissionFileOrFolderCommon (void);
|
|||
|
||||
static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row);
|
||||
|
||||
static void Brw_PutFormToAskRemOldFiles (void);
|
||||
static void Brw_RemoveOldFilesInBrowser (void);
|
||||
static void Brw_ScanDirRemovingOlfFiles (unsigned Level,const char *Path);
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Get parameters related to file browser ********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -1998,6 +2002,8 @@ void Brw_GetParAndInitFileBrowser (void)
|
|||
case ActReqDatBrf:
|
||||
case ActChgDatBrf:
|
||||
case ActDowBrf:
|
||||
case ActAskRemOldBrf: // Ask for removing old files in briefcase
|
||||
case ActRemOldBrf: // Remove old files in briefcase
|
||||
Gbl.FileBrowser.Type = Brw_ADMI_BRIEF_USR;
|
||||
break;
|
||||
default:
|
||||
|
@ -3278,7 +3284,7 @@ static void Brw_ShowFileBrowser (void)
|
|||
extern const char *Txt_Marks_management_area;
|
||||
extern const char *Txt_Assignments_area;
|
||||
extern const char *Txt_Works_area;
|
||||
extern const char *Txt_Private_storage_area;
|
||||
extern const char *Txt_Temporary_private_storage_area;
|
||||
const char *Brw_TitleOfFileBrowser[Brw_NUM_TYPES_FILE_BROWSER];
|
||||
|
||||
/***** Set title of file browser *****/
|
||||
|
@ -3291,7 +3297,7 @@ static void Brw_ShowFileBrowser (void)
|
|||
Brw_TitleOfFileBrowser[Brw_ADMI_WORKS_USR] = Txt_Works_area; // Brw_ADMI_WORKS_USR
|
||||
Brw_TitleOfFileBrowser[Brw_ADMI_WORKS_CRS] = Txt_Works_area; // Brw_ADMI_WORKS_CRS
|
||||
Brw_TitleOfFileBrowser[Brw_ADMI_MARKS_CRS] = Txt_Marks_management_area; // Brw_ADMI_MARKS_CRS
|
||||
Brw_TitleOfFileBrowser[Brw_ADMI_BRIEF_USR] = Txt_Private_storage_area; // Brw_ADMI_BRIEF_USR
|
||||
Brw_TitleOfFileBrowser[Brw_ADMI_BRIEF_USR] = Txt_Temporary_private_storage_area; // Brw_ADMI_BRIEF_USR
|
||||
Brw_TitleOfFileBrowser[Brw_SHOW_DOCUM_GRP] = Txt_Documents_area; // Brw_SHOW_DOCUM_GRP
|
||||
Brw_TitleOfFileBrowser[Brw_ADMI_DOCUM_GRP] = Txt_Documents_management_area; // Brw_ADMI_DOCUM_GRP
|
||||
Brw_TitleOfFileBrowser[Brw_SHOW_MARKS_GRP] = Txt_Marks_area; // Brw_SHOW_MARKS_GRP
|
||||
|
@ -3351,13 +3357,14 @@ static void Brw_ShowFileBrowser (void)
|
|||
|
||||
static void Brw_WriteTopBeforeShowingFileBrowser (void)
|
||||
{
|
||||
bool IAmTeacher = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER );
|
||||
bool IAmSuperuser = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
|
||||
bool IAmTeacherOrSysAdm = Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM;
|
||||
|
||||
/***** Update last access to this file browser *****/
|
||||
Brw_UpdateLastAccess ();
|
||||
|
||||
/***** Write form to edit documents *****/
|
||||
/***** Write contextual links *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
switch (Gbl.FileBrowser.Type)
|
||||
{
|
||||
case Brw_SHOW_DOCUM_INS:
|
||||
|
@ -3385,40 +3392,46 @@ static void Brw_WriteTopBeforeShowingFileBrowser (void)
|
|||
Brw_PutFormToShowOrAdmin (Brw_SHOW,ActSeeDocDeg);
|
||||
break;
|
||||
case Brw_SHOW_DOCUM_CRS:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_ADMIN,ActAdmDocCrs);
|
||||
break;
|
||||
case Brw_ADMI_DOCUM_CRS:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_SHOW,ActSeeDocCrs);
|
||||
break;
|
||||
case Brw_SHOW_DOCUM_GRP:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_ADMIN,ActAdmDocGrp);
|
||||
break;
|
||||
case Brw_ADMI_DOCUM_GRP:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_SHOW,ActSeeDocGrp);
|
||||
break;
|
||||
case Brw_SHOW_MARKS_CRS:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_ADMIN,ActAdmMrkCrs);
|
||||
break;
|
||||
case Brw_ADMI_MARKS_CRS:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_SHOW,ActSeeMrkCrs);
|
||||
break;
|
||||
case Brw_SHOW_MARKS_GRP:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_ADMIN,ActAdmMrkGrp);
|
||||
break;
|
||||
case Brw_ADMI_MARKS_GRP:
|
||||
if (IAmTeacher || IAmSuperuser)
|
||||
if (IAmTeacherOrSysAdm)
|
||||
Brw_PutFormToShowOrAdmin (Brw_SHOW,ActSeeMrkGrp);
|
||||
break;
|
||||
case Brw_ADMI_BRIEF_USR:
|
||||
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) // TODO: Remove this line when stable
|
||||
if (Gbl.CurrentAct != ActAskRemOldBrf)
|
||||
Brw_PutFormToAskRemOldFiles ();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
|
||||
/***** Initialize hidden levels *****/
|
||||
switch (Gbl.FileBrowser.Type)
|
||||
|
@ -4288,7 +4301,7 @@ void Brw_RemoveUsrFilesFromDB (long UsrCod)
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Write a form to go to show documents ********************/
|
||||
/*********** Write a form (link) to go to show or admin documents ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Brw_PutFormToShowOrAdmin (Brw_ShowOrAdmin_t ShowOrAdmin,
|
||||
|
@ -4297,24 +4310,26 @@ static void Brw_PutFormToShowOrAdmin (Brw_ShowOrAdmin_t ShowOrAdmin,
|
|||
extern const char *Txt_View;
|
||||
extern const char *Txt_Edit;
|
||||
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
switch (ShowOrAdmin)
|
||||
{
|
||||
case Brw_SHOW:
|
||||
Lay_PutContextualLink (Action,Brw_PutFormToShowOrAdminParams,
|
||||
Lay_PutContextualLink (Action,Brw_PutParamsContextualLink,
|
||||
"eye-on64x64.png",
|
||||
Txt_View,Txt_View);
|
||||
break;
|
||||
case Brw_ADMIN:
|
||||
Lay_PutContextualLink (Action,Brw_PutFormToShowOrAdminParams,
|
||||
Lay_PutContextualLink (Action,Brw_PutParamsContextualLink,
|
||||
"edit64x64.png",
|
||||
Txt_Edit,Txt_Edit);
|
||||
break;
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
|
||||
static void Brw_PutFormToShowOrAdminParams (void)
|
||||
/*****************************************************************************/
|
||||
/************** Put parameters necessary in a contextual link ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Brw_PutParamsContextualLink (void)
|
||||
{
|
||||
if (Gbl.FileBrowser.FullTree)
|
||||
Par_PutHiddenParamChar ("FullTree",'Y');
|
||||
|
@ -4672,7 +4687,7 @@ static void Brw_ListDir (unsigned Level,const char *Path,const char *PathInTree)
|
|||
ExpandTree = Brw_EXPAND_TREE_NOTHING;
|
||||
else
|
||||
{
|
||||
/***** Check if this subdirectory have files or folders in it *****/
|
||||
/***** Check if this subdirectory has files or folders in it *****/
|
||||
if ((NumFilesInThisSubdir = scandir (PathFileRel,&SubdirFileList,NULL,NULL)) <= 2)
|
||||
ExpandTree = Brw_EXPAND_TREE_NOTHING;
|
||||
else
|
||||
|
@ -6274,7 +6289,7 @@ static void Brw_WriteCurrentClipboard (void)
|
|||
extern const char *Txt_assignments_area;
|
||||
extern const char *Txt_works_area;
|
||||
extern const char *Txt_marks_management_area;
|
||||
extern const char *Txt_private_storage_area;
|
||||
extern const char *Txt_temporary_private_storage_area;
|
||||
extern const char *Txt_institution;
|
||||
extern const char *Txt_centre;
|
||||
extern const char *Txt_degree;
|
||||
|
@ -6436,7 +6451,7 @@ static void Brw_WriteCurrentClipboard (void)
|
|||
break;
|
||||
case Brw_ADMI_BRIEF_USR:
|
||||
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
|
||||
Txt_private_storage_area,
|
||||
Txt_temporary_private_storage_area,
|
||||
Txt_user[Gbl.Usrs.Me.UsrDat.Sex],Gbl.Usrs.Me.UsrDat.FullName);
|
||||
break;
|
||||
default:
|
||||
|
@ -10968,7 +10983,7 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
|
|||
extern const char *Txt_Assignments_area;
|
||||
extern const char *Txt_Works_area;
|
||||
extern const char *Txt_Marks_area;
|
||||
extern const char *Txt_Private_storage_area;
|
||||
extern const char *Txt_Temporary_private_storage_area;
|
||||
extern const char *Txt_Go_to_X;
|
||||
extern const char *Txt_Folder;
|
||||
struct FileMetadata FileMetadata;
|
||||
|
@ -11123,7 +11138,7 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
|
|||
Title = Txt_Marks_area;
|
||||
break;
|
||||
case Brw_ADMI_BRIEF_USR:
|
||||
Title = Txt_Private_storage_area;
|
||||
Title = Txt_Temporary_private_storage_area;
|
||||
break;
|
||||
default:
|
||||
Title = "";
|
||||
|
@ -11181,3 +11196,140 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
|
|||
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Write a form (link) to remove old files *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Brw_PutFormToAskRemOldFiles (void)
|
||||
{
|
||||
extern const char *Txt_Remove_old_files;
|
||||
|
||||
Lay_PutContextualLink (ActAskRemOldBrf,Brw_PutParamsContextualLink,
|
||||
"remove-on64x64.png",
|
||||
Txt_Remove_old_files,Txt_Remove_old_files);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Write a form fo confirm removing of old files ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Brw_ConfirmRemoveOldFiles (void)
|
||||
{
|
||||
extern const char *Txt_Do_you_really_want_to_remove_files_older_than_X_months;
|
||||
extern const char *Txt_Remove;
|
||||
|
||||
/***** Get parameters related to file browser *****/
|
||||
Brw_GetParAndInitFileBrowser ();
|
||||
|
||||
/***** Form to ask for confirmation to remove old files *****/
|
||||
Act_FormStart (ActRemOldBrf);
|
||||
Brw_PutParamsContextualLink ();
|
||||
|
||||
/* Show question */
|
||||
sprintf (Gbl.Message,Txt_Do_you_really_want_to_remove_files_older_than_X_months,
|
||||
Cfg_MONTHS_TO_DELETE_OLD_BRIEFCASE_FILES);
|
||||
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
||||
|
||||
Lay_PutRemoveButton (Txt_Remove);
|
||||
|
||||
Act_FormEnd ();
|
||||
|
||||
/***** Show again the file browser *****/
|
||||
Brw_ShowAgainFileBrowserOrWorks ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Remove old files ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Brw_RemoveOldFiles (void)
|
||||
{
|
||||
extern const char *Txt_Remove;
|
||||
|
||||
/***** Get parameters related to file browser *****/
|
||||
Brw_GetParAndInitFileBrowser ();
|
||||
|
||||
/***** Remove old files *****/
|
||||
if (Gbl.FileBrowser.Type == Brw_ADMI_BRIEF_USR)
|
||||
Brw_RemoveOldFilesInBrowser ();
|
||||
|
||||
/***** Show again the file browser *****/
|
||||
Brw_ShowAgainFileBrowserOrWorks ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Remove old files ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Brw_RemoveOldFilesInBrowser (void)
|
||||
{
|
||||
Brw_ScanDirRemovingOlfFiles (1,Gbl.FileBrowser.Priv.PathRootFolder);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************* Scan a directory recursively removing old files ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Brw_TIME_TO_DELETE_BROWSER_OLD_FILES ((time_t)(Cfg_MONTHS_TO_DELETE_OLD_BRIEFCASE_FILES*30UL*24UL*60UL*60UL))
|
||||
|
||||
static void Brw_ScanDirRemovingOlfFiles (unsigned Level,const char *Path)
|
||||
{
|
||||
struct dirent **DirFileList;
|
||||
struct dirent **SubdirFileList;
|
||||
int NumFileInThisDir;
|
||||
int NumFilesInThisDir;
|
||||
int NumFilesInThisSubdir;
|
||||
char PathFileRel[PATH_MAX+1];
|
||||
struct stat FileStatus;
|
||||
time_t TimeRemoveFilesOlder = Gbl.StartExecutionTimeUTC -
|
||||
Brw_TIME_TO_DELETE_BROWSER_OLD_FILES;
|
||||
|
||||
/***** Scan directory *****/
|
||||
NumFilesInThisDir = scandir (Path,&DirFileList,NULL,alphasort);
|
||||
|
||||
/***** Check file by file removing old files *****/
|
||||
for (NumFileInThisDir = 0;
|
||||
NumFileInThisDir < NumFilesInThisDir;
|
||||
NumFileInThisDir++)
|
||||
if (strcmp (DirFileList[NumFileInThisDir]->d_name,".") &&
|
||||
strcmp (DirFileList[NumFileInThisDir]->d_name,"..")) // Skip directories "." and ".."
|
||||
{
|
||||
sprintf (PathFileRel,"%s/%s",Path,DirFileList[NumFileInThisDir]->d_name);
|
||||
|
||||
lstat (PathFileRel,&FileStatus);
|
||||
|
||||
/***** Construct the full path of the file or folder *****/
|
||||
if (S_ISDIR (FileStatus.st_mode)) // It's a directory
|
||||
{
|
||||
/***** Check if this subdirectory has files or folders in it *****/
|
||||
NumFilesInThisSubdir = scandir (PathFileRel,&SubdirFileList,NULL,NULL);
|
||||
|
||||
if (NumFilesInThisSubdir > 2) // Not empty directory
|
||||
{
|
||||
/* Scan subtree starting at this this directory recursively */
|
||||
Brw_ScanDirRemovingOlfFiles (Level+1,PathFileRel);
|
||||
|
||||
/* Check again number of files after deletion */
|
||||
NumFilesInThisSubdir = scandir (PathFileRel,&SubdirFileList,NULL,NULL);
|
||||
}
|
||||
|
||||
if (NumFilesInThisSubdir <= 2) // Empty directory
|
||||
{
|
||||
/* Remove folder if old */
|
||||
if (FileStatus.st_mtime < TimeRemoveFilesOlder)
|
||||
Lay_ShowAlert (Lay_SUCCESS,PathFileRel);
|
||||
else
|
||||
Lay_ShowAlert (Lay_INFO,PathFileRel);
|
||||
}
|
||||
}
|
||||
else if (S_ISREG (FileStatus.st_mode)) // It's a regular file
|
||||
{
|
||||
/* Remove file if old */
|
||||
if (FileStatus.st_mtime < TimeRemoveFilesOlder)
|
||||
Lay_ShowAlert (Lay_SUCCESS,PathFileRel);
|
||||
else
|
||||
Lay_ShowAlert (Lay_INFO,PathFileRel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,4 +218,7 @@ void Brw_GetNotifDocOrSharedFile (char *SummaryStr,char **ContentStr,
|
|||
|
||||
unsigned Brw_ListDocsFound (const char *Query,const char *Title);
|
||||
|
||||
void Brw_ConfirmRemoveOldFiles (void);
|
||||
void Brw_RemoveOldFiles (void);
|
||||
|
||||
#endif
|
||||
|
|
135
swad_text.c
135
swad_text.c
|
@ -8358,6 +8358,36 @@ const char *Txt_Do_you_really_want_to_reject_the_enrollment_request_ = // Warnin
|
|||
" in the course <strong>%s</strong>?"; // Necessita de tradução
|
||||
#endif
|
||||
|
||||
const char *Txt_Do_you_really_want_to_remove_files_older_than_X_months = // Warning: it is very important to include %u in the following sentences
|
||||
#if L==1
|
||||
"De veres voleu eliminar els arxius"
|
||||
" amb més de %u mesos d'antiguitat?";
|
||||
#elif L==2
|
||||
"Wollen Sie wirklich, um Dateien,"
|
||||
" die älter als %u Monate löschen?";
|
||||
#elif L==3
|
||||
"Do you really want to remove files"
|
||||
" older than %u months?";
|
||||
#elif L==4
|
||||
"¿Realmente desea eliminar los archivos"
|
||||
" con más de %u meses de antigüedad?";
|
||||
#elif L==5
|
||||
"Voulez-vous vraiment supprimer les fichiers"
|
||||
" de plus de %u mois?";
|
||||
#elif L==6
|
||||
"¿Realmente desea eliminar los archivos"
|
||||
" con más de %u meses de antigüedad?"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Vuoi davvero rimuovere i file"
|
||||
" più vecchi di %u mesi?";
|
||||
#elif L==8
|
||||
"Czy na pewno chcesz usunąć pliki"
|
||||
" starsze niż %u miesięcy?";
|
||||
#elif L==9
|
||||
"Você realmente deseja remover arquivos"
|
||||
" com mais de %u meses?";
|
||||
#endif
|
||||
|
||||
const char *Txt_Do_you_really_want_to_remove_the_X_students_from_the_course_Y_ = // Warning: it is very important to include %u and %s in the following sentences
|
||||
#if L==1
|
||||
"¿Realmente desea eliminar los %u estudiantes de la asignatura <strong>%s</strong>?<br />"
|
||||
|
@ -27576,48 +27606,6 @@ const char *Txt_Private_available_to_certain_users_identified =
|
|||
"Privado, disponível para alguns usuários identificados";
|
||||
#endif
|
||||
|
||||
const char *Txt_Private_storage_area =
|
||||
#if L==1
|
||||
"Zona d'emmagatzematge privada";
|
||||
#elif L==2
|
||||
"Privater Speicherbereich";
|
||||
#elif L==3
|
||||
"Private storage area";
|
||||
#elif L==4
|
||||
"Zona de almacenamiento privada";
|
||||
#elif L==5
|
||||
"Zone de stockage privée";
|
||||
#elif L==6
|
||||
"Zona de almacenamiento privada"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Area di archiviazione privata";
|
||||
#elif L==8
|
||||
"Prywatny magazyn";
|
||||
#elif L==9
|
||||
"Zona privada de armazenamento";
|
||||
#endif
|
||||
|
||||
const char *Txt_private_storage_area =
|
||||
#if L==1
|
||||
"zona de almacenamiento privada"; // Necessita traduccio
|
||||
#elif L==2
|
||||
"privater Speicherbereich";
|
||||
#elif L==3
|
||||
"private storage area";
|
||||
#elif L==4
|
||||
"zona de almacenamiento privada";
|
||||
#elif L==5
|
||||
"zone de stockage privée";
|
||||
#elif L==6
|
||||
"zona de almacenamiento privada"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"area di archiviazione privata";
|
||||
#elif L==8
|
||||
"obszar prywatnego przechowywania";
|
||||
#elif L==9
|
||||
"zona privada de armazenamento";
|
||||
#endif
|
||||
|
||||
const char *Txt_post =
|
||||
#if L==1
|
||||
"missatge";
|
||||
|
@ -29031,6 +29019,27 @@ const char *Txt_Remove_me_from_the_course_X = // Warning: it is very important t
|
|||
"Tirar me da disciplina <strong>%s</strong>";
|
||||
#endif
|
||||
|
||||
const char *Txt_Remove_old_files =
|
||||
#if L==1
|
||||
"Eliminar arxius antics";
|
||||
#elif L==2
|
||||
"Entfernen Sie alte Dateien";
|
||||
#elif L==3
|
||||
"Remove old files";
|
||||
#elif L==4
|
||||
"Eliminar archivos antiguos";
|
||||
#elif L==5
|
||||
"Supprimer anciens fichiers";
|
||||
#elif L==6
|
||||
"Eliminar archivos antiguos"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Rimuovere vecchi file";
|
||||
#elif L==8
|
||||
"Usuń stare pliki";
|
||||
#elif L==9
|
||||
"Remover arquivos antigos";
|
||||
#endif
|
||||
|
||||
const char *Txt_Remove_photo =
|
||||
#if L==1
|
||||
"Eliminar foto";
|
||||
|
@ -38318,6 +38327,48 @@ const char *Txt_teachers_ABBREVIATION = // Abbreviation of "Teachers"
|
|||
"prof.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Temporary_private_storage_area =
|
||||
#if L==1
|
||||
"Zona d'emmagatzematge privada";
|
||||
#elif L==2
|
||||
"Privater Speicherbereich";
|
||||
#elif L==3
|
||||
"Temporary private storage area";
|
||||
#elif L==4
|
||||
"Zona de almacenamiento privada temporal";
|
||||
#elif L==5
|
||||
"Zone de stockage privée";
|
||||
#elif L==6
|
||||
"Zona de almacenamiento privada temporal"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Area di archiviazione privata";
|
||||
#elif L==8
|
||||
"Prywatny magazyn";
|
||||
#elif L==9
|
||||
"Zona privada de armazenamento";
|
||||
#endif
|
||||
|
||||
const char *Txt_temporary_private_storage_area =
|
||||
#if L==1
|
||||
"zona d'emmagatzematge privada";
|
||||
#elif L==2
|
||||
"privater Speicherbereich";
|
||||
#elif L==3
|
||||
"temporary private storage area";
|
||||
#elif L==4
|
||||
"zona de almacenamiento privada temporal";
|
||||
#elif L==5
|
||||
"zone de stockage privée";
|
||||
#elif L==6
|
||||
"zona de almacenamiento privada temporal"; // Okoteve traducción
|
||||
#elif L==7
|
||||
"area di archiviazione privata";
|
||||
#elif L==8
|
||||
"obszar prywatnego przechowywania";
|
||||
#elif L==9
|
||||
"zona privada de armazenamento";
|
||||
#endif
|
||||
|
||||
const char *Txt_Test =
|
||||
#if L==1
|
||||
"Test";
|
||||
|
|
|
@ -475,7 +475,7 @@ static int Svc_RemoveOldWSKeys (void)
|
|||
or when there was at least one refresh (navigator supports AJAX) and last refresh is too old (browser probably was closed) */
|
||||
sprintf (Query,"DELETE LOW_PRIORITY FROM ws_keys WHERE"
|
||||
" LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')",
|
||||
Cfg_TIME_TO_DELETE_Svc_KEY);
|
||||
Cfg_TIME_TO_DELETE_WEB_SERVICE_KEY);
|
||||
if (mysql_query (&Gbl.mysql,Query))
|
||||
return soap_receiver_fault (Gbl.soap,
|
||||
"Can not remove old web service keys from database",
|
||||
|
|
Loading…
Reference in New Issue