From 8868a841231d381b2c1c5e179172b0f56eff41b2 Mon Sep 17 00:00:00 2001 From: Wojciech Todryk Date: Mon, 5 Sep 2011 19:08:22 +0200 Subject: [PATCH] devel --- app/controllers/application_controller.rb | 27 +- app/controllers/internal_controller.rb | 28 +- app/controllers/messages_controller.rb | 294 +----------------- app/controllers/messages_ops_controller.rb | 245 +++++++++++++++ app/helpers/messages_ops_helper.rb | 2 + app/models/attachment.rb | 192 ------------ arts/favicon.png | Bin arts/favicon.xcf | Bin config/defaults.yml | 2 +- config/initializers/show_exceptions.rb | 16 + config/locales/pl.yml | 21 +- config/routes.rb | 18 +- public/favicon.ico | Bin .../messages_ops_controller_test.rb | 8 + test/unit/helpers/messages_ops_helper_test.rb | 4 + .../olive/views/messages/_attachment.html.erb | 4 +- .../{_ops.html.erb => _multi_ops.html.erb} | 0 ..._msg_ops.html.erb => _single_ops.html.erb} | 0 themes/olive/views/messages/compose.html.erb | 2 +- themes/olive/views/messages/index.html.erb | 4 +- themes/olive/views/messages/show.html.erb | 4 +- 21 files changed, 358 insertions(+), 513 deletions(-) create mode 100755 app/controllers/messages_ops_controller.rb create mode 100755 app/helpers/messages_ops_helper.rb delete mode 100755 app/models/attachment.rb mode change 100644 => 100755 arts/favicon.png mode change 100644 => 100755 arts/favicon.xcf create mode 100755 config/initializers/show_exceptions.rb mode change 100644 => 100755 public/favicon.ico create mode 100755 test/functional/messages_ops_controller_test.rb create mode 100755 test/unit/helpers/messages_ops_helper_test.rb rename themes/olive/views/messages/{_ops.html.erb => _multi_ops.html.erb} (100%) rename themes/olive/views/messages/{_msg_ops.html.erb => _single_ops.html.erb} (100%) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 97b6f01..778a7ef 100755 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -8,11 +8,11 @@ class ApplicationController < ActionController::Base before_filter :plugins_configuration - rescue_from ActiveRecord::RecordNotFound do - logger.custom('record_not_found','exc') - reset_session - redirect_to :controller=>'user', :action => 'login' - end +# rescue_from ActiveRecord::RecordNotFound do +# logger.custom('record_not_found','exc') +# reset_session +# redirect_to :controller=>'user', :action => 'login' +# end def load_defaults $defaults ||= YAML::load(File.open(Rails.root.join('config','defaults.yml'))) @@ -106,6 +106,23 @@ class ApplicationController < ActionController::Base end end + def prepare_compose_buttons + @buttons = [] + @buttons << {:text => 'send',:image => 'tick.png'} + @buttons << {:text => 'save_as_draft',:image => 'tick.png'} + end + + ##################################### protected section ######################################## + + protected + + def get_system_folders + @drafts_folder = @current_user.folders.drafts.first + @sent_folder = @current_user.folders.sent.first + @inbox_folder = @current_user.folders.inbox.first + @trash_folder = @current_user.folders.trash.first + end + ##################################### private section ########################################## private diff --git a/app/controllers/internal_controller.rb b/app/controllers/internal_controller.rb index 076b05d..c90dc45 100755 --- a/app/controllers/internal_controller.rb +++ b/app/controllers/internal_controller.rb @@ -3,24 +3,32 @@ class InternalController < ApplicationController theme :theme_resolver layout "simple" - def error + ERRORS = [ + :internal_server_error, + :not_found, + :unprocessable_entity + ].freeze + ERRORS.each do |e| + define_method e do + @title = t(e,:scope=>:internal) + @error = t(e,:scope=>:internal) + render 'error' + end + end + + def error + @title = t(:unspecified_error,:scope=>:internal) + @error = params[:error] || t(:unspecified_error,:scope=>:internal) end def imaperror - @title = t(:imap_error) - @error = params[:error] || t(:unspecified_error) + @title = t(:imap_error,:scope => :internal) + @error = params[:error] || t(:unspecified_error, :scope => :internal) logger.error "!!! InternalControllerImapError: " + @error render 'error' end - def page_not_found - @title = t(:page_not_found) - @error = t(:page_not_found) - logger.error "!!! InternalControllerError: " + @error - render 'error' - end - def loginfailure reset_session flash[:error] = t(:login_failure,:scope=>:user) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index f65faee..a03be34 100755 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -15,11 +15,11 @@ class MessagesController < ApplicationController before_filter :open_imap_session, :select_imap_folder - before_filter :prepare_buttons, :only => [:compose,:reply,:edit,:sendout_or_save] + before_filter :prepare_compose_buttons, :only => [:compose] #before_filter :mail_defaults, :only => [:sendout_or_save] - before_filter :get_system_folders, :only => [:index,:ops,:sendout_or_save] + before_filter :get_system_folders, :only => [:index] after_filter :close_imap_session @@ -73,195 +73,6 @@ class MessagesController < ApplicationController end end - def reply - - attachments = [] - body = '' - - old_message = @current_user.messages.find(params[:id]) - @message = Message.new - @message.to_addr = address_formatter(old_message.from_addr,:raw) - @message.subject = old_message.subject - @reply = true - imap_message = @mailbox.fetch_body(old_message.uid) - mail = Mail.new(imap_message) - if mail.multipart? - Attachment.fromMultiParts(attachments,old_message.id,mail.parts) - else - Attachment.fromSinglePart(attachments,old_message.id,mail) - end - - for idx in 0..attachments.size-1 - if attachments[idx].isText? - body << attachments[idx].decode_and_charset - break - end - end - @message.body = body - render 'compose' - end - - def edit - - attachments = [] - body = '' - - old_message = @current_user.messages.find(params[:id]) - @message = Message.new - @message.to_addr = address_formatter(old_message.to_addr,:raw) - @message.subject = old_message.subject - imap_message = @mailbox.fetch_body(old_message.uid) - mail = Mail.new(imap_message) - if mail.multipart? - Attachment.fromMultiParts(attachments,old_message.id,mail.parts) - else - Attachment.fromSinglePart(attachments,old_message.id,mail) - end - - for idx in 0..attachments.size-1 - if attachments[idx].isText? - body << attachments[idx].decode_and_charset - break - end - end - @message.body = body - render 'compose' - end - - def sendout_or_save - - 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') - - 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 'compose' - return - end - - begin - - set_mail_defaults(@current_user,smtp_server,session) - #logger.custom('mail',Mail.delivery_method.inspect) - - @response = mail.deliver! - #logger.custom('response',@response.inspect) - - if @sent_folder.nil? - raise t(:not_configured_sent,:scope=>:compose) - end - @mailbox.append(@sent_folder.full_name,mail.to_s,[:Seen]) - - rescue Exception => e - flash[:error] = "#{t(:imap_error)} (#{e.to_s})" - redirect_to :action => 'index' - return - end - flash[:notice] = t(:was_sent,:scope => :compose) - redirect_to :action => 'index' - elsif params[:save_as_draft] - begin - if @drafts_folder.nil? - raise t(:not_configured_drafts,:scope=>:compose) - end - # TODO delete old one if was edit - @mailbox.append(@drafts_folder.full_name,mail.to_s,[:Seen]) - rescue Exception => e - flash[:error] = "#{t(:imap_error)} (#{e.to_s})" - redirect_to :action => 'index' - return - end - flash[:notice] = t(:was_saved,:scope => :compose) - redirect_to :action => 'index' - end - end - - def msgops - begin - if !params["uids"] - flash[:warning] = t(:no_selected,:scope=>:message) - elsif params["reply"] - redirect_to :action => 'reply', :id => params[:id] - return - end - rescue Exception => e - flash[:error] = "#{t(:imap_error)} (#{e.to_s})" - end - redirect_to :action => 'show', :id => params[:id] - end - - def ops - begin - if !params["uids"] - flash[:warning] = t(:no_selected,:scope=>:message) - elsif params["set_unread"] - params["uids"].each do |uid| - @mailbox.set_unread(uid) - @current_user.messages.find_by_uid(uid).update_attributes(:unseen => 1) - end - elsif params["set_read"] - params["uids"].each do |uid| - @mailbox.set_read(uid) - @current_user.messages.find_by_uid(uid).update_attributes(:unseen => 0) - end - elsif params["trash"] - if not @trash_folder.nil? - params["uids"].each do |uid| - @mailbox.move_message(uid,@trash_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - message.change_folder(@trash_folder) - end - @mailbox.expunge - @trash_folder.update_stats - @current_folder.update_stats - end - elsif params["copy"] - if params[:folder][:target].empty? - flash[:warning] = t(:no_selected,:scope=>:folder) - else - dest_folder = @current_user.folders.find(params[:folder][:target]) - params["uids"].each do |uid| - @mailbox.copy_message(uid,dest_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - new_message = message.clone - new_message.folder_id = dest_folder.id - new_message.save - end - dest_folder.update_stats - @current_folder.update_stats - end - elsif params["move"] - if params[:folder][:target].empty? - flash[:warning] = t(:no_selected,:scope=>:folder) - else - dest_folder = @current_user.folders.find(params[:folder][:target]) - params["uids"].each do |uid| - @mailbox.move_message(uid,dest_folder.full_name) - message = @current_folder.messages.find_by_uid(uid) - message.change_folder(dest_folder) - end - @mailbox.expunge - dest_folder.update_stats - @current_folder.update_stats - end - end - rescue Exception => e - flash[:error] = "#{t(:imap_error)} (#{e.to_s})" - end - redirect_to :action => 'index' - end - def show @images = [] @attachments = [] @@ -315,25 +126,6 @@ class MessagesController < ApplicationController @attachments << part end end - - - #@attachments = [] - #logger.custom('after_parse',Time.now) - #if mail.multipart? - # Attachment.fromMultiParts(@attachments,@message.id,@mail.parts) - #else - # Attachment.fromSinglePart(@attachments,@message.id,@mail) -# end - #logger.custom('attach',Time.now) - -# for idx in 0..@attachments.size-1 -# @attachments[idx].idx = idx -# @attachments[idx].isText? ? @render_as_text << @attachments[idx].decode_and_charset : @render_as_text -# @attachments[idx].isHtml? ? @render_as_html_idx ||= idx : @render_as_html_idx -# @attachments[idx].isImageAndNotCid? ? @images << @attachments[idx] : @images -# end - #logger.custom('done',Time.now) - #@attachments = @mail.attachments end def html_body @@ -350,85 +142,23 @@ class MessagesController < ApplicationController render 'html_body',:layout => 'html_body' end - def body - attachments = [] - cids = [] - message = @current_user.messages.find(params[:id]) - mail = Mail.new(@mailbox.fetch_body(message.uid)) - - if mail.multipart? - Attachment.fromMultiParts(attachments,message.id,mail.parts) - else - Attachment.fromSinglePart(attachments,message.id,mail) - end - html = attachments[params[:idx].to_i] - - @body = html.decode_and_charset - - for idx in 0..attachments.size-1 - if not attachments[idx].cid.size.zero? - @body.gsub!(/cid:#{attachments[idx].cid}/,messages_attachment_download_path(message.uid,idx)) - end - end - - render 'html_view',:layout => 'html_view' - end - def attachment - attachments = [] + attachments = [] message = @current_user.messages.find(params[:id]) mail = Mail.new(@mailbox.fetch_body(message.uid)) - if mail.multipart? - Attachment.fromMultiParts(attachments,message.id,mail.parts) + if mail.multipart? == true + attachments = mail.attachments else - Attachment.fromSinglePart(attachments,message.id,mail) - end - a = attachments[params[:idx].to_i] - headers['Content-type'] = a.type - headers['Content-Disposition'] = %(attachment; filename="#{a.name}") - render :text => a.decode + attachments << Mail::Part.new(mail) + end + a = attachments[params[:idx].to_i] + headers['Content-type'] = a.main_type + "/" + a.sub_type + headers['Content-Disposition'] = %(attachment; filename="#{a.filename}") + render :text => a.decoded end ############################################# protected section ########################################## - def prepare_buttons - @buttons = [] - @buttons << {:text => 'send',:image => 'tick.png'} - @buttons << {:text => 'save_as_draft',:image => 'tick.png'} - end - - def set_mail_defaults(user,server,session) - if server.auth.nil? or server.auth == 'none' - password = nil - authentication = nil - enable_starttls_auto = nil - openssl_verify_mode = nil - user_name = nil - else - password = user.get_cached_password(session) - authentication = server.auth - enable_starttls_auto = server.use_tls - openssl_verify_mode = OpenSSL::SSL::VERIFY_NONE - user_name = user.full_address - end - Mail.defaults do - delivery_method :smtp, {:address => server.name, - :port => server.port, - :domain => user.domain, - :user_name => user_name, - :password => password, - :authentication => authentication, - :enable_starttls_auto => enable_starttls_auto, - :openssl_verify_mode => openssl_verify_mode - } - end - end - - def get_system_folders - @drafts_folder = @current_user.folders.drafts.first - @sent_folder = @current_user.folders.sent.first - @inbox_folder = @current_user.folders.inbox.first - @trash_folder = @current_user.folders.trash.first - end + protected end diff --git a/app/controllers/messages_ops_controller.rb b/app/controllers/messages_ops_controller.rb new file mode 100755 index 0000000..112f3f0 --- /dev/null +++ b/app/controllers/messages_ops_controller.rb @@ -0,0 +1,245 @@ +require 'imap_session' +require 'imap_mailbox' +require 'imap_message' +require 'mail' + +class MessagesOpsController < ApplicationController + + include ImapMailboxModule + include ImapSessionModule + include ImapMessageModule + 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 + before_filter :get_system_folders, :only => [:sendout_or_save,:single,:multi] + after_filter :close_imap_session + theme :theme_resolver + + + ############################################### single ##################################### + + def single + if params[:reply] + reply + return + elsif params[:trash] + trash + end + redirect_to :controller => 'messages', :action => 'index' + end + + ############################################### multi ###################################### + + def multi + begin + if !params[:uids] + flash[:warning] = t(:no_selected,:scope=>:message) + elsif params[:set_unread] + set_unread + elsif params[:set_read] + set_read + elsif params[:trash] + trash + elsif params[:copy] + copy + elsif params[:move] + move + end + rescue Exception => e + flash[:error] = "#{t(:imap_error)} (#{e.to_s})" + end + redirect_to :controller => 'messages', :action => 'index' + end + + def set_unread + params["uids"].each do |uid| + @mailbox.set_unread(uid) + @current_user.messages.find_by_uid(uid).update_attributes(:unseen => 1) + end + end + + def set_read + params["uids"].each do |uid| + @mailbox.set_read(uid) + @current_user.messages.find_by_uid(uid).update_attributes(:unseen => 0) + end + end + + def trash + if @trash_folder.nil? + flash[:warning] = t(:not_configured_trash, :scope=>:folder) + else + params["uids"].each do |uid| + @mailbox.move_message(uid,@trash_folder.full_name) + message = @current_folder.messages.find_by_uid(uid) + message.change_folder(@trash_folder) + end + @mailbox.expunge + @trash_folder.update_stats + @current_folder.update_stats + end + end + + def copy + if params[:folder][:target].empty? + flash[:warning] = t(:no_selected,:scope=>:folder) + else + dest_folder = @current_user.folders.find(params[:folder][:target]) + params["uids"].each do |uid| + @mailbox.copy_message(uid,dest_folder.full_name) + message = @current_folder.messages.find_by_uid(uid) + new_message = message.clone + new_message.folder_id = dest_folder.id + new_message.save + end + dest_folder.update_stats + @current_folder.update_stats + end + end + + def move + if params[:folder][:target].empty? + flash[:warning] = t(:no_selected,:scope=>:folder) + else + dest_folder = @current_user.folders.find(params[:folder][:target]) + params["uids"].each do |uid| + @mailbox.move_message(uid,dest_folder.full_name) + message = @current_folder.messages.find_by_uid(uid) + message.change_folder(dest_folder) + end + @mailbox.expunge + dest_folder.update_stats + @current_folder.update_stats + end + end + + ############################################### sendout_or_save ############################ + + def sendout_or_save + + 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') + + 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 + + begin + + set_mail_defaults(@current_user,smtp_server,session) + logger.custom('mail',Mail.delivery_method.inspect) + + @response = mail.deliver! + logger.custom('response',@response.inspect) + + if @sent_folder.nil? + raise t(:not_configured_sent,:scope=>:compose) + end + @mailbox.append(@sent_folder.full_name,mail.to_s,[:Seen]) + + rescue Exception => e + flash[:error] = "#{t(:imap_error)} (#{e.to_s})" + redirect_to :controller => 'messages', :action => 'index' + return + end + flash[:notice] = t(:was_sent,:scope => :compose) + redirect_to :controller => 'messages', :action => 'index' + elsif params[:save_as_draft] + begin + if @drafts_folder.nil? + raise t(:not_configured_drafts,:scope=>:compose) + end + # TODO delete old one if was edit + @mailbox.append(@drafts_folder.full_name,mail.to_s,[:Seen]) + rescue Exception => e + flash[:error] = "#{t(:imap_error)} (#{e.to_s})" + redirect_to :controller => 'messages', :action => 'index' + return + end + flash[:notice] = t(:was_saved,:scope => :compose) + redirect_to :controller => 'messages', :action => 'index' + end + end + + ###################################### protected section ####################################### + + protected + + def edit + + old_message = @current_user.messages.find(params[:id].first) + @message = Message.new + @message.to_addr = address_formatter(old_message.to_addr,:raw) + @message.subject = old_message.subject + imap_message = @mailbox.fetch_body(old_message.uid) + @edit = true + mail = Mail.new(imap_message) + if mail.multipart? + @message.body = mail.text_part.decoded_and_charseted + else + @message.body = mail.decoded_and_charseted + end + render 'messages/compose' + end + + def reply + 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 + + 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 + end + render 'messages/compose' + end + + ############################################ set_mail_defaults #################################### + + def set_mail_defaults(user,server,session) + if server.auth.nil? or server.auth == 'none' + password = nil + authentication = nil + enable_starttls_auto = nil + openssl_verify_mode = nil + user_name = nil + else + password = user.get_cached_password(session) + authentication = server.auth + enable_starttls_auto = server.use_tls + openssl_verify_mode = OpenSSL::SSL::VERIFY_NONE + user_name = user.full_address + end + Mail.defaults do + delivery_method :smtp, {:address => server.name, + :port => server.port, + :domain => user.domain, + :user_name => user_name, + :password => password, + :authentication => authentication, + :enable_starttls_auto => enable_starttls_auto, + :openssl_verify_mode => openssl_verify_mode + } + end + end + +end diff --git a/app/helpers/messages_ops_helper.rb b/app/helpers/messages_ops_helper.rb new file mode 100755 index 0000000..982ec32 --- /dev/null +++ b/app/helpers/messages_ops_helper.rb @@ -0,0 +1,2 @@ +module MessagesOpsHelper +end diff --git a/app/models/attachment.rb b/app/models/attachment.rb deleted file mode 100755 index d22472b..0000000 --- a/app/models/attachment.rb +++ /dev/null @@ -1,192 +0,0 @@ - -class Attachment - include ActiveModel::Validations - include ActiveModel::Conversion - extend ActiveModel::Naming - - attr_accessor :type, :charset, :encoding, :name, :description, :content, :message_id, :idx, :boundary, :format, :multipart,:size,:cid - attr_reader :link - - def initialize(attributes = {}) - - attributes.each do |name, value| - send("#{name}=", value) - end - - if not @type.nil? - params = @type.split(/;\s*/) - @type = params[0] - params.each do |p| - if p =~ /=/ - fields = p.split(/=/) - key = fields[0] - fields.delete_at(0) - value = fields.join("=") - # FIXME maybe do decoding only for name and filename key - if Attachment.attribute_method?(key) == true - send("#{key}=", ApplicationController.decode_quoted(value)) - end - end - end - end - end - - def multipart? - multipart - end - - def self.fromMultiParts(attachments,id,parts) - parts.each do |part| - a = build(id,part) - if a.multipart? - fromMultiParts(attachments,id,part.parts) - else - attachments << a - end - end - end - - def self.fromSinglePart(attachments,id,part) - a = build(id,part) - attachments << a - end - - def self.build(id,part) - cid = '' - if not part.content_id.nil? - part.content_id =~ /\<(\S+)\>/ - cid = $1 - else - cid = '' - end - a = Attachment.new( :message_id => id, - :description => part.content_description, - :type => part.content_type, - :content => part.body.raw_source, - :encoding => part.body.encoding, - :size => part.body.raw_source.size, - :charset => part.body.charset, - :multipart => part.multipart?, - :cid => cid - ) - return a - end - - - def persisted? - false - end - - def name - if @name.nil? - case type - when /^text\/html/ - "index#{idx}.html" - when /^multipart/ - "multipart#{idx}.part" - when /^text\/plain/ - "file#{idx}.txt" - else - "filaname.dat" - end - else - @name - end - end - - def to_s - s = "Attachment:\n" - instance_variables.sort.each do |name| - if name == "@content" - s += "\t#{name}: size #{instance_variable_get(name).size}\n" - else - s += "\t#{name}: #{instance_variable_get(name)}\n" - end - end - s - end - - def isText? - @type.nil? or @type =~ /^text\/plain/ - end - - def isHtml? - @type =~ /^text\/html/ - end - - def isImageAndNotCid? - @type =~ /^image/ and @cid.size.zero? - end - - def title - @description.nil? ? name : @description - end - - def type - @type.nil? ? '' : @type - end - - def charset - @charset.nil? ? '' : @charset - end - - def encoding - @encoding.nil? ? '' : @encoding - end - - def format - @format.nil? ? '' : @format - end - - def boundary - @boundary.nil? ? '' : @boundary - end - - def decode - begin - case @encoding - when /quoted-printable/ - #decoded = @content.gsub(/_/," ").unpack("M").first - decoded = @content.unpack("M").first - when /base64/ - decoded = @content.unpack("m").first - when /uuencode/ - array = @content.split(/\n/) - if array[0] =~ /^begin/ - size = array.size - array.delete_at(size-1) - array.delete_at(size-2) - array.delete_at(0) - end - string = array.join - decoded = string.unpack("u").first - else - decoded = @content - end - rescue - @content - end - end - - def decode_and_charset - begin - decoded = decode - - if not @charset == 'UTF-8' - @charset.nil? ? charset = $defaults["msg_unknown_charset"] : charset = @charset - charseted = Iconv.iconv("UTF-8",charset,decoded).first - else - charseted = decoded - end - - charseted - rescue - decoded - end - - end - -end - - - diff --git a/arts/favicon.png b/arts/favicon.png old mode 100644 new mode 100755 diff --git a/arts/favicon.xcf b/arts/favicon.xcf old mode 100644 new mode 100755 diff --git a/config/defaults.yml b/config/defaults.yml index 21d249f..d8557fd 100755 --- a/config/defaults.yml +++ b/config/defaults.yml @@ -38,4 +38,4 @@ session_password: asDD3s2@sAdc983# mailbox_max_parent_folder_depth: 3 # array of logins which only can login to application, comment it to allow everyone to login -only_can_logins: [soldier] +only_can_logins: [wtodryk] diff --git a/config/initializers/show_exceptions.rb b/config/initializers/show_exceptions.rb new file mode 100755 index 0000000..741bb94 --- /dev/null +++ b/config/initializers/show_exceptions.rb @@ -0,0 +1,16 @@ +require 'action_dispatch/middleware/show_exceptions' + +module ActionDispatch + class ShowExceptions + private + def render_exception_with_template(env, exception) + body = InternalController.action(rescue_responses[exception.class.name]).call(env) + log_error(exception) + body + rescue + render_exception_without_template(env, exception) + end + + alias_method_chain :render_exception, :template + end +end diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 892841a..42aab28 100755 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -84,6 +84,10 @@ pl: sent_name: Wysłane trash_name: Kosz drafts_name: Roboczy + not_configured_drafts: Folder Roboczy nie został przypisany + not_configured_sent: Folder Wysłany nie został przypisany + not_configured_trash: Folder Kosz nie został przypisany + not_configured_inbox: Folder Odebrane nie został przypisany message: messages: Wiadomości @@ -112,10 +116,6 @@ pl: was_saved: Wiadomość została zapisana w katalogu roboczym reply_string: "Odp: " not_configured_smtp: Brak konfiguracji SMTP - not_configured_drafts: Folder Roboczy nie został przypisany - not_configured_sent: Folder Wysłany nie został przypisany - not_configured_trash: Folder Kosz nie został przypisany - not_configured_inbox: Folder Odebrane nie został przypisany show: replay_to: Odpowiedz @@ -133,6 +133,13 @@ pl: login: Logowanie only_can_logins: Podany identyfikator użytkownika nie uprawnia do korzystania z aplikacji + internal: + imap_error: Błąd protokołu IMAP + unspecified_error: Nieoczekiwany błąd + not_found: Nie znaleziono żądanej strony + internal_server_error: Błąd aplikacji + unprocessable_entity: Błąd procesowania + must_be_unique: musi być unikalny some_add_info: jakieś dodatkowe informacje example: przykład @@ -140,11 +147,9 @@ pl: create: Utwórz delete: Usuń show_hide: Pokaż/Ukryj - mailr: Mailr + mailr: MailR save: Zapisz - imap_error: Błąd protokołu IMAP - unspecified_error: Nieoczekiwany błąd - page_not_found: Nie znaleziono żądanej strony + copy: Skopiuj move: Przenieś to: do diff --git a/config/routes.rb b/config/routes.rb index 471b348..311bf9c 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,20 +31,24 @@ Mailr::Application.routes.draw do get "internal/loginfailure" get "internal/onlycanlogins" + match "messages_ops/single" => 'messages_ops#single' + match "messages_ops/multi" => 'messages_ops#multi' + match "messages_ops/sendout_or_save" => 'messages_ops#sendout_or_save' ,:as =>:sendout_or_save + root :to => "messages#index" #get "messages/refresh_status" #get "messages/emptybin" #match "messages/select/:id" => 'messages#select', :as => :messages_select get "messages/index" #match 'messages/folder/:id' => 'messages#folder', :as => :messages_folder - post "messages/ops" - post "messages/msgops" + #post "messages/ops" + #post "messages/msgops" match "messages/compose" => 'messages#compose' - match "messages/edit/:id" => 'messages#edit' ,:as => :messages_edit - match "messages/reply/:id" => 'messages#reply' - match "messages/sendout_or_save" => 'messages#sendout_or_save' ,:as =>:sendout_or_save + #match "messages/edit/:id" => 'messages#edit' ,:as => :messages_edit + #match "messages/reply/:id" => 'messages#reply' + match "messages/show/:id" => 'messages#show' - match "messages/body/:id/:idx" => 'messages#body' , :as => :messages_part_body + #match "messages/body/:id/:idx" => 'messages#body' , :as => :messages_part_body match "messages/html_body/:id" => 'messages#html_body' , :as => :messages_html_body match "messages/attachment/:id/:idx" => 'messages#attachment', :as => :messages_attachment_download @@ -58,7 +62,7 @@ Mailr::Application.routes.draw do themes_for_rails - match '*a', :to => 'internal#page_not_found' + match '*a', :to => 'internal#not_found' # The priority is based upon order of creation: # first created -> highest priority. diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 diff --git a/test/functional/messages_ops_controller_test.rb b/test/functional/messages_ops_controller_test.rb new file mode 100755 index 0000000..fa611ba --- /dev/null +++ b/test/functional/messages_ops_controller_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class MessagesOpsControllerTest < ActionController::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end diff --git a/test/unit/helpers/messages_ops_helper_test.rb b/test/unit/helpers/messages_ops_helper_test.rb new file mode 100755 index 0000000..17c1a5c --- /dev/null +++ b/test/unit/helpers/messages_ops_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class MessagesOpsHelperTest < ActionView::TestCase +end diff --git a/themes/olive/views/messages/_attachment.html.erb b/themes/olive/views/messages/_attachment.html.erb index 0c17f78..4773864 100755 --- a/themes/olive/views/messages/_attachment.html.erb +++ b/themes/olive/views/messages/_attachment.html.erb @@ -16,6 +16,4 @@ <%= link_to t(:download), messages_attachment_download_path(attachment.parent_id,attachment.idx) %> - -<%= link_to t(:view), messages_part_body_path(attachment.parent_id,attachment.idx) %> - + diff --git a/themes/olive/views/messages/_ops.html.erb b/themes/olive/views/messages/_multi_ops.html.erb similarity index 100% rename from themes/olive/views/messages/_ops.html.erb rename to themes/olive/views/messages/_multi_ops.html.erb diff --git a/themes/olive/views/messages/_msg_ops.html.erb b/themes/olive/views/messages/_single_ops.html.erb similarity index 100% rename from themes/olive/views/messages/_msg_ops.html.erb rename to themes/olive/views/messages/_single_ops.html.erb diff --git a/themes/olive/views/messages/compose.html.erb b/themes/olive/views/messages/compose.html.erb index 500be9e..665cf94 100755 --- a/themes/olive/views/messages/compose.html.erb +++ b/themes/olive/views/messages/compose.html.erb @@ -14,7 +14,7 @@

