group mods for edit post

This commit is contained in:
Harry Bomrah 2015-05-28 14:19:55 +08:00
parent 2fc15eab29
commit e8b727af01
11 changed files with 300 additions and 67 deletions

View File

@ -33,6 +33,14 @@ class Admin::GroupsController < OrbitGroupController
redirect_to admin_group_path(@group)
end
def updatepost
@post = GroupPost.find(params[:id])
group = @post.group
@post.update_attributes(post_update_params)
@post.save
redirect_to admin_group_path(group)
end
def deletepost
gp = GroupPost.find(params[:id])
gp.destroy
@ -52,6 +60,12 @@ class Admin::GroupsController < OrbitGroupController
}
end
def editpost
render_401 and return if @post.author != current_user.id
@no_breadcrumb = true
@grouppost = @post
end
def show
@no_breadcrumb = true
@no_filter = true
@ -263,6 +277,42 @@ class Admin::GroupsController < OrbitGroupController
p
end
def post_update_params
p = params.require(:group_post).permit!
p["author"] = current_user.id
params[:images_to_destroy].each do |img|
gpi = GroupPostImage.find(img) rescue nil
gpi.destroy if !gpi.nil?
end if !params[:images_to_destroy].nil?
images = @post.group_post_images
p[:group_post_images].each do |id|
gpi = GroupPostImage.find(id) rescue nil
if !gpi.nil?
images << gpi
end
end if !p[:group_post_images].nil?
params[:files_to_destroy].each do |fil|
gpf = GroupPostFile.find(fil) rescue nil
gpf.destroy if !gpf.nil?
end if !params[:files_to_destroy].nil?
files = @post.group_post_files
p[:group_post_files].each do |id|
gpf = GroupPostFile.find(id) rescue nil
if !gpf.nil?
files << gpf
end
end if !p[:group_post_files].nil?
p[:group_post_images] = images
p[:group_post_files] = files
p
end
def post_image_params
params.require(:group_post_image).permit!
end

View File

@ -10,7 +10,7 @@ class OrbitGroupController < ApplicationController
when "newpost", "createpost", "members"
uid = params[:group_id].split("-").last
@group = Group.find_by(:uid => uid)
when "showpost"
when "showpost", "editpost"
uid = params[:id].split("-").last
@post = GroupPost.find_by(:uid => uid)
@group = @post.group
@ -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", "edit", "members"
when "show", "showpost", "newpost", "edit", "members", "editpost"
is_member = @group.users.include?(current_user)
if @group.admins.include?(current_user.id.to_s)
@access_right_level = "admin"

View File

@ -20,5 +20,9 @@ class Group
scope :archived, ->{ where(archive: true) }
scope :not_archived, ->{ where(archive: false) }
def privacy_name
return self.privacy == "closed" ? "private" : "public"
end
end

View File

@ -25,7 +25,9 @@
</div>
<% end %>
<div class="group-avatar">
<a href="<%= admin_group_path(group) %>">
<%= image_tag(group.image) %>
</a>
</div>
<div class="group-info">
<h4 class="group-name"><%= link_to group.title, admin_group_path(group) %></h4>
@ -44,7 +46,7 @@
<ul class="group-roles">
<li class="group-privacy">
<span class="group-staturs">Privacy : </i>
<span class="label <%= group.privacy == 'closed' ? "private" : "public" %>"><%= group.privacy %></span>
<span class="label <%= group.privacy_name %>"><%= group.privacy_name %></span>
</li>
<li class="group-description">
<% content = group.description %>

View File

@ -68,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" <%= @group.privacy == "open" ? "checked='checked'" : "" %> /> Open
<input type="radio" name="group[privacy]" value="open" <%= @group.privacy == "open" ? "checked='checked'" : "" %> /> Public
</label>
<label class="radio inline">
<input type="radio" name="group[privacy]" value="closed" <%= @group.privacy == "closed" ? "checked='checked'" : "" %> /> Closed
<input type="radio" name="group[privacy]" value="closed" <%= @group.privacy == "closed" ? "checked='checked'" : "" %> /> Private
</label>
</div>
</div>

View File

