This commit is contained in:
Nicolas Bally 2017-01-05 11:20:16 +01:00
parent 462d328cb5
commit 1a045e278a
60 changed files with 794 additions and 746 deletions

View File

@ -845,3 +845,73 @@ h1{
} }
#reservations_index_block{
table{
width:100%;
}
.top{
width:100%;
td{
border:0px;
}
}
.next{
text-align:right;
}
#calendar{
table{
border-collapse:collapse;
td{
border:1px solid black;
padding:0px;
.day{
position:relative;
.date{
position:absolute;
font-size:40px;
top:25px;
right:10px;
color:white;
}
.am, .pm{
text-align:left;
padding:20px;
&.true{
background:#ea5454;
}
&.false{
background:#9bbb56;
}
}
}
}
}
}
}

View File

@ -560,5 +560,73 @@ cursor:pointer
} }
#reservations_index_block{
table{
width:100%;
}
.top{
width:100%;
td{
border:0px;
}
}
.next{
text-align:right;
}
#calendar{
table{
border-collapse:collapse;
td{
border:1px solid black;
padding:0px;
.day{
position:relative;
.date{
position:absolute;
font-size:40px;
top:25px;
right:10px;
color:white;
}
.am, .pm{
text-align:left;
padding:20px;
&.true{
background:#ea5454;
}
&.false{
background:#9bbb56;
}
}
}
}
}
}
}

285
app/controllers/admin/newsletters_controller.rb Executable file → Normal file
View File

@ -1,183 +1,136 @@
# -*- encoding : utf-8 -*- # -*- encoding : utf-8 -*-
class Admin::NewslettersController < ApplicationController class Admin::NewslettersController < ApplicationController
layout "admin"
before_filter :auth_admin before_filter :auth_admin
# require_permission 'newsletter.show'
# require_permission 'newsletter.add', :only => [:newsletter_new, :newsletter_create]
# require_permission 'newsletter.edit', :only => [:newsletter_edit, :newsletter_update]
# require_permission 'newsletter.delete', :only => [:newsletter_del]
# require_permission 'newsletter.send', :only => [:send_test, :send_newsletter, :select_recipients]
def history_detail
@archive_newsletter = ArchiveNewsletter.find(params[:id])
@newsletter = @archive_newsletter.newsletter
end
def history
@newsletter = Newsletter.find(params[:id])
end
def index
@h2 = "Liste des newsletters "
per_page = (params[:per_page] and params[:per_page] != "") ? params[:per_page] : 15
page = (params[:page] and params[:page] != "") ? params[:page] : 1
@newsletter= Newsletter.order("created_at DESC").page(page).per(per_page)
end
def new
@h2 = "Creer une newsletter"
@newsletter = Newsletter.new
render :layout => false
end
def create
@h2 = "Creer une newsletter"
@newsletter = Newsletter.new(params.require(:newsletter).permit!)
if @newsletter.save
per_page = (params[:per_page] and params[:per_page] != "") ? params[:per_page] : 15
page = (params[:page] and params[:page] != "") ? params[:page] : 1
layout "admin"
@newsletters= Newsletter.order("created_at DESC").page(page).per(per_page)
#redirect_to :action => :index
else
render :action => :new
end
end
def edit
@h2 = "Editer une newsletter"
@newsletter = Newsletter.find(params[:id])
end
def update
@h2 = "Editer une newsletter"
@newsletter = Newsletter.find(params[:id])
if @newsletter.update_attributes(params.require(:newsletter).permit!)
flash[:notice]= "La newsletter à été mise à jour"
else
render :action => :edit
end
end
def show def index
@newsletter = Newsletter.find(params[:id]) @newsletters = Newsletter.order('created_at DESC')
@options = {} if request.xhr?
render :layout => "mail" render :layout => false
end
end
def destroy end
@newsletter = Newsletter.find(params[:id])
@newsletter.destroy
flash[:notice]= "La newsletter à été supprimé avec succès"
redirect_to :action => :index
end
def new
def send_test
@errors = []
@newsletter = Newsletter.find(params[:id])
#NewsletterMails.newsletter(@newsletter, params[:email]).deliver
send_helper @newsletter, params[:email]
flash[:notice]= "La newsletter a bien été envoyée à l'email de test"
redirect_to :action => :index
end
def send_helper(newsletter, email, options = {})
if email and email != ""
begin
@mail_archive = MailArchive.new
@mail_archive.archive_newsletter_id = @archive_newsletter.id if @archive_newsletter
@mail_archive.email = email
@mail_archive.newsletter_id = newsletter.id
@mail_archive.sheet = options[:sheet]
@mail_archive.person = options[:person]
@mail_archive.save
options = options.merge({:mail_archive => @mail_archive})
NewsletterMails.newsletter(newsletter, email, options).deliver if email and email != ""
rescue
@errors << "<span class'error'>#{email}</span>"
end
end
end
def send_newsletter @newsletter = Newsletter.new()
@errors = [] end
@newsletter = Newsletter.find(params[:id])
def create
@archive_newsletter = ArchiveNewsletter.create :newsletter_id => @newsletter.id, :title => @newsletter.title, :content => @newsletter.content, :email_from => Newsletter::EMAIL_TEXTES[@newsletter.email_from][0].to_s+ " <#{@newsletter.email_from}>"
if params[:confirmed_groups]
PeopleNewsgroup.all(:conditions => {:newsgroup_id => params[:confirmed_groups]}).each do |pn|
if pn.person
p =pn.person
send_helper(@newsletter, p.email, :people_newsgroup => pn, :person => p, :sheet => p.sheet) if p.newsletter
end
end
elsif params[:confirmed_sheets]
@sheets = Sheet.find(:all, :conditions => {:id => params[:confirmed_sheets]}) @newsletter = Newsletter.new(params.require(:newsletter).permit!)
@persons = Person.find(:all, :conditions => {:sheet_id => params[:confirmed_sheets], :newsletter => true})
@persons.each do |p|
send_helper(@newsletter, p.email, :person => p, :sheet => p.sheet)
end
@sheets.each do |s|
send_helper(@newsletter, s.other_mail, :sheet => s)
end
puts params[:newsletter][:subject]
end if @newsletter.save
flash[:notice] = "La newsletter à bien été créé."
@newsletters = Newsletter.order('created_at DESC')
flash[:notice]= "La newsletter a bien été envoyée à toutes les adresses mail séléctionnée" respond_to do |format|
redirect_to :action => :index format.js
format.html{ redirect_to admin_newsletters_path}
end end
def select_recipients else
@newsletter = Newsletter.find(params[:id])
if params[:sheet_filter] respond_to do |format|
@sheets = Sheet.search_by_params(params[:sheet_filter]) format.js { render :action => :new}
end
end
end
end
end def edit
@newsletter = Newsletter.find(params[:id])
end
def update
@newsletter = Newsletter.find(params[:id])
if @newsletter.update_attributes(params.require(:newsletter).permit!)
flash[:notice] = "La newsletter à bien été modifié."
respond_to do |format|
format.html { redirect_to(admin_newsletters_path()) }
format.js
end
else
respond_to do |format|
format.html { render :action => :edit}
format.js { render :action => :edit}
end
end
end
def destroy
@newsletter = Newsletter.find(params[:id])
@newsletter.destroy
flash[:notice] = "La newsletter à bien été supprimé."
end
def send_test
@newsletter = Newsletter.find(params[:id])
@email = params[:email].to_s
General.send_newsletter(@email,@newsletter).deliver
redirect_to(admin_newsletters_path, :notice => "La newsletter a bien été envoyée à l'email de test")
end
def select_recipients
@newsletter = Newsletter.find(params[:id])
@studients = Registrant.where(:enabled => true).all
respond_to do |format|
format.html
format.js
end
end
def send_newsletter
@newsletter = Newsletter.find(params[:id])
@i = 0
if params[:confirmed_ids]
@registrants = Registrant.find( params[:confirmed_ids])
@registrants.each do |registrant|
General.send_newsletter(registrant,@newsletter).deliver
@i +=1
end
end
@newsletter.sended = true
@newsletter.send_at = Time.now
@newsletter.save
redirect_to(admin_newsletters_path, :notice => "La newsletter a la séléction d'emails ("+@i.to_s+" envois.)")
end
end end

