Version 15.34.1

This commit is contained in:
Antonio Cañas Vargas 2015-11-01 21:19:33 +01:00
parent 58277e9168
commit 7609708949
12 changed files with 120 additions and 76 deletions

View File

@ -359,8 +359,16 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;}
text-align:center;
overflow:hidden;
}
.NOTICE_TEXT_BRIEF
{
clear:both;
font-size:12pt;
color:#204080;
overflow:hidden;
}
.NOTICE_TEXT_ACTIVE
{
padding:10px 20px;
clear:both;
font-size:12pt;
color:#204080;
@ -368,6 +376,7 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;}
}
.NOTICE_TEXT_OBSOLETE
{
padding:10px 20px;
clear:both;
font-size:12pt;
color:#4070A0;

View File

@ -313,6 +313,7 @@ form {margin:0; display:inline;}
}
.NOTICE_TEXT_ACTIVE
{
padding:10px 20px;
clear:both;
font-size:12pt;
color:#204080;
@ -320,6 +321,7 @@ form {margin:0; display:inline;}
}
.NOTICE_TEXT_OBSOLETE
{
padding:10px 20px;
clear:both;
font-size:12pt;
color:#4070A0;

View File

@ -2440,7 +2440,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// TabMsg ******************************************************************
// Actions in menu:
/* ActSeeNtf */{ 990, 0,TabMsg,ActSeeNtf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ntf_ShowMyNotifications ,"bell" },
/* ActSeeAnn */{1235, 1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowAllAnnouncements ,"note" },
/* ActSeeAnn */{1235, 1,TabMsg,ActSeeAnn ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowAllAnnouncements ,"note" },
/* ActSeeNot */{ 762, 2,TabMsg,ActSeeNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ListNotices ,"note" },
/* ActSeeFor */{ 95, 3,TabMsg,ActSeeFor ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,For_ShowForumList ,"forum" },
/* ActSeeChtRms */{ 51, 4,TabMsg,ActSeeChtRms ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Cht_ShowChatRooms ,"chat" },

View File

@ -73,7 +73,7 @@ static void Ann_CreateAnnouncement (unsigned Roles,const char *Subject,const cha
void Ann_ShowAllAnnouncements (void)
{
extern const char *Txt_New_announcement;
extern const char *Txt_All_announcements;
extern const char *Txt_Announcements;
extern const char *Txt_No_announcements;
char Query[256];
MYSQL_RES *mysql_res;
@ -97,14 +97,32 @@ void Ann_ShowAllAnnouncements (void)
}
/***** Get announcements from database *****/
sprintf (Query,"SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements"
" ORDER BY AnnCod DESC");
if (ICanEditAnnouncements)
/* Select all announcements */
sprintf (Query,"SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements"
" ORDER BY AnnCod DESC");
else if (Gbl.Usrs.Me.Logged)
/* Select only active announcements I can see */
sprintf (Query,"SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements"
" WHERE Status='%u' AND (Roles&%u)<>0 "
" ORDER BY AnnCod DESC",
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
Gbl.Usrs.Me.UsrDat.Roles); // All my roles in different courses
else // No user logged
/* Select only active announcements for unknown users */
sprintf (Query,"SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements"
" WHERE Status='%u' AND (Roles&%u)<>0 "
" ORDER BY AnnCod DESC",
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
(unsigned) (1 << Rol_UNKNOWN));
NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements");
if (NumAnnouncements)
/***** Start frame *****/
Lay_StartRoundFrame ("550px",Txt_All_announcements);
Lay_StartRoundFrame ("550px",Txt_Announcements);
else
Lay_ShowAlert (Lay_INFO,Txt_No_announcements);
@ -170,7 +188,7 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
/***** Select announcements not seen *****/
// Roles == 24 ==> Teachers and students
sprintf (Query,"SELECT AnnCod,Subject,Content FROM announcements"
" WHERE (Roles&%u)<>0 AND Status='%u'"
" WHERE Status='%u' AND (Roles&%u)<>0 "
" AND AnnCod NOT IN"
" (SELECT AnnCod FROM ann_seen WHERE UsrCod='%ld')"
" ORDER BY AnnCod DESC", // Newest first
@ -249,7 +267,7 @@ static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status,
"NOTICE_AUTHOR_OBSOLETE", // Ann_OBSOLETE_ANNOUNCEMENT
};
Rol_Role_t Role;
bool RolesSelected;
bool SomeRolesAreSelected;
/***** Start yellow note *****/
fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"width:500px;\">",
@ -320,15 +338,14 @@ static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status,
/* Users' roles who can view this announcement */
fprintf (Gbl.F.Out,"<p class=\"%s\">%s:",
UsersClass[Status],Txt_Users);
for (Role = Rol_STUDENT, RolesSelected = false;
for (Role = Rol_UNKNOWN, SomeRolesAreSelected = false;
Role <= Rol_TEACHER;
Role++)
if (Roles & (1 << Role))
{
if (RolesSelected)
if (SomeRolesAreSelected)
fprintf (Gbl.F.Out,",");
else
RolesSelected = true;
SomeRolesAreSelected = true;
fprintf (Gbl.F.Out," %s",Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN]);
}
fprintf (Gbl.F.Out,"</p>");
@ -433,7 +450,13 @@ void Ann_ShowFormAnnouncement (void)
"<td class=\"DAT LEFT_TOP\">",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Users);
Rol_WriteSelectorRoles (1 << Rol_STUDENT |
Rol_WriteSelectorRoles (1 << Rol_UNKNOWN |
1 << Rol__GUEST_ |
1 << Rol_STUDENT |
1 << Rol_TEACHER,
1 << Rol_UNKNOWN |
1 << Rol__GUEST_ |
1 << Rol_STUDENT |
1 << Rol_TEACHER);
fprintf (Gbl.F.Out,"</td>"
"</tr>");

View File

@ -109,11 +109,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.34 (2015/11/01)"
#define Log_PLATFORM_VERSION "SWAD 15.34.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.34.1: Nov 01, 2015 Global announcements can be seen by all. (186939 lines)
Version 15.34: Nov 01, 2015 Global announcements can be hidden. (186896 lines)
3 changes necessary in database:
ALTER TABLE announcements ADD COLUMN Status TINYINT NOT NULL DEFAULT 0 AFTER AnnCod,ADD INDEX (Status);

View File

@ -2142,7 +2142,7 @@ void Enr_ShowEnrollmentRequests (void)
extern const char *Txt_Register;
extern const char *Txt_Reject;
extern const char *Txt_No_enrollment_requests;
unsigned Roles;
unsigned RolesSelected;
char Query[1024];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -2194,25 +2194,28 @@ void Enr_ShowEnrollmentRequests (void)
"<td class=\"DAT LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Users);
Rol_GetSelectedRoles (&Roles);
if (!Roles)
Rol_GetSelectedRoles (&RolesSelected);
if (!RolesSelected)
/* Set default roles */
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_TEACHER:
Roles = (1 << Rol_STUDENT) | (1 << Rol_TEACHER);
RolesSelected = (1 << Rol_STUDENT) |
(1 << Rol_TEACHER);
break;
case Rol_DEG_ADM:
case Rol_CTR_ADM:
case Rol_INS_ADM:
case Rol_SYS_ADM:
Roles = (1 << Rol_TEACHER);
RolesSelected = (1 << Rol_TEACHER);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
break;
}
Rol_WriteSelectorRoles (Roles);
Rol_WriteSelectorRoles (1 << Rol_STUDENT |
1 << Rol_TEACHER,
RolesSelected);
fprintf (Gbl.F.Out,"</td>"
"</tr>"
"</table>");
@ -2242,7 +2245,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Roles);
RolesSelected);
break;
case Rol_DEG_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2257,7 +2260,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Roles);
RolesSelected);
break;
case Rol_CTR_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2273,7 +2276,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Roles);
RolesSelected);
break;
case Rol_INS_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2290,7 +2293,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Roles);
RolesSelected);
break;
case Rol_SYS_ADM:
sprintf (Query,"SELECT ReqCod,"
@ -2301,7 +2304,7 @@ void Enr_ShowEnrollmentRequests (void)
" FROM crs_usr_requests"
" WHERE ((1<<Role)&%u)<>0"
" ORDER BY RequestTime DESC",
Roles);
RolesSelected);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2328,7 +2331,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentIns.Ins.InsCod,
Roles);
RolesSelected);
break;
case Rol_DEG_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2347,7 +2350,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentIns.Ins.InsCod,
Roles);
RolesSelected);
break;
case Rol_CTR_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2366,7 +2369,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentIns.Ins.InsCod,
Roles);
RolesSelected);
break;
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this institution
case Rol_SYS_ADM:
@ -2383,7 +2386,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentIns.Ins.InsCod,
Roles);
RolesSelected);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2409,7 +2412,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Roles);
RolesSelected);
break;
case Rol_DEG_ADM:
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
@ -2427,7 +2430,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Roles);
RolesSelected);
break;
case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this centre
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this centre
@ -2444,7 +2447,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentCtr.Ctr.CtrCod,
Roles);
RolesSelected);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2469,7 +2472,7 @@ void Enr_ShowEnrollmentRequests (void)
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.CurrentDeg.Deg.DegCod,
Roles);
RolesSelected);
break;
case Rol_DEG_ADM: // If I am logged as admin of this degree , I can view all the requesters from this degree
case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this degree
@ -2486,7 +2489,7 @@ void Enr_ShowEnrollmentRequests (void)
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.CurrentDeg.Deg.DegCod,
Roles);
RolesSelected);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
@ -2507,7 +2510,8 @@ void Enr_ShowEnrollmentRequests (void)
" WHERE CrsCod='%ld'"
" AND ((1<<Role)&%u)<>0"
" ORDER BY RequestTime DESC",
Gbl.CurrentCrs.Crs.CrsCod,Roles);
Gbl.CurrentCrs.Crs.CrsCod,
RolesSelected);
break;
default:
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");

