diff --git a/app/controllers/admin/video_pros_controller.rb b/app/controllers/admin/video_pros_controller.rb index c37e3ff..72bc7a7 100644 --- a/app/controllers/admin/video_pros_controller.rb +++ b/app/controllers/admin/video_pros_controller.rb @@ -23,30 +23,32 @@ class Admin::VideoProsController < OrbitAdminController render_401 end end - + def update video_image = VideoImage.find(params[:id]) video_image.update_user_id = current_user.id.to_s + create_get_video_tags(video_image) video_image.save video_image.update_attributes(video_image_params) redirect_to params[:referer_url] end - - def new + + def new @video_image = VideoImage.new @item = [['Youtube',"1"],[t('video'),"2"]] #[['Youtube',"1"],[t('video'),"2"],[t('image'),"3"]] @tags = @module_app.tags || [] @video_image.postdate = Date.today end - + def create video_image = VideoImage.new(video_image_params) video_image.update_user_id = current_user.id.to_s video_image.create_user_id = current_user.id.to_s + create_get_video_tags(video_image) video_image.save redirect_to params[:referer_url] end - + def destroy video_image = VideoImage.find params[:id] video_image.destroy @@ -73,4 +75,25 @@ class Admin::VideoProsController < OrbitAdminController def setup_vars @module_app = ModuleApp.where(:key => "video_pro").first end -end \ No newline at end of file + + def create_get_video_tags(video) + new_tags = params["video_tags"].split(",") + tags = [] + video.video_tags = [] + new_tags.each do |tag| + if is_uuid?(tag) === false + vt = VideoTag.new + vt.title = tag.downcase + vt.save + video.video_tags << vt + else + vt = VideoTag.find(tag) + video.video_tags << vt + end + end + return tags + end + def is_uuid?(str) + !!(str =~ /\A[\da-f]{24}\z/i || str =~ /\A[\da-f]{8}-([\da-f]{4}-){3}[\da-f]{12}\z/i) + end +end diff --git a/app/models/video_image.rb b/app/models/video_image.rb index e058fe6..46baead 100644 --- a/app/models/video_image.rb +++ b/app/models/video_image.rb @@ -35,6 +35,8 @@ class VideoImage field :view_count, type: Integer, default: 0 field :scale, type: Float field :details, type: String, localize: true + + has_and_belongs_to_many :video_tags, inverse_of: :video_images # LINK_OPEN_TYPES = ["local", "new_window"] # before_save :add_http diff --git a/app/models/video_tag.rb b/app/models/video_tag.rb new file mode 100644 index 0000000..19bdbad --- /dev/null +++ b/app/models/video_tag.rb @@ -0,0 +1,8 @@ +class VideoTag + include Mongoid::Document + include Mongoid::Timestamps + + field :title, type: String + has_and_belongs_to_many :video_images, inverse_of: :video_tags + +end diff --git a/app/views/admin/video_pros/_form.html.erb b/app/views/admin/video_pros/_form.html.erb index 5c3aa41..de4d8bd 100644 --- a/app/views/admin/video_pros/_form.html.erb +++ b/app/views/admin/video_pros/_form.html.erb @@ -2,6 +2,7 @@ <%= stylesheet_link_tag "lib/main-forms" %> <%= stylesheet_link_tag "lib/fileupload" %> <%= stylesheet_link_tag "video_data/jplayer.blue.monday.min" %> + <%= stylesheet_link_tag "select2/select2" %> <% end %> <% content_for :page_specific_javascript do %> <%= javascript_include_tag "lib/bootstrap-fileupload" %> @@ -10,6 +11,7 @@ <%= javascript_include_tag "lib/module-area" %> <%= javascript_include_tag "validator" %> <%= javascript_include_tag "video_data/jquery.jplayer.min" %> + <%= javascript_include_tag "select2/select2.min" %> <% end %> <%#= f.error_messages %> <% @@ -32,6 +37,7 @@
  • <%= t(:basic) %>
  • <%= t(:status) %>
  • <%= t(:tags) %>
  • +
  • <%= t("video_pro.hashtags") %>
  • @@ -243,7 +249,17 @@
    - <%#= select_tags(f, @module_app) %> + <%= select_tags(f, @module_app) %> +
    +
    + + +
    +
    + +
    + +
    @@ -370,11 +386,24 @@ } }) }) + + // $("#video_image_video_tags_").select2({ + // placeholder: "<%= t("video_pro.select_or_add") %>", + // matcher: matchCustom + // }) + $("#video_image_video_tags_").select2({ + tags: true, + multiple: true, + data : <%= raw(VideoTag.all.map { |tag| { text: tag.title.html_safe, id: tag.id.to_s } }.to_json) %>, + createSearchChoice: function(term, data) { + if (!data.length) + return { id: term, text: "#" + term.trim().toLowerCase() }; + } + // ajax: { + // url: '/api/v1.1/locations', + // dataType: 'json' + // } + + }); + $("#video_image_video_tags_").val(<%= raw(@video_image.video_tags.collect { |tag| tag.id.to_s }) %>).trigger("change"); - - - - - - - diff --git a/config/locales/en.yml b/config/locales/en.yml index adacef4..1e4a54d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -70,4 +70,6 @@ en: choose_type: Please Select One Type First select: Please Select One details: Details + hashtags: Hashtags + select_or_add: Select or add tags video: Video \ No newline at end of file diff --git a/config/locales/zh_tw.yml b/config/locales/zh_tw.yml index e98b30b..d94848f 100644 --- a/config/locales/zh_tw.yml +++ b/config/locales/zh_tw.yml @@ -67,4 +67,6 @@ zh_tw: choose_type: 請先選擇類型 select: 請選擇 details: 詳細內容 + hashtags: Hashtags + select_or_add: Select or add tags video: 影片 \ No newline at end of file