From 5f22f3023f57d20cd2ab5e478a03ac3dd9220dba Mon Sep 17 00:00:00 2001
From: Arnaud Levy <contact@arnaudlevy.com>
Date: Tue, 27 Dec 2022 09:39:12 +0100
Subject: [PATCH] Theme management

---
 app/controllers/server/websites_controller.rb | 17 +++-------------
 app/models/communication/website.rb           |  1 +
 .../communication/website/with_style.rb       |  2 +-
 .../communication/website/with_theme.rb       | 20 +++++++++++++++++++
 app/views/server/websites/edit.html.erb       |  6 ------
 app/views/server/websites/index.html.erb      | 18 +++++++++++++----
 config/routes/server.rb                       |  8 +++++++-
 7 files changed, 46 insertions(+), 26 deletions(-)
 create mode 100644 app/models/communication/website/with_theme.rb
 delete mode 100644 app/views/server/websites/edit.html.erb

diff --git a/app/controllers/server/websites_controller.rb b/app/controllers/server/websites_controller.rb
index 856ed0692..7ee0a9b20 100644
--- a/app/controllers/server/websites_controller.rb
+++ b/app/controllers/server/websites_controller.rb
@@ -3,24 +3,13 @@ class Server::WebsitesController < Server::ApplicationController
   def index
     @websites = Communication::Website.all.ordered
     breadcrumb
+    add_breadcrumb Communication::Website.model_name.human(count: 2), server_websites_path
   end
 
-  def edit
-    @website = Communication::Website.find params[:id]
-    breadcrumb
-    add_breadcrumb @website
-  end
-
-  def update
+  def refresh
     @website = Communication::Website.find params[:id]
-    @website.update_column :theme_version, params[:communication_website][:theme_version]
+    @website.get_current_theme_version!
     redirect_to server_websites_path
   end
 
-  protected
-
-  def breadcrumb
-    super
-    add_breadcrumb Communication::Website.model_name.human(count: 2), server_websites_path
-  end
 end
\ No newline at end of file
diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index fbfb3ca4a..3fba5c493 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -47,6 +47,7 @@ class Communication::Website < ApplicationRecord
   include WithProgramCategories
   include WithSpecialPages
   include WithStyle
+  include WithTheme
 
   enum git_provider: {
     github: 0,
diff --git a/app/models/communication/website/with_style.rb b/app/models/communication/website/with_style.rb
index 3d5172b77..5eb1d00b2 100644
--- a/app/models/communication/website/with_style.rb
+++ b/app/models/communication/website/with_style.rb
@@ -1,5 +1,5 @@
 module Communication::Website::WithStyle
-    extend ActiveSupport::Concern
+  extend ActiveSupport::Concern
 
   def preview_style
     load_style if style_outdated? 
diff --git a/app/models/communication/website/with_theme.rb b/app/models/communication/website/with_theme.rb
new file mode 100644
index 000000000..ab6b6e332
--- /dev/null
+++ b/app/models/communication/website/with_theme.rb
@@ -0,0 +1,20 @@
+module Communication::Website::WithTheme
+  extend ActiveSupport::Concern
+
+  def get_current_theme_version!
+    self.update_column :theme_version, current_theme_version
+  end
+
+  def theme_version_url
+    return if url.blank?
+    "#{url}/osuny-theme-version"
+  end
+
+  protected
+
+  def current_theme_version
+    URI(theme_version_url).read
+  rescue
+    'NA'
+  end
+end
\ No newline at end of file
diff --git a/app/views/server/websites/edit.html.erb b/app/views/server/websites/edit.html.erb
deleted file mode 100644
index bfa63d2db..000000000
--- a/app/views/server/websites/edit.html.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<%= simple_form_for @website, url: server_website_path(@website) do |f| %>
-  <%= f.input :theme_version %>
-  <% content_for :action_bar_right do %>
-    <%= submit f %>
-  <% end %>
-<% end %>
\ No newline at end of file
diff --git a/app/views/server/websites/index.html.erb b/app/views/server/websites/index.html.erb
index 8576e5a66..5995955a4 100644
--- a/app/views/server/websites/index.html.erb
+++ b/app/views/server/websites/index.html.erb
@@ -11,20 +11,30 @@
         <th><%= Communication::Website.human_attribute_name('in_production') %></th>
         <th><%= Communication::Website.human_attribute_name('theme_version') %></th>
         <th><%= University.model_name.human %></th>
+        <th></th>
       </tr>
     </thead>
     <tbody>
       <% @websites.each do |website| %>
         <tr>
-          <td><%= link_to website.name, edit_server_website_path(website) %></td>
+          <td>
+            <%= link_to website.name, edit_server_website_path(website) %>
+          </td>
           <td>
             <%= link_to website.url, website.url, target: :_blank if website.url.present? %>
           </td>
-          <td><%= t website.in_production %></td>
           <td>
-            <%= link_to website.theme_version, "#{website.url}/osuny-theme-version", target: :_blank if website.url.present? %>
+            <%= t website.in_production %>
+          </td>
+          <td>
+            <%= link_to website.theme_version, website.theme_version_url, target: :_blank if website.theme_version_url.present? %>
+          </td>
+          <td>
+            <%= link_to website.university, [:server, website.university] %>
+          </td>
+          <td>
+            <%= link_to "Sync version", refresh_server_website_path(website), method: :post, class: button_classes %>
           </td>
-          <td><%= link_to website.university, [:server, website.university] %></td>
         </tr>
       <% end %>
     </tbody>
diff --git a/config/routes/server.rb b/config/routes/server.rb
index 394797b29..02c1e75ce 100644
--- a/config/routes/server.rb
+++ b/config/routes/server.rb
@@ -1,5 +1,11 @@
 namespace :server do
-  resources :universities, :languages, :websites
+  resources :universities
+  resources :languages
+  resources :websites do 
+    member do
+      post :refresh
+    end
+  end
   get 'blocks' => 'blocks#index', as: :blocks
   get 'blocks/:id' => 'blocks#show', as: :block
   post 'blocks/:id' => 'blocks#resave', as: :resave_block
-- 
GitLab