mirror of https://github.com/acanas/swad-core.git
Version 15.237.1
This commit is contained in:
parent
5796cd39fc
commit
2c70fc6956
|
@ -58,13 +58,621 @@
|
|||
|
||||
<tr>
|
||||
<td align="center">
|
||||
Last update: April 18, 2016
|
||||
Last update: June 13, 2016
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td align="left">
|
||||
<dl>
|
||||
<dt>Version 15.224.3: Jun 13, 2016</dt>
|
||||
<dd>
|
||||
Fix bug while finding cell content in file of marks. (202266 lines)
|
||||
</dd>
|
||||
<dt>Version 15.224.2: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Info about number of files is moved to bottom of file browsers. (202266 lines)
|
||||
</dd>
|
||||
<dt>Version 15.224.1: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Change in layout of file browsers. (202266 lines)
|
||||
</dd>
|
||||
<dt>Version 15.224: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Now a user can unfollow users followed by him/her whose profile is not visible.<br />
|
||||
Code refactoring in list of follwing/followers. (202304 lines)
|
||||
</dd>
|
||||
<dt>Version 15.223.3: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Fixed layout of list of forums. (202282 lines)
|
||||
</dd>
|
||||
<dt>Version 15.223.2: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in results of search of students. (202277 lines)
|
||||
</dd>
|
||||
<dt>Version 15.223.1: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
Show only users to follow with first name and surname 1. (202276 lines)
|
||||
</dd>
|
||||
<dt>Version 15.223: Jun 12, 2016</dt>
|
||||
<dd>
|
||||
New forms to change course configuration. (202268 lines)<br />
|
||||
4 changes necessary in database:<br />
|
||||
<small><code>
|
||||
UPDATE actions SET Txt='Cambiar cód. institucional asignatura' WHERE ActCod='1024' AND Language='es';<br />
|
||||
UPDATE actions SET Txt='Cambiar cód. institucional asignatura' WHERE ActCod='1025' AND Language='es';<br />
|
||||
UPDATE actions SET Txt='Cambiar año/semestre asignatura' WHERE ActCod='561' AND Language='es';<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1573','es','N','Cambiar año/semestre asignatura');
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.222.6: Jun 11, 2016</dt>
|
||||
<dd>
|
||||
Fixed layout in students column in result of search of teachers. (202214 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222.5: Jun 10, 2016</dt>
|
||||
<dd>
|
||||
Indicators of a course are always calculated and stored in course configuration. (202214 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222.4: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in indicators. (202208 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222.3: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
Indicators form is sended automatically when any parameter changes. (202214 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222.2: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in indicators. (202233 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222.1: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
Optimization in number of indicators. (202230 lines)
|
||||
</dd>
|
||||
<dt>Version 15.222: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
Number of indicators is stored in table of courses. (202224 lines)
|
||||
</dd>
|
||||
<dt>Version 15.221.4: Jun 09, 2016</dt>
|
||||
<dd>
|
||||
New columns in table of courses to store number of indicators. (202153 lines)<br />
|
||||
1 change necessary in database:<br />
|
||||
<small><code>
|
||||
ALTER TABLE courses ADD COLUMN NumIndicators INT NOT NULL DEFAULT -1 AFTER FullName;
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.221.3: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Fix bug in calculation of number of files in groups of a course. (202146 lines)
|
||||
</dd>
|
||||
<dt>Version 15.221.2: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Fix bug in calculation of number of files in groups of a course. (202149 lines)
|
||||
</dd>
|
||||
<dt>Version 15.221.1: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Fix bug in form of indicators.<br />
|
||||
Speed up database queries to get course info when getting indicators. (? lines)
|
||||
</dd>
|
||||
<dt>Version 15.221: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Single (radio) selection of number of indicators changed to multiple (checkbox) selection. (202028 lines)
|
||||
</dd>
|
||||
<dt>Version 15.220.1: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in form to view indicators of courses. (202031 lines)
|
||||
</dd>
|
||||
<dt>Version 15.220: Jun 08, 2016</dt>
|
||||
<dd>
|
||||
Number of indicators now appears inside form. (202029 lines)
|
||||
</dd>
|
||||
<dt>Version 15.219.1: Jun 05, 2016</dt>
|
||||
<dd>
|
||||
Highlighted row with number of indicators selected. (202023 lines)
|
||||
</dd>
|
||||
<dt>Version 15.219: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
Changes in listing of indicators of courses. (202001 lines)
|
||||
</dd>
|
||||
<dt>Version 15.218.5: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
Fix bug in social notes, reported by Raymon Moreno Colina. (201940 lines)<br />
|
||||
2 changes necessary in database:<br />
|
||||
<small><code>
|
||||
DROP INDEX NoteType ON social_notes;<br />
|
||||
CREATE INDEX NoteType ON social_notes (NoteType,Cod);
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.218.4: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
User can change license of files in briefcase.<br />
|
||||
Code refactoring related to file metadata. (201936 lines)
|
||||
</dd>
|
||||
<dt>Version 15.218.3: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring related to setlocale. (201952 lines)
|
||||
</dd>
|
||||
<dt>Version 15.218.2: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
Checked value returned by setlocale in all calls. (201957 lines)
|
||||
</dd>
|
||||
<dt>Version 15.218.1: Jun 04, 2016</dt>
|
||||
<dd>
|
||||
Change in listing of courses. (201934 lines)
|
||||
</dd>
|
||||
<dt>Version 15.218: Jun 03, 2016</dt>
|
||||
<dd>
|
||||
New module swad_MFU for most frequently used actions.<br />
|
||||
Change in layout of most frequent actions. (201934 lines)
|
||||
</dd>
|
||||
<dt>Version 15.217.2: Jun 03, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in copy-paste from briefcase to another file browser. (201827 lines)
|
||||
</dd>
|
||||
<dt>Version 15.217.1: Jun 03, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug when creating zip file for students works, reported by Francisco Barranco Expósito. (201809 lines)
|
||||
</dd>
|
||||
<dt>Version 15.217: Jun 01, 2016</dt>
|
||||
<dd>
|
||||
When clicking on a social note associated to an exam announcement, show that exam announcement highlighted. (201801 lines)<br />
|
||||
1 change necessary in database:<br />
|
||||
<small><code>
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1572','es','N','Ver convocatoria');
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.216: Jun 01, 2016</dt>
|
||||
<dd>
|
||||
When clicking on a day on calendar, all exam announcements in that day are shown highlighted. (201751 lines)<br />
|
||||
1 change necessary in database:<br />
|
||||
<small><code>
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1571','es','N','Ver convocatorias de una fecha');
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.215: Jun 01, 2016</dt>
|
||||
<dd>
|
||||
List exam announcements as a list, like notices. (201670 lines)
|
||||
</dd>
|
||||
<dt>Version 15.214: May 31, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in renaming test tags. (201589 lines)
|
||||
</dd>
|
||||
<dt>Version 15.213: May 31, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring related to renaming test tags.<br />
|
||||
Fixed bug in dates, reported by Christian A. Morillas Gutiérrez. (201581 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.9: May 30, 2016</dt>
|
||||
<dd>
|
||||
Link to list institutions of country in country configuration. (201567 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.8: May 30, 2016</dt>
|
||||
<dd>
|
||||
Link to list centres of institution in institution configuration. (201555 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.7: May 30, 2016</dt>
|
||||
<dd>
|
||||
Link to list degrees of centre in centre configuration. (201547 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.6: May 30, 2016</dt>
|
||||
<dd>
|
||||
Link to list courses of degree in degree configuration. (201539 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.5: May 30, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in number of courses of a degree. (201531 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.4: May 30, 2016</dt>
|
||||
<dd>
|
||||
Changed links from external degrees to internal degrees in STATS > Degrees. (201529 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.3: May 30, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in test question. A student can see now his/her test results. (201522 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.2: May 30, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in test question. Button "Add a new question" in tests will not be available for students. (201516 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212.1: May 30, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in course information. (201515 lines)
|
||||
</dd>
|
||||
<dt>Version 15.212: May 30, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in edition of syllabus, reported by Raymon Moreno Colina and Javier Fernández Baldomero.<br />
|
||||
Code refactoring related to course info. (201471 lines)
|
||||
</dd>
|
||||
<dt>Version 15.211.2: May 13, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in test questions, reported by Nuria Torres Rosell. (201394 lines)
|
||||
</dd>
|
||||
<dt>Version 15.211.1: May 07, 2016</dt>
|
||||
<dd>
|
||||
Files in briefcase older than 1 year are removed automatically. (201397 lines)
|
||||
</dd>
|
||||
<dt>Version 15.211: May 07, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring related to removing old files in briefcase.<br />
|
||||
Old files in briefcase are removed automatically. (201396 lines)
|
||||
</dd>
|
||||
<dt>Version 15.210.4: May 05, 2016</dt>
|
||||
<dd>
|
||||
Link to change logo of degree is moved to top of window. (201385 lines)
|
||||
</dd>
|
||||
<dt>Version 15.210.3: May 05, 2016</dt>
|
||||
<dd>
|
||||
Link to change logo of centre is moved to top of window. (201407 lines)
|
||||
</dd>
|
||||
<dt>Version 15.210.2: May 05, 2016</dt>
|
||||
<dd>
|
||||
Link to change logo of institution is moved to top of window. (201399 lines)
|
||||
</dd>
|
||||
<dt>Version 15.210.1: May 05, 2016</dt>
|
||||
<dd>
|
||||
New icon to change logo of institution/centre/degree. (201388 lines)<br />
|
||||
1 change necessary in icons:
|
||||
<small><code>
|
||||
Copy file icon/logo64x64.png to public icon directory
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.210: May 05, 2016</dt>
|
||||
<dd>
|
||||
Commands/shortcuts in record are removed from left of window. (201389 lines)
|
||||
</dd>
|
||||
<dt>Version 15.209: May 05, 2016</dt>
|
||||
<dd>
|
||||
Commands/shortcuts in record are cloned to top of window. (201614 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.6: May 05, 2016</dt>
|
||||
<dd>
|
||||
Integrated "Configure" link in tests at top of window, near "Edit" icon. (201463 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.5: May 05, 2016</dt>
|
||||
<dd>
|
||||
Changes in Statistics > Degrees. (201469 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.4: May 05, 2016</dt>
|
||||
<dd>
|
||||
In Statistics > Degrees, show all degrees with students. (201458 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.3: May 03, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in sessions database table when no social publishings available. (201446 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.2: May 01, 2016</dt>
|
||||
<dd>
|
||||
Add default values in some database fields. (201439 lines)<br />
|
||||
1 change necessary in database:<br />
|
||||
<small><code>
|
||||
ALTER TABLE sessions CHANGE COLUMN SearchString SearchString VARCHAR(255) NOT NULL DEFAULT '';
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.208.2: May 01, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in user's last data. (201439 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208.1: May 01, 2016</dt>
|
||||
<dd>
|
||||
Minor fix to avoid warning related to size_t. (201438 lines)
|
||||
</dd>
|
||||
<dt>Version 15.208: May 01, 2016</dt>
|
||||
<dd>
|
||||
Changes in config for swadberry.ugr.es.<br />
|
||||
Removed cevuna.una.py from config. (201435 lines)
|
||||
</dd>
|
||||
<dt>Version 15.207.2: May 01, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in database table log_full. (201515 lines)
|
||||
</dd>
|
||||
<dt>Version 15.207.1: May 01, 2016</dt>
|
||||
<dd>
|
||||
Minor fix to avoid warning related to char type limits. (201515 lines)
|
||||
</dd>
|
||||
<dt>Version 15.207: May 01, 2016</dt>
|
||||
<dd>
|
||||
Add default values for fields in users' data table. (201514 lines)<br />
|
||||
Birthday default value now is NULL.<br />
|
||||
18 changes necessary in database:<br />
|
||||
<small><code>
|
||||
ALTER TABLE usr_data CHANGE COLUMN EncryptedUsrCod EncryptedUsrCod CHAR(43) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Password Password CHAR(86) COLLATE latin1_bin NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Surname1 Surname1 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Surname2 Surname2 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN FirstName FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Theme Theme CHAR(16) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN IconSet IconSet CHAR(16) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Language Language CHAR(2) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Photo Photo CHAR(43) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Office Office VARCHAR(127) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN OfficePhone OfficePhone CHAR(16) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN LocalAddress LocalAddress VARCHAR(127) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN LocalPhone LocalPhone CHAR(16) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN FamilyAddress FamilyAddress VARCHAR(127) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN FamilyPhone FamilyPhone CHAR(16) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN OriginPlace OriginPlace VARCHAR(127) NOT NULL DEFAULT '';<br />
|
||||
ALTER TABLE usr_data CHANGE COLUMN Birthday Birthday DATE;<br />
|
||||
UPDATE usr_data SET Birthday=NULL WHERE Birthday='0000-00-00';
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.206: Apr 30, 2016</dt>
|
||||
<dd>
|
||||
Remove default DATETIME fields to avoid errors if 0 is not allowed in date in database. (201424 lines)<br />
|
||||
7 changes necessary in database:<br />
|
||||
<small><code>
|
||||
ALTER TABLE connected CHANGE COLUMN LastTime LastTime DATETIME NOT NULL;<br />
|
||||
ALTER TABLE crs_grp_types CHANGE COLUMN OpenTime OpenTime DATETIME NOT NULL;<br />
|
||||
ALTER TABLE crs_last CHANGE COLUMN LastTime LastTime DATETIME NOT NULL;<br />
|
||||
ALTER TABLE sessions CHANGE COLUMN LastTime LastTime DATETIME NOT NULL;<br />
|
||||
ALTER TABLE sessions CHANGE COLUMN LastRefresh LastRefresh DATETIME NOT NULL;<br />
|
||||
ALTER TABLE usr_last CHANGE COLUMN LastTime LastTime DATETIME NOT NULL;<br />
|
||||
ALTER TABLE usr_last CHANGE COLUMN LastAccNotif LastAccNotif DATETIME NOT NULL;
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.205: Apr 30, 2016</dt>
|
||||
<dd>
|
||||
New demo server added to swad_config.h: swadberry.ugr.es. (201409 lines)
|
||||
</dd>
|
||||
<dt>Version 15.204.1: Apr 25, 2016</dt>
|
||||
<dd>
|
||||
Fixed bug in changes in database necessary in version 15.201. (201366 lines)<br />
|
||||
6 changes necessary in database:<br />
|
||||
<small><code>
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1565','es','N','Solicitar conf. ID invitado');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1566','es','N','Solicitar conf. ID estudiante');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1567','es','N','Solicitar conf. ID profesor');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1568','es','N','Confirmar ID invitado');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1569','es','N','Confirmar ID estudiante');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1570','es','N','Confirmar ID profesor');
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.204: Apr 25, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. (201326 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.6: Apr 24, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201295 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.5: Apr 24, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201230 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.4: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201140 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.3: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201113 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.2: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201104 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203.1: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
New form to confirm another user's ID. Not finished. (201090 lines)
|
||||
</dd>
|
||||
<dt>Version 15.203: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Changes in layout and CSS related to record card. (201076 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.19:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
User's ID is shown in green or red in user's account. (201120 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.18:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Change of message about ID in user's account. (201092 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.17:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201081 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.16:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201070 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.15:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201059 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.14:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201048 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.13:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201037 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.12:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201026 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.11:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201014 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.10:Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (201000 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.9: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200987 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.8: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200979 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.7: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200964 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.6: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200949 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.5: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200934 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.4: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200926 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.3: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200911 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.2: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200899 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202.1: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring related to showing user's e-mail. (200887 lines)
|
||||
</dd>
|
||||
<dt>Version 15.202: Apr 23, 2016</dt>
|
||||
<dd>
|
||||
User's IDs are show in green or red.<br />
|
||||
Code refactoring and bug fixing related to showing user's ID and e-mail. (200908 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.9: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card.<br />
|
||||
Changes in layout of record cards. (200895 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.8: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card.<br />
|
||||
Fixed bugs in record cards. (200881 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.7: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card.<br />
|
||||
Fixed bugs in record cards. (200862 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.6: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200842 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.5: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200832 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.4: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200822 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.3: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200812 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.2: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200806 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201.1: Apr 22, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in record card. (200778 lines)
|
||||
</dd>
|
||||
<dt>Version 15.201: Apr 21, 2016</dt>
|
||||
<dd>
|
||||
New private file zone for the teachers who belong to a course. (200768 lines)<br />
|
||||
82 changes necessary in database:<br />
|
||||
<small><code>
|
||||
CREATE TABLE notif_backup LIKE notif;<br />
|
||||
INSERT INTO notif_backup SELECT * FROM notif;<br />
|
||||
<br />
|
||||
CREATE TABLE sta_notif_backup LIKE sta_notif;<br />
|
||||
INSERT INTO sta_notif_backup SELECT * FROM sta_notif;<br />
|
||||
<br />
|
||||
CREATE TABLE usr_data_backup LIKE usr_data;<br />
|
||||
INSERT INTO usr_data_backup SELECT * FROM usr_data;<br />
|
||||
<br />
|
||||
UPDATE notif SET NotifyEvent=19 WHERE NotifyEvent=18;<br />
|
||||
UPDATE notif SET NotifyEvent=18 WHERE NotifyEvent=17;<br />
|
||||
UPDATE notif SET NotifyEvent=17 WHERE NotifyEvent=16;<br />
|
||||
UPDATE notif SET NotifyEvent=16 WHERE NotifyEvent=15;<br />
|
||||
UPDATE notif SET NotifyEvent=15 WHERE NotifyEvent=14;<br />
|
||||
UPDATE notif SET NotifyEvent=14 WHERE NotifyEvent=13;<br />
|
||||
UPDATE notif SET NotifyEvent=13 WHERE NotifyEvent=12;<br />
|
||||
UPDATE notif SET NotifyEvent=12 WHERE NotifyEvent=11;<br />
|
||||
UPDATE notif SET NotifyEvent=11 WHERE NotifyEvent=10;<br />
|
||||
UPDATE notif SET NotifyEvent=10 WHERE NotifyEvent=9;<br />
|
||||
UPDATE notif SET NotifyEvent=9 WHERE NotifyEvent=8;<br />
|
||||
UPDATE notif SET NotifyEvent=8 WHERE NotifyEvent=7;<br />
|
||||
UPDATE notif SET NotifyEvent=7 WHERE NotifyEvent=6;<br />
|
||||
UPDATE notif SET NotifyEvent=6 WHERE NotifyEvent=5;<br />
|
||||
UPDATE notif SET NotifyEvent=5 WHERE NotifyEvent=4;<br />
|
||||
UPDATE notif SET NotifyEvent=4 WHERE NotifyEvent=3;<br />
|
||||
UPDATE notif SET NotifyEvent=3 WHERE NotifyEvent=2;<br />
|
||||
<br />
|
||||
UPDATE sta_notif SET NotifyEvent=19 WHERE NotifyEvent=18;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=18 WHERE NotifyEvent=17;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=17 WHERE NotifyEvent=16;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=16 WHERE NotifyEvent=15;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=15 WHERE NotifyEvent=14;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=14 WHERE NotifyEvent=13;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=13 WHERE NotifyEvent=12;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=12 WHERE NotifyEvent=11;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=11 WHERE NotifyEvent=10;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=10 WHERE NotifyEvent=9;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=9 WHERE NotifyEvent=8;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=8 WHERE NotifyEvent=7;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=7 WHERE NotifyEvent=6;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=6 WHERE NotifyEvent=5;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=5 WHERE NotifyEvent=4;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=4 WHERE NotifyEvent=3;<br />
|
||||
UPDATE sta_notif SET NotifyEvent=3 WHERE NotifyEvent=2;<br />
|
||||
<br />
|
||||
UPDATE usr_data SET NotifNtfEvents = (((NotifNtfEvents & ~0x3) << 1) | (NotifNtfEvents & 0x3) | 0x04);<br />
|
||||
UPDATE usr_data SET EmailNtfEvents = (((EmailNtfEvents & ~0x3) << 1) | (EmailNtfEvents & 0x3));<br />
|
||||
<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1525','es','N','Administrar zona de profesores');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1526','es','N','Cambiar a admin. archivos prof.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1527','es','N','Administrar archivos prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1528','es','N','Solicitar elim. arch. prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1529','es','N','Eliminar archivo prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1530','es','N','Eliminar carpeta prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1531','es','N','Copiar de zona prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1532','es','N','Pegar en zona prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1533','es','N','Eliminar árbol prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1534','es','N','Solic.nuevo arch/carp prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1535','es','N','Crear carpeta prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1536','es','N','Crear enlace prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1537','es','N','Renombrar carpeta prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1538','es','N','Subir archivo prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1539','es','N','Subir archivo prof. asg. (ant.)');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1540','es','N','Expandir carpeta prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1541','es','N','Contraer carpeta prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1542','es','N','Crear ZIP prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1543','es','N','Ver metadatos arch. prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1544','es','N','Cambiar metadatos arch. prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1545','es','N','Descargar arch. prof. asg.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1546','es','N','Administrar archivos prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1547','es','N','Solicitar elim. arch. prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1548','es','N','Eliminar archivo prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1549','es','N','Eliminar carpeta prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1550','es','N','Copiar de zona prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1551','es','N','Pegar en zona prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1552','es','N','Eliminar árbol prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1553','es','N','Solic.nuevo arch/carp prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1554','es','N','Crear carpeta prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1555','es','N','Crear enlace prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1556','es','N','Renombrar carpeta prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1557','es','N','Subir archivo prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1558','es','N','Subir archivo prof. asg. (grp.)');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1559','es','N','Expandir carpeta prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1560','es','N','Contraer carpeta prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1561','es','N','Crear ZIP prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1562','es','N','Ver metadatos arch. prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1563','es','N','Cambiar metadatos arch. prof. grp.');<br />
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1564','es','N','Descargar arch. prof. grp.');
|
||||
</code></small>
|
||||
</dd>
|
||||
<dt>Version 15.200.5: Apr 18, 2016</dt>
|
||||
<dd>
|
||||
Removed link to enter from external service. (199764 lines)
|
||||
|
@ -698,7 +1306,7 @@ ALTER TABLE tst_questions ADD COLUMN Image CHAR(43) NOT NULL AFTER Stem;
|
|||
</dd>
|
||||
<dt>Version 15.163.1: Mar 27, 2016</dt>
|
||||
<dd>
|
||||
Added HTML directives "label" for scope and other form fields. (196654 lines)
|
||||
Added HTML directives "label" for scope and other form fields. (196654 lines)
|
||||
</dd>
|
||||
<dt>Version 15.163: Mar 27, 2016</dt>
|
||||
<dd>
|
||||
|
@ -751,12 +1359,12 @@ Copy file recycle64x64.png to icon directory
|
|||
</dd>
|
||||
<dt>Version 15.161.2: Mar 24, 2016</dt>
|
||||
<dd>
|
||||
Removed contextual icon "update" integrated in frame in "enrollment requests". (196577 lines)
|
||||
Removed contextual icon "update" integrated in frame in "enrollment requests". (196577 lines)
|
||||
</dd>
|
||||
<dt>Version 15.161.1: Mar 24, 2016</dt>
|
||||
<dd>
|
||||
Code refactoring in forms to select roles.<br />
|
||||
Put contextual icon "update" integrated in frame in "enrollment requests". (196598 lines)
|
||||
Put contextual icon "update" integrated in frame in "enrollment requests". (196598 lines)
|
||||
</dd>
|
||||
<dt>Version 15.161: Mar 24, 2016</dt>
|
||||
<dd>
|
||||
|
@ -768,11 +1376,11 @@ INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1522','es','N','Actu
|
|||
</dd>
|
||||
<dt>Version 15.160.4: Mar 24, 2016</dt>
|
||||
<dd>
|
||||
Put contextual icon "update" integrated in frame in "Connected users". (196543 lines)
|
||||
Put contextual icon "update" integrated in frame in "Connected users". (196543 lines)
|
||||
</dd>
|
||||
<dt>Version 15.160.3: Mar 24, 2016</dt>
|
||||
<dd>
|
||||
Put contextual icon "update" integrated in frame in "Who to follow". (196538 lines)
|
||||
Put contextual icon "update" integrated in frame in "Who to follow". (196538 lines)
|
||||
</dd>
|
||||
<dt>Version 15.160.2: Mar 22, 2016</dt>
|
||||
<dd>
|
||||
|
@ -1153,7 +1761,7 @@ UPDATE actions SET Obsolete='Y' WHERE ActCod='1006';
|
|||
</dd>
|
||||
<dt>Version 15.140: Mar 01, 2016</dt>
|
||||
<dd>
|
||||
New option "landing page". (195817 lines)<br />
|
||||
New option "landing page". (195817 lines)<br />
|
||||
2 changes necessary in database:<br />
|
||||
<small><code>
|
||||
UPDATE actions SET Txt='Formularios cambiar rol y cerrar sesión' WHERE ActCod='843' AND Language='es';<br />
|
||||
|
@ -1262,11 +1870,11 @@ UPDATE actions SET Obsolete='Y' WHERE ActCod IN ('550','551');
|
|||
</dd>
|
||||
<dt>Version 15.133.6: Jan 28, 2016</dt>
|
||||
<dd>
|
||||
Changes in layout of "Who to follow". (195287 lines)
|
||||
Changes in layout of "Who to follow". (195287 lines)
|
||||
</dd>
|
||||
<dt>Version 15.133.5: Jan 28, 2016</dt>
|
||||
<dd>
|
||||
Unlogged users can not view "Who to follow". (195276 lines)
|
||||
Unlogged users can not view "Who to follow". (195276 lines)
|
||||
</dd>
|
||||
<dt>Version 15.133.4: Jan 28, 2016</dt>
|
||||
<dd>
|
||||
|
@ -1646,7 +2254,7 @@ ALTER TABLE imported_sessions CHANGE SessionId SessionId CHAR(43) COLLATE latin1
|
|||
</dd>
|
||||
<dt>Version 15.118: Jan 18, 2016</dt>
|
||||
<dd>
|
||||
Change in privacy options (new value "unknown"). (192967 lines)<br />
|
||||
Change in privacy options (new value "unknown"). (192967 lines)<br />
|
||||
3 changes necessary in database:<br />
|
||||
<small><code>
|
||||
ALTER TABLE usr_data CHANGE COLUMN PhotoVisibility PhotoVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown';<br />
|
||||
|
@ -2599,7 +3207,7 @@ INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1490','es','N','Ver
|
|||
<dd>
|
||||
Fixed bug in privacy form.<br />
|
||||
Privacy is moved to preferences.<br />
|
||||
Default privacy is changed from "user" to "system". (187700 lines)
|
||||
Default privacy is changed from "user" to "system". (187700 lines)
|
||||
</dd>
|
||||
<dt>Version 15.72.7: Dec 24, 2015</dt>
|
||||
<dd>
|
||||
|
|
|
@ -1135,9 +1135,9 @@
|
|||
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',<br />
|
||||
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',<br />
|
||||
'0','1','2','3','4','5','6','7','8','9','-','_'<br />
|
||||
<code>mysql> INSERT INTO usr_data (EncryptedUsrCod) VALUES(@EncryptedUsrCod);</code><br />
|
||||
<code>mysql> INSERT INTO usr_data (EncryptedUsrCod,Comments) VALUES(@EncryptedUsrCod,'');</code><br />
|
||||
<code>mysql> INSERT INTO usr_IDs (UsrCod,UsrID,CreatTime,Confirmed) VALUES(LAST_INSERT_ID(),@MyID,NOW(),'Y');</code><br />
|
||||
<code>mysql> INSERT INTO deg_admin (UsrCod,DegCod) VALUES (LAST_INSERT_ID(),'-2');</code><br />
|
||||
<code>mysql> INSERT INTO admin (UsrCod,Scope,Cod) VALUES (LAST_INSERT_ID(),'Sys','0');</code><br />
|
||||
<code>mysql> quit</code>
|
||||
</p>
|
||||
|
||||
|
@ -1208,7 +1208,13 @@
|
|||
</ul>
|
||||
|
||||
<p>
|
||||
Create the public directory <code>swad</code>, that will store the SWAD public content,
|
||||
The directory <code>swad</code> inside <code>cgi-bin</code>,
|
||||
will be created later.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Create the public directory <code>swad</code>,
|
||||
that will store the SWAD public content,
|
||||
inside the main public directory:
|
||||
<table width="100%">
|
||||
<tr>
|
||||
|
@ -1574,7 +1580,7 @@
|
|||
that can be downloaded from:<br />
|
||||
<a href="http://www.cs.fsu.edu/~engelen/soap.html">http://www.cs.fsu.edu/~engelen/soap.html</a><br />
|
||||
<a href="http://sourceforge.net/projects/gsoap2/files/">http://sourceforge.net/projects/gsoap2/files/</a><br />
|
||||
(Tested with the version 2.8.18,
|
||||
(Tested with the version 2.8.30,
|
||||
probably more recent versions also work.)
|
||||
</p>
|
||||
|
||||
|
@ -1585,12 +1591,12 @@
|
|||
Go to directory <code>/home/<user_directory>/swad/gsoap</code>:<br />
|
||||
<code>cd /home/<user_directory>/swad/gsoap</code><br />
|
||||
|
||||
Download the file <code>gsoap_2.8.18.zip</code> (or later)
|
||||
Download the file <code>gsoap_2.8.30.zip</code> (or later)
|
||||
and copy it in <code>/home/<user_directory>/swad/gsoap</code><br />
|
||||
<code>wget http://downloads.sourceforge.net/project/gsoap2/gSOAP/gsoap_2.8.18.zip</code><br />
|
||||
<code>wget http://downloads.sourceforge.net/project/gsoap2/gSOAP/gsoap_2.8.30.zip</code><br />
|
||||
|
||||
Uncompress gSOAP:<br />
|
||||
<code>unzip gsoap_2.8.18.zip</code> (or later)<br />
|
||||
<code>unzip gsoap_2.8.30.zip</code> (or later)<br />
|
||||
It should have been created the directory <code>gsoap-2.8</code>. Go to that directory:<br />
|
||||
<code>cd gsoap-2.8</code><br />
|
||||
Configure:<br />
|
||||
|
@ -1637,7 +1643,7 @@
|
|||
<code>//gsoap swad service location: URL</code><br />
|
||||
Replace <code>URL</code> (everything after the two points)
|
||||
by our SWAD address,
|
||||
for example <code>https://swad.ugr.es/</code> or <code>https://cevuna.una.py/swad/</code>,
|
||||
for example <code>https://openswad.org/</code> or <code>https://swad.ugr.es/</code>,
|
||||
and save the file.
|
||||
</p>
|
||||
|
||||
|
@ -1666,9 +1672,16 @@
|
|||
</table>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Go to directory <code>/home/<user_directory>/swad/swad-core/sha2</code>:<br />
|
||||
<code>cd /home/<user_directory>/swad/swad-core/sha2</code><br />
|
||||
to compile <code>sha2</code>:<br />
|
||||
<code>gcc -O2 -c sha2.c -o sha2.o</code>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Return to directory <code>/home/<user_directory>/swad/swad-core</code>:<br />
|
||||
<code>cd /home/<user_directory>/swad/swad-core</code><br />
|
||||
<code>cd /home/<user_directory>/swad/swad-core</code>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<td align="center">
|
||||
<h1>Source code</h1>
|
||||
<a href="http://creativecommons.org/licenses/by-sa/3.0/deed.es_ES" title="License of text on this page" class="COPYRIGHT"><img src="/img/cc-by-sa.png" style="width:88px; height=31px; vertical-align:middle;" alt="CC BY-SA" /></a>
|
||||
<a href="http://www.ugr.es/~acanas/">Antonio Cañas Vargas</a>, 1999-2015
|
||||
<a href="http://www.ugr.es/~acanas/">Antonio Cañas Vargas</a>, 1999-2016
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -105,7 +105,6 @@
|
|||
</p>
|
||||
|
||||
<h3>Main core (<code>swad-core</code>)</h3>
|
||||
<a href="img/lineas-codigo-modulo-principal.png"><img src="img/lineas-codigo-modulo-principal.png" width="50%" height="50%" border="0" alt="Main swad core code lines" align="right" hspace="30" vspace="30"></a>
|
||||
|
||||
<p align="justify">
|
||||
Programmed by <a href="https://github.com/acanas">Antonio Cañas Vargas</a>.
|
||||
|
@ -124,15 +123,19 @@
|
|||
<a href="http://www.mysql.com/">MySQL</a> or <a href="https://mariadb.org/">MariaDB</a>.
|
||||
The reader will probably think "a web application written in C?"
|
||||
Yes, it is not usual, <a href="http://www.youtube.com/watch?v=1S1fISh-pag">but... ;-)</a>
|
||||
A little more seriously, we could say that we have developed swad-core
|
||||
following the philosophy of <a href="http://handmadedev.org/manifesto/">The Handmade Manifesto</a>.
|
||||
</p>
|
||||
|
||||
<p align="justify">
|
||||
SWAD core has about 185 000 <a href="http://en.wikipedia.org/wiki/Source_lines_of_code">lines of source code</a>.
|
||||
Each executable program (one for each language) has a size of 1.85 <a href="http://en.wikipedia.org/wiki/Mebibyte">MiB</a>
|
||||
SWAD core has about 200 000 <a href="http://en.wikipedia.org/wiki/Source_lines_of_code">lines of source code</a>.
|
||||
Each executable program (one for each language) has a size of 1.8 <a href="http://en.wikipedia.org/wiki/Mebibyte">MiB</a>
|
||||
and in most of the possible actions
|
||||
generates the <a href="http://en.wikipedia.org/wiki/Web_page">page</a> in few milliseconds.
|
||||
</p>
|
||||
|
||||
<a href="img/lineas-codigo-modulo-principal.png"><img src="img/lineas-codigo-modulo-principal.png" width="100%" height="50%" border="0" alt="Main swad core code lines" align="right" hspace="30" vspace="30"></a>
|
||||
|
||||
<p align="justify">
|
||||
For <a href="http://en.wikipedia.org/wiki/Cryptography">encryption</a> of passwords
|
||||
the <a href="http://en.wikipedia.org/wiki/SHA_hash_functions">SHA-512</a> algorithm is used.
|
||||
|
|
|
@ -190,7 +190,8 @@
|
|||
<li><a href="#getTests"><code>getTests</code></a></li>
|
||||
<li style="margin-bottom:1em;"><a href="#getTrivialQuestion"><code>getTrivialQuestion</code></a></li>
|
||||
|
||||
<li style="margin-bottom:1em;"><a href="#getUsers"><code>getUsers</code></a></li>
|
||||
<li><a href="#getUsers"><code>getUsers</code></a></li>
|
||||
<li style="margin-bottom:1em;"><a href="#findUsers"><code>findUsers</code></a></li>
|
||||
|
||||
<li><a href="#getAttendanceEvents"><code>getAttendanceEvents</code></a></li>
|
||||
<li><a href="#sendAttendanceEvent"><code>sendAttendanceEvent</code></a></li>
|
||||
|
@ -278,9 +279,9 @@
|
|||
with one of the following 4 values:
|
||||
<ul>
|
||||
<li><var>0</var>: unknown, an error has occurred.</li>
|
||||
<li><var>1</var>: invited, not enrolled in any course.</li>
|
||||
<li><var>1</var>: guest, not enrolled in any course.</li>
|
||||
<li><var>2</var>: student in all his/her courses.</li>
|
||||
<li><var>3</var>: teacher in at aleast one of his/her courses.</li>
|
||||
<li><var>3</var>: teacher in at least one of his/her courses.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -321,9 +322,9 @@
|
|||
with one of the following 4 values:
|
||||
<ul>
|
||||
<li><var>0</var>: unknown, an error has occurred.</li>
|
||||
<li><var>1</var>: invited, not enrolled in any course.</li>
|
||||
<li><var>1</var>: guest, not enrolled in any course.</li>
|
||||
<li><var>2</var>: student in all his/her courses.</li>
|
||||
<li><var>3</var>: teacher in at aleast one of his/her courses.</li>
|
||||
<li><var>3</var>: teacher in at least one of his/her courses.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>degreeName</strong>: string.</li>
|
||||
|
@ -517,7 +518,7 @@
|
|||
If < 0 ⇒ there is no limit of students in the group.</li>
|
||||
<li><strong>numStudents</strong>: integer, current number of students in the group.</li>
|
||||
<li><strong>fileZones</strong>: integer. If not 0 ⇒ the file zones for this group are enabled.</li>
|
||||
<li><strong>member</strong>: integer. If not 0 ⇒ the logged user belongs to this group.</li>
|
||||
<li><strong>member</strong>: integer. If not 0 ⇒ the requester belongs to this group.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -527,7 +528,7 @@
|
|||
<a name="sendMyGroups"><h3 class="WS_FUNCTION"><code>sendMyGroups</code></h3></a>
|
||||
<p align="justify">
|
||||
It sends to the server a list with all the groups in a course
|
||||
to which the logged user wants to belong.
|
||||
to which the requester wants to belong.
|
||||
It tries to enroll the user in those groups if possible,
|
||||
and remove from the groups not in the list.
|
||||
If all the changes are not possible, no change is performed.
|
||||
|
@ -569,7 +570,7 @@
|
|||
<a name="getDirectoryTree"><h3 class="WS_FUNCTION"><code>getDirectoryTree</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns the full tree of a file zone (documents, shared files or marks) in a course or a group.
|
||||
The logged user must belong to the course or the group.
|
||||
The requester must belong to the course or the group.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -598,12 +599,12 @@
|
|||
or <a href="#getFile"><code>getFile</code></a>:
|
||||
<ul>
|
||||
<li>
|
||||
if the logged user is a student in the course/group,
|
||||
if the requester is a student in the course/group,
|
||||
the client should call <a href="#getMarks"><code>getMarks</code></a>
|
||||
to view the student's specific marks.
|
||||
</li>
|
||||
<li>
|
||||
if the logged user is a teacher in the course/group,
|
||||
if the requester is a teacher in the course/group,
|
||||
the client should call <a href="#getFile"><code>getFile</code></a>
|
||||
to download the HTML file with the marks of several students.
|
||||
</li>
|
||||
|
@ -656,7 +657,7 @@
|
|||
<p align="justify">
|
||||
This function must be called each time the user wants to download a file
|
||||
from a documents zone or a shared files zone in a course or a group.
|
||||
The logged user must belong to the course or group.
|
||||
The requester must belong to the course or group.
|
||||
The function counts the access as a visit to the file
|
||||
and returns information about the file.
|
||||
</p>
|
||||
|
@ -668,13 +669,22 @@
|
|||
<a href="#loginBySessionKey"><code>loginBySessionKey</code></a>.
|
||||
</li>
|
||||
<li><strong>fileCode</strong>: integer,
|
||||
corresponding to an element <code><code></code>
|
||||
of the XML tree returned by <a href="#getDirectoryTree"><code>getDirectoryTree</code></a>.
|
||||
If the file code corresponds to an HTML file of marks
|
||||
(<code>treeCode</code> = 3 in <a href="#getDirectoryTree"><code>getDirectoryTree</code></a>,
|
||||
the requester should be a student in the course/group.
|
||||
If the logged user is a teacher, the client should call
|
||||
<a href="#getMarks"><code>getMarks</code></a> instead <code>getFile</code>.
|
||||
corresponding to:
|
||||
<ul>
|
||||
<li>an element <code><code></code>
|
||||
of the XML tree returned by
|
||||
<a href="#getDirectoryTree"><code>getDirectoryTree</code></a>.
|
||||
</li>
|
||||
<li>the value of <code>eventCode</code>
|
||||
returned by <a href="#getNotifications"><code>getNotifications</code></a>
|
||||
if <code>eventType</code> is <var>documentFile</var> or <var>sharedFile</var>.
|
||||
</li>
|
||||
<li>the value of <code>eventCode</code>
|
||||
returned by <a href="#getNotifications"><code>getNotifications</code></a>
|
||||
if the requester is a teacher and
|
||||
<code>eventType</code> is <var>marksFile</var>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@ -701,10 +711,11 @@
|
|||
|
||||
<a name="getMarks"><h3 class="WS_FUNCTION"><code>getMarks</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns information about the marks (qualifications, scores) of the logged user (requester)
|
||||
Returns information about the marks (qualifications, scores) of the requester
|
||||
from a given HTML file of marks.
|
||||
This function is allowed only for students. The requester must be a student in the course/group.
|
||||
If the logged user is a teacher, the client should call
|
||||
This function is allowed <strong>only for students</strong>.
|
||||
The requester must be a student in the course/group.
|
||||
If the requester is a teacher, the client should call
|
||||
<a href="#getFile"><code>getFile</code></a> instead of <code>getMarks</code>.
|
||||
</p>
|
||||
<ul>
|
||||
|
@ -714,9 +725,18 @@
|
|||
<a href="#loginByUserPasswordKey"><code>loginByUserPasswordKey</code></a> or
|
||||
<a href="#loginBySessionKey"><code>loginBySessionKey</code></a>.</li>
|
||||
<li><strong>fileCode</strong>: integer,
|
||||
corresponding to an element <code><code></code>
|
||||
of the XML tree returned
|
||||
by <a href="#getDirectoryTree"><code>getDirectoryTree</code></a>.</li>
|
||||
corresponding to:
|
||||
<ul>
|
||||
<li>an element <code><code></code>
|
||||
of the XML tree returned by
|
||||
<a href="#getDirectoryTree"><code>getDirectoryTree</code></a>.
|
||||
</li>
|
||||
<li>the value of <code>eventCode</code>
|
||||
returned by <a href="#getNotifications"><code>getNotifications</code></a>
|
||||
if the requester is a student and
|
||||
<code>eventType</code> is <var>marksFile</var>.
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Returns a data structure with the following fields:
|
||||
|
@ -896,8 +916,8 @@
|
|||
|
||||
<a name="getUsers"><h3 class="WS_FUNCTION"><code>getUsers</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns the list of users of a given type (students or teachers)
|
||||
enrolled in a course and group (code of group <= 0 means the whole course).
|
||||
Returns the list of users with a given role (students or teachers)
|
||||
enrolled in a course (and optionally in some groups of the course).
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -905,11 +925,16 @@
|
|||
<li><strong>wsKey</strong>: string, identifier returned by
|
||||
<a href="#loginByUserPasswordKey"><code>loginByUserPasswordKey</code></a> or
|
||||
<a href="#loginBySessionKey"><code>loginBySessionKey</code></a>.</li>
|
||||
<li><strong>courseCode</strong>: integer.</li>
|
||||
<li><strong>groupCode</strong>: integer (<= 0 means the whole course).</li>
|
||||
<li><strong>userRole</strong>: integer, role of the users to be listed
|
||||
(2=students;
|
||||
3=teachers)
|
||||
<li><strong>courseCode</strong>: integer</li>
|
||||
<li><strong>groups</strong>: string.
|
||||
List of codes of groups (each code is an integer number, all the groups must belong to the course).<br />
|
||||
If the list is empty, the whole course will be used. </li>
|
||||
<li><strong>userRole</strong>: integer, role of the users to be listed,
|
||||
with one of the following 2 values:
|
||||
<ul>
|
||||
<li><var>2</var>: students.</li>
|
||||
<li><var>3</var>: teachers.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
@ -940,12 +965,82 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<a name="findUsers"><h3 class="WS_FUNCTION"><code>findUsers</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns a list of users whose full name contains the words given in filter.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
<ul>
|
||||
<li><strong>wsKey</strong>: string, identifier returned by
|
||||
<a href="#loginByUserPasswordKey"><code>loginByUserPasswordKey</code></a> or
|
||||
<a href="#loginBySessionKey"><code>loginBySessionKey</code></a>.</li>
|
||||
<li><strong>courseCode</strong>: integer
|
||||
(≤ 0 ⇒ users from the whole platform;
|
||||
> 0 ⇒ users from the course given by <code>courseCode</code>).
|
||||
</li>
|
||||
<li><strong>filter</strong>: string, one or several words separated by spaces.<br />
|
||||
Only those users whose full name will contain
|
||||
all the words in <code>filter</code> as substrings will be returned,
|
||||
provided that the two following conditions are satisfied:
|
||||
<ul>
|
||||
<li>The length of the longest word in <code>filter</code> must be ≥ a given <var>n</var>.
|
||||
Eg. For <var>n</var> = 3, "Bruce Lee" is valid, "B Le" is not valid.
|
||||
</li>
|
||||
<li>The total number of characters in all the words
|
||||
(not counting spaces) must be ≥ a given <var>m</var>.
|
||||
Eg. For <var>m</var> = 7, "Bruce Lee" is valid, but "Bruce" or "Lee" are not valid.
|
||||
</li>
|
||||
</ul>
|
||||
<var>n</var> and <var>m</var> can change in the server side.
|
||||
A client should delegate to the server.
|
||||
If any of these two conditions is not satisfied,
|
||||
a negative value is returned in <code>numUsers</code>, indicating filter too short.
|
||||
</li>
|
||||
<li><strong>userRole</strong>: integer, role of the users to be listed,
|
||||
with one of the following 4 values:
|
||||
<ul>
|
||||
<li><var>0</var>: unknown, any role (guests, students, teachers).</li>
|
||||
<li><var>1</var>: guests, not enrolled in any course.</li>
|
||||
<li><var>2</var>: students.</li>
|
||||
<li><var>3</var>: teachers.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Returns a data structure with the following fields:
|
||||
<ul>
|
||||
<li><strong>numUsers</strong>: integer, number of users found. If < 0 ⇒ filter is too short.</li>
|
||||
<li><strong>usersArray</strong>: list of elements,
|
||||
where each element is a data structure with the following fields:
|
||||
<ul>
|
||||
<li><strong>userCode</strong>: integer, unique identifier for each user.</li>
|
||||
<li><strong>userNickname</strong>: string, user's nickname (without @).</li>
|
||||
<li><strong>userID</strong>: string, DNI/passport of the user.
|
||||
If the requester has permission to see the user's ID, the ID is shown.
|
||||
If not, the ID is hidden.
|
||||
</li>
|
||||
<li><strong>userSurname1</strong>: string.</li>
|
||||
<li><strong>userSurname2</strong>: string.</li>
|
||||
<li><strong>userFirstname</strong>: string.</li>
|
||||
<li><strong>userPhoto</strong>: string
|
||||
with the full URL of a JPG image
|
||||
of size 150 (width) × 200 (height).
|
||||
If it is an empty string, the user
|
||||
has no photo or it can not be shown.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
|
||||
<a name="getAttendanceEvents"><h3 class="WS_FUNCTION"><code>getAttendanceEvents</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns the list of the attendance events in a course available for the logged user
|
||||
(associated to the whole course or to the groups to which the logged user belongs).
|
||||
Returns the list of the attendance events in a course available for the requester
|
||||
(associated to the whole course or to the groups to which the requester belongs).
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -992,7 +1087,7 @@
|
|||
<a name="sendAttendanceEvent"><h3 class="WS_FUNCTION"><code>sendAttendanceEvent</code></h3></a>
|
||||
<p align="justify">
|
||||
Sends an attendance event.
|
||||
The logged user must be a teacher in the course.
|
||||
The requester must be a teacher in the course.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -1034,7 +1129,7 @@
|
|||
<a name="getAttendanceUsers"><h3 class="WS_FUNCTION"><code>getAttendanceUsers</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns the list of users (students) in an attendance event.
|
||||
The logged user must be teacher in the selected course.
|
||||
The requester must be teacher in the selected course.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -1080,7 +1175,7 @@
|
|||
who have attended to an attendance event.
|
||||
All users in this list will be marked as present;
|
||||
other users formerly marked as present will be marked as absent when <code>setOthersAsAbsent</code> = 1.
|
||||
The logged user must be teacher in the selected course.
|
||||
The requester must be teacher in the selected course.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -1125,7 +1220,7 @@
|
|||
|
||||
<a name="getNotifications"><h3 class="WS_FUNCTION"><code>getNotifications</code></h3></a>
|
||||
<p align="justify">
|
||||
Returns the list of recent notifications for the logged user.
|
||||
Returns the list of recent notifications for the requester.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
@ -1151,13 +1246,39 @@
|
|||
When a user opens this notification,
|
||||
you should call <a href="#markNotificationsAsRead"><code>markNotificationsAsRead</code></a> with this value.</li>
|
||||
<li><strong>eventType</strong>: string,
|
||||
with one of the following 18 values:
|
||||
with one of the following 19 values:
|
||||
<ol>
|
||||
<li><var>documentFile</var>: document.</li>
|
||||
<li><var>sharedFile</var>: shared file.</li>
|
||||
<li><var>documentFile</var>: document.
|
||||
To download the file, clients can call
|
||||
<a href="#getFile"><code>getFile</code></a>
|
||||
with the value returned in <code>eventCode</code>
|
||||
as parameter <code>fileCode</code>.
|
||||
</li>
|
||||
<li><var>teachersFile</var>: teachers' file.</li>
|
||||
<li><var>sharedFile</var>: shared file.
|
||||
To download the file, clients can call
|
||||
<a href="#getFile"><code>getFile</code></a>
|
||||
with the value returned in <code>eventCode</code>
|
||||
as parameter <code>fileCode</code>.
|
||||
</li>
|
||||
<li><var>assignment</var>: assignment.</li>
|
||||
<li><var>examAnnouncement</var>: exam announcement.</li>
|
||||
<li><var>marksFile</var>: marks/grades file.</li>
|
||||
<li><var>marksFile</var>: marks/grades file.
|
||||
<ul>
|
||||
<li>If the requester is a student, <code>content</code>
|
||||
will contain a full HTML page containing the marks of the requester.
|
||||
The client application can also call <a href="#getMarks"><code>getMarks</code></a>
|
||||
with the value returned in <code>eventCode</code>
|
||||
as parameter <code>fileCode</code>.
|
||||
</li>
|
||||
<li>If the requester is a teacher,
|
||||
and he/she wants to download the file,
|
||||
the client application can call <a href="#getFile"><code>getFile</code></a>
|
||||
with the value returned in <code>eventCode</code>
|
||||
as parameter <code>fileCode</code>.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><var>enrollmentStudent</var>: I have been enrolled in a course as a student.</li>
|
||||
<li><var>enrollmentTeacher</var>: I have been enrolled in a course as a teacher.</li>
|
||||
<li><var>enrollmentRequest</var>: enrollment request.</li>
|
||||
|
@ -1254,7 +1375,7 @@
|
|||
<a name="sendNotice"><h3 class="WS_FUNCTION"><code>sendNotice</code></h3></a>
|
||||
<p align="justify">
|
||||
Sends a public notice (yellow note) to a course.
|
||||
The logged user must be a teacher in the course.
|
||||
The requester must be a teacher in the course.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Call parameters:
|
||||
|
|
1254
html/ws/swad.wsdl
1254
html/ws/swad.wsdl
File diff suppressed because it is too large
Load Diff
|
@ -2659,7 +2659,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* ActReqMsgUsr */{ 26, 3,TabMsg,ActReqMsgUsr ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_FormMsgUsrs ,"editnewmsg64x64.gif" },
|
||||
/* ActSeeRcvMsg */{ 3, 4,TabMsg,ActSeeRcvMsg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_ShowRecMsgs ,"recmsg64x64.gif" },
|
||||
/* ActSeeSntMsg */{ 70, 5,TabMsg,ActSeeSntMsg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_ShowSntMsgs ,"sntmsg64x64.gif" },
|
||||
/* ActMaiStd */{ 100, 6,TabMsg,ActMaiStd ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_ListEMails ,"email64x64.gif" },
|
||||
/* ActMaiStd */{ 100, 6,TabMsg,ActMaiStd ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Mai_ListEMails ,"email64x64.gif" },
|
||||
|
||||
// Actions not in menu:
|
||||
/* ActWriAnn */{1237,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowFormAnnouncement ,NULL},
|
||||
|
|
|
@ -126,20 +126,23 @@
|
|||
|
||||
// TODO: Put Raúl Hinojosa (iSWAD developer) in a row of marks file of EC (B,C) and publish file
|
||||
// TODO: Check if white lines are correct when composing a message and clicking in "Show more recipients"
|
||||
// TODO: Fill hidden subject and content of message in selectors of class photo / list
|
||||
// TODO: Add path to information about file in notifications
|
||||
|
||||
// TODO: Add a new WS function to count the nunmber of users to return in call to function getUsers
|
||||
// TODO: Add new WS functions to count the number of users to return in call to functions getUsers/findUsers?
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.237 (2016-07-01)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.237.1 (2016-07-01)"
|
||||
#define CSS_FILE "swad15.229.css"
|
||||
#define JS_FILE "swad15.237.js"
|
||||
|
||||
// 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.237.1: Jul 01, 2015 Code refactoring in function to send e-mail to students. (203254 lines)
|
||||
Version 15.237: Jul 01, 2015 The form "Show more recipients" now have a hidden field with the content. (203243 lines)
|
||||
Version 15.236: Jun 30, 2015 The form "Show more recipients" now have a hidden field with the subject. (? lines)
|
||||
Version 15.235.1: Jun 30, 2015 Minor change in icon to download files. (203206 lines)
|
||||
|
|
133
swad_mail.c
133
swad_mail.c
|
@ -769,6 +769,139 @@ static void Mai_CreateMailDomain (struct Mail *Mai)
|
|||
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** List the e-mails of all the students to creates an e-mail message *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Mai_MAX_LENGTH_STR_ADDR (32*5000)
|
||||
|
||||
void Mai_ListEMails (void)
|
||||
{
|
||||
extern const char *The_ClassFormBold[The_NUM_THEMES];
|
||||
extern const char *Txt_Students_who_have_accepted_and_who_have_e_mail;
|
||||
extern const char *Txt_X_students_who_have_e_mail;
|
||||
extern const char *Txt_X_students_who_have_accepted_and_who_have_e_mail;
|
||||
extern const char *Txt_Create_e_mail_message;
|
||||
unsigned NumUsr;
|
||||
unsigned NumStdsWithEmail = 0;
|
||||
unsigned NumAcceptedStdsWithEmail = 0;
|
||||
char StrAddresses[Mai_MAX_LENGTH_STR_ADDR+1];
|
||||
unsigned int LengthStrAddr = 0;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Form to select groups *****/
|
||||
Grp_ShowFormToSelectSeveralGroups (ActMaiStd);
|
||||
|
||||
/***** Get and order list of students in this course *****/
|
||||
Usr_GetListUsrs (Rol_STUDENT,Sco_SCOPE_CRS);
|
||||
|
||||
if (Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs)
|
||||
{
|
||||
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs))
|
||||
{
|
||||
/***** Start of the frame used to list the e-mails *****/
|
||||
Lay_StartRoundFrameTable (NULL,0,Txt_Students_who_have_accepted_and_who_have_e_mail);
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT_SMALL LEFT_MIDDLE\">");
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/***** List the students' e-mail addresses *****/
|
||||
for (NumUsr = 0;
|
||||
NumUsr < Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
UsrDat.UsrCod = Gbl.Usrs.LstUsrs[Rol_STUDENT].Lst[NumUsr].UsrCod;
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // If user's data exist...
|
||||
{
|
||||
UsrDat.Accepted = Gbl.Usrs.LstUsrs[Rol_STUDENT].Lst[NumUsr].Accepted;
|
||||
if (UsrDat.Email[0])
|
||||
{
|
||||
NumStdsWithEmail++;
|
||||
if (UsrDat.Accepted) // If student has e-mail and has accepted
|
||||
{
|
||||
if (NumAcceptedStdsWithEmail > 0)
|
||||
{
|
||||
fprintf (Gbl.F.Out,", ");
|
||||
LengthStrAddr += 2;
|
||||
if (LengthStrAddr <= Mai_MAX_LENGTH_STR_ADDR)
|
||||
strcat (StrAddresses,",");
|
||||
else
|
||||
Lay_ShowErrorAndExit ("The space allocated to store e-mail addresses is full.");
|
||||
}
|
||||
LengthStrAddr += strlen (UsrDat.Email);
|
||||
if (LengthStrAddr <= Mai_MAX_LENGTH_STR_ADDR)
|
||||
strcat (StrAddresses,UsrDat.Email);
|
||||
else
|
||||
Lay_ShowErrorAndExit ("The space allocated to store e-mail addresses is full.");
|
||||
|
||||
fprintf (Gbl.F.Out,"<a href=\"mailto:%s?subject=%s\">%s</a>",
|
||||
UsrDat.Email,Gbl.CurrentCrs.Crs.FullName,UsrDat.Email);
|
||||
|
||||
NumAcceptedStdsWithEmail++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** Show a message with the number of students with e-mail ****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT CENTER_MIDDLE\">");
|
||||
fprintf (Gbl.F.Out,Txt_X_students_who_have_e_mail,
|
||||
NumStdsWithEmail,
|
||||
((float) NumStdsWithEmail /
|
||||
(float) Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs) * 100.0,
|
||||
Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs);
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** Show a message with the number of students who have accepted and have e-mail ****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT CENTER_MIDDLE\">");
|
||||
fprintf (Gbl.F.Out,Txt_X_students_who_have_accepted_and_who_have_e_mail,
|
||||
NumAcceptedStdsWithEmail,
|
||||
((float) NumAcceptedStdsWithEmail /
|
||||
(float) Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs) * 100.0,
|
||||
Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs);
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** End of the frame used to list the e-mails *****/
|
||||
Lay_EndRoundFrameTable ();
|
||||
|
||||
/***** Icon to open the client e-mail program *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">"
|
||||
"<a href=\"mailto:%s?subject=%s&cc=%s&bcc=%s\""
|
||||
" title=\"%s\" class=\"%s\">",
|
||||
Gbl.Usrs.Me.UsrDat.Email,
|
||||
Gbl.CurrentCrs.Crs.FullName,
|
||||
Gbl.Usrs.Me.UsrDat.Email,
|
||||
StrAddresses,
|
||||
Txt_Create_e_mail_message,
|
||||
The_ClassFormBold[Gbl.Prefs.Theme]);
|
||||
Lay_PutIconWithText ("editnewmsg16x16.gif",
|
||||
Txt_Create_e_mail_message,
|
||||
Txt_Create_e_mail_message);
|
||||
fprintf (Gbl.F.Out,"</a>"
|
||||
"</div>");
|
||||
}
|
||||
}
|
||||
else
|
||||
Usr_ShowWarningNoUsersFound (Rol_STUDENT);
|
||||
|
||||
/***** Free memory for students list *****/
|
||||
Usr_FreeUsrsList (Rol_STUDENT);
|
||||
|
||||
/***** Free memory for list of selected groups *****/
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Check whether an e-mail address if valid *******************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -66,6 +66,8 @@ void Mai_RenameMailDomainShort (void);
|
|||
void Mai_RenameMailDomainFull (void);
|
||||
void Mai_RecFormNewMailDomain (void);
|
||||
|
||||
void Mai_ListEMails (void); // Creates an e-mail message to students
|
||||
|
||||
bool Mai_CheckIfEmailIsValid (const char *Email);
|
||||
bool Mai_GetEmailFromUsrCod (struct UsrData *UsrDat);
|
||||
long Mai_GetUsrCodFromEmail (const char *Email);
|
||||
|
|
123
swad_message.c
123
swad_message.c
|
@ -57,7 +57,6 @@ extern struct Globals Gbl;
|
|||
/*****************************************************************************/
|
||||
|
||||
#define Msg_MAX_LENGTH_MESSAGES_QUERY 4096
|
||||
#define Msg_MAX_LENGTH_STR_ADDR (32*5000)
|
||||
|
||||
// Forum images will be saved with:
|
||||
// - maximum width of Msg_IMAGE_SAVED_MAX_HEIGHT
|
||||
|
@ -142,128 +141,6 @@ static void Msg_PutFormToUnbanSender (struct UsrData *UsrDat);
|
|||
static void Msg_UnbanSender (void);
|
||||
static bool Msg_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod);
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* List the e-mails of all the students ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_ListEMails (void)
|
||||
{
|
||||
extern const char *The_ClassFormBold[The_NUM_THEMES];
|
||||
extern const char *Txt_Students_who_have_accepted_and_who_have_e_mail;
|
||||
extern const char *Txt_X_students_who_have_e_mail;
|
||||
extern const char *Txt_X_students_who_have_accepted_and_who_have_e_mail;
|
||||
extern const char *Txt_Create_e_mail_message;
|
||||
unsigned NumUsr,NumStdsWithEmail = 0,NumAcceptedStdsWithEmail = 0;
|
||||
char StrAddresses[Msg_MAX_LENGTH_STR_ADDR+1];
|
||||
unsigned int LengthStrAddr = 0;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Form to select groups *****/
|
||||
Grp_ShowFormToSelectSeveralGroups (ActMaiStd);
|
||||
|
||||
/***** Get and order list of students in this course *****/
|
||||
Usr_GetListUsrs (Rol_STUDENT,Sco_SCOPE_CRS);
|
||||
|
||||
if (Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs)
|
||||
{
|
||||
if (Usr_GetIfShowBigList (Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs))
|
||||
{
|
||||
/***** Start of the frame used to list the e-mails *****/
|
||||
Lay_StartRoundFrameTable (NULL,0,Txt_Students_who_have_accepted_and_who_have_e_mail);
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT_SMALL LEFT_MIDDLE\">");
|
||||
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
||||
/***** List the students' e-mail addresses *****/
|
||||
for (NumUsr = 0;
|
||||
NumUsr < Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
UsrDat.UsrCod = Gbl.Usrs.LstUsrs[Rol_STUDENT].Lst[NumUsr].UsrCod;
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // If user's data exist...
|
||||
{
|
||||
UsrDat.Accepted = Gbl.Usrs.LstUsrs[Rol_STUDENT].Lst[NumUsr].Accepted;
|
||||
if (UsrDat.Email[0])
|
||||
{
|
||||
NumStdsWithEmail++;
|
||||
if (UsrDat.Accepted) // If student has e-mail and has accepted
|
||||
{
|
||||
if (NumAcceptedStdsWithEmail > 0)
|
||||
{
|
||||
fprintf (Gbl.F.Out,", ");
|
||||
LengthStrAddr += 2;
|
||||
if (LengthStrAddr <= Msg_MAX_LENGTH_STR_ADDR)
|
||||
strcat (StrAddresses,",");
|
||||
else
|
||||
Lay_ShowErrorAndExit ("The space allocated to store e-mail addresses is full.");
|
||||
}
|
||||
LengthStrAddr += strlen (UsrDat.Email);
|
||||
if (LengthStrAddr <= Msg_MAX_LENGTH_STR_ADDR)
|
||||
strcat (StrAddresses,UsrDat.Email);
|
||||
else
|
||||
Lay_ShowErrorAndExit ("The space allocated to store e-mail addresses is full.");
|
||||
|
||||
fprintf (Gbl.F.Out,"<a href=\"mailto:%s?subject=%s\">%s</a>",
|
||||
UsrDat.Email,Gbl.CurrentCrs.Crs.FullName,UsrDat.Email);
|
||||
|
||||
NumAcceptedStdsWithEmail++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** Free memory used for user's data *****/
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
|
||||
/***** Show a message with the number of students with e-mail ****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT CENTER_MIDDLE\">");
|
||||
fprintf (Gbl.F.Out,Txt_X_students_who_have_e_mail,
|
||||
NumStdsWithEmail,
|
||||
((float) NumStdsWithEmail / (float) Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs) * 100.0,Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs);
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** Show a message with the number of students who have accepted and have e-mail ****/
|
||||
fprintf (Gbl.F.Out,"<tr>"
|
||||
"<td class=\"DAT CENTER_MIDDLE\">");
|
||||
fprintf (Gbl.F.Out,Txt_X_students_who_have_accepted_and_who_have_e_mail,
|
||||
NumAcceptedStdsWithEmail,
|
||||
((float) NumAcceptedStdsWithEmail /
|
||||
(float) Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs) * 100.0,
|
||||
Gbl.Usrs.LstUsrs[Rol_STUDENT].NumUsrs);
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>");
|
||||
|
||||
/***** End of the frame used to list the e-mails *****/
|
||||
Lay_EndRoundFrameTable ();
|
||||
|
||||
/***** Icon to open the client e-mail program *****/
|
||||
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_MENU\">"
|
||||
"<a href=\"mailto:%s?subject=%s&cc=%s&bcc=%s\" title=\"%s\" class=\"%s\">",
|
||||
Gbl.Usrs.Me.UsrDat.Email,
|
||||
Gbl.CurrentCrs.Crs.FullName,Gbl.Usrs.Me.UsrDat.Email,StrAddresses,
|
||||
Txt_Create_e_mail_message,
|
||||
The_ClassFormBold[Gbl.Prefs.Theme]);
|
||||
Lay_PutIconWithText ("editnewmsg16x16.gif",Txt_Create_e_mail_message,Txt_Create_e_mail_message);
|
||||
fprintf (Gbl.F.Out,"</a>"
|
||||
"</div>");
|
||||
}
|
||||
}
|
||||
else
|
||||
Usr_ShowWarningNoUsersFound (Rol_STUDENT);
|
||||
|
||||
/***** Free memory for students list *****/
|
||||
Usr_FreeUsrsList (Rol_STUDENT);
|
||||
|
||||
/***** Free memory for list of selected groups *****/
|
||||
Grp_FreeListCodSelectedGrps ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Put a form to write a new message to users ****************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -56,8 +56,6 @@ typedef enum
|
|||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_ListEMails (void); // Creates an e-mail message to students
|
||||
|
||||
void Msg_FormMsgUsrs (void);
|
||||
void Msg_PutHiddenParamAnotherRecipient (const struct UsrData *UsrDat);
|
||||
void Msg_PutHiddenParamOtherRecipients (void);
|
||||
|
|
Loading…
Reference in New Issue