contacts done

This commit is contained in:
Wojciech Todryk 2011-08-16 20:05:58 +02:00
parent 68b925ea5e
commit 217c7a2288
60 changed files with 1286 additions and 439 deletions

View file

@ -8,7 +8,8 @@ class ApplicationController < ActionController::Base
#end
protect_from_forgery
before_filter :load_defaults,:set_locale,:current_user
before_filter :load_defaults,:current_user,:set_locale
before_filter :plugins_configuration
################################# protected section ###########################################
@ -30,7 +31,7 @@ class ApplicationController < ActionController::Base
if @current_user.nil?
I18n.locale = $defaults['locale'] || I18n.default_locale
else
I18n.locale = @current_user.prefs.locale || I18n.default_locale
I18n.locale = @current_user.prefs.locale.to_sym || I18n.default_locale
end
end
@ -52,15 +53,21 @@ class ApplicationController < ActionController::Base
def get_current_folders
@folders_shown = @current_user.folders.shown.order("name asc")
@current_folder = @current_user.folders.current(@selected_folder)
@current_folder = @current_user.folders.find_by_full_name(@selected_folder)
end
##################################### private section ##########################################
#private
private
def plugins_configuration
WillPaginate::ViewHelpers.pagination_options[:previous_label] = t(:previous_page)
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

@ -2,12 +2,73 @@ class ContactsController < ApplicationController
before_filter :check_current_user,:selected_folder
before_filter :get_current_folders, :only => [:index]
before_filter :get_current_folders
before_filter :get_contacts, :only => [:index]
theme :theme_resolver
def index
flash[:notice] = 'Not implemented yet'
end
def ops
if !params["cids"]
flash[:warning] = t(:no_selected,:scope=>:contact)
else
if params["delete"]
params["cids"].each do |id|
@current_user.contacts.find_by_id(id).destroy
end
elsif params["compose"]
redirect_to :controller=>'messages',:action=>'compose',:cids=>params["cids"]
return
end
end
redirect_to(contacts_path)
end
#problem http://binary10ve.blogspot.com/2011/05/migrating-to-rails-3-got-stuck-with.html
#def destroy
# @current_user.contacts.find(params[:id]).destroy
# redirect_to(contacts_path)
#end
def new
@contact = Contact.new
end
def edit
@contact = @current_user.contacts.find(params[:id])
render 'edit'
end
def create
@contact = @current_user.contacts.build(params[:contact])
if @contact.valid?
@contact.save
flash[:notice] = t(:was_created,:scope=>:contact)
redirect_to(contacts_path)
else
render 'new'
end
end
def update
@contact = @current_user.contacts.find(params[:id])
if @contact.update_attributes(params[:contact])
redirect_to(contacts_path)
else
render 'edit'
end
end
####################################### private section ##################################
private
def get_contacts
@contacts = Contact.getPageForUser(@current_user,params[:page],params[:sort_field],params[:sort_dir])
end
end

View file