View File

@ -0,0 +1,94 @@
# -*- encoding : utf-8 -*-
class Admin::RegistrantsController < ApplicationController
before_filter :auth_admin
layout "admin"
before_filter :find_registrants
def index
end
def import
@file = File.open(Rails.root.join('contacts.csv')).read
r = Regexp.new(/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b/)
@emails = @file.scan(r).uniq
@emails.each do |mail|
Registrant.create(:enabled => true, :email => mail)
end
end
def cible
@registrants = Registrant.all
render :layout => false
end
def new
@registrant = Registrant.new
respond_to do |format|
format.js
end
end
def edit
@registrant = Registrant.find(params[:id])
end
def create
@registrant = Registrant.new(params.require(:registrant).permit!)
respond_to do |format|
if @registrant.save
flash[:notice] = "Le lien à été ajouté avec succès."
self.find_registrants
format.js
else
format.html { render :action => "new" }
format.js { render :action => "new" }
end
end
end
def update
@registrant = Registrant.find(params[:id])
respond_to do |format|
if @registrant.update_attributes(params.require(:registrant).permit!)
format.js
else
format.js { render :action => "edit" }
end
end
end
def destroy
@registrant = Registrant.find(params[:id])
@registrant.destroy
respond_to do |format|
format.js
end
end
def find_registrants
@registrants = Registrant.all
end
end

View File

@ -2,6 +2,7 @@
# -*- encoding : utf-8 -*- # -*- encoding : utf-8 -*-
class Admin::ReservationsController < ApplicationController class Admin::ReservationsController < ApplicationController
before_filter :auth_admin
layout "admin" layout "admin"
@ -53,7 +54,7 @@ class Admin::ReservationsController < ApplicationController
def create def create
@reservation = Reservation.new(params[:reservation]) @reservation = Reservation.new(params.require(:reservation).permit!)
@date = Date.parse("#{params[:year]}/#{params[:month]}").beginning_of_month @date = Date.parse("#{params[:year]}/#{params[:month]}").beginning_of_month

View File

@ -1,76 +0,0 @@
# -*- encoding : utf-8 -*-
class Public::LabelProduitsController < ApplicationController
layout "public"
def importold
require 'roo'
@xlsx = Roo::Spreadsheet.open("#{Rails.root}/import_label/label.xlsx")
#xlsx = Roo::Excelx.new("./new_prices.xlsx")
# Use the extension option if the extension is ambiguous.
#xlsx = Roo::Spreadsheet.open('./rails_temp_upload', extension: :xlsx)
@xlsx.info
@sheet = @xlsx.sheet(0)
end
def index
per_page = (params[:per_page] and params[:per_page] != "") ? params[:per_page] : 50
page = (params[:page] and params[:page] != "") ? params[:page] : 1
@label_produits = LabelProduit.order("label_produits.name ASC")
if params[:search]
if params[:label_category_id] and params[:label_category_id] != ""
@label_produits = @label_produits.where(:label_category_id => params[:label_category_id])
end
if params[:couleur_logo] and params[:couleur_logo] != ""
@label_produits = @label_produits.where(:couleur_logo => params[:couleur_logo])
end
if params[:label_marque_id] and params[:label_marque_id] != ""
@label_produits = @label_produits.where(:label_marque_id => params[:label_marque_id])
end
if params[:label_famille_id] and params[:label_famille_id] != ""
@label_produits = @label_produits.joins(:label_category).where("label_categories.label_famille_id = ?", params[:label_famille_id])
end
if params[:label_entreprise_id] and params[:label_entreprise_id] != ""
@label_produits = @label_produits.joins(:label_marque).where("label_marques.label_entreprise_id = ?", params[:label_entreprise_id])
end
if params[:label_distributeur_id] and params[:label_distributeur_id] != ""
@label_produits = @label_produits.joins(:label_distributeurs).where("label_distributeurs.id = ?", params[:label_distributeur_id])
end
if params[:q]
@label_produits = @label_produits.joins(:label_marque).where("label_produits.name LIKE ? or label_marques.name LIKE ? ", "%"+params[:q].to_s+"%", "%"+params[:q].to_s+"%" )
end
if params[:label_marque_id] and params[:label_marque_id] != ""
@label_marque = LabelMarque.find(params[:label_marque_id])
end
else
@label_produits = LabelProduit.order("name ASC")
end
@label_produits = @label_produits.order("label_produits.name ASC").page(page).per(per_page)
end
end

