delete post, edit groups done

This commit is contained in:
Harry Bomrah 2015-05-23 03:48:07 +08:00
parent a440076916
commit c406951876
12 changed files with 326 additions and 63 deletions

View File

@ -9,7 +9,15 @@ class Admin::GroupsController < OrbitGroupController
end
def categories
@categories = GroupCategory.all
old_categories = GroupCategory.where(:is_accepted.ne => false)
if old_categories.count > 0
old_categories.each do |oc|
oc.is_accepted = true
oc.save
end
end
@admin_categories = GroupCategory.by_admin
@requested_categories = GroupCategory.is_requested
end
def newpost
@ -55,15 +63,20 @@ class Admin::GroupsController < OrbitGroupController
def create_category
gc = GroupCategory.new(category_params)
gc.save
@categories = GroupCategory.all
render :partial => "group_categories"
if !current_user.is_admin?
@requested_categories = GroupCategory.is_requested
render :partial => "group_requested_categories"
else
@admin_categories = GroupCategory.by_admin
render :partial => "group_categories"
end
end
def update_category
gc = GroupCategory.find(params[:category_id])
gc.update_attributes(category_params)
gc.save
@categories = GroupCategory.all
@admin_categories = GroupCategory.by_admin
render :partial => "group_categories"
end
@ -95,6 +108,13 @@ class Admin::GroupsController < OrbitGroupController
redirect_to admin_groups_path
end
def update
@group = Group.find(params[:id])
@group.update_attributes(group_update_params)
@group.save
redirect_to admin_groups_path
end
def destroy
group = Group.find(params[:id])
group.destroy
@ -103,7 +123,8 @@ class Admin::GroupsController < OrbitGroupController
def new
@group = Group.new
@categories = GroupCategory.all.collect{|gc| [gc.title,gc.id]}
@no_breadcrumb = true
@categories = GroupCategory.by_admin.collect{|gc| [gc.title,gc.id]}
@members = []
MemberProfile.all.each do |mp|
user = mp.user rescue nil
@ -119,6 +140,81 @@ class Admin::GroupsController < OrbitGroupController
end
end
def edit
render_401 and return if !is_user_group_admin?
@no_breadcrumb = true
@members = []
MemberProfile.all.each do |mp|
user = mp.user rescue nil
if !user.nil? && user.id.to_s != current_user.id.to_s && user.user_name != "rulingcom" && !@group.users.include?(user)
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""})
}
end
end
@existing_members = []
@group.users.each do |user|
mp = user.member_profile rescue nil
if !mp.nil?
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@existing_members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}),
"admin" => @group.admins.include?(user.id.to_s)
}
end
end
end
def get_existing_member_template
g = params[:group_id]
group = Group.find(g)
@existing_members = []
group.users.each do |user|
mp = user.member_profile rescue nil
if !mp.nil?
avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png")
@existing_members << {
"id" => user.id.to_s,
"user_name" => (user.user_name rescue ""),
"avatar" => avatar,
"name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}),
"admin" => group.admins.include?(user.id.to_s)
}
end
end
render :partial => "group_existing_member"
end
def remove_user
group = Group.find(params[:group_id])
user_id = params[:user_id]
user = User.find(user_id)
group.users.delete(user)
group.admins.delete(user.id.to_s) if group.admins.include?(user.id.to_s)
group.save
render :json => {"success" => true}.to_json
end
def toggle_admin
group = Group.find(params[:group_id])
user_id = params[:user_id]
user = User.find(user_id)
if params[:admin] == "true"
group.admins << user.id.to_s
else
group.admins.delete(user.id.to_s)
end
group.save
render :json => {"success" => true}.to_json
end
def new_comment
gpc = GroupPostComment.new(comment_params)
gpc.save
@ -128,7 +224,13 @@ class Admin::GroupsController < OrbitGroupController
private
def category_params
params.require(:category).permit!
p = params.require(:category).permit!
if p[:is_accepted].nil?
p[:is_accepted] = true
else
p[:is_accepted] = false
end
p
end
def comment_params
@ -174,4 +276,16 @@ class Admin::GroupsController < OrbitGroupController
p
end
end
def group_update_params
p = params.require(:group).permit!
p["user_ids"] = [] if p["user_ids"].nil?
p["user_ids"].concat(@group.users.collect{|u| u.id.to_s})
p
end
end

View File

@ -4,7 +4,7 @@ class OrbitGroupController < ApplicationController
def get_group
case params[:action]
when "show"
when "show","edit"
uid = params[:id].split("-").last
@group = Group.find_by(:uid => uid)
when "newpost", "createpost"
@ -21,7 +21,7 @@ class OrbitGroupController < ApplicationController
@access_right_level = "none"
read_or_write = @group.permission rescue "read"
case params[:action]
when "show", "showpost", "newpost"
when "show", "showpost", "newpost", "edit"
is_member = @group.users.include?(current_user)
if @group.admins.include?(current_user.id.to_s)
@access_right_level = "admin"

