diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 778a7ef..8cdf6cb 100755
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -108,13 +108,22 @@ class ApplicationController < ActionController::Base
def prepare_compose_buttons
@buttons = []
- @buttons << {:text => 'send',:image => 'tick.png'}
- @buttons << {:text => 'save_as_draft',:image => 'tick.png'}
+ @buttons << {:text => 'send',:scope=>:compose,:image => 'email.png'}
+ @buttons << {:text => 'save_as_draft',:scope=>:compose,:image => 'save.png'}
end
- ##################################### protected section ########################################
-
- protected
+ def create_message_with_params
+ @message = Message.new
+ if params[:message]
+ @message.update_attributes(params[:message])
+ end
+ files = Dir.glob(File.join($defaults["msg_upload_dir"],@current_user.username + "*"))
+ @attachments = []
+ files.each do |f|
+ @attachments << {:name => File.basename(f).gsub!(/#{@current_user.username}_/,"") , :size => File.stat(f).size }
+ end
+ logger.custom('a',@attachments.inspect)
+ end
def get_system_folders
@drafts_folder = @current_user.folders.drafts.first
@@ -128,8 +137,8 @@ class ApplicationController < ActionController::Base
private
def plugins_configuration
- WillPaginate::ViewHelpers.pagination_options[:previous_label] = t(:previous_page)
- WillPaginate::ViewHelpers.pagination_options[:next_label] = t(:next_page)
+ WillPaginate::ViewHelpers.pagination_options[:previous_label] = t(:previous_page,:scope=>:common)
+ WillPaginate::ViewHelpers.pagination_options[:next_label] = t(:next_page,:scope=>:common)
end
end
diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb
index 9c2e149..5ade327 100755
--- a/app/controllers/contacts_controller.rb
+++ b/app/controllers/contacts_controller.rb
@@ -4,6 +4,8 @@ class ContactsController < ApplicationController
before_filter :get_contacts, :only => [:index]
+ before_filter :prepare_ops_buttons, :only => [:index]
+
theme :theme_resolver
def index
@@ -11,14 +13,18 @@ class ContactsController < ApplicationController
end
def ops
+ if params["create_new"]
+ redirect_to(new_contact_path)
+ return
+ end
if !params["cids"]
flash[:warning] = t(:no_selected,:scope=>:contact)
else
- if params["delete"]
+ if params["delete_selected"]
params["cids"].each do |id|
@current_user.contacts.find_by_id(id).destroy
end
- elsif params["compose"]
+ elsif params["compose_to_selected"]
redirect_to :controller=>'messages',:action=>'compose',:cids=>params["cids"]
return
end
@@ -61,6 +67,17 @@ class ContactsController < ApplicationController
end
end
+ ####################################### protected section ################################
+
+ protected
+
+ def prepare_ops_buttons
+ @buttons = []
+ @buttons << {:text => 'compose_to_selected',:scope=> 'contact', :image => 'email.png'}
+ @buttons << {:text => 'create_new',:scope=> 'contact', :image => 'plus.png'}
+ @buttons << {:text => 'delete_selected',:scope=>'contact',:image => 'minus.png'}
+ end
+
####################################### private section ##################################
private
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
new file mode 100755
index 0000000..5175242
--- /dev/null
+++ b/app/controllers/events_controller.rb
@@ -0,0 +1,2 @@
+class EventsController < ApplicationController
+end
diff --git a/app/controllers/folders_controller.rb b/app/controllers/folders_controller.rb
index f183acc..17984ab 100755
--- a/app/controllers/folders_controller.rb
+++ b/app/controllers/folders_controller.rb
@@ -17,8 +17,8 @@ class FoldersController < ApplicationController
def index
@buttons = []
- @buttons << {:text => 'show_hide',:image => 'tick.png'}
- @buttons << {:text => 'refresh',:image => 'tick.png'}
+ @buttons << {:text => 'show_hide',:scope=>'folder',:image => 'flag.png'}
+ @buttons << {:text => 'refresh',:scope=>'folder',:image => 'refresh.png'}
end
def create
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index a03be34..bb1ca64 100755
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -12,15 +12,13 @@ class MessagesController < ApplicationController
include MessagesHelper
before_filter :check_current_user ,:selected_folder,:get_current_folders
-
before_filter :open_imap_session, :select_imap_folder
-
before_filter :prepare_compose_buttons, :only => [:compose]
-
- #before_filter :mail_defaults, :only => [:sendout_or_save]
-
before_filter :get_system_folders, :only => [:index]
-
+ before_filter :create_message_with_params, :only => [:compose]
+ before_filter :prepare_multi1_buttons, :only => [:index,:show]
+ before_filter :prepare_multi2_buttons, :only => [:index]
+ before_filter :prepare_multi3_buttons, :only => [:show]
after_filter :close_imap_session
theme :theme_resolver
@@ -67,10 +65,7 @@ class MessagesController < ApplicationController
end
def compose
- @message = Message.new
- if params[:message]
- @message = update_attributes(params[:message])
- end
+ #before_filter
end
def show
@@ -89,7 +84,7 @@ class MessagesController < ApplicationController
@to = mail.To.addrs
@cc = mail.Cc
@bcc = mail.Bcc
- @subject = mail.Subject
+ #@subject = mail.Subject
@date = mail.date
if mail.multipart? == true
@@ -118,7 +113,7 @@ class MessagesController < ApplicationController
part.parent_id = @message.uid
if part.isText?
@text_part = part.decoded_and_charseted
- elsif part.isImage?
+ elsif part.isImage? and @current_user.prefs.msg_image_view_as.to_sym == :thumbnail
@images << part
elsif part.isHtml?
@html_part = part.decoded_and_charseted
@@ -136,8 +131,18 @@ class MessagesController < ApplicationController
else
@body = mail.decoded_and_charseted
end
+
if @body.nil?
@body = t(:no_body,:scope=>:message)
+ else
+ if @body=~/cid:([\w@\.]+)/
+ attachments = mail.attachments
+ if not attachments.size.zero?
+ for idx in 0..attachments.size - 1
+ @body.gsub!(/cid:#{attachments[idx].cid}/,messages_attachment_download_path(message.uid,idx))
+ end
+ end
+ end
end
render 'html_body',:layout => 'html_body'
end
@@ -157,8 +162,28 @@ class MessagesController < ApplicationController
render :text => a.decoded
end
+
############################################# protected section ##########################################
protected
+ def prepare_multi2_buttons
+ @multi2_buttons = []
+ @multi2_buttons << {:text => 'delete',:scope=>:message,:image => 'trash.png'}
+ @multi2_buttons << {:text => 'set_unread',:scope=>:message,:image => 'unseen.png'}
+ @multi2_buttons << {:text => 'set_read',:scope=>:message,:image => 'seen.png'}
+ end
+
+ def prepare_multi1_buttons
+ @multi1_buttons = []
+ @multi1_buttons << {:text => 'copy',:scope=>:message,:image => 'copy.png'}
+ @multi1_buttons << {:text => 'move',:scope=>:message,:image => 'move.png'}
+ end
+
+ def prepare_multi3_buttons
+ @multi3_buttons = []
+ @multi3_buttons << {:text => 'show_header',:scope=>:show,:image => 'zoom.png'}
+ @multi3_buttons << {:text => 'delete',:scope=>:show,:image => 'trash.png'}
+ @multi3_buttons << {:text => 'reply',:scope=>:show,:image => 'reply.png'}
+ end
end
diff --git a/app/controllers/messages_ops_controller.rb b/app/controllers/messages_ops_controller.rb
index 112f3f0..181001c 100755
--- a/app/controllers/messages_ops_controller.rb
+++ b/app/controllers/messages_ops_controller.rb
@@ -14,6 +14,7 @@ class MessagesOpsController < ApplicationController
before_filter :open_imap_session, :select_imap_folder
before_filter :prepare_compose_buttons
before_filter :get_system_folders, :only => [:sendout_or_save,:single,:multi]
+ before_filter :create_message_with_params , :only => [:sendout_or_save]
after_filter :close_imap_session
theme :theme_resolver
@@ -26,6 +27,10 @@ class MessagesOpsController < ApplicationController
return
elsif params[:trash]
trash
+ elsif params[:move]
+ move
+ elsif params[:copy]
+ copy
end
redirect_to :controller => 'messages', :action => 'index'
end
@@ -40,7 +45,7 @@ class MessagesOpsController < ApplicationController
set_unread
elsif params[:set_read]
set_read
- elsif params[:trash]
+ elsif params[:delete]
trash
elsif params[:copy]
copy
@@ -53,6 +58,9 @@ class MessagesOpsController < ApplicationController
redirect_to :controller => 'messages', :action => 'index'
end
+ ############################################### ################################################
+
+
def set_unread
params["uids"].each do |uid|
@mailbox.set_unread(uid)
@@ -115,26 +123,76 @@ class MessagesOpsController < ApplicationController
end
end
+ def upload
+ name = params[:upload][:datafile].original_filename
+ upload_dir = $defaults["msg_upload_dir"]
+ path = File.join(upload_dir, @current_user.username + "_" + name)
+ File.open(path, "wb") { |f| f.write(params[:upload][:datafile].read) }
+ create_message_with_params
+ render 'messages/compose'
+ end
+
+# Files uploaded from Internet Explorer:
+#
+#Internet Explorer includes the entire path of a file in the filename sent, so the original_filename routine will return something like:
+#
+#C:\Documents and Files\user_name\Pictures\My File.jpg
+#
+#instead of just:
+#
+#My File.jpg
+#
+#This is easily handled by File.basename, which strips out everything before the filename.
+#
+#def sanitize_filename(file_name)
+# # get only the filename, not the whole path (from IE)
+# just_filename = File.basename(file_name)
+# # replace all none alphanumeric, underscore or perioids
+# # with underscore
+# just_filename.sub(/[^\w\.\-]/,'_')
+#end
+#
+#Deleting an existing File:
+#
+#If you want to delete any existing file then its simple and need to write following code:
+#
+# def cleanup
+# File.delete("#{RAILS_ROOT}/dirname/#{@filename}")
+# if File.exist?("#{RAILS_ROOT}/dirname/#{@filename}")
+# end
+
+
############################################### sendout_or_save ############################
def sendout_or_save
+ if params[:delete_marked] and params[:files]
+ params[:files].each do |filename|
+ path = File.join(Rails.root,$defaults["msg_upload_dir"],@current_user.username + "_" +filename)
+ File.delete(path) if File.exist?(path)
+ end
+ create_message_with_params
+ render 'messages/compose'
+ return
+ end
+
mail = Mail.new
mail.subject = params[:message][:subject]
mail.from = @current_user.full_address
mail.to = params[:message][:to_addr]
mail.body = params[:message][:body]
- #mail.add_file :filename => 'somefile.png', :content => File.read('/tmp/script_monitor_20110810143216.log')
+
+ attachments = Dir.glob(File.join($defaults["msg_upload_dir"],@current_user.username + "*"))
+ logger.custom('attach',attachments.inspect)
+ attachments.each do |a|
+ mail.add_file :filename => File.basename(a.gsub(/#{@current_user.username}_/,"")), :content => File.read(a)
+ end
if params[:send]
smtp_server = @current_user.servers.primary_for_smtp
if smtp_server.nil?
flash[:error] = t(:not_configured_smtp,:scope => :compose)
- @message = Message.new
- if params[:message]
- @message = update_attributes(params[:message])
- end
render 'messages/compose'
return
end
@@ -157,6 +215,12 @@ class MessagesOpsController < ApplicationController
redirect_to :controller => 'messages', :action => 'index'
return
end
+
+ attachments.each do |filename|
+ path = File.join(Rails.root,filename)
+ File.delete(path) if File.exist?(path)
+ end
+
flash[:notice] = t(:was_sent,:scope => :compose)
redirect_to :controller => 'messages', :action => 'index'
elsif params[:save_as_draft]
@@ -194,6 +258,7 @@ class MessagesOpsController < ApplicationController
else
@message.body = mail.decoded_and_charseted
end
+ @attachments = []
render 'messages/compose'
end
@@ -201,15 +266,16 @@ class MessagesOpsController < ApplicationController
old_message = @current_user.messages.find(params[:uids].first)
@message = Message.new
@message.to_addr = address_formatter(old_message.from_addr,:raw)
- @message.subject = old_message.subject
+ @message.subject = t(:reply_string,:scope=>:show) + old_message.subject
imap_message = @mailbox.fetch_body(old_message.uid)
mail = Mail.new(imap_message)
if mail.multipart?
@message.body = mail.text_part.decoded_and_charseted
else
- @message.body = mail.decoded_and_charseted
+ @message.body = mail.decoded_and_charseted.gsub(/<\/?[^>]*>/, "")
end
+ @attachments = []
render 'messages/compose'
end
diff --git a/app/controllers/prefs_controller.rb b/app/controllers/prefs_controller.rb
index d1bfc38..cdb0b6d 100755
--- a/app/controllers/prefs_controller.rb
+++ b/app/controllers/prefs_controller.rb
@@ -12,6 +12,7 @@ class PrefsController < ApplicationController
if params[:prefs]
@prefs.update_attributes(params[:prefs])
end
+ flash[:notice] = t(:were_saved,:scope=>:prefs)
redirect_to :action => 'look'
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 01ac0a2..0034dd7 100755
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -92,6 +92,67 @@ def form_button(text,image)
html << ""
end
+def single_action(text,scope,image)
+ html = ""
+ html << "
"
+ html << "
"
+end
+
+def single_action_onclick(text,scope,image,onclick)
+ html = ""
+ html << "
"
+ html << "
"
+end
+
+def group_action(buttons)
+ html = ""
+ html << "
"
+ buttons.each do |b|
+ html << " "
+ end
+ html << "
"
+end
+
+def group_action_text(buttons,text)
+ html = ""
+ html << "
"
+ buttons.each do |b|
+ html << " "
+ end
+ html << text
+ html << "
"
+end
+
def form_buttons(buttons)
html = ""
html << "
"
@@ -150,6 +211,19 @@ def select_field_table(object,field,table_choices,choice,blank)
html << "
"
end
+def select_field_table_t(object,field,table_choices,choice,blank)
+ model_name = eval(object.class.model_name)
+ html = ""
+ html << "
"
+ html << ""
+ t = []
+ table_choices.each do |c|
+ t << [t(c.to_sym,:scope=>:prefs),c.to_s]
+ end
+ html << select(object.class.to_s.downcase, field, options_for_select(t,choice), {:include_blank => blank})
+ html << "
"
+end
+
#def form_simle_field(name,label,value)
# html = ""
# html << "
diff --git a/themes/olive/views/folders/_create.html.erb b/themes/olive/views/folders/_create.html.erb
index 627455c..dc9009c 100755
--- a/themes/olive/views/folders/_create.html.erb
+++ b/themes/olive/views/folders/_create.html.erb
@@ -3,5 +3,5 @@
<%= raw select_for_folders("folder","parent",@folders,t(:parent,:scope=>:folder),"",true) %>
<%= raw simple_input_field("folder","target",t(:to_create,:scope=>:folder),"") %>
-<%= raw form_button('create','tick.png') %>
+<%= raw single_action('create','common','plus.png') %>
diff --git a/themes/olive/views/folders/_delete.html.erb b/themes/olive/views/folders/_delete.html.erb
index a8fe90e..85b5c32 100755
--- a/themes/olive/views/folders/_delete.html.erb
+++ b/themes/olive/views/folders/_delete.html.erb
@@ -1,6 +1,6 @@
<%= form_tag(folders_delete_path) %>
<%= raw select_for_folders("folder","delete",@folders,t(:to_delete,:scope=>:folder),"",true) %>
-<%= raw form_button('delete','cross.png') %>
+<%= raw single_action('delete','common','minus.png') %>
diff --git a/themes/olive/views/folders/_list.html.erb b/themes/olive/views/folders/_list.html.erb
index 459daad..8b7d87e 100755
--- a/themes/olive/views/folders/_list.html.erb
+++ b/themes/olive/views/folders/_list.html.erb
@@ -15,9 +15,6 @@
<% end %>
- <%= raw form_button_value('logout','tick.png',user_logout_path) %>
+ <%= raw single_action_onclick('logout','common','power.png',user_logout_path) %>
<%= raw form_field(@message,"to_addr",nil,"joe@domain.com"+', '+t(:not_contain_at,:scope=>:compose),@message.to_addr) %>
<% if not @reply.nil? %>
@@ -6,5 +7,7 @@
<%= raw form_field(@message,"subject",nil,t(:subject_of_the_message,:scope=>:compose),@message.subject) %>
<%= raw area_field(@message,"body",nil,t(:write_your_message_here,:scope=>:compose),@message.body,80,20) %>