view work

This commit is contained in:
Wojciech Todryk 2011-08-18 19:57:12 +02:00
parent 081bf95ce7
commit 751fae97f3
25 changed files with 274 additions and 181 deletions

View file

@ -2,15 +2,16 @@ require 'yaml'
class ApplicationController < ActionController::Base
#unless config.consider_all_requests_local
# #rescue_from ActionController::RoutingError, :with => :route_not_found
# rescue_from ActiveRecord::RecordNotFound, :with => :route_not_found
#end
protect_from_forgery
before_filter :load_defaults,:current_user,:set_locale
before_filter :plugins_configuration
rescue_from ActiveRecord::RecordNotFound do
logger.custom('record_not_found','exc')
reset_session
redirect_to :controller=>'user', :action => 'login'
end
################################# protected section ###########################################
protected
@ -42,7 +43,7 @@ class ApplicationController < ActionController::Base
def check_current_user
if @current_user.nil?
session["return_to"] = request.fullpath
redirect_to :controller=>"user", :action => "login"
redirect_to :controller => 'user', :action => 'login'
return false
end
end
@ -65,9 +66,5 @@ class ApplicationController < ActionController::Base
WillPaginate::ViewHelpers.pagination_options[:next_label] = t(:next_page)
end
#def route_not_found
# render :text => 'What the fuck are you looking for ?', :status => :not_found
#end
end

View file

