Version 15.64

This commit is contained in:
Antonio Cañas Vargas 2015-12-12 19:47:10 +01:00
parent ec1265c0ec
commit 40114fd0e1
19 changed files with 210 additions and 131 deletions

View File

@ -1749,11 +1749,25 @@ a:hover img.CENTRE_PHOTO_SHOW
} }
/***************************** Public user's profile *************************/ /***************************** Public user's profile *************************/
#prf_fig_container #prf_fig_left_container
{ {
text-align:center; display:inline-block;
box-sizing:border-box;
width:50%;
padding-right:10px;
text-align:right;
vertical-align:top;
} }
#prf_fig_list #prf_fig_right_container
{
display:inline-block;
box-sizing:border-box;
width:50%;
padding-left:10px;
text-align:left;
vertical-align:top;
}
.PRF_FIG_LIST
{ {
display:inline-block; display:inline-block;
list-style-type:none; list-style-type:none;
@ -1771,14 +1785,37 @@ a:hover img.CENTRE_PHOTO_SHOW
vertical-align:middle; vertical-align:middle;
opacity:0.33; opacity:0.33;
} }
#num_following
{
display:inline-block;
box-sizing:border-box;
width:50%;
padding-right:10px;
text-align:right;
}
#num_followers
{
display:inline-block;
box-sizing:border-box;
width:50%;
padding-left:10px;
text-align:left;
}
.FOLLOW .FOLLOW
{
display:inline-block;
min-width:125px;
text-align:center;
}
.FOLLOW_NUM
{ {
color:#404040; color:#404040;
font-size:30pt; font-size:30pt;
font-weight:bold; font-weight:bold;
opacity:0.5; opacity:0.5;
} }
.FOLLOW_B .FOLLOW_NUM_B
{ {
color:#404040; color:#404040;
font-size:30pt; font-size:30pt;

BIN
icon/card64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

BIN
icon/config64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
icon/folder64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

BIN
icon/qr64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

BIN
icon/rollcall64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

BIN
icon/unfollow64x64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

View File

@ -34,7 +34,10 @@ var NumUsrsCon;
var ListSeconds = []; var ListSeconds = [];
var countClockConnected = 0; var countClockConnected = 0;
// Write a date in client local time /****************** Write a date in client local time ************************/
//id is the id of the HTML element in which date will be written
//TimeUTC is the date-time to write in UTC UNIX time format
function writeLocalDateFromUTC(id,TimeUTC) { function writeLocalDateFromUTC(id,TimeUTC) {
var d = new Date; var d = new Date;
var Yea; var Yea;
@ -53,9 +56,9 @@ function writeLocalDateFromUTC(id,TimeUTC) {
} }
/*************** Write a date-time in client local time **********************/ /*************** Write a date-time in client local time **********************/
// - id is the id of the HTML element in which date-time will be written // id is the id of the HTML element in which date-time will be written
// - TimeUTC is the date-time to write in UTC UNIX time format // TimeUTC is the date-time to write in UTC UNIX time format
// - separator is HTML code to write between date and time // separator is HTML code to write between date and time
function writeLocalDateTimeFromUTC(id,TimeUTC,separator) { function writeLocalDateTimeFromUTC(id,TimeUTC,separator) {
var d = new Date; var d = new Date;

View File

@ -80,7 +80,7 @@ void QR_PutLinkToPrintQRCode (struct UsrData *UsrDat,bool PrintText)
sprintf (NicknameWithArroba,"@%s",UsrDat->Nickname); sprintf (NicknameWithArroba,"@%s",UsrDat->Nickname);
Par_PutHiddenParamString ("QRString",NicknameWithArroba); Par_PutHiddenParamString ("QRString",NicknameWithArroba);
Act_LinkFormSubmit (Txt_QR_code,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmit (Txt_QR_code,The_ClassFormBold[Gbl.Prefs.Theme]);
Lay_PutIconWithText ("qr16x16.gif",Txt_QR_code,PrintText ? Txt_QR_code : Lay_PutIconWithText ("qr64x64.gif",Txt_QR_code,PrintText ? Txt_QR_code :
NULL); NULL);
Act_FormEnd (); Act_FormEnd ();
} }

View File

@ -117,12 +117,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.63 (2015/12/12)" #define Log_PLATFORM_VERSION "SWAD 15.64 (2015/12/12)"
#define CSS_FILE "swad15.63.css" #define CSS_FILE "swad15.64.css"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.64: Dec 12, 2015 Changes in layout of user's public profile.
Changes in some small icons. (187004 lines)
Version 15.63: Dec 12, 2015 New layout for user's public profile. Version 15.63: Dec 12, 2015 New layout for user's public profile.
Fixed bug when removing user's account. (186932 lines) Fixed bug when removing user's account. (186932 lines)
2 changes necessary in database: 2 changes necessary in database:

View File

@ -3872,7 +3872,7 @@ void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
switch (Sco_GetScopeFromUnsignedStr (row[0])) switch (Sco_GetScopeFromUnsignedStr (row[0]))
{ {
case Sco_SCOPE_SYS: // System case Sco_SCOPE_SYS: // System
fprintf (Gbl.F.Out,"<img src=\"%s/swad16x16.gif\"" fprintf (Gbl.F.Out,"<img src=\"%s/swad64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"&nbsp;%s", "&nbsp;%s",

View File

@ -44,7 +44,7 @@
/***************************** Private constants *****************************/ /***************************** Private constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Fol_NUM_COLUMNS_FOLLOW 5 #define Fol_NUM_COLUMNS_FOLLOW 3
/*****************************************************************************/ /*****************************************************************************/
/****************************** Internal types *******************************/ /****************************** Internal types *******************************/
@ -99,25 +99,25 @@ void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat)
extern const char *Txt_Following; extern const char *Txt_Following;
extern const char *Txt_Followers; extern const char *Txt_Followers;
/***** Start table *****/ /***** Start section *****/
fprintf (Gbl.F.Out,"<section id=\"follow\">" fprintf (Gbl.F.Out,"<section id=\"follow_section\">");
"<table style=\"margin:0 auto;\">"
"<tr>");
/***** Followed users *****/ /***** Followed users *****/
fprintf (Gbl.F.Out,"<div id=\"num_following\">");
Fol_ShowNumberOfFollowingOrFollowers (UsrDat, Fol_ShowNumberOfFollowingOrFollowers (UsrDat,
Fol_GetNumFollowing (UsrDat->UsrCod), Fol_GetNumFollowing (UsrDat->UsrCod),
ActSeeFlg,Txt_Following); ActSeeFlg,Txt_Following);
fprintf (Gbl.F.Out,"</div>");
/***** Followers *****/ /***** Followers *****/
fprintf (Gbl.F.Out,"<div id=\"num_followers\">");
Fol_ShowNumberOfFollowingOrFollowers (UsrDat, Fol_ShowNumberOfFollowingOrFollowers (UsrDat,
Fol_GetNumFollowers (UsrDat->UsrCod), Fol_GetNumFollowers (UsrDat->UsrCod),
ActSeeFlr,Txt_Followers); ActSeeFlr,Txt_Followers);
fprintf (Gbl.F.Out,"</div>");
/***** End table *****/ /***** End section *****/
fprintf (Gbl.F.Out,"</tr>" fprintf (Gbl.F.Out,"</section>");
"</table>"
"</section>");
} }
/*****************************************************************************/ /*****************************************************************************/
@ -132,21 +132,21 @@ static void Fol_ShowNumberOfFollowingOrFollowers (const struct UsrData *UsrDat,
extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *The_ClassFormBold[The_NUM_THEMES]; extern const char *The_ClassFormBold[The_NUM_THEMES];
/***** Start container *****/
fprintf (Gbl.F.Out,"<div class=\"FOLLOW\">");
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\"" /***** Number *****/
" style=\"min-width:125px;\">");
/* Number */
fprintf (Gbl.F.Out,"<div class=\"%s\">", fprintf (Gbl.F.Out,"<div class=\"%s\">",
(Gbl.CurrentAct == Action) ? "FOLLOW_B" : (Gbl.CurrentAct == Action) ? "FOLLOW_NUM_B" :
"FOLLOW"); "FOLLOW_NUM");
if (NumUsrs) if (NumUsrs)
{ {
/* Form to list users */ /* Form to list users */
Act_FormStartAnchor (Action,"follow"); Act_FormStartAnchor (Action,"follow_section");
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmit (Title, Act_LinkFormSubmit (Title,
(Gbl.CurrentAct == Action) ? "FOLLOW_B" : (Gbl.CurrentAct == Action) ? "FOLLOW_NUM_B" :
"FOLLOW"); "FOLLOW_NUM");
} }
fprintf (Gbl.F.Out,"%u",NumUsrs); fprintf (Gbl.F.Out,"%u",NumUsrs);
if (NumUsrs) if (NumUsrs)
@ -156,14 +156,14 @@ static void Fol_ShowNumberOfFollowingOrFollowers (const struct UsrData *UsrDat,
} }
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
/* Text */ /***** Text *****/
fprintf (Gbl.F.Out,"<div class=\"%s CENTER_MIDDLE\">", fprintf (Gbl.F.Out,"<div class=\"%s\">",
(Gbl.CurrentAct == Action) ? The_ClassFormBold[Gbl.Prefs.Theme] : (Gbl.CurrentAct == Action) ? The_ClassFormBold[Gbl.Prefs.Theme] :
The_ClassForm[Gbl.Prefs.Theme]); The_ClassForm[Gbl.Prefs.Theme]);
if (NumUsrs) if (NumUsrs)
{ {
/* Form to list users */ /* Form to list users */
Act_FormStartAnchor (Action,"follow"); Act_FormStartAnchor (Action,"follow_section");
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmit (Title, Act_LinkFormSubmit (Title,
(Gbl.CurrentAct == Action) ? The_ClassFormBold[Gbl.Prefs.Theme] : (Gbl.CurrentAct == Action) ? The_ClassFormBold[Gbl.Prefs.Theme] :
@ -175,8 +175,10 @@ static void Fol_ShowNumberOfFollowingOrFollowers (const struct UsrData *UsrDat,
fprintf (Gbl.F.Out,"</a>"); fprintf (Gbl.F.Out,"</a>");
Act_FormEnd (); Act_FormEnd ();
} }
fprintf (Gbl.F.Out,"</div>" fprintf (Gbl.F.Out,"</div>");
"</td>");
/***** End container *****/
fprintf (Gbl.F.Out,"</div>");
} }
/*****************************************************************************/ /*****************************************************************************/
@ -385,7 +387,7 @@ static void Fol_ShowFollowedOrFollower (const struct UsrData *UsrDat)
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmit (Txt_Unfollow,NULL); Act_LinkFormSubmit (Txt_Unfollow,NULL);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\">" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\">"
"<img src=\"%s/unfollow16x16.gif\"" "<img src=\"%s/unfollow64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -400,7 +402,7 @@ static void Fol_ShowFollowedOrFollower (const struct UsrData *UsrDat)
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmit (Txt_Follow,NULL); Act_LinkFormSubmit (Txt_Follow,NULL);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\">" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\">"
"<img src=\"%s/follow16x16.gif\"" "<img src=\"%s/follow64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"

View File

@ -968,7 +968,7 @@ void Lay_PutIconWithText (const char *Icon,const char *Alt,const char *Text)
void Lay_PutCalculateIconWithText (const char *Alt,const char *Text) void Lay_PutCalculateIconWithText (const char *Alt,const char *Text)
{ {
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"margin:0 6px; display:inline;\">" " style=\"margin:0 6px 0 0; display:inline;\">"
"<img id=\"update_%d\" src=\"%s/recycle16x16.gif\"" "<img id=\"update_%d\" src=\"%s/recycle16x16.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"

View File

@ -110,7 +110,40 @@ const char *Net_WebsAndSocialNetworksDB[Net_NUM_WEBS_AND_SOCIAL_NETWORKS] =
"youtube", // Net_YOUTUBE "youtube", // Net_YOUTUBE
}; };
const char *Net_TitleWebsAndSocialNetworks[Net_NUM_WEBS_AND_SOCIAL_NETWORKS] = const char *Net_WebsAndSocialNetworksIcons[Net_NUM_WEBS_AND_SOCIAL_NETWORKS] =
{
"www16x16.gif", // Net_WWW
"500px16x16.gif", // Net_500PX
"delicious16x16.gif", // Net_DELICIOUS
"deviantart16x16.gif", // Net_DEVIANTART
"diaspora16x16.gif", // Net_DIASPORA
"edmodo16x16.gif", // Net_EDMODO
"facebook16x16.gif", // Net_FACEBOOK
"flickr16x16.gif", // Net_FLICKR
"foursquare16x16.gif", // Net_FOURSQUAREhub
"github16x16.gif", // Net_GITHUB
"gnusocial16x16.gif", // Net_GNU_SOCIAL
"googleplus16x16.gif", // Net_GOOGLE_PLUS
"googlescholar16x16.gif", // Net_GOOGLE_SCHOLAR
"identica16x16.gif", // Net_IDENTICA
"instagram16x16.gif", // Net_INSTAGRAM
"linkedin16x16.gif", // Net_LINKEDIN
"orcid16x16.gif", // Net_ORCID
"paperli16x16.gif", // Net_PAPERLI
"pinterest16x16.gif", // Net_PINTEREST
"quitter16x16.gif", // Net_QUITTER
"researchgate16x16.gif", // Net_RESEARCH_GATE
"researcherid16x16.gif", // Net_RESEARCHERID
"scoopit16x16.gif", // Net_SCOOPIT
"slideshare16x16.gif", // Net_SLIDESHARE
"storify16x16.gif", // Net_STORIFY
"tumblr16x16.gif", // Net_TUMBLR
"twitter16x16.gif", // Net_TWITTER
"wikipedia16x16.gif", // Net_WIKIPEDIA
"youtube16x16.gif", // Net_YOUTUBE
};
const char *Net_WebsAndSocialNetworksTitle[Net_NUM_WEBS_AND_SOCIAL_NETWORKS] =
{ {
"WWW", // Net_WWW "WWW", // Net_WWW
"500px", // Net_500PX "500px", // Net_500PX
@ -168,7 +201,7 @@ void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
/***** Show link to public profile *****/ /***** Show link to public profile *****/
Net_ShowAWebOrSocialNet (Prf_GetURLPublicProfile (URL,UsrDat->Nickname), Net_ShowAWebOrSocialNet (Prf_GetURLPublicProfile (URL,UsrDat->Nickname),
"swad",Cfg_PLATFORM_PAGE_TITLE); "swad64x64.gif",Cfg_PLATFORM_PAGE_TITLE);
/***** Show the rest of webs / social networks *****/ /***** Show the rest of webs / social networks *****/
for (NumURL = (Net_WebsAndSocialNetworks_t) 0; for (NumURL = (Net_WebsAndSocialNetworks_t) 0;
@ -190,8 +223,8 @@ void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
/* Show the web / social network */ /* Show the web / social network */
Net_ShowAWebOrSocialNet (URL, Net_ShowAWebOrSocialNet (URL,
Net_WebsAndSocialNetworksDB[NumURL], Net_WebsAndSocialNetworksIcons[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL]); Net_WebsAndSocialNetworksTitle[NumURL]);
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
@ -213,7 +246,7 @@ static void Net_ShowAWebOrSocialNet (const char *URL,
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\">" " style=\"display:inline;\">"
"<a href=\"%s\" target=\"_blank\" title=\"%s\">" "<a href=\"%s\" target=\"_blank\" title=\"%s\">"
"<img src=\"%s/%s16x16.gif\"" "<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</a>" "</a>"
@ -271,17 +304,17 @@ void Net_ShowFormMyWebsAndSocialNets (void)
/***** Row for this web / social network *****/ /***** Row for this web / social network *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"%s LEFT_MIDDLE\">" "<td class=\"%s LEFT_MIDDLE\">"
"<img src=\"%s/%s16x16.gif\"" "<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\"" " class=\"ICON16x16\""
" style=\"margin-right:12px;\" />" " style=\"margin-right:12px;\" />"
"%s:</td>" "%s:</td>"
"<td class=\"LEFT_MIDDLE\" style=\"width:%upx;\">", "<td class=\"LEFT_MIDDLE\" style=\"width:%upx;\">",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksDB[NumURL], Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksIcons[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL], Net_WebsAndSocialNetworksTitle[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL], Net_WebsAndSocialNetworksTitle[NumURL],
Net_TitleWebsAndSocialNetworks[NumURL], Net_WebsAndSocialNetworksTitle[NumURL],
Net_COL2_WIDTH); Net_COL2_WIDTH);
Act_FormStart (ActChgMyNet); Act_FormStart (ActChgMyNet);
Par_PutHiddenParamUnsigned ("Web",(unsigned) NumURL); Par_PutHiddenParamUnsigned ("Web",(unsigned) NumURL);
@ -489,7 +522,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"DAT LEFT_MIDDLE\">" "<td class=\"DAT LEFT_MIDDLE\">"
"<img src=\"%s/%s16x16.gif\"" "<img src=\"%s/%s\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\"" " class=\"ICON16x16\""
" style=\"margin-right:12px;\" />" " style=\"margin-right:12px;\" />"
@ -501,10 +534,10 @@ void Net_ShowWebAndSocialNetworksStats (void)
"%.2f%%" "%.2f%%"
"</td>" "</td>"
"</tr>", "</tr>",
Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksDB[Web], Gbl.Prefs.IconsURL,Net_WebsAndSocialNetworksIcons[Web],
Net_TitleWebsAndSocialNetworks[Web], Net_WebsAndSocialNetworksTitle[Web],
Net_TitleWebsAndSocialNetworks[Web], Net_WebsAndSocialNetworksTitle[Web],
Net_TitleWebsAndSocialNetworks[Web], Net_WebsAndSocialNetworksTitle[Web],
NumUsrs, NumUsrs,
NumUsrsTotalInPlatform ? 100.0 * (float) NumUsrs / (float) NumUsrsTotalInPlatform : NumUsrsTotalInPlatform ? 100.0 * (float) NumUsrs / (float) NumUsrsTotalInPlatform :
0.0); 0.0);

View File

@ -215,7 +215,8 @@ static void Prf_GetUsrDatAndShowUserProfile (void)
bool Prf_ShowUserProfile (void) bool Prf_ShowUserProfile (void)
{ {
/***** Check if I can see the public profile *****/ /***** Check if I can see the public profile *****/
if (Pri_ShowIsAllowed (Gbl.Usrs.Other.UsrDat.ProfileVisibility,Gbl.Usrs.Other.UsrDat.UsrCod)) if (Pri_ShowIsAllowed (Gbl.Usrs.Other.UsrDat.ProfileVisibility,
Gbl.Usrs.Other.UsrDat.UsrCod))
{ {
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
{ {
@ -275,7 +276,7 @@ void Prf_ChangeProfileVisibility (void)
static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat) static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
{ {
extern const char *The_ClassFormBold[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_teachers_ABBREVIATION; extern const char *Txt_teachers_ABBREVIATION;
extern const char *Txt_students_ABBREVIATION; extern const char *Txt_students_ABBREVIATION;
@ -304,61 +305,54 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
struct UsrFigures UsrFigures; struct UsrFigures UsrFigures;
unsigned NumCrssUsrIsTeacher; unsigned NumCrssUsrIsTeacher;
unsigned NumCrssUsrIsStudent; unsigned NumCrssUsrIsStudent;
unsigned NumStds;
unsigned NumTchs;
unsigned NumFiles; unsigned NumFiles;
unsigned NumPublicFiles; unsigned NumPublicFiles;
// char StrTimeGenerationInMicroseconds[64];
/***** Start table *****/ /***** Start left list *****/
fprintf (Gbl.F.Out,"<div id=\"prf_fig_container\">" fprintf (Gbl.F.Out,"<div id=\"prf_fig_left_container\">"
"<ul id=\"prf_fig_list\" class=\"DAT\">"); "<ul class=\"PRF_FIG_LIST DAT\">");
/***** Number of courses in which the user is teacher or student *****/ /***** Number of courses in which the user is teacher *****/
if ((NumCrssUsrIsTeacher = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TEACHER))) NumCrssUsrIsTeacher = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_TEACHER);
{ fprintf (Gbl.F.Out,"<li>"
NumTchs = Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TEACHER,Rol_TEACHER); "<img src=\"%s/tch64x64.gif\""
NumStds = Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TEACHER,Rol_STUDENT); " alt=\"%s\" title=\"%s\""
fprintf (Gbl.F.Out,"<li>" " class=\"PRF_ICON\" />"
"<img src=\"%s/tch64x64.gif\"" "%u&nbsp;%s&nbsp;",
" alt=\"%s\" title=\"%s\"" Gbl.Prefs.IconsURL,
" class=\"PRF_ICON\" />" Txt_ROLES_SINGUL_Abc[Rol_TEACHER][UsrDat->Sex],
"</td>" Txt_ROLES_SINGUL_Abc[Rol_TEACHER][UsrDat->Sex],
"<td class=\"PRF_FIG DAT\">" NumCrssUsrIsTeacher,
"%u&nbsp;%s&nbsp;(%u&nbsp;%s&nbsp;+&nbsp;%u&nbsp;%s)" (NumCrssUsrIsTeacher == 1) ? Txt_course :
"</li>", Txt_courses);
Gbl.Prefs.IconsURL, if (NumCrssUsrIsTeacher)
Txt_ROLES_SINGUL_Abc[Rol_TEACHER][UsrDat->Sex], fprintf (Gbl.F.Out,"(%u&nbsp;%s&nbsp;+&nbsp;%u&nbsp;%s)",
Txt_ROLES_SINGUL_Abc[Rol_TEACHER][UsrDat->Sex], Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TEACHER,Rol_TEACHER),
NumCrssUsrIsTeacher,
(NumCrssUsrIsTeacher == 1) ? Txt_course :
Txt_courses,
NumTchs,
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
NumStds, Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_TEACHER,Rol_STUDENT),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
} fprintf (Gbl.F.Out,"</li>");
if ((NumCrssUsrIsStudent = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STUDENT)))
{ /***** Number of courses in which the user is student *****/
NumTchs = Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STUDENT,Rol_TEACHER); NumCrssUsrIsStudent = Usr_GetNumCrssOfUsrWithARole (UsrDat->UsrCod,Rol_STUDENT);
NumStds = Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STUDENT,Rol_STUDENT); fprintf (Gbl.F.Out,"<li>"
fprintf (Gbl.F.Out,"<li>" "<img src=\"%s/std64x64.gif\""
"<img src=\"%s/std64x64.gif\"" " alt=\"%s\" title=\"%s\""
" alt=\"%s\" title=\"%s\"" " class=\"PRF_ICON\" />"
" class=\"PRF_ICON\" />" "%u&nbsp;%s&nbsp;",
"%u&nbsp;%s&nbsp;(%u&nbsp;%s&nbsp;+&nbsp;%u&nbsp;%s)" Gbl.Prefs.IconsURL,
"</li>", Txt_ROLES_SINGUL_Abc[Rol_STUDENT][UsrDat->Sex],
Gbl.Prefs.IconsURL, Txt_ROLES_SINGUL_Abc[Rol_STUDENT][UsrDat->Sex],
Txt_ROLES_SINGUL_Abc[Rol_STUDENT][UsrDat->Sex], NumCrssUsrIsStudent,
Txt_ROLES_SINGUL_Abc[Rol_STUDENT][UsrDat->Sex], (NumCrssUsrIsStudent == 1) ? Txt_course :
NumCrssUsrIsStudent, Txt_courses);
(NumCrssUsrIsStudent == 1) ? Txt_course : if (NumCrssUsrIsStudent)
Txt_courses, fprintf (Gbl.F.Out,"(%u&nbsp;%s&nbsp;+&nbsp;%u&nbsp;%s)",
NumTchs, Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STUDENT,Rol_TEACHER),
Txt_teachers_ABBREVIATION, Txt_teachers_ABBREVIATION,
NumStds, Usr_GetNumUsrsInCrssOfAUsr (UsrDat->UsrCod,Rol_STUDENT,Rol_STUDENT),
Txt_students_ABBREVIATION); Txt_students_ABBREVIATION);
} fprintf (Gbl.F.Out,"</li>");
/***** Number of files currently published *****/ /***** Number of files currently published *****/
if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod))) if ((NumFiles = Brw_GetNumFilesUsr (UsrDat->UsrCod)))
@ -392,14 +386,14 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
Txt_From_TIME); Txt_From_TIME);
if (UsrFigures.FirstClickTimeUTC) if (UsrFigures.FirstClickTimeUTC)
{ {
fprintf (Gbl.F.Out,"<span id=\"first_click_time\"></span>"); fprintf (Gbl.F.Out,"<span id=\"first_click_date\"></span>");
if (UsrFigures.NumDays > 0) if (UsrFigures.NumDays > 0)
fprintf (Gbl.F.Out,"&nbsp;(%d&nbsp;%s)", fprintf (Gbl.F.Out,"&nbsp;(%d&nbsp;%s)",
UsrFigures.NumDays, UsrFigures.NumDays,
(UsrFigures.NumDays == 1) ? Txt_day : (UsrFigures.NumDays == 1) ? Txt_day :
Txt_days); Txt_days);
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
"writeLocalDateTimeFromUTC('first_click_time',%ld,'&nbsp;');" "writeLocalDateFromUTC('first_click_date',%ld,'&nbsp;');"
"</script>", "</script>",
(long) UsrFigures.FirstClickTimeUTC); (long) UsrFigures.FirstClickTimeUTC);
} }
@ -408,12 +402,20 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
/***** Button to fetch and store first click time *****/ /***** Button to fetch and store first click time *****/
Act_FormStart (ActCal1stClkTim); Act_FormStart (ActCal1stClkTim);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassForm[Gbl.Prefs.Theme]);
Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate); Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate);
Act_FormEnd (); Act_FormEnd ();
} }
fprintf (Gbl.F.Out,"</li>"); fprintf (Gbl.F.Out,"</li>");
/***** End of right list *****/
fprintf (Gbl.F.Out,"</ul>"
"</div>");
/***** Start left list *****/
fprintf (Gbl.F.Out,"<div id=\"prf_fig_right_container\">"
"<ul class=\"PRF_FIG_LIST DAT\">");
UsrIsBannedFromRanking = Usr_CheckIfUsrBanned (UsrDat->UsrCod); UsrIsBannedFromRanking = Usr_CheckIfUsrBanned (UsrDat->UsrCod);
if (!UsrIsBannedFromRanking) if (!UsrIsBannedFromRanking)
{ {
@ -448,7 +450,7 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
/***** Button to fetch and store number of clicks *****/ /***** Button to fetch and store number of clicks *****/
Act_FormStart (ActCalNumClk); Act_FormStart (ActCalNumClk);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassForm[Gbl.Prefs.Theme]);
Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate); Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate);
Act_FormEnd (); Act_FormEnd ();
} }
@ -483,7 +485,7 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
/***** Button to fetch and store number of file views *****/ /***** Button to fetch and store number of file views *****/
Act_FormStart (ActCalNumFilVie); Act_FormStart (ActCalNumFilVie);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassForm[Gbl.Prefs.Theme]);
Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate); Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate);
Act_FormEnd (); Act_FormEnd ();
} }
@ -518,7 +520,7 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
/***** Button to fetch and store number of forum posts *****/ /***** Button to fetch and store number of forum posts *****/
Act_FormStart (ActCalNumForPst); Act_FormStart (ActCalNumForPst);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassForm[Gbl.Prefs.Theme]);
Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate); Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate);
Act_FormEnd (); Act_FormEnd ();
} }
@ -553,14 +555,14 @@ static void Prf_ShowDetailsUserProfile (const struct UsrData *UsrDat)
/***** Button to fetch and store number of messages sent *****/ /***** Button to fetch and store number of messages sent *****/
Act_FormStart (ActCalNumMsgSnt); Act_FormStart (ActCalNumMsgSnt);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassFormBold[Gbl.Prefs.Theme]); Act_LinkFormSubmitAnimated (Txt_Calculate,The_ClassForm[Gbl.Prefs.Theme]);
Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate); Lay_PutCalculateIconWithText (Txt_Calculate,Txt_Calculate);
Act_FormEnd (); Act_FormEnd ();
} }
fprintf (Gbl.F.Out,"</li>"); fprintf (Gbl.F.Out,"</li>");
} }
/***** End of table *****/ /***** End of right list *****/
fprintf (Gbl.F.Out,"</ul>" fprintf (Gbl.F.Out,"</ul>"
"</div>"); "</div>");
} }

