diff --git a/controllers/software_communities_plugin_controller.rb b/controllers/software_communities_plugin_controller.rb index 749dbb6..dcf0e84 100644 --- a/controllers/software_communities_plugin_controller.rb +++ b/controllers/software_communities_plugin_controller.rb @@ -1,19 +1,6 @@ require 'csv' class SoftwareCommunitiesPluginController < ApplicationController - def check_reactivate_account - if request.xhr? && params[:email] - result = "" - user = User.where(:email => params[:email]) - - if user.length == 1 && !user[0].person.visible - result = " Reactive account" - end - - render :json => result.to_json - end - end - def hide_registration_incomplete_percentage response = false diff --git a/lib/software_communities_plugin.rb b/lib/software_communities_plugin.rb index f2b2f68..48ae52c 100644 --- a/lib/software_communities_plugin.rb +++ b/lib/software_communities_plugin.rb @@ -119,7 +119,6 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin end def js_files - #mpog-user-validations.js %w( vendor/jquery.maskedinput.min.js vendor/modulejs-1.5.0.min.js @@ -134,7 +133,6 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin views/user-edit-profile.js initializer.js app.js - mpog-institution-validations.js mpog-incomplete-registration.js mpog-search.js diff --git a/public/mpog-user-validations.js b/public/mpog-user-validations.js deleted file mode 100644 index eb92ded..0000000 --- a/public/mpog-user-validations.js +++ /dev/null @@ -1,332 +0,0 @@ -(function(){ - var AJAX_URL = { - check_reactivate_account: - url_with_subdirectory("/plugin/software_communities/check_reactivate_account") - }; - - - /* - * "Class" that switch state field between input and select - * If the Country if Brazil, set state to select field - * else set it as a input field - */ - var SelectFieldChoices = (function() { - function SelectFieldChoices(state_id, city_id, state_url) { - this.state_id = state_id; - this.input_html = jQuery(state_id).parent().html(); - this.old_value = jQuery(state_id).val(); - this.city_parent_div = jQuery(city_id).parent().parent().parent(); - this.state_url = state_url; - } - - SelectFieldChoices.prototype.getCurrentStateElement = function() { - return jQuery(this.state_id); - }; - - SelectFieldChoices.prototype.replaceWith = function(html) { - var parent_div = this.getCurrentStateElement().parent(); - parent_div.html(html); - }; - - SelectFieldChoices.prototype.generateSelect = function(state_list) { - var select_element, option; - - select_element = new SelectElement(); - select_element.setAttr("name", "profile_data[state]"); - select_element.setAttr("id", "state_field"); - select_element.setAttr("class", "type-select valid"); - - state_list.forEach(function(state) { - option = SelectElement.generateOption(state, state); - select_element.addOption(option); - }); - - return select_element.getSelect(); - }; - - SelectFieldChoices.prototype.replaceStateWithSelectElement = function() { - var klass = this; - - jQuery.get(this.state_url, function(response) { - var select_html; - - if (response.length > 0) { - select_html = klass.generateSelect(response); - klass.replaceWith(select_html); - - if (klass.old_value.length !== 0 && response.include(klass.old_value)) { - klass.getCurrentStateElement().val(klass.old_value); - } - } - }); - }; - - SelectFieldChoices.prototype.replaceStateWithInputElement = function() { - this.replaceWith(this.input_html); - }; - - SelectFieldChoices.prototype.hideCity = function() { - this.city_parent_div.addClass("mpog_hidden_field"); - }; - - SelectFieldChoices.prototype.showCity = function() { - this.city_parent_div.removeClass("mpog_hidden_field"); - }; - - SelectFieldChoices.prototype.actualFieldIsInput = function() { - return this.getCurrentStateElement().attr("type") === "text"; - }; - - return SelectFieldChoices; - })(); - - function set_form_count_custom_data() { - var divisor_option = SelectElement.generateOption("-1", "--------------------------------"); - var default_option = SelectElement.generateOption("BR", "Brazil"); - - jQuery('#profile_data_country').find("option[value='']").remove(); - jQuery('#profile_data_country').prepend(divisor_option); - jQuery('#profile_data_country').prepend(default_option); - jQuery('#profile_data_country').val("BR"); - } - - function set_initial_form_custom_data(selectFieldChoices) { - set_form_count_custom_data(); - - jQuery("#password-balloon").html(jQuery("#user_password_menssage").val()); - jQuery("#profile_data_email").parent().append(jQuery("#email_public_message").remove()); - - if( jQuery("#state_field").length !== 0 ) selectFieldChoices.replaceStateWithSelectElement(); - } - - function check_reactivate_account(value, input_object){ - jQuery.ajax({ - url : AJAX_URL.check_reactivate_account, - type: "GET", - data: { "email": value }, - success: function(response) { - if( jQuery("#forgot_link").length === 0 ) - jQuery(input_object).parent().append(response); - else - jQuery("#forgot_link").html(response); - }, - error: function(type, err, message) { - console.log(type+" -- "+err+" -- "+message); - } - }); - } - - function put_brazil_based_on_email(){ - var suffixes = ['gov.br', 'jus.br', 'leg.br', 'mp.br']; - var value = this.value; - var input_object = this; - var gov_suffix = false; - - suffixes.each(function(suffix){ - var has_suffix = new RegExp("(.*)"+suffix+"$", "i"); - - if( has_suffix.test(value) ) { - gov_suffix = true; - jQuery("#profile_data_country").val("BR"); - } - }); - - jQuery("#profile_data_country").find(':not(:selected)').css('display', (gov_suffix?'none':'block')); - - check_reactivate_account(value, input_object); - } - - function validate_email_format(){ - var correct_format_regex = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; - - if( this.value.length > 0 ) { - if(correct_format_regex.test(this.value)) - this.className = "validated"; - else - this.className = "invalid"; - } else - this.className = ""; - } - - function verify_user_password_size() { - if( this.value.length < 6 ) { - jQuery(this).switchClass("validated", "invalid"); - } else { - jQuery(this).switchClass("invalid", "validated"); - } - } - - function show_or_hide_phone_mask() { - if(jQuery("#profile_data_country").val() == "BR") { - if( (typeof jQuery("#profile_data_cell_phone").data("rawMaskFn") === 'undefined') ) { - jQuery("#profile_data_cell_phone").mask("(99) 9999?9-9999"); - jQuery("#profile_data_comercial_phone").mask("(99) 9999?9-9999"); - jQuery("#profile_data_contact_phone").mask("(99) 9999?9-9999"); - } - } else { - jQuery("#profile_data_cell_phone").unmask(); - jQuery("#profile_data_comercial_phone").unmask(); - jQuery("#profile_data_contact_phone").unmask(); - } - } - - function fix_phone_mask_format(id) { - jQuery(id).blur(function() { - var last = jQuery(this).val().substr( jQuery(this).val().indexOf("-") + 1 ); - - if( last.length == 3 ) { - var move = jQuery(this).val().substr( jQuery(this).val().indexOf("-") - 1, 1 ); - var lastfour = move + last; - var first = jQuery(this).val().substr( 0, 9 ); - - jQuery(this).val( first + '-' + lastfour ); - } - }); - } - - // Generic - function show_plugin_error_message(field_selector, hidden_message_id ) { - var field = jQuery(field_selector); - - field.removeClass("validated").addClass("invalid"); - - if(!jQuery("." + hidden_message_id)[0]) { - var message = jQuery("#" + hidden_message_id).val(); - field.parent().append("
"+message+""); - } else { - jQuery("." + hidden_message_id).show(); - } - } - - function hide_plugin_error_message(field_selector, hidden_message_id) { - jQuery(field_selector).removeClass("invalid").addClass("validated"); - jQuery("." + hidden_message_id).hide(); - } - - function addBlurFields(field_selector, hidden_message_id, validation_function, allow_blank) { - jQuery(field_selector).blur(function(){ - jQuery(this).attr("class", ""); - - if( validation_function(this.value, !!allow_blank) ) { - show_plugin_error_message(field_selector, hidden_message_id); - } else { - hide_plugin_error_message(field_selector, hidden_message_id); - } - }); - } - - function invalid_email_validation(value, allow_blank) { - if( allow_blank && value.trim().length === 0 ) { - return false; - } - - var correct_format_regex = new RegExp(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/); - - return !correct_format_regex.test(value); - } - - function invalid_site_validation(value) { - var correct_format_regex = new RegExp(/(^|)(http[s]{0,1})\:\/\/(\w+[.])\w+/g); - - return !correct_format_regex.test(value); - } - //End generic - - function get_privacy_selector_parent_div(field_id, actual) { - if( actual === undefined ) actual = jQuery(field_id); - - if( actual.is("form") || actual.length === 0 ) return null; // Not allow recursion over form - - if( actual.hasClass("field-with-privacy-selector") ) { - return actual; - } else { - return get_privacy_selector_parent_div(field_id, actual.parent()); - } - } - - function try_to_remove(list, field) { - try { - list.push(field.remove()); - } catch(e) { - console.log("Cound not remove field"); - } - } - - function get_edit_fields_in_insertion_order() { - var containers = []; - - try_to_remove(containers, jQuery("h2")[0]); - try_to_remove(containers, jQuery(".pseudoformlabel").parent().parent()); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_name")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_email")); - try_to_remove(containers, jQuery("#user_secondary_email").parent().parent()); - try_to_remove(containers, jQuery("#select_institution")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_cell_phone")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_contact_phone")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_comercial_phone")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_personal_website")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_organization_website")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_birth_date")); - try_to_remove(containers, get_privacy_selector_parent_div("#profile_data_country")); - try_to_remove(containers, get_privacy_selector_parent_div("#state_field")); - try_to_remove(containers, get_privacy_selector_parent_div("#city_field")); - - return containers; - } - - function change_edit_fields_order() { - var form = jQuery("#profile-data"); - if( form.length !== 0 ) { - var containers = get_edit_fields_in_insertion_order(); - - containers.reverse(); - - containers.forEach(function(container){ - form.prepend(container); - }); - } - } - - jQuery(document).ready(function(){ - change_edit_fields_order(); // To change the fields order, it MUST be the first function executed - - var selectFieldChoices = new SelectFieldChoices("#state_field", "#city_field", "/plugin/software_communities/get_brazil_states"); - set_initial_form_custom_data(selectFieldChoices); - - jQuery('#secondary_email_field').blur(validate_email_format); - - jQuery("#user_email").blur(put_brazil_based_on_email); - - jQuery('#secondary_email_field').focus(function() { jQuery('#secondary-email-balloon').fadeIn('slow'); }); - jQuery('#secondary_email_field').blur(function() { jQuery('#secondary-email-balloon').fadeOut('slow'); }); - - jQuery("#user_pw").blur(verify_user_password_size); - - jQuery("#profile_data_country").blur(show_or_hide_phone_mask); - - // Event that calls the "Class" to siwtch state field types - jQuery("#profile_data_country").change(function(){ - if( this.value == "-1" ) jQuery(this).val("BR"); - - if( this.value == "BR" && selectFieldChoices.actualFieldIsInput() ) { - selectFieldChoices.replaceStateWithSelectElement(); - selectFieldChoices.showCity(); - } else if( this.value != "BR" && !selectFieldChoices.actualFieldIsInput() ) { - selectFieldChoices.replaceStateWithInputElement(); - selectFieldChoices.hideCity(); - } - }); - - show_or_hide_phone_mask(); - jQuery("#profile_data_birth_date").mask("99/99/9999"); - - fix_phone_mask_format("#profile_data_cell_phone"); - fix_phone_mask_format("#profile_data_comercial_phone"); - fix_phone_mask_format("#profile_data_contact_phone"); - - addBlurFields("#profile_data_email", "email_error", invalid_email_validation); - addBlurFields("#user_secondary_email", "email_error", invalid_email_validation, true); - addBlurFields("#profile_data_personal_website", "site_error", invalid_site_validation); - addBlurFields("#profile_data_organization_website", "site_error", invalid_site_validation); - }); -})(); diff --git a/public/views/user-edit-profile.js b/public/views/user-edit-profile.js index 51a78d6..1e70c43 100644 --- a/public/views/user-edit-profile.js +++ b/public/views/user-edit-profile.js @@ -1,12 +1,6 @@ -modulejs.define('UserEditProfile', ['jquery', 'NoosferoRoot', 'SelectElement', 'SelectFieldChoices'], function($, NoosferoRoot, SelectElement, SelectFieldChoices) { +modulejs.define('UserEditProfile', ['jquery', 'SelectElement', 'SelectFieldChoices'], function($, SelectElement, SelectFieldChoices) { 'use strict'; - var AJAX_URL = { - check_reactivate_account: - NoosferoRoot.urlWithSubDirectory("/plugin/software_communities/check_reactivate_account") - }; - - function set_form_count_custom_data() { var divisor_option = SelectElement.generateOption("-1", "--------------------------------"); var default_option = SelectElement.generateOption("BR", "Brazil"); @@ -28,71 +22,26 @@ modulejs.define('UserEditProfile', ['jquery', 'NoosferoRoot', 'SelectElement', ' } - function check_reactivate_account(value, input_object){ - $.ajax({ - url : AJAX_URL.check_reactivate_account, - type: "GET", - data: { "email": value }, - success: function(response) { - if( $("#forgot_link").length === 0 ) - $(input_object).parent().append(response); - else - $("#forgot_link").html(response); - }, - error: function(type, err, message) { - console.log(type+" -- "+err+" -- "+message); - } - }); - } - - - function put_brazil_based_on_email(){ - var suffixes = ['gov.br', 'jus.br', 'leg.br', 'mp.br']; - var value = this.value; - var input_object = this; - var gov_suffix = false; + function show_state_if_country_is_brazil() { + var selectFieldChoices = new SelectFieldChoices("#state_field", "#city_field", "/plugin/software_communities/get_brazil_states"); + set_initial_form_custom_data(selectFieldChoices); - suffixes.each(function(suffix){ - var has_suffix = new RegExp("(.*)"+suffix+"$", "i"); + $("#profile_data_country").change(function(){ + if( this.value === "-1" ) $(this).val("BR"); - if( has_suffix.test(value) ) { - gov_suffix = true; - $("#profile_data_country").val("BR"); + if( this.value === "BR" && selectFieldChoices.actualFieldIsInput() ) { + selectFieldChoices.replaceStateWithSelectElement(); + selectFieldChoices.showCity(); + } else if( this.value !== "BR" && !selectFieldChoices.actualFieldIsInput() ) { + selectFieldChoices.replaceStateWithInputElement(); + selectFieldChoices.hideCity(); } }); - - $("#profile_data_country").find(':not(:selected)').css('display', (gov_suffix?'none':'block')); - - check_reactivate_account(value, input_object); - } - - - function validate_email_format(){ - var correct_format_regex = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; - - if( this.value.length > 0 ) { - if(correct_format_regex.test(this.value)) { - this.className = "validated"; - } else { - this.className = "invalid"; - } - } else { - this.className = ""; - } - } - - - function verify_user_password_size() { - if( this.value.length < 6 ) { - $(this).switchClass("validated", "invalid"); - } else { - $(this).switchClass("invalid", "validated"); - } } function show_or_hide_phone_mask() { - if($("#profile_data_country").val() == "BR") { + if($("#profile_data_country").val() === "BR") { if( (typeof $("#profile_data_cell_phone").data("rawMaskFn") === 'undefined') ) { $("#profile_data_cell_phone").mask("(99) 9999?9-9999"); $("#profile_data_comercial_phone").mask("(99) 9999?9-9999"); @@ -110,7 +59,7 @@ modulejs.define('UserEditProfile', ['jquery', 'NoosferoRoot', 'SelectElement', ' $(id).blur(function() { var last = $(this).val().substr( $(this).val().indexOf("-") + 1 ); - if( last.length == 3 ) { + if( last.length === 3 ) { var move = $(this).val().substr( $(this).val().indexOf("-") - 1, 1 ); var lastfour = move + last; var first = $(this).val().substr( 0, 9 ); @@ -231,13 +180,18 @@ modulejs.define('UserEditProfile', ['jquery', 'NoosferoRoot', 'SelectElement', ' function set_fields_validations() { - $('#secondary_email_field').blur(validate_email_format); + $("#profile_data_country").blur(show_or_hide_phone_mask); - $("#user_email").blur(put_brazil_based_on_email); + $("#profile_data_birth_date").mask("99/99/9999"); - $("#user_pw").blur(verify_user_password_size); + fix_phone_mask_format("#profile_data_cell_phone"); + fix_phone_mask_format("#profile_data_comercial_phone"); + fix_phone_mask_format("#profile_data_contact_phone"); - $("#profile_data_country").blur(show_or_hide_phone_mask); + add_blur_fields("#profile_data_email", "email_error", invalid_email_validation); + add_blur_fields("#user_secondary_email", "email_error", invalid_email_validation, true); + add_blur_fields("#profile_data_personal_website", "site_error", invalid_site_validation); + add_blur_fields("#profile_data_organization_website", "site_error", invalid_site_validation); } @@ -250,35 +204,11 @@ modulejs.define('UserEditProfile', ['jquery', 'NoosferoRoot', 'SelectElement', ' init: function() { change_edit_fields_order(); // To change the fields order, it MUST be the first function executed - var selectFieldChoices = new SelectFieldChoices("#state_field", "#city_field", "/plugin/software_communities/get_brazil_states"); - set_initial_form_custom_data(selectFieldChoices); - - - - // Event that calls the "Class" to siwtch state field types - $("#profile_data_country").change(function(){ - if( this.value == "-1" ) $(this).val("BR"); - - if( this.value == "BR" && selectFieldChoices.actualFieldIsInput() ) { - selectFieldChoices.replaceStateWithSelectElement(); - selectFieldChoices.showCity(); - } else if( this.value != "BR" && !selectFieldChoices.actualFieldIsInput() ) { - selectFieldChoices.replaceStateWithInputElement(); - selectFieldChoices.hideCity(); - } - }); + show_state_if_country_is_brazil(); show_or_hide_phone_mask(); - $("#profile_data_birth_date").mask("99/99/9999"); - - fix_phone_mask_format("#profile_data_cell_phone"); - fix_phone_mask_format("#profile_data_comercial_phone"); - fix_phone_mask_format("#profile_data_contact_phone"); - add_blur_fields("#profile_data_email", "email_error", invalid_email_validation); - add_blur_fields("#user_secondary_email", "email_error", invalid_email_validation, true); - add_blur_fields("#profile_data_personal_website", "site_error", invalid_site_validation); - add_blur_fields("#profile_data_organization_website", "site_error", invalid_site_validation); + set_fields_validations(); } } }); -- libgit2 0.21.2