View File

@ -8,10 +8,10 @@ class Public::RegistrantsController < ApplicationController
def create def create
@registrant = Registrant.new(params.require(:registrant).permit(:surname, :email)) @registrant = Registrant.new(params.require(:registrant).permit!)
test = Registrant.find_by_email(@registrant.email) test = Registrant.find_by_email(@registrant.email)
if test and !test.enabled if test
@registrant = test @registrant = test
General.confirm_email(@registrant).deliver General.confirm_email(@registrant).deliver
else else
@ -24,13 +24,13 @@ class Public::RegistrantsController < ApplicationController
end end
end end
def destroy_e def edit
@registrant = Registrant.find_by_token(params[:id]) @registrant = Registrant.find_by_token(params[:id])
if @registrant if @registrant
@registrant.destroy @registrant.destroy
@message = "<p>Vous avez bien été désinscrit.</p>" redirect_to root_path, :notice => "L'adresse mail #{@registrant.email} à bien été supprimée de notre fichier."
else else
@message = "Votre adresse mail ne figure pas dans notre fichier." redirect_to root_path, :notice => "Votre adresse mail ne figure pas dans notre fichier."
end end
end end
@ -39,14 +39,11 @@ class Public::RegistrantsController < ApplicationController
if @registrant if @registrant
@registrant.enabled = true @registrant.enabled = true
@registrant.save @registrant.save
@message = "<p>Merci, votre inscription a bien été prise en compte.</p> " redirect_to root_path, :notice => "Merci ! Votre inscription est confirmée, vous recevrez désormais notre newsletter !"
else else
@message = "Votre adresse mail ne figure pas dans le fichier." redirect_to root_path, :notice => "Votre adresse mail ne figure pas dans notre fichier."
end end
end
redirect_to "/"
end
end end

View File

@ -1,8 +1,22 @@
class General < ActionMailer::Base class General < ActionMailer::Base
default :from => "One Voice <info@test.com>" default :from => "ballalama <ballalama.reaumont@orange.fr>"
self.default_url_options = {:host => HOSTNAME} self.default_url_options = {:host => HOSTNAME}
def send_newsletter(email,newsletter )
@newsletter = newsletter
if email.kind_of?(String)
email = email
else
@registrant = email
email = email.email
end
mail(:to => email, :subject => @newsletter.subject) do |format|
format.html { render :action => "send_newsletter"}
end
end
def confirm_email(registrant) def confirm_email(registrant)
@registrant = registrant @registrant = registrant

View File

@ -5,13 +5,13 @@ class Block < ActiveRecord::Base
TitleContent: "Titre", TitleContent: "Titre",
TextContent: "Texte", TextContent: "Texte",
ImageContent: "Image", ImageContent: "Image",
#LinkContent:"Lien", LinkContent:"Lien",
#BreakContent: "Séparation", BreakContent: "Séparation",
HtmlContent: "Code HTML", HtmlContent: "Code HTML",
#DownloadContent: "Téléchargement", DownloadContent: "Téléchargement",
GalleryContent: "Galerie", GalleryContent: "Galerie",
#DynamicContent: "Contenu dynamique", DynamicContent: "Contenu dynamique",
#TableContent: "Tableau", TableContent: "Tableau",
BlockContent: "Bloc", BlockContent: "Bloc",
MapContent: "Plan", MapContent: "Plan",
#QuoteContent: "Citation", #QuoteContent: "Citation",

View File

@ -4,7 +4,8 @@ class DynamicContent < ActiveRecord::Base
belongs_to :item belongs_to :item
NAMES = {"realisations" => "Liste des réalisations"} NAMES = { "newsletter_form" => "Formulaire Newsletter","reservations" => "Tableau des réservations"}
def self.picto def self.picto
"cog" "cog"

View File

@ -1,14 +0,0 @@
=form_for [:admin, @newsletter], :remote => true do |f|
.content
%p
Sujet :
=f.text_field :subject, :class => "inputText"
%p
slig:
=f.text_field :slug, :class => "inputText"
.actions
=f.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -0,0 +1,13 @@
= semantic_form_for [:admin,@newsletter], :remote => true do |form|
.content
= form.inputs do
= form.input :subject, :label => "Sujet :"
.actions
= form.submit "Sauvegarder"

View File

@ -1,7 +0,0 @@
%tr
%td
= newsletter.subject
%td
=link_to public_newsletter_url(newsletter.slug), public_newsletter_path(newsletter.slug)

View File

@ -0,0 +1,14 @@
%tr#newsletter_row.newsletter_row{:id => newsletter.id}
%td=newsletter.subject
%td=l newsletter.send_at if newsletter.send_at?
%td
=form_tag send_test_admin_newsletter_path(newsletter) do
= text_field_tag :email,"", :style => "width:120px;"
= submit_tag "Envoyer un email de test", :class => "lien"
%td= link_to "Envoyer à une sélection d'inscrits", select_recipients_admin_newsletter_path(newsletter), :class => "button"
%td.actions
= link_to i(:"trash-o"), [:admin, newsletter], :confirm => 'Voulez-vous vraiment supprimer cet newsletter ?', :method => :delete, :remote => true
= link_to i(:pencil), edit_admin_newsletter_path(newsletter)

View File

@ -0,0 +1,7 @@
%tr
%td=check_box_tag "confirmed_ids[]", select_line.id,true, :id => "confirmed_ids_"+select_line.id.to_s
%td=select_line.name
%td=select_line.surname
%td=select_line.email