View File

@ -2219,7 +2219,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_View_record_for_this_course,NULL); Act_LinkFormSubmit (Txt_View_record_for_this_course,NULL);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/card16x16.gif\"" "<img src=\"%s/card64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2245,7 +2245,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_Admin_user,NULL); Act_LinkFormSubmit (Txt_Admin_user,NULL);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/config16x16.gif\"" "<img src=\"%s/config64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2273,7 +2273,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_View_works,ClassData); Act_LinkFormSubmit (Txt_View_works,ClassData);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/folder16x16.gif\"" "<img src=\"%s/folder64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2295,7 +2295,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_See_exams,ClassData); Act_LinkFormSubmit (Txt_See_exams,ClassData);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/file16x16.gif\"" "<img src=\"%s/file64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2323,7 +2323,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_Attendance,ClassData); Act_LinkFormSubmit (Txt_Attendance,ClassData);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/rollcall16x16.gif\"" "<img src=\"%s/rollcall64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2366,7 +2366,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_Unfollow,ClassData); Act_LinkFormSubmit (Txt_Unfollow,ClassData);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/unfollow16x16.gif\"" "<img src=\"%s/unfollow64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"
@ -2383,7 +2383,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_LinkFormSubmit (Txt_Follow,ClassData); Act_LinkFormSubmit (Txt_Follow,ClassData);
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\"" fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\""
" style=\"display:inline;\" >" " style=\"display:inline;\" >"
"<img src=\"%s/follow16x16.gif\"" "<img src=\"%s/follow64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />" " class=\"ICON16x16\" />"
"</div>" "</div>"