@ -8,8 +8,8 @@ class FoldersController < ApplicationController
before_filter :check_current_user ,:selected_folder
before_filter :open_imap_session, :except => [:index,:refresh_status,:show_hide]
after_filter :close_imap_session, :except => [:index,:refresh_status,:show_hide]
before_filter :open_imap_session, :except => [:index,:show_hide]
after_filter :close_imap_session, :except => [:index,:show_hide]
before_filter :get_folders
@ -25,6 +25,7 @@ class FoldersController < ApplicationController
render "index"
else
begin
#TODO recreate local copy of folders
if params["parent_folder"].empty?
@mailbox.create_folder(params[:folder])
else
@ -39,10 +40,11 @@ class FoldersController < ApplicationController
render 'index'
return
end
redirect_to :action => 'refresh', :flash => t(:was_created,:scope=>:folder), :type => :notice
flash[:notice] = t(:was_created,:scope=>:folder)
redirect_to :action => 'index'
end
end
# FIXME if you delete folder you should change current folder because if you go to messages/index you got nil
def delete
if params["folder"].empty?
flash[:warning] = t(:to_delete_empty,:scope=>:folder)
@ -59,25 +61,33 @@ class FoldersController < ApplicationController
raise Exception, t(:system_folder)
end
@mailbox.delete_folder(folder.full_name)
logger.custom('c',@current_folder.inspect)
logger.custom('f',folder.inspect)
if @current_folder.eql? folder
session[:selected_folder] = $defaults['mailbox_inbox']
end
folder.destroy
rescue Exception => e
flash[:error] = t(:can_not_delete,:scope=>:folder) + ' (' + e.to_s + ')'
render 'index'
return
end
redirect_to :action => 'refresh', :flash => t(:was_deleted,:scope=>:folder), :type => :notice
flash[:notice] = t(:was_deleted,:scope=>:folder)
redirect_to :action => 'index'
end
end
def show_hide
@folders.each do |f|
logger.info f.inspect,"\n"
if params["folders_to_show"].include?(f.id.to_s)
f.shown = true
f.save
else
f.shown = false
f.save
end
if !params["folders_to_show"].nil?
@folders.each do |f|
if params["folders_to_show"].include?(f.id.to_s)
f.shown = true
f.save
else
f.shown = false
f.save
end
end
end
redirect_to :action => 'index'
end
@ -88,6 +98,39 @@ class FoldersController < ApplicationController
redirect_to :action => 'index'
end
def select
session[:selected_folder] = params[:id]
redirect_to :controller => 'messages', :action => 'index'
end
def refresh_status
@folders_shown.each do |f|
@mailbox.set_folder(f.full_name)
folder_status = @mailbox.status
f.update_attributes(:total => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN'])
end
redirect_to :controller=> 'messages', :action => 'index'
end
def emptybin
begin
trash_folder = @current_user.folders.find_by_full_name($defaults["mailbox_trash"])
@mailbox.set_folder(trash_folder.full_name)
trash_folder.messages.each do |m|
@mailbox.delete_message(m.uid)
end
@mailbox.expunge
trash_folder.messages.destroy_all
trash_folder.update_attributes(:unseen => 0, :total => 0)
rescue Exception => e
flash[:error] = "#{t(:imap_error)} (#{e.to_s})"
end
redirect_to :controller => 'messages', :action => 'index'
end
############################################# protected section #######################################
protected
def get_folders

View file

@ -28,4 +28,11 @@ class InternalController < ApplicationController
redirect_to :controller=>'user', :action => 'login'
end
def onlycanlogins
reset_session
flash[:error] = t(:only_can_logins,:scope=>:user)
@current_user = nil
redirect_to :controller=>'user', :action => 'login'
end
end

View file

@ -9,18 +9,20 @@ class MessagesController < ApplicationController
include ImapMessageModule
include MessagesHelper
before_filter :check_current_user ,:selected_folder
before_filter :get_current_folders
before_filter :check_current_user ,:selected_folder,:get_current_folders
before_filter :open_imap_session, :select_imap_folder
after_filter :close_imap_session
theme :theme_resolver
def index
if @current_folder.nil?
redirect_to :controller => 'folders', :action => 'index'
return
end
@messages = []
folder_status = @mailbox.status
@ -45,53 +47,38 @@ class MessagesController < ApplicationController
end
def folder
session[:selected_folder] = params[:id]
redirect_to :action => 'index'
end
def compose
flash[:notice] = 'Not impelented yet'
@message = Message.new
end
# TODO error when no folders are shown
def reply
@message = Message.new
render 'compose'
end
def refresh
@folders_shown.each do |f|
@mailbox.set_folder(f.full_name)
folder_status = @mailbox.status
f.update_attributes(:total => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN'])
end
def sendout
flash[:notice] = t(:was_sent,:scope => :sendout)
redirect_to :action => 'index'
end
end
def emptybin
def msgops
begin
trash_folder = @current_user.folders.find_by_full_name($defaults["mailbox_trash"])
@mailbox.set_folder(trash_folder.full_name)
trash_folder.messages.each do |m|
logger.custom('id',m.inspect)
@mailbox.delete_message(m.uid)
if !params["uids"]
flash[:warning] = t(:no_selected,:scope=>:message)
elsif params["reply"]
redirect_to :action => 'reply', :id => params[:id]
return
end
@mailbox.expunge
trash_folder.messages.destroy_all
trash_folder.update_attributes(:unseen => 0, :total => 0)
rescue Exception => e
flash[:error] = "#{t(:imap_error)} (#{e.to_s})"
end
redirect_to :action => 'index'
end
redirect_to :action => 'show', :id => params[:id]
end
def ops
begin
if !params["uids"]
flash[:warning] = t(:no_selected,:scope=>:message)
elsif params["delete"]
params["uids"].each do |uid|
@mailbox.delete_message(uid)
@current_user.messages.find_by_uid(uid).destroy
end
@current_folder.update_stats
elsif params["set_unread"]
params["uids"].each do |uid|
@mailbox.set_unread(uid)
@ -116,7 +103,7 @@ class MessagesController < ApplicationController
if params["dest_folder"].empty?
flash[:warning] = t(:no_selected,:scope=>:folder)
else
dest_folder = find(params["dest_folder"])
dest_folder = @current_user.folders.find(params["dest_folder"])
params["uids"].each do |uid|
@mailbox.copy_message(uid,dest_folder.full_name)
message = @current_folder.messages.find_by_uid(uid)
@ -151,8 +138,13 @@ class MessagesController < ApplicationController
def show
@message = @current_user.messages.find(params[:id])
@message.update_attributes(:unseen => false)
flash[:notice] = 'Not implemented yet'
@body = @mailbox.fetch_body(@message.uid)
end
def body
body = @mailbox.fetch_body(params[:id].to_i)
@body = "<html><head><title>ala</title><body>#{body}</body></html>"
render :text => @body
end
end

View file

@ -12,9 +12,11 @@ class UserController < ApplicationController
redirect_to :action => "login"
end
# TODO make login possible to use only one username
def authenticate
if !$defaults["only_can_logins"].include?(params[:user][:email])
redirect_to :controller => 'internal', :action => 'onlycanlogins'
return false
end
user = User.find_by_email(params[:user][:email])
if user.nil?
redirect_to :action => 'unknown' ,:email=> params[:user][:email]
@ -26,7 +28,7 @@ class UserController < ApplicationController
redirect_to(session["return_to"])
session["return_to"] = nil
else
redirect_to :controller=> 'messages', :action=> 'refresh'
redirect_to :controller=> 'messages', :action=> 'index'
end
end