From a980847eb3f2096444cfc2b5a0e915347ecd0827 Mon Sep 17 00:00:00 2001
From: Matthew Kaito Juyuan Fu
Date: Tue, 31 Jan 2012 18:31:31 +0800
Subject: [PATCH] Basic function for AdBanner
---
app/assets/javascripts/ad_banner.js | 18 +++++++
.../admin/ad_banners_controller.rb | 43 ++++++++++++++++
app/helpers/admin/ad_banner_helper.rb | 2 +
app/models/ad_banner.rb | 44 ++++++++++++++++
app/models/ad_image.rb | 16 ++++++
app/views/admin/ad_banners/_ad_image.html.erb | 7 +++
.../admin/ad_banners/_ad_image_form.html.erb | 3 ++
.../ad_banners/_ad_image_update.html.erb | 8 +++
app/views/admin/ad_banners/_form.html.erb | 51 +++++++++++++++++++
.../ad_banners/_new_add_banner_file.html.erb | 7 +++
app/views/admin/ad_banners/_side_bar.html.erb | 11 ++++
app/views/admin/ad_banners/edit.html.erb | 11 ++++
app/views/admin/ad_banners/index.html.erb | 46 +++++++++++++++++
app/views/admin/ad_banners/new.html.erb | 13 +++++
app/views/admin/ad_banners/show.html.erb | 18 +++++++
15 files changed, 298 insertions(+)
create mode 100644 app/assets/javascripts/ad_banner.js
create mode 100644 app/controllers/admin/ad_banners_controller.rb
create mode 100644 app/helpers/admin/ad_banner_helper.rb
create mode 100644 app/models/ad_banner.rb
create mode 100644 app/models/ad_image.rb
create mode 100644 app/views/admin/ad_banners/_ad_image.html.erb
create mode 100644 app/views/admin/ad_banners/_ad_image_form.html.erb
create mode 100644 app/views/admin/ad_banners/_ad_image_update.html.erb
create mode 100644 app/views/admin/ad_banners/_form.html.erb
create mode 100644 app/views/admin/ad_banners/_new_add_banner_file.html.erb
create mode 100644 app/views/admin/ad_banners/_side_bar.html.erb
create mode 100644 app/views/admin/ad_banners/edit.html.erb
create mode 100644 app/views/admin/ad_banners/index.html.erb
create mode 100644 app/views/admin/ad_banners/new.html.erb
create mode 100644 app/views/admin/ad_banners/show.html.erb
diff --git a/app/assets/javascripts/ad_banner.js b/app/assets/javascripts/ad_banner.js
new file mode 100644
index 00000000..57176a1c
--- /dev/null
+++ b/app/assets/javascripts/ad_banner.js
@@ -0,0 +1,18 @@
+$("button.multi_files").live("click", function(){
+ $(this).parent().prev("ul").append("" + $(this).val() +'Time:'+ $(this).siblings('.ad_time').val()+'Link:'+$(this).siblings('.ad_out_link').val()+ " ");
+ new_node = $(this).parent().clone();
+ $(this).parent().css("display","none");
+ new_node.children('input.multi_files').val("");
+ $(this).parent().before(new_node);
+ return false;
+
+});
+
+$('a.remove_mark').live("click",function(){
+ $(this).prev("input").val("true");
+ $(this).parent().css("text-decoration","line-through")
+ $(this).parent().removeClass("r_snapshot");
+ $(this).next().remove();
+ $(this).remove();
+ return false;
+});
\ No newline at end of file
diff --git a/app/controllers/admin/ad_banners_controller.rb b/app/controllers/admin/ad_banners_controller.rb
new file mode 100644
index 00000000..19d81057
--- /dev/null
+++ b/app/controllers/admin/ad_banners_controller.rb
@@ -0,0 +1,43 @@
+class Admin::AdBannersController < ApplicationController
+ layout "admin"
+ before_filter :authenticate_user!
+ before_filter :is_admin?
+
+ def destroy
+ @ad_banner = AdBanner.find(params[:id])
+ @ad_banner.destroy
+ redirect_to admin_ad_banners_url
+ end
+
+ def show
+ @ad_banner = AdBanner.find(params[:id])
+ end
+
+ def new
+ @ad_banner = AdBanner.new
+ end
+
+ def create
+ @ad_banner = AdBanner.new(params[:ad_banner])
+ @ad_banner.save
+ redirect_to admin_ad_banners_url
+
+ end
+
+ def edit
+ @ad_banner = AdBanner.find(params[:id])
+
+ end
+
+ def update
+ @ad_banner = AdBanner.find(params[:id])
+ @ad_banner.update_attributes(params[:ad_banner])
+ @ad_banner.save
+ redirect_to admin_ad_banners_url
+ end
+
+ def index
+ @ad_banners = AdBanner.all
+ end
+
+end
\ No newline at end of file
diff --git a/app/helpers/admin/ad_banner_helper.rb b/app/helpers/admin/ad_banner_helper.rb
new file mode 100644
index 00000000..0621df38
--- /dev/null
+++ b/app/helpers/admin/ad_banner_helper.rb
@@ -0,0 +1,2 @@
+module Admin::AdBannerHelper
+end
\ No newline at end of file
diff --git a/app/models/ad_banner.rb b/app/models/ad_banner.rb
new file mode 100644
index 00000000..368c7081
--- /dev/null
+++ b/app/models/ad_banner.rb
@@ -0,0 +1,44 @@
+class AdBanner
+ include Mongoid::Document
+ include Mongoid::Timestamps
+ include Mongoid::MultiParameterAttributes
+
+ field :title
+ field :picture_position
+ field :post_date,type: Date
+ field :unpost_date,type: Date
+ field :context
+ field :direct_to_after_click,type: Boolean
+ field :ad_style #TODO Design should explain
+
+
+ before_save :save_or_destroy
+
+ embeds_many :ad_images, :cascade_callbacks => true
+
+ def new_ad_images=(*attrs)
+ attrs[0].each do |attr| #Loop by JSs,Themes,Imgs
+ unless attr[:file].nil?
+ self.ad_images << AdImage.new(attr)
+ end
+ end
+ end
+
+ def existing_ad_images=(*attrs)
+ attrs[0].each do |attr| #Loop by JSs,Themes,Imgs
+ ad_image = self.ad_images.find attr[0]
+ ad_image.update_attributes(attr[1])
+ end
+ end
+
+ def save_or_destroy
+ self.ad_images.each do |ad_image|
+ if ad_image.to_save?
+ ad_image.save
+ end
+ if ad_image.to_destroy?
+ ad_image.destroy
+ end
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/models/ad_image.rb b/app/models/ad_image.rb
new file mode 100644
index 00000000..dc8eab8b
--- /dev/null
+++ b/app/models/ad_image.rb
@@ -0,0 +1,16 @@
+class AdImage
+ include Mongoid::Document
+ include Mongoid::Timestamps
+
+ mount_uploader :file, ImageUploader
+
+ field :time_to_next #Weight
+ field :picture_intro
+ field :out_link
+
+ field :to_save, :type => Boolean
+ field :to_destroy, :type => Boolean
+
+ embedded_in :ad_banner
+
+end
diff --git a/app/views/admin/ad_banners/_ad_image.html.erb b/app/views/admin/ad_banners/_ad_image.html.erb
new file mode 100644
index 00000000..7ecdaa3b
--- /dev/null
+++ b/app/views/admin/ad_banners/_ad_image.html.erb
@@ -0,0 +1,7 @@
+
+ <%= image_tag ad_image.file %>
+ Time to next: <%= ad_image.time_to_next %>
+ Intro: <%= ad_image.picture_intro %>
+ Out Link <%= link_to ad_image.out_link %>
+ <%= render :partial => "ad_image_update", :locals => { :ad_image => ad_image } %>
+
diff --git a/app/views/admin/ad_banners/_ad_image_form.html.erb b/app/views/admin/ad_banners/_ad_image_form.html.erb
new file mode 100644
index 00000000..43d817a5
--- /dev/null
+++ b/app/views/admin/ad_banners/_ad_image_form.html.erb
@@ -0,0 +1,3 @@
+Time: <%= f.text_field :time_to_next ,:class=> 'ad_time'%>
+Link:<%= f.text_field :out_link ,:class=> 'ad_out_link'%>
+<%= f.hidden_field :to_save %>
\ No newline at end of file
diff --git a/app/views/admin/ad_banners/_ad_image_update.html.erb b/app/views/admin/ad_banners/_ad_image_update.html.erb
new file mode 100644
index 00000000..d2234ac5
--- /dev/null
+++ b/app/views/admin/ad_banners/_ad_image_update.html.erb
@@ -0,0 +1,8 @@
+<%= fields_for "ad_banner[existing_ad_images][#{ad_image.id}]", ad_image do |f| %>
+
+ Destroy?<%= f.check_box :to_destroy %>
+ <%= render :partial => "ad_image_form", :locals => { :f => f } %>
+
+<% end %>
+
+
diff --git a/app/views/admin/ad_banners/_form.html.erb b/app/views/admin/ad_banners/_form.html.erb
new file mode 100644
index 00000000..ff19e513
--- /dev/null
+++ b/app/views/admin/ad_banners/_form.html.erb
@@ -0,0 +1,51 @@
+<% content_for :page_specific_css do %>
+ <%= stylesheet_link_tag "ad_banner" %>
+<% end %>
+<% content_for :page_specific_javascript do %>
+ <%= javascript_include_tag "ad_banner" %>
+<% end %>
+
+
+
+ <%= f.label :title, t('admin.title') %>
+ <%= f.text_field :title, :class => 'text' %>
+
+
+ <%= f.label :picture_position, t('admin.picture_position') %>
+ <%= f.text_field :picture_position, :class => 'text' %>
+
+
+
+ <%= f.label :post_date, t('admin.post_date') %>
+ <%= f.date_select :post_date, :order => [:year, :month, :day], :use_month_numbers => true %>
+
+
+
+ <%= f.label :unpost_date, t('admin.unpost_date') %>
+ <%= f.date_select :unpost_date, :order => [:year, :month, :day], :use_month_numbers => true %>
+
+
+
+ <%= f.label :context, t('admin.context') %>
+ <%= f.text_field :context, :class => 'text' %>
+
+
+
+ <%= f.label :direct_to_after_click, t('admin.direct_to_after_click') %>
+ <%= f.check_box :direct_to_after_click %>
+
+
+ <%= f.label :ad_images, t('admin.ad_images') %>
+
+ <% @ad_banner.ad_images.each do |ad_image| %>
+ <%= render :partial => 'ad_image', :object => ad_image, :locals => { :field_name => "ad_images", :f => f, :classes => "r_destroy, r_edit" } %>
+ <% end %>
+
+ <%= render :partial => 'new_add_banner_file', :object => @ad_banner.ad_images.build, :locals => { :field_name => "new_ad_images[]", :f => f, :classes => "r_destroy" } %>
+
+
+
+
+
+ <%#= render :partial => 'new_design_file', :object => @design.themes.build, :locals => { :field_name => "themes", :f => f, :classes => "r_destroy" } %>
+
diff --git a/app/views/admin/ad_banners/_new_add_banner_file.html.erb b/app/views/admin/ad_banners/_new_add_banner_file.html.erb
new file mode 100644
index 00000000..64733ca4
--- /dev/null
+++ b/app/views/admin/ad_banners/_new_add_banner_file.html.erb
@@ -0,0 +1,7 @@
+<%= f.fields_for field_name, new_add_banner_file do |f| %>
+
+ <%= f.file_field :file %>
+ <%= render :partial => "ad_image_form", :locals => { :f => f } %>
+ <%= button_tag '+', :class => "multi_files"%>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/admin/ad_banners/_side_bar.html.erb b/app/views/admin/ad_banners/_side_bar.html.erb
new file mode 100644
index 00000000..ce0e1296
--- /dev/null
+++ b/app/views/admin/ad_banners/_side_bar.html.erb
@@ -0,0 +1,11 @@
+
+
+
+
+
<%= t('admin.setup_member') %>
+
+ <%= link_to content_tag(:span, t('admin.list_users')), admin_users_path %>
+ <%= link_to content_tag(:span, t('admin.list_roles')), admin_roles_path %>
+ <%= link_to content_tag(:span, t('admin.list_infos')), admin_infos_path %>
+
+
\ No newline at end of file
diff --git a/app/views/admin/ad_banners/edit.html.erb b/app/views/admin/ad_banners/edit.html.erb
new file mode 100644
index 00000000..7ccb00d0
--- /dev/null
+++ b/app/views/admin/ad_banners/edit.html.erb
@@ -0,0 +1,11 @@
+<%= t('admin.editing_ad_banner') %>
+
+<%= form_for @ad_banner, :url => admin_ad_banner_path(@ad_banner),:html => {:multipart => true} do |f| %>
+ <%= f.error_messages %>
+ <%= render :partial => "form", :locals => { :f => f } %>
+
+ <%= f.submit t('update') %> <%= link_back %>
+
+<% end %>
+
+
diff --git a/app/views/admin/ad_banners/index.html.erb b/app/views/admin/ad_banners/index.html.erb
new file mode 100644
index 00000000..54217140
--- /dev/null
+++ b/app/views/admin/ad_banners/index.html.erb
@@ -0,0 +1,46 @@
+<% content_for :secondary do %>
+
+
<%= t('admin.setup_ad_banners') %>
+
+ <%= link_to content_tag(:span, t('admin.new_ad_banner')), new_admin_ad_banner_path, :class => 'seclink1' %>
+
+
+<% end -%>
+
+<%= flash_messages %>
+
+
<%= t('admin.list_ad_banners') %>
+
+
+
+
+ <%= t('admin.title') %>
+ <%= t('admin.picture_position') %>
+ <%= t('admin.post_date') %>
+ <%= t('admin.unpost_date') %>
+ <%= t('admin.context') %>
+ <%= t('admin.direct_to_after_click') %>
+
+
+<% @ad_banners.each do |ad_banner| %>
+
+ <%= ad_banner.title %>
+ <%= ad_banner.picture_position %>
+ <%= ad_banner.post_date %>
+ <%= ad_banner.unpost_date %>
+ <%= ad_banner.context %>
+ <%= ad_banner.direct_to_after_click %>
+
+ <%= link_to t(:show), admin_ad_banner_path(ad_banner), :class => 'show' %>
+ <%= link_to t(:edit), edit_admin_ad_banner_path(ad_banner), :class => 'edit' %>
+ <%= link_to t(:delete), admin_ad_banner_path(ad_banner), :confirm => t('sure?'), :method => :delete, :class => 'delete' %>
+
+
+
+<% end %>
+
+
+
+
+ <%= link_to t('admin.new_ad_banner'), new_admin_ad_banner_path, :class => 'new' %>
+
\ No newline at end of file
diff --git a/app/views/admin/ad_banners/new.html.erb b/app/views/admin/ad_banners/new.html.erb
new file mode 100644
index 00000000..31d182b7
--- /dev/null
+++ b/app/views/admin/ad_banners/new.html.erb
@@ -0,0 +1,13 @@
+
+
<%= t('admin.new_ad_banner') %>
+
+ <%= form_for :ad_banner, :url => admin_ad_banners_path, :html => {:multipart => true} do |f| %>
+ <%= f.error_messages %>
+ <%= render :partial => "form", :locals => { :f => f } %>
+
+
+ <%= link_back %>
+ <%= f.submit t('create') %>
+
+ <% end %>
+
diff --git a/app/views/admin/ad_banners/show.html.erb b/app/views/admin/ad_banners/show.html.erb
new file mode 100644
index 00000000..35deffa2
--- /dev/null
+++ b/app/views/admin/ad_banners/show.html.erb
@@ -0,0 +1,18 @@
+<% content_for :secondary do %>
+ <%= render 'side_bar' %>
+<% end %>
+
+
+
+ <%=t('admin.ad_banner.title') %> <%= @ad_banner.title %>
+ <%=t('admin.ad_banner.picture_position') %> <%= @ad_banner.picture_position %>
+ <%=t('admin.ad_banner.post_date') %> <%= @ad_banner.post_date %>
+ <%=t('admin.ad_banner.unpost_date') %> <%= @ad_banner.unpost_date %>
+ <%=t('admin.ad_banner.context') %> <%= @ad_banner.context %>
+ <%=t('admin.ad_banner.direct_to_after_click') %> <%= @ad_banner.direct_to_after_click %>
+ <%=t('admin.ad_banner.ad_style') %> <%= @ad_banner.ad_style %>
+
+
+
+ <%= render :partial => "admin/ad_banners/ad_image", :collection => @ad_banner.ad_images %>
+