mailr/app/controllers/folders_controller.rb

107 lines
3.2 KiB
Ruby
Raw Normal View History

2011-08-16 23:37:13 +02:00
require 'imap_mailbox'
require 'imap_session'
2011-07-29 20:05:47 +02:00
class FoldersController < ApplicationController
include ImapMailboxModule
include ImapSessionModule
before_filter :check_current_user ,:selected_folder
2011-07-31 22:45:29 +02:00
before_filter :open_imap_session, :except => [:index,:refresh_status,:show_hide]
after_filter :close_imap_session, :except => [:index,:refresh_status,:show_hide]
2011-07-29 20:05:47 +02:00
2011-07-31 22:45:29 +02:00
before_filter :get_folders
2011-07-29 20:05:47 +02:00
theme :theme_resolver
def index
end
def create
if params["folder"].empty?
2011-08-16 20:05:58 +02:00
flash[:warning] = t(:to_create_empty,:scope=>:folder)
2011-07-29 20:05:47 +02:00
render "index"
else
begin
if params["parent_folder"].empty?
@mailbox.create_folder(params[:folder])
else
2011-08-16 20:05:58 +02:00
parent_folder = @current_user.folders.find(params["parent_folder"])
2011-07-29 20:05:47 +02:00
if parent_folder.depth >= $defaults["mailbox_max_parent_folder_depth"].to_i
2011-08-16 20:05:58 +02:00
raise Exception, t(:max_depth,:scope=>:folder)
2011-07-29 20:05:47 +02:00
end
@mailbox.create_folder(parent_folder.full_name + parent_folder.delim + params[:folder])
end
rescue Exception => e
2011-08-16 20:05:58 +02:00
flash[:error] = t(:can_not_create,:scope=>:folder) + ' (' + e.to_s + ')'
2011-07-29 20:05:47 +02:00
render 'index'
return
end
2011-08-16 20:05:58 +02:00
redirect_to :action => 'refresh', :flash => t(:was_created,:scope=>:folder), :type => :notice
2011-07-29 20:05:47 +02:00
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?
2011-08-16 20:05:58 +02:00
flash[:warning] = t(:to_delete_empty,:scope=>:folder)
2011-07-29 20:05:47 +02:00
render "index"
else
begin
2011-08-16 20:05:58 +02:00
folder = @current_user.folders.find(params["folder"])
2011-07-29 20:05:47 +02:00
system_folders = Array.new
system_folders << $defaults["mailbox_inbox"]
system_folders << $defaults["mailbox_trash"]
system_folders << $defaults["mailbox_sent"]
system_folders << $defaults["mailbox_drafts"]
if system_folders.include?(folder.full_name.downcase)
raise Exception, t(:system_folder)
end
2011-08-16 20:05:58 +02:00
@mailbox.delete_folder(folder.full_name)
2011-07-29 20:05:47 +02:00
rescue Exception => e
2011-08-16 20:05:58 +02:00
flash[:error] = t(:can_not_delete,:scope=>:folder) + ' (' + e.to_s + ')'
2011-07-29 20:05:47 +02:00
render 'index'
return
end
2011-08-16 20:05:58 +02:00
redirect_to :action => 'refresh', :flash => t(:was_deleted,:scope=>:folder), :type => :notice
2011-07-29 20:05:47 +02:00
end
end
2011-07-31 22:45:29 +02:00
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
end
redirect_to :action => 'index'
2011-07-29 20:05:47 +02:00
end
2011-07-31 22:45:29 +02:00
def refresh
Folder.refresh(@mailbox,@current_user)
2011-08-02 23:12:17 +02:00
flash.keep
2011-07-31 22:45:29 +02:00
redirect_to :action => 'index'
end
2011-07-29 20:05:47 +02:00
protected
def get_folders
@folders = @current_user.folders.order("name asc")
2011-07-31 22:45:29 +02:00
@folders_shown = []
@folders.each do |f|
if f.shown == true
@folders_shown << f
end
if f.selected?(@selected_folder)
@current_folder = f
end
end
2011-07-29 20:05:47 +02:00
end
end