Personal Plugin with brief intro

This commit is contained in:
Saurabh Bhatia 2014-06-25 21:40:13 +08:00
parent 09461f7008
commit 49f7d2192d
10 changed files with 260 additions and 13 deletions

View File

@ -0,0 +1,67 @@
class Admin::PersonalPluginIntrosController < OrbitMemberController
def index
get_types
@plugin_intro = @types.where(member_profile_id: params[:member_profile_id]).first rescue nil
if @plugin_intro.blank?
@set_type = @types.new()
@url = eval("admin_#{@app_type}s_path(member_profile_id: params[:member_profile_id])")
@verb = :post
else
@set_type = @types.find(@plugin_intro.id)
@url = polymorphic_path(["admin", @plugin_intro])
@verb = :put
end
end
def new
end
def show
end
def create
get_types
@plugin_intro = @types.new(personal_plugin_intro_params)
member = MemberProfile.find(personal_plugin_intro_params[:member_profile_id])
respond_to do |format|
if @plugin_intro.save
format.html { redirect_to(admin_member_url(id: member.to_param, show_plugin_profile: @reback_name)) }
end
end
end
def edit
end
def update
get_types
@plugin_intro = @types.find(params[:id])
member = MemberProfile.find(personal_plugin_intro_params[:member_profile_id])
respond_to do |format|
if @plugin_intro.update_attributes(personal_plugin_intro_params)
format.html { redirect_to(admin_member_url(id: member.to_param,show_plugin_profile: @reback_name)) }
end
end
end
def destroy
end
private
def personal_plugin_intro_params
params.require(:plugin_intro).permit!
end
protected
def get_types
@types = @app_type.classify.constantize
end
end

View File

@ -32,20 +32,31 @@ class MembersController < ApplicationController
member = MemberProfile.find_by(uid: params[:uid])
plugins = OrbitApp::Plugin::Registration.all rescue nil
plugin_list = plugins.collect do |plugin|
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p|
{
"data_title" => p.slug_title,
"link_to_show" => OrbitHelper.url_to_show(p.to_param) + "?method=personal_plugin&plugin_name=#{plugin.app_name}"
}
end
plugin_list = plugins.collect do |plugin|
intro = PersonalPluginIntro.find_by(member_profile_id:member.id, _type: "#{plugin.app_name}Intro")
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
end
if intro.complete_list == true
plugin_data = plugin.app_name.constantize.where(member_profile_id: member) rescue nil
pd = plugin_data.collect do |p|
{
"data_title" => p.slug_title,
"link_to_show" => OrbitHelper.url_to_show(p.to_param) + "?method=personal_plugin&plugin_name=#{plugin.app_name}"
}
end
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
# end
elsif intro.brief_intro == true
pd = []
pd << { "data_title" => intro.text.html_safe}
{
"plugin_data" => pd,
"plugin_title" => plugin.app_name.titleize
}
end
end
if member.avatar.present?
image = member.avatar.thumb.url

View File

@ -0,0 +1,2 @@
module Admin::PersonalPluginIntrosHelper
end

View File

@ -34,6 +34,8 @@ class MemberProfile
has_many :attribute_values
accepts_nested_attributes_for :attribute_values, allow_destroy: true
has_many :personal_plugin_intros
scope :can_display, ->{where(is_hidden: false).order_by([:is_top,:desc],[:created_at,:desc])}
before_save :assign_default_position, :if => :assign_default_position?

View File

@ -0,0 +1,23 @@
class PersonalPluginIntro
include Mongoid::Document
include Mongoid::Timestamps
field :text, type: String, localize: true
field :brief_intro, type: Mongoid::Boolean, default: false
field :complete_list, type: Mongoid::Boolean, default: true
belongs_to :member_profile
def pp_object
brief_intro
end
def self.from_id(id)
PersonalPluginIntro.find(id) rescue nil
end
def self.is_localized?(field_name)
self.fields[field_name.to_s].localized?
end
end

View File

@ -0,0 +1,113 @@
<% # encoding: utf-8 %>
<% content_for :side_bar do %>
<%= render :partial => 'layouts/side_bar', :locals => {:link_name => t(:user), :link_url => admin_site_site_info_path(current_site), :icon => 'icons-users', :side_bar_content => 'admin/members/side_bar'} %>
<% end %>
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/file-type" %>
<% end %>
<%= form_for(:plugin_intro, :url => @url, :method => @verb, html: {class: "form-horizontal main-forms previewable"} ) do |f| %>
<fieldset>
<!-- Input Area -->
<div class="input-area">
<!-- Module Tabs -->
<div class="nav-name"><strong><%= I18n.t("module_name.#{@app_type_name}") %></strong></div>
<ul class="nav nav-pills module-nav">
<li></li>
<li class="active">
<a href="#basic" data-toggle="tab"><%= t(:basic) %></a>
</li>
</ul>
<!-- Module -->
<div class="tab-content module-area">
<!-- Basic Module -->
<div class="tab-pane fade in active" id="basic">
<% if !params[:member_profile_id].blank? %>
<div class="control-group">
<label class="control-label muted"><%= t("personal_plugins.author") %></label>
<div class="controls">
<%= MemberProfile.from_id(params[:member_profile_id]).name rescue ''%>
</div>
</div>
<% end %>
<!-- frontend_page -->
<div class="control-group">
<label class="control-label muted"><%= t("personal_plugins.frontend_page") %></label>
<div class="controls">
<%= f.check_box :brief_intro, :checked => @set_type.brief_intro %> <%= t("personal_plugins.brief_intro") %>
<%= f.check_box :complete_list, :checked => @set_type.complete_list %> <%= t("personal_plugins.complete_list") %>
</div>
</div>
</div>
</div>
<!-- Language Tabs -->
<div class="nav-name"><strong><%= t(:language) %></strong></div>
<ul class="nav nav-pills language-nav">
<% @site_in_use_locales.each_with_index do |locale, i| %>
<li class="<%= 'active' if i == 0 %>">
<a data-toggle="tab" href=".<%= locale %>"><%= t(locale) %></a>
</li>
<% end %>
</ul>
<!-- Language -->
<div class="tab-content language-area">
<% @site_in_use_locales.each_with_index do |locale, i| %>
<div class="<%= locale %> tab-pane fade <%= ( i == 0 ) ? "in active" : '' %>">
<!-- Content -->
<div class="control-group input-content">
<label class="control-label muted"><%= t(:content) %></label>
<div class="controls">
<div class="textarea">
<%= f.fields_for :text_translations do |f| %>
<%= f.cktext_area locale, rows: 5, class: "input-block-level", :value => (@set_type.text_translations[locale] rescue nil) %>
<% end %>
</div>
</div>
</div>
</div>
<% end %>
</div>
</div>
<!-- Form Actions -->
<div class="form-actions">
<%= f.hidden_field :member_profile_id, value: params[:member_profile_id] if !params[:member_profile_id].blank? %>
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= link_to t('cancel'), get_go_back, :class=>"btn" %>
</div>
</fieldset>
<% end %>

View File

@ -0,0 +1,7 @@
require 'test_helper'
class Admin::PersonalPluginIntrosControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,11 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
text: MyString
brief_intro: false
complete_list: false
two:
text: MyString
brief_intro: false
complete_list: false

View File

@ -0,0 +1,4 @@
require 'test_helper'
class Admin::PersonalPluginIntrosHelperTest < ActionView::TestCase
end

View File

@ -0,0 +1,7 @@
require 'test_helper'
class PersonalPluginIntroTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end