mirror of https://github.com/acanas/swad-core.git
Version 15.33.1
This commit is contained in:
parent
fbba451a99
commit
7dba78b2d1
|
@ -57,9 +57,9 @@ extern struct Globals Gbl;
|
|||
/***************************** Internal prototypes ***************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Ann_ListAnnouncements (void);
|
||||
static void Ann_ShowAnnouncement (long AnnCod,const char *Subject,const char *Content,
|
||||
unsigned Roles,bool ShowAllAnnouncements);
|
||||
static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *Content,
|
||||
unsigned Roles,bool ShowAllAnnouncements,
|
||||
bool ICanEditAnnouncements);
|
||||
static void Ann_PutHiddenParamAnnCod (long AnnCod);
|
||||
static long Ann_GetParamAnnCod (void);
|
||||
static void Ann_CreateAnnouncement (unsigned Roles,const char *Subject,const char *Content);
|
||||
|
@ -71,25 +71,8 @@ static void Ann_CreateAnnouncement (unsigned Roles,const char *Subject,const cha
|
|||
void Ann_ShowAllAnnouncements (void)
|
||||
{
|
||||
extern const char *Txt_New_announcement;
|
||||
|
||||
/***** Put link (form) to create a new announcement *****/
|
||||
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
Act_PutContextualLink (ActWriAnn,NULL,"new",Txt_New_announcement);
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
|
||||
/***** List announcements *****/
|
||||
Ann_ListAnnouncements ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Show global announcements ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Ann_ListAnnouncements (void)
|
||||
{
|
||||
extern const char *Txt_All_announcements;
|
||||
extern const char *Txt_No_announcements;
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
@ -99,12 +82,27 @@ static void Ann_ListAnnouncements (void)
|
|||
unsigned Roles;
|
||||
char Subject[Cns_MAX_BYTES_SUBJECT+1];
|
||||
char Content[Cns_MAX_BYTES_TEXT+1];
|
||||
bool ICanEditAnnouncements = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
|
||||
|
||||
/***** Select announcements *****/
|
||||
/***** Put link (form) to create a new announcement *****/
|
||||
if (ICanEditAnnouncements)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">");
|
||||
Act_PutContextualLink (ActWriAnn,NULL,"new",Txt_New_announcement);
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
|
||||
/***** Get announcements from database *****/
|
||||
sprintf (Query,"SELECT AnnCod,Roles,Subject,Content FROM announcements"
|
||||
" ORDER BY AnnCod DESC");
|
||||
NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements");
|
||||
|
||||
if (NumAnnouncements)
|
||||
/***** Start frame *****/
|
||||
Lay_StartRoundFrame ("550px",Txt_All_announcements);
|
||||
else
|
||||
Lay_ShowAlert (Lay_INFO,Txt_No_announcements);
|
||||
|
||||
/***** Show the announcements *****/
|
||||
for (NumAnn = 0;
|
||||
NumAnn < NumAnnouncements;
|
||||
|
@ -130,8 +128,16 @@ static void Ann_ListAnnouncements (void)
|
|||
Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50);
|
||||
|
||||
/* Show the announcement */
|
||||
Ann_ShowAnnouncement (AnnCod,Subject,Content,Roles,true);
|
||||
Ann_DrawAnAnnouncement (AnnCod,Subject,Content,Roles,true,
|
||||
ICanEditAnnouncements);
|
||||
}
|
||||
|
||||
/***** End frame *****/
|
||||
if (NumAnnouncements)
|
||||
Lay_EndRoundFrame ();
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -184,7 +190,7 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
|
|||
Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50);
|
||||
|
||||
/* Show the announcement */
|
||||
Ann_ShowAnnouncement (AnnCod,Subject,Content,0,false);
|
||||
Ann_DrawAnAnnouncement (AnnCod,Subject,Content,0,false,false);
|
||||
}
|
||||
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
|
@ -195,8 +201,9 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
|
|||
/****************** Draw an announcement as a yellow note ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Ann_ShowAnnouncement (long AnnCod,const char *Subject,const char *Content,
|
||||
unsigned Roles,bool ShowAllAnnouncements)
|
||||
static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *Content,
|
||||
unsigned Roles,bool ShowAllAnnouncements,
|
||||
bool ICanEditAnnouncements)
|
||||
{
|
||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||
extern const char *Txt_Users;
|
||||
|
@ -210,6 +217,23 @@ static void Ann_ShowAnnouncement (long AnnCod,const char *Subject,const char *Co
|
|||
fprintf (Gbl.F.Out,"<div class=\"NOTICE_CONTAINER_ACTIVE\""
|
||||
" style=\"width:500px;\">");
|
||||
|
||||
if (ICanEditAnnouncements)
|
||||
{
|
||||
/* Form to remove announcement */
|
||||
Act_FormStart (ActRemAnn);
|
||||
Ann_PutHiddenParamAnnCod (AnnCod);
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_OPT ICON_HIGHLIGHT\">"
|
||||
"<input type=\"image\""
|
||||
" src=\"%s/delon16x16.gif\""
|
||||
" alt=\"%s\" title=\"%s\""
|
||||
" class=\"ICON16x16\" />"
|
||||
"</div>",
|
||||
Gbl.Prefs.IconsURL,
|
||||
Txt_Remove,
|
||||
Txt_Remove);
|
||||
Act_FormEnd ();
|
||||
}
|
||||
|
||||
/***** Write the content of the announcement *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"NOTICE_SUBJECT_ACTIVE\">%s</div>",
|
||||
Subject);
|
||||
|
@ -238,20 +262,6 @@ static void Ann_ShowAnnouncement (long AnnCod,const char *Subject,const char *Co
|
|||
fprintf (Gbl.F.Out," %s",Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN]);
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</p>");
|
||||
|
||||
/* Form to remove announcement */
|
||||
Act_FormStart (ActRemAnn);
|
||||
Ann_PutHiddenParamAnnCod (AnnCod);
|
||||
Act_LinkFormSubmit (Txt_Remove,The_ClassForm[Gbl.Prefs.Theme]);
|
||||
fprintf (Gbl.F.Out,"<img src=\"%s/delon16x16.gif\""
|
||||
" alt=\"%s\" title=\"%s\""
|
||||
" class=\"ICON16x16\" />"
|
||||
" %s</a>",
|
||||
Gbl.Prefs.IconsURL,
|
||||
Txt_Remove,
|
||||
Txt_Remove,
|
||||
Txt_Remove);
|
||||
Act_FormEnd ();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -109,11 +109,12 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.33 (2015/11/01)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.33.1 (2015/11/01)"
|
||||
|
||||
// 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.33.1: Nov 01, 2015 New layout of announcements. (186755 lines)
|
||||
Version 15.33: Nov 01, 2015 New layout of notices. (186708 lines)
|
||||
Version 15.32.2: Oct 31, 2015 Fixed bug in form submit. (186618 lines)
|
||||
Version 15.32.1: Oct 31, 2015 Dates in holidays are shown in big-endian.
|
||||
|
|
|
@ -66,12 +66,12 @@ const unsigned Not_MaxCharsURLOnScreen[Not_NUM_TYPES_LISTING] =
|
|||
/*****************************************************************************/
|
||||
|
||||
static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
|
||||
bool ICanEditNotices,
|
||||
long NotCod,
|
||||
time_t TimeUTC,
|
||||
const char *Content,
|
||||
long UsrCod,
|
||||
Not_Status_t NoticeStatus);
|
||||
Not_Status_t NoticeStatus,
|
||||
bool ICanEditNotices);
|
||||
static long Not_InsertNoticeInDB (const char *Content);
|
||||
static void Not_UpdateNumUsrsNotifiedByEMailAboutNotice (long NotCod,unsigned NumUsrsToBeNotifiedByEMail);
|
||||
static void Not_PutHiddenParamNotCod (long NotCod);
|
||||
|
@ -284,9 +284,9 @@ void Not_ShowANotice (void)
|
|||
|
||||
void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
||||
{
|
||||
extern const char *Txt_No_notices;
|
||||
extern const char *Txt_New_notice;
|
||||
extern const char *Txt_All_notices;
|
||||
extern const char *Txt_No_notices;
|
||||
char Query[512];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
@ -305,12 +305,9 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
|||
/***** A course must be selected (Gbl.CurrentCrs.Crs.CrsCod > 0) *****/
|
||||
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
|
||||
{
|
||||
ICanEditNotices = (
|
||||
TypeNoticesListing == Not_LIST_FULL_NOTICES &&
|
||||
ICanEditNotices = (TypeNoticesListing == Not_LIST_FULL_NOTICES &&
|
||||
(Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
|
||||
);
|
||||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM));
|
||||
|
||||
if (ICanEditNotices)
|
||||
{
|
||||
|
@ -352,9 +349,10 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
|||
NoticeStatus = (Not_Status_t) UnsignedNum;
|
||||
|
||||
/* Draw the notice */
|
||||
Not_DrawANotice (TypeNoticesListing,ICanEditNotices,
|
||||
Not_DrawANotice (TypeNoticesListing,
|
||||
Gbl.CurrentCrs.Notices.HighlightNotCod,
|
||||
TimeUTC,Content,UsrCod,NoticeStatus);
|
||||
TimeUTC,Content,UsrCod,NoticeStatus,
|
||||
ICanEditNotices);
|
||||
}
|
||||
|
||||
/* Free structure that stores the query result */
|
||||
|
@ -386,11 +384,10 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
|||
{
|
||||
if (NumNotices)
|
||||
{
|
||||
/***** Start frame *****/
|
||||
sprintf (StrWidth,"%upx",
|
||||
Not_ContainerWidth[Not_LIST_FULL_NOTICES] + 50);
|
||||
Lay_StartRoundFrameTable (StrWidth,2,Txt_All_notices);
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"CENTER_TOP\">");
|
||||
Lay_StartRoundFrame (StrWidth,Txt_All_notices);
|
||||
}
|
||||
else
|
||||
Lay_ShowAlert (Lay_INFO,Txt_No_notices);
|
||||
|
@ -449,17 +446,15 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
|||
NoticeStatus = (Not_Status_t) UnsignedNum;
|
||||
|
||||
/* Draw the notice */
|
||||
Not_DrawANotice (TypeNoticesListing,ICanEditNotices,
|
||||
Not_DrawANotice (TypeNoticesListing,
|
||||
NotCod,
|
||||
TimeUTC,Content,UsrCod,NoticeStatus);
|
||||
TimeUTC,Content,UsrCod,NoticeStatus,
|
||||
ICanEditNotices);
|
||||
}
|
||||
|
||||
if (TypeNoticesListing == Not_LIST_FULL_NOTICES && NumNotices)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
Lay_EndRoundFrameTable ();
|
||||
}
|
||||
/***** End frame *****/
|
||||
Lay_EndRoundFrame ();
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
@ -476,12 +471,12 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
|
|||
/*****************************************************************************/
|
||||
|
||||
static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
|
||||
bool ICanEditNotices,
|
||||
long NotCod,
|
||||
time_t TimeUTC,
|
||||
const char *Content,
|
||||
long UsrCod,
|
||||
Not_Status_t NoticeStatus)
|
||||
Not_Status_t NoticeStatus,
|
||||
bool ICanEditNotices)
|
||||
{
|
||||
extern const char *The_ClassForm[The_NUM_THEMES];
|
||||
extern const char *Txt_NOTICE_Active_SINGULAR;
|
||||
|
@ -524,7 +519,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
|
|||
{
|
||||
if (ICanEditNotices)
|
||||
{
|
||||
/* Form to delete notice */
|
||||
/* Form to remove notice */
|
||||
Act_FormStart (ActRemNot);
|
||||
Not_PutHiddenParamNotCod (NotCod);
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_OPT ICON_HIGHLIGHT\">"
|
||||
|
|
42
swad_text.c
42
swad_text.c
|
@ -2002,6 +2002,27 @@ const char *Txt_All =
|
|||
"Tudo";
|
||||
#endif
|
||||
|
||||
const char *Txt_All_announcements =
|
||||
#if L==0
|
||||
"Tots els anuncis";
|
||||
#elif L==1
|
||||
"Alle Bekanntmachungen";
|
||||
#elif L==2
|
||||
"All announcements";
|
||||
#elif L==3
|
||||
"Todos los anuncios";
|
||||
#elif L==4
|
||||
"Tous les annonces";
|
||||
#elif L==5
|
||||
"Todos los anuncios"; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Tutti i annunci";
|
||||
#elif L==7
|
||||
"Wszystkie ogłoszenia";
|
||||
#elif L==8
|
||||
"Todos os anúncios";
|
||||
#endif
|
||||
|
||||
const char *Txt_all_degrees =
|
||||
#if L==0
|
||||
"Totes les titulacions";
|
||||
|
@ -22925,6 +22946,27 @@ const char *Txt_No =
|
|||
"Não";
|
||||
#endif
|
||||
|
||||
const char *Txt_No_announcements =
|
||||
#if L==0
|
||||
"No hay anuncis";
|
||||
#elif L==1
|
||||
"Keine Bekanntmachungen";
|
||||
#elif L==2
|
||||
"No announcements";
|
||||
#elif L==3
|
||||
"No hay anuncios";
|
||||
#elif L==4
|
||||
"Il n'y a pas d'annonces";
|
||||
#elif L==5
|
||||
"No hay anuncios"; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Non ci sono annunci";
|
||||
#elif L==7
|
||||
"Brak ogłoszenia";
|
||||
#elif L==8
|
||||
"Não há anúncios";
|
||||
#endif
|
||||
|
||||
const char *Txt_No_announcements_of_exams_of_X = // Warning: it is very important to include %s in the following sentences
|
||||
#if L==0
|
||||
"No hay convocatorias de examen de <strong>%s</strong>."; // Necessita traduccio
|
||||
|
|
Loading…
Reference in New Issue