View File

@ -3,6 +3,10 @@ class GroupCategory
include Mongoid::Timestamps
field :title, localize: true
field :is_accepted, type: Boolean, :default => true
has_many :groups
scope :is_requested, ->{ where(is_accepted: false) }
scope :by_admin, ->{ where(is_accepted: true) }
end

View File

@ -7,12 +7,12 @@
end
%>
<li class="group-card animated bounceInDown" data-group-id="<%= group.id.to_s %>">
<div class="group-card-inner card-ownership card-owner card">
<div class="group-card-inner card-ownership <%= current_user_is_group_admin ? "card-owner" : (current_user_is_group_member ? "card-member" : "card-public") %> card">
<div class="group-avatar">
<p class="<%= current_user_is_group_admin ? "gender-man" : (current_user_is_group_member ? "gender-woman" : "gender-none") %>"></p>
<p></p>
<% if current_user_is_group_admin %>
<div class="action">
<%= link_to(content_tag(:i, nil, :class => 'icon-edit'),"#",:class=>"edit" ) %>
<%= link_to(content_tag(:i, nil, :class => 'icon-edit'),edit_admin_group_path(group),:class=>"edit" ) %>
<%= link_to(content_tag(:i, nil, :class => 'icon-trash'),"/admin/groups/#{group.id.to_s}",:class=>"trash delete-group-button" ) %>
</div>
<% end %>

View File

@ -1,6 +1,7 @@
<% @categories.each do |cat| %>
<% is_admin = current_user.is_admin? %>
<% @admin_categories.each do |cat| %>
<div class="group-category-item button button-primary">
<i class="group-category-tag-icon fa fa-tag"></i>
<a href="#" class="open-slide" data-title="Edit" data-form="<%= cat.title_translations.to_json %>" data-id="<%= cat.id.to_s %>" ><%= cat.title_translations["en"] %> / <%= cat.title_translations["zh_tw"] %></a>
<a href="#" class="<%= is_admin ? "open-slide" : "" %>" data-title="Edit" data-form="<%= cat.title_translations.to_json %>" data-id="<%= cat.id.to_s %>" ><%= cat.title_translations["en"] %> / <%= cat.title_translations["zh_tw"] %></a>
</div>
<% end %>

View File

@ -0,0 +1,19 @@
<% existing_members_limit = 4 %>
<label class="control-label muted"><%= t(:existing_members) %></label>
<div class="controls" id="existing-member-avatar-holder">
<% @existing_members.each_with_index do |em,i| %>
<% if em["id"] != current_user.id.to_s %>
<img data-member-id="<%= em["id"] %>" class="existing-phone-avatar" src="<%= em["avatar"] %>" style="width:75px;height:75px;" />
<% end %>
<% if i == existing_members_limit %>
<span class="existing-member-count"> &hellip; <%= (@existing_members.count - existing_members_limit).to_s %> more.</span>
<% break
end %>
<% end %>
<% if @existing_members.count > 1 %>
<a href="#existing_members_dialog" data-toggle="modal"> Edit members</a>
<% else %>
No members.
<% end %>
</div>

View File

