From 5a45ddf948c33d46eb665c64642d7ed1af8432a4 Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Wed, 18 Jan 2023 09:53:47 +0100
Subject: [PATCH] better

---
 app/services/contact_details/country.rb       | 10 ++++++++
 app/services/contact_details/email.rb         |  9 ++++++++
 app/services/contact_details/phone.rb         | 14 +++++++++++
 app/services/contact_details/twitter.rb       |  1 -
 .../static/_contact_detail.html.erb           |  6 +++++
 .../university/organizations/static.html.erb  | 23 +++++++++----------
 .../admin/university/people/static.html.erb   | 19 ++++++++-------
 7 files changed, 59 insertions(+), 23 deletions(-)
 create mode 100644 app/services/contact_details/country.rb
 create mode 100644 app/services/contact_details/email.rb
 create mode 100644 app/services/contact_details/phone.rb
 create mode 100644 app/views/admin/application/static/_contact_detail.html.erb

diff --git a/app/services/contact_details/country.rb b/app/services/contact_details/country.rb
new file mode 100644
index 000000000..29132d5a2
--- /dev/null
+++ b/app/services/contact_details/country.rb
@@ -0,0 +1,10 @@
+class ContactDetails::Country < ContactDetails::Base
+
+  protected
+
+  def prepare_label
+    super
+    # TODO country name
+  end
+
+end
\ No newline at end of file
diff --git a/app/services/contact_details/email.rb b/app/services/contact_details/email.rb
new file mode 100644
index 000000000..1de30890d
--- /dev/null
+++ b/app/services/contact_details/email.rb
@@ -0,0 +1,9 @@
+class ContactDetails::Email < ContactDetails::Base
+
+  protected
+
+  def prepare_url
+    @url = "mailto:#{@string}"
+  end
+
+end
\ No newline at end of file
diff --git a/app/services/contact_details/phone.rb b/app/services/contact_details/phone.rb
new file mode 100644
index 000000000..f3556062f
--- /dev/null
+++ b/app/services/contact_details/phone.rb
@@ -0,0 +1,14 @@
+class ContactDetails::Phone < ContactDetails::Base
+
+  protected
+
+  def prepare_url
+    @url = @string.dup
+    @url.remove! ' '
+    @url.remove! '.'
+  end
+
+  def prepare_label
+    @label = @string
+  end
+end
\ No newline at end of file
diff --git a/app/services/contact_details/twitter.rb b/app/services/contact_details/twitter.rb
index 407d0f2c0..3a9a69038 100644
--- a/app/services/contact_details/twitter.rb
+++ b/app/services/contact_details/twitter.rb
@@ -1,7 +1,6 @@
 class ContactDetails::Twitter < ContactDetails::Base
   URL = 'https://twitter.com'
   DOMAIN = 'twitter.com'
-
   
   protected
   
diff --git a/app/views/admin/application/static/_contact_detail.html.erb b/app/views/admin/application/static/_contact_detail.html.erb
new file mode 100644
index 000000000..3ac9e3345
--- /dev/null
+++ b/app/views/admin/application/static/_contact_detail.html.erb
@@ -0,0 +1,6 @@
+<%
+detail = kind.new data
+%>
+  <%= variable %>:
+    label: <%= detail.label %>
+    url: <%= detail.url %>
\ No newline at end of file
diff --git a/app/views/admin/university/organizations/static.html.erb b/app/views/admin/university/organizations/static.html.erb
index 9a0bf5aab..5f3c340a5 100644
--- a/app/views/admin/university/organizations/static.html.erb
+++ b/app/views/admin/university/organizations/static.html.erb
@@ -24,21 +24,20 @@ kind:
 <%= key %>: >
   <%= prepare_text_for_static value %>
 <% end %>
-
-contact_details:
-  website: <% detail = ContactDetails::Website.new @about.url %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-  linkedin: <% detail = ContactDetails::Linkedin.new @about.linkedin %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-  twitter: <% detail = ContactDetails::Twitter.new @about.twitter %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-
 <% # url is a reserved keyword for Hugo %>
 website: >
   <%= prepare_text_for_static @about.url %>
+contact_details:
+<%= render 'admin/application/static/contact_detail', variable: :address, data: @about.address, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :zipcode, data: @about.zipcode, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :city, data: @about.city, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :country, data: @about.country, kind: ContactDetails::Country %>
+<%= render 'admin/application/static/contact_detail', variable: :address, data: @about.address, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :website, data: @about.url, kind: ContactDetails::Website %>
+<%= render 'admin/application/static/contact_detail', variable: :linkedin, data: @about.linkedin, kind: ContactDetails::Linkedin %>
+<%= render 'admin/application/static/contact_detail', variable: :twitter, data: @about.twitter, kind: ContactDetails::Twitter %>
+<%= render 'admin/application/static/contact_detail', variable: :phone, data: @about.phone, kind: ContactDetails::Phone %>
+<%= render 'admin/application/static/contact_detail', variable: :email, data: @about.email, kind: ContactDetails::Email %>
 <% if @about.logo.attached? %>
 logo: "<%= @about.logo.blob.id %>"
 <% end %>
diff --git a/app/views/admin/university/people/static.html.erb b/app/views/admin/university/people/static.html.erb
index 07d8a5122..9aea1854f 100644
--- a/app/views/admin/university/people/static.html.erb
+++ b/app/views/admin/university/people/static.html.erb
@@ -20,16 +20,15 @@ linkedin: >-
 website: >-
   <%= @about.url %>
 contact_details:
-  website: <% detail = ContactDetails::Website.new @about.url %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-  linkedin: <% detail = ContactDetails::Linkedin.new @about.linkedin %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-  twitter: <% detail = ContactDetails::Twitter.new @about.twitter %>
-    label: <%= detail.label %>
-    url: <%= detail.url %>
-
+<%= render 'admin/application/static/contact_detail', variable: :address, data: @about.address, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :zipcode, data: @about.zipcode, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :city, data: @about.city, kind: ContactDetails::Base %>
+<%= render 'admin/application/static/contact_detail', variable: :country, data: @about.country, kind: ContactDetails::Country %>
+<%= render 'admin/application/static/contact_detail', variable: :website, data: @about.url, kind: ContactDetails::Website %>
+<%= render 'admin/application/static/contact_detail', variable: :linkedin, data: @about.linkedin, kind: ContactDetails::Linkedin %>
+<%= render 'admin/application/static/contact_detail', variable: :twitter, data: @about.twitter, kind: ContactDetails::Twitter %>
+<%= render 'admin/application/static/contact_detail', variable: :phone, data: @about.phone_mobile, kind: ContactDetails::Phone %>
+<%= render 'admin/application/static/contact_detail', variable: :email, data: @about.email, kind: ContactDetails::Email %>
 <% if @about.best_picture.attached? %>
 image: "<%= @about.best_picture.blob.id %>"
 <% end %>
-- 
GitLab