View File

@ -1,16 +1,9 @@
-if @sheets =form_tag send_newsletter_admin_newsletter_path(@newsletter) do
=form_tag send_newsletter_admin_newsletter_path(params[:id]) do #sheets_checkboxs
%table.QI_table_alternate_alt1
.badge.badge-success =render :partial => "select_line", :collection => @studients
=@sheets.size %br
fiches trouvées %br
=submit_tag "Envoyer la newsletter à toutes les adresses de ces fiches", :class => "btn btn-danger" =submit_tag "Envoyer la newsletter à toutes les inscrits"
%table#sheets_checkboxs.table.table-striped %br
-@sheets.sort{|u,v| ((u.person.surname if u.person) || u.corporate).to_s <=>(( v.person.surname if v.person )|| v.corporate).to_s}.each do |sheet| %br
%tr
%td
=check_box_tag "confirmed_sheets[]", sheet.id,true, :id => "confirmed_sheets_"+sheet.id.to_s
%label{:for => "confirmed_sheets_"+sheet.id.to_s, :style => "display:inline;"}=(sheet.person.name if sheet.person and (!sheet.corporate or sheet.corporate == "")) || sheet.corporate

View File

@ -0,0 +1,6 @@
#newsletter_show.QI_background_middle.QI_padding_small
%table
%tr
%td Sujet :
%td=@newsletter.subject

View File

@ -1,4 +1,3 @@
$('#newsletters').html("<%= escape_javascript(render(@newsletters))%>");
close_pane_hover(); close_pane_hover();
$('#newsletters').html("<%= escape_javascript(render(@newsletters))%>");
<%= flash_js %> <%= flash_js %>

View File

@ -0,0 +1,2 @@
$('#newsletter_row_<%=@newsletter.id%>').remove();
<%= flash_js %>

122
app/views/admin/newsletters/edit.html.haml Executable file → Normal file
View File

@ -1,24 +1,33 @@
-if @newsletter.block
#toolbar-text
%div{:style => "margin-right:330px;margin-top:45px;"}
.newsletter_block_edit #toolbar-text
#menu_item_block_edit
#menu_item_block_edit{:style => "margin-right:330px;margin-top:45px;"}
=render :partial => "admin/blocks/block", :locals => {:block => @newsletter.block, :sortable => true}
%br %h2
%br
%br
%br =render :partial => "admin/blocks/block", :locals => {:block => @newsletter.block, :sortable => true}
%br
%br
%br
%br %br
%br %br
%br %br
%br %br
#menu_item_inspector_container %br
%br
%br
%br
%br
%br
%br
#menu_item_inspector_container
@ -26,60 +35,59 @@
#menu_item_informations #menu_item_informations
%h4 =#link_to i(:eye), menu_item_path(:url => page.menu_item.url), :target => "_blank"
Infos sur la newsletter
=link_to "modifier", edit_admin_newsletter_path(@newsletter), :remote => true,:class => "button"
%h4
Infos sur la newsletter
.panel#collapseOne{:style => "display:none;"} .panel#collapseOne{:style => "display:none;"}
=render :partial => "form" =#render :partial => "edit_form"
%h4 éléments %h4 éléments
.panel#collapse2 .panel#collapse2
.block_portlets_sortable#content_types .block_portlets_sortable#content_types
-@newsletter.alloweds_types.each do |slug, name| -@newsletter.block.alloweds_types.each do |slug, name|
.content_type{:id => slug, :"data-type" => slug} .content_type{:id => slug, :"data-type" => slug}
=#i slug.to_s.constantize.picto =#i slug.to_s.constantize.picto
=image_tag("admin/content_type/type_"+slug.to_s+".png", :alt => name, :title => name, :class => "handle") =image_tag("admin/content_type/type_"+slug.to_s+".png", :alt => name, :title => name, :class => "handle")
#collapse3{:style => "display:none;"} #collapse3{:style => "display:none;"}
%h4 Modifier l'élément %h4 Modifier l'élément
.panel .panel
#element_form #element_form
%div#element_form_action %div#element_form_action
%a.move.btn.btn-default.portlet_handle{:href => "#", :data => {:portlet_id => nil}} %a.move.btn.btn-default.portlet_handle{:href => "#", :data => {:portlet_id => nil}}
%span.move_message %span.move_message
=ic :arrows =ic :arrows
&nbsp;
déplacer
%span.cancel_message
=ic :ban
&nbsp;
annuler
=link_to ic(:"trash-o"), "#", :method => :delete, :data => { :confirm => "Etes-vous sûr ?"}, :remote => true, :class => "btn btn-danger trash"
%button.save.btn.btn-primary
=ic(:"floppy-o")
&nbsp; &nbsp;
Sauvegarder déplacer
%span.cancel_message
=ic :ban
&nbsp;
annuler
=link_to ic(:"trash-o"), "#", :method => :delete, :data => { :confirm => "Etes-vous sûr ?"}, :remote => true, :class => "btn btn-danger trash"
%button.save.btn.btn-primary
=ic(:"floppy-o")
&nbsp;
Sauvegarder
-else
=raw @newsletter.content

View File

@ -0,0 +1,3 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600);
<%= flash_js %>

View File

@ -1,26 +0,0 @@
%h1= @newsletter.title
%table.table
%tr
%th Date d'envoi
%th Nombre de messages envoyés
%th Nombre de messages lus
%th Nombre de messages non-lus
-ArchiveNewsletter.where(:newsletter_id => @newsletter.id).all.each do |archive_newsletter|
%tr
%td=l archive_newsletter.created_at
%td=mail_send = archive_newsletter.mail_archives.count()
%td
=mail_read = archive_newsletter.mail_archives.where(:readed => true).count()
-if mail_send > 0
="("
=number_to_percentage (100.0*mail_read)/mail_send, :precision => 1
=")"
%td
=mail_no_read = mail_send - mail_read
-if mail_send > 0
="("
=link_to number_to_percentage((100.0*mail_no_read)/mail_send, :precision => 1), history_detail_admin_newsletter_path(archive_newsletter.id)
=")"