@ -28,7 +28,11 @@
<div class="control-group">
<label class="control-label muted"><%= t(:category) %></label>
<div class="controls">
<%= f.select :group_category_id, @categories %>
<% if params[:action] == "new" %>
<%= f.select :group_category_id, @categories %>
<% else %>
<%= @group.group_category.title %>
<% end %>
</div>
</div>
<!-- group banner image -->
@ -64,10 +68,10 @@
<label class="control-label muted">Privacy</label>
<div class="controls">
<label class="radio inline">
<input type="radio" name="group[privacy]" value="open" /> Open
<input type="radio" name="group[privacy]" value="open" <%= @group.privacy == "open" ? "checked='checked'" : "" %> /> Open
</label>
<label class="radio inline">
<input type="radio" name="group[privacy]" value="closed" checked="checked" /> Closed
<input type="radio" name="group[privacy]" value="closed" <%= @group.privacy == "closed" ? "checked='checked'" : "" %> /> Closed
</label>
</div>
</div>
@ -75,10 +79,10 @@
<label class="control-label muted">Permission</label>
<div class="controls">
<label class="radio inline">
<input type="radio" name="group[permission]" value="read" /> Read
<input type="radio" name="group[permission]" value="read" <%= @group.permission == "read" ? "checked='checked'" : "" %> /> Read
</label>
<label class="radio inline">
<input type="radio" name="group[permission]" value="write" checked="checked" /> Write
<input type="radio" name="group[permission]" value="write" <%= @group.permission == "write" ? "checked='checked'" : "" %> /> Write
</label>
</div>
</div>
@ -98,7 +102,11 @@
</select>
</div>
</div>
<% if params[:action] == "edit" %>
<div class="control-group" id="group_existing_member_holder">
<%= render :partial => "group_existing_member" %>
</div>
<% end %>
</div>
</div>
<!-- Language Tabs -->
@ -146,26 +154,29 @@
<!-- Form Actions -->
<div class="form-actions">
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= link_to t('cancel'), admin_groups_path, :class=>"btn" %>
</div>
<%= f.submit t('submit'), class: 'btn btn-primary' %>
<%= link_to t('cancel'), admin_groups_path, :class=>"btn" %>
</div>
<script type="text/javascript">
var locale = "<%= I18n.locale.to_s %>";
$(".member_selection").select2({
formatResult: function (el) {
var $el = $(el.element),
member = $el.data("member"),
name = (member.name[locale] == "" ? member.name.zh_tw : member.name[locale]),
user_name = "(" + member.user_name + ")",
text = name + " " + user_name;
if (!el.id) { return el.text; }
var $state = $(
'<span><img src="' + member.avatar + '" class="img-avatar" /> ' + text + '</span>'
);
return $state;
},
placeholder: "Add Members"
});
var locale = "<%= I18n.locale.to_s %>";
var bindSelect = function(){
$(".member_selection").select2({
formatResult: function (el) {
var $el = $(el.element),
member = $el.data("member"),
name = (member.name[locale] == "" ? member.name.zh_tw : member.name[locale]),
user_name = "(" + member.user_name + ")",
text = name + " " + user_name;
if (!el.id) { return el.text; }
var $state = $(
'<span><img src="' + member.avatar + '" class="img-avatar" /> ' + text + '</span>'
);
return $state;
},
placeholder: "Add Members"
});
}
bindSelect();
</script>

View File

@ -0,0 +1,23 @@
<% is_admin = current_user.is_admin? %>
<% @requested_categories.each do |rc| %>
<div class="group-category-item button button-primary">
<i class="group-category-tag-icon fa fa-tag"></i>
<a href="#"><%= rc.title_translations["en"] + "/" + rc.title_translations["zh_tw"] %></a>
<% if is_admin %>
<span class="group-category-controls">
<a href="#" class="group-category-approve tool-tip-parent">
<i class="fa fa-check"></i>
<span class="group-category-approve-tootip tool-tip">
Approve
</span>
</a>
<a href="#" class="group-category-reject tool-tip-parent">
<i class="fa fa-times"></i>
<span class="group-category-approve-tootip tool-tip">
Reject
</span>
</a>
</span>
<% end %>
</div>
<% end %>

View File

@ -15,7 +15,7 @@
</li>
<li>
<a class="group-category-tab-nav" href=".group-category-request" data-toggle="tab">
Request categories
Requested categories
</a>
</li>
</ul>
@ -23,31 +23,18 @@
<div class="group-category-existing tab-pane fade in active" id="category_holder_box">
<%= render :partial => "group_categories" %>
</div>
<div class="group-category-request fade">
<div class="group-category-item button button-primary">
<i class="group-category-tag-icon fa fa-tag"></i>
<a href="#">Request tag one</a>
<span class="group-category-controls">
<a href="#" class="group-category-approve tool-tip-parent">
<i class="fa fa-check"></i>
<span class="group-category-approve-tootip tool-tip">
Approve
</span>
</a>
<a href="#" class="group-category-reject tool-tip-parent">
<i class="fa fa-times"></i>
<span class="group-category-approve-tootip tool-tip">
Reject
</span>
</a>
</span>
</div>
<div class="group-category-request fade" id="requested_category_holder_box">
<%= render :partial => "group_requested_categories" %>
</div>
</div>
<div class="bottomnav clearfix">
<div class="action pull-right">
<a href="" class="btn btn-primary" data-toggle="modal" data-target="#categoryModal">Add new category</a>
<% if current_user.is_admin? %>
<a href="" class="btn btn-primary" data-toggle="modal" data-target="#categoryModal">Add new category</a>
<% else %>
<a href="" class="btn btn-primary" data-toggle="modal" data-target="#categoryModal">Request new category</a>
<% end %>
</div>
</div>
@ -70,6 +57,9 @@
</div>
</div>
<% end %>
<% if !current_user.is_admin? %>
<input type="hidden" value="0" name="category[is_accepted]" />
<% end %>
</form>
<div class="text-error text-center"><%= t(:category_notice) %></div>
</div>
@ -171,12 +161,16 @@
$.ajax({
url : "/admin/groups/create_category",
type : "post",
data: $("#create_category_form input[type=text]").serialize(),
data: $("#create_category_form input").serialize(),
}).done(function(data){
$.each($('#categoryModal .input-large'),function(){
$(this).val("");
});
$("#category_holder_box").html(data);
<% if current_user.is_admin? %>
$("#category_holder_box").html(data);
<% else %>
$("#requested_category_holder_box").html(data);
<% end %>
$('#categoryModal').modal('hide');
bindOpenSlide(true);
});

