orbit4-5/app/helpers/orbit_backend_helper.rb

232 lines
8.5 KiB
Ruby
Raw Normal View History

require "uri"
require "net/http"
2014-05-01 08:44:01 +00:00
module OrbitBackendHelper
def self.included(base)
ActionView::Helpers::FormBuilder.send(:include, Orbit::FormBuilder)
end
def thead(field)
2014-07-16 07:14:13 +00:00
sort = field.to_s.include?('.') ? field.to_s.split('.')[1] : field.to_s
active = params[:sort].eql? sort
2014-05-01 08:44:01 +00:00
order = active ? (["asc", "desc"]-[params[:order]]).first : "asc"
arrow = (order.eql? "desc") ? "<b class='icons-arrow-up-3'></b>" : "<b class='icons-arrow-down-4'></b>"
2014-05-05 11:40:31 +00:00
klass = field.eql?(:title) ? "span5" : "span2"
2014-07-16 07:14:13 +00:00
2014-08-07 10:44:23 +00:00
th_data = (sort=="preview") ? t(field.to_sym) : "<a href='?sort=#{sort}&order=#{order}'>#{t(field.to_sym)} #{active ? arrow : ""}</a>"
2014-07-16 07:14:13 +00:00
"<th class='#{klass} #{active ? "active" : ""}'>#{th_data}</th>".html_safe
2014-05-01 08:44:01 +00:00
end
def datetime_picker(object_name, method, options = {})
options[:icon_time] ||= 'icons-clock'
options[:icon_date] ||= 'icons-calendar'
options[:icon_clear] ||= 'icons-cross-3'
options[:input_class] ||= 'input-large'
options[:value] ||= options[:object].send(method) if options[:object] && options[:object][method]
case options[:picker_type]
when 'date'
content_tag :div, :id => options[:id], :class => options[:class] do
date_picker(object_name, method, options)
end
when 'time'
content_tag :div, :id => options[:id], :class => options[:class] do
time_picker(object_name, method, options)
end
when 'separated'
options[:label] ||= I18n.t('datetime_picker.separated.label')
content_tag :div, :id => options[:id], :class => "separated_picker #{options[:class]}" do
concat label_tag options[:label] unless options[:no_label]
concat hidden_field(object_name, method, :value => options[:value])
concat separated_picker(object_name, method, options)
end
else
content_tag :div, :id => options[:id], :class => options[:class] do
default_picker(object_name, method, options)
end
end
end
def default_picker(object_name, method, options)
custom = {}
custom[:format] = options[:format] || 'yyyy/MM/dd hh:mm'
custom[:value] = format_value(options[:value], custom[:format]) if options[:value]
custom[:picker_class] = 'default_picker'
custom[:label] = options[:label] || I18n.t('datetime_picker.default.label')
custom[:placeholder] = options[:placeholder] || I18n.t('datetime_picker.default.placeholder')
picker(object_name, method, options.merge(custom))
end
def picker(object_name, method, options)
content_tag :div, :class => "#{options[:picker_class]} input-append", :style => "#{(options[:picker_class].eql?('time_picker') && options[:value].blank? && options[:separated]) ? 'pointer-events:none' : nil}" do
concat label_tag options[:label] unless options[:no_label]
concat text_field object_name, method, :placeholder => options[:placeholder], :class => options[:input_class], 'data-format' => options[:format], :value => options[:value]
concat (content_tag :span, :class => 'add-on clearDate' do
content_tag :i, nil, :class => options[:icon_clear]
end)
concat (content_tag :span, :class => 'add-on iconbtn' do
content_tag :i, nil, 'data-time-icon' => options[:icon_time], 'data-date-icon' => options[:icon_date]
end)
end
end
def format_value(value, format = 'yyyy-MM-dd hh:mm')
value.strftime(format.gsub('yyyy', '%Y').gsub('MM', '%m').gsub('dd', '%d').gsub('hh', '%H').gsub('mm', '%M')) rescue ""
end
def add_attribute(partial, f, attribute)
2014-06-12 10:35:02 +00:00
new_object = f.object.send(attribute).build rescue nil
2014-05-01 08:44:01 +00:00
fields = f.fields_for(attribute, new_object, :child_index => "new_#{attribute}") do |f|
render :partial => partial, :object => new_object, :locals => {:f => f}
end
end
def is_filter_active?(field, value)
params[:filters][field].include?(value.to_s) ? "active" : "" rescue ""
end
2014-05-12 08:18:35 +00:00
2014-05-12 08:18:35 +00:00
def select_category(f, module_app)
2014-12-09 13:25:51 +00:00
@user_authorized_categories = module_app.categories.enabled.authorized(current_user) if @user_authorized_categories.nil?
render :partial => '/admin/categories/select_form', :locals => {:f=> f, :module_app=>module_app, :categories=> @user_authorized_categories }
2014-05-12 08:18:35 +00:00
end
2014-05-16 11:23:21 +00:00
def select_tags(f, module_app)
render :partial => '/admin/tags/tag_form', :locals => {:f=> f, :module_app=>module_app, :tags=>module_app.tags }
2014-05-12 08:18:35 +00:00
end
2014-05-01 08:44:01 +00:00
def render_filter(fields, search_dom_id=nil, quick_new=false)
render :partial => "shared/filter", :locals =>{:fields => fields, :search_dom_id=>search_dom_id, :quick_new=>quick_new}
end
2014-05-15 11:32:51 +00:00
def display_visitors(options={})
Impression.where(options).distinct(:request_hash).count
end
def display_visitors_today
display_visitors(created_at: {'$gte' => Time.now.beginning_of_day, '$lte' => Time.now})
end
def display_visitors_this_week
display_visitors(created_at: {'$gte' => Time.now-7.days, '$lte' => Time.now})
end
def display_visitors_this_month
display_visitors(created_at: {'$gte' => Time.now-30.days, '$lte' => Time.now})
end
def display_visitors_this_year
display_visitors(created_at: {'$gte' => Time.now-365.days, '$lte' => Time.now})
end
def get_month_traffic
site = Site.first
if site.month_traffic_cache.blank? or (site.month_traffic_cache['updated_at'] < (Time.now-1.day) rescue true)
site.month_traffic_cache = {}
site.month_traffic_cache['result'] = []
(1..30).each do |i|
visits = Impression.where( created_at: {
'$gte' => Time.now.beginning_of_day-i.days,
'$lte' => Time.now.end_of_day-i.days}
).distinct(:request_hash).count
site.month_traffic_cache['result'].push([ Time.now.beginning_of_day-i.days, visits])
end
2014-05-15 11:32:51 +00:00
site.month_traffic_cache['updated_at'] = Time.now
site.save
end
[:name=> t(:visitors_count),:data=>site.month_traffic_cache['result']]
2014-05-15 11:32:51 +00:00
end
def can_edit_or_delete?(obj)
2014-11-13 11:50:19 +00:00
create_user = obj.create_user_id.to_s rescue nil
if @user_authenticated_categories.first == "all"
return true
2014-11-13 13:50:08 +00:00
elsif @current_user_is_sub_manager && !create_user.nil?
2014-11-13 11:50:19 +00:00
create_user == current_user.id.to_s
else
@user_authenticated_categories.include?obj.category_id rescue (current_user.is_manager?(@module_app) rescue false)
end
end
2014-07-31 08:48:09 +00:00
2014-12-16 11:34:29 +00:00
def user_authenticated_categories
@user_authenticated_categories
end
2014-12-08 07:52:37 +00:00
def is_user_sub_manager?
@current_user_is_sub_manager
end
def has_access? #@user_has_privileges comes from orbit_member_controller.. used just in members
@user_has_privileges
end
def check_store_permissions #checks with the store if it has proper access and rights to access store
store_permission = {}
store_token = current_site.store_token rescue nil
if !store_token.nil?
params_to_send = {'store_token' => current_site.store_token}
uri = URI.parse(OrbitStore::URL)
http = Net::HTTP.new(uri.host,uri.port)
request = Net::HTTP::Get.new("/site/permissions")
request.body = params_to_send.to_query
2014-12-30 10:38:11 +00:00
response = http.request(request) rescue nil
if response.nil?
data = {}
data["message"] = "Could not connect to the store."
data["error"] = "CONNECTION_REFUSED"
data["success"] = false
else
data = JSON.parse(response.body)
end
if !data["success"]
case data["error"]
when "INVALID_SITE_TOKEN"
current_site.store_token = nil
current_site.save
end
store_permission["permission_granted"] = false
store_permission["error"] = data["error"]
store_permission["message"] = data["message"]
else
store_permission["permission_granted"] = true
end
else
store_permission["permission_granted"] = false
store_permission["error"] = "SITE_NOT_REGISTERED"
store_permission["message"] = "Site not registered."
end
store_permission
end
2014-07-31 08:48:09 +00:00
def render_401
render "public/401"
end
2014-12-09 13:25:51 +00:00
def render_403
render "public/403"
end
def need_access_right
render_401 if !has_access?
end
def get_referer_url
referer_path = Rails.application.routes.recognize_path(request.referer)
if referer_path[:controller]!="pages" or (referer_path[:controller]==params[:controller] and referer_path[:action]!="index")
referer_url = '/'+params[:controller]
else
referer_url = request.referer
end
referer_url
end
2014-05-01 08:44:01 +00:00
end
module Orbit::FormBuilder
def datetime_picker(method, options = {})
@template.datetime_picker(@object_name, method, objectify_options(options))
end
end