class VideoProsController < ApplicationController def self.custom_widget_data ac = ActionController::Base.new ac.render_to_string("video_pros/custom_widget_data",:locals=>{:@custom_data_field=>@custom_data_field,:@field_name=>@field_name}) end def show params = OrbitHelper.params uid = params[:uid] video_image = VideoImage.where(:uid => uid).first snapshot_url = video_image && video_image.get_snapshot_url return if snapshot_url.nil? video_image.view_count += 1 video_image.inc_count { "video_image" => video_image } end def show_api uid = params[:uid] @video_image = VideoImage.where(:uid => uid).first snapshot_url = @video_image && @video_image.get_snapshot_url if snapshot_url.nil? render :file => "#{Rails.root}/app/views/errors/404.html", :layout => false, :status => :not_found, :formats => [:html] return end @video_image.view_count += 1 @video_image.inc_count render :layout=>false end def index params = OrbitHelper.params module_app = ModuleApp.where(:key=>'video_pro').first page = OrbitHelper.page rescue Page.where(:url=>params[:url]).first page_categories = OrbitHelper.page_categories categories = [{:name=>I18n.t("video_pro.all_category"), :value=>"all"}] if page_categories.blank? || page_categories.include?('all') categories_for_page = module_app.categories else categories_for_page = Category.where(:id=>page_categories) end categories += categories_for_page.map do |c| {:name=>c.title, :value=>c.id.to_s} end page_tags = OrbitHelper.page_tags tags = [{:name=>I18n.t("video_pro.all_tag"), :value=>"all"}] if page_tags.blank? || page_tags.include?('all') tags_for_page = module_app.tags else tags_for_page = Tag.where(:id=>page_tags) end tags += tags_for_page.map do |c| {:name=>c.name, :value=>c.id.to_s} end selected_category = params["category"] if selected_category.present? && selected_category != 'all' categories.each do |h| if h[:value] == selected_category h[:is_selected] = "selected" break end end filter_categories = [selected_category] else filter_categories = page_categories end @video_pro_setting = VideoProSetting.first post_agencies = [] id_name_mapping = User.where(:id.in=>@video_pro_setting.exist_user_ids.to_a).pluck(:id, "member_name.#{I18n.locale}").map{|k,v| [k.to_s, (v ? v.values.last : nil)]}.to_h if @video_pro_setting.enable_name_mapping @video_pro_setting.user_mapping.to_h.each do |id, name_trans| id_name_mapping[id] = name_trans end end @video_pro_setting.exist_user_ids.each do |user_id| name_trans = id_name_mapping[user_id] post_agencies << {:name=>name_trans, :value=>"m-#{user_id}"} if name_trans.present? end tmp_post_agencies = @video_pro_setting.post_agencies @video_pro_setting.exist_post_agencies.each do |idx| name_trans = tmp_post_agencies[idx] post_agencies << {:name=>name_trans, :value=>"p-#{idx}"} if name_trans.present? end selected_post_agency = params["poster"] if selected_post_agency.blank? && post_agencies.count > 0 && params["layout_type"].include?('post_agency') selected_post_agency = post_agencies[0][:value] end if selected_post_agency.present? post_agencies.each do |h| if h[:value] == selected_post_agency h[:is_selected] = "selected" break end end end post_agencies = post_agencies.map do |post_agency| {"option"=>""} end video_images = VideoImage.where(:title.nin => ["",nil]) page_url = "/#{I18n.locale}#{(page.get_url rescue page.url)}" page_tabs = [ {"klass"=>"", "url"=>page_url, "title"=>I18n.t('video_pro.latest_ranking')}, {"klass"=>"", "url"=>page_url + '?hot=hot', "title"=>I18n.t('video_pro.top_ranking')} ] if params[:hot] == 'hot' video_images = video_images.order(:view_count=>-1) page_tabs[1]["klass"] = "now_view" else page_tabs[0]["klass"] = "now_view" end selected_tag = params['tags'] page_title = page.name if selected_tag.present? tags.each do |h| if h[:value] == selected_tag h[:is_selected] = "selected" break end end filter_tags = [selected_tag] tag = Tag.where(id: selected_tag).first if tag page_title = tag.name end else filter_tags = OrbitHelper.page_tags end video_images = video_images.can_display_and_sorted.filter_by_categories(filter_categories).filter_by_tags(filter_tags) search_value = params[:search].to_s.strip if search_value.present? keywords = search_value.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/) regex = Regexp.union(keywords.map{|word| Regexp.new(".*"+Regexp.escape(word)+".*", "i")}) video_images = video_images.where({"title" => regex}) end if selected_post_agency.present? selected_type = selected_post_agency[0] if selected_type == 'm' video_images = video_images.where(:use_override_post_agency=>false, :update_user_id=>selected_post_agency.split('-').last) elsif selected_type == 'p' video_images = video_images.where(:use_override_post_agency=>true, :override_post_agency=>selected_post_agency.split('-').last) end end custom_data_field = (page.custom_data_field || {} rescue {}) videos = get_videos(video_images, OrbitHelper.url_to_show(''), custom_data_field) hd_icon_url = "/assets/video_pro/icon_hd.png" view_icon_url = "/assets/video_pro/icon_view.png" search_placeholder = I18n.t("video_pro.search_placeholder") search_text1 = I18n.t("video_pro.search_text1") search_text2 = I18n.t("video_pro.search_text2") categories = categories.map do |category| {"option"=>""} end tags = tags.map do |tag| {"option"=>""} end { "extras" => { "search_placeholder" => search_placeholder, "search_text1" => search_text1, "search_text2" => search_text2, "search_value" => search_value, "keyword_trans" => I18n.t("video_pro.keyword"), "view_count_trans" => I18n.t("video_pro.view_count"), "hd_icon_url" => hd_icon_url, "view_icon_url" => view_icon_url, "more" => "More", "page-title" => page_title }, "categories" => categories, "tags" => tags, "post_agencies" => post_agencies, "page_tabs" => page_tabs, "videos" => videos, "total_pages" => video_images.total_pages } end def widget subpart = OrbitHelper.get_current_widget if subpart.widget_type.include?('jqcloud') tags = subpart.tags if tags.include?('all') tags = Tag.where(:module_app_ids.in=>ModuleApp.where(:key=>'video_pro').pluck(:id)).to_a else tags = Tag.where(:id.in=>tags).to_a end show_url = OrbitHelper.widget_item_url('') jqcloud_words = tags.map do |tag| { "text" => tag.name, "weight"=> Tagging.where(:tag_id=>tag).count, "link" => "#{show_url}?tags=#{tag.id}" } end.sort_by{|h| h["weight"]}.reverse! { "extras" => { "jqcloud_words" => jqcloud_words.to_json } } else video_images = VideoImage.where(:title.nin => ["",nil]).can_display_and_sorted.filter_by_widget_categories.to_a custom_data_field = subpart.custom_data_field || {} @video_pro_setting = VideoProSetting.first videos = get_videos(video_images, OrbitHelper.widget_item_url(''), custom_data_field) hd_icon_url = "/assets/video_pro/icon_hd.png" view_icon_url = "/assets/video_pro/icon_view.png" { "extras" => { "keyword_trans" => I18n.t("video_pro.keyword"), "view_count_trans" => I18n.t("video_pro.view_count"), "hd_icon_url" => hd_icon_url, "view_icon_url" => view_icon_url, "more" => "More", }, "videos" => videos } end end private def get_videos(video_images, show_url, custom_data_field={}) @autoplay_video = custom_data_field[:autoplay_video] rescue "0" @hide_video_tools = custom_data_field[:hide_video_tools] == "1" rescue false videos = [] video_images.each_with_index do |video_image,i| if video_image.language_enabled.include?(I18n.locale.to_s) snapshot_url = video_image.get_snapshot_url next if snapshot_url.nil? video_post_agency = video_image.post_agency(@video_pro_setting) video_postdate = video_image.postdate.to_s video_category = video_image.category_title video_tags = video_image.tags video_tag = (video_tags.count > 0 ? video_tags.first.name : video_category) statuses = video_image.statuses_with_classname video_desc = video_image.desc video_desc_escape = video_desc.gsub('"',""") rescue "" video_title = video_image.title.to_s video_title_escape = video_title.gsub('"','"') video_keyword = video_image.keyword.to_s if video_image.exchange_item == "1" video_url = video_image.embed_url video_webm_url = "" video_type = "youtube" elsif video_image.exchange_item == "2" video_url = video_image.video_file.url rescue nil video_type = "jplayer" video_webm_url = video_image.video_file_webm.url rescue nil has_jplayer = true end slug = video_image.to_param api_url = "/xhr/video_pro/show_api/#{slug}" videos << { "api_url" => api_url, "video_show_url" => show_url + slug, "video_category" => video_category, "video_tag" => video_tag, "statuses" => statuses, "video_post_agency" => video_post_agency, "video_postdate" => video_postdate, "video_url" => video_url, "video_webm_url" => video_webm_url, "video_type" => video_type, "snapshot_url" => snapshot_url, "video_title" => video_title, "video_title_escape" => video_title_escape, "video_desc" => video_desc, "video_keyword" => video_keyword, "view_count" => video_image.view_count } end end videos end end