@ -5,13 +5,22 @@
<span class="caret"></span>
</button>
<ul class="group-post-dropdown">
<% if post.author.to_s != current_user.id.to_s %>
<li class="group-post-dropdown-item">
<a href="#">
<i class="fa fa-flag-o"></i>
Flag inappropriate</a>
</a>
</li>
<% if is_user_group_admin? || post.author.to_s == current_user.id.to_s %>
<% else %>
<li class="group-post-dropdown-item">
<a href="/admin/post/<%= post.to_param %>/edit">
<i class="fa fa-pencil-square-o"></i>
Edit this post
</a>
</li>
<% end %>
<% if is_user_group_admin? || post.author.to_s == current_user.id.to_s%>
<li class="group-post-dropdown-item">
<a href="/admin/posts/<%= post.id.to_s %>" class="delete-post-btn">
<i class="fa fa-trash-o"></i>

View File

@ -34,13 +34,19 @@
<div class="control-group">
<label class="control-label muted"><%= t(:images) %></label>
<div class="controls">
<!-- <input name="group_post_images" type="file" multiple > -->
<% if params[:action] == "editpost" %>
<div>
<% @grouppost.group_post_images.each do |gpi| %>
<span>
<img src="<%= gpi.image.thumb.url %>" style="width:120px;" />
<input type="checkbox" name="images_to_destroy[]" value="<%= gpi.id.to_s %>" /> Delete Image
</span>
<% end %>
</div>
<% end %>
<div class="dropzone dropzone-pool" id="group-post-images">
<div class="dropzone-previews" id="group-post-images-container"></div>
</div>
<% if params[:action] == "editpost" %>
<button class="upload_image_btn btn">Upload</button>
<% end %>
<button class="remove_image_btn btn btn-warning">
<i class="fa fa-ban"></i>
<span>Remove all images</span>
@ -76,13 +82,19 @@
<div class="control-group">
<label class="control-label muted"><%= t(:files) %></label>
<div class="controls">
<!-- <input name="group_post_images" type="file" multiple > -->
<% if params[:action] == "editpost" %>
<div>
<% @grouppost.group_post_files.each do |gpf| %>
<span>
<span><%= File.basename(gpf.file.path) %></span>
<input type="checkbox" name="files_to_destroy[]" value="<%= gpf.id.to_s %>" /> Delete File
</span>
<% end %>
</div>
<% end %>
<div class="dropzone dropzone-pool" id="group-post-files">
<div class="dropzone-previews" id="group-post-files-container"></div>
</div>
<% if params[:action] == "editpost" %>
<button class="upload_file_btn">Upload</button>
<% end %>
<button class="remove_file_btn btn btn-warning">
<i class="fa fa-ban"></i>
<span>Remove all files<span>

View File

