X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=htdocs%2Fjavascript%2Fprofile.js;h=6858861451ddbcf827a6478f986e777a11c6b51c;hb=8fcfc71f92d6f96e97c46413af0382d8a2e5cc1e;hp=b882b2d829da014631307a073b82f7adbc9b08ee;hpb=372fbb196e649a098e3c7df848f909849696ef65;p=platal.git diff --git a/htdocs/javascript/profile.js b/htdocs/javascript/profile.js index b882b2d..6858861 100644 --- a/htdocs/javascript/profile.js +++ b/htdocs/javascript/profile.js @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2003-2009 Polytechnique.org * + * Copyright (C) 2003-2011 Polytechnique.org * * http://opensource.polytechnique.org/ * * * * This program is free software; you can redistribute it and/or modify * @@ -18,43 +18,35 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -// Page initialization +// Page initialization {{{1 function wizPage_onLoad(id) { switch (id) { case 'general': - var i = 0; - var prefix = 'edu_'; - while ($('.' + prefix + i).length != 0) { - i++; - } - i--; - for (var j = 0; j < i; j++) { - prepareType(j); + var i = 1; + while ($('.edu_' + i).length != 0) { + prepareType(i - 1); + ++i; } break; + case 'adresses': + checkCurrentAddress(); + break; case 'poly': - updateGroupSubLink(document.forms.prof_annu.groupesx_sub); + updateGroupSubLink(); break; case 'deco': - for (var i in names) { - if (typeof names[i] != 'function') { - if (document.getElementById("medal_" + i) != null) { - getMedalName(i); - buildGrade(i, document.forms.prof_annu["medal_" + i + "_grade"].value); - } - } + var i = 0; + while ($('#medal_' + i).length != 0) { + prepareMedal(i); + ++i; } break; case 'emploi': - for (var i = 0 ; document.getElementById('job_' + i) != null ; ++i) { - updateJobSecteur(i, 'job_' + i, 'jobs[' + i + ']', - document.forms.prof_annu["jobs[" + i + "][ss_secteur]"].value); - updateJobSousSecteur(i, 'job_' + i, 'jobs[' + i + ']', - document.forms.prof_annu["jobs[" + i + "][sss_secteur]"].value); + if ($('#jobs_0').find("[name='jobs[0][name]']").val() == '') { + registerEnterpriseAutocomplete(0); } - setTimeout('registerEnterpriseAutocomplete(-1)', 100); break; } } @@ -62,132 +54,171 @@ function wizPage_onLoad(id) var educationDegree; var educationDegreeAll; var educationDegreeName; - -// General - var subgrades; var names; -function fillType(selectCtrl, edu, fill) -{ - var i; - var i0 = 0; - - for (i = selectCtrl.options.length; i >= 0; i--) { - selectCtrl.options[i] = null; - } - - if (fill || edu < 0) { - selectCtrl.options[0] = new Option(' '); - i0 = 1; - } - if (edu >= 0) { - for (i = 0; i < educationDegree[edu].length; i++) { - selectCtrl.options[i0 + i] = new Option(educationDegreeName[educationDegree[edu][i] - 1], educationDegree[edu][i]); - } - } else if (fill) { - for (i = 0; i < educationDegreeAll.length; i++) { - selectCtrl.options[i0 + i] = new Option(educationDegreeName[educationDegreeAll[i] - 1], educationDegreeAll[i]); - } - } -} +var multiples; +// Publicity follows the following ordering: private < ax < public. +var publicity = []; +publicity['private'] = 0; +publicity['ax'] = 1; +publicity['public'] = 2; -function selectType(selectCtrl, type) -{ - for (i = 0; i < selectCtrl.options.length; i++) { - if (selectCtrl.options[i].value == type) { - selectCtrl.selectedIndex = i; - } - } -} - -function prepareType(i) -{ - fillType(document.forms.prof_annu["edus[" + i + "][degreeid]"], document.forms.prof_annu["edus[" + i + "][eduid]"].selectedIndex - 1); - selectType(document.forms.prof_annu["edus[" + i + "][degreeid]"], document.forms.prof_annu["edu_" + i + "_tmp"].value); -} +// Names {{{1 function toggleNamesAdvanced() { $('.names_advanced').toggle(); } -function addSearchName() +function addSearchName(isFemale) { var i = 0; while ($('#search_name_' + i).length != 0) { i++; } - Ajax.update_html('search_name_' + i, 'profile/ajax/searchname/' + i, function(data){ - $('#searchname').before(data); - changeNameFlag(i); + $('#search_name_' + i).updateHtml('profile/ajax/searchname/' + i + '/' + isFemale, + function(data) { + $('#searchname').before(data); }); } -function removeSearchName(i) +function removeSearchName(i, isFemale) { $('#search_name_' + i).remove(); - updateNameDisplay(); + updateNameDisplay(isFemale); } -function changeNameFlag(i) +function updateNameDisplay(isFemale) { - $('#flag_' + i).remove(); - var typeid = $('#search_name_' + i).find('select').val(); - var type = $('#search_name_' + i).find('select :selected').text(); - if ($('[@name=sn_type_' + typeid + '_' + i + ']').val() > 0) { - $('#flag_cb_' + i).after(' ' + - 'site public' + - '' + - '' + - ''); - } else { - $('#flag_cb_' + i).after(' ' + - 'site privé' + - '' + - ''); + var lastnames = new Array('lastname_main', 'lastname_ordinary', 'lastname_marital', 'pseudonym'); + var firstnames = new Array('firstname_main', 'firstname_ordinary'); + var searchnames = ''; + + for (var i = 0; i < 4; ++i) { + searchnames += $('.names_advanced').find('[name*=' + lastnames[i] + ']').val() + ';'; } -} + searchnames += '-;' + for (var i = 0; i < 2; ++i) { + searchnames += $('.names_advanced').find('[name*=' + firstnames[i] + ']').val() + ';'; + } + searchnames += '-'; -function updateNameDisplay() -{ - var searchnames = ''; - for (var i = 0; i < 10; i++) { + var has_private = false; + for (var i = 0; i < 10; ++i) { if ($('#search_name_' + i).find(':text').val()) { - searchnames += $('#search_name_' + i).find('[name*=typeid]').val() + ';'; - searchnames += $('#search_name_' + i).find(':text').val() + ';;'; + searchnames += ';' + $('#search_name_' + i).find('[name*=type]').val() + ';' + $('#search_name_' + i).find(':text').val(); + has_private = true; } } - Ajax.update_html(null, 'profile/ajax/buildnames/' + searchnames, function(data){ - var name = data.split(';'); - $('#public_name').html(name[0]); - $('#private_name').html(name[0] + name[1]); - }); + searchnames += (has_private ? '' : ';'); + $.xget('profile/ajax/buildnames/' + searchnames + '/' + isFemale, + function(data){ + var name = data.split(';'); + $('#public_name').html(name[0]); + $('#private_name').html(name[0] + name[1]); + }); +} + +// Promotions {{{1 + +function togglePromotionEdition() +{ + $(".promotion_edition").toggle(); } +// Nationalities {{{1 + function delNationality(i) { - $('#nationalite' + i).hide().find('select').val(''); + $('#nationality' + i).hide().find('select').val(''); } function addNationality() { var i = 0; - if ($('#nationalite2').find('select').val() == "") { + if ($('#nationality2').find('select').val() == "") { i = 2; - } else if ($('#nationalite3').find('select').val() == "") { + } else if ($('#nationality3').find('select').val() == "") { i = 3; } if ((i == 2) || (i == 3)) { - $('#nationalite' + i).show(); + $('#nationality' + i).show(); + } +} + +// Education {{{1 + +function prepareType(id) +{ + var edu = $('.edu_' + id).find("[name='edus[" + id + "][eduid]']").val() - 1; + var sel = $('.edu_' + id).find('[name=edu_' + id + '_tmp]').val(); + var html = ''; + if (educationDegree[edu]) { + var length = educationDegree[edu].length; + } else { + var length = 0; + } + for (i = 0; i < length; ++i) { + html += ''; + } + $('.edu_' + id).find("[name='edus[" + id + "][degreeid]']").html(html); } +function addEdu() +{ + var i = 0; + var j = 0; + var prefix = 'edu_'; + var class_parity; + + while (!$('#edu_add').hasClass(prefix + i)) { + if ($('.' + prefix + i).length != 0) { + j++; + } + i++; + } + if (j % 2) { + class_parity = 'pair'; + } else { + class_parity = 'impair'; + } + $('#edu_add').removeClass(prefix + i); + i++; + $('#edu_add').addClass(prefix + i); + i--; + $.xget('profile/ajax/edu/' + i + '/' + class_parity, + function(data) { + $('#edu_add').before(data); + prepareType(i); + }); +} + +function removeEdu(i) +{ + var prefix = 'edu_'; + $('.' + prefix + i).remove(); + while (!$('#edu_add').hasClass(prefix + i)) { + $('.' + prefix + i).toggleClass('pair'); + $('.' + prefix + i).toggleClass('impair'); + i++; + } +} + +// Networking {{{1 + function addNetworking() { var i = 0; - var nws = 'networking_'; - while (document.getElementById(nws + i) != null) { + while ($('#networking_' + i).length != 0) { i++; } var namefirst = ''; @@ -198,7 +229,7 @@ function addNetworking() + ' ' + ' site public' + '  ' - + ' '; for (nw in nw_list) { if (namefirst == '') { namefirst = nw; @@ -206,7 +237,7 @@ function addNetworking() html += ' '; } html += '' - + ' ' + + ' ' + ' ' + '
' + ' ' @@ -227,336 +258,329 @@ function removeNetworking(id) function updateNetworking(i) { - var name = document.getElementById('networking_name_' + i); - var type = document.getElementById('networking_type_' + i); - if (type != null && name != null) { - name.value = type.options[type.selectedIndex].text; - } - + $('#networking_' + i).find("[name='networking[" + i + "][name]']").val($('#networking_' + i).find('select option:selected').text()); } -// Addresses +// Hobby {{{1 -function removeObject(id, pref) +function addHobby() { - document.getElementById(id).style.display = "none"; - document.forms.prof_annu[pref + "[removed]"].value = "1"; + var i = 0; + while ($('#hobby_' + i).length != 0) { + ++i; + } + var html = '' + + ' ' + + '
' + + ' ' + + ' ' + + ' site public' + + '  ' + + ' ' + + '
' + + '
' + + ' ' + + ' ' + + ' cross' + + ' ' + + '
' + + ' ' + + ''; + + $('#hobby').before(html); } -function restoreObject(id, pref) +function removeHobby(id) { - document.getElementById(id).style.display = ''; - document.forms.prof_annu[pref + "[removed]"].value = "0"; + $('#hobby_' + id).remove(); } -function getAddressElement(adrid, adelement) +// Addresses {{{1 + +function toggleAddress(id, val) { - return document.forms.prof_annu["addresses[" + adrid + "][" + adelement + "]"]; + $('#addresses_' + id + '_grayed').toggle(); + $('#addresses_' + id).toggle(); + $('#addresses_' + id + '_cont').find('[name*=removed]').val(val); + checkCurrentAddress(); } -function checkCurrentAddress(newCurrent) +function checkCurrentAddress(id) { - var hasCurrent = false; + var hasCurrentAddress = id ? true : false; var i = 0; - while (getAddressElement(i, 'pub') != null) { - var radio = getAddressElement(i, 'current'); - var removed = getAddressElement(i, 'removed'); - if (removed.value == "1" && radio.checked) { - radio.checked = false; - } else if (radio.checked && radio != newCurrent) { - radio.checked = false; - } else if (radio.checked) { - hasCurrent = true; + while ($('#addresses_' + i + '_cont').length != 0) { + if ($('#addresses_' + i + '_cont').find('[name*=removed]').val() == 1) { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', false); + } + if (!hasCurrentAddress && $('#addresses_' + i + '_cont').find('[name*=current]:checked').length != 0) { + hasCurrentAddress = true; + } else { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', false); } i++; } - if (!hasCurrent) { + if (!hasCurrentAddress) { i = 0; - while (getAddressElement(i, 'pub') != null) { - var radio = getAddressElement(i, 'current'); - var removed = getAddressElement(i, 'removed'); - if (removed.value != "1") { - radio.checked= true; - return; - } - i++; + while ($('#addresses_' + i + '_cont').length != 0) { + if ($('#addresses_' + i + '_cont').find('[name*=removed]').val() == 0) { + $('#addresses_' + i + '_cont').find('[name*=current]').attr('checked', 'checked'); + break; + } + i++; } } -} - -function removeAddress(id, pref) -{ - removeObject(id, pref); - checkCurrentAddress(null); - if (document.forms.prof_annu[pref + '[datemaj]'].value != '') { - document.getElementById(id + '_grayed').style.display = ''; + if (id) { + $('#addresses_' + id + '_cont').find('[name*=current]').attr('checked', 'checked'); } } -function restoreAddress(id, pref) -{ - document.getElementById(id + '_grayed').style.display = 'none'; - checkCurrentAddress(null); - restoreObject(id, pref); -} - -function addAddress() +function addAddress(pid) { var i = 0; - while (getAddressElement(i, 'pub') != null) { + while ($('#addresses_' + i + '_cont').length != 0) { i++; } - $("#add_adr").before('
'); - Ajax.update_html('addresses_' + i + '_cont', 'profile/ajax/address/' + i, checkCurrentAddress); + $('#add_address').before('
'); + $('#addresses_' + i + '_cont').updateHtml('profile/ajax/address/' + i + '/' + pid, + checkCurrentAddress()); } -function addEdu() +function addressChanged(prefid, color) { - var i = 0; - var j = 0; - var prefix = 'edu_'; - var class_parity; - - while (!$('#edu_add').hasClass(prefix + i)) { - if ($('.' + prefix + i).length != 0) { - j++; + var text = $('#' + prefid + '_cont').find("[name*='[text]']").val(); + $('#' + prefid + '_cont').find('[name*=changed]').val("1"); + $.xpost('map_url/', { text:text, color:color }, function(data) { + if (data) { + $('#' + prefid + '_static_map_url').show(); + $('#' + prefid + '_static_map_url').find('img').attr('src', data); + } else { + $('#' + prefid + '_static_map_url').hide(); + $('#' + prefid + '_geocoding_removal').find('[name*=request]:checkbox').removeAttr('checked'); } - i++; - } - if (j % 2) { - class_parity = 'pair'; - } else { - class_parity = 'impair'; - } - $('#edu_add').removeClass(prefix + i); - i++; - $('#edu_add').addClass(prefix + i); - i--; - $.get(platal_baseurl + 'profile/ajax/edu/' + i + '/' + class_parity, - function(data) { - $('#edu_add').before(data); - prepareType(i); - }); + }); } -function removeEdu(i) +function deleteGeocoding(prefid) { - var prefix = 'edu_'; - $('.' + prefix + i).remove(); - while (!$('#edu_add').hasClass(prefix + i)) { - $('.' + prefix + i).toggleClass('pair'); - $('.' + prefix + i).toggleClass('impair'); - i++; + if($('#' + prefid + '_geocoding_removal').find('[name*=request]:checkbox:checked').length == 0) { + return true; } + + return confirm( + "La localisation de l'adresse sert à deux choses : te placer dans " + + "le planisphère et te faire apparaître dans la recherche avancée par " + + "pays, région, département, ville... La supprimer t'en fera disparaître. " + + "\nIl ne faut le faire que si cette localisation " + + "est réellement erronée. Avant de supprimer cette localisation, l'équipe de " + + "Polytechnique.org tentera de la réparer.\n\nConfirmes-tu ta " + + "demande de suppression de cette localisation ?"); } -function addTel(prefid, prefname) +// {{{1 Phones + +function addTel(prefid, prefname, subField, mainField, mainId) { var i = 0; var prefix = prefid + '_'; - while (document.getElementById(prefix + i) != null) { + while ($('#' + prefix + i).length != 0) { i++; } $('#' + prefix + 'add').before('
'); - Ajax.update_html(prefix + i, 'profile/ajax/tel/' + prefid + '/' + prefname + '/' + i); + $('#' + prefix + i).updateHtml('profile/ajax/tel/' + prefid + '/' + prefname + '/' + i + '/' + subField + '/' + mainField + '/' + mainId); } -function removeTel(id) +function removeTel(prefname, prefid, id) { - $('#' + id).remove(); + var total = 0; + while ($('#' + prefid + '_' + total).length != 0) { + ++total; + } + $('#' + prefid + '_' + id).remove(); + for (var i = parseInt(id) + 1; i < total; ++i) { + renumberPhone(prefname, prefid, i); + } } -function addPhoneComment(id, pref) +function addPhoneComment(id) { - document.getElementById(id+'_comment').style.display = ''; - document.getElementById(id+'_addComment').style.display = 'none'; + $('#' + id + '_comment').show(); + $('#' + id + '_addComment').hide(); } function removePhoneComment(id, pref) { - document.getElementById(id+'_comment').style.display = 'none'; - document.forms.prof_annu[pref+ '[comment]'].value = ''; - document.getElementById(id+'_addComment').style.display = ''; + $('#' + id + '_comment').hide(); + $('#' + id + '_comment').find("[name='" + pref + "[comment]']").val(''); + $('#' + id + '_addComment').show(); } -// Geoloc - -function validGeoloc(id, pref) +function renumberPhone(prefname, prefid, i) { - document.getElementById(id + '_geoloc').style.display = 'none'; - document.getElementById(id + '_geoloc_error').style.display = 'none'; - document.getElementById(id + '_geoloc_valid').style.display = 'none'; - document.forms.prof_annu[pref + "[parsevalid]"].value = "1"; - document.forms.prof_annu[pref + "[text]"].value = document.forms.prof_annu[pref + "[geoloc]"].value; - document.forms.prof_annu[pref + "[cityid]"].value = document.forms.prof_annu[pref + "[geoloc_cityid]"].value; - $(document.forms.prof_annu[pref + "[text]"]).click(function() { document.forms.prof_annu[pref + "[text]"].blur(); }); - document.forms.prof_annu[pref + "[text]"].className = ''; -} + var telid = i - 1; + var telprefOld = prefname + '[' + i + ']'; + var telpref = prefname + '[' + telid + ']'; + var idOld = prefid + '_' + i; + var id = prefid + '_' + telid; -function validAddress(id, pref) -{ - document.getElementById(id + '_geoloc').style.display = 'none'; - document.getElementById(id + '_geoloc_error').style.display = 'none'; - document.getElementById(id + '_geoloc_valid').style.display = 'none'; - document.forms.prof_annu[pref + "[parsevalid]"].value = "1"; - $(document.forms.prof_annu[pref + "[text]"]).click(function() { document.forms.prof_annu[pref + "[text]"].blur(); }); - document.forms.prof_annu[pref + "[text]"].className = ''; + $('#' + idOld).attr('id', id); + $('#' + id).find('div.titre').html('N°' + i); + $('#' + id).find('a.removeTel').attr('href', 'javascript:removeTel(\'' + prefname + '\',\'' + prefid + '\',' + telid + ')'); + $('#' + id).find('select').attr('name', telpref + '[type]'); + $('#' + id).find("[name='" + telprefOld + "[display]']").attr('name', telpref + '[display]'); + $('#' + id).find("[name='" + telprefOld + "[comment]']").attr('name', telpref + '[comment]'); + $('#' + id).find('a.removePhoneComment').attr('href', 'javascript:removePhoneComment(' + id + ',' + telpref + ')'); + $('#' + id).find('#' + idOld + '_addComment').attr('id', id + '_addComment'); + $('#' + id).find('#' + id + '_addComment').attr('href', 'javascript:addPhoneComment(' + id + ')'); + $('#' + id).find('#' + idOld + '_comment').attr('id', id + '_comment'); + $('#' + id).find("[name='" + telprefOld + "[pub]']").attr('name', telpref + '[pub]'); } +// {{{1 Groups -// Groups - -function updateGroup(type) +function addBinet() { - var val = document.forms.prof_annu[type + '_sel'].value; - if (val == '0' || document.getElementById(type + '_' + val) != null) { - document.getElementById(type + '_add').style.display = 'none'; - } else { - document.getElementById(type + '_add').style.display = ''; - } + var id = $('#binets_table').find('[name=binets_sel]').val(); + var text = $('#binets_table').find('select option:selected').text(); + var html = '' + + ' ' + + ' ' + + ' ' + + ' ' + + '
' + + text + + '
' + + ' ' + + ' cross' + + ' ' + + ' ' + + ''; + $('#binets_table').after(html); + updateElement('binets'); } -function removeGroup(cat, id) +function updateGroupSubLink() { - $('#' + cat + '_' + id).remove(); - updateGroup(cat); + var href = $('[name*=groupesx_sub]').val() ? $('[name*=groupesx_sub]').val() : 'http://www.polytechnique.net'; + $('#groupesx_sub').attr('href', href); } -function addGroup(cat) -{ - var cb = document.forms.prof_annu[cat + '_sel']; - var id = cb.value; - var text = cb.options[cb.selectedIndex].text; - var html = '' - + ' ' - + ' ' - + ' ' - + ' ' - + '
' - + text - + '
' - + ' ' - + ' cross' - + ' ' - + ' ' - + ''; - $('#' + cat).after(html); - updateGroup(cat); -} +// {{{1 Medals -function updateGroupSubLink(cb) +function prepareMedal(i) { - var href = cb.value ? cb.value : "http://www.polytechnique.net"; - document.getElementById("groupesx_sub").href = href; + getMedalName($('#medal_' + i).find('[name="medals[' + i + '][id]"]').val()); + buildGrade(i); } - -// Medals - function updateMedal() { - var val = document.forms.prof_annu['medal_sel'].value; - if (val == '' || document.getElementById('medal_' + val) != null) { - document.getElementById('medal_add').style.display = 'none'; + var val = $('#medals').find('[name*=medal_sel]').val(); + + if ((multiple[val] && subgrades[val]) || $('.medal_name_' + val).length == 0) { + $('#medal_add').show(); } else { - document.getElementById('medal_add').style.display = ''; + $('#medal_add').hide(); } } function getMedalName(id) { - document.getElementById('medal_name_' + id).innerHTML = names[id]; + $('.medal_name_' + id).html(names[id]); } -function buildGrade(id, current) +function buildGrade(i) { - var grade; - var subg = subgrades[id]; - var obj = $('#medal_grade_' + id); + var id = $('#medal_' + i).find('[name="medals[' + i + '][id]"]').val(); + var current = $('#medal_' + i).find('[name="medals_' + i + '_grade"]').val(); + var subg = subgrades[id]; + var obj = $('#medal_grade_' + i); if (!subg) { - obj.prepend(''); + obj.prepend(''); } else { - var html = 'Agrafe : '; html += ''; - for (grade = 0 ; grade < subg.length ; grade++) { + for (var grade = 0; grade < subg.length; ++grade) { html += '