@ -18,35 +18,35 @@ class FoldersController < ApplicationController
def create
if params["folder"].empty?
flash[:warning] = t(:folder_to_create_empty)
flash[:warning] = t(:to_create_empty,:scope=>:folder)
render "index"
else
begin
if params["parent_folder"].empty?
@mailbox.create_folder(params[:folder])
else
parent_folder = Folder.find(params["parent_folder"])
parent_folder = @current_user.folders.find(params["parent_folder"])
if parent_folder.depth >= $defaults["mailbox_max_parent_folder_depth"].to_i
raise Exception, t(:folder_max_depth)
raise Exception, t(:max_depth,:scope=>:folder)
end
@mailbox.create_folder(parent_folder.full_name + parent_folder.delim + params[:folder])
end
rescue Exception => e
flash[:error] = t(:can_not_create_folder) + ' (' + e.to_s + ')'
flash[:error] = t(:can_not_create,:scope=>:folder) + ' (' + e.to_s + ')'
render 'index'
return
end
redirect_to :action => 'refresh', :flash => t(:folder_was_created), :type => :notice
redirect_to :action => 'refresh', :flash => t(:was_created,:scope=>:folder), :type => :notice
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(:folder_to_delete_empty)
flash[:warning] = t(:to_delete_empty,:scope=>:folder)
render "index"
else
begin
folder = Folder.find(params["folder"])
folder = @current_user.folders.find(params["folder"])
system_folders = Array.new
system_folders << $defaults["mailbox_inbox"]
system_folders << $defaults["mailbox_trash"]
@ -55,13 +55,13 @@ class FoldersController < ApplicationController
if system_folders.include?(folder.full_name.downcase)
raise Exception, t(:system_folder)
end
@mailbox.delete_folder(Folder.find(params["folder"]).full_name)
@mailbox.delete_folder(folder.full_name)
rescue Exception => e
flash[:error] = t(:can_not_delete_folder) + ' (' + e.to_s + ')'
flash[:error] = t(:can_not_delete,:scope=>:folder) + ' (' + e.to_s + ')'
render 'index'
return
end
redirect_to :action => 'refresh', :flash => t(:folder_was_deleted), :type => :notice
redirect_to :action => 'refresh', :flash => t(:was_deleted,:scope=>:folder), :type => :notice
end
end
@ -82,9 +82,6 @@ class FoldersController < ApplicationController
def refresh
Folder.refresh(@mailbox,@current_user)
flash.keep
#if params[:flash]
# flash[params[:type]] = params[:flash]
#end
redirect_to :action => 'index'
end

View file

@ -23,7 +23,7 @@ class InternalController < ApplicationController
def loginfailure
reset_session
flash[:error] = t(:login_failure)
flash[:error] = t(:login_failure,:scope=>:user)
@current_user = nil
redirect_to :controller=>'user', :action => 'login'
end

View file