View File

@ -320,7 +320,7 @@ static void Tst_PutFormToSeeResultsOfUsersTests (void)
Act_PutContextualLink (Gbl.Usrs.Me.LoggedRole == Rol_STUDENT ? ActReqSeeMyTstExa : Act_PutContextualLink (Gbl.Usrs.Me.LoggedRole == Rol_STUDENT ? ActReqSeeMyTstExa :
ActReqSeeUsrTstExa, ActReqSeeUsrTstExa,
NULL,"file16x16.gif",Txt_Results_tests); NULL,"file64x64.gif",Txt_Results_tests);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -6348,7 +6348,7 @@ static void Tst_ShowResultsOfTestExams (struct UsrData *UsrDat)
Act_FormStart (Gbl.CurrentAct == ActSeeMyTstExa ? ActSeeOneTstExaMe : Act_FormStart (Gbl.CurrentAct == ActSeeMyTstExa ? ActSeeOneTstExaMe :
ActSeeOneTstExaOth); ActSeeOneTstExaOth);
Tst_PutParamTstCod (TstCod); Tst_PutParamTstCod (TstCod);
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/file16x16.gif\"" fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/file64x64.gif\""
" alt=\"%s\" title=\"%s\"" " alt=\"%s\" title=\"%s\""
" class=\"ICON16x16B\" />", " class=\"ICON16x16B\" />",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,

