From 66bb166ecc049cf85a0f090093ad278c535ecbce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 6 Apr 2015 23:25:23 +0200 Subject: [PATCH] Version 14.109 --- html/changelog/index.html | 1225 ++++++++++++++++- .../img/lineas-codigo-modulo-principal.png | Bin 15285 -> 22931 bytes html/source/index.html | 4 +- swad_changelog.h | 3 +- swad_file_browser.c | 119 +- swad_global.h | 2 +- swad_text.c | 50 +- 7 files changed, 1343 insertions(+), 60 deletions(-) diff --git a/html/changelog/index.html b/html/changelog/index.html index 42e74efea..ce2907882 100644 --- a/html/changelog/index.html +++ b/html/changelog/index.html @@ -58,13 +58,1236 @@ - Last update: Jan 04, 2015 + Last update: April 04, 2015
+
Version 14.108.4: Apr 04, 2015
+
+ Changes in statistic about institutions. (184267 lines) +
+
Version 14.108.3: Apr 03, 2015
+
+ Fixed bug in statistic about institutions. (184144 lines) +
+
Version 14.108.2: Apr 03, 2015
+
+ Fixed bug in statistic about institutions. (184142 lines) +
+
Version 14.108.1: Apr 03, 2015
+
+ Fixed bug in statistic about institutions. (184137 lines) +
+
Version 14.108: Apr 03, 2015
+
+ New statistic (figure) about institutions. (184136 lines) +
+
Version 14.107.8: Apr 03, 2015
+
+ Changes in statistics (figures about hierarchy). (183774 lines) +
+
Version 14.107.7: Apr 03, 2015
+
+ Changes in layout of sent / received messages. (183753 lines) +
+
Version 14.107.6: Apr 03, 2015
+
+ Changes in layout of form to change password. (183748 lines) +
+
Version 14.107.5: Apr 03, 2015
+
+ Changes in layout of form to change photo. (183718 lines) +
+
Version 14.107.4: Apr 03, 2015
+
+ Fixed bugs when changing user's ID, password and photo. (183699 lines) +
+
Version 14.107.3: Apr 02, 2015
+
+ Changes in icons in attendance events.
+ Fixed bug in assignments. (183702 lines) +
+
Version 14.107.2: Apr 02, 2015
+
+ Changes in icons in surveys. (183717 lines) +
+
Version 14.107.1: Apr 02, 2015
+
+ Changes in icons in assignments. (183748 lines) +
+
Version 14.107: Apr 02, 2015
+
+ Refactoring contextual menus. (183776 lines) +
+
Version 14.106.2: Apr 02, 2015
+
+ Refactoring some contextual menus. (183747 lines) +
+
Version 14.106.1: Apr 02, 2015
+
+ Changes in layout of icon with links. (183925 lines) +
+
Version 14.106: Apr 02, 2015
+
+ Lot of changes in layout of icon with links. (183909 lines) +
+
Version 14.105.3: Apr 01, 2015
+
+ Changes in layout of course configuration and exam announcements. (183912 lines) +
+
Version 14.105.2: Mar 30, 2015
+
+ Some messages translated. (183941 lines) +
+
Version 14.105.1: Mar 30, 2015
+
+ Shared record card is shown after updating course record card. (183937 lines) +
+
Version 14.105: Mar 30, 2015
+
+ Removed option in the assessment tab to view course card. (183932 lines)
+ 1 change necessary in database:
+ +UPDATE actions SET Obsolete='Y' WHERE ActCod='299'; + +
+
Version 14.104.6: Mar 30, 2015
+
+ Changes in course cards. (184030 lines) +
+
Version 14.104.5: Mar 29, 2015
+
+ Changes in course cards. (184023 lines) +
+
Version 14.104.4: Mar 29, 2015
+
+ Changes in layout of record cards. (184047 lines) +
+
Version 14.104.3: Mar 29, 2015
+
+ Changes in layout of course record cards. (184048 lines) +
+
Version 14.104.2: Mar 29, 2015
+
+ Changes in layout of record cards. (184042 lines) +
+
Version 14.104.1: Mar 29, 2015
+
+ Changes in layout of record cards. (184039 lines) +
+
Version 14.104: Mar 29, 2015
+
+ Changes in layout of record cards. (184021 lines) +
+
Version 14.103: Mar 29, 2015
+
+ New table to ban users out of ranking. (184014 lines)
+ 1 change necessary in database:
+ +CREATE TABLE IF NOT EXISTS usr_banned (UsrCod INT NOT NULL,UNIQUE INDEX(UsrCod)); + +
+
Version 14.102.12:Mar 28, 2015
+
+ Some help messages changed. (183953 lines) +
+
Version 14.102.11:Mar 28, 2015
+
+ Some help messages changed. (183943 lines) +
+
Version 14.102.10:Mar 28, 2015
+
+ Create user's figures when a user account is created. (183942 lines) +
+
Version 14.102.9: Mar 28, 2015
+
+ Changes in help messages while filling in user's record card. (183927 lines) +
+
Version 14.102.8: Mar 27, 2015
+
+ Fixed bug in form to edit account. (183989 lines) +
+
Version 14.102.7: Mar 27, 2015
+
+ Minor change in help text. (183988 lines) +
+
Version 14.102.6: Mar 27, 2015
+
+ Changes in layout of sign up. (183987 lines) +
+
Version 14.102.5: Mar 27, 2015
+
+ Changes in layout of log in. (183909 lines) +
+
Version 14.102.4: Mar 25, 2015
+
+ Fixed bug in ranking. (183883 lines) +
+
Version 14.102.3: Mar 25, 2015
+
+ Fixed bug in record. (183882 lines) +
+
Version 14.102.2: Mar 25, 2015
+
+ Fixed bug in record. (183882 lines) +
+
Version 14.102.1: Mar 24, 2015
+
+ Fixed minor bugs. (183871 lines) +
+
Version 14.102: Mar 24, 2015
+
+ Changes in some update buttons. (183865 lines) +
+
Version 14.101: Mar 24, 2015
+
+ Fixed bug in form to create a new account.
+ Fixed bug in statistics.
+ New design of buttons. (183753 lines) +
+
Version 14.100.3: Mar 24, 2015
+
+ Fixed bug in link to institution in record. (183753 lines) +
+
Version 14.100.2: Mar 24, 2015
+
+ Changes in profile.
+ Link to institution in record. (183752 lines) +
+
Version 14.100.1: Mar 24, 2015
+
+ Only font-awesome icons for notifications. (183724 lines) +
+
Version 14.100: Mar 23, 2015
+
+ Notification when a user gets a new follower. (183723 lines)
+ 1 change necessary in database:
+ +UPDATE usr_data SET NotifNtfEvents=(NotifNtfEvents | 0x2000) WHERE NotifNtfEvents<>0; + +
+
Version 14.99.2: Mar 23, 2015
+
+ Ranking attending to number of followers. (183614 lines) +
+
Version 14.99.1: Mar 21, 2015
+
+ Change in file_view to accelerate queries. (183521 lines)
+ 1 change necessary in database:
+ +CREATE INDEX UsrCod ON file_view (UsrCod); + +
+
Version 14.99: Mar 21, 2015
+
+ Icons instead of text in user's profile.
+ Lot of changes in layout of user's profile. (183519 lines) +
+
Version 14.98.5: Mar 21, 2015
+
+ New icons for some options. (183431 lines) +
+
Version 14.98.4: Mar 20, 2015
+
+ Fixed bugs in marks. (183430 lines) +
+
Version 14.98.3: Mar 19, 2015
+
+ Changes in user's profile to speedup page generation. (183397 lines) +
+
Version 14.98.2: Mar 19, 2015
+
+ Fixed bug in record related to follow/unfollow. (183366 lines) +
+
Version 14.98.1: Mar 19, 2015
+
+ Changes in lists of following and followers. (183360 lines) +
+
Version 14.98: Mar 19, 2015
+
+ Show lists of following and followers. (183300 lines) +
+
Version 14.97: Mar 18, 2015
+
+ Show number of following and followers in user's profile. (183130 lines) +
+
Version 14.96.3: Mar 18, 2015
+
+ Changes in record cards. (183017 lines) +
+
Version 14.96.2: Mar 18, 2015
+
+ Changes in record cards. (183011 lines) +
+
Version 14.96.1: Mar 18, 2015
+
+ Changes in user's profile. (183015 lines) +
+
Version 14.96: Mar 18, 2015
+
+ New layout in record cards. (183011 lines) +
+
Version 14.95.1: Mar 18, 2015
+
+ Show user's profile after followin or unfollowing. (182985 lines) +
+
Version 14.95: Mar 18, 2015
+
+ New module swad_follow for follow users. (182903 lines)
+ 1 change necessary in Makefile:
+ +Add swad_follow.o to list of object files
+
+ 3 changes necessary in database:
+ +CREATE TABLE IF NOT EXISTS usr_follow (FollowerCod INT NOT NULL,FollowedCod INT NOT NULL,FollowTime DATETIME NOT NULL,UNIQUE INDEX (FollowerCod,FollowedCod),UNIQUE INDEX (FollowedCod,FollowerCod),INDEX (FollowTime));
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1410','es','N','Seguir a un usuario');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1411','es','N','Dejar de seguir a un usuario'); +
+
+
Version 14.94.4: Mar 17, 2015
+
+ Changes in ranking layout. (182679 lines) +
+
Version 14.94.3: Mar 17, 2015
+
+ Changes in record fonts. (182667 lines) +
+
Version 14.94.2: Mar 17, 2015
+
+ Fixed bug in ranking. (182668 lines) +
+
Version 14.94.1: Mar 17, 2015
+
+ Fixed bug in user's profile. (182667 lines) +
+
Version 14.94: Mar 17, 2015
+
+ Ranking for downloads, forum posts and messages in user's profile. (182666 lines) +
+
Version 14.93.4: Mar 17, 2015
+
+ Links in user's figures to ranking. (182661 lines) +
+
Version 14.93.3: Mar 16, 2015
+
+ Changes in rankings. (182630 lines) +
+
Version 14.93.2: Mar 16, 2015
+
+ New rankings for downloads, forum posts and messages sent. (182628 lines) +
+
Version 14.93.1: Mar 16, 2015
+
+ Photos and links to users' profiles in users' ranking. (182560 lines) +
+
Version 14.93: Mar 16, 2015
+
+ Users' ranking. (182527 lines) +
+
Version 14.92.2: Mar 15, 2015
+
+ Fixed minor bug in photo edition. (182208 lines) +
+
Version 14.92.1: Mar 14, 2015
+
+ Changes on request of a nickname to view user's profile. (182205 lines) +
+
Version 14.92: Mar 14, 2015
+
+ New module swad_profile for public user's profile. (182202 lines)
+ 1 change necessary in Makefile:
+ +Add swad_profile.o to list of object files + +
+
Version 14.91.3: Mar 14, 2015
+
+ By default, the logged user's nickname is shown in form to view user's profile.
+ Action to view QR code is now public. (182108 lines) +
+
Version 14.91.2: Mar 14, 2015
+
+ URL of public profile is embedded under user's photo in record card.
+ Changes in layout of record card. (182124 lines) +
+
Version 14.91.1: Mar 14, 2015
+
+ Current figures separated from historic figures in layout of public user profile.
+ Show only number of files, not folder or links. (182112 lines) +
+
Version 14.91: Mar 14, 2015
+
+ Statistics for number of file views added to user figures. (182091 lines)
+ 2 changes necessary in database:
+ +ALTER TABLE usr_figures ADD COLUMN NumFileViews INT NOT NULL DEFAULT -1 AFTER NumClicks;
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1409','es','N','Calcular número de descargas de archivos'); +
+
+
Version 14.90.4: Mar 13, 2015
+
+ Changes in layout of public user profile. (181885 lines) +
+
Version 14.90.3: Mar 13, 2015
+
+ Fixed bug in connected users when the scope is a country. (181884 lines) +
+
Version 14.90.2: Mar 13, 2015
+
+ Fixed minor bug in layout of user's figures. (181831 lines) +
+
Version 14.90.1: Mar 13, 2015
+
+ Fixed bug in form used to upload files. (181827 lines) +
+
Version 14.90: Mar 13, 2015
+
+ Animated gif icon when calculating user's figures.
+ Changes in all submit links. (181826 lines) +
+
Version 14.89.1: Mar 13, 2015
+
+ Optimization in database query for first click time. (181771 lines) +
+
Version 14.89: Mar 13, 2015
+
+ Lots of changes related with forms and photos. (181769 lines) +
+
Version 14.88: Mar 12, 2015
+
+ Changes in layout of public user profile. (181718 lines) +
+
Version 14.87.4: Mar 11, 2015
+
+ Added indexes to usr_figures. (181629 lines)
+ 2 changes necessary in database:
+ +CREATE INDEX FirstClickTime ON usr_figures (FirstClickTime);
+CREATE INDEX NumClicks ON usr_figures (NumClicks); +
+
+
Version 14.87.3: Mar 11, 2015
+
+ Fix bug comparing first click dates in user's figures. (181623 lines) +
+
Version 14.87.2: Mar 11, 2015
+
+ Fix bug comparing first click dates in user's figures. (181614 lines) +
+
Version 14.87.1: Mar 11, 2015
+
+ Fix style in CSS and record. (181613 lines) +
+
Version 14.87: Mar 11, 2015
+
+ Ranking according to the number of clicks. (181611 lines) +
+
Version 14.86: Mar 11, 2015
+
+ Show user's figures per days. (181525 lines) +
+
Version 14.85.2: Mar 11, 2015
+
+ Refactoring in user's figures. (181478 lines) +
+
Version 14.85.1: Mar 11, 2015
+
+ Remove user's figures when removing user's account. (181472 lines) +
+
Version 14.85: Mar 11, 2015
+
+ Number of messages sent is stored in user's figures. (181457 lines)
+ 2 changes necessary in database:
+ +ALTER TABLE usr_figures ADD COLUMN NumForPst INT NOT NULL DEFAULT -1 AFTER NumClicks;
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1408','es','N','Calcular número de mensajes en foros'); +
+
+
Version 14.84: Mar 10, 2015
+
+ Number of messages sent is stored in user's figures. (181374 lines)
+ 2 changes necessary in database:
+ +ALTER TABLE usr_figures ADD COLUMN NumMsgSnt INT NOT NULL DEFAULT -1 AFTER NumClicks;
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1407','es','N','Calcular número de mensajes enviados'); +
+
+
Version 14.83: Mar 10, 2015
+
+ New action to compute first click when not available in public profile. (181287 lines)
+ 3 changes necessary in database:
+ +ALTER TABLE usr_figures CHANGE COLUMN NumClicks NumClicks INT NOT NULL DEFAULT -1;
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1405','es','N','Calcular fecha del primer clic');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1406','es','N','Calcular número de clics'); +
+
+
Version 14.82.1: Mar 10, 2015
+
+ Added new social networks. (181143 lines)
+ 1 change necessary in database:
+ +ALTER TABLE usr_webs CHANGE Web Web ENUM('www', '500px', 'delicious', 'deviantart', 'diaspora', 'edmodo', 'facebook', 'flickr', 'foursquare', 'github', 'googleplus', 'googlescholar', 'instagram', 'linkedin', 'paperli', 'pinterest', 'quitter', 'researchgate', 'scoopit', 'slideshare', 'storify', 'tumblr', 'twitter', 'wikipedia', 'youtube') NOT NULL; + +
+
Version 14.82: Mar 10, 2015
+
+ New database table usr_figures. (179898 lines)
+ 1 change necessary in database:
+ +CREATE TABLE IF NOT EXISTS usr_figures (UsrCod INT NOT NULL,FirstClickTime DATETIME NOT NULL,NumClicks INT NOT NULL DEFAULT 0,PRIMARY KEY(UsrCod)); + +
+
Version 14.81.4: Mar 09, 2015
+
+ Information about number of public files in user's public profile. (179733 lines) +
+
Version 14.81.3: Mar 09, 2015
+
+ Information about number of files in user's public profile. (179670 lines) +
+
Version 14.81.2: Mar 09, 2015
+
+ Information about number of courses in user's public profile. (179641 lines) +
+
Version 14.81.1: Mar 09, 2015
+
+ Information about number of messages sent in user's public profile. (179545 lines) +
+
Version 14.81: Mar 09, 2015
+
+ Information about number of forum posts in user's public profile. (179512 lines) +
+
Version 14.80.19: Mar 09, 2015
+
+ Fixed bug in web service, reported by Juan Miguel Boyero Corral. (179482 lines) +
+
Version 14.80.18: Mar 09, 2015
+
+ Fixed bug in statistic of degrees and courses. (179481 lines) +
+
Version 14.80.17: Mar 09, 2015
+
+ Scope country for statistic of users. (179480 lines) +
+
Version 14.80.16: Mar 09, 2015
+
+ Scope country for statistic of degrees and courses. (179439 lines) +
+
Version 14.80.15: Mar 09, 2015
+
+ Scope country for statistic of webs / social networks. (179393 lines) +
+
Version 14.80.14: Mar 09, 2015
+
+ Scope country for statistic of OERs. (179379 lines) +
+
Version 14.80.13: Mar 09, 2015
+
+ Scope country for statistic of assignments. (179362 lines) +
+
Version 14.80.12: Mar 09, 2015
+
+ Scope country for statistic of tests. (179340 lines) +
+
Version 14.80.11: Mar 09, 2015
+
+ Scope country for statistic of notifications. (179267 lines) +
+
Version 14.80.10: Mar 09, 2015
+
+ Scope country for statistic of notices. (179211 lines) +
+
Version 14.80.9: Mar 09, 2015
+
+ Scope country for statistic of messages. (179187 lines) +
+
Version 14.80.8: Mar 09, 2015
+
+ Scope country for statistic of forums. (179138 lines) +
+
Version 14.80.7: Mar 09, 2015
+
+ Scope country for statistic of surveys. (179021 lines) +
+
Version 14.80.6: Mar 09, 2015
+
+ Scope country for statistic of columns. (178987 lines) +
+
Version 14.80.5: Mar 09, 2015
+
+ Scope country for statistic of menu. (178974 lines) +
+
Version 14.80.4: Mar 09, 2015
+
+ Scope country for statistic of icon set. (178961 lines) +
+
Version 14.80.3: Mar 09, 2015
+
+ Scope country for statistic of theme. (178948 lines) +
+
Version 14.80.2: Mar 09, 2015
+
+ Scope country for statistic of layout. (178936 lines) +
+
Version 14.80.1: Mar 09, 2015
+
+ Scope country for statistic of language. (178923 lines) +
+
Version 14.80: Mar 09, 2015
+
+ New statistic for privacy. (178909 lines) +
+
Version 14.79.6: Mar 08, 2015
+
+ Check if file "swad.lock" exists to disable SWAD. (178736 lines) +
+
Version 14.79.5: Mar 08, 2015
+
+ Fixed bug when refreshing connected users. (178730 lines) +
+
Version 14.79.4: Mar 07, 2015
+
+ Parameter "CtyCod" is renamed to "cty".
+ Parameter "InsCod" is renamed to "ins".
+ Parameter "CtrCod" is renamed to "ctr".
+ Parameter "DegCod" is renamed to "deg".
+ Parameter "CrsCod" is renamed to "crs", but "CrsCod" is allowed for compatibility with old links.
+ Parameter "Usr" is renamed to "usr".
+ Parameter "Layout" is not allowed with GET method.
+ Parameter "IdSes" is renamed to "ses".
+ Parameter "MailKey" is renamed to "key". (178699 lines) +
+
Version 14.79.3: Mar 07, 2015
+
+ Parameter "UsrNick" is renamed to "Usr".
+ URL is shown in public profile.
+ Language in direct URLs. (178677 lines) +
+
Version 14.79.2: Mar 06, 2015
+
+ Public profile is shown depending on visibility. (178759 lines) +
+
Version 14.79.1: Mar 06, 2015
+
+ Add options to change visibility of public profile. (178769 lines)
+ 3 changes necessary in database:
+ +ALTER TABLE usr_data ADD COLUMN ProfileVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user' AFTER PhotoVisibility;
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1403','es','N','Editar privacidad');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1404','es','N','Cambiar privacidad perfil público'); +
+
+
Version 14.79: Mar 06, 2015
+
+ New module swad_privacy. (178678 lines)
+ 1 change necessary in Makefile:
+ +Add swad_privacy.o to list of object files + +
+
Version 14.78.3: Mar 06, 2015
+
+ Changes in messages about privacity. (178631 lines) +
+
Version 14.78.2: Mar 06, 2015
+
+ New action to edit privacy options. (178630 lines) +
+
Version 14.78.1: Mar 06, 2015
+
+ New link to privacy options (unfinished). (178595 lines) +
+
Version 14.78: Mar 06, 2015
+
+ Four degrees of visibility in photos.
+ Field PublicPhoto is replaced by field PhotoVisibility in usr_data table. (178577 lines)
+ 4 changes necessary in database:
+ +ALTER TABLE usr_data ADD COLUMN PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user' AFTER PublicPhoto;
+UPDATE usr_data SET PhotoVisibility='user' WHERE PublicPhoto='N';
+UPDATE usr_data SET PhotoVisibility='system' WHERE PublicPhoto='Y';
+ALTER TABLE usr_data DROP COLUMN PublicPhoto; +
+
+
Version 14.77.3: Mar 05, 2015
+
+ Changes in shared record. (178509 lines) +
+
Version 14.77.2: Mar 05, 2015
+
+ Changes in shared record. (178504 lines) +
+
Version 14.77.1: Mar 05, 2015
+
+ New option to select the user and then go to his/her public user's profile. (178475 lines)
+ 2 changes necessary in database:
+ +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1401','es','N','Solicitar perfil de usuario');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1402','es','N','Ver perfil de usuario'); +
+
+
Version 14.77: Mar 04, 2015
+
+ New parameter "UsrNick" to go to a public user's profile. (178406 lines) +
+
Version 14.76.5: Mar 03, 2015
+
+ Added new social networks, suggested by Marta Gómez Macías. (178293 lines)
+ 1 change necessary in database:
+ +ALTER TABLE usr_webs CHANGE Web Web ENUM('www', '500px', 'delicious', 'deviantart', 'edmodo', 'facebook', 'flickr', 'foursquare', 'github', 'googleplus', 'googlescholar', 'instagram', 'linkedin', 'paperli', 'pinterest', 'researchgate', 'scoopit', 'slideshare', 'storify', 'tumblr', 'twitter', 'wikipedia', 'youtube') NOT NULL; + +
+
Version 14.76.4: Mar 03, 2015 Nickname is always visible on record. (178270 lines) + +
Version 14.76.3: Mar 03, 2015
+
+ Fixed bug while sending a message to a guest. (178274 lines) +
+
Version 14.76.2: Mar 02, 2015
+
+ Button in student record to view student's attendance. (178242 lines) +
+
Version 14.76.1: Mar 02, 2015
+
+ Button in student record to view student's test exams. (178225 lines) +
+
Version 14.76: Mar 02, 2015
+
+ Button in student record to view student's works. (178197 lines) +
+
Version 14.75.2: Mar 02, 2015
+
+ New icon for new notifications. (178176 lines) +
+
Version 14.75.1: Mar 02, 2015
+
+ Fixed bug in file browser, reported by Germán Luzón González and Javier Fernández Baldomero. (178175 lines) +
+
Version 14.75: Feb 27, 2015
+
+ Fixed bug when getting user's IDs from marks tables. (178172 lines) +
+
Version 14.74.12: Feb 23, 2015
+
+ Fixed bug in file browser, reported by Germán Luzón González and Javier Fernández Baldomero. (178119 lines) +
+
Version 14.74.11: Feb 10, 2015
+
+ Changes in swad.js. (178060 lines) +
+
Version 14.74.10: Feb 10, 2015
+
+ Removed meta tag. (178060 lines) +
+
Version 14.74.9: Feb 10, 2015
+
+ Description/keywords meta tags and canonical URL added to head. (178060 lines) +
+
Version 14.74.8: Feb 10, 2015
+
+ Fixed bug in degree logo. (178045 lines) +
+
Version 14.74.7: Feb 08, 2015
+
+ Link to register/remove several users. (178029 lines) +
+
Version 14.74.6: Feb 08, 2015
+
+ Changes in layout of form to register/remove one user. (178009 lines) +
+
Version 14.74.5: Feb 08, 2015
+
+ Changes in layout of form to register/remove users. (178038 lines) +
+
Version 14.74.4: Feb 08, 2015
+
+ Changes in layout of form to register/remove users. (178000 lines) +
+
Version 14.74.3: Feb 08, 2015
+
+ Button to view banners.
+ Button to view mail domains.
+ Button to view institutional links.
+ Button to view plugins.
+ Button to view departments.
+ Button to view holidays.
+ Button to view places. (178027 lines) +
+
Version 14.74.2: Feb 08, 2015
+
+ Fixed bug in banners. (177994 lines) +
+
Version 14.74.1: Feb 06, 2015
+
+ Fixed bug in shared files. (177986 lines) +
+
Version 14.74: Feb 05, 2015
+
+ Shared files for institution, centre and degree. (177982 lines) +
+
Version 14.73.5: Feb 05, 2015
+
+ New message when user does not belong to any course. (177170 lines) +
+
Version 14.73.4: Feb 04, 2015
+
+ Changes in institution configuration. (177103 lines) +
+
Version 14.73.3: Feb 04, 2015
+
+ Changes in degree configuration. (177080 lines) +
+
Version 14.73.2: Feb 04, 2015
+
+ Changes in centre configuration. (177057 lines) +
+
Version 14.73.1: Feb 04, 2015
+
+ Fixed bug in logo of centre. (177012 lines) +
+
Version 14.73: Feb 03, 2015
+
+ New options to remove institution, centre and degree icons. (177007 lines)
+ 3 changes necessary in database:
+ +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1341','es','N','Eliminar logo de institución');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1342','es','N','Eliminar logo de centro');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1343','es','N','Eliminar logo de titulación'); +
+
+
Version 14.72.6: Feb 03, 2015
+
+ Changes in icons for degrees and centres. (176883 lines) +
+
Version 14.72.5: Feb 01, 2015
+
+ Changed related to administrators. (176805 lines) +
+
Version 14.72.4: Feb 01, 2015
+
+ Refactoring of registering and removing admins. (176787 lines) +
+
Version 14.72.3: Feb 01, 2015
+
+ Refactoring of registering and removing admins. (177139 lines) +
+
Version 14.72.2: Feb 01, 2015
+
+ Refactoring of registering and removing admins. (177496 lines) +
+
Version 14.72.1: Feb 01, 2015
+
+ New options to register and remove institution and centre admins. (177477 lines)
+ 6 changes necessary in database:
+ +UPDATE actions SET Txt='Añadir administrador de titulación' WHERE ActCod='586' AND Language='es';
+UPDATE actions SET Txt='Eliminar administrador de titulación' WHERE ActCod='584' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1337','es','N','Añadir administrador de institución');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1338','es','N','Eliminar administrador de institución');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1339','es','N','Añadir administrador de centro');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1340','es','N','Eliminar administrador de centro'); +
+
+
Version 14.72: Jan 31, 2015
+
+ New options to register and remove institution and centre admins (not finished). (176934 lines) +
+
Version 14.71: Jan 29, 2015
+
+ New table admin to store system, institution, centre or degree admins. (176255 lines)
+ 4 changes necessary in database:
+ +CREATE TABLE IF NOT EXISTS admin (UsrCod INT NOT NULL,Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,Cod INT NOT NULL,UNIQUE INDEX(UsrCod,Scope,Cod));
+INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Deg',DegCod FROM deg_admin WHERE DegCod>'0';
+INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Sys',DegCod FROM deg_admin WHERE DegCod='-2';
+DROP TABLE IF EXISTS deg_admin; +
+
+
Version 14.70.6: Jan 28, 2015
+
+ Buttons to view list of institutions, centres, degrees and courses in information options. (176242 lines) +
+
Version 14.70.5: Jan 28, 2015
+
+ Links in list of countries, institutions, centres and degrees now go to information options. (176219 lines) +
+
Version 14.70.4: Jan 28, 2015
+
+ Links in breadcrumbs now go to information options. (176218 lines) +
+
Version 14.70.3: Jan 28, 2015
+
+ Some button messages changed.
+ Buttons to view when editing. (176217 lines) +
+
Version 14.70.2: Jan 27, 2015
+
+ Changed permissions in documents zones of institution, centre and degree. (176188 lines) +
+
Version 14.70.1: Jan 27, 2015
+
+ Fixed bug when removing a user from a course. (176187 lines) +
+
Version 14.70: Jan 26, 2015
+
+ Fixed bugs in statistics about sizes of file browsers.
+ Statistics about sizes of group zones.
+ New scope (country) in statistics about sizes of file browsers. (176181 lines) +
+
Version 14.69.2: Jan 26, 2015
+
+ Fixed bugs in statistics about sizes of file browsers. (175864 lines) +
+
Version 14.69.1: Jan 26, 2015
+
+ Code refactoring related to file browsers. (175822 lines) +
+
Version 14.69: Jan 26, 2015
+
+ Changes in search of documents. (175818 lines) +
+
Version 14.68.2: Jan 25, 2015
+
+ Fixed bugs in search of documents.
+ Search of user's documents now extended to institution, centre and degree. (175644 lines) +
+
Version 14.68.1: Jan 25, 2015
+
+ Changes in codes stores in expanded_folders table. (175618 lines)
+ 7 changes necessary in database:
+ +UPDATE expanded_folders SET FileBrowser='3' WHERE FileBrowser='1';
+UPDATE expanded_folders SET FileBrowser='8' WHERE FileBrowser='2';
+UPDATE expanded_folders SET FileBrowser='11' WHERE FileBrowser='10';
+UPDATE expanded_folders SET FileBrowser='13' WHERE FileBrowser='12';
+UPDATE expanded_folders SET FileBrowser='17' WHERE FileBrowser='16';
+UPDATE expanded_folders SET FileBrowser='19' WHERE FileBrowser='18';
+UPDATE expanded_folders SET FileBrowser='21' WHERE FileBrowser='20'; +
+
+
Version 14.68: Jan 25, 2015
+
+ Changes in file_browser_size table. (175606 lines)
+ 9 changes necessary in database:
+ +DROP INDEX FileBrowser ON file_browser_size;
+DROP INDEX UsrCod ON file_browser_size;
+ALTER TABLE file_browser_size CHANGE COLUMN UsrCod ZoneUsrCod INT NOT NULL DEFAULT -1,ADD INDEX (ZoneUsrCod);
+ALTER TABLE file_browser_size ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER FileBrowser;
+UPDATE file_browser_size SET Cod=CrsCod WHERE CrsCod>'0' AND GrpCod<='0';
+UPDATE file_browser_size SET Cod=GrpCod WHERE GrpCod>'0';
+ALTER TABLE file_browser_size DROP COLUMN CrsCod;
+ALTER TABLE file_browser_size DROP COLUMN GrpCod;
+CREATE UNIQUE INDEX FileBrowser ON file_browser_size (FileBrowser,Cod,ZoneUsrCod); +
+
+
Version 14.67.1: Jan 25, 2015
+
+ Fixed bugs in file browsers. (175395 lines) +
+
Version 14.67: Jan 25, 2015
+
+ Changes in files table. (175369 lines)
+ 17 changes necessary in database:
+ +ALTER TABLE files ADD COLUMN ZoneUsrCod2 INT NOT NULL DEFAULT -1 AFTER FileBrowser;
+UPDATE files SET ZoneUsrCod2=ZoneUsrCod;
+ALTER TABLE files DROP COLUMN ZoneUsrCod;
+ALTER TABLE files CHANGE COLUMN ZoneUsrCod2 ZoneUsrCod INT NOT NULL DEFAULT -1;
+ALTER TABLE files ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (FileBrowser,Cod,ZoneUsrCod);
+CREATE INDEX ZoneUsrCod ON files (ZoneUsrCod);
+UPDATE files SET Cod=InsCod WHERE InsCod>'0';
+UPDATE files SET Cod=CtrCod WHERE CtrCod>'0';
+UPDATE files SET Cod=DegCod WHERE DegCod>'0';
+UPDATE files SET Cod=CrsCod WHERE CrsCod>'0' AND GrpCod<='0';
+UPDATE files SET Cod=GrpCod WHERE GrpCod>'0';
+ALTER TABLE files DROP COLUMN InsCod;
+ALTER TABLE files DROP COLUMN CtrCod;
+ALTER TABLE files DROP COLUMN DegCod;
+ALTER TABLE files DROP COLUMN CrsCod;
+ALTER TABLE files DROP COLUMN GrpCod;
+DROP INDEX Location ON files; +
+
+
Version 14.66.1: Jan 24, 2015
+
+ Fixed bug in clipboard. (175404 lines) +
+
Version 14.66: Jan 24, 2015
+
+ Changes in clipboard table. (175401 lines)
+ 13 changes necessary in database:
+ +DROP INDEX FileBrowser ON clipboard;
+ALTER TABLE clipboard ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (FileBrowser,Cod);
+CREATE INDEX WorksUsrCod ON clipboard (WorksUsrCod);
+UPDATE clipboard SET Cod=InsCod WHERE InsCod>'0';
+UPDATE clipboard SET Cod=CtrCod WHERE CtrCod>'0';
+UPDATE clipboard SET Cod=DegCod WHERE DegCod>'0';
+UPDATE clipboard SET Cod=CrsCod WHERE CrsCod>'0' AND GrpCod<='0';
+UPDATE clipboard SET Cod=GrpCod WHERE GrpCod>'0';
+ALTER TABLE clipboard DROP COLUMN InsCod;
+ALTER TABLE clipboard DROP COLUMN CtrCod;
+ALTER TABLE clipboard DROP COLUMN DegCod;
+ALTER TABLE clipboard DROP COLUMN CrsCod;
+ALTER TABLE clipboard DROP COLUMN GrpCod; +
+
+
Version 14.65: Jan 24, 2015
+
+ Changes in expanded_folders table. (175394 lines)
+ 13 changes necessary in database:
+ +DROP INDEX UsrCod ON expanded_folders;
+ALTER TABLE expanded_folders ADD COLUMN Cod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (UsrCod,FileBrowser,Cod), ADD INDEX (FileBrowser,Cod);
+CREATE INDEX WorksUsrCod ON expanded_folders (WorksUsrCod);
+UPDATE expanded_folders SET Cod=InsCod WHERE InsCod>'0';
+UPDATE expanded_folders SET Cod=CtrCod WHERE CtrCod>'0';
+UPDATE expanded_folders SET Cod=DegCod WHERE DegCod>'0';
+UPDATE expanded_folders SET Cod=CrsCod WHERE CrsCod>'0' AND GrpCod<='0';
+UPDATE expanded_folders SET Cod=GrpCod WHERE GrpCod>'0';
+ALTER TABLE expanded_folders DROP COLUMN InsCod;
+ALTER TABLE expanded_folders DROP COLUMN CtrCod;
+ALTER TABLE expanded_folders DROP COLUMN DegCod;
+ALTER TABLE expanded_folders DROP COLUMN CrsCod;
+ALTER TABLE expanded_folders DROP COLUMN GrpCod; +
+
+
Version 14.64: Jan 22, 2015
+
+ Changes in last accesses to group file browsers. (175510 lines)
+ 6 changes necessary in database:
+ +REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'11',GrpCod,LastAccDownloadGrp FROM crs_grp_usr WHERE LastAccDownloadGrp>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'5',GrpCod,LastAccCommonGrp FROM crs_grp_usr WHERE LastAccCommonGrp>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'13',GrpCod,LastAccCommonGrp FROM crs_grp_usr WHERE LastAccMarksGrp>0;
+ALTER TABLE crs_grp_usr DROP COLUMN LastAccDownloadGrp;
+ALTER TABLE crs_grp_usr DROP COLUMN LastAccCommonGrp;
+ALTER TABLE crs_grp_usr DROP COLUMN LastAccMarksGrp; +
+
+
Version 14.63.6: Jan 22, 2015
+
+ Changes in last accesses to course file browsers. (175588 lines)
+ 10 changes necessary in database:
+ +REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'3',CrsCod,LastAccDownloadCrs FROM crs_usr WHERE LastAccDownloadCrs>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'4',CrsCod,LastAccCommonCrs FROM crs_usr WHERE LastAccCommonCrs>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'8',CrsCod,LastAccMarksCrs FROM crs_usr WHERE LastAccMarksCrs>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'14',CrsCod,LastAccMyWorks FROM crs_usr WHERE LastAccMyWorks>0;
+REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'15',CrsCod,LastAccMyWorks FROM crs_usr WHERE LastAccCrsWorks>0;
+ALTER TABLE crs_usr DROP COLUMN LastAccDownloadCrs;
+ALTER TABLE crs_usr DROP COLUMN LastAccCommonCrs;
+ALTER TABLE crs_usr DROP COLUMN LastAccMarksCrs;
+ALTER TABLE crs_usr DROP COLUMN LastAccMyWorks;
+ALTER TABLE crs_usr DROP COLUMN LastAccCrsWorks; +
+
+
Version 14.63.5: Jan 22, 2015
+
+ Changes in last accesses to file browsers (briefcases). (? lines)
+ 2 changes necessary in database:
+ +REPLACE INTO file_browser_last (UsrCod,FileBrowser,Cod,LastClick) SELECT UsrCod,'9','-1',LastAccBriefcase FROM usr_last WHERE LastAccBriefcase>0;
+ALTER TABLE usr_last DROP COLUMN LastAccBriefcase; +
+
+
Version 14.63.4: Jan 21, 2015
+
+ Fixed bug in listing of degree administrators, reported by Antonio Fernández Ares. (175548 lines) +
+
Version 14.63.3: Jan 21, 2015
+
+ Fixed bug when expanding folders, reported by Nadir Román Guerrero and others. (175545 lines) +
+
Version 14.63.2: Jan 21, 2015
+
+ Fixed bug in search of courses. (175542 lines) +
+
Version 14.63.1: Jan 21, 2015
+
+ Remove last accesses to file browsers related with an institution, a centre or a degree. (175531 lines) +
+
Version 14.63: Jan 21, 2015
+
+ See/admin documents of degree, centre and institution. (175512 lines)
+ 1 change necessary in database:
+ +CREATE TABLE IF NOT EXISTS file_browser_last (UsrCod INT NOT NULL,FileBrowser TINYINT NOT NULL,Cod INT NOT NULL DEFAULT -1,LastClick DATETIME NOT NULL,UNIQUE INDEX(UsrCod,FileBrowser,Cod)); + +
+
Version 14.62.4: Jan 20, 2015
+
+ Fixed bug in search of courses. (175443 lines) +
+
Version 14.62.3: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (? lines) +
+
Version 14.62.2: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (175407 lines) +
+
Version 14.62.1: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (175371 lines) +
+
Version 14.62: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (175296 lines)
+ 3 changes necessary in database:
+ +ALTER TABLE expanded_folders ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (InsCod);
+ALTER TABLE expanded_folders ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod, ADD INDEX (CtrCod);
+ALTER TABLE expanded_folders ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod, ADD INDEX (DegCod); +
+
+
Version 14.61: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (175112 lines)
+ 6 changes necessary in database:
+ +ALTER TABLE files ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FilCod;
+ALTER TABLE files ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod;
+ALTER TABLE files ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod;
+DROP INDEX CrsCod ON files;
+DROP INDEX CrsCod_GrpCod_ZoneUsrCod_FileBrowser ON files;
+CREATE INDEX Location ON files (InsCod,CtrCod,DegCod,CrsCod,GrpCod,FileBrowser); +
+
+
Version 14.60: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (175079 lines)
+ 3 changes necessary in database:
+ +ALTER TABLE clipboard ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (InsCod);
+ALTER TABLE clipboard ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod, ADD INDEX (CtrCod);
+ALTER TABLE clipboard ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod, ADD INDEX (DegCod); +
+
+
Version 14.59.3: Jan 20, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (174862 lines) +
+
Version 14.59.2: Jan 19, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (174864 lines) +
+
Version 14.59.1: Jan 19, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (174711 lines) +
+
Version 14.59: Jan 19, 2015
+
+ See/admin documents of degree, centre and institution (not finished). (174559 lines) +
+
Version 14.58.1: Jan 18, 2015
+
+ Fixed minor bugs in layout. (174178 lines) +
+
Version 14.58: Jan 18, 2015
+
+ New options to see/admin documents of degree, centre and institution (not finished). (174174 lines) +
+
Version 14.57.3: Jan 18, 2015
+
+ Fixed bug in statistics. (173694 lines) +
+
Version 14.57.2: Jan 18, 2015
+
+ Icon of institution, centre or degree is not drawn on title when logo does not exist. (173693 lines) +
+
Version 14.57.1: Jan 17, 2015
+
+ Code refactoring related to logos of institutions, centres and degrees. (173674 lines) +
+
Version 14.57: Jan 17, 2015
+
+ New option to upload logo of degree. (173720 lines)
+ 3 changes necessary in database:
+ +UPDATE actions SET Txt='Cambiar logo de titulación' WHERE ActCod='553' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1246','es','N','Solicitar envío de logo de titulación');
+ALTER TABLE degrees DROP COLUMN Logo; +
+
+
Version 14.56: Jan 17, 2015
+
+ New module swad_logo for drawing logos of institutions, centres and degrees.
+ New option to upload logo of institution. (173735 lines)
+ 1 change necessary in Makefile:
+ +Add swad_logo.o to list of object files
+
+ 3 changes necessary in database:
+ +UPDATE actions SET Txt='Cambiar logo de institución' WHERE ActCod='699' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1245','es','N','Solicitar envío de logo de institución');
+ALTER TABLE institutions DROP COLUMN Logo; +
+
+
Version 14.55.5: Jan 16, 2015
+
+ Code refactoring related to maps of countries. (173573 lines) +
+
Version 14.55.4: Jan 16, 2015
+
+ Fixed bugs in enrollment.
+ New MIME type, suggested by Francisco Ocaña Lara. (173576 lines) +
+
Version 14.55.3: Jan 16, 2015
+
+ Link in course information to request registration in course.
+ Fixed bug in enrollment. (173570 lines) +
+
Version 14.55.2: Jan 15, 2015
+
+ Logo of centre, degree, institution or country in title. (173546 lines) +
+
Version 14.55.1: Jan 14, 2015
+
+ Fixed bug in user's photo. (173510 lines) +
+
Version 14.55: Jan 14, 2015
+
+ New option to upload logo of a centre. (173509 lines)
+ 3 changes necessary in database:
+ +UPDATE actions SET Txt='Cambiar logo de centro' WHERE ActCod='1051' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1244','es','N','Solicitar envío de logo de centro');
+ALTER TABLE centres DROP COLUMN Logo; +
+
+
Version 14.54.7: Jan 13, 2015
+
+ Fixed bug in edition of centres. (173349 lines) +
+
Version 14.54.6: Jan 13, 2015
+
+ Tab and menu icons always in 64x64 pixels. (173348 lines) +
+
Version 14.54.5: Jan 13, 2015
+
+ Icons for institutions, centres and degrees always in 64x64 pixels. (173346 lines) +
+
Version 14.54.4: Jan 13, 2015
+
+ Fized bug in photos. (173345 lines) +
+
Version 14.54.3: Jan 06, 2015
+
+ Changes in themes and colors. (173344 lines) +
+
Version 14.54.2: Jan 05, 2015
+
+ Changes in yellow theme. (173339 lines) +
Version 14.54.1: Jan 04, 2015
Removed unused fields in user's data. (173338 lines)
diff --git a/html/source/img/lineas-codigo-modulo-principal.png b/html/source/img/lineas-codigo-modulo-principal.png index 625e7b9600d0d4788b181a8861bab76b141cf7ee..02fe73eb7d3b166b156ffacf36e87b987c07a9ac 100644 GIT binary patch literal 22931 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