@ -11,75 +11,38 @@ class MessagesController < ApplicationController
before_filter :check_current_user ,:selected_folder
before_filter :get_current_folders, :only => [:index,:compose,:show]
before_filter :get_current_folders
before_filter :open_imap_session, :only => :refresh
after_filter :close_imap_session, :only => :refresh
before_filter :open_imap_session, :select_imap_folder
after_filter :close_imap_session
theme :theme_resolver
@@fetch_attr = ['ENVELOPE','BODYSTRUCTURE', 'FLAGS', 'UID', 'RFC822.SIZE']
def index
open_imap_session
####################
@messages = []
folder_status = @mailbox.status(@current_folder.full_name)
@current_folder.update_attributes(:messages => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN'])
folder_status = @mailbox.status
@current_folder.update_attributes(:total => folder_status['MESSAGES'], :unseen => folder_status['UNSEEN'])
if folder_status['MESSAGES'].zero?
return
folder_status['MESSAGES'].zero? ? uids_remote = [] : uids_remote = @mailbox.fetch_uids
uids_local = @current_user.messages.where(:folder_id => @current_folder).collect(&:uid)
(uids_local-uids_remote).each do |uid|
@current_folder.messages.find_by_uid(uid).destroy
end
messages = @mailbox.fetch(@current_folder.full_name,1..-1, "UID")
logger.custom('mess',messages)
uids_to_be_fetched = []
messages.each do |m|
uids_to_be_fetched << m.attr['UID']
end
messages = []
@current_user.messages.destroy_all
uids_to_be_fetched.each_slice($defaults["imap_fetch_slice"].to_i) do |slice|
logger.custom('slice',slice.join(","))
messages = @mailbox.uid_fetch(@current_folder.full_name,slice, @@fetch_attr)
(uids_remote-uids_local).each_slice($defaults["imap_fetch_slice"].to_i) do |slice|
messages = @mailbox.uid_fetch(slice, ImapMessageModule::IMAPMessage.fetch_attr)
messages.each do |m|
envelope = m.attr['ENVELOPE']
uid = m.attr['UID']
#content_type = m.attr['BODYSTRUCTURE'].multipart? ? 'multipart' : 'text'
content_type = m.attr['BODYSTRUCTURE'].media_type.downcase
size = m.attr['RFC822.SIZE']
unread = !(m.attr['FLAGS'].member? :Seen)
from = ImapMessageModule::IMAPAddress.from_address(envelope.from[0])
logger.custom('from',from.to_db)
logger.custom('enevelope_from',envelope)
logger.custom('body',m.attr['BODYSTRUCTURE'])
message = @current_user.messages.create(:folder_id => @current_folder.id,
:msg_id => envelope.message_id,
:uid => uid,
:from => from.to_db,
:to => envelope.to,
:subject => envelope.subject,
:content_type => content_type,
:date => envelope.date,
:unread => unread,
:size => size)
mess = ImapMessageModule::IMAPMessage.fromImap(m)
Message.createForUser(@current_user,@current_folder,mess)
end
end
@messages = Message.getPageForUser(@current_user,params['page'])
@messages = Message.getPageForUser(@current_user,@current_folder,params[:page],params[:sort_field],params[:sort_dir])
###############
close_imap_session
end
def folder
@ -92,20 +55,102 @@ class MessagesController < ApplicationController
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
redirect_to :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|
logger.custom('id',m.inspect)
@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 :action => 'index'
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)
@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"]
dest_folder = @current_user.folders.find_by_full_name($defaults["mailbox_trash"])
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
elsif params["copy"]
if params["dest_folder"].empty?
flash[:warning] = t(:no_selected,:scope=>:folder)
else
dest_folder = 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)
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["dest_folder"].empty?
flash[:warning] = t(:no_selected,:scope=>:folder)
else
dest_folder = @current_user.folders.find(params["dest_folder"])
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
@message = Message.find(params[:id])
flash[:notice] = 'Not impelented yet'
open_imap_session
@body = @mailbox.fetch_body(@current_folder.full_name,@message.uid)
logger.custom('body',@body.inspect)
close_imap_session
@message = @current_user.messages.find(params[:id])
@message.update_attributes(:unseen => false)
flash[:notice] = 'Not implemented yet'
@body = @mailbox.fetch_body(@message.uid)
end
end

View file

@ -2,14 +2,25 @@ class PrefsController < ApplicationController
before_filter :check_current_user,:selected_folder
before_filter :get_current_folders, :only => [:index,:compose]
before_filter :get_current_folders
before_filter :get_prefs
theme :theme_resolver
def index
flash[:notice] = 'Not implemented yet'
@prefs = @current_user.prefs
end
def update
if params[:prefs]
@prefs.update_attributes(params[:prefs])
end
redirect_to :action => 'index'
end
############################################ private section #########################################
def get_prefs
@prefs = @current_user.prefs
end
end

View file

@ -8,7 +8,7 @@ class UserController < ApplicationController
def logout
reset_session
flash[:notice] = t(:user_logged_out)
flash[:notice] = t(:logged_out,:scope=>:user)
redirect_to :action => "login"
end
@ -44,19 +44,19 @@ class UserController < ApplicationController
def create
@user = User.new
@user.email = params["user_email"]
@user.first_name = params["user_first_name"]
@user.last_name = params["user_last_name"]
@user.email = params[:user][:email]
@user.first_name = params[:user][:first_name]
@user.last_name = params[:user][:last_name]
@server = Server.new
@server.name = params["server_name"]
@server.name = params[:server][:name]
if @user.valid? and @server.valid?
@user.save
@server.user_id = @user.id
@server.save
Prefs.create_default(@user.id)
flash[:notice] = t(:setup_done)
flash[:notice] = t(:setup_done,:scope=>:user)
redirect_to :action => 'login'
else
render "setup"