View File

@ -619,12 +619,13 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
UniqueId,(long) TimeUTC);
/***** Write the content of the notice *****/
fprintf (Gbl.F.Out,"<div class=\"%s\">%s",
TextClass[Status],Content);
if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES)
{
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
fprintf (Gbl.F.Out,"<div class=\"NOTICE_TEXT_BRIEF\">%s</div>",
Content);
/* Form to view full notice */
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
Act_FormStart (ActShoNot);
Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_See_full_notice,The_ClassForm[Gbl.Prefs.Theme]);
@ -638,7 +639,9 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
Act_FormEnd ();
fprintf (Gbl.F.Out,"</div>");
}
fprintf (Gbl.F.Out,"</div>");
else
fprintf (Gbl.F.Out,"<div class=\"%s\">%s</div>",
TextClass[Status],Content);
/***** Write the author *****/
fprintf (Gbl.F.Out,"<div class=\"%s\">",

View File

@ -348,22 +348,24 @@ void Rol_ChangeMyRole (void)
/********************* Write selector of users' roles ************************/
/*****************************************************************************/
void Rol_WriteSelectorRoles (unsigned Roles)
void Rol_WriteSelectorRoles (unsigned RolesAllowed,
unsigned RolesSelected)
{
extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
Rol_Role_t Role;
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
for (Role = Rol_UNKNOWN;
Role <= Rol_SYS_ADM;
Role++)
{
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"Roles\" value=\"%u\"",
(unsigned) Role);
if ((Roles & (1 << Role)))
fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," />%s<br />",
Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN]);
}
if ((RolesAllowed & (1 << Role)))
{
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"Roles\" value=\"%u\"",
(unsigned) Role);
if ((RolesSelected & (1 << Role)))
fprintf (Gbl.F.Out," checked=\"checked\"");
fprintf (Gbl.F.Out," />%s<br />",
Txt_ROLES_PLURAL_abc[Role][Usr_SEX_UNKNOWN]);
}
}
/*****************************************************************************/

