contacts done
This commit is contained in:
parent
68b925ea5e
commit
217c7a2288
60 changed files with 1286 additions and 439 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue