diff --git a/css/swad15.229.css b/css/swad15.229.css new file mode 100644 index 000000000..57ee2150c --- /dev/null +++ b/css/swad15.229.css @@ -0,0 +1,2662 @@ +/* swad_desktop.css:style-sheet for desktop layout of SWAD */ + +/* + SWAD (Shared Workspace At a Distance), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2016 Antonio Caņas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General 3 License as + published by the Free Software Foundation,either version 3 of the + License,or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not,see . +*/ + +/********************************* Body **************************************/ +body + { + margin:0; + background-color:white; + font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; + font-size:1em; + } +input + { + font-size:12pt; + vertical-align:middle; + } +select + { + font-size:12pt; + } +textarea + { + font-size:13pt; + font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; + } +table + { + box-sizing:border-box; + border-width:0; + border-style:none; + border-spacing:0; + } +table th + { + box-sizing:border-box; + padding:0; + color:#4D88A1; + font-size:12pt; + font-weight:bold; + } +table td + { + box-sizing:border-box; + padding:0; + } +img + { + border-width:0; + border-style:none; + } +form + { + display:inline; + margin:0; + } +hr.WHITE_SEPARA {height:0; border-top:0; border-bottom:#707070 dotted 1px;} +hr.GREY_SEPARA {height:0; border-top:0; border-bottom:#707070 dotted 1px;} +hr.BLUE_SEPARA {height:0; border-top:0; border-bottom:#4D88A1 dotted 1px;} +hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;} + +/*********************** Text decoration of links ****************************/ +a + { + color:#4D88A1; + } +a:link, a:visited, a:active + { + text-decoration:none; + } +a:hover /* Default ==> underlined */ + { + text-decoration:underline; + } +.TAB_OFF a, .TAB_ON a, .MENU_LIST_ITEM a /* Tabs and menus are the exceptions */ + { + text-decoration:none; + } + +/****************** Layout (the whole page with a background) ****************/ +#whole_page + { + display:table; + box-sizing:border-box; + width:100%; + /* + background-color:black; + background-image:url('/swad/background.jpg'); + background-repeat:no-repeat; + background-size:100%; + */ + } + +/************************* Layout (first heading row) ************************/ +#head_row_1 + { + display:table; + box-sizing:border-box; + width:100%; + height:40px; + } +.HEAD_ROW_1_WHITE + { + background-color:black; + } +.HEAD_ROW_1_GREY + { + background-image:linear-gradient(#383838 0,#383838 26px,#404040 100%); + background-repeat:no-repeat; + } +.HEAD_ROW_1_BLUE + { + background-image:linear-gradient(#5fa5df 0,#4f90c8 26px,#4f90c8 100%); + background-repeat:no-repeat; + } +.HEAD_ROW_1_YELLOW + { + background-color:#201420; + } + +#head_row_1_left + { + display:table-cell; + text-align:left; + vertical-align:middle; + } +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + #head_row_1_logo_small + { + display:inline-block; + } + #head_row_1_logo_big + { + display:none; + } + #head_row_1_tagline + { + display:none; + } + } +@media only screen and (min-width: 900px) + { /* For tablets and desktop */ + #head_row_1_logo_small + { + display:none; + } + #head_row_1_logo_big + { + display:inline-block; + } + #head_row_1_tagline + { + display:inline-block; + box-sizing:border-box; + padding:0 4px; + font-size:11pt; + font-weight:bold; + line-height:110%; + white-space:nowrap; + text-align:left; + vertical-align:middle; + } + } +.WHITE_TAGLINE {color:#B0B0B0;} +.GREY_TAGLINE {color:#E0E0E0;} +.BLUE_TAGLINE {color:#BAD2DA;} +.YELLOW_TAGLINE {color:#B3B0B3;} + +#head_row_1_search + { + display:inline-block; + padding:0 10px; + } +@media only screen and (max-width: 1279px) + { /* For mobile phones and tablets */ + #head_search_text + { + display:none; + } + } + +#head_row_1_right + { + display:table-cell; + text-align:right; + vertical-align:middle; + } +#login_box + { + display:inline; + padding:0 20px; + } +@media only screen and (max-width: 1279px) + { /* For mobile phones and tablets */ + #login_txt + { + display:none; + } + } +.WHITE_HEAD {color:#E0E0E0; font-size:12pt; white-space:nowrap;} +.GREY_HEAD {color:#E0E0E0; font-size:12pt; white-space:nowrap;} +.BLUE_HEAD {color:white; font-size:12pt; white-space:nowrap;} +.YELLOW_HEAD {color:#B3B0B3; font-size:12pt; white-space:nowrap;} + +/************************ Layout (second heading row) ************************/ +#head_row_2 + { + display:table; + box-sizing:border-box; + width:100%; + height:80px; + vertical-align:top; + } +.HEAD_ROW_2_WHITE + { + background-image:linear-gradient(#cfcfce 0,white 40px,white 100%); + } +.HEAD_ROW_2_GREY + { + background-color:#404040; + } +.HEAD_ROW_2_BLUE + { + background-color:#4f90c8; + } +.HEAD_ROW_2_YELLOW + { + background-color:#201420; + } + +/******************************* Current time ********************************/ +#head_row_2_time + { + display:table-cell; + box-sizing:border-box; + width:160px; + text-align:center; + vertical-align:top; + } +.WHITE_CUR_TIME {color:#808080; font-size:14pt; font-weight:bold;} +.GREY_CUR_TIME {color:#E0E0E0; font-size:14pt; font-weight:bold;} +.BLUE_CUR_TIME {color:#BAD2DA; font-size:14pt; font-weight:bold;} +.YELLOW_CUR_TIME {color:#B3B0B3; font-size:14pt; font-weight:bold;} +@media only screen and (max-width: 1023px) + { /* For mobile phones */ + #head_row_2_time + { + display:none; + } + } +@media only screen and (min-width: 1024px) and (max-width: 1279px) + { /* For tablets */ + #current_date + { + display:none; + } + } + +/****** Breadcrumb (platform/country/institution/centre/degree/course) *******/ +#head_row_2_hierarchy + { + display:table-cell; + text-align:center; + vertical-align:middle; + padding-top:6px; + } +.TOP_LOGO /* Institution / Centre / Degree logo in top title */ + { + height:40px; + margin-right:10px; + text-align:left; + vertical-align:top !important; + } +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + #breadcrumb + { + font-size:9pt; + font-weight:bold; + white-space:nowrap; + } + } +@media only screen and (min-width: 900px) and (max-width: 1023px) + { /* For tablets */ + #breadcrumb + { + font-size:12pt; + font-weight:bold; + white-space:nowrap; + } + } +@media only screen and (min-width: 1024px) + { /* For desktop */ + #breadcrumb + { + font-size:14pt; + font-weight:bold; + white-space:nowrap; + } + } + +.BC_SEMIOFF + { + opacity:0.33; + } +.BC_OFF + { + opacity:0.25; + } + +.BC_WHITE {color:#707070;} +.BC_GREY {color:#FFB42E;} +.BC_BLUE {color:#FFE880;} +.BC_YELLOW {color:#FFC040;} + +/******** Big name of country, institution, centre, degree or course *********/ +#main_title + { + margin:0; + padding:0; + font-size:24pt; + font-weight:normal; + line-height:100%; + white-space:nowrap; + } +#big_name_container + { + display:inline-block; + } +@media only screen and (max-width: 1023px) + { /* For mobile-phones */ + #big_short_name + { + display:table-cell; + max-width:560px; + height:40px; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + margin:0 auto; + vertical-align:middle; + } + #big_full_name + { + display:none; + } + } +@media only screen and (min-width: 1024px) + { /* For tablets and desktop */ + #big_short_name + { + display:none; + } + #big_full_name + { + display:table-cell; + max-width:899px; + height:40px; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + margin:0 auto; + vertical-align:middle; + } + } +.WHITE_COURSE {color:#4D88A1;} +.GREY_COURSE {color:#F7F6F5;} +.BLUE_COURSE {color:white;} +.YELLOW_COURSE {color:white;} + +/***************************** Notifications *********************************/ +#msg /* Notifications, used for AJAX based refresh */ + { + display:table-cell; + box-sizing:border-box; + width:160px; + text-align:center; + vertical-align:top; + padding-top:10px; + } +@media only screen and (max-width: 1023px) + { /* For mobile phones */ + #msg + { + display:none; + } + } +@media only screen and (min-width: 1024px) and (max-width: 1279px) + { /* For tablets */ + #notif_all + { + display:none; + } + } +.WHITE_NOTIF {color:#707070; font-size:12pt; white-space:nowrap;} +.GREY_NOTIF {color:#E0E0E0; font-size:12pt; white-space:nowrap;} +.BLUE_NOTIF {color:white; font-size:12pt; white-space:nowrap;} +.YELLOW_NOTIF {color:#B3B0B3; font-size:12pt; white-space:nowrap;} + +/******************* Layout (third heading row with tabs) ********************/ +.HEAD_ROW_3_WHITE + { + background-color:white; + } +.HEAD_ROW_3_GREY + { + background-image:linear-gradient(#404040 0,#404040 64px,white 64px,white 100%); + } +.HEAD_ROW_3_BLUE + { + background-image:linear-gradient(#4f90c8 0,#4f90c8 64px,white 64px,white 100%); + } +.HEAD_ROW_3_YELLOW + { + background-image:linear-gradient(#201420 0,#201420 64px,white 64px,white 100%); + } +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + #tabs + { + display:table; + box-sizing:border-box; + width:568px; /* 74px*7 + 8px */ + height:70px; + margin:0 auto; + border-spacing:1px; + } + .TAB_OFF + { + display:table-cell; + box-sizing:border-box; + width:80px; + height:68px; + margin:0; + padding:0; + border-radius:5px 5px 0 0; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + overflow:hidden; + } + .TAB_ON + { + display:table-cell; + box-sizing:border-box; + width:80px; + height:68px; + margin:0; + padding:0; + border-radius:5px 5px 0 0; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + overflow:hidden; + } + .TAB_TXT + { + font-size:9pt; + font-weight:bold; + line-height:100%; + width:70px; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + margin:0 auto; + } + } +@media only screen and (min-width: 900px) + { /* For tablets and desktop */ + #tabs + { + display:table; + box-sizing:border-box; + width:778px; /* 110px*7 + 8px */ + height:70px; + margin:0 auto; + border-spacing:1px; + } + .TAB_OFF + { + display:table-cell; + box-sizing:border-box; + width:110px; + height:68px; + margin:0; + padding:0; + border-radius:5px 5px 0 0; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + overflow:hidden; + } + .TAB_ON + { + display:table-cell; + box-sizing:border-box; + width:110px; + height:68px; + margin:0; + padding:0; + border-radius:5px 5px 0 0; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + overflow:hidden; + } + .TAB_TXT + { + font-size:9pt; + font-weight:bold; + line-height:100%; + white-space:nowrap; + overflow:hidden; + } + } +.TAB_OFF a:hover, .TAB_ON a:hover + { + text-decoration:none; + } + +.TAB_ON_WHITE {background-color:rgba(247, 246, 245, 0.99);} +.TAB_ON_GREY {background-color:rgba(247, 246, 245, 0.99);} +.TAB_ON_BLUE {background-color:rgba(232, 243, 246, 0.99);} +.TAB_ON_YELLOW {background-color:rgba(255, 242, 189, 0.99);} + +.TAB_OFF_WHITE {background-color:#D4D4D4;} +.TAB_OFF_GREY {background-color:#AEA79F;} +.TAB_OFF_BLUE {background-color:#CAE1E8;} +.TAB_OFF_YELLOW {background-color:#FADE94;} + +.WHITE_TAB_OFF {color:#707070;} +.GREY_TAB_OFF {color:#505050;} +.BLUE_TAB_OFF {color:#365E6E;} +.YELLOW_TAB_OFF {color:#4A2E19;} + +.WHITE_TAB_ON {color:#4D88A1;} +.GREY_TAB_ON {color:#606060;} +.BLUE_TAB_ON {color:#4D88A1;} +.YELLOW_TAB_ON {color:#BD4815;} + +/*********************** Layout (fourth row, main zone) **********************/ +#main_zone + { + display:table; + box-sizing:border-box; + width:100%; + } +.LEFT_RIGHT_CELL + { + padding:0 6px 6px 6px; + text-align:center; + vertical-align:top; + } +.LEFT_RIGHT_CONTENT_WIDTH + { + box-sizing:border-box; + width:148px; + } + +@media only screen and (max-width: 1279px) + { /* For mobile phones and tablets */ + #main_zone_central_none, #main_zone_central_left, #main_zone_central_right, #main_zone_central_both + { + display:table-cell; + text-align:center; + vertical-align:top; + } + #left_col + { + display:none; + } + #right_col + { + display:none; + } + } +@media only screen and (min-width: 1280px) + { /* For desktop */ + #main_zone_central_none /* Hide left and right columns */ + { + display:table-cell; + text-align:center; + vertical-align:top; + } + #main_zone_central_left /* Show left column, hide right column */ + { + display:table-cell; + text-align:center; + vertical-align:top; + } + #main_zone_central_right /* Hide left column, show right column */ + { + display:table-cell; + text-align:center; + vertical-align:top; + padding-right:160px; + } + #main_zone_central_both /* Show both columns */ + { + display:table-cell; + text-align:center; + vertical-align:top; + padding-right:160px; + } + #left_col + { + display:table-cell; + box-sizing:border-box; + width:160px; + text-align:center; + vertical-align:top; + } + #right_col + { + display:table-cell; + box-sizing:border-box; + width:160px; + text-align:center; + vertical-align:top; + position:absolute; + right:0; + } + } + +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + #main_zone_central_container + { + box-sizing:border-box; + margin:-8px 0 0 0; + padding:8px 0; + border-radius:6px; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + position:relative; + } + } +@media only screen and (min-width: 900px) + { /* For tablets and desktop */ + #main_zone_central_container + { + box-sizing:border-box; + min-height:900px; + margin:-8px 0 0 0; + padding:8px 0; + border-radius:6px; + box-shadow:inset 0 -1px 1px 0 rgba(50,50,50,0.2); + text-align:center; + vertical-align:top; + position:relative; + } + } + +/************* Main central zone with horizontal menu and canvas *************/ +#main_horizontal + { + box-sizing:border-box; + width:100%; + } +#main_horizontal .MENU_LIST_CONTAINER + { + width:100%; + } +#main_horizontal .MENU_LIST + { + display:table; + box-sizing:border-box; + height:60px; + margin:0 auto; + padding:0 8px; + list-style-type:none; + } +#main_horizontal .MENU_LIST_ITEM + { + display:table-cell; + width:128px; + height:60px; + margin:0 auto; + text-align:center; + vertical-align:middle; + } +#main_horizontal .MENU_OPT_OFF + { + opacity:0.67; + } +#main_horizontal .MENU_OPT_OFF:hover, #main_horizontal .MENU_OPT_ON + { + opacity:1; + transform:scale(1.25,1.25); + } +#main_horizontal .MENU_ICON + { + box-sizing:border-box; + padding:32px 0 0 0; + background-size:32px 32px; + background-repeat:no-repeat; + background-position:center top; + } +#main_horizontal .MAIN_ZONE_CANVAS /* Where content for each action is written */ + { + box-sizing:border-box; + width:100%; + padding:8px 16px; + margin:0 auto; + text-align:left; + vertical-align:top; + } + +/************** Main central zone with vertical menu and canvas **************/ +@media only screen and (max-width: 1023px) + { /* For mobile phones */ + /* Mobile phone will display menu always in horizontal + so the CSS must draw menu really in horizontal */ + #main_vertical + { + box-sizing:border-box; + width:100%; + } + #main_vertical .MENU_LIST_CONTAINER + { + width:100%; + } + #main_vertical .MENU_LIST + { + display:table; + box-sizing:border-box; + height:60px; + margin:0 auto; + padding:0 8px; + list-style-type:none; + } + #main_vertical .MENU_LIST_ITEM + { + display:table-cell; + width:128px; + height:60px; + margin:0 auto; + text-align:center; + vertical-align:middle; + } + #main_vertical .MENU_OPT_OFF + { + opacity:0.67; + } + #main_vertical .MENU_OPT_OFF:hover, #main_vertical .MENU_OPT_ON + { + opacity:1; + transform:scale(1.2,1.2); + } + #main_vertical .MENU_ICON + { + box-sizing:border-box; + padding:32px 0 0 0; + background-size:32px 32px; + background-repeat:no-repeat; + background-position:center top; + } + #main_vertical .MAIN_ZONE_CANVAS /* Where content for each action is written */ + { + box-sizing:border-box; + width:100%; + padding:8px 16px; + margin:0 auto; + text-align:left; + vertical-align:top; + } + #action_title /* Do not display action title */ + { + display:none; + } + } + +@media only screen and (min-width: 1024px) + { /* For tablets and desktop */ + #main_vertical + { + display:table; + box-sizing:border-box; + width:100%; + } + #main_vertical .MENU_LIST_CONTAINER + { + display:table-cell; + box-sizing:border-box; + width:180px; + } + #main_vertical .MENU_LIST + { + display:table; + margin:0; + padding-left:8px; + list-style-type:none; + } + #main_vertical .MENU_LIST_ITEM + { + text-align:left; + } + #main_vertical .MENU_OPT_OFF + { + opacity:0.67; + } + #main_vertical .MENU_OPT_OFF:hover, #main_vertical .MENU_OPT_ON + { + opacity:1; + } + #main_vertical .MENU_ICON + { + display:table-cell; + height:42px; + vertical-align:middle; + padding:2px 2px 2px 50px; + background-size:40px 40px; + background-repeat:no-repeat; + background-position:2px 2px; + } + #main_vertical .MAIN_ZONE_CANVAS /* Where content for each action is written */ + { + display:table-cell; + box-sizing:border-box; + padding:8px 16px; + margin:0 auto; + text-align:left; + vertical-align:top; + } + #action_title + { + box-sizing:border-box; + width:400px; + min-height:70px; + clear:both; + margin:0 auto; + text-align:left; + background-size:64px 64px; + background-position:0 0; + background-repeat:no-repeat; + padding:4px 12px 12px 70px; + overflow:hidden; + } + } + +/********************************* Menu fonts ********************************/ +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + .MENU_TEXT + { + font-size:12pt; + font-weight:bold; + line-height:110%; + white-space:nowrap; + overflow:hidden; + width:48px; + margin:0 auto; + } + } +@media only screen and (min-width: 900px) + { /* For tablets and desktop */ + .MENU_TEXT + { + font-size:12pt; + font-weight:bold; + line-height:110%; + margin:0 auto; + } + } + +.WHITE_MENU_OFF {color:#4D88A1;} +.GREY_MENU_OFF {color:#707070;} +.BLUE_MENU_OFF {color:#4D88A1;} +.YELLOW_MENU_OFF {color:#BD4815;} + +.WHITE_MENU_ON {color:#4D88A1;} +.GREY_MENU_ON {color:#606060;} +.BLUE_MENU_ON {color:#4D88A1;} +.YELLOW_MENU_ON {color:#BD4815;} + +/****************** Title of current action in main block ********************/ +.WHITE_TITLE_ACTION {color:#606060; font-size:20pt;} +.GREY_TITLE_ACTION {color:#606060; font-size:20pt;} +.BLUE_TITLE_ACTION {color:#4D88A1; font-size:20pt;} +.YELLOW_TITLE_ACTION {color:#BD4815; font-size:20pt;} + +.WHITE_SUBTITLE_ACTION {color:#606060; font-size:12pt;} +.GREY_SUBTITLE_ACTION {color:#606060; font-size:12pt;} +.BLUE_SUBTITLE_ACTION {color:#4D88A1; font-size:12pt;} +.YELLOW_SUBTITLE_ACTION {color:#BD4815; font-size:12pt;} + +/************************* Users connected globally **************************/ +.CONNECTED + { + box-sizing:border-box; + margin:0 auto; + background:white; + border-style:solid; + border-width:1px; + border-color:#80C040; + padding:5px; + border-radius:4px; + font-size:12pt; + color:#398000; + overflow:hidden; + } +.CONNECTED_LIST + { + box-sizing:border-box; + margin-top:2px; + padding-top:2px; + border-style:solid; + border-width:1px 0 0 0; + border-color:#BFDF9F; + } + +/*************************** Most frequent actions ***************************/ +#MFU_actions + { + box-sizing:border-box; + width:148px; + margin:0; + background:white; + border-style:solid; + border-width:1px; + border-color:#8CBCCE; + padding:5px; + border-radius:4px; + font-size:11pt; + color:#4D88A1; + } +#MFU_actions ul + { + box-sizing:border-box; + width:138px; + margin-top:2px; + padding-top:2px; + border-style:solid; + border-width:1px 0 0 0; + border-color:#DDECF1; + } +#MFU_actions li + { + width:138px; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + } +#MFU_actions img + { + width:20px; + height:20px; + margin:1px; + vertical-align:middle; + } + +#MFU_actions_big + { + padding:5px; + } +#MFU_actions_big img + { + width:40px; + height:40px; + margin:1px 4px 1px 0; + vertical-align:middle; + } + +/*********************************** Month ***********************************/ +.MONTH_CONTAINER + { + box-sizing:border-box; + width:148px; + margin:0; + padding:5px; + background:white; + border-style:solid; + border-width:1px; + border-color:#8CBCCE; + border-radius:4px; + text-align:center; + overflow:hidden; + } +.MONTH_TABLE_DAYS + { + box-sizing:border-box; + width:138px; + margin-top:2px; + padding-top:2px; + border-style:solid; + border-width:1px 0 0 0; + border-color:#DDECF1; + } +.MONTH + { + color:#4D88A1; + font-size:9pt; + white-space:nowrap; + } +.DAY_WRK_HEAD + { + color:#4D88A1; + font-size:9pt; + text-align:center; + } +.DAY_NO_WRK_HEAD + { + color:red; + font-size:9pt; + text-align:center; + } +.DAY_WRK + { + color:#202020; + font-size:9pt; + text-align:center; + } +.DAY_NO_WORK + { + color:#C04080; + font-size:9pt; + text-align:center; + } +.DAY_HLD + { + color:red; + font-size:9pt; + text-align:center; + } +.DAY_WRK_LIGHT + { + color:#E0E0E0; + font-size:9pt; + text-align:center; + } +.DAY_NO_WORK_LIGHT + { + color:#FFE0FF; + font-size:9pt; + text-align:center; + } +.DAY_HLD_LIGHT + { + color:#FFE0E0; + font-size:9pt; + text-align:center; + } +.DAY + { + border:solid 1px; + border-color:white; + text-align:center; + } +.TODAY + { + border:solid 1px; + border-color:#50B800; + text-align:center; + } +.DAY_EVENT + { + border:solid 1px; + border-color:white; + background-color:#FFF080; + text-align:center; + } +.TODAY_EVENT + { + border:solid 1px; + border-color:#50B800; + background-color:#FFF080; + text-align:center; + } + +/********************************* Buttons ***********************************/ +.BT_CREATE + { + background-color:#5BC33B; + border:1px solid #518741; + } +.BT_CONFIRM + { + background-color:#55ACEE; + border:1px solid #3B88C3; + } +.BT_REMOVE + { + background-color:#EF5555; + border:1px solid #C33B3B; + } +.BT_SUBMIT + { + color:white; + font-size:20px; + font-weight:bold; + line-height:normal; + margin:8px auto; + padding:10px 20px; + border-radius:4px; + box-shadow:0 1px 0 rgba(255,255,255,0.15) inset; + } +.BT_SUBMIT_INLINE + { + box-sizing:border-box; + min-width:170px; + color:white; + font-size:15px; + font-weight:bold; + line-height:normal; + margin:0 10px; + padding:4px; + border-radius:4px; + box-shadow:0 1px 0 rgba(255,255,255,0.15) inset; + } +.BT_SUBMIT:hover + { + background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2)); + } +.BT_SUBMIT_INLINE:hover + { + background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2)); + } +.BUTTONS_AFTER_ALERT + { + text-align:center; + vertical-align:middle; + padding:8px 0 16px 0; + } + +/********************************** Notice ***********************************/ +.NOTICE_CONTAINER_ACTIVE + { + box-sizing:border-box; + margin:0 auto 10px auto; + padding:10px; + background-image:linear-gradient(rgba(238,216,108,0.8) 0%,rgba(248,237,149,0.8) 15%,rgba(250,240,152,0.8) 100%); + box-shadow:0 8px 10px -5px rgba(125,113,0,0.8); + text-align:left; + overflow:hidden; + } +.NOTICE_CONTAINER_OBSOLETE + { + box-sizing:border-box; + margin:0 auto 10px auto; + padding:10px; + background-image:linear-gradient(rgba(238,216,108,0.4) 0%,rgba(248,237,149,0.4) 15%,rgba(250,240,152,0.4) 100%); + box-shadow:0 8px 10px -5px rgba(125,113,0,0.4); + text-align:left; + overflow:hidden; + } +.NOTICE_DATE_ACTIVE + { + display:inline-block; + float:right; + font-size:12pt; + color:#404040; + text-align:right; + overflow:hidden; + } +.NOTICE_DATE_OBSOLETE + { + display:inline-block; + float:right; + font-size:12pt; + color:#808080; + text-align:right; + overflow:hidden; + } +.NOTICE_SUBJECT_ACTIVE + { + margin:12px auto; + font-size:15pt; + font-weight:bold; + color:#404040; + text-align:center; + overflow:hidden; + } +.NOTICE_SUBJECT_OBSOLETE + { + margin:12px auto; + font-size:15pt; + font-weight:bold; + color:#808080; + text-align:center; + overflow:hidden; + } +.NOTICE_TEXT_BRIEF + { + clear:both; + font-size:12pt; + color:#204080; + overflow:hidden; + } +.NOTICE_TEXT_ACTIVE + { + padding:10px 20px; + clear:both; + font-size:12pt; + color:#204080; + overflow:hidden; + } +.NOTICE_TEXT_OBSOLETE + { + padding:10px 20px; + clear:both; + font-size:12pt; + color:#4070A0; + overflow:hidden; + } +.NOTICE_AUTHOR_ACTIVE + { + color:#404040; + font-size:12pt; + text-align:right; + overflow:hidden; + } +.NOTICE_AUTHOR_OBSOLETE + { + color:#808080; + font-size:12pt; + text-align:right; + overflow:hidden; + } + +/**************************** Institutional links ****************************/ +#institutional_links + { + box-sizing:border-box; + width:148px; + margin:0; + background:white; + border-style:solid; + border-width:1px; + border-color:#8CBCCE; + padding:5px; + border-radius:4px; + font-size:11pt; + color:#4D88A1; + overflow:hidden; + } +.INS_LNK + { + padding:1px; + font-size:11pt; + color:#4D88A1; + } + +/*********************************** Alerts **********************************/ +.ALERT + { + display:inline-block; + box-sizing:border-box; + max-width:90%; + margin:8px auto 0 auto; + background-color:#FFF9E0; + background-position:12px 12px; + background-size:20px 20px; + background-repeat:no-repeat; + padding:12px 12px 12px 45px; + border-radius:2px; + box-shadow: 0 2px 2px 0 rgba(124,121,109,0.14), 0 2px 1px -2px rgba(124,121,109,0.2), 0 1px 5px 0 rgba(124,121,109,0.12); + opacity:0.9; + font-size:12pt; + color:#632921; + text-align:left; + overflow:hidden; + } + +/*********************************** Icons ***********************************/ +.ICON20x15B {width:20px; height:15px; vertical-align:middle; display:block;} +.ICON20x20 {width:20px; height:20px; vertical-align:middle;} +.ICON20x20B {width:20px; height:20px; vertical-align:middle; display:block;} +.ICON25x25 {width:25px; height:25px; vertical-align:middle;} +.ICON40x40 {width:40px; height:40px; vertical-align:middle;} +.ICON40x40B {width:40px; height:40px; vertical-align:middle; display:block;} +.ICON64x64 {width:64px; height:64px; vertical-align:middle;} +.ICON160x160 {width:160px; height:160px; vertical-align:middle;} +.BANNER {width:150px; height:50px;} +.BANNER_SMALL {width:75px; height:25px;} + +/****** Contextual links with small icons and text to go to some action ******/ +.CONTEXT_MENU + { + margin:6px auto 8px auto; + text-align:center; + } +.CONTEXT_OPT + { + display:inline; + margin-left:6px; + margin-right:6px; + white-space:nowrap; + } + +/********************************* Frame 10 **********************************/ +.FRAME + { + display:inline-block; + box-sizing:border-box; + margin:5px 0; + padding:8px 12px 20px 12px; + background-color:white; + border-radius:2px; + box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 2px 1px -2px rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.12); + text-align:center; + overflow:hidden; + } +.FRAME_SHADOW + { + display:inline-block; + box-sizing:border-box; + margin:5px 0 18px 0; + padding:12px; + background-color:rgba(255,255,255,0.95); + border-width:1px; + border-style:solid; + border-color:#C0C0C0; + border-radius:4px; + box-shadow:2px 5px 15px #888; + text-align:center; + overflow:hidden; + } +.FRAME_ICONS + { + display:table; + height:20px; + } +.FRAME_TABLE + { + box-sizing:border-box; + width:100%; + } +.FRAME_TABLE_MARGIN + { + box-sizing:border-box; + width:100%; + margin-bottom:20px; + } +.FRAME_TABLE_TITLE + { + display:table; + box-sizing:border-box; + width:100%; + margin:0 auto; + padding:0 12px 12px 12px; + color:#808080; + font-size:20pt; + font-weight:bold; + } + +/* Apply only to the first level of th and td */ +table.CELLS_PAD_1 > tbody > tr > th {padding: 1px;} +table.CELLS_PAD_1 > tbody > tr > td {padding: 1px;} +table.CELLS_PAD_2 > tbody > tr > th {padding: 2px;} +table.CELLS_PAD_2 > tbody > tr > td {padding: 2px;} +table.CELLS_PAD_5 > tbody > tr > th {padding: 5px;} +table.CELLS_PAD_5 > tbody > tr > td {padding: 5px;} +table.CELLS_PAD_10 > tbody > tr > th {padding:10px;} +table.CELLS_PAD_10 > tbody > tr > td {padding:10px;} + +/*********************************** Title ***********************************/ +.TIT + { + margin:13px auto 0 auto; + font-size:13pt; + font-weight:bold; + color:#94745C; + text-align:center; + } + +/********** Title of country,institution,centre,degree,course ************/ +.TITLE_LOCATION + { + font-size:25pt; + font-weight:bold; + color:#808080; + text-align:center; + } + +/******************************* Map of country ******************************/ +.COUNTRY_MAP_TITLE + { + box-sizing:border-box; + width:40px; + height:40px; + margin-right:10px; + vertical-align:top; + } +.COUNTRY_MAP_TINY + { + box-sizing:border-box; + width:20px; + height:20px; + vertical-align:middle; + } +.COUNTRY_MAP_SMALL + { + box-sizing:border-box; + width:64px; + height:64px; + vertical-align:middle; + } +.COUNTRY_MAP_SHOW + { + box-sizing:border-box; + width:320px; + height:320px; + margin:10px; + } +.COUNTRY_MAP_PRINT + { + box-sizing:border-box; + width:625px; + height:625px; + margin:12px; + } + +/****************************** Photo of centre ******************************/ +.CENTRE_PHOTO_SHOW + { + box-sizing:border-box; + width:480px; + padding:6px; margin:9px; + border:solid 1px #EEE; + } +a:hover img.CENTRE_PHOTO_SHOW + { + border:solid 1px #CCC; + box-shadow:1px 1px 6px #999; + } +.CENTRE_PHOTO_PRINT + { + box-sizing:border-box; + width:600px; + padding:10px; margin:15px; + border:solid 1px #EEE; + box-shadow:1px 1px 6px #999; + } + +/**************** Attribution (author and license) of images *****************/ +#AttributionArea + { + box-sizing:border-box; + width:480px; + } +.ATTRIBUTION + { + box-sizing:border-box; + margin-bottom:15px; + color:#A0A0A0; + font-size:8pt; + text-align:center; + } + +/******************************* User's photo ********************************/ +.PHOTO15x20 {width: 15px; height: 20px; vertical-align:middle; border-radius:2px;} +.PHOTO15x20B {width: 15px; height: 20px; vertical-align:middle; border-radius:2px; display:block; margin:0 auto;} +.PHOTO18x24 {width: 18px; height: 24px; vertical-align:middle; border-radius:2px;} +.PHOTO21x28 {width: 21px; height: 28px; vertical-align:middle; border-radius:2px;} +.PHOTO30x40 {width: 30px; height: 40px; vertical-align:middle; border-radius:2px;} +.PHOTO42x56 {width: 42px; height: 56px; vertical-align:middle; border-radius:3px;} +.PHOTO45x60 {width: 45px; height: 60px; vertical-align:middle; border-radius:3px;} +.PHOTO60x80 {width: 60px; height: 80px; vertical-align:middle; border-radius:3px;} +.PHOTO93x124 {width: 93px; height:124px; vertical-align:middle; border-radius:4px;} +.PHOTO186x248 {width:186px; height:248px; vertical-align:middle; border-radius:8px;} +.IMG_USR + { + box-sizing:border-box; + width:186px; + height:248px; + border-radius:4px; + } +.ZOOM + { + box-sizing:border-box; + position:absolute; + z-index:1000; + left:-300px; + top:-400px; + padding:6px; + background-color:rgba(255,255,255,0.95); + border-width:1px; + border-style:solid; + border-color:#C0C0C0; + border-radius:6px; + box-shadow:2px 5px 15px #888; + } +.ZOOM_TXT + { + color:#202020; + font-size:12pt; + } + +.NO_BR {white-space:nowrap;} + +.BG_MSG_BLUE + { + background-image:linear-gradient(#eaf3f6 0,#eaf3f6 80%,white 100%); + background-repeat:no-repeat; + } +.BG_MSG_GREEN + { + background-image:linear-gradient(#f5ffd7 0,#f5ffd7 80%,white 100%); + background-repeat:no-repeat; + } + +/************************** Listing of users *********************************/ +.USR_LIST_NUM {color:#A0A0A0; font-size:15pt; font-weight:bold;} +.USR_LIST_NUM_N {color:#404040; font-size:15pt; font-weight:bold;} + +/*****************************************************************************/ +.WHITE_USR {color:#E0E0E0; font-size:15pt; font-weight:bold; white-space:nowrap;} +.GREY_USR {color:#E0E0E0; font-size:15pt; font-weight:bold; white-space:nowrap;} +.BLUE_USR {color:white; font-size:15pt; font-weight:bold; white-space:nowrap;} +.YELLOW_USR {color:#B3B0B3; font-size:15pt; font-weight:bold; white-space:nowrap;} + +.WHITE_CONNECTED {color:#398000; font-size:12pt;} +.GREY_CONNECTED {color:#398000; font-size:12pt;} +.BLUE_CONNECTED {color:#398000; font-size:12pt;} +.YELLOW_CONNECTED {color:#398000; font-size:12pt;} + +.WHITE_TITLE {color:#505050; font-size:18pt;} +.GREY_TITLE {color:#505050; font-size:18pt;} +.BLUE_TITLE {color:#4D88A1; font-size:18pt;} +.YELLOW_TITLE {color:#BD4815; font-size:18pt;} + +/**************************** Icon highlighting ******************************/ +.ICON_HIDDEN + { + opacity:0.2; + } +.ICON_HIGHLIGHT + { + opacity:0.67; + } +.ICON_HIGHLIGHT:hover + { + opacity:1; + } + +/********************************* Form fonts ********************************/ +.WHITE_FORM {color:#4D88A1; font-size:13pt;} +.GREY_FORM {color:#4D88A1; font-size:13pt;} +.BLUE_FORM {color:#4D88A1; font-size:13pt;} +.YELLOW_FORM {color:#7C4D2A; font-size:13pt;} + +.WHITE_FORM_DARK {color:#365E6E; font-size:13pt;} +.GREY_FORM_DARK {color:#365E6E; font-size:13pt;} +.BLUE_FORM_DARK {color:#365E6E; font-size:13pt;} +.YELLOW_FORM_DARK {color:#4A2E19; font-size:13pt;} + +.WHITE_FORM_NOWRAP {color:#4D88A1; font-size:13pt; white-space:nowrap;} +.GREY_FORM_NOWRAP {color:#4D88A1; font-size:13pt; white-space:nowrap;} +.BLUE_FORM_NOWRAP {color:#4D88A1; font-size:13pt; white-space:nowrap;} +.YELLOW_FORM_NOWRAP {color:#7C4D2A; font-size:13pt; white-space:nowrap;} + +.WHITE_FORM_BOLD {color:#4D88A1; font-size:13pt; font-weight:bold;} +.GREY_FORM_BOLD {color:#4D88A1; font-size:13pt; font-weight:bold;} +.BLUE_FORM_BOLD {color:#4D88A1; font-size:13pt; font-weight:bold;} +.YELLOW_FORM_BOLD {color:#7C4D2A; font-size:13pt; font-weight:bold;} + +/****************************** Placing of objects ***************************/ +.LEFT_TOP {text-align:left; vertical-align:top;} +.LEFT_MIDDLE {text-align:left; vertical-align:middle;} +.LEFT_BOTTOM {text-align:left; vertical-align:bottom;} +.CENTER_TOP {text-align:center; vertical-align:top;} +.CENTER_MIDDLE {text-align:center; vertical-align:middle;} +.CENTER_BOTTOM {text-align:center; vertical-align:bottom;} +.RIGHT_TOP {text-align:right; vertical-align:top;} +.RIGHT_MIDDLE {text-align:right; vertical-align:middle;} +.RIGHT_BOTTOM {text-align:right; vertical-align:bottom;} + +/***************** Colors used in headers,backgrounds,etc. *****************/ +.COLOR0 {background-color:#F4F2EA;} +.COLOR1 {background-color:#FBFAF7;} +.LIGHT_GREEN {background-color:#C0FF40;} +.LIGHT_BLUE {background-color:#DDECF1;} +.VERY_LIGHT_BLUE {background-color:#EAF3F6;} + +/********************************* Course info *******************************/ +#crs_info + { + margin:0; + padding:0 12px; + color:inherit; + } +#crs_info table + { + border:1px solid grey; + } +#crs_info th + { + border:1px solid grey; + background-color:#F0F0F0; + padding:6px; + } +#crs_info td + { + border:1px solid grey; + padding:6px; + } + +/************************ Help for the text editor ***************************/ +.HELP_EDIT + { + margin:10px; + text-align:center; + color:#808080; + font-size:8pt; + } + +/*********************************** Lists ***********************************/ +.LIST_LEFT + { + list-style-type:none; + padding:0; + margin:0; + text-align:left; + vertical-align:middle; + } +.LIST_CENTER + { + list-style-type:none; + padding:0; + margin:0 auto; + text-align:center; + vertical-align:middle; + } + +/*****************************************************************************/ + +.FILENAME {color:#404040; font-size:18pt; font-weight:bold;} + +.BROWSER_TITLE {color:#94745C; font-size:13pt; font-weight:bold;} +.BROWSER_TITLE_LIGHT {color:#D5C6BB; font-size:13pt; font-weight:bold;} +.BROWSER_SUBTITLE {color:#94745C; font-size:12pt;} +.BROWSER_TABLE + { + box-sizing:border-box; + width:100%; + } + +.T1 {color:#404040; font-size:15pt;} +.T2 {color:#404040; font-size:13pt;} +.T3 {color:#404040; font-size:12pt;} + +.LST {color:#404040; font-size:11pt; white-space:nowrap;} +.LST_HID {color:#A0A0A0; font-size:11pt; white-space:nowrap;} +.LST_REC {color:#008000; font-size:11pt; white-space:nowrap;} +.LST_REC_HID {color:#89BE87; font-size:11pt; white-space:nowrap;} +.LST_EDIT {color:#404040; font-weight:bold; font-size:11pt; height:20px; padding-top:0; padding-bottom:0; margin-top:-1px; margin-bottom:-1px; border-width:1px; border-style:solid; border-color:#ECE9D8;} +.LST_EDIT_HID {color:#A0A0A0; font-weight:bold; font-size:11pt; height:20px; padding-top:0; padding-bottom:0; margin-top:-1px; margin-bottom:-1px; border-width:1px; border-style:solid; border-color:#ECE9D8;} +.LST_EDIT_REC {color:#008000; font-weight:bold; font-size:11pt; height:20px; padding-top:0; padding-bottom:0; margin-top:-1px; margin-bottom:-1px; border-width:1px; border-style:solid; border-color:#ECE9D8;} +.LST_EDIT_REC_HID {color:#89BE87; font-weight:bold; font-size:11pt; height:20px; padding-top:0; padding-bottom:0; margin-top:-1px; margin-bottom:-1px; border-width:1px; border-style:solid; border-color:#ECE9D8;} + +.DAT {color:#404040; font-size:13pt;} +.DAT_NOBR {color:#404040; font-size:13pt; white-space:nowrap;} +.DAT_BOLD {color:#404040; font-size:13pt; font-weight:bold;} +.DAT_GREEN {color:#008000; font-size:13pt;} +.DAT_LIGHT {color:#A0A0A0; font-size:13pt;} +.DAT_N {color:black; font-size:13pt;} +.DAT_NOBR_N {color:black; font-size:13pt; white-space:nowrap;} +.DAT_N_BOLD {color:black; font-size:13pt; font-weight:bold;} + +/*********************** Line in top part of a table row *********************/ +.DAT_N_LINE_TOP + { + color:black; + font-size:13pt; + border-style:solid none none none; + border-width:1px; + } + +.DAT_SMALL {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt;} +.DAT_SMALL_LIGHT {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#A0A0A0; font-size:12pt;} +.DAT_SMALL_NOBR {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt; white-space:nowrap;} +.DAT_SMALL_N {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:black; font-size:12pt;} +.DAT_SMALL_NOBR_N {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:black; font-size:12pt; white-space:nowrap;} + +.DAT_SMALL_GREY {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#707070; font-size:12pt;} +.DAT_SMALL_RED {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:12pt;} +.DAT_SMALL_GREEN {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#008000; font-size:12pt;} +.DAT_SMALL_BLUE {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#0080FF; font-size:12pt;} +.DAT_SMALL_YELLOW {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#C0C000; font-size:12pt;} + +/******************************** User's IDs *********************************/ +.USR_ID {font-size:18pt; font-weight:bold;} +.USR_ID_C {color:#408020} +.USR_ID_NC {color:#A02020} + +/******************************* Record card *********************************/ +.REC_SHORTCUTS + { + width:20px; + margin:8px auto; + } + +.REC_C1_TOP + { + box-sizing:border-box; + width:68px; + vertical-align:top; + } +.REC_C2_TOP + { + box-sizing:border-box; + width:282px; + height:68px; + } +.REC_C3_TOP + { + box-sizing:border-box; + width:190px; + } + +.REC_C1_MID + { + box-sizing:border-box; + width:68px; + } +.REC_C2_MID + { + box-sizing:border-box; + width:282px; + } +.REC_C3_MID + { + box-sizing:border-box; + width:190px; + } + +.REC_C1_BOT + { + box-sizing:border-box; + width:170px; + } +.REC_C2_BOT + { + box-sizing:border-box; + width:362px; + } +.REC_C2_BOT_INPUT + { + box-sizing:border-box; + width:358px; + } + +.REC_HEAD {font-family:Georgia,"DejaVu LGC Serif","Bitstream Vera Serif",serif; color:#808080; font-size:12pt;} +.REC_NAME {color:#808080; font-size:20pt; font-weight:bold;} +.REC_NICK {color:#808080; font-size:15pt; font-weight:bold;} +.REC_WEBS + { + width:180px; + margin:0 auto; + } +.REC_DAT {color:#808080; font-size:13pt; line-height:110%;} +.REC_DAT_BOLD {color:black; font-size:13pt; line-height:110%;} + +/*****************************************************************************/ +.MSJ_AVISO {color:#632921; font-size:12pt;} +.TIT_TBL {color:#4D88A1; font-size:12pt; font-weight:bold;} +.TIT_CLASSPHOTO {font-family:Georgia,"DejaVu LGC Serif","Bitstream Vera Serif",serif; color:#606060; font-size:13pt;} +.CLASSPHOTO {color:#606060; font-size:10pt; line-height:110%; white-space:nowrap;} + +.GRP_TITLE {color:#4D88A1; font-size:15pt; font-weight:bold;} + +.ASG_TITLE {color:#4D88A1; font-size:15pt; font-weight:bold;} +.ASG_TITLE_LIGHT {color:#AFC4CC; font-size:15pt; font-weight:bold;} +.ASG_GRP {color:#4D88A1; font-size:12pt;} +.ASG_GRP_LIGHT {color:#AFC4CC; font-size:12pt;} +.DATE_GREEN {color:#008000; font-size:13pt;} +.DATE_GREEN_LIGHT {color:#89BE87; font-size:13pt;} +.DATE_RED {color:red; font-size:13pt;} +.DATE_RED_LIGHT {color:#F98A8A; font-size:13pt;} + +.ASG_LST_DATE_GREEN {color:#008000; font-size:11pt; white-space:nowrap;} +.ASG_LST_DATE_RED {color:red; font-size:11pt; white-space:nowrap;} + +.STATUS_GREEN {color:#008000; font-size:12pt;} +.STATUS_GREEN_LIGHT {color:#89BE87; font-size:12pt;} +.STATUS_RED {color:red; font-size:12pt;} +.STATUS_RED_LIGHT {color:#F98A8A; font-size:12pt;} + +/********************************** Tests ************************************/ +.TAG_SEL {box-sizing:border-box; width:346px;} +.TAG_TXT {box-sizing:border-box; width:346px;} +.STEM {box-sizing:border-box; width:700px;} +.ANS {color:#404040; font-size:13pt; font-weight:bold;} +.ANS_OK {color:#008000; font-size:13pt; font-weight:bold;} +.ANS_BAD {color:red; font-size:13pt; font-weight:bold;} +.ANS_STR {box-sizing:border-box; width:600px;} +.TEST_SUBTITLE + { + margin:10px; + color:#404040; + font-size:13pt; + text-align:center; + vertical-align:middle; + } +.TEST_NUM_QST {color:#808080; font-size:20pt; font-weight:bold;} +.TEST {color:#404040; font-size:12pt;} +.TEST_EXA {color:#404040; font-size:12pt;} +.TEST_EXA_LIGHT {color:#A0A0A0; font-size:12pt;} +.TEST_EDI {color:#404040; font-size:12pt;} +.TEST_EDI_LIGHT {color:#A0A0A0; font-size:12pt;} + +.TEST_IMG_SHOW_STEM_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:10px 0; + } +.TEST_IMG_SHOW_STEM + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } +.TEST_IMG_SHOW_ANS_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:10px 0; + } +.TEST_IMG_SHOW_ANS + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } +.TEST_IMG_EDIT_LIST_STEM_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:5px 0; + } +.TEST_IMG_EDIT_LIST_STEM + { + box-sizing:border-box; + width:100%; + border-radius:2px; + } +.TEST_IMG_EDIT_LIST_ANS_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:5px 0; + } +.TEST_IMG_EDIT_LIST_ANS + { + box-sizing:border-box; + width:100%; + border-radius:2px; + } + +.TEST_FORM_EDIT_IMG + { + box-sizing:border-box; + margin:15px 0; + text-align:left; + vertical-align:top; + } + +.TEST_IMG_EDIT_ONE_STEM_CONTAINER + { + box-sizing:border-box; + width:100%; + } +.TEST_IMG_EDIT_ONE_STEM + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } +.TEST_IMG_EDIT_ONE_ANS_CONTAINER + { + box-sizing:border-box; + width:100%; + } +.TEST_IMG_EDIT_ONE_ANS + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } + +.TEST_EDI_ANS_LEFT_COL + { + box-sizing:border-box; + width:50px; + text-align:left; + vertical-align:top; + } +.TEST_EDI_ANS_CENTER_COL + { + box-sizing:border-box; + width:50px; + text-align:right; + vertical-align:top; + } +.TEST_EDI_ANS_RIGHT_COL + { + box-sizing:border-box; + width:604px; + text-align:left; + vertical-align:top; + } + +/******************************* Time table **********************************/ +#timetable + { + width:100%; + margin:0 auto; + } +.TT_TXT + { + font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; + color:#345C6C; + font-size:10pt; + line-height:110%; + letter-spacing:0; + } +.TT_DAY + { + font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; + color:#404040; + font-size:10pt; + letter-spacing:0; + } +.TT_SUNDAY + { + font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; + color:red; + font-size:10pt; + letter-spacing:0; + } +.FREE0 {height:20px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #EEEADC #F4F2EA;} +.FREE1 {height:20px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #E0D9C2 #F4F2EA;} +.FREE2 {height:20px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #F5F2E9 #FBFAF7;} +.FREE3 {height:20px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #E0D9C2 #FBFAF7;} +.THEO {height:20px; background-color:#C0DAE4; border:solid 2px; border-color:#C9E3ED #B5CFD9 #B5CFD9 #C9E3ED;} +.PRAC {height:20px; background-color:#DBE5E9; border:solid 2px; border-color:#E4EEF2 #D0DADE #D0DADE #E4EEF2;} +.TUTO {height:20px; background-color:#D6E9C3; border:solid 2px; border-color:#DFEEE0 #CAE3B1 #CAE3B1 #DFEEE0;} + +.PREF_OFF + { + box-sizing:border-box; + height:42px; + padding:0; + text-align:center; + vertical-align:middle; + } +.PREF_ON + { + box-sizing:border-box; + height:42px; + padding:0; + text-align:center; + vertical-align:middle; + border:solid 1px; + border-color:#C0DAE4; + background-color:#DDECF1; + } + +.LOG {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#606060; font-size:11pt;} +.LOG_R {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:11pt;} + +/******************************** Image uploading ****************************/ +.IMG_UPLOAD_CONTAINER + { + vertical-align:top; + margin-bottom:10px; + } +.IMG_UPLOAD_BUTTON + { + cursor:pointer; + } +.IMG_UPLOAD_ICON + { + width:20px; + height:20px; + margin:0 5px; + vertical-align:middle; + } +.IMG_UPLOAD_FILE + { + display:none; + } +.IMG_UPLOAD_FILENAME + { + color:#808080; + font-size:12pt; + } + +/******************************** Social activity ****************************/ +#view_new_posts_container,#view_old_posts_container + { + display:table-cell; + height:50px; + text-align:center; + vertical-align:middle; + } +#just_now_timeline_list,#new_timeline_list,#old_timeline_list + { + display:none; + margin:0; + padding:0; + } +#old_timeline_list + { + margin:0; + padding:0; + } + +.SOCIAL_PUB + { + width:536px; + border-top:1px solid silver; + } +.SOCIAL_NEW_PUB + { + background-color:#DDECF1; + animation: fadein 2s linear forwards; + } +@keyframes fadein + { + to {background-color:white;} + } + +.SOCIAL_FORM_NEW_POST + { + padding:10px 0; + width:480px; + text-align:center; + } +.SOCIAL_TOP_CONTAINER + { + box-sizing:border-box; + width:536px; + padding-top:10px; + text-align:left; + } +.SOCIAL_TOP_PUBLISHER + { + color:#808080; + font-size:13pt; + } + +.SOCIAL_NOTE_LEFT_PHOTO + { + display:inline-block; + box-sizing:border-box; + width:56px; + height:70px; + padding:10px 0; + text-align:left; + vertical-align:top; + } +.SOCIAL_NOTE_RIGHT_CONTAINER + { + display:inline-block; + box-sizing:border-box; + width:480px; + padding-top:10px; + } +.SOCIAL_RIGHT_AUTHOR + { + display:inline-block; + box-sizing:border-box; + width:320px; + text-align:left; + vertical-align:top; + } +.SOCIAL_RIGHT_TIME + { + display:inline-block; + box-sizing:border-box; + width:160px; + text-align:right; + vertical-align:top; + } +.SOCIAL_BOTTOM_LEFT /* Container for button used to toggle new comment form */ + { + display:inline-block; + box-sizing:border-box; + width:56px; + vertical-align:bottom; + } +.SOCIAL_BOTTOM_RIGHT /* Container for fav, share, remove and comments */ + { + display:inline-block; + box-sizing:border-box; + width:480px; + vertical-align:top; + } +.SOCIAL_ICONS_FAV_SHA_REM /* Container for fav, share and remove */ + { + padding-bottom:10px; + } +.SOCIAL_TEXTAREA_POST + { + box-sizing:border-box; + width:480px; + margin:0; + resize:none; + } +.SOCIAL_TXT + { + padding:5px 0; + color:#404040; + font-size:13pt; + } +.SOCIAL_POST_IMG_CONTAINER + { + box-sizing:border-box; + width:480px; + margin:10px 0; + } +.SOCIAL_POST_IMG + { + box-sizing:border-box; + width:480px; + border-radius:4px; + } +.SOCIAL_POST_IMG_TIT_URL + { + box-sizing:border-box; + width:440px; + } +.SOCIAL_ICON_COMMENT + { + display:inline-block; + padding-bottom:10px; + } +.SOCIAL_ICON_COMMENT_DISABLED + { + display:inline-block; + padding-bottom:10px; + opacity:0.1; + } +.SOCIAL_ICON_FAV + { + display:inline-block; + vertical-align:bottom; + } +.SOCIAL_ICON_SHARE + { + display:inline-block; + padding-left:20px; + vertical-align:bottom; + } +.SOCIAL_ICON_FAV_DISABLED + { + display:inline-block; + vertical-align:bottom; + opacity:0.1; + } +.SOCIAL_ICON_SHARE_DISABLED + { + display:inline-block; + padding-left:20px; + vertical-align:bottom; + opacity:0.1; + } +.SOCIAL_ICON_REMOVE + { + display:inline-block; + vertical-align:bottom; + float:right; + } +.SOCIAL_NUM_SHARES_FAVS + { + color:#A0A0A0; + font-size:12pt; + font-weight:bold; + } +.SOCIAL_SHARER + { + display:inline-block; + padding-left:4px; + vertical-align:bottom; + } +.SOCIAL_COMMENT + { + border-top:1px solid silver; + } +.SOCIAL_COMMENT_PHOTO + { + display:inline-block; + box-sizing:border-box; + width:40px; + height:54px; + padding:10px 0; + text-align:left; + vertical-align:top; + } +.SOCIAL_COMMENT_RIGHT_CONTAINER + { + display:inline-block; + box-sizing:border-box; + width:440px; + padding:10px 0; + } +.SOCIAL_COMMENT_RIGHT_AUTHOR + { + display:inline-block; + box-sizing:border-box; + width:280px; + text-align:left; + vertical-align:top; + } +.SOCIAL_FORM_NEW_COMMENT + { + display:inline-block; + margin-left:56px; + border-top:1px solid silver; + padding-bottom:10px; + width:480px; + text-align:center; + } +.SOCIAL_TEXTAREA_COMMENT + { + box-sizing:border-box; + width:440px; + margin:0; + resize:none; + } +.SOCIAL_COMMENT_IMG_CONTAINER + { + box-sizing:border-box; + width:440px; + margin:10px 0; + } +.SOCIAL_COMMENT_IMG + { + box-sizing:border-box; + width:440px; + border-radius:4px; + } +.SOCIAL_COMMENT_IMG_TIT_URL + { + box-sizing:border-box; + width:440px; + } + +/************************************ Forum **********************************/ +.FOR_IMG_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:10px 0; + } +.FOR_IMG + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } +.FOR_IMG_TIT_URL + { + box-sizing:border-box; + width:480px; + } + +/*********************************** Messages ********************************/ +.MSG_TO_ONE_RCP + { + display:inline-block; + padding-left:4px; + text-align:left; + vertical-align:middle; + } +.MSG_IMG_CONTAINER + { + box-sizing:border-box; + width:100%; + margin:10px 0; + } +.MSG_IMG + { + box-sizing:border-box; + width:100%; + border-radius:4px; + } +.MSG_IMG_TIT_URL + { + box-sizing:border-box; + width:480px; + } +.MSG_TXT {color:#404040; font-size:13pt;} +.MSG_TIT {color:#4D88A1; font-size:13pt;} +.MSG_TIT_NEW {color:#4D88A1; font-size:13pt; font-weight:bold;} +.MSG_TIT_REM {color:#AFC4CC; font-size:13pt;} +.MSG_TIT_BG + { + background-image:linear-gradient(#eaf3f6 0,#eaf3f6 80%,white 100%); + background-repeat:no-repeat; + color:#4D88A1; + font-size:13pt; + } +.MSG_TIT_BG_NEW + { + background-image:linear-gradient(#f5ffd7 0,#f5ffd7 80%,white 100%); + background-repeat:no-repeat; + color:#4D88A1; + font-size:13pt; + font-weight:bold; + } +.MSG_TIT_BG_REM + { + background-image:linear-gradient(#f3fcff 0,#f3fcff 80%,white 100%); + background-repeat:no-repeat; + color:#AFC4CC; + font-size:13pt; + } +.MSG_AUT {color:#4D88A1; font-size:11pt;} +.MSG_AUT_LIGHT {color:#AFC4CC; font-size:11pt;} +.MSG_AUT_NEW {color:#4D88A1; font-size:11pt; font-weight:bold;} +.MSG_AUT_BG + { + background-image:linear-gradient(#eaf3f6 0,#eaf3f6 80%,white 100%); + background-repeat:no-repeat; + color:#4D88A1; + font-size:11pt; + } +.MSG_AUT_BG_NEW + { + background-image:linear-gradient(#f5ffd7 0,#f5ffd7 80%,white 100%); + background-repeat:no-repeat; + color:#4D88A1; + font-size:11pt; + font-weight:bold; + } +.MSG_AUT_BG_REM + { + background-image:linear-gradient(#f3fcff 0,#f3fcff 80%,white 100%); + background-repeat:no-repeat; + color:#AFC4CC; + font-size:11pt; + } +.MSG_DATE {color:#4D88A1; font-size:11pt;} +.MSG_DATE_NEW {color:#4D88A1; font-size:11pt; font-weight:bold;} + +.BT {width:20px; text-align:center; vertical-align:top;} +.BT0 {width:20px; text-align:center; vertical-align:top; background-color:#F4F2EA;} +.BT1 {width:20px; text-align:center; vertical-align:top; background-color:#FBFAF7;} +.BM {width:20px; text-align:center; vertical-align:middle;} +.BM_SEL {width:20px; text-align:center; vertical-align:middle; background-color:#C0FF40;} +.BM0 {width:20px; text-align:center; vertical-align:middle; background-color:#F4F2EA;} +.BM1 {width:20px; text-align:center; vertical-align:middle; background-color:#FBFAF7;} + +/***************************** Calls for exams *******************************/ +.CONV_TIT + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#404040; + font-weight:bold; + font-size:18pt; + } +.CONV_TIT_IMPR + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#202020; + font-weight:bold; + font-size:18pt; + } +.CONV_NEG + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#404040; + font-weight:bold; + font-size:13pt; + white-space:nowrap; + } +.CONV_NEG_IMPR + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#202020; + font-weight:bold; + font-size:13pt; + white-space:nowrap; + text-align:right; + } +.CONV + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#404040; + font-size:13pt; + } +.CONV_IMPR + { + font-family:Garamond,"DejaVu LGC Serif","Bitstream Vera Serif",serif; + color:#202020; + font-size:13pt; + } + +/***************************** Public user's profile *************************/ +.PRF_FIG_LEFT_CONTAINER + { + display:inline-block; + box-sizing:border-box; + width:50%; + padding-right:10px; + text-align:right; + vertical-align:top; + } +.PRF_FIG_RIGHT_CONTAINER + { + display:inline-block; + box-sizing:border-box; + width:50%; + padding-left:10px; + text-align:left; + vertical-align:top; + } +.PRF_FIG_UL + { + display:inline-block; + list-style-type:none; + padding:0; + margin:0; + text-align:left; + vertical-align:middle; + } +.PRF_FIG_LI + { + padding:0 0 0 24px; + background-size:20px 20px; + background-repeat:no-repeat; + background-position:left center; + opacity:0.67; + } + +#following_side + { + display:inline-block; + box-sizing:border-box; + width:50%; + padding-right:10px; + } +#followers_side + { + display:inline-block; + box-sizing:border-box; + width:50%; + padding-left:10px; + } +.FOLLOW_SIDE + { + display:table; + box-sizing:border-box; + width:100%; + } +#follows_me + { + display:table-cell; + box-sizing:border-box; + padding-right:20px; + text-align:right; + vertical-align:middle; + } +#follow_usr + { + display:table-cell; + height:60px; + box-sizing:border-box; + padding-left:20px; + text-align:left; + vertical-align:middle; + } +.FOLLOW_BOX + { + display:table-cell; + width:140px; + text-align:center; + vertical-align:middle; + } +.FOLLOW_NUM + { + color:#404040; + font-size:30pt; + font-weight:bold; + opacity:0.5; + } +.FOLLOW_NUM_B + { + color:#404040; + font-size:30pt; + font-weight:bold; + } +.FOLLOW_USR_PHOTO + { + box-sizing:border-box; + width:72px; + height:90px; + text-align:left; + vertical-align:bottom; + } +.FOLLOW_USR_NAME + { + box-sizing:border-box; + min-width:106px; + height:90px; + text-align:left; + vertical-align:bottom; + } +.FOLLOW_USR_ICON + { + padding:4px; + } + +.CON {color:#B8D070; font-size:11pt; line-height:110%; white-space:nowrap;} +.CON_CRS {color:#398000; font-size:11pt; line-height:110%; white-space:nowrap;} + +/*************************** Indicators about courses ************************/ +.INDICATORS td,.INDICATORS th + { + border:1px solid silver; + border-collapse:collapse; + padding:1px; + } +.INDICATORS th + { + color:#4D88A1; + font-size:12pt; + font-weight:bold; + } + +/********************* Used to align buttons in account forms ****************/ +.FORM_ACCOUNT + { + display:inline-block; + box-sizing:border-box; + min-width:312px; + } + +/************* Forms to edit institution, centre, degree, course *************/ +.CODE + { + min-width:60px; + text-align:right; + vertical-align:middle; + } +.INPUT_INS_CODE + { + width:90px; + } +.INPUT_DEGREE + { + width:90px; + } +.INPUT_SHORT_NAME + { + width:90px; + } +.INPUT_FULL_NAME + { + width:180px; + } +.INPUT_WWW + { + width:90px; + } +.STATUS + { + min-width:90px; + text-align:left; + vertical-align:middle; + } +.INPUT_STATUS + { + width:80px; + } +.INPUT_REQUESTER + { + width:90px; + } + +/********************************* Page foot *********************************/ +@media only screen and (max-width: 899px) + { /* For mobile-phones */ + #foot_zone, #about_zone + { + display:none; + } + } +@media only screen and (min-width: 900px) + { /* For tablets and desktop */ + #foot_zone + { + padding:20px; + } + #about_zone + { + padding:20px; + text-align:center; + } + } +.FOOT_LIST_CONTAINER + { + position:relative; + float:left; + text-align:left; + padding-bottom:20px; + background:white; + } +.FOOT_LIST_TITLE + { + color:#666; + font-size:14pt; + font-weight:bold; + white-space:nowrap; + } +.FOOT_LIST + { + box-sizing:border-box; + list-style-type:none; + margin:0; + padding:0; + border-width:0; + font-size:12pt; + white-space:nowrap; + line-height:140%; + } +.FOOT_LINK + { + color:#2C90C9; + } +.ABOUT + { + color:#A0A0A0; + font-size:12pt; + } + +/************** Something that does not take up space and is not shown *******/ +.NOT_SHOWN + { + display:none; + } + +/************ Something that takes up space but which is invisible ***********/ +.HIDDEN + { + visibility:hidden; + } diff --git a/swad_changelog.h b/swad_changelog.h index d5fef53a2..0e50e249e 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -129,13 +129,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.229 (2016-06-23)" +#define Log_PLATFORM_VERSION "SWAD 15.230 (2016-06-23)" #define CSS_FILE "swad15.229.css" #define JS_FILE "swad15.226.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.230: Jun 23, 2015 Optimization and bug fixing in search of users. (203374 lines) Version 15.229: Jun 23, 2015 Search of students available for all users. (203194 lines) Version 15.228.2: Jun 23, 2015 Code refactoring in lists of users. (202791 lines) Version 15.228.1: Jun 23, 2015 Code refactoring in lists of users. (202794 lines) diff --git a/swad_search.c b/swad_search.c index d12781a72..8385dc5c1 100644 --- a/swad_search.c +++ b/swad_search.c @@ -297,7 +297,7 @@ static bool Sch_CheckIfIHavePermissionToSearch (Sch_WhatToSearch_t WhatToSearch) 0x1FF, // Sch_SEARCH_COURSES 0x1FF, // Sch_SEARCH_TEACHERS 0x1FF, // Sch_SEARCH_STUDENTS - 0x1FF, // Sch_SEARCH_GUESTS + 0x100, // Sch_SEARCH_GUESTS Only if I am a system admin 0x1FF, // Sch_SEARCH_OPEN_DOCUMENTS 0x1FE, // Sch_SEARCH_DOCUM_IN_MY_COURSES Only if I am logged 0x1FE, // Sch_SEARCH_MY_DOCUMENTS Only if I am logged diff --git a/swad_user.c b/swad_user.c index 9096ef9b9..9b68b857b 100644 --- a/swad_user.c +++ b/swad_user.c @@ -141,7 +141,7 @@ static void Usr_WriteUsrData (const char *BgColor, const char *Data,const char *Link, bool NonBreak,bool Accepted); -static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,bool Search,const char *UsrQuery,char *Query); +static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,char *Query); static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery); static void Usr_GetAdmsLst (Sco_Scope_t Scope); static void Usr_GetGstsLst (Sco_Scope_t Scope); @@ -1437,13 +1437,17 @@ unsigned long Usr_GetCrssFromUsr (long UsrCod,long DegCod,MYSQL_RES **mysql_res) if (DegCod > 0) // Courses in a degree sprintf (Query,"SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod" " FROM crs_usr,courses" - " WHERE crs_usr.UsrCod='%ld' AND crs_usr.CrsCod=courses.CrsCod AND courses.DegCod='%ld'" + " WHERE crs_usr.UsrCod='%ld'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod='%ld'" " ORDER BY courses.ShortName", UsrCod,DegCod); else // All the courses sprintf (Query,"SELECT crs_usr.CrsCod,crs_usr.Role,courses.DegCod" " FROM crs_usr,courses,degrees" - " WHERE crs_usr.UsrCod='%ld' AND crs_usr.CrsCod=courses.CrsCod AND courses.DegCod=degrees.DegCod" + " WHERE crs_usr.UsrCod='%ld'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod=degrees.DegCod" " ORDER BY degrees.ShortName,courses.ShortName", UsrCod); return DB_QuerySELECT (Query,mysql_res,"can not get the courses a user belongs to"); @@ -3432,7 +3436,8 @@ long Usr_GetRamdomStdFromGrp (long GrpCod) /***** Get a random student from a group from database *****/ sprintf (Query,"SELECT crs_grp_usr.UsrCod FROM crs_grp_usr,crs_usr" - " WHERE crs_grp_usr.GrpCod='%ld' AND crs_grp_usr.UsrCod=crs_usr.UsrCod" + " WHERE crs_grp_usr.GrpCod='%ld'" + " AND crs_grp_usr.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u' ORDER BY RAND(NOW()) LIMIT 1", GrpCod,(unsigned) Rol_STUDENT); if (DB_QuerySELECT (Query,&mysql_res,"can not get a random student from a group")) @@ -3535,7 +3540,7 @@ unsigned Usr_GetNumberOfTeachersInCentre (long CtrCod) /******* Build query to get list with data of users in current course ********/ /*****************************************************************************/ -static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,bool Search,const char *UsrQuery,char *Query) +static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,char *Query) { unsigned NumPositiveCods = 0; unsigned NumNegativeCods = 0; @@ -3565,15 +3570,6 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,bool Search,const cha " AND crs_usr.UsrCod=usr_data.UsrCod", // Do not get banned users Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role, Gbl.Usrs.Me.UsrDat.UsrCod); - else if (Search) - sprintf (Query,"SELECT crs_usr.UsrCod,usr_data.Sex,crs_usr.Accepted" - " FROM crs_usr,usr_data" - " WHERE crs_usr.CrsCod='%ld'" - " AND crs_usr.Role='%u'" - " AND crs_usr.UsrCod=usr_data.UsrCod" - " AND %s", - Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role, - UsrQuery); else sprintf (Query,"SELECT crs_usr.UsrCod,usr_data.Sex,crs_usr.Accepted" " FROM crs_usr,usr_data" @@ -3784,7 +3780,7 @@ void Usr_GetListUsrs (Rol_Role_t Role,Sco_Scope_t Scope) case Sco_SCOPE_CRS: /* Get users from the current course */ // 3 columns are retrieved: UsrCod, Sex, Accepted - Usr_BuildQueryToGetUsrsLstCrs (Role,false,NULL,Query); + Usr_BuildQueryToGetUsrsLstCrs (Role,Query); break; default: Lay_ShowErrorAndExit ("Wrong scope."); @@ -3808,38 +3804,84 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) char Query[16*1024]; /***** Build query *****/ - if (Role == Rol__GUEST_) // Guests + // if Gbl.Scope.Current is course ==> 3 columns are retrieved: UsrCod, Sex, Accepted + // else ==> 2 columns are retrieved: UsrCod, Sex + + if (Role == Rol__GUEST_) // Guests (scope is not used) /* Search users with no courses */ - sprintf (Query,"SELECT UsrCod,Sex" - " FROM usr_data" - " WHERE %s" - " AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" - " ORDER BY " - "Surname1," - "Surname2," - "FirstName," - "UsrCod", - UsrQuery); + switch (Gbl.Usrs.Me.LoggedRole) + { + case Rol_UNKNOWN: // I am not logged + // Guests whose privacy is Pri_VISIBILITY_WORLD + sprintf (Query,"SELECT UsrCod,Sex FROM usr_data" + " WHERE %s" + " AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" + " AND ProfileVisibility='%s'" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", + UsrQuery, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_SYS_ADM: + // Any guest + sprintf (Query,"SELECT UsrCod,Sex FROM usr_data" + " WHERE %s" + " AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", + UsrQuery); + break; + default: // I am logged + // Guests whose privacy is + // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD + sprintf (Query,"SELECT UsrCod,Sex FROM usr_data" + " WHERE %s" + " AND UsrCod NOT IN (SELECT UsrCod FROM crs_usr)" + " AND ProfileVisibility IN ('%s','%s')" + " ORDER BY Surname1,Surname2,FirstName,UsrCod", + UsrQuery, + Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM], + Pri_VisibilityDB[Pri_VISIBILITY_WORLD ]); + break; + } else // Students / Teachers /* To achieve maximum speed, it's important to do the things in this order: 1) Search for user's name (UsrQuery) getting candidate users + (this search is not stored in a temporary table + because MySQL does not allow temporary tables + to be used more than once in the same query) 2) Filter the candidate users according to scope */ switch (Gbl.Scope.Current) { case Sco_SCOPE_SYS: /* Search users in courses from the whole platform */ - // 2 columns are retrieved: UsrCod, Sex switch (Gbl.Usrs.Me.LoggedRole) { - case Rol_SYS_ADM: + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " - "(SELECT DISTINCT candidate_users.UsrCod" - " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u') AS list_usrs,usr_data" " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_SYS_ADM: + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -3848,15 +3890,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) UsrQuery, (unsigned) Role); break; - default: + default: // I am logged sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " "(" // Users whose privacy is // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "crs_usr," - "usr_data" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.UsrCod=usr_data.UsrCod" @@ -3865,10 +3905,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me // and whose privacy is Pri_VISIBILITY_COURSE "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs," - "crs_usr," - "usr_data" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs.CrsCod" @@ -3878,10 +3916,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me with another role // and whose privacy is Pri_VISIBILITY_USER "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role," - "crs_usr," - "usr_data" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs_role.CrsCod" @@ -3890,7 +3926,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND usr_data.ProfileVisibility='%s'" ") " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -3913,13 +3949,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) break; case Sco_SCOPE_CTY: /* Search users in courses from the current country */ - // 2 columns are retrieved: UsrCod, Sex switch (Gbl.Usrs.Me.LoggedRole) { - case Rol_SYS_ADM: + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " - "(SELECT DISTINCT candidate_users.UsrCod" - " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres,institutions" + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres,institutions" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=courses.CrsCod" @@ -3928,6 +3964,29 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND centres.InsCod=institutions.InsCod" " AND institutions.CtyCod='%ld') AS list_usrs,usr_data" " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Gbl.CurrentCty.Cty.CtyCod, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_SYS_ADM: + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres,institutions" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod=degrees.DegCod" + " AND degrees.CtrCod=centres.CtrCod" + " AND centres.InsCod=institutions.InsCod" + " AND institutions.CtyCod='%ld') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -3937,16 +3996,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) (unsigned) Role, Gbl.CurrentCty.Cty.CtyCod); break; - default: + default: // I am logged sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " "(" // Users whose privacy is // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "crs_usr," - "usr_data," - "courses,degrees,centres,institutions" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data,courses,degrees,centres,institutions" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.UsrCod=usr_data.UsrCod" @@ -3960,11 +4016,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me // and whose privacy is Pri_VISIBILITY_COURSE "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs," - "crs_usr," - "usr_data," - "courses,degrees,centres,institutions" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data,courses,degrees,centres,institutions" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs.CrsCod" @@ -3979,11 +4032,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me with another role // and whose privacy is Pri_VISIBILITY_USER "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role," - "crs_usr," - "usr_data," - "courses,degrees,centres,institutions" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data,courses,degrees,centres,institutions" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs_role.CrsCod" @@ -3997,7 +4047,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND institutions.CtyCod='%ld'" ") " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4023,14 +4073,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) break; case Sco_SCOPE_INS: /* Search users in courses from the current institution */ - // 2 columns are retrieved: UsrCod, Sex switch (Gbl.Usrs.Me.LoggedRole) { - case Rol_INS_ADM: - case Rol_SYS_ADM: + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " - "(SELECT DISTINCT candidate_users.UsrCod" - " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres" + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=courses.CrsCod" @@ -4038,6 +4087,29 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND degrees.CtrCod=centres.CtrCod" " AND centres.InsCod='%ld') AS list_usrs,usr_data" " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Gbl.CurrentIns.Ins.InsCod, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_INS_ADM: + case Rol_SYS_ADM: + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees,centres" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod=degrees.DegCod" + " AND degrees.CtrCod=centres.CtrCod" + " AND centres.InsCod='%ld') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4047,16 +4119,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) (unsigned) Role, Gbl.CurrentIns.Ins.InsCod); break; - default: + default: // I am logged sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " "(" // Users whose privacy is // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "crs_usr," - "usr_data," - "courses,degrees,centres" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data,courses,degrees,centres" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.UsrCod=usr_data.UsrCod" @@ -4069,11 +4138,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me // and whose privacy is Pri_VISIBILITY_COURSE "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs," - "crs_usr," - "usr_data," - "courses,degrees,centres" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data,courses,degrees,centres" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs.CrsCod" @@ -4087,11 +4153,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me with another role // and whose privacy is Pri_VISIBILITY_USER "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role," - "crs_usr," - "usr_data," - "courses,degrees,centres" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data,courses,degrees,centres" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs_role.CrsCod" @@ -4104,7 +4167,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND centres.InsCod='%ld'" ") " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4130,21 +4193,42 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) break; case Sco_SCOPE_CTR: /* Search users in courses from the current centre */ - // 2 columns are retrieved: UsrCod, Sex switch (Gbl.Usrs.Me.LoggedRole) { - case Rol_CTR_ADM: - case Rol_INS_ADM: - case Rol_SYS_ADM: + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " - "(SELECT DISTINCT candidate_users.UsrCod" - " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees" + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod=degrees.DegCod" " AND degrees.CtrCod='%ld') AS list_usrs,usr_data" " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Gbl.CurrentCtr.Ctr.CtrCod, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_CTR_ADM: + case Rol_INS_ADM: + case Rol_SYS_ADM: + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses,degrees" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod=degrees.DegCod" + " AND degrees.CtrCod='%ld') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4154,16 +4238,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) (unsigned) Role, Gbl.CurrentCtr.Ctr.CtrCod); break; - default: + default: // I am logged sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " "(" // Users whose privacy is // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "crs_usr," - "usr_data," - "courses,degrees" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data,courses,degrees" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.UsrCod=usr_data.UsrCod" @@ -4175,11 +4256,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me // and whose privacy is Pri_VISIBILITY_COURSE "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs," - "crs_usr," - "usr_data," - "courses,degrees" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data,courses,degrees" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs.CrsCod" @@ -4192,11 +4270,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me with another role // and whose privacy is Pri_VISIBILITY_USER "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role," - "crs_usr," - "usr_data," - "courses,degrees" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data,courses,degrees" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs_role.CrsCod" @@ -4208,7 +4283,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND degrees.CtrCod='%ld'" ") " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4234,22 +4309,42 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) break; case Sco_SCOPE_DEG: /* Search users in courses from the current degree */ - // 2 columns are retrieved: UsrCod, Sex switch (Gbl.Usrs.Me.LoggedRole) { + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=courses.CrsCod" + " AND courses.DegCod='%ld') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Gbl.CurrentDeg.Deg.DegCod, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; case Rol_DEG_ADM: case Rol_CTR_ADM: case Rol_INS_ADM: case Rol_SYS_ADM: sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " - "(SELECT DISTINCT candidate_users.UsrCod" - " FROM (SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses" + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,courses" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=courses.CrsCod" " AND courses.DegCod='%ld') " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4259,16 +4354,13 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) (unsigned) Role, Gbl.CurrentDeg.Deg.DegCod); break; - default: + default: // I am logged sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " "(" // Users whose privacy is // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "crs_usr," - "usr_data," - "courses" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data,courses" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.UsrCod=usr_data.UsrCod" @@ -4279,11 +4371,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me // and whose privacy is Pri_VISIBILITY_COURSE "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs," - "crs_usr," - "usr_data," - "courses" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data,courses" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs.CrsCod" @@ -4295,11 +4384,8 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) // Users who share any course with me with another role // and whose privacy is Pri_VISIBILITY_USER "SELECT DISTINCT crs_usr.UsrCod FROM " - "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users," - "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role," - "crs_usr," - "usr_data," - "courses" + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data,courses" " WHERE candidate_users.UsrCod=crs_usr.UsrCod" " AND crs_usr.Role='%u'" " AND crs_usr.CrsCod=my_crs_role.CrsCod" @@ -4310,7 +4396,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) " AND courses.DegCod='%ld'" ") " "AS list_usrs,usr_data" - " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " WHERE list_usrs.UsrCod=usr_data.UsrCod" " ORDER BY " "usr_data.Surname1," "usr_data.Surname2," @@ -4336,8 +4422,102 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) break; case Sco_SCOPE_CRS: /* Search users in courses from the current course */ - // 3 columns are retrieved: UsrCod, Sex, Accepted - Usr_BuildQueryToGetUsrsLstCrs (Role,true,UsrQuery,Query); + switch (Gbl.Usrs.Me.LoggedRole) + { + case Rol_UNKNOWN: // I am not logged + // Users whose privacy is Pri_VISIBILITY_WORLD + sprintf (Query,"SELECT list_usrs.UsrCod,usr_data.Sex FROM " + "(SELECT DISTINCT candidate_users.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u') AS list_usrs,usr_data" + " WHERE list_usrs.UsrCod=usr_data.UsrCod " + " AND usr_data.ProfileVisibility='%s'" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Pri_VisibilityDB[Pri_VISIBILITY_WORLD]); + break; + case Rol_DEG_ADM: + case Rol_CTR_ADM: + case Rol_INS_ADM: + case Rol_SYS_ADM: + sprintf (Query,"SELECT crs_usr.UsrCod,usr_data.Sex,crs_usr.Accepted" + " FROM crs_usr,usr_data" + " WHERE crs_usr.CrsCod='%ld'" + " AND crs_usr.Role='%u'" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND %s" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Role, + UsrQuery); + break; + default: // I am logged + sprintf (Query,"SELECT DISTINCT list_usrs.UsrCod,usr_data.Sex,crs_usr.Accepted FROM " + "(" + // Users whose privacy is + // Pri_VISIBILITY_SYSTEM or Pri_VISIBILITY_WORLD + "SELECT DISTINCT crs_usr.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr,usr_data" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.ProfileVisibility IN ('%s','%s')" + " UNION " + // Users who share any course with me + // and whose privacy is Pri_VISIBILITY_COURSE + "SELECT DISTINCT crs_usr.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod FROM crs_usr WHERE UsrCod='%ld') AS my_crs,usr_data" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=my_crs.CrsCod" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.ProfileVisibility='%s'" + " UNION " + // Users who share any course with me with another role + // and whose privacy is Pri_VISIBILITY_USER + "SELECT DISTINCT crs_usr.UsrCod FROM " + "(SELECT UsrCod FROM usr_data WHERE %s) AS candidate_users,crs_usr," + "(SELECT CrsCod,Role FROM crs_usr WHERE UsrCod='%ld') AS my_crs_role,usr_data" + " WHERE candidate_users.UsrCod=crs_usr.UsrCod" + " AND crs_usr.Role='%u'" + " AND crs_usr.CrsCod=my_crs_role.CrsCod" + " AND crs_usr.Role<>my_crs_role.Role" + " AND crs_usr.UsrCod=usr_data.UsrCod" + " AND usr_data.ProfileVisibility='%s'" + ") " + "AS list_usrs,crs_usr,usr_data" + " WHERE list_usrs.UsrCod=crs_usr.UsrCod" + " AND crs_usr.CrsCod='%ld'" + " AND list_usrs.UsrCod=usr_data.UsrCod" + " ORDER BY " + "usr_data.Surname1," + "usr_data.Surname2," + "usr_data.FirstName," + "usr_data.UsrCod", + UsrQuery, + (unsigned) Role, + Pri_VisibilityDB[Pri_VISIBILITY_SYSTEM], + Pri_VisibilityDB[Pri_VISIBILITY_WORLD ], + UsrQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) Role, + Pri_VisibilityDB[Pri_VISIBILITY_COURSE], + UsrQuery, + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) Role, + Pri_VisibilityDB[Pri_VISIBILITY_USER ], + Gbl.CurrentCrs.Crs.CrsCod); + } break; default: Lay_ShowErrorAndExit ("Wrong scope."); @@ -4345,7 +4525,7 @@ static void Usr_SearchListUsrs (Rol_Role_t Role,const char *UsrQuery) } // if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SYS_ADM) - Lay_ShowAlert (Lay_INFO,Query); + // Lay_ShowAlert (Lay_INFO,Query); /***** Get list of users from database given a query *****/ Usr_GetListUsrsFromQuery (Query,Role,Gbl.Scope.Current);