diff --git a/app/views/admin/communication/blocks/templates/partners/_edit.html.erb b/app/views/admin/communication/blocks/templates/partners/_edit.html.erb index 56cad7303e0984e96e81de9841141bdf65bee2b8..317f29c06e8b9ce6f49e0947d5d0af1a21ddebea 100644 --- a/app/views/admin/communication/blocks/templates/partners/_edit.html.erb +++ b/app/views/admin/communication/blocks/templates/partners/_edit.html.erb @@ -1,112 +1,71 @@ <a class="<%= button_classes('mb-4') %>" - v-on:click="data.elements.push({title: '', partners: [] })"> - Add category + v-on:click="data.elements.push({name: '', url: '', logo: {}})"> + Add partner </a> -<draggable :list="data.elements" handle=".categoryHandle"> - <div v-for="(category, categoryIndex) in data.elements"> +<draggable :list="data.elements" class="list-group" handle=".partnerHandle"> + <div v-for="(partner, index) in data.elements" class="list-group-item"> <div class="d-flex"> <div> - <a class="btn ps-0 categoryHandle"> + <a class="btn ps-0 partnerHandle"> <i class="fa fa-bars handle"></i> </a> </div> <div class="flex-fill"> - <div class="mb-3"> - <label class="visually-hidden" - aria-label="Title" - :for="'category-title-' + categoryIndex"> - Title - </label> - <input class="form-control form-control-lg" + <div class="row"> + <div class="col-lg-4"> + <label class="form-label" + :for="'partner-' + index + '-name'">Name</label> + <input class="form-control mb-2" type="text" - v-model="category.title" - placeholder="Type category name here" - :id="'category-title-' + categoryIndex"> - </div> - <div> - <div class="row"> - <div class="col-md-8"> - <p>Partners for “{{ category.title }}â€</p> + v-model="partner.name" + placeholder="Type partner's name here" + :id="'partner-' + index + '-name'"> + </div> + <div class="col-lg-4"> + <label class="form-label" + :for="'partner-' + index + '-url'"> + Url <small>(starting with https:// )</small> + </label> + <input class="form-control mb-2" + type="text" + v-model="partner.url" + placeholder="Type partner's url here" + :id="'partner-' + index + '-url'"> + </div> + <div class="col-lg-4"> + <div v-if="!partner.logo.id"> + <%# TODO : create a uploader vue3 component %> + <label class="form-label" + :for="'partner-' + index + '-logo'"> + Logo + </label> + <input class="form-control mb-2" + type="file" + accept="image/*" + @change="onFileImageChange( $event, partner, 'logo' )" + :id="'partner-' + index + '-logo'"> </div> - <div class="col-md-4 text-end"> - <a class="<%= button_classes('mt-n1') %>" - v-on:click="category.partners.push({name: '', url: '', logo: {}})"> - Add partner + <div v-if="partner.logo.id"> + <img :src="getImageUrl(partner.logo)" + class="img-fluid" + style="max-height: 100px" + /> + <a class="btn btn-sm btn-danger ms-2" + v-on:click="partner.logo={}"> + Remove + <i class="fas fa-times"></i> </a> </div> </div> - <draggable :list="category.partners" class="list-group" handle=".partnerHandle"> - <div v-for="(partner, partnerIndex) in category.partners" class="list-group-item"> - <div class="d-flex"> - <div> - <a class="btn ps-0 partnerHandle"> - <i class="fa fa-bars handle"></i> - </a> - </div> - <div class="flex-fill"> - <div class="row"> - <div class="col-lg-4"> - <label class="form-label" - :for="'category-' + categoryIndex + '-partner-name-' + partnerIndex">Name</label> - <input class="form-control mb-2" - type="text" - v-model="partner.name" - placeholder="Type partner's name here" - :id="'category-' + categoryIndex + '-partner-name-' + partnerIndex"> - </div> - <div class="col-lg-4"> - <label class="form-label" - :for="'category-' + categoryIndex + '-partner-url-' + partnerIndex"> - Url <small>(starting with https:// )</small> - </label> - <input class="form-control mb-2" - type="text" - v-model="partner.url" - placeholder="Type partner's url here" - :id="'category-' + categoryIndex + '-partner-url-' + partnerIndex"> - </div> - <div class="col-lg-4"> - <%# TODO : create a uploader vue3 component %> - <label class="form-label" - :for="'category-' + categoryIndex + '-partner-logo-' + partnerIndex"> - Logo - </label> - <input class="form-control mb-2" - type="file" - accept="image/*" - @change="onFileImageChange( $event, partner, 'logo' )" - :id="'category-' + categoryIndex + '-partner-url-' + partnerIndex"> - - <div v-if="partner.logo.id"> - <img :src="getImageUrl(partner.logo)" class="img-fluid d-block" /> - <a class="btn btn-sm btn-danger mt-1" - v-on:click="partner.logo={}"> - Remove - <i class="fas fa-times"></i> - </a> - </div> - </div> - </div> - </div> - <div> - <a class="btn btn-sm btn-danger ms-3" - v-on:click="category.partners.splice(category.partners.indexOf(partner), 1)"> - <i class="fas fa-times"></i> - </a> - </div> - </div> - </div> - </draggable> </div> </div> <div> <a class="btn btn-sm btn-danger ms-3" - v-on:click="data.elements.splice(data.elements.indexOf(category), 1)"> + v-on:click="data.elements.splice(data.elements.indexOf(partner), 1)"> <i class="fas fa-times"></i> </a> </div> </div> - <hr class="my-5"> </div> </draggable> diff --git a/app/views/admin/communication/blocks/templates/partners/_show.html.erb b/app/views/admin/communication/blocks/templates/partners/_show.html.erb index 463abb31d28a5f474a1209b2a65d3ce62cb16c6f..14f0efec4faf9130f2856b116ee8bd82be61121a 100644 --- a/app/views/admin/communication/blocks/templates/partners/_show.html.erb +++ b/app/views/admin/communication/blocks/templates/partners/_show.html.erb @@ -1,19 +1,16 @@ -<% @block.data['elements'].each do |element| %> - <h2><%= element['title'] %></h2> - <div class="row"> - <% element['partners'].each do |partner| %> - <div class="col-md-2"> - <article class="card"> - <% unless partner.dig('logo', 'id').blank? %> - <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %> - <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %> - <% end %> - <div class="card-body"> - <h3 class="card-title h5"><%= partner['name'] %></h3> - <p class="mb-0"><%= partner['url'] %></p> - </div> - </article> +<div class="row"> +<% @block.data['elements'].each do |partner| %> + <div class="col-md-2"> + <article class="card"> + <% unless partner.dig('logo', 'id').blank? %> + <% blob = ActiveStorage::Blob.find(partner.dig('logo', 'id')) %> + <%= kamifusen_tag blob, width: 300, class: 'img-fluid mb-2' %> + <% end %> + <div class="card-body"> + <h3 class="card-title h5"><%= partner['name'] %></h3> + <p class="mb-0"><%= partner['url'] %></p> </div> - <% end %> + </article> </div> <% end if @block.data %> +</div> diff --git a/app/views/admin/communication/blocks/templates/partners/_static.html.erb b/app/views/admin/communication/blocks/templates/partners/_static.html.erb index 90043893cd7bee4e2e054c0fbe84b9544ce0279f..96ec79ba127ceb6bf37838bfb1a7f403ff145406 100644 --- a/app/views/admin/communication/blocks/templates/partners/_static.html.erb +++ b/app/views/admin/communication/blocks/templates/partners/_static.html.erb @@ -1,10 +1,5 @@ <% if block.data.has_key?('elements') %> -<% block.data['elements'].each do |element| %> - - title: > - <%= element['title'] %> - partners: -<% -element['partners'].each do |partner| +<% block.data['elements'].each do |partner| logo_id = nil if partner.has_key?('logo') logo = partner['logo'] @@ -13,13 +8,12 @@ element['partners'].each do |partner| end end %> - - name: > - <%= prepare_text_for_static partner['name'] %> - url: > - <%= prepare_text_for_static partner['url'] %> - <% if logo_id %> - logo: "<%= logo_id %>" - <% end %> -<% end %> + - name: > + <%= prepare_text_for_static partner['name'] %> + url: > + <%= prepare_text_for_static partner['url'] %> + <% if logo_id %> + logo: "<%= logo_id %>" + <% end %> <% end %> <% end %> diff --git a/lib/tasks/app.rake b/lib/tasks/app.rake index 3ab19673c2947b3dc11b5756ea120f985d34a15a..b0e8e56d808f1ffd47bc8c16fe4324489c7ca939 100644 --- a/lib/tasks/app.rake +++ b/lib/tasks/app.rake @@ -8,28 +8,20 @@ namespace :app do desc 'Fix things' task fix: :environment do - [ - "text", "biography", "accessibility", "contacts", "duration", - "evaluation", "objectives", "opportunities", "other", "pedagogy", - "prerequisites", "pricing", "registration", "content", "results" - ].each do |attribute| - ActiveStorage::Attachment.where(name: "#{attribute}_new_summernote_embeds").find_each { _1.update_column :name, "#{attribute}_summernote_embeds" } + Communication::Block.where(template: 'partners').find_each do |partner| + next if partner.data.nil? + data = partner.data + next unless data.has_key? 'elements' + elements = data['elements'] + next if elements.none? + first = elements.first + next unless first.has_key? 'partners' + partner.title = first['title'] + partner.data['elements'] = first['partners'] + partner.save end end - def clean_for_summernote(actiontext) - return '' if actiontext.nil? - actiontext.body - .to_html - .gsub('<div>', '<p>') - .gsub('</div>', '</p>') - .gsub('<strong>', '<b>') - .gsub('</strong>', '</b>') - .gsub('<em>', '<i>') - .gsub('</em>', '</i>') - .gsub('<p><br></p>', '') - end - namespace :db do desc 'Get database from Scalingo' task :staging do