View File

@ -1,45 +0,0 @@
%h1= @newsletter.title
%table.table
%tr
%th Date d'envoi
%th Nombre de messages envoyés
%th Nombre de messages lus
%th Nombre de messages non-lus
%tr
%td=l @archive_newsletter.created_at
%td=mail_send = @archive_newsletter.mail_archives.count()
%td
=mail_read = @archive_newsletter.mail_archives.where(:readed => true).count()
-if mail_send > 0
="("
=number_to_percentage (100.0*mail_read)/mail_send, :precision => 1
=")"
%td
=mail_no_read = mail_send - mail_read
-if mail_send > 0
="("
= number_to_percentage((100.0*mail_no_read)/mail_send, :precision => 1)
=")"
%h3 Liste des mails n'ayant pas reçu la newsletter
%table.table
-@archive_newsletter.mail_archives.where("readed != 1 or readed is null").all.each do |mail_archive|
%tr
%td
=mail_archive.email
%td
%td
=link_to "Fiche adhérent", admin_sheet_path(mail_archive.sheet_id), :remote => true if mail_archive.sheet_id?
%h3 Liste des mails ayant reçu la newsletter
%table.table
-@archive_newsletter.mail_archives.where("readed = 1").all.each do |mail_archive|
%tr
%td
=mail_archive.email
%td
%td
=link_to "Fiche adhérent", admin_sheet_path(mail_archive.sheet_id), :remote => true if mail_archive.sheet_id?

25
app/views/admin/newsletters/index.html.haml Executable file → Normal file
View File

@ -1,22 +1,13 @@
.header
.right= link_to 'Créer une nouvelle newsletter', new_admin_newsletter_path, :class => "button", :remote => true
%h1 Liste des newsletters
.right
=link_to ic(:plus)+" Créer une newsletter", new_admin_newsletter_path, :class => "btn btn-primary", :remote => true
%h1 Newsletters
%table.admin_table#newsletters-list.table.table-striped
.grid_12
%tr
%th Expéditeur
%th Sujet
%th
%th
%tbody#newsletters=render @newsletter %table#newsletters.QI_table_alternate_alt1
=render @newsletters
.pagination
= paginate @newsletter#, :remote => true

11
app/views/admin/newsletters/new.html.haml Executable file → Normal file
View File

@ -1,3 +1,10 @@
%h1 Créer une newsletter .header
%h1 Créer une newsletter
=render :partial => "form"
.grid_12
=render :partial => "form"

View File

@ -1 +1 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",700,900); show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600);

View File

@ -1,63 +1,17 @@
.header
%h1
Newsletter sélectionnée :
=@newsletter.subject
%h1 Envoyer une newsletter %br
%p %p Descendre en bas de page pour envoyer la newsletter.
= link_to i(:"eye"), admin_newsletter_path(@newsletter), :target => "_blank" .grid_12
%h3 Fiches sélectionnées
Newsletter sélectionnée : %a{:href => "#", :onclick => "$('#sheets_selecteds input:checkbox').attr('checked', true);return false"} Tout sélectionner.
=@newsletter.title %a{:href => "#", :onclick => "$('#sheets_selecteds input:checkbox').attr('checked', false);return false"} Tout désélectionner
#sheets_selecteds
=render :partial => "sheets_selecteds"
%ul.nav.nav-tabs#myTab
%li.active
%a{:href => "#send_sheets"}
Envoyer à une selection d'adhérents
%li
%a{:href => "#groups"}
Envoyer à des groupes d'inscrits
.tab-content
.tab-pane.active#send_sheets
=render :partial => "admin/sheets/sheets_search", :locals => {:url => ""}
%p
%a{:href => "#", :onclick => "$('#sheets_selecteds input:checkbox').attr('checked', true);return false"} Tout sélectionner.
%a{:href => "#", :onclick => "$('#sheets_selecteds input:checkbox').attr('checked', false);return false"} Tout désélectionner
#sheets_selecteds
.tab-pane#groups
=form_tag send_newsletter_admin_newsletter_path(:id => params[:id]) do
%table.table.table-striped
-Newsgroup.all.each do |ng|
%tr
%td
=check_box_tag "confirmed_groups[]", ng.id,false, :id => "confirmed_groups_"+ng.id.to_s
%label{:for => "confirmed_groups_"+ng.id.to_s, :style => "display:inline;"}=ng.name
%br
%br
=submit_tag "Envoyer la newsletter à toutes les personnes de ce groupe", :class => "btn btn-danger"
<script>
$('#myTab a').click(function (e) {
e.preventDefault();
$(this).tab('show');
})
</script>
%br
%br %br
%br %br

View File

@ -1 +1,3 @@
$("#sheets_selecteds").html("<%= escape_javascript(render(:partial => "sheets_selecteds"))%>");
$('#sheets_selecteds').html('<%= escape_javascript(render(:partial => "sheets_selecteds")) %>');

View File

@ -1,12 +0,0 @@
=raw @newsletter.content
-if @newsletter.email_from? and @newsletter.email_from != "contact@lepicvert.asso.fr"
%br
%p
%strong=Newsletter::EMAIL_TEXTES[@newsletter.email_from][1]
%br
=Newsletter::EMAIL_TEXTES[@newsletter.email_from][2]
%br
%br
=link_to @newsletter.email_from, "mailto:#{@newsletter.email_from}"

View File

@ -1 +1,4 @@
close_pane_hover();
$('#newsletter_show').replaceWith("<%= escape_javascript(render(:partial => "show"))%>");
<%= flash_js %> <%= flash_js %>

View File

@ -0,0 +1,14 @@
= semantic_form_for [:admin,@registrant], :remote => true do |form|
.content
= form.inputs do
= form.input :enabled, :as => :boolean, :label => "Confirmé"
= form.input :name, :label => "Nom"
= form.input :surname, :label => "Prénom"
= form.input :email, :label => "Email :"
.actions
= form.submit "Sauvegarder"

