Class: CamaleonCms::Admin::MediaController

Inherits:
CamaleonCms::AdminController show all
Defined in:
app/controllers/camaleon_cms/admin/media_controller.rb

Constant Summary collapse

LOCALHOST_DOMAIN_MATCHER =
/
  localhost|
  127\.0\.0\.1|
  0\.0\.0\.0|
  0x7f\.0x0\.0x0\.0x1| # hex encoding
  0177\.0\.0\.01| # octal encoding
  2130706433 # dword encoding
/x.freeze

Instance Method Summary collapse

Methods inherited from CamaleonCms::AdminController

#dashboard, #search

Methods included from ApplicationHelper

#cama_do_pagination, #cama_get_i18n_frontend, #cama_shortcode_print

Methods included from CustomFieldsHelper

#cama_custom_field_elements, #cf_add_model

Methods included from CategoryHelper

#cama_category_get_options_html

Methods included from PostTypeHelper

#cama_hierarchy_post_list, #post_type_html_inputs, #post_type_list_taxonomy, #post_type_status

Methods included from MenusHelper

#admin_menu_add_menu, #admin_menu_append_menu_item, #admin_menu_draw, #admin_menu_insert_menu_after, #admin_menu_insert_menu_before, #admin_menu_prepend_menu_item, #admin_menus_add_commons

Methods included from BreadcrumbHelper

#admin_breadcrumb_add, #cama_admin_title_draw

Methods inherited from CamaleonController

#captcha, #render_error

Methods included from EmailHelper

#cama_send_email, #cama_send_mail_to_admin, #send_email, #send_password_reset_email, #send_user_confirm_email

Methods included from HooksHelper

#hook_run, #hook_skip, #hooks_run

Methods included from PluginsHelper

#current_plugin, #plugin_asset_path, #plugin_asset_url, #plugin_destroy, #plugin_install, #plugin_layout, #plugin_load_helpers, #plugin_uninstall, #plugin_upgrade, #plugin_view, #plugins_initialize, #self_plugin_key

Methods included from SiteHelper

#cama_current_site_host_port, #cama_get_list_layouts_files, #cama_get_list_template_files, #cama_is_test_request?, #current_locale, #current_site, #current_theme, #site_after_install, #site_install_theme, #site_uninstall_theme

Methods included from UploaderHelper

#cama_crop_image, #cama_file_path_to_url, #cama_resize_and_crop, #cama_resize_upload, #cama_tmp_upload, #cama_uploader, #cama_uploader_generate_thumbnail, #cama_url_to_file_path, #slugify, #slugify_folder, #upload_file, #uploader_verify_name

Methods included from CamaleonHelper

#cama_cache_fetch, #cama_draw_timer, #cama_edit_link, #cama_is_admin_request?, #cama_pluralize_text, #cama_requestAction, #cama_sitemap_cats_generator, #cama_t, #ct

Methods included from CaptchaHelper

#cama_captcha_build, #cama_captcha_increment_attack, #cama_captcha_reset_attack, #cama_captcha_tag, #cama_captcha_tags_if_under_attack, #cama_captcha_total_attacks, #cama_captcha_under_attack?, #cama_captcha_verified?, #captcha_verify_if_under_attack

Methods included from ContentHelper

#cama_content_after_draw, #cama_content_append, #cama_content_before_draw, #cama_content_init, #cama_content_prepend

Methods included from ThemeHelper

#self_theme_key, #theme_asset_file_path, #theme_asset_path, #theme_asset_url, #theme_home_page, #theme_init, #theme_layout, #theme_view

Methods included from ShortCodeHelper

#cama_strip_shortcodes, #do_shortcode, #render_shortcode, #shortcode_add, #shortcode_change_template, #shortcode_delete, #shortcodes_init

Methods included from UserRolesHelper

#cama_get_roles_values

Methods included from HtmlHelper

#append_asset_content, #append_asset_libraries, #append_pre_asset_content, #cama_assets_library_register, #cama_draw_custom_assets, #cama_draw_pre_asset_contents, #cama_get_options_html_from_items, #cama_html_helpers_init, #cama_html_tooltip, #cama_load_libraries

Methods included from SessionHelper