View File

@ -0,0 +1,94 @@
<%= form_for @group, :url => admin_group_path(@group.id), :html => { :multipart => true , :class=>"form-horizontal main-forms"} do |f| %>
<fieldset>
<%= render :partial => "group_form", locals: {f: f} %>
</fieldset>
<% end %>
<div class="modal fade" id="existing_members_dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Modify members</h4>
</div>
<div class="modal-body">
<table>
<% @existing_members.each do |em| %>
<tr>
<td><img src="<%= em["avatar"] %>" style="width:75px;height:75px;" /></td>
<td width="70%" <%= em["id"] != current_user.id.to_s ? "" : "colspan='3'" %>><h5><%= em["name"][I18n.locale.to_s] %></h5></td>
<% if em["id"] != current_user.id.to_s %>
<td><input type="checkbox" class="make-admin-checkbox" value="<%= em["id"] %>" <%= em["admin"] ? "checked='checked'" : ""%> /> Admin</td>
<td><a href="#" style="font-size:25px;" class="member-delete-btn" data-member="<%= em.to_json %>"><i class="icon-trash"></i></a></td>
<% end %>
</tr>
<% end %>
</table>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
<script type="text/javascript">
var members_to_add = [],
existing_members_count = <%= @existing_members.count.to_s %>;
$("#existing_members_dialog").on("shown",function(){
members_to_add = [];
})
$("#existing_members_dialog").on("hidden",function(){
if(members_to_add.length > 0){
var options = "";
$.each(members_to_add,function(i,member){
$(".existing-phone-avatar[data-member-id="+member["id"]+"]").remove();
options+= "<option value='" + member["id"] + "' data-member='" + JSON.stringify(member) + "'>" + member["name"][locale] + "</option>";
})
$(".member_selection").select2("destroy").append(options);
$.ajax({
url : "/admin/groups/existing_member_template",
data : {"group_id" : "<%= @group.id.to_s %>"},
dataType : "html"
}).done(function(template){
$("#group_existing_member_holder").html(template);
})
bindSelect();
}
})
$(".member-delete-btn").on("click",function(){
if(confirm("Are you sure?")){
var el = $(this),
tr = el.parent().parent();
members_to_add.push(el.data("member"));
$.ajax({
url : "/admin/groups/<%= @group.id.to_s %>/remove_user",
data : {"user_id" : el.data("member")["id"]},
dataType : "json",
type : "post"
}).done(function(){
tr.slideUp(function(){
tr.remove();
})
})
}
})
$(".make-admin-checkbox").on("click",function(){
var el = $(this),
admin = el.is(":checked");
$.ajax({
url : "/admin/groups/<%= @group.id.to_s %>/toggle_admin",
data : {"user_id" : el.val(), "admin" : admin},
dataType : "json",
type : "post"
})
})
</script>

View File

@ -43,7 +43,7 @@
<%= content_tag :li, link_to((content_tag(:span, "My Groups")), admin_groups_path), :class => active_for_action('groups', 'index') %>
<%= content_tag :li, link_to((content_tag(:span, "Public Groups")), admin_groups_public_path), :class => active_for_action('groups','public_groups') %>
<%= content_tag :li, link_to((content_tag(:span, "Create New Group")), new_admin_group_path), :class => active_for_action('groups','new') %>
<%= content_tag :li, link_to((content_tag(:span, "Categories")), admin_groups_categories_path), :class => active_for_action('groups','categories') if current_user.is_admin? %>
<%= content_tag :li, link_to((content_tag(:span, "Categories")), admin_groups_categories_path), :class => active_for_action('groups','categories') %>
<% end -%>
</div>
<div class="sub-nav-block" data-icons="&#xe070;">

View File

@ -125,6 +125,9 @@ Orbit::Application.routes.draw do
# GROUPS START HERE
get "groups/categories" => 'groups#categories'
post "groups/create_category" => 'groups#create_category'
post "groups/:group_id/remove_user" => 'groups#remove_user'
post "groups/:group_id/toggle_admin" => 'groups#toggle_admin'
get "groups/existing_member_template" => 'groups#get_existing_member_template'
get "groups/public" => 'groups#public_groups'
patch "groups/updatecategory/:category_id" => 'groups#update_category'
get "posts/:id" => 'groups#showpost'