Version 15.59.1

This commit is contained in:
Antonio Cañas Vargas 2015-12-06 01:57:08 +01:00
parent 05e930cf29
commit 022d56e66d
10 changed files with 28 additions and 324 deletions

View File

@ -373,13 +373,6 @@ CREATE TABLE IF NOT EXISTS debug (
Txt TEXT NOT NULL,
INDEX(DebugTime));
--
-- Table deg_admin: stores administrators of degrees
--
CREATE TABLE IF NOT EXISTS deg_admin (
UsrCod INT NOT NULL,
DegCod INT NOT NULL,
UNIQUE INDEX(UsrCod,DegCod));
--
-- Table deg_types: stores the types of degree
--
CREATE TABLE IF NOT EXISTS deg_types (
@ -400,7 +393,6 @@ CREATE TABLE IF NOT EXISTS degrees (
FullName VARCHAR(127) NOT NULL,
FirstYear TINYINT NOT NULL DEFAULT 0,
LastYear TINYINT NOT NULL DEFAULT 0,
OptYear ENUM('N','Y') NOT NULL DEFAULT 'N',
WWW VARCHAR(255) NOT NULL,
UNIQUE INDEX(DegCod),
INDEX(CtrCod),

View File

@ -75,7 +75,7 @@ extern struct Globals Gbl;
/************************ Internal global variables **************************/
/*****************************************************************************/
/*
1123 actions in one CGI:
1122 actions in one CGI:
0. ActAll Any action (used for statistics)
1. ActUnk Unknown action
2. ActHom Show home menu
@ -294,7 +294,6 @@ Centre:
184. ActChgDegCtr Request change of the centre of a degree
185. ActChgDegFstYea Request change of the first year of a degree
186. ActChgDegLstYea Request change of the last year of a degree
REMOVE ---> 187. ActChgDegOptYea Request change of the year of optativas of a degree
188. ActChgDegWWW Request change of the web of a degree
189. ActChgDegSta Request change of status of a degree
@ -1698,7 +1697,6 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActChgDegCtr */{1049,-1,TabCtr,ActSeeDeg ,0x1C0,0x1C0,0x1C0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegreeCtr ,NULL},
/* ActChgDegFstYea */{ 550,-1,TabCtr,ActSeeDeg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegFirstYear ,NULL},
/* ActChgDegLstYea */{ 551,-1,TabCtr,ActSeeDeg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegLastYear ,NULL},
/* ActChgDegOptYea *//*{ 552,-1,TabCtr,ActSeeDeg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegOptYear ,NULL},*/
/* ActChgDegWWW */{ 554,-1,TabCtr,ActSeeDeg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegWWW ,NULL},
/* ActChgDegSta */{1207,-1,TabCtr,ActSeeDeg ,0x1C0,0x1C0,0x1C0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Deg_ChangeDegStatus ,NULL},
@ -3351,7 +3349,6 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
-1, // #549 (obsolete action)
ActChgDegFstYea, // #550
ActChgDegLstYea, // #551
// ActChgDegOptYea, // #552
-1, // #552
ActRecDegLog, // #553
ActChgDegWWW, // #554

View File

@ -101,7 +101,6 @@
// TODO: A teacher should may confirm a student ID? In what conditions? (Necessary in order to a student can view his/her marks)
// TODO: Put headers Content-type and Content-disposition when redirecting with Location:
// TODO: When a new assignment/attendance/survey is incorrect, the second time the form is shown, it should be filled with partial data, now is always empty
// TODO: Remove columns "first year, last year, optional, status" when listing degrees?
// TODO: Show message indicating that mail could be in SPAM folder?
// TODO: Do not show e-mails of administrators and teachers in lists openly
// TODO: Show nicknames of users in lists?
@ -113,12 +112,16 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.59 (2015/12/06)"
#define Log_PLATFORM_VERSION "SWAD 15.59.1 (2015/12/06)"
#define CSS_FILE "swad15.57.css"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
Version 15.59.1: Dec 06, 2015 Removed unused code related to year for optional courses. (186405 lines)
1 change necessary in database:
ALTER TABLE degrees DROP COLUMN OptYear;
Version 15.59: Dec 06, 2015 Year for optional courses is now always present. (186692 lines)
1 change necessary in database:
UPDATE actions SET Obsolete='Y' WHERE ActCod='552';

View File

@ -830,37 +830,21 @@ mysql> DESCRIBE deg_types;
/***** Table degrees *****/
/*
mysql> DESCRIBE degrees;
+-----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+----------------+
| DegCod | int(11) | NO | PRI | NULL | auto_increment |
| CtrCod | int(11) | NO | MUL | NULL | |
| DegTypCod | int(11) | NO | MUL | NULL | |
| Status | tinyint(4) | NO | MUL | 0 | |
| RequesterUsrCod | int(11) | NO | | -1 | |
| ShortName | varchar(32) | NO | | NULL | |
| FullName | varchar(127) | NO | | NULL | |
| FirstYear | tinyint(4) | NO | | 0 | |
| LastYear | tinyint(4) | NO | | 0 | |
| OptYear | enum('N','Y') | NO | | N | |
| WWW | varchar(255) | NO | | NULL | |
+-----------------+---------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)
*/
/*
DB_CreateTable ("CREATE TABLE IF NOT EXISTS degrees ("
"DegCod INT NOT NULL AUTO_INCREMENT,"
"CtrCod INT NOT NULL,"
"DegTypCod INT NOT NULL,"
"Status TINYINT NOT NULL DEFAULT 0,"
"RequesterUsrCod INT NOT NULL DEFAULT -1,"
"ShortName VARCHAR(32) NOT NULL,"
"FullName VARCHAR(127) NOT NULL,"
"FirstYear TINYINT NOT NULL DEFAULT 0,"
"LastYear TINYINT NOT NULL DEFAULT 0,"
"OptYear ENUM('N','Y') NOT NULL DEFAULT 'N',"
"WWW VARCHAR(255) NOT NULL,"
"UNIQUE INDEX(DegCod),INDEX(CtrCod),INDEX(DegTypCod),INDEX(Status))");
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| DegCod | int(11) | NO | PRI | NULL | auto_increment |
| CtrCod | int(11) | NO | MUL | NULL | |
| DegTypCod | int(11) | NO | MUL | NULL | |
| Status | tinyint(4) | NO | MUL | 0 | |
| RequesterUsrCod | int(11) | NO | | -1 | |
| ShortName | varchar(32) | NO | | NULL | |
| FullName | varchar(127) | NO | | NULL | |
| FirstYear | tinyint(4) | NO | | 0 | |
| LastYear | tinyint(4) | NO | | 0 | |
| WWW | varchar(255) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS degrees ("
"DegCod INT NOT NULL AUTO_INCREMENT,"

View File

@ -1277,8 +1277,6 @@ static void Deg_ListOneDegreeForSeeing (struct Degree *Deg,unsigned NumDeg)
{
extern const char *Txt_DEGREE_With_courses;
extern const char *Txt_DEGREE_Without_courses;
// extern const char *Txt_DEGREE_With_year_for_optional_courses;
// extern const char *Txt_DEGREE_Without_year_for_optional_courses;
extern const char *Txt_DEGREE_STATUS[Deg_NUM_STATUS_TXT];
struct DegreeType DegTyp;
const char *TxtClassNormal;
@ -1351,23 +1349,6 @@ static void Deg_ListOneDegreeForSeeing (struct Degree *Deg,unsigned NumDeg)
"</td>",
TxtClassNormal,BgColor,Deg->LastYear);
/***** Degree optional year *****/
/*
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE %s\">"
"<img src=\"%s/%s16x16.gif\""
" alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />"
"</td>",
BgColor,
Gbl.Prefs.IconsURL,
Deg->OptYear ? "ok_on" :
"tr",
Deg->OptYear ? Txt_DEGREE_With_year_for_optional_courses :
Txt_DEGREE_Without_year_for_optional_courses,
Deg->OptYear ? Txt_DEGREE_With_year_for_optional_courses :
Txt_DEGREE_Without_year_for_optional_courses);
*/
/***** Current number of courses in this degree *****/
fprintf (Gbl.F.Out,"<td class=\"%s RIGHT_MIDDLE %s\">"
"%u"
@ -1394,8 +1375,6 @@ static void Deg_ListOneDegreeForSeeing (struct Degree *Deg,unsigned NumDeg)
static void Deg_ListDegreesForEdition (void)
{
extern const char *Txt_Degrees_of_CENTRE_X;
// extern const char *Txt_DEGREE_With_year_for_optional_courses;
// extern const char *Txt_DEGREE_Without_year_for_optional_courses;
extern const char *Txt_DEGREE_STATUS[Deg_NUM_STATUS_TXT];
unsigned NumDeg;
struct DegreeType *DegTyp;
@ -1591,36 +1570,6 @@ static void Deg_ListDegreesForEdition (void)
fprintf (Gbl.F.Out,"%u",Deg->LastYear);
fprintf (Gbl.F.Out,"</td>");
/* Degree optional year */
/*
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
if (ICanEdit)
{
Act_FormStart (ActChgDegOptYea);
Deg_PutParamOtherDegCod (Deg->DegCod);
fprintf (Gbl.F.Out,"<input type=\"checkbox\" name=\"OptYear\" value=\"Y\"%s"
" onchange=\"document.getElementById('%s').submit();\" />",
Deg->OptYear ? " checked=\"checked\"" :
"",
Gbl.FormId);
Act_FormEnd ();
fprintf (Gbl.F.Out,"</td>");
}
else
* Degree optional year *
fprintf (Gbl.F.Out,"<img src=\"%s/%s16x16.gif\""
" alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />",
Gbl.Prefs.IconsURL,
Deg->OptYear ? "ok_on" :
"tr",
Deg->OptYear ? Txt_DEGREE_With_year_for_optional_courses :
Txt_DEGREE_Without_year_for_optional_courses,
Deg->OptYear ? Txt_DEGREE_With_year_for_optional_courses :
Txt_DEGREE_Without_year_for_optional_courses);
fprintf (Gbl.F.Out,"</td>");
*/
/* Degree WWW */
fprintf (Gbl.F.Out,"<td class=\"DAT LEFT_MIDDLE\">");
if (ICanEdit)
@ -1638,7 +1587,8 @@ static void Deg_ListDegreesForEdition (void)
{
strncpy (WWW,Deg->WWW,Deg_MAX_LENGTH_WWW_ON_SCREEN);
WWW[Deg_MAX_LENGTH_WWW_ON_SCREEN] = '\0';
fprintf (Gbl.F.Out,"<a href=\"%s\" target=\"_blank\" class=\"DAT\" title=\"%s\">%s",
fprintf (Gbl.F.Out,"<a href=\"%s\" target=\"_blank\""
" class=\"DAT\" title=\"%s\">%s",
Deg->WWW,Deg->WWW,WWW);
if (strlen (Deg->WWW) > Deg_MAX_LENGTH_WWW_ON_SCREEN)
fprintf (Gbl.F.Out,"...");
@ -1923,14 +1873,6 @@ static void Deg_PutFormToCreateDegree (void)
fprintf (Gbl.F.Out,"</select>"
"</td>");
/***** Degree optional year *****/
/*
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">"
"<input type=\"checkbox\" name=\"OptYear\" value=\"Y\"%s /></td>",
Deg->OptYear ? " checked=\"checked\"" :
"");
*/
/***** Degree WWW *****/
fprintf (Gbl.F.Out,"<td class=\"LEFT_MIDDLE\">"
"<input type=\"text\" name=\"WWW\""
@ -2197,20 +2139,6 @@ static void Deg_CreateDegree (struct Degree *Deg,unsigned Status)
char Query[1024];
/***** Create a new degree *****/
/*
sprintf (Query,"INSERT INTO degrees (CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,OptYear,WWW)"
" VALUES ('%ld','%ld','%u','%ld',"
"'%s','%s','%u','%u','%c','%s')",
Deg->CtrCod,Deg->DegTypCod,
Status,
Gbl.Usrs.Me.UsrDat.UsrCod,
Deg->ShortName,Deg->FullName,
Deg->FirstYear,Deg->LastYear,
Deg->OptYear ? 'Y' :
'N',
Deg->WWW);
*/
sprintf (Query,"INSERT INTO degrees (CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,WWW)"
" VALUES ('%ld','%ld','%u','%ld',"
@ -2388,11 +2316,6 @@ void Deg_GetListAllDegs (void)
unsigned NumDeg;
/***** Get degrees admin by me from database *****/
/*
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,OptYear,WWW"
" FROM degrees ORDER BY FullName");
*/
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,WWW"
" FROM degrees ORDER BY FullName");
@ -2448,12 +2371,6 @@ static void Deg_GetListDegsOfCurrentCtr (void)
unsigned NumDeg;
/***** Get degrees of the current centre from database *****/
/*
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,OptYear,WWW"
" FROM degrees WHERE CtrCod='%ld' ORDER BY FullName",
Gbl.CurrentCtr.Ctr.CtrCod);
*/
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,WWW"
" FROM degrees WHERE CtrCod='%ld' ORDER BY FullName",
@ -2527,24 +2444,6 @@ void Deg_GetListDegsAdminByMe (void)
unsigned NumDeg;
/***** Get degrees admin by me from database *****/
/*
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,OptYear,WWW"
" FROM degrees"
" WHERE CtrCod='%ld'"
" ORDER BY ShortName",
Gbl.CurrentCtr.Ctr.CtrCod);
// TODO: put an if to select all degrees for admins of all degrees !!!!!!!!!!!!!
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADM
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
"degrees.ShortName,degrees.FullName,degrees.FirstYear,degrees.LastYear,degrees.OptYear,degrees.WWW"
" FROM admin,degrees"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" AND admin.Cod=degrees.DegCod"
" ORDER BY degrees.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod);
*/
if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,WWW"
@ -2699,12 +2598,6 @@ static void Deg_RecFormRequestOrCreateDeg (unsigned Status)
Par_GetParToText ("LastYear",YearStr,2);
Deg->LastYear = Deg_ConvStrToYear (YearStr);
/* Get optional year */
/*
Par_GetParToText ("OptYear",YN,1);
Deg->OptYear = (Str_ConvertToUpperLetter (YN[0]) == 'Y');
*/
/* Get degree WWW */
Par_GetParToText ("WWW",Deg->WWW,Cns_MAX_LENGTH_WWW);
@ -2981,7 +2874,6 @@ bool Deg_GetDataOfDegreeByCod (struct Degree *Deg)
Deg->FullName[0] = '\0';
Deg->FirstYear = 0;
Deg->LastYear = 0;
// Deg->OptYear = false;
Deg->WWW[0] = '\0';
Deg->NumCourses = 0;
Deg->LstCrss = NULL;
@ -2989,12 +2881,6 @@ bool Deg_GetDataOfDegreeByCod (struct Degree *Deg)
}
/***** Get data of a degree from database *****/
/*
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,OptYear,WWW"
" FROM degrees WHERE DegCod ='%ld'",
Deg->DegCod);
*/
sprintf (Query,"SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,"
"ShortName,FullName,FirstYear,LastYear,WWW"
" FROM degrees WHERE DegCod ='%ld'",
@ -3020,7 +2906,6 @@ bool Deg_GetDataOfDegreeByCod (struct Degree *Deg)
Deg->FullName[0] = '\0';
Deg->FirstYear = 0;
Deg->LastYear = 0;
// Deg->OptYear = false;
Deg->WWW[0] = '\0';
Deg->NumCourses = 0;
Deg->LstCrss = NULL;
@ -3070,11 +2955,6 @@ static void Deg_GetDataOfDegreeFromRow (struct Degree *Deg,MYSQL_ROW row)
/***** Get last year (row[8]) *****/
Deg->LastYear = Deg_ConvStrToYear (row[8]);
/***** Get optional year (row[9]) *****/
/*
Deg->OptYear = (Str_ConvertToUpperLetter (row[9][0]) == 'Y');
*/
/***** Get WWW (row[9]) *****/
strcpy (Deg->WWW,row[9]);
@ -3703,46 +3583,6 @@ static void Deg_ChangeDegYear (struct Degree *Deg,Deg_FirstOrLastYear_t FirstOrL
Deg_EditDegrees ();
}
/*****************************************************************************/
/******************** Change the optional year of a degree *******************/
/*****************************************************************************/
/*
void Deg_ChangeDegOptYear (void)
{
extern const char *Txt_The_degree_now_has_a_year_for_optional_courses;
extern const char *Txt_The_degree_has_no_longer_a_year_for_optional_courses;
struct Degree *Deg;
char Query[512];
char YN[1+1];
Deg = &Gbl.Degs.EditingDeg;
***** Get parameters from form *****
* Get degree code *
if ((Deg->DegCod = Deg_GetParamOtherDegCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of degree is missing.");
* Get parameter with optional year *
Par_GetParToText ("OptYear",YN,1);
Deg->OptYear = (Str_ConvertToUpperLetter (YN[0]) == 'Y');
***** Update optional year in table of degrees *****
sprintf (Query,"UPDATE degrees SET OptYear='%c' WHERE DegCod='%ld'",
Deg->OptYear ? 'Y' :
'N',
Deg->DegCod);
DB_QueryUPDATE (Query,"can not update the optional year of a degree");
***** Write message to show the change made *****
sprintf (Gbl.Message,"%s",
Deg->OptYear ? Txt_The_degree_now_has_a_year_for_optional_courses :
Txt_The_degree_has_no_longer_a_year_for_optional_courses);
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
***** Show the form again *****
Deg_EditDegrees ();
}
*/
/*****************************************************************************/
/************************* Change the WWW of a degree ************************/
/*****************************************************************************/
@ -3967,10 +3807,6 @@ unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery)
bool Deg_CheckIfYearIsValidInDeg (unsigned Year,struct Degree *Deg)
{
/*
return (Year == 0 && Deg->OptYear) ||
(Year != 0 && Year >= Deg->FirstYear && Year <= Deg->LastYear);
*/
return (Year == 0) ||
(Year != 0 && Year >= Deg->FirstYear && Year <= Deg->LastYear);
}

View File

@ -78,7 +78,6 @@ struct Degree
char FullName[Deg_MAX_LENGTH_DEGREE_FULL_NAME+1]; // Full name of degree
unsigned FirstYear;
unsigned LastYear;
// bool OptYear;
char WWW[Cns_MAX_LENGTH_WWW+1];
unsigned NumCourses; // Number of courses in the degree
struct Course *LstCrss; // List of courses in this degree
@ -148,7 +147,6 @@ void Deg_ChangeDegreeType (void);
void Deg_ChangeDegreeCtr (void);
void Deg_ChangeDegFirstYear (void);
void Deg_ChangeDegLastYear (void);
// void Deg_ChangeDegOptYear (void);
void Deg_ChangeDegWWW (void);
void Deg_ChangeDegStatus (void);
void Deg_RequestLogo (void);

View File

@ -871,7 +871,7 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
fprintf (Gbl.F.Out,"</td>" \
"</tr>");
/***** Year (optional, 1º, 2º, 3º, 4º, 5º...) *****/
/***** Year (N.A., 1º, 2º, 3º, 4º, 5º...) *****/
fprintf (Gbl.F.Out,"<tr>" \
"<td class=\"%s RIGHT_TOP\">"
"%s:"

View File

@ -307,7 +307,6 @@ void Gbl_InitializeGlobals (void)
Gbl.Degs.EditingDeg.FullName[0] = '\0';
Gbl.Degs.EditingDeg.FirstYear =
Gbl.Degs.EditingDeg.LastYear = 0;
// Gbl.Degs.EditingDeg.OptYear = false;
Gbl.Degs.EditingDeg.WWW[0] = '\0';
Gbl.Degs.EditingDeg.NumCourses = 0;
Gbl.Degs.EditingDeg.LstCrss = NULL;

View File

@ -463,7 +463,7 @@ struct Globals
{
long CrsCod;
char CrsFullName[Cns_MAX_BYTES_STRING+1];
unsigned Year; // Number of year (0 (Optional), 1, 2, 3, 4, 5, 6) in the degree
unsigned Year; // Number of year (0 (N.A.), 1, 2, 3, 4, 5, 6) in the degree
char Session[Cns_MAX_BYTES_STRING+1]; // Exam session is june, september, etc.
struct Date CallDate;
struct Date ExamDate;

View File

@ -7302,28 +7302,7 @@ const char *Txt_DEGREE_With_courses =
#elif L==8
"Com disciplinas";
#endif
/*
const char *Txt_DEGREE_With_year_for_optional_courses =
#if L==0
"Con curso de optativas."; // Necessita traduccio
#elif L==1
"With year for optional courses."; // Need Übersetzung
#elif L==2
"With year for optional courses.";
#elif L==3
"La titulaci&oacute;n ya no tiene un curso de optativas.";
#elif L==4
"With year for optional courses."; // Besoin de traduction
#elif L==5
"La titulaci&oacute;n ya no tiene un curso de optativas."; // Okoteve traducción
#elif L==6
"Con anno per corsi opzionali.";
#elif L==7
"With year for optional courses."; // Potrzebujesz tlumaczenie
#elif L==8
"With year for optional courses."; // Necessita de tradução
#endif
*/
const char *Txt_DEGREE_Without_courses =
#if L==0
"Sense assignatures";
@ -7344,28 +7323,7 @@ const char *Txt_DEGREE_Without_courses =
#elif L==8
"Sem disciplinas";
#endif
/*
const char *Txt_DEGREE_Without_year_for_optional_courses =
#if L==0
"Sin curso de optativas."; // Necessita traduccio
#elif L==1
"Without year for optional courses."; // Need Übersetzung
#elif L==2
"Without year for optional courses.";
#elif L==3
"La titulaci&oacute;n ya no tiene un curso de optativas.";
#elif L==4
"Without year for optional courses."; // Besoin de traduction
#elif L==5
"La titulaci&oacute;n ya no tiene un curso de optativas."; // Okoteve traducción
#elif L==6
"Senza anno per corsi opzionali.";
#elif L==7
"Without year for optional courses."; // Potrzebujesz tlumaczenie
#elif L==8
"Without year for optional courses."; // Necessita de tradução
#endif
*/
const char *Txt_Degree_X_removed = // Warning: it is very important to include %s in the following sentences
#if L==0
"Titulaci&oacute;n <strong>%s</strong> eliminada."; // Necessita traduccio
@ -25808,28 +25766,7 @@ const char *Txt_Opening_of_groups =
#elif L==8
"Opening of groups"; // Necessita de tradução
#endif
/*
const char *Txt_Opt_BR_year = // Year for optional courses
#if L==0
"&iquest;Cur.<br />opt.?"; // Necessita traduccio
#elif L==1
"Opt.<br />year?"; // Need Übersetzung
#elif L==2
"Opt.<br />year?";
#elif L==3
"&iquest;Cur.<br />opt.?";
#elif L==4
"Opt.<br />year?"; // Besoin de traduction
#elif L==5
"&iquest;Cur.<br />opt.?"; // Okoteve traducción
#elif L==6
"Opz.<br />anno?";
#elif L==7
"Opt.<br />rok?";
#elif L==8
"Opt.<br />year?"; // Necessita de tradução
#endif
*/
const char *Txt_Option_a_Import_students_from_the_official_lists =
#if L==0
"Opci&oacute;n a): Obtenga estudiantes de las listas oficiales"; // Necessita traduccio
@ -39296,48 +39233,6 @@ const char *Txt_The_degree_X_already_exists = // Warning: it is very important t
"The degree <strong>%s</strong> already exists."; // Necessita de tradução
#endif
const char *Txt_The_degree_has_no_longer_a_year_for_optional_courses =
#if L==0
"La titulaci&oacute;n ya no tiene un curso de optativas."; // Necessita traduccio
#elif L==1
"The degree has no longer a year for optional courses."; // Need Übersetzung
#elif L==2
"The degree has no longer a year for optional courses.";
#elif L==3
"La titulaci&oacute;n ya no tiene un curso de optativas.";
#elif L==4
"The degree has no longer a year for optional courses."; // Besoin de traduction
#elif L==5
"La titulaci&oacute;n ya no tiene un curso de optativas."; // Okoteve traducción
#elif L==6
"La laurea non ha un anno pi&ugrave; lungo per corsi opzionali.";
#elif L==7
"The degree has no longer a year for optional courses."; // Potrzebujesz tlumaczenie
#elif L==8
"The degree has no longer a year for optional courses."; // Necessita de tradução
#endif
const char *Txt_The_degree_now_has_a_year_for_optional_courses =
#if L==0
"La titulaci&oacute;n ahora tiene un curso de optativas."; // Necessita traduccio
#elif L==1
"The degree now has a year for optional courses."; // Need Übersetzung
#elif L==2
"The degree now has a year for optional courses.";
#elif L==3
"La titulaci&oacute;n ahora tiene un curso de optativas.";
#elif L==4
"The degree now has a year for optional courses."; // Besoin de traduction
#elif L==5
"La titulaci&oacute;n ahora tiene un curso de optativas."; // Okoteve traducción
#elif L==6
"La laurea ora ha un anno per corsi opzionali.";
#elif L==7
"The degree now has a year for optional courses."; // Potrzebujesz tlumaczenie
#elif L==8
"The degree now has a year for optional courses."; // Necessita de tradução
#endif
const char *Txt_The_department_X_already_exists = // Warning: it is very important to include %s in the following sentences
#if L==0
"El departamento <strong>%s</strong> ya existe."; // Necessita traduccio