diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4d8f6cf0abc804af7adda73b1210afe69d5d6269..12e9793ed2eea7a2b197f1075fb1d9086c7ad6d5 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -359,7 +359,10 @@ class UsersController < ApplicationController def validated_profile_websites(profile_params) sites = profile_params[:user_websites_attributes] - websites = sites.transform_values { |w| w.merge({ url: ensure_protocol(w[:url]) }) } + websites = sites.select { |_, v| v[:url].present? && v[:url] != ''} + .transform_values { |w| w.merge({ url: ensure_protocol(w[:url]) }) } + +# websites = sites.transform_values { |w| w.merge({ url: ensure_protocol(w[:url]) }) } invalid_keys = websites.select { |_, w| w[:url].nil? }.keys @@ -395,9 +398,9 @@ class UsersController < ApplicationController user_websites_attributes: [:id, :label, :url]) # Ensure that all user-supplied URLs are valid (strip ones that aren't). - if profile_params[:user_websites_attributes].present? - profile_params[:user_websites_attributes] = validated_profile_websites(profile_params) - end +# if profile_params[:user_websites_attributes].present? +# profile_params[:user_websites_attributes] = validated_profile_websites(profile_params) +# end @user = current_user diff --git a/app/models/user.rb b/app/models/user.rb index 95d508d2589d8f254b6038973f622af6e9d70afa..84021c1d997f505777a3d73f53f2720492c76027 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,4 @@ +# coding: utf-8 # Represents a user. Most of the User's logic is controlled by Devise and its overrides. A user, as far as the # application code (i.e. excluding Devise) is concerned, has many questions, answers, and votes. class User < ApplicationRecord @@ -138,8 +139,12 @@ class User < ApplicationRecord website.nil? ? website : URI.parse(website).hostname end - def websites_for - user_websites.order(position) + def all_websites_for + user_websites.order(position: :asc) + end + + def valid_websites_for + user_websites.where.not(url: [nil, ""]).order(position: :asc) end def is_moderator diff --git a/app/views/users/edit_profile.html.erb b/app/views/users/edit_profile.html.erb index 41d1ba83c1f6706fc2f9994e9be6183b12454cdb..f454c14216b476950573f5bb48ce0bd9739825f4 100644 --- a/app/views/users/edit_profile.html.erb +++ b/app/views/users/edit_profile.html.erb @@ -47,17 +47,15 @@ <div class="post-preview"></div> <div> - <p>External links (your web site, blog, social media, GitHub, etc)</p> + <p>Extra fields -- your web site, GitHub profile, social-media usernames, whatever you want. Only values that begin with "http" are rendered as links.</p> <div class="grid"> <%= f.fields_for :user_websites do |w| %> <div class="grid grid--cell is-12"> - <div class="grid grid--cell is-4"> - <div class="grid--cell is-2">Label:</div> - <div class="grid--cell is-10"><%= w.text_field :label, class: 'form-element' %></div> + <div class="grid grid--cell is-3"> + <div class="grid--cell is-12"><%= w.text_field :label, class: 'form-element', autocomplete: 'off', placeholder: 'label' %></div> </div> <div class="grid grid--cell is-6"> - <div class="grid--cell is-1">URL:</div> - <div class="grid--cell is-11"><%= w.text_field :url, class: 'form-element' %></div> + <div class="grid--cell is-12"><%= w.text_field :url, class: 'form-element', autocomplete: 'off', placeholder: 'https://...' %></div> </div> </div> <% end %> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 1442c04c625e180af8e90c688e5ddacb735f816c..6cc9673c4a463d60c1702bc0d49293fcc8864c4a 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -57,19 +57,27 @@ <% end %> </div> - <% if @user.user_websites.where.not(url: [nil, ""]).size > 0 %> + <% unless !user_signed_in? && !@user.community_user.privilege?('unrestricted') %> + <% if @user.valid_websites_for.size.positive? %> <div> - <p><strong>External links</strong></p> + <p><strong>Extra fields</strong></p> <table class="table is-with-hover"> - <% @user.user_websites.where.not(url: [nil, ""]).each do |w| %> + <% @user.valid_websites_for.each do |w| %> <tr> <td><%= w.label %></td> - <td><%= link_to w.url, w.url, rel: 'nofollow' %></td> + <td> + <% if w.url[0,4] == 'http' %> + <%= link_to w.url, w.url, rel: 'nofollow' %> + <% else %> + <%= w.url %> + <% end %> + </td> </tr> <% end %> </table> </div> <% end %> + <% end %> <div class="button-list h-p-2"> <% if user_signed_in? %>