mirror of https://github.com/acanas/swad-core.git
Version18.77.5
This commit is contained in:
parent
372543a63d
commit
774ff78ca6
|
@ -2409,12 +2409,30 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
/********************************** Tests ************************************/
|
/********************************** Tests ************************************/
|
||||||
.TAG_SEL {box-sizing:border-box; width:346px;}
|
.TAG_SEL {box-sizing:border-box; width:346px;}
|
||||||
.TAG_TXT {box-sizing:border-box; width:346px;}
|
.TAG_TXT {box-sizing:border-box; width:346px;}
|
||||||
.STEM {box-sizing:border-box; width:700px;}
|
.STEM
|
||||||
|
{
|
||||||
|
box-sizing:border-box;
|
||||||
|
margin:0 auto;
|
||||||
|
width:700px;
|
||||||
|
}
|
||||||
|
.STEM_TEXTAREA
|
||||||
|
{
|
||||||
|
width:696px;
|
||||||
|
}
|
||||||
|
.ANSWER
|
||||||
|
{
|
||||||
|
box-sizing:border-box;
|
||||||
|
margin:0 auto;
|
||||||
|
width:600px;
|
||||||
|
}
|
||||||
|
.ANSWER_TEXTAREA
|
||||||
|
{
|
||||||
|
width:596px;
|
||||||
|
}
|
||||||
.ANS_TXT {color:#202020; font-size:12pt;}
|
.ANS_TXT {color:#202020; font-size:12pt;}
|
||||||
.ANS_0 {color:#202020; font-size:12pt; font-weight:bold;}
|
.ANS_0 {color:#202020; font-size:12pt; font-weight:bold;}
|
||||||
.ANS_OK {color:#008000; font-size:12pt; font-weight:bold;}
|
.ANS_OK {color:#008000; font-size:12pt; font-weight:bold;}
|
||||||
.ANS_BAD {color:red; font-size:12pt; font-weight:bold;}
|
.ANS_BAD {color:red; font-size:12pt; font-weight:bold;}
|
||||||
.ANS_STR {box-sizing:border-box; width:600px;}
|
|
||||||
.TEST_SUBTITLE
|
.TEST_SUBTITLE
|
||||||
{
|
{
|
||||||
margin:10px;
|
margin:10px;
|
||||||
|
@ -2483,7 +2501,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.TEST_FORM_EDIT_IMG
|
.TEST_FORM_EDIT_MED
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
margin:15px 0;
|
margin:15px 0;
|
||||||
|
@ -2517,21 +2535,21 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
.TEST_EDI_ANS_LEFT_COL
|
.TEST_EDI_ANS_LEFT_COL
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
width:50px;
|
width:48px;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
vertical-align:top;
|
vertical-align:top;
|
||||||
}
|
}
|
||||||
.TEST_EDI_ANS_CENTER_COL
|
.TEST_EDI_ANS_CENTER_COL
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
width:50px;
|
width:48px;
|
||||||
text-align:right;
|
text-align:right;
|
||||||
vertical-align:top;
|
vertical-align:top;
|
||||||
}
|
}
|
||||||
.TEST_EDI_ANS_RIGHT_COL
|
.TEST_EDI_ANS_RIGHT_COL
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
width:604px;
|
width:600px;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
vertical-align:top;
|
vertical-align:top;
|
||||||
}
|
}
|
||||||
|
@ -2675,7 +2693,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
{
|
{
|
||||||
display:table-cell;
|
display:table-cell;
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
padding:6px;
|
padding:6px;
|
||||||
text-align:center;
|
text-align:center;
|
||||||
vertical-align:middle;
|
vertical-align:middle;
|
||||||
border:solid 1px;
|
border:solid 1px;
|
||||||
|
@ -2717,8 +2735,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
.MED_UPL_CON /* Upload container */
|
.MED_UPL_CON /* Upload container */
|
||||||
{
|
{
|
||||||
text-align:center;
|
text-align:center;
|
||||||
vertical-align:top;
|
margin-bottom:6px;
|
||||||
margin-bottom:10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.MED_PLAY
|
.MED_PLAY
|
||||||
|
@ -2964,6 +2981,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
.TL_POST_MED_INPUT
|
.TL_POST_MED_INPUT
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
|
margin:0 auto;
|
||||||
}
|
}
|
||||||
.TL_POST_IMG_CONTAINER
|
.TL_POST_IMG_CONTAINER
|
||||||
{
|
{
|
||||||
|
@ -3132,6 +3150,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
.FOR_MED_INPUT
|
.FOR_MED_INPUT
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
|
margin:0 auto;
|
||||||
width:480px;
|
width:480px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3158,6 +3177,7 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
.MSG_MED_INPUT
|
.MSG_MED_INPUT
|
||||||
{
|
{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
|
margin:0 auto;
|
||||||
width:480px;
|
width:480px;
|
||||||
}
|
}
|
||||||
.MSG_TXT
|
.MSG_TXT
|
||||||
|
|
|
@ -413,6 +413,11 @@ Lo de mutear anuncios, en principio prefiero hacer una opci
|
||||||
|
|
||||||
// TODO: Chequear todos los iconos .gif y .png que restan, concretamente los de file_browser
|
// TODO: Chequear todos los iconos .gif y .png que restan, concretamente los de file_browser
|
||||||
|
|
||||||
|
// TODO: Víctor González Argudo: Como sugerencia, estaría bien que cuando te dieran like
|
||||||
|
// mas de 5 personas se pudiera saber quienes son
|
||||||
|
// por ejemplo dejando encima el cursor de los 3 puntos
|
||||||
|
// y que saliera una lista con los nombres
|
||||||
|
|
||||||
// TODO: Pedro Villar Castro:
|
// TODO: Pedro Villar Castro:
|
||||||
// Al asignar un TFG a alumnos, no escribir el DNI del alumno, sino escogerlo de una lista de entre los alumnos inscritos en la asignatura.
|
// Al asignar un TFG a alumnos, no escribir el DNI del alumno, sino escogerlo de una lista de entre los alumnos inscritos en la asignatura.
|
||||||
|
|
||||||
|
@ -452,7 +457,7 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.77.1 (2019-03-15)"
|
#define Log_PLATFORM_VERSION "SWAD 18.77.5 (2019-03-17)"
|
||||||
#define CSS_FILE "swad18.77.css"
|
#define CSS_FILE "swad18.77.css"
|
||||||
#define JS_FILE "swad18.77.js"
|
#define JS_FILE "swad18.77.js"
|
||||||
/*
|
/*
|
||||||
|
@ -468,8 +473,7 @@ Si el usuario acepta, a partir de ese momento se le mostrar
|
||||||
Ese bloqueo o aceptación sería una opción en Perfil > Ajustes
|
Ese bloqueo o aceptación sería una opción en Perfil > Ajustes
|
||||||
que el usuario podría cambiar en cualquier momento.
|
que el usuario podría cambiar en cualquier momento.
|
||||||
|
|
||||||
TODO: Fix edition of media in test edition
|
Version 18.77.5: Mar 16, 2019 Fixed bugs in forms to upload media. (240272 lines)
|
||||||
|
|
||||||
Version 18.77.4: Mar 16, 2019 Changes in form to upload media. (240256 lines)
|
Version 18.77.4: Mar 16, 2019 Changes in form to upload media. (240256 lines)
|
||||||
Version 18.77.3: Mar 16, 2019 Embedded YouTube videos. Not finished. (240252 lines)
|
Version 18.77.3: Mar 16, 2019 Embedded YouTube videos. Not finished. (240252 lines)
|
||||||
Version 18.77.2: Mar 14, 2019 Embedded YouTube videos. Not finished. (240267 lines)
|
Version 18.77.2: Mar 14, 2019 Embedded YouTube videos. Not finished. (240267 lines)
|
||||||
|
|
150
swad_media.c
150
swad_media.c
|
@ -104,7 +104,7 @@ extern struct Globals Gbl;
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static Med_Action_t Med_GetMediaActionFromForm (const char *ParamAction);
|
static Med_Action_t Med_GetMediaActionFromForm (const char *ParamAction);
|
||||||
static Med_FormType_t Usr_GetFormTypeFromForm (void);
|
static Med_FormType_t Usr_GetFormTypeFromForm (struct ParamUploadMedia *ParamUploadMedia);
|
||||||
static void Usr_GetURLFromForm (const char *ParamName,struct Media *Media);
|
static void Usr_GetURLFromForm (const char *ParamName,struct Media *Media);
|
||||||
static void Usr_GetTitleFromForm (const char *ParamName,struct Media *Media);
|
static void Usr_GetTitleFromForm (const char *ParamName,struct Media *Media);
|
||||||
static void Med_GetAndProcessFileFromForm (const char *ParamFile,
|
static void Med_GetAndProcessFileFromForm (const char *ParamFile,
|
||||||
|
@ -307,7 +307,7 @@ void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput)
|
||||||
" class=\"PREF_OFF\">"
|
" class=\"PREF_OFF\">"
|
||||||
"<img src=\"%s/file-image.svg\""
|
"<img src=\"%s/file-image.svg\""
|
||||||
" alt=\"%s\" title=\"%s\""
|
" alt=\"%s\" title=\"%s\""
|
||||||
" class=\"ICO_HIGHLIGHT ICOx20\""
|
" class=\"ICO_HIGHLIGHT ICOx16\""
|
||||||
" onclick=\"mediaClickOnActivateUpload('%s');\" />"
|
" onclick=\"mediaClickOnActivateUpload('%s');\" />"
|
||||||
"</div>", // <id>_ico_upl
|
"</div>", // <id>_ico_upl
|
||||||
Id,
|
Id,
|
||||||
|
@ -318,9 +318,9 @@ void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput)
|
||||||
/***** Form type *****/
|
/***** Form type *****/
|
||||||
fprintf (Gbl.F.Out,"<input type=\"hidden\""
|
fprintf (Gbl.F.Out,"<input type=\"hidden\""
|
||||||
" id=\"%s_par_upl\"" // <id>_par_upl
|
" id=\"%s_par_upl\"" // <id>_par_upl
|
||||||
" name=\"FormType\" value=\"%u\""
|
" name=\"%s\" value=\"%u\""
|
||||||
" disabled=\"disabled\" />",
|
" disabled=\"disabled\" />",
|
||||||
Id,
|
Id,ParamUploadMedia.FormType,
|
||||||
(unsigned) Med_FORM_FILE);
|
(unsigned) Med_FORM_FILE);
|
||||||
|
|
||||||
/***** Embed icon *****/
|
/***** Embed icon *****/
|
||||||
|
@ -328,7 +328,7 @@ void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput)
|
||||||
" class=\"PREF_OFF\">"
|
" class=\"PREF_OFF\">"
|
||||||
"<img src=\"%s/youtube-brands.svg\""
|
"<img src=\"%s/youtube-brands.svg\""
|
||||||
" alt=\"%s\" title=\"%s\""
|
" alt=\"%s\" title=\"%s\""
|
||||||
" class=\"ICO_HIGHLIGHT ICOx20\""
|
" class=\"ICO_HIGHLIGHT ICOx16\""
|
||||||
" onclick=\"mediaClickOnActivateEmbed('%s');\" />"
|
" onclick=\"mediaClickOnActivateEmbed('%s');\" />"
|
||||||
"</div>", // <id>_ico_emb
|
"</div>", // <id>_ico_emb
|
||||||
Id,
|
Id,
|
||||||
|
@ -347,9 +347,9 @@ void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput)
|
||||||
/***** Form type *****/
|
/***** Form type *****/
|
||||||
fprintf (Gbl.F.Out,"<input type=\"hidden\""
|
fprintf (Gbl.F.Out,"<input type=\"hidden\""
|
||||||
" id=\"%s_par_emb\"" // <id>_par_emb
|
" id=\"%s_par_emb\"" // <id>_par_emb
|
||||||
" name=\"FormType\" value=\"%u\""
|
" name=\"%s\" value=\"%u\""
|
||||||
" disabled=\"disabled\" />",
|
" disabled=\"disabled\" />",
|
||||||
Id,
|
Id,ParamUploadMedia.FormType,
|
||||||
(unsigned) Med_FORM_EMBED);
|
(unsigned) Med_FORM_EMBED);
|
||||||
|
|
||||||
/***** Media file *****/
|
/***** Media file *****/
|
||||||
|
@ -400,28 +400,34 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
|
||||||
struct ParamUploadMedia ParamUploadMedia;
|
struct ParamUploadMedia ParamUploadMedia;
|
||||||
Med_FormType_t FormType;
|
Med_FormType_t FormType;
|
||||||
|
|
||||||
|
/***** Initialize media *****/
|
||||||
|
Media->Action = Med_ACTION_NO_MEDIA;
|
||||||
|
Media->Status = Med_STATUS_NONE;
|
||||||
|
Media->Name[0] = '\0';
|
||||||
|
Media->Type = Med_TYPE_NONE;
|
||||||
|
Media->Title = NULL;
|
||||||
|
Media->URL = NULL;
|
||||||
|
|
||||||
/***** Set names of parameters depending on number of media in form *****/
|
/***** Set names of parameters depending on number of media in form *****/
|
||||||
Med_SetParamNames (&ParamUploadMedia,NumMediaInForm);
|
Med_SetParamNames (&ParamUploadMedia,NumMediaInForm);
|
||||||
|
|
||||||
/***** Get action and initialize media (image/video)
|
/***** Get action and initialize media (image/video)
|
||||||
(except title, that will be get after the media file) *****/
|
(except title, that will be get after the media file) *****/
|
||||||
Media->Action = Med_GetMediaActionFromForm (ParamUploadMedia.Action);
|
Media->Action = Med_GetMediaActionFromForm (ParamUploadMedia.Action);
|
||||||
Media->Status = Med_STATUS_NONE;
|
|
||||||
Media->Name[0] = '\0';
|
|
||||||
Media->Type = Med_TYPE_NONE;
|
|
||||||
|
|
||||||
/***** Get form type *****/
|
|
||||||
FormType = Usr_GetFormTypeFromForm ();
|
|
||||||
|
|
||||||
/***** Get the media (image/video) name and the file *****/
|
/***** Get the media (image/video) name and the file *****/
|
||||||
switch (Media->Action)
|
switch (Media->Action)
|
||||||
{
|
{
|
||||||
case Med_ACTION_NEW_MEDIA: // Upload new image/video
|
case Med_ACTION_NEW_MEDIA: // Upload new image/video
|
||||||
|
/***** Get form type *****/
|
||||||
|
FormType = Usr_GetFormTypeFromForm (&ParamUploadMedia);
|
||||||
|
|
||||||
/***** Get new media *****/
|
/***** Get new media *****/
|
||||||
switch (FormType)
|
switch (FormType)
|
||||||
{
|
{
|
||||||
case Med_FORM_FILE:
|
case Med_FORM_FILE:
|
||||||
/***** Get image/video (if present ==> process and create temporary file) *****/
|
/* Get image/video (if present ==>
|
||||||
|
process and create temporary file) */
|
||||||
Med_GetAndProcessFileFromForm (ParamUploadMedia.File,Media);
|
Med_GetAndProcessFileFromForm (ParamUploadMedia.File,Media);
|
||||||
switch (Media->Status)
|
switch (Media->Status)
|
||||||
{
|
{
|
||||||
|
@ -444,7 +450,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Med_FORM_EMBED:
|
case Med_FORM_EMBED:
|
||||||
/***** Get and process embed URL from form *****/
|
/* Get and process embed URL from form */
|
||||||
Med_GetAndProcessEmbedFromForm (ParamUploadMedia.URL,Media);
|
Med_GetAndProcessEmbedFromForm (ParamUploadMedia.URL,Media);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -457,10 +463,15 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
|
||||||
GetMediaFromDB (NumMediaInForm,Media);
|
GetMediaFromDB (NumMediaInForm,Media);
|
||||||
break;
|
break;
|
||||||
case Med_ACTION_CHANGE_MEDIA: // Replace old image/video by new one
|
case Med_ACTION_CHANGE_MEDIA: // Replace old image/video by new one
|
||||||
|
/***** Get form type *****/
|
||||||
|
FormType = Usr_GetFormTypeFromForm (&ParamUploadMedia);
|
||||||
|
|
||||||
|
/***** Get new media *****/
|
||||||
switch (FormType)
|
switch (FormType)
|
||||||
{
|
{
|
||||||
case Med_FORM_FILE:
|
case Med_FORM_FILE:
|
||||||
/***** Get image/video (if present ==> process and create temporary file) *****/
|
/* Get image/video (if present ==>
|
||||||
|
process and create temporary file) */
|
||||||
Med_GetAndProcessFileFromForm (ParamUploadMedia.File,Media);
|
Med_GetAndProcessFileFromForm (ParamUploadMedia.File,Media);
|
||||||
switch (Media->Status)
|
switch (Media->Status)
|
||||||
{
|
{
|
||||||
|
@ -473,7 +484,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Med_FORM_EMBED:
|
case Med_FORM_EMBED:
|
||||||
/***** Get and process embed URL from form *****/
|
/* Get and process embed URL from form */
|
||||||
Med_GetAndProcessEmbedFromForm (ParamUploadMedia.URL,Media);
|
Med_GetAndProcessEmbedFromForm (ParamUploadMedia.URL,Media);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -484,7 +495,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
|
||||||
/* Get media (image/video) name */
|
/* Get media (image/video) name */
|
||||||
GetMediaFromDB (NumMediaInForm,Media);
|
GetMediaFromDB (NumMediaInForm,Media);
|
||||||
break;
|
break;
|
||||||
case Med_ACTION_NO_MEDIA: // Do not use image/video (remove current image/video if exists)
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -499,27 +510,32 @@ void Med_SetParamNames (struct ParamUploadMedia *ParamUploadMedia,int NumMediaIn
|
||||||
{
|
{
|
||||||
if (NumMediaInForm < 0) // One unique media in form ==> no suffix needed
|
if (NumMediaInForm < 0) // One unique media in form ==> no suffix needed
|
||||||
{
|
{
|
||||||
Str_Copy (ParamUploadMedia->Action,"MedAct",
|
Str_Copy (ParamUploadMedia->Action ,"MedAct",
|
||||||
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
||||||
Str_Copy (ParamUploadMedia->File ,"MedFil",
|
Str_Copy (ParamUploadMedia->FormType,"MedFrm",
|
||||||
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
||||||
Str_Copy (ParamUploadMedia->Title ,"MedTit",
|
Str_Copy (ParamUploadMedia->File ,"MedFil",
|
||||||
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
||||||
Str_Copy (ParamUploadMedia->URL ,"MedURL",
|
Str_Copy (ParamUploadMedia->Title ,"MedTit",
|
||||||
|
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
||||||
|
Str_Copy (ParamUploadMedia->URL ,"MedURL",
|
||||||
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
Med_MAX_BYTES_PARAM_UPLOAD_MEDIA);
|
||||||
}
|
}
|
||||||
else // Several video/images in form ==> add suffix
|
else // Several video/images in form ==> add suffix
|
||||||
{
|
{
|
||||||
snprintf (ParamUploadMedia->Action,sizeof (ParamUploadMedia->Action),
|
snprintf (ParamUploadMedia->Action ,sizeof (ParamUploadMedia->Action),
|
||||||
"MedAct%u",
|
"MedAct%u",
|
||||||
NumMediaInForm);
|
NumMediaInForm);
|
||||||
snprintf (ParamUploadMedia->File ,sizeof (ParamUploadMedia->File),
|
snprintf (ParamUploadMedia->FormType,sizeof (ParamUploadMedia->Action),
|
||||||
|
"MedFrm%u",
|
||||||
|
NumMediaInForm);
|
||||||
|
snprintf (ParamUploadMedia->File ,sizeof (ParamUploadMedia->File),
|
||||||
"MedFil%u",
|
"MedFil%u",
|
||||||
NumMediaInForm);
|
NumMediaInForm);
|
||||||
snprintf (ParamUploadMedia->Title ,sizeof (ParamUploadMedia->Title),
|
snprintf (ParamUploadMedia->Title ,sizeof (ParamUploadMedia->Title),
|
||||||
"MedTit%u",
|
"MedTit%u",
|
||||||
NumMediaInForm);
|
NumMediaInForm);
|
||||||
snprintf (ParamUploadMedia->URL ,sizeof (ParamUploadMedia->URL),
|
snprintf (ParamUploadMedia->URL ,sizeof (ParamUploadMedia->URL),
|
||||||
"MedURL%u",
|
"MedURL%u",
|
||||||
NumMediaInForm);
|
NumMediaInForm);
|
||||||
}
|
}
|
||||||
|
@ -543,9 +559,9 @@ static Med_Action_t Med_GetMediaActionFromForm (const char *ParamAction)
|
||||||
/********************* Get from form the type of form ************************/
|
/********************* Get from form the type of form ************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static Med_FormType_t Usr_GetFormTypeFromForm (void)
|
static Med_FormType_t Usr_GetFormTypeFromForm (struct ParamUploadMedia *ParamUploadMedia)
|
||||||
{
|
{
|
||||||
return (Med_FormType_t) Par_GetParToUnsignedLong ("FormType",
|
return (Med_FormType_t) Par_GetParToUnsignedLong (ParamUploadMedia->FormType,
|
||||||
0,
|
0,
|
||||||
Med_NUM_FORM_TYPES - 1,
|
Med_NUM_FORM_TYPES - 1,
|
||||||
(unsigned long) Med_FORM_UNKNOWN);
|
(unsigned long) Med_FORM_UNKNOWN);
|
||||||
|
@ -1118,7 +1134,7 @@ void Med_MoveMediaToDefinitiveDir (struct Media *Media)
|
||||||
|
|
||||||
/***** Check trivial cases *****/
|
/***** Check trivial cases *****/
|
||||||
if (Media->Type == Med_TYPE_NONE)
|
if (Media->Type == Med_TYPE_NONE)
|
||||||
Lay_ShowErrorAndExit ("Wrong media type.");
|
Lay_ShowErrorAndExit ("Med_MoveMediaToDefinitiveDir: Wrong media type.");
|
||||||
if (Media->Type == Med_YOUTUBE)
|
if (Media->Type == Med_YOUTUBE)
|
||||||
return; // Nothing to do with files
|
return; // Nothing to do with files
|
||||||
|
|
||||||
|
@ -1546,8 +1562,10 @@ void Med_RemoveMediaFiles (const char *Name,Med_Type_t Type)
|
||||||
char FullPathMediaPriv[PATH_MAX + 1];
|
char FullPathMediaPriv[PATH_MAX + 1];
|
||||||
|
|
||||||
/***** Trivial cases *****/
|
/***** Trivial cases *****/
|
||||||
if (Type == Med_TYPE_NONE)
|
if (Name == NULL)
|
||||||
Lay_ShowErrorAndExit ("Wrong media type.");
|
return;
|
||||||
|
if (!Name[0])
|
||||||
|
return;
|
||||||
if (Type == Med_YOUTUBE)
|
if (Type == Med_YOUTUBE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1558,48 +1576,46 @@ void Med_RemoveMediaFiles (const char *Name,Med_Type_t Type)
|
||||||
Name[0],
|
Name[0],
|
||||||
Name[1]);
|
Name[1]);
|
||||||
|
|
||||||
if (Name[0])
|
/***** Remove files *****/
|
||||||
|
switch (Type)
|
||||||
{
|
{
|
||||||
switch (Type)
|
case Med_JPG:
|
||||||
{
|
/***** Remove private JPG file *****/
|
||||||
case Med_JPG:
|
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||||
/***** Remove private JPG file *****/
|
"%s/%s.%s",
|
||||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
PathMedPriv,Name,Med_Extensions[Med_JPG]);
|
||||||
"%s/%s.%s",
|
unlink (FullPathMediaPriv);
|
||||||
PathMedPriv,Name,Med_Extensions[Med_JPG]);
|
|
||||||
unlink (FullPathMediaPriv);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Med_GIF:
|
case Med_GIF:
|
||||||
/***** Remove private GIF file *****/
|
/***** Remove private GIF file *****/
|
||||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||||
"%s/%s.%s",
|
"%s/%s.%s",
|
||||||
PathMedPriv,Name,Med_Extensions[Med_GIF]);
|
PathMedPriv,Name,Med_Extensions[Med_GIF]);
|
||||||
unlink (FullPathMediaPriv);
|
unlink (FullPathMediaPriv);
|
||||||
|
|
||||||
/***** Remove private PNG file *****/
|
/***** Remove private PNG file *****/
|
||||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||||
"%s/%s.png",
|
"%s/%s.png",
|
||||||
PathMedPriv,Name);
|
PathMedPriv,Name);
|
||||||
unlink (FullPathMediaPriv);
|
unlink (FullPathMediaPriv);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Med_MP4:
|
case Med_MP4:
|
||||||
case Med_WEBM:
|
case Med_WEBM:
|
||||||
case Med_OGG:
|
case Med_OGG:
|
||||||
/***** Remove private video file *****/
|
/***** Remove private video file *****/
|
||||||
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
snprintf (FullPathMediaPriv,sizeof (FullPathMediaPriv),
|
||||||
"%s/%s.%s",
|
"%s/%s.%s",
|
||||||
PathMedPriv,Name,Med_Extensions[Type]);
|
PathMedPriv,Name,Med_Extensions[Type]);
|
||||||
unlink (FullPathMediaPriv);
|
unlink (FullPathMediaPriv);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
// Public links are removed automatically after a period
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Public links are removed automatically after a period
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -122,6 +122,7 @@ struct Media
|
||||||
struct ParamUploadMedia
|
struct ParamUploadMedia
|
||||||
{
|
{
|
||||||
char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
char Action [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||||
|
char FormType[Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||||
char File [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
char File [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||||
char Title [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
char Title [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||||
char URL [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
char URL [Med_MAX_BYTES_PARAM_UPLOAD_MEDIA + 1];
|
||||||
|
|
100
swad_test.c
100
swad_test.c
|
@ -276,11 +276,11 @@ static void Tst_RemAnsFromQst (void);
|
||||||
static void Tst_RemTagsFromQst (void);
|
static void Tst_RemTagsFromQst (void);
|
||||||
static void Tst_RemoveUnusedTagsFromCurrentCrs (void);
|
static void Tst_RemoveUnusedTagsFromCurrentCrs (void);
|
||||||
|
|
||||||
static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod);
|
static void Tst_RemoveMedFileFromStemOfQst (long CrsCod,long QstCod);
|
||||||
static void Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (long CrsCod);
|
static void Tst_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod);
|
||||||
static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd);
|
static void Tst_RemoveMedFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd);
|
||||||
static void Tst_RemoveAllImgFilesFromAnsOfQst (long CrsCod,long QstCod);
|
static void Tst_RemoveAllMedFilesFromAnsOfQst (long CrsCod,long QstCod);
|
||||||
static void Tst_RemoveAllImgFilesFromAnsOfAllQstsInCrs (long CrsCod);
|
static void Tst_RemoveAllMedFilesFromAnsOfAllQstsInCrs (long CrsCod);
|
||||||
|
|
||||||
static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType,struct Tst_Stats *Stats);
|
static unsigned Tst_GetNumTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType,struct Tst_Stats *Stats);
|
||||||
static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType);
|
static unsigned Tst_GetNumCoursesWithTstQuestions (Sco_Scope_t Scope,Tst_AnswerType_t AnsType);
|
||||||
|
@ -1115,12 +1115,9 @@ static void Tst_PutFormToEditQstMedia (struct Media *Media,int NumMediaInForm,
|
||||||
bool OptionsDisabled)
|
bool OptionsDisabled)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassFormInBox[The_NUM_THEMES];
|
extern const char *The_ClassFormInBox[The_NUM_THEMES];
|
||||||
extern const char *Txt_No_image;
|
extern const char *Txt_No_image_video;
|
||||||
extern const char *Txt_Current_image;
|
extern const char *Txt_Current_image_video;
|
||||||
extern const char *Txt_Change_image;
|
extern const char *Txt_Change_image_video;
|
||||||
extern const char *Txt_Title_attribution;
|
|
||||||
extern const char *Txt_Link;
|
|
||||||
extern const char *Txt_optional;
|
|
||||||
static unsigned UniqueId = 0;
|
static unsigned UniqueId = 0;
|
||||||
struct ParamUploadMedia ParamUploadMedia;
|
struct ParamUploadMedia ParamUploadMedia;
|
||||||
|
|
||||||
|
@ -1130,9 +1127,9 @@ static void Tst_PutFormToEditQstMedia (struct Media *Media,int NumMediaInForm,
|
||||||
Med_SetParamNames (&ParamUploadMedia,NumMediaInForm);
|
Med_SetParamNames (&ParamUploadMedia,NumMediaInForm);
|
||||||
|
|
||||||
/***** Start container *****/
|
/***** Start container *****/
|
||||||
fprintf (Gbl.F.Out,"<div class=\"TEST_FORM_EDIT_IMG\">");
|
fprintf (Gbl.F.Out,"<div class=\"TEST_FORM_EDIT_MED\">");
|
||||||
|
|
||||||
/***** Choice 1: No image *****/
|
/***** Choice 1: No media *****/
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
||||||
"<input type=\"radio\" name=\"%s\" value=\"%u\"",
|
"<input type=\"radio\" name=\"%s\" value=\"%u\"",
|
||||||
The_ClassFormInBox[Gbl.Prefs.Theme],
|
The_ClassFormInBox[Gbl.Prefs.Theme],
|
||||||
|
@ -1142,9 +1139,9 @@ static void Tst_PutFormToEditQstMedia (struct Media *Media,int NumMediaInForm,
|
||||||
fprintf (Gbl.F.Out," />"
|
fprintf (Gbl.F.Out," />"
|
||||||
"%s"
|
"%s"
|
||||||
"</label><br />",
|
"</label><br />",
|
||||||
Txt_No_image);
|
Txt_No_image_video);
|
||||||
|
|
||||||
/***** Choice 2: Current image *****/
|
/***** Choice 2: Current media *****/
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
||||||
"<input type=\"radio\" name=\"%s\" value=\"%u\""
|
"<input type=\"radio\" name=\"%s\" value=\"%u\""
|
||||||
" checked=\"checked\"",
|
" checked=\"checked\"",
|
||||||
|
@ -1155,10 +1152,10 @@ static void Tst_PutFormToEditQstMedia (struct Media *Media,int NumMediaInForm,
|
||||||
fprintf (Gbl.F.Out," />"
|
fprintf (Gbl.F.Out," />"
|
||||||
"%s"
|
"%s"
|
||||||
"</label>",
|
"</label>",
|
||||||
Txt_Current_image);
|
Txt_Current_image_video);
|
||||||
Med_ShowMedia (Media,ClassContainer,ClassMedia);
|
Med_ShowMedia (Media,ClassContainer,ClassMedia);
|
||||||
|
|
||||||
/***** Choice 3: Change/new image *****/
|
/***** Choice 3: Change media *****/
|
||||||
UniqueId++;
|
UniqueId++;
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
||||||
"<input type=\"radio\" id=\"chg_img_%u\" name=\"%s\""
|
"<input type=\"radio\" id=\"chg_img_%u\" name=\"%s\""
|
||||||
|
@ -1170,40 +1167,15 @@ static void Tst_PutFormToEditQstMedia (struct Media *Media,int NumMediaInForm,
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
||||||
fprintf (Gbl.F.Out," />"
|
fprintf (Gbl.F.Out," />"
|
||||||
"%s: "
|
"%s: "
|
||||||
"</label>"
|
"</label>",
|
||||||
"<input type=\"file\" name=\"%s\" accept=\"image/*\"",
|
Txt_Change_image_video);
|
||||||
Txt_Change_image,
|
Med_PutMediaUploader (NumMediaInForm,ClassMediaInput);
|
||||||
ParamUploadMedia.File);
|
|
||||||
if (OptionsDisabled)
|
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
|
||||||
fprintf (Gbl.F.Out," onchange=\"document.getElementById('chg_img_%u').checked = true;\" />",
|
|
||||||
UniqueId);
|
|
||||||
|
|
||||||
/***** Media title/attribution *****/
|
|
||||||
fprintf (Gbl.F.Out,"<br />"
|
|
||||||
"<input type=\"text\" name=\"%s\""
|
|
||||||
" placeholder=\"%s (%s)\""
|
|
||||||
" class=\"%s\" maxlength=\"%u\" value=\"%s\">",
|
|
||||||
ParamUploadMedia.Title,Txt_Title_attribution,Txt_optional,
|
|
||||||
ClassMediaInput,Med_MAX_CHARS_TITLE,
|
|
||||||
Media->Title ? Media->Title :
|
|
||||||
"");
|
|
||||||
|
|
||||||
/***** Media URL *****/
|
|
||||||
fprintf (Gbl.F.Out,"<br />"
|
|
||||||
"<input type=\"text\" name=\"%s\""
|
|
||||||
" placeholder=\"%s (%s)\""
|
|
||||||
" class=\"%s\" maxlength=\"%u\" value=\"%s\">",
|
|
||||||
ParamUploadMedia.URL,Txt_Link,Txt_optional,
|
|
||||||
ClassMediaInput,Cns_MAX_CHARS_WWW,
|
|
||||||
Media->URL ? Media->URL :
|
|
||||||
"");
|
|
||||||
|
|
||||||
/***** End container *****/
|
/***** End container *****/
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
else // No current image
|
else // No current image
|
||||||
/***** Attached image (optional) *****/
|
/***** Attached media *****/
|
||||||
Med_PutMediaUploader (NumMediaInForm,ClassMediaInput);
|
Med_PutMediaUploader (NumMediaInForm,ClassMediaInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5081,7 +5053,7 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
|
||||||
"</td>"
|
"</td>"
|
||||||
"<td class=\"LEFT_TOP\">"
|
"<td class=\"LEFT_TOP\">"
|
||||||
"<textarea id=\"Stem\" name=\"Stem\""
|
"<textarea id=\"Stem\" name=\"Stem\""
|
||||||
" class=\"STEM\" rows=\"5\" required=\"required\">"
|
" class=\"STEM_TEXTAREA\" rows=\"5\" required=\"required\">"
|
||||||
"%s"
|
"%s"
|
||||||
"</textarea><br />",
|
"</textarea><br />",
|
||||||
The_ClassFormInBox[Gbl.Prefs.Theme],
|
The_ClassFormInBox[Gbl.Prefs.Theme],
|
||||||
|
@ -5096,7 +5068,8 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
|
||||||
/***** Feedback *****/
|
/***** Feedback *****/
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">"
|
||||||
"%s (%s):<br />"
|
"%s (%s):<br />"
|
||||||
"<textarea name=\"Feedback\" class=\"STEM\" rows=\"2\">",
|
"<textarea name=\"Feedback\""
|
||||||
|
" class=\"STEM_TEXTAREA\" rows=\"2\">",
|
||||||
The_ClassFormInBox[Gbl.Prefs.Theme],
|
The_ClassFormInBox[Gbl.Prefs.Theme],
|
||||||
Txt_Feedback,Txt_optional);
|
Txt_Feedback,Txt_optional);
|
||||||
if (Feedback)
|
if (Feedback)
|
||||||
|
@ -5289,7 +5262,8 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
|
||||||
|
|
||||||
/* Answer text */
|
/* Answer text */
|
||||||
fprintf (Gbl.F.Out,"<textarea name=\"AnsStr%u\""
|
fprintf (Gbl.F.Out,"<textarea name=\"AnsStr%u\""
|
||||||
" class=\"ANS_STR\" rows=\"5\"",NumOpt);
|
" class=\"ANSWER_TEXTAREA\" rows=\"5\"",
|
||||||
|
NumOpt);
|
||||||
if (OptionsDisabled)
|
if (OptionsDisabled)
|
||||||
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
fprintf (Gbl.F.Out," disabled=\"disabled\"");
|
||||||
if (NumOpt == 0) // First textarea required
|
if (NumOpt == 0) // First textarea required
|
||||||
|
@ -5304,12 +5278,13 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
|
||||||
(int) NumOpt,
|
(int) NumOpt,
|
||||||
"TEST_IMG_EDIT_ONE_ANS_CONTAINER",
|
"TEST_IMG_EDIT_ONE_ANS_CONTAINER",
|
||||||
"TEST_IMG_EDIT_ONE_ANS",
|
"TEST_IMG_EDIT_ONE_ANS",
|
||||||
"ANS_STR", // Title / attribution
|
"ANSWER", // Form inputs
|
||||||
OptionsDisabled);
|
OptionsDisabled);
|
||||||
|
|
||||||
/* Feedback */
|
/* Feedback */
|
||||||
fprintf (Gbl.F.Out,"<label class=\"%s\">%s (%s):<br />"
|
fprintf (Gbl.F.Out,"<label class=\"%s\">%s (%s):<br />"
|
||||||
"<textarea name=\"FbStr%u\" class=\"ANS_STR\" rows=\"2\"",
|
"<textarea name=\"FbStr%u\""
|
||||||
|
" class=\"ANSWER_TEXTAREA\" rows=\"2\"",
|
||||||
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Feedback,Txt_optional,
|
The_ClassFormInBox[Gbl.Prefs.Theme],Txt_Feedback,Txt_optional,
|
||||||
NumOpt);
|
NumOpt);
|
||||||
if (OptionsDisabled)
|
if (OptionsDisabled)
|
||||||
|
@ -5920,6 +5895,7 @@ static void Tst_GetQstFromForm (char *Stem,char *Feedback)
|
||||||
Tst_MAX_BYTES_ANSWER_OR_FEEDBACK);
|
Tst_MAX_BYTES_ANSWER_OR_FEEDBACK);
|
||||||
|
|
||||||
/* Get image associated to the answer (action, file and title) */
|
/* Get image associated to the answer (action, file and title) */
|
||||||
|
|
||||||
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE ||
|
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE ||
|
||||||
Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE)
|
Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE)
|
||||||
{
|
{
|
||||||
|
@ -6183,7 +6159,7 @@ static void Tst_MoveMediaToDefinitiveDirectories (void)
|
||||||
/* Remove possible file with the old image
|
/* Remove possible file with the old image
|
||||||
(the new image file is already processed
|
(the new image file is already processed
|
||||||
and moved to the definitive directory) */
|
and moved to the definitive directory) */
|
||||||
Tst_RemoveImgFileFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
Tst_RemoveMedFileFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
||||||
|
|
||||||
if ((Gbl.Test.Media.Action == Med_ACTION_NEW_MEDIA || // Upload new image
|
if ((Gbl.Test.Media.Action == Med_ACTION_NEW_MEDIA || // Upload new image
|
||||||
Gbl.Test.Media.Action == Med_ACTION_CHANGE_MEDIA) && // Replace existing image by new image
|
Gbl.Test.Media.Action == Med_ACTION_CHANGE_MEDIA) && // Replace existing image by new image
|
||||||
|
@ -6203,7 +6179,7 @@ static void Tst_MoveMediaToDefinitiveDirectories (void)
|
||||||
/* Remove possible file with the old image
|
/* Remove possible file with the old image
|
||||||
(the new image file is already processed
|
(the new image file is already processed
|
||||||
and moved to the definitive directory) */
|
and moved to the definitive directory) */
|
||||||
Tst_RemoveImgFileFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod,NumOpt);
|
Tst_RemoveMedFileFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod,NumOpt);
|
||||||
|
|
||||||
if ((Gbl.Test.Answer.Options[NumOpt].Media.Action == Med_ACTION_NEW_MEDIA || // Upload new image
|
if ((Gbl.Test.Answer.Options[NumOpt].Media.Action == Med_ACTION_NEW_MEDIA || // Upload new image
|
||||||
Gbl.Test.Answer.Options[NumOpt].Media.Action == Med_ACTION_CHANGE_MEDIA) && // Replace existing image by new image
|
Gbl.Test.Answer.Options[NumOpt].Media.Action == Med_ACTION_CHANGE_MEDIA) && // Replace existing image by new image
|
||||||
|
@ -6421,8 +6397,8 @@ void Tst_RemoveQst (void)
|
||||||
EditingOnlyThisQst = Par_GetParToBool ("OnlyThisQst");
|
EditingOnlyThisQst = Par_GetParToBool ("OnlyThisQst");
|
||||||
|
|
||||||
/***** Remove images associated to question *****/
|
/***** Remove images associated to question *****/
|
||||||
Tst_RemoveAllImgFilesFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
Tst_RemoveAllMedFilesFromAnsOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
||||||
Tst_RemoveImgFileFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
Tst_RemoveMedFileFromStemOfQst (Gbl.CurrentCrs.Crs.CrsCod,Gbl.Test.QstCod);
|
||||||
|
|
||||||
/***** Remove the question from all the tables *****/
|
/***** Remove the question from all the tables *****/
|
||||||
/* Remove answers and tags from this test question */
|
/* Remove answers and tags from this test question */
|
||||||
|
@ -6774,7 +6750,7 @@ static void Tst_RemoveUnusedTagsFromCurrentCrs (void)
|
||||||
/******** Remove one file associated to one stem of one test question ********/
|
/******** Remove one file associated to one stem of one test question ********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod)
|
static void Tst_RemoveMedFileFromStemOfQst (long CrsCod,long QstCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
|
|
||||||
|
@ -6797,7 +6773,7 @@ static void Tst_RemoveImgFileFromStemOfQst (long CrsCod,long QstCod)
|
||||||
/****** in a course *****/
|
/****** in a course *****/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (long CrsCod)
|
static void Tst_RemoveAllMedFilesFromStemOfAllQstsInCrs (long CrsCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumMedia;
|
unsigned NumMedia;
|
||||||
|
@ -6822,7 +6798,7 @@ static void Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (long CrsCod)
|
||||||
/**** Remove one image file associated to one answer of one test question ****/
|
/**** Remove one image file associated to one answer of one test question ****/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd)
|
static void Tst_RemoveMedFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsInd)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
|
|
||||||
|
@ -6848,7 +6824,7 @@ static void Tst_RemoveImgFileFromAnsOfQst (long CrsCod,long QstCod,unsigned AnsI
|
||||||
/*** Remove all image files associated to all answers of one test question ***/
|
/*** Remove all image files associated to all answers of one test question ***/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_RemoveAllImgFilesFromAnsOfQst (long CrsCod,long QstCod)
|
static void Tst_RemoveAllMedFilesFromAnsOfQst (long CrsCod,long QstCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumMedia;
|
unsigned NumMedia;
|
||||||
|
@ -6877,7 +6853,7 @@ static void Tst_RemoveAllImgFilesFromAnsOfQst (long CrsCod,long QstCod)
|
||||||
/** in a course ***/
|
/** in a course ***/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Tst_RemoveAllImgFilesFromAnsOfAllQstsInCrs (long CrsCod)
|
static void Tst_RemoveAllMedFilesFromAnsOfAllQstsInCrs (long CrsCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
unsigned NumMedia;
|
unsigned NumMedia;
|
||||||
|
@ -8632,8 +8608,8 @@ void Tst_RemoveCrsTests (long CrsCod)
|
||||||
|
|
||||||
/***** Remove files with images associated
|
/***** Remove files with images associated
|
||||||
to test questions in the course *****/
|
to test questions in the course *****/
|
||||||
Tst_RemoveAllImgFilesFromAnsOfAllQstsInCrs (CrsCod);
|
Tst_RemoveAllMedFilesFromAnsOfAllQstsInCrs (CrsCod);
|
||||||
Tst_RemoveAllImgFilesFromStemOfAllQstsInCrs (CrsCod);
|
Tst_RemoveAllMedFilesFromStemOfAllQstsInCrs (CrsCod);
|
||||||
|
|
||||||
/***** Remove test questions in the course *****/
|
/***** Remove test questions in the course *****/
|
||||||
DB_QueryDELETE ("can not remove test questions of a course",
|
DB_QueryDELETE ("can not remove test questions of a course",
|
||||||
|
|
|
@ -3567,7 +3567,7 @@ const char *Txt_Change_IDs =
|
||||||
"Alterar nºs. identif.";
|
"Alterar nºs. identif.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Change_image =
|
const char *Txt_Change_image_video =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Canviar imatge / vídeo";
|
"Canviar imatge / vídeo";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
|
@ -6614,7 +6614,7 @@ const char *Txt_Current_email =
|
||||||
"Email atual";
|
"Email atual";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Current_image =
|
const char *Txt_Current_image_video =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Imatge / vídeo actual";
|
"Imatge / vídeo actual";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
|
@ -24648,7 +24648,7 @@ const char *Txt_No_holidays =
|
||||||
"Não há feriados.";
|
"Não há feriados.";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_No_image = // Without any image
|
const char *Txt_No_image_video = // Without any image
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Sense imatge / vídeo";
|
"Sense imatge / vídeo";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
|
|
Loading…
Reference in New Issue