#cama_authenticate, #cama_current_role, #cama_current_user, #cama_get_session_id, #cama_logout_user, #cama_on_heroku?, #cama_register_user, #cama_sign_in?, #cookie_auth_token_complete?, #cookie_split_auth_token, #login_user, #login_user_with_password, #session_back_to_parent, #session_switch_user, #user_auth_token_from_cookie

Instance Method Details

#actionsObject

do background actions in fog



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 60

def actions
  authorize! :manage, :media if params[:media_action] != 'crop_url'
  params[:folder] = params[:folder].gsub('//', '/') if params[:folder].present?
  case params[:media_action]
  when 'new_folder'
    params[:folder] = slugify_folder(params[:folder])
    render partial: 'render_file_item', locals: { files: [cama_uploader.add_folder(params[:folder])] }
  when 'del_folder'
    cama_uploader.delete_folder(params[:folder])
    render plain: ''
  when 'del_file'
    cama_uploader.delete_file(params[:folder].gsub('//', '/'))
    render plain: ''
  when 'crop_url'
    unless params[:url].start_with?('data:')
      params[:url] = (params[:url].start_with?('http') ? '' : current_site.the_url(locale: nil)) + params[:url]
    end
    r = if local_url?(params[:url])
          { error: t('camaleon_cms.admin.media.local_upload_denied') }
        else
          cama_tmp_upload(params[:url], formats: params[:formats], name: params[:name])
        end
    if r[:error].present?
      render plain: r[:error]
    else
      params[:file_upload] = r[:file_path]
      sett = { remove_source: true }
      sett[:same_name] = true if params[:same_name].present?
      sett[:name] = params[:name] if params[:name].present?
      upload(sett)
    end
  end
end

#ajaxObject

render media for modal content



46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 46

def ajax
  @show_file_actions = true if current_site.get_option('file_actions_in_modals') == 'yes'
  @tree = cama_uploader.search(params[:search]) if params[:search].present?
  @files = @tree.paginate(page: params[:page], per_page: 100)
  @next_page = @files.current_page < @files.total_pages ? @files.current_page + 1 : nil
  if params[:partial].present?
    render json: { next_page: @next_page,
                   html: render_to_string(partial: 'render_file_item', locals: { files: @files }) }
  else
    render 'index', layout: false unless params[:partial].present?
  end
end

#cropObject

crop a image to save as a new file



28
29
30
31
32
33
34
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 28

def crop
  path_image = cama_tmp_upload(params[:cp_img_path])[:file_path]
  crop_path = cama_crop_image(path_image, params[:ic_w], params[:ic_h], params[:ic_x], params[:ic_y])
  res = upload_file(crop_path, { remove_source: true })
  CamaleonCms::User.find(params[:saved_avatar]).set_meta('avatar', res['url']) if params[:saved_avatar].present?
  render html: res['url'].html_safe
end

#download_private_fileObject

download private files



37
38
39
40
41
42
43
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 37

def download_private_file
  cama_uploader.enable_private_mode!

  file = cama_uploader.fetch_file("private/#{params[:file]}")

  send_file file, disposition: 'inline'
end

#indexObject

render media section



19
20
21
22
23
24
25
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 19

def index
  authorize! :manage, :media
  @show_file_actions = true
  @files = @tree.paginate(page: params[:page], per_page: 100)
  @next_page = @files.current_page < @files.total_pages ? @files.current_page + 1 : nil
  add_breadcrumb I18n.t('camaleon_cms.admin.sidebar.media')
end

#local_url?(url) ⇒ Boolean

Returns:

  • (Boolean)


94
95
96
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 94

def local_url?(url)
  url.try :match?, LOCALHOST_DOMAIN_MATCHER
end

#upload(settings = {}) ⇒ Object

upload files from media uploader



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/controllers/camaleon_cms/admin/media_controller.rb', line 99

def upload(settings = {})
  params[:dimension] = nil if params[:skip_auto_crop].present?
  f = { error: 'File not found.' }
  if params[:file_upload].present?
    f = upload_file(params[:file_upload],
                    { folder: params[:folder], dimension: params['dimension'], formats: params[:formats], versions: params[:versions],
                      thumb_size: params[:thumb_size] }.merge(settings))
  end

  if f[:error].present?
    render plain: f[:error]
  else
    render partial: 'render_file_item', locals: { files: [f] }
  end
end