View File

@ -0,0 +1,9 @@
%tr#registrant_row.registrant_row{:id => registrant.id}
%td=registrant.email
%td.actions
= link_to i(:"trash-o"), [:admin, registrant], :confirm => 'Voulez-vous vraiment supprimer ce dossier, et tout ces articles ?', :method => :delete, :remote => true
= link_to i(:pencil), edit_admin_registrant_path(registrant), :remote => true

View File

@ -0,0 +1,20 @@
#registrant_show.QI_background_middle.QI_padding_small
%table
%tr
%td{:rowspan => 4, :style => "width:270px;text-align:center"}
=image_tag @registrant.image_file.file.large.medium.small.thumb.url if @registrant.image_file
%td{:style => "width:150px;"} Nom :
%td=@registrant.title
%tr
%td Permalink :
%td=@registrant.slug
%tr
%td Statut :
%td=@registrant.enabled ? "Publié" : "Brouillon"
%tr
%td{:style => "vertical-align:top"} Description courte :
%td= simple_format @registrant.description

View File

@ -0,0 +1,4 @@
close_pane_hover();
$('#registrants').html("<%= escape_javascript(render(@registrants))%>");
<%= flash_js %>

View File

@ -0,0 +1,3 @@
$('#registrant_row_<%=@registrant.id%>').remove();
<%= flash_js %>

View File

@ -0,0 +1,3 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600);
<%= flash_js %>

View File

@ -0,0 +1,7 @@
.header
.right= link_to 'Ajouter un inscrit', new_admin_registrant_path, :class => "button", :remote => true
%h1 Liste des inscrits à la newsletter
.grid_12
%table#registrants.QI_table_alternate_alt1
=render @registrants

View File

@ -0,0 +1 @@
show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600);

View File

@ -0,0 +1,4 @@
close_pane_hover();
$('#registrant_row_<%= @registrant.id %>').replaceWith("<%= escape_javascript(render(@registrant))%>");
<%= flash_js %>

View File

@ -3,14 +3,14 @@
-if Reservation.where(:day => day, :pm => false).first -if Reservation.where(:day => day, :pm => false).first
.am.true .am.true
= link_to i(:trash_stroke), admin_reservation_url(:id => Reservation.where(:day => day, :pm => false).first.id, :month => @date.month, :year => @date.year), :remote => true, :method => :delete = link_to i(:"trash-o"), admin_reservation_url(:id => Reservation.where(:day => day, :pm => false).first.id, :month => @date.month, :year => @date.year), :remote => true, :method => :delete
-else -else
.am.false .am.false
= link_to i(:plus), admin_reservations_url(:reservation => {:day => day, :pm => false}, :month => @date.month, :year => @date.year), :remote => true, :method => :post = link_to i(:plus), admin_reservations_url(:reservation => {:day => day, :pm => false}, :month => @date.month, :year => @date.year), :remote => true, :method => :post
-if Reservation.where(:day => day, :pm => true).first -if Reservation.where(:day => day, :pm => true).first
.am.true .am.true
= link_to i(:trash_stroke), admin_reservation_url(:id => Reservation.where(:day => day, :pm => true).first.id, :month => @date.month, :year => @date.year), :remote => true, :method => :delete = link_to i(:"trash-o"), admin_reservation_url(:id => Reservation.where(:day => day, :pm => true).first.id, :month => @date.month, :year => @date.year), :remote => true, :method => :delete
-else -else
.am.false .am.false
= link_to i(:plus), admin_reservations_url(:reservation => {:day => day, :pm => true}, :month => @date.month, :year => @date.year), :remote => true, :method => :post = link_to i(:plus), admin_reservations_url(:reservation => {:day => day, :pm => true}, :month => @date.month, :year => @date.year), :remote => true, :method => :post

View File