@ -0,0 +1,148 @@
<%= form_for @post, :url => "/admin/post/#{@post.id.to_s}/updatepost", :html => { :multipart => true , :class=>"form-horizontal main-forms", :id=>"edit_post_form"} do |f| %>
<fieldset>
<%= render :partial => "post_form", locals: {f: f} %>
</fieldset>
<% end %>
<script type="text/javascript">
Dropzone.autoDiscover = false;
var image_id_panel = $("#image_ids"),
file_id_panel = $("#file_ids"),
total_images = 0,
total_files = 0;
var groupImageDropzone = new Dropzone("div#group-post-images", {
url : "/admin/posts/image",
previewsContainer : "#group-post-images-container",
paramName : "group_post_image[image]",
clickable : true,
autoProcessQueue : false,
maxFilesize : 2,
addRemoveLinks : true,
uploadMultiple : false,
accept: function(file, done) {
var regex = new RegExp(/(\.|\/)(gif|jpe?g|png)$/i)
if(regex.test(file.name)){
total_images++;
done();
}else{
this.removeFile(file);
}
}
})
$(".upload_image_btn").on("click",function(){
$("#group-post-images a.dz-remove").remove();
doImagesUpload();
return false;
})
$(".remove_image_btn").on("click",function(){
groupImageDropzone.removeAllFiles();
return false;
})
groupImageDropzone.on("success",function(file,data){
image_id_panel.append("<input type='hidden' name='group_post[group_post_images][]' value='" + data.id + "' />");
total_images--;
if(total_images == 0){
if(groupFilesDropzone.getQueuedFiles().length > 0){
doFilesUpload();
}else{
submitForm();
}
}
})
groupImageDropzone.on("sending",function(file,xhr,obj){
obj.append("authenticity_token",$("form#edit_post_form input[name=authenticity_token]").val());
})
var doImagesUpload = function(){
groupImageDropzone.processQueue();
groupImageDropzone.on("complete", function(file) {
var filesCount = groupImageDropzone.getQueuedFiles().length;
if(filesCount > 0){
doImagesUpload();
}
});
}
var groupFilesDropzone = new Dropzone("div#group-post-files", {
url : "/admin/posts/file",
previewsContainer : "#group-post-files-container",
paramName : "group_post_file[file]",
clickable : true,
autoProcessQueue : false,
addRemoveLinks : true,
uploadMultiple : false,
maxFilesize : 6,
accept: function(file, done) {
var regex = new RegExp(/(\.|\/)(pdf|doc?x|xls?x|rtf|txt|ppt?x|mp3|mov|avi|gif|jpe?g|png|zip|rar)$/i)
if(regex.test(file.name)){
total_files++;
done();
}else{
this.removeFile(file);
}
}
})
$(".upload_file_btn").on("click",function(){
$("#group-post-files a.dz-remove").remove();
doFilesUpload();
return false;
})
$(".remove_file_btn").on("click",function(){
groupFilesDropzone.removeAllFiles();
return false;
})
groupFilesDropzone.on("success",function(file,data){
file_id_panel.append("<input type='hidden' name='group_post[group_post_files][]' value='" + data.id + "' />");
total_files--;
if(total_files == 0){
submitForm();
}
})
groupFilesDropzone.on("sending",function(file,xhr,obj){
obj.append("authenticity_token",$("form#edit_post_form input[name=authenticity_token]").val());
})
var doFilesUpload = function(){
groupFilesDropzone.processQueue();
groupFilesDropzone.on("complete", function(file) {
var filesCount = groupFilesDropzone.getQueuedFiles().length;
if(filesCount > 0){
doFilesUpload();
}
});
}
$("#create-post-form-btn").on("click",function(){
if(groupImageDropzone.getQueuedFiles().length > 0){
doImagesUpload();
}else if(groupFilesDropzone.getQueuedFiles().length > 0){
doFilesUpload();
}else{
submitForm();
}
// uploading all the files
$(".upload-status-notice")
.removeClass("hide")
.addClass("animated slideInRight");
return false;
})
var submitForm = function(){
if(groupImageDropzone.getQueuedFiles().length > 0 || groupFilesDropzone.getQueuedFiles().length > 0){
return false;
}else{
$(".upload-status-notice span.upload-text").text("Submitting");
$("form#edit_post_form").submit();
return false;
}
}
</script>

View File

@ -22,7 +22,6 @@
var regex = new RegExp(/(\.|\/)(gif|jpe?g|png)$/i)
if(regex.test(file.name)){
total_images++;
console.log(total_images)
done();
}else{
this.removeFile(file);

View File

@ -52,16 +52,23 @@
<div class="group-post-description-wrap" id="group_info_area" style="display:none;">
<% if @group.privacy == "closed" %>
<span class="group-post-status-wrap close-eye button button-activated">
<i class="group-post-status icon-eye-open"></i> Closed
<i class="group-post-status icon-eye-open"></i> Private
</span>
<% else %>
<span class="group-post-status-wrap open-eye button button-activated">
<i class="group-post-status icon-eye-open"></i> Open
<i class="group-post-status icon-eye-open"></i> Public
</span>
<% end %>
<h4 class="muted">Group Description</h4>
<p class="group-post-description"><%= @group.description %></p>
<p><a href="<%= admin_group_members_path(@group) %>"><%= @group.users.count %> members.</a></p>
<p>
<% number_of_members = @group.users.count %>
<% if number_of_members > 0 %>
<a href="<%= admin_group_members_path(@group) %>"><%= number_of_members.to_s %> member<%= number_of_members > 1 ? "s" : "" %></a>
<% else %>
No members
<% end %>
</p>
</div>
</div>
<%= render :partial => "post", :collection => @group.group_posts.desc(:created_at) %>

View File

@ -135,6 +135,8 @@ Orbit::Application.routes.draw do
post "posts/file" => 'groups#upload_file'
get "posts/file/:id" => "groups#download_file"
delete "posts/:id" => "groups#deletepost"
get "post/:id/edit" => "groups#editpost"
patch "post/:id/updatepost" => "groups#updatepost"
post "posts/comment" => 'groups#new_comment'
resources :groups do