View File

@ -269,7 +269,7 @@ void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res)
Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_FILE_BROWSER_TMP, Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_FILE_BROWSER_TMP,
Gbl.FileBrowser.TmpPubDir, Gbl.FileBrowser.TmpPubDir,
The_ClassFormBold[Gbl.Prefs.Theme]); The_ClassFormBold[Gbl.Prefs.Theme]);
Lay_PutIconWithText ("file16x16.gif", Lay_PutIconWithText ("file64x64.gif",
Txt_XML_file, Txt_XML_file,
Txt_XML_file); Txt_XML_file);
} }

View File

@ -36901,15 +36901,15 @@ const char *Txt_Student_comment =
const char *Txt_Students_ABBREVIATION = // Abbreviation of "Students" const char *Txt_Students_ABBREVIATION = // Abbreviation of "Students"
#if L==1 #if L==1
"Estud."; "Estu.";
#elif L==2 #elif L==2
"Stud."; "Stud.";
#elif L==3 #elif L==3
"Stud."; "Stud.";
#elif L==4 #elif L==4
"Estud."; "Estu.";
#elif L==5 #elif L==5
"&Eacute;tud."; "&Eacute;tu.";
#elif L==6 #elif L==6
"Temi."; "Temi.";
#elif L==7 #elif L==7
@ -36922,15 +36922,15 @@ const char *Txt_Students_ABBREVIATION = // Abbreviation of "Students"
const char *Txt_students_ABBREVIATION = // Abbreviation of "students" const char *Txt_students_ABBREVIATION = // Abbreviation of "students"
#if L==1 #if L==1
"estud."; "estu.";
#elif L==2 #elif L==2
"Stud."; "Stud.";
#elif L==3 #elif L==3
"stud."; "stud.";
#elif L==4 #elif L==4
"estud."; "estu.";
#elif L==5 #elif L==5
"&eacute;tud."; "&eacute;tu.";
#elif L==6 #elif L==6
"Temi."; "Temi.";
#elif L==7 #elif L==7
@ -38261,17 +38261,17 @@ const char *Txt_Teachers_ABBREVIATION = // Abbreviation of "Teachers"
#elif L==2 #elif L==2
"Lehr."; "Lehr.";
#elif L==3 #elif L==3
"Teach."; "Teac.";
#elif L==4 #elif L==4
"Prof."; "Prof.";
#elif L==5 #elif L==5
"Enseig."; "Ense.";
#elif L==6 #elif L==6
"Prof."; // Okoteve traducción "Prof."; // Okoteve traducción
#elif L==7 #elif L==7
"Prof."; "Prof.";
#elif L==8 #elif L==8
"Naucz."; "Nauc.";
#elif L==9 #elif L==9
"Prof."; "Prof.";
#endif #endif
@ -38282,17 +38282,17 @@ const char *Txt_teachers_ABBREVIATION = // Abbreviation of "Teachers"
#elif L==2 #elif L==2
"Lehr."; "Lehr.";
#elif L==3 #elif L==3
"teach."; "teac.";
#elif L==4 #elif L==4
"prof."; "prof.";
#elif L==5 #elif L==5
"enseig."; "ense.";
#elif L==6 #elif L==6
"prof."; // Okoteve traducción "prof."; // Okoteve traducción
#elif L==7 #elif L==7
"prof."; "prof.";
#elif L==8 #elif L==8
"naucz."; "nauc.";
#elif L==9 #elif L==9
"prof."; "prof.";
#endif #endif