@ -1,12 +1,85 @@
<!DOCTYPE html>
<html lang='fr' xml:lang='fr'>
<head>
<title>Ballalama</title>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
<style type="text/css">
body { background-color: white; color:#2d2d2d;font-family: Lucida Grande, arial, sans-serif;}
.content{
width:90%;
margin:auto;
margin-top:10px;
margin-bottom:10px;
-moz-box-shadow: 0px 0px 20px #666;
-webkit-box-shadow: 0px 0px 20px #666;
box-shadow: 0px 0px 20px #666;
padding:20px;
border:1px solid #aaaaa9;
position:relative;
}
#legaly{
text-align:center;
width:90%;
margin:auto;
}
.header{
text-align:center;
width:90%;
margin:auto;
}
.portlet.table_content table {
width: 100%;
border-collapse: collapse;
}
Merci pour votre inscription ! .portlet.table_content table td {
<br /><br /> border: 1px solid black;
En cliquant sur le lien ci-dessous vous confirmerez votre demande d'inscription à la newsletter. }
<br /><br />
.portlet.block_content .two_column .column {
float: left;
width: 50%;
}
.portlet.block_content .two_column .column .block {
padding: 10px;
}
.clear {
clear: both;
}
</style>
</head>
<body>
<div class="header">
<%=link_to image_tag("http://"+HOSTNAME+"/assets/front/logo.png"), "http://"+HOSTNAME %>
</div>
<div class="content">
Bonjour !
<br />
<br />
En cliquant sur le lien ci dessous vous confirmerez votre demande d'inscription à notre newsletter,
qui vous permettra d'être tenu informé de nos actualités.
<br />
<br />
<%=link_to email_validation_public_registrant_url(:id => @registrant.token) , email_validation_public_registrant_url(:id => @registrant.token) %> <%=link_to email_validation_public_registrant_url(:id => @registrant.token) , email_validation_public_registrant_url(:id => @registrant.token) %>
<br /> <br />
<br /> <br />
(Si vous ne pouvez pas cliquer sur ce lien, merci de bien vouloir le copier et le coller dans la barre d'adresse de votre navigateur.) (Si vous ne pouvez pas cliquer sur ce lien, merci de bien vouloir le copier et le coller dans la barre d'adresse de votre navigateur.)
</div>
<br />
<br />
</body>

View File

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang='fr' xml:lang='fr'>
<head>
<title>Ballalama</title>
<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
<style type="text/css">
body { background-color: white; color:#2d2d2d;font-family: Lucida Grande, arial, sans-serif;}
.content{
width:90%;
margin:auto;
margin-top:10px;
margin-bottom:10px;
-moz-box-shadow: 0px 0px 20px #666;
-webkit-box-shadow: 0px 0px 20px #666;
box-shadow: 0px 0px 20px #666;
padding:20px;
border:1px solid #aaaaa9;
position:relative;
}
#legaly{
text-align:center;
width:90%;
margin:auto;
}
.header{
text-align:center;
width:90%;
margin:auto;
}
.portlet.table_content table {
width: 100%;
border-collapse: collapse;
}
.portlet.table_content table td {
border: 1px solid black;
}
.portlet.block_content .two_column .column {
float: left;
width: 50%;
}
.portlet.block_content .two_column .column .block {
padding: 10px;
}
.clear {
clear: both;
}
</style>
</head>
<body>
<div class="header">
<%=link_to image_tag("http://"+HOSTNAME+"/logo2.png"), "http://"+HOSTNAME %>
</div>
<div class="content">
<%= render :object => @newsletter.block, :partial => "public/blocks/block" %>
</div>
<div id="legaly">
Vous recevez cet email car vous êtes abonné à la newsletter du site <a href="http://www.ballalama.com/">Ballalama.com</a>. Si vous ne souhaitez plus recevoir de mail de notre part, merci de cliquer sur ce lien : <%=link_to edit_public_registrant_url(:id => @registrant.token), edit_public_registrant_url(:id => @registrant.token) if @registrant %>
</div>
<br />
<br />
</body>

View File

@ -38,8 +38,8 @@
%li= link_to "Actualités", admin_articles_path %li= link_to "Actualités", admin_articles_path
%li=#link_to "Inscrits", admin_registrants_path() %li=link_to "Inscrits", admin_registrants_path()
%li=#link_to "Newsletters", admin_newsletters_path() %li=link_to "Newsletters", admin_newsletters_path()
%li=link_to "Réservations", admin_reservations_path() %li=link_to "Réservations", admin_reservations_path()
%li=link_to "Menu d'accueil", admin_big_menus_path() %li=link_to "Menu d'accueil", admin_big_menus_path()

View File

@ -1,7 +0,0 @@
.realisation_list
-Realisation.all.each do |realisation|
=link_to public_realisation_path(:id => realisation.slug) do
.realisation
.img{:style => "background-image :url('"+(realisation.default_image.image_file.file.large.medium.url if realisation.default_image).to_s+"');"}
%h3=realisation.title

View File

@ -0,0 +1,3 @@
-@date = Date.today.beginning_of_month
=render :partial => "public/reservations/index_block"

View File

@ -1,13 +0,0 @@
-if @admin
.dynamic
Sous menu avec images
-if input.portlet.blockable_parent and input.portlet.blockable_parent.class.to_s == "Page" and input.portlet.blockable_parent.menu_item
.sub_menu
-input.portlet.blockable_parent.menu_item.children.where(:enabled => true, :visible => true).each do |menu_item|
=link_to menu_item_path(:url => menu_item.url) do
.sub_menu_item{:style => "background-image:url('#{menu_item.image_file.file.large.medium.small.url}')"}
%h3=menu_item.name
.clear

View File

@ -1,106 +0,0 @@
.header
%h1 Faisons connaissance.
%p{:style => "text-align:center;"}
Que vous souhaitiez investir dans une laverie, ou simplement
%br
louer votre bien pour l'implantation de l'une d'elles nous nous ferons
%br
un plaisir de vous guider dans votre projet.
.article.left
.row-fluid
.span4
%h3 Par téléphone
%p 04 76 35 19 77
%h3 Par fax
%p 04 76 35 20 41
.span4
%h3 Par courrier
%p
Lux Laverie
%br
60 rue de la Tour de Criel
%br
38500 Voiron
%br
France
.span4
%h3 Par email
%p
En nous écrivant à
=link_to "contact@ballalama.com", "mailto:contact@ballalama.com"
%br
%br
.row-fluid
.span12
%h3 Formulaire de contact
=form_tag "contact/create", :method => :post do
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Nom*
=text_field_tag :name, "", :placeholder => "Nom", :class => "validate[required]"
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Adresse
=text_field_tag :address, "", :placeholder => "Adresse"
=text_field_tag :address2, "", :placeholder => "Adresse suite"
.row-fluid
.span4
=text_field_tag :cp, "", :placeholder => "Code postal"
.span8
=text_field_tag :city, "", :placeholder => "Ville"
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Téléphone*
=text_field_tag :tel, "", :placeholder => "Téléphone", :class => "validate[required]"
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Mail
=text_field_tag :mail, "", :placeholder => "Mail"
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Lieu du projet
=text_field_tag :place, "", :placeholder => "Lieu du projet"
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Type du projet
.row-fluid
.span3
=radio_button_tag :type, "bungalow"
%label{:style => "display:inline-block;"} Bungalow
&nbsp;&nbsp;
=radio_button_tag :type, "local"
%label{:style => "display:inline-block;"} Local
.span9
Vous possédez le terrain ou le local pour l'installation ?
&nbsp;&nbsp;&nbsp;&nbsp;
=radio_button_tag :owner, "oui"
%label{:style => "display:inline-block;"} oui
&nbsp;&nbsp;
=radio_button_tag :owner, "non"
%label{:style => "display:inline-block;"} non
%p{:style => "margin-top:0.5em;margin-bottom:0px;"}
%label Message
=text_area_tag :message, "", :placeholder => "Message", :style => "height:10em;"
%p Les champs marqués d'un * sont requis.
=submit_tag "Envoyer", :style => "display:block;text-align:center;margin:auto;color:white;background:#9ab354;border-radius:1em; padding:0.5em 1em; font-size:1em; border:0px;"
:javascript
$("form").validationEngine();
%p Un commercial pourra au besoin vous rencontrer sur toute la France.

View File

@ -63,28 +63,6 @@
=yield :corps =yield :corps
-if params[:url] == "contact"
.center
.row
.columns.span_4
%p
%strong Siège social
%p
Zone Actipôle, 4/6 boulevard Beaubourg
%br
77183 CROISSY BEAUBOURG
%p
Tél. 0(33) 1 60 17 91 76
%br
Fax. 0(33) 1 64 11 22 03
%p
email :
=link_to "signa@bouvier-signa.com", "mailto:signa@bouvier-signa.com"
.columns.span_8
.contact_form
#form=render :partial => "public/contacts/form"

View File

@ -1,4 +0,0 @@
-@registrant = @registrant || Registrant.new
=form_for [:public, @registrant], :remote => true do |f|
.email=f.text_field :email, :placeholder => "email"
=f.submit "M'inscrire", :class => "btn"

View File

@ -1,14 +0,0 @@
#registrant_large_form
-@registrant = @registrant || Registrant.new
.center
=semantic_form_for [:public, @registrant], :remote => true do |f|
=f.inputs do
=f.input :email, :label => "Mon adresse email :", :placeholder => "email"
=f.submit "M'inscrire", :class => "btn"
&nbsp;&nbsp;
=link_to "Annuler", "#", :onclick => "$('#newsletter_large_place').html('');return false;", :class => "cancel"
=hidden_field_tag :large, params[:large]

View File

@ -1,7 +0,0 @@
#newsletter_large
.header
.center
%h2 Je m'abonne à la newsletter de One Voice
%p Je souhaite être tenu au courant des campagnes de One Voice et participer à son combat. Je minscris à la newsletter.
=render :partial => "public/registrants/large_form"

View File

@ -1,6 +0,0 @@
.center
%p
Merci pour votre inscription. Vous allez recevoir un mail avec un lien pour la confirmer.
%p
=link_to "Fermer", "#", :onclick => "$('#newsletter_large_place').html('');return false;", :class => "cancel"

View File

@ -1,8 +1 @@
$(".newsletter_form").replaceWith("Merci pour votre inscription ! Vous allez recevoir un mail avec un lien pour confirmer celle-ci.");
<% if params[:large] %>
$("#registrant_large_form").html('<%= escape_javascript(render(:partial => "thanks"))%>');
<% else %>
$("#newsletter_form").html('Merci pour votre inscription. Vous allez recevoir un mail avec un lien pour la confirmer.');
<% end %>

View File

@ -1 +0,0 @@
=render :partial => "new_large"

View File

@ -1,9 +1 @@
<% if params[:open] %> $(".newsletter_form").replaceWith("<%= escape_javascript(render(:partial => "portlets/dynamic_contents/newsletter_form")) %>");
$("#newsletter_large_place").html('<%= escape_javascript(render(:partial => "new_large"))%>');
<% elsif params[:large] %>
$("#registrant_large_form").html('<%= escape_javascript(render(:partial => "large_form"))%>');
<% else %>
$("#newsletter_form").html('<%= escape_javascript(render(:partial => "form"))%>');
<% end %>

View File

@ -2,4 +2,4 @@
=link_to "Actualités", public_articles_path(), :class => "link" =link_to "Actualités", public_articles_path(), :class => "link"
-MenuItem.where(:parent_id => nil, :menu_id => Menu.first.id).order(:position).each do |menu_item| -MenuItem.where(:parent_id => nil, :menu_id => Menu.first.id).order(:position).each do |menu_item|
=menu_item_link(menu_item) =menu_item_link(menu_item)
=link_to "Contact", "/contact.html", :class => "link"

View File

@ -32,6 +32,7 @@ fr:
short: "%e %b" short: "%e %b"
long: "%e %B %Y" long: "%e %B %Y"
only_month: "%B %Y" only_month: "%B %Y"
month: "%B %Y"
day_names: day_names:
- dimanche - dimanche
- lundi - lundi

View File

@ -1,26 +1,6 @@
Rails.application.routes.draw do Rails.application.routes.draw do
get "/realisations/:id.html" => "public/realisations#show", :as => :public_realisation
get "fr/newsletters/:id.html" => "public/newsletters#show", :as => :public_newsletter
get "/fr/assurance-vie.html"=> "public/home#assurance"
get "/fr/jmc/le-label-one-voice/decouvrez-les-produits-labellises.html" => "public/label_produits#index"
get "label" => "public/label_produits#index", :as => :label
get "fr/videos/:slug" => "public/video_files#show", :as => :public_video_file
get "petition-chine" => "public/petitions#chine"
get "fr/petitions/animaux-en-chine-a-laide.html" => "public/petitions#chine"
get "petition-produits-entretien" => "public/petitions#entretien"
get "fr/petitions/interdiction-des-tests-sur-animaux-pour-les-produits-dentretien.html" => "public/petitions#entretien"
get "fr/faire-un-don.html", :to => redirect("/faire-un-don")
get "fr/faire-un-don", :to => redirect("/faire-un-don")
get "fr/presse" => "public/press_releases#index", :as => :public_press_releases
get "fr/presse/:id" => "public/press_releases#show", :as => :public_press_release
namespace :admin do namespace :admin do
resources :realisation_images do resources :realisation_images do
collection do collection do
@ -71,8 +51,15 @@ Rails.application.routes.draw do
get "sitemap.:f" => "public/sitemap#sitemap" get "sitemap.:f" => "public/sitemap#sitemap"
namespace :public do namespace :public do
resources :registrants do
member do
get :email_validation
end
end
resources :newsletter
resources :reservations
resources :contacts resources :contacts
@ -192,6 +179,22 @@ Rails.application.routes.draw do
namespace :admin do namespace :admin do
resources :registrants do
collection do
get :import
end
end
resources :newsletters do
member do
post :send_test
get :select_recipients
post :select_recipients
post:send_newsletter
end
end
resources :reservations resources :reservations
resources :big_menus do resources :big_menus do
member do member do

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 49 KiB