Jqg>`-7BzH+#S@M?PPw~S1GXry7nAlC63 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 diff --git a/html/source/index.html b/html/source/index.html index 84114a572..9c37bce49 100644 --- a/html/source/index.html +++ b/html/source/index.html @@ -127,8 +127,8 @@

- SWAD core has about 175 000 lines of source code. - Each executable program (one for each language) has a size of 1.8 MiB + SWAD core has about 185 000 lines of source code. + Each executable program (one for each language) has a size of 1.85 MiB and in most of the possible actions generates the page in few milliseconds.

diff --git a/swad_changelog.h b/swad_changelog.h index 99d96d678..2da5f81c1 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -103,11 +103,12 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.108.4 (2015/04/04)" +#define Log_PLATFORM_VERSION "SWAD 14.109 (2015/04/06)" // 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 14.109: Apr 06, 2015 Links in file browsers can be uploaded with a name. (184324 lines) Version 14.108.4: Apr 04, 2015 Changes in statistic about institutions. (184267 lines) Version 14.108.3: Apr 03, 2015 Fixed bug in statistic about institutions. (184144 lines) Version 14.108.2: Apr 03, 2015 Fixed bug in statistic about institutions. (184142 lines) diff --git a/swad_file_browser.c b/swad_file_browser.c index e59b840cf..2d9154b43 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -2067,8 +2067,8 @@ void Brw_GetParAndInitFileBrowser (void) case ActCreLnkAsgUsr: case ActCreLnkWrkUsr: case ActCreLnkBrf: - /* Get the new link */ - Par_GetParToText ("NewLink",Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX); + /* Get the name of the new link */ + Par_GetParToText ("NewLinkName",Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX); break; default: break; @@ -7648,17 +7648,9 @@ static void Brw_PutFormToCreateAFolder (const char *FileNameToShow) Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName); /* Folder */ - fprintf (Gbl.F.Out,"" - "" - "" - "" - "" - "
" - "%s:" - "" - "" - "
", + fprintf (Gbl.F.Out,"" + "", The_ClassFormul[Gbl.Prefs.Theme],Txt_Folder); /* Button to send */ @@ -7797,7 +7789,8 @@ static void Brw_PutFormToUploadOneFileClassic (const char *FileNameToShow) break; } Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName); - fprintf (Gbl.F.Out,"", + fprintf (Gbl.F.Out,"", Fil_NAME_OF_PARAM_FILENAME_ORG); /* Button to send */ @@ -7867,6 +7860,7 @@ static void Brw_PutFormToCreateALink (const char *FileNameToShow) extern const char *Txt_Create_link; extern const char *Txt_or_you_can_create_a_new_link_inside_the_folder_X; extern const char *Txt_URL; + extern const char *Txt_Save_as; /***** Start frame *****/ Lay_StartRoundFrameTable10 (NULL,0,Txt_Create_link); @@ -7895,18 +7889,31 @@ static void Brw_PutFormToCreateALink (const char *FileNameToShow) Brw_ParamListFiles (Brw_IS_FOLDER,Gbl.FileBrowser.Priv.PathInTreeExceptFileOrFolder,Gbl.FileBrowser.FilFolLnkName); /* URL */ - fprintf (Gbl.F.Out,"" - "" - "
" - "%s:" + fprintf (Gbl.F.Out,"" + "" + "" - "" + "", + The_ClassFormul[Gbl.Prefs.Theme],Txt_URL, + PATH_MAX); + + /* Link name */ + fprintf (Gbl.F.Out,"" + "" + "" "" "
" + "" "" - "" + "" + "" + "
" + "" + "" + "" "
", - The_ClassFormul[Gbl.Prefs.Theme],Txt_URL,PATH_MAX); + The_ClassFormul[Gbl.Prefs.Theme],Txt_Save_as); /* Button to send */ Lay_PutCreateButton (Txt_Create_link); @@ -8338,12 +8345,13 @@ void Brw_RecLinkFileBrowser (void) extern const char *Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name; extern const char *Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota; extern const char *Txt_The_link_X_has_been_placed_inside_the_folder_Y; - extern const char *Txt_UPLOAD_FILE_Invalid_name; + extern const char *Txt_UPLOAD_FILE_Invalid_link; extern const char *Txt_You_can_not_create_links_here; - char URLWithoutEndingSlash[NAME_MAX+1]; // TODO: It should be PATH_MAX + char URL[PATH_MAX+1]; + char URLWithoutEndingSlash[PATH_MAX+1]; size_t LengthURL; char URLUntilLastFilename[PATH_MAX+1]; - char LastFilenameInURL[NAME_MAX+1]; + char FileName[NAME_MAX+1]; char Path[PATH_MAX+1]; FILE *FileURL; char PathCompleteInTreeIncludingFile[PATH_MAX+1]; @@ -8359,42 +8367,53 @@ void Brw_RecLinkFileBrowser (void) if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) { /***** Create a new file to store URL ****/ - /* - Gbl.FileBrowser.NewFilFolLnkName holds the URL of the new link - Example: - URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf - File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url - */ - if ((LengthURL = strlen (Gbl.FileBrowser.NewFilFolLnkName))) + Par_GetParToText ("NewLinkURL",URL,PATH_MAX); + if ((LengthURL = strlen (URL))) { - strncpy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName,NAME_MAX); - URLWithoutEndingSlash[NAME_MAX] = '\0'; + if (Gbl.FileBrowser.NewFilFolLnkName[0]) + /* + Gbl.FileBrowser.NewFilFolLnkName holds the name given by me in the form + Example: + Name given by me: intel-architectures.pdf + File in swad: intel-architectures.pdf.url + */ + strncpy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName,PATH_MAX); + else + /* + Gbl.FileBrowser.NewFilFolLnkName is empty + URL holds the URL given by me in the form + Example: + URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf + File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url + */ + strncpy (URLWithoutEndingSlash,URL,PATH_MAX); + URLWithoutEndingSlash[PATH_MAX] = '\0'; - /* Remove possible final '/' from URL */ + /* Remove possible final '/' from URL */ if (URLWithoutEndingSlash[LengthURL - 1] == '/') - URLWithoutEndingSlash[LengthURL - 1] = '\0'; + URLWithoutEndingSlash[LengthURL - 1] = '\0'; - /* Get the last name in URL-without-ending-slash */ + /* Get the last name in URL-without-ending-slash */ Str_SplitFullPathIntoPathAndFileName (URLWithoutEndingSlash, URLUntilLastFilename, - LastFilenameInURL); + FileName); /* Convert the last name in URL to a valid filename */ - if (Str_ConvertFilFolLnkNameToValid (LastFilenameInURL)) // Gbl.Message contains feedback text + if (Str_ConvertFilFolLnkNameToValid (FileName)) // Gbl.Message contains feedback text { - /* The name of the file with the link will be the LastFilenameInURL.url */ + /* The name of the file with the link will be the FileName.url */ sprintf (Path,"%s/%s",Gbl.FileBrowser.Priv.PathAboveRootFolder,Gbl.FileBrowser.Priv.FullPathInTree); - if (strlen (Path) + 1 + strlen (LastFilenameInURL) + strlen (".url") > PATH_MAX) + if (strlen (Path) + 1 + strlen (FileName) + strlen (".url") > PATH_MAX) Lay_ShowErrorAndExit ("Path is too long."); strcat (Path,"/"); - strcat (Path,LastFilenameInURL); + strcat (Path,FileName); strcat (Path,".url"); /* Check if the URL file exists */ if (Fil_CheckIfPathExists (Path)) { sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name, - LastFilenameInURL); + FileName); Lay_ShowAlert (Lay_WARNING,Gbl.Message); } else // URL file does not exist @@ -8403,7 +8422,7 @@ void Brw_RecLinkFileBrowser (void) if ((FileURL = fopen (Path,"wb")) != NULL) { /* Write URL */ - fprintf (FileURL,"%s",Gbl.FileBrowser.NewFilFolLnkName); + fprintf (FileURL,"%s",URL); /* Close file */ fclose (FileURL); @@ -8415,7 +8434,7 @@ void Brw_RecLinkFileBrowser (void) { Brw_RemoveTree (Path); sprintf (Gbl.Message,Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota, - LastFilenameInURL); + FileName); Lay_ShowAlert (Lay_WARNING,Gbl.Message); } else @@ -8427,7 +8446,7 @@ void Brw_RecLinkFileBrowser (void) Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.Priv.FullPathInTree); /* Add entry to the table of files/folders */ - sprintf (PathCompleteInTreeIncludingFile,"%s/%s.url",Gbl.FileBrowser.Priv.FullPathInTree,LastFilenameInURL); + sprintf (PathCompleteInTreeIncludingFile,"%s/%s.url",Gbl.FileBrowser.Priv.FullPathInTree,FileName); FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_LINK, PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT); @@ -8435,7 +8454,7 @@ void Brw_RecLinkFileBrowser (void) Brw_GetFileNameToShow (Gbl.FileBrowser.Type,Gbl.FileBrowser.Level,Brw_IS_FOLDER, Gbl.FileBrowser.FilFolLnkName,FileNameToShow); sprintf (Gbl.Message,Txt_The_link_X_has_been_placed_inside_the_folder_Y, - LastFilenameInURL,FileNameToShow); + FileName,FileNameToShow); Lay_ShowAlert (Lay_SUCCESS,Gbl.Message); FileMetadata.FilCod = FilCod; @@ -8467,11 +8486,9 @@ void Brw_RecLinkFileBrowser (void) } } } - else // Link name not valid - Lay_ShowAlert (Lay_WARNING,Gbl.Message); } - else // Link name not valid - Lay_ShowAlert (Lay_WARNING,Txt_UPLOAD_FILE_Invalid_name); + else // Link URL not valid + Lay_ShowAlert (Lay_WARNING,Txt_UPLOAD_FILE_Invalid_link); } else Lay_ShowErrorAndExit (Txt_You_can_not_create_links_here); // It's difficult, but not impossible that a user sees this message diff --git a/swad_global.h b/swad_global.h index 3f42ba39b..f3444cac2 100644 --- a/swad_global.h +++ b/swad_global.h @@ -505,7 +505,7 @@ struct Globals char PathInTreeExceptFileOrFolder[PATH_MAX+1]; char FullPathInTree[PATH_MAX+1]; } Priv; - char NewFilFolLnkName[NAME_MAX+1]; // TODO: It should be PATH_MAX (for URL in links) + char NewFilFolLnkName[NAME_MAX+1]; char FilFolLnkName[NAME_MAX+1]; Brw_FileType_t FileType; unsigned Level; diff --git a/swad_text.c b/swad_text.c index d044b66ed..19b0b70a6 100644 --- a/swad_text.c +++ b/swad_text.c @@ -33396,6 +33396,27 @@ const char *Txt_Save = "Salvar"; #endif +const char *Txt_Save_as = +#if L==0 + "Guardar com"; +#elif L==1 + "Speichern unter"; +#elif L==2 + "Save as"; +#elif L==3 + "Guardar como"; +#elif L==4 + "Enregistrer sous"; +#elif L==5 + "Guardar como"; // Okoteve traducción +#elif L==6 + "Salva come"; +#elif L==7 + "Zapisz jako"; +#elif L==8 + "Salvar como"; +#endif + const char *Txt_Save_changes = #if L==0 "Desar canvis"; @@ -46565,25 +46586,46 @@ const char *Txt_Update_students_according_to_selected_groups = "Atualizar os estudantes de acordo com grupos selecionados"; #endif +const char *Txt_UPLOAD_FILE_Invalid_link = +#if L==0 + "Enlace no válido."; // Necessita traduccio +#elif L==1 + "Invalid link."; // Need Übersetzung +#elif L==2 + "Invalid link."; +#elif L==3 + "Enlace no válido."; +#elif L==4 + "Invalid link."; // Besoin de traduction +#elif L==5 + "Enlace no válido."; // Okoteve traducción +#elif L==6 + "Link non valido."; +#elif L==7 + "Invalid link."; // Potrzebujesz tlumaczenie +#elif L==8 + "Invalid link."; // Necessita de tradução +#endif + const char *Txt_UPLOAD_FILE_Invalid_name = #if L==0 "Nombre no válido."; // Necessita traduccio #elif L==1 - "Invalid name."; // Need Übersetzung + "Invalid name."; // Need Übersetzung #elif L==2 "Invalid name."; #elif L==3 "Nombre no válido."; #elif L==4 - "Invalid name."; // Besoin de traduction + "Invalid name."; // Besoin de traduction #elif L==5 "Nombre no válido."; // Okoteve traducción #elif L==6 "Nome non valido."; #elif L==7 - "Invalid name."; // Potrzebujesz tlumaczenie + "Invalid name."; // Potrzebujesz tlumaczenie #elif L==8 - "Invalid name."; // Necessita de tradução + "Invalid name."; // Necessita de tradução #endif const char *Txt_UPLOAD_FILE_X_invalid_name = // Warning: it is very important to include %s in the following sentences