Version 15.70

This commit is contained in:
Antonio Cañas Vargas 2015-12-21 00:53:56 +01:00
parent 3c484f727e
commit 85cee5a30f
8 changed files with 1210 additions and 994 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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 *******************************/
/*****************************************************************************/

View File

@ -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)

View File

@ -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

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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&eacute;s de %u mesos d'antiguitat?";
#elif L==2
"Wollen Sie wirklich, um Dateien,"
" die &auml;lter als %u Monate l&ouml;schen?";
#elif L==3
"Do you really want to remove files"
" older than %u months?";
#elif L==4
"&iquest;Realmente desea eliminar los archivos"
" con m&aacute;s de %u meses de antig&uuml;edad?";
#elif L==5
"Voulez-vous vraiment supprimer les fichiers"
" de plus de %u mois?";
#elif L==6
"&iquest;Realmente desea eliminar los archivos"
" con m&aacute;s de %u meses de antig&uuml;edad?"; // Okoteve traducción
#elif L==7
"Vuoi davvero rimuovere i file"
" pi&ugrave; vecchi di %u mesi?";
#elif L==8
"Czy na pewno chcesz usun&aogon;&cacute; pliki"
" starsze ni&zdot; %u miesi&eogon;cy?";
#elif L==9
"Voc&ecirc; 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
"&iquest;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&iacute;vel para alguns usu&aacute;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&eacute;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&eacute;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&nacute; 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&eacute;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&eacute;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";

View File

@ -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",