View File

@ -78,7 +78,8 @@ unsigned Rol_ConvertUnsignedStrToRoles (const char *UnsignedStr);
void Rol_PutFormToChangeMyRole (bool FormInHead);
void Rol_ChangeMyRole (void);
void Rol_WriteSelectorRoles (unsigned Roles);
void Rol_WriteSelectorRoles (unsigned RolesAllowed,
unsigned RolesSelected);
void Rol_GetSelectedRoles (unsigned *Roles);
Rol_Role_t Rol_GetRequestedRole (long UsrCod);

View File

@ -1572,7 +1572,9 @@ void Svy_RequestCreatOrEditSvy (void)
"<td class=\"DAT LEFT_MIDDLE\">",
The_ClassForm[Gbl.Prefs.Theme],
Txt_Users);
Rol_WriteSelectorRoles (Svy.Roles);
Rol_WriteSelectorRoles (1 << Rol_STUDENT |
1 << Rol_TEACHER,
Svy.Roles);
fprintf (Gbl.F.Out,"</td>"
"</tr>");

View File

@ -294,9 +294,6 @@ static bool Tab_CheckIfICanViewTab (Act_Tab_t Tab)
Gbl.CurrentCrs.Crs.CrsCod <= 0);
case TabCrs:
return (Gbl.CurrentCrs.Crs.CrsCod > 0);
case TabMsg: // TODO: Show this tab in any case when Announcements will be available for all
return (Gbl.Usrs.Me.Logged ||
Gbl.CurrentCrs.Crs.CrsCod > 0);
default:
return true;
}

View File

@ -2002,27 +2002,6 @@ 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&lstrok;oszenia";
#elif L==8
"Todos os an&uacute;ncios";
#endif
const char *Txt_all_degrees =
#if L==0
"Totes les titulacions";
@ -2338,6 +2317,27 @@ const char *Txt_and_X_other_recipients = // Warning: it is very important to inc
"...e %u outros destinat&aacute;rios";
#endif
const char *Txt_Announcements =
#if L==0
"Anuncis";
#elif L==1
"Bekanntmachungen";
#elif L==2
"Announcements";
#elif L==3
"Anuncios";
#elif L==4
"Annonces";
#elif L==5
"Anuncios"; // Okoteve traducción
#elif L==6
"Annunci";
#elif L==7
"Og&lstrok;oszenia";
#elif L==8
"An&uacute;ncios";
#endif
const char *Txt_Announcement_of_exam_removed =
#if L==0
"Convocatoria d'examen eliminada.";