<%= t(:new_message,:scope=>:compose) %>

<%= form_tag(sendout_or_save_path)%>
- <%= render :partial => 'new' %> + <%= render :partial => 'messages/new' %>
diff --git a/themes/olive/views/messages/index.html.erb b/themes/olive/views/messages/index.html.erb index dcdc886..d7da3bc 100755 --- a/themes/olive/views/messages/index.html.erb +++ b/themes/olive/views/messages/index.html.erb @@ -11,7 +11,7 @@ <%= raw main_navigation(:messages) %>
- <%= form_tag({:controller=>'messages', :action=>'ops'},{:name=>'messages'})%> + <%= form_tag({:controller=>'messages_ops', :action=>'multi'},{:name=>'messages'})%> <% if @current_folder.nil? %>

<%= t(:no_selected,:scope=>:folder) %>

@@ -22,7 +22,7 @@
<%= t(:no_in,:scope=>:message) %>
<% else %> - <%= render :partial => 'ops' %> + <%= render :partial => 'multi_ops' %> <%= render :partial => 'list' %> <% end %> diff --git a/themes/olive/views/messages/show.html.erb b/themes/olive/views/messages/show.html.erb index a3a299b..44b47a2 100755 --- a/themes/olive/views/messages/show.html.erb +++ b/themes/olive/views/messages/show.html.erb @@ -11,9 +11,9 @@ <%= raw main_navigation(:show) %>
- <%= form_tag(messages_msgops_path)%> + <%= form_tag(messages_ops_single_path)%> <%= render :partial => 'header' %> - <%= render :partial => 'msg_ops' %> + <%= render :partial => 'single_ops' %> <% if not @attachments.size.zero? %> <%= render :partial => 'attachments' %>