Skip to content

Commit

Permalink
Adds group functionality and variety of other changes
Browse files Browse the repository at this point in the history
  • Loading branch information
gbprz committed Jul 18, 2014
1 parent 99fdb93 commit b7e7380
Show file tree
Hide file tree
Showing 19 changed files with 240 additions and 39 deletions.
12 changes: 12 additions & 0 deletions app/assets/stylesheets/application.css.scss
Expand Up @@ -47,4 +47,16 @@ body {
background: #C2D6FF;
}
}
}

footer {
font-size: 14px;
clear: both;
position: relative;
z-index: 10;
height: 3em;
margin-top: -3em;
p {
text-align: center;
}
}
1 change: 1 addition & 0 deletions app/assets/stylesheets/documents.css.scss
Expand Up @@ -28,6 +28,7 @@
}

.document_show {
margin-left: 300px;
position: relative;
text-align: center;
}
21 changes: 20 additions & 1 deletion app/controllers/categories_controller.rb
Expand Up @@ -7,6 +7,10 @@ def index
@latest_docs = Document.latest_docs
end

def manage
@categories = Category.all
end

def show
@category = Category.find params[:id]
@subcategories = @category.children
Expand Down Expand Up @@ -37,7 +41,22 @@ def create
else
redirect_to "/"
end
end
end

def edit
@category = Category.find_by_id(params[:id])
end

def update
@category = Category.find_by_id(params[:id])
@category.update_attributes(category_params)
redirect_to edit_category_path(@category)
end

def destroy
@category = Category.find_by_id(params[:id]).destroy
redirect_to manage_categories_path
end

private
def category_params
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/documents_controller.rb
Expand Up @@ -13,7 +13,7 @@ def download
# Get the most recent revision when downloading a document
@document = @document.current_revision.last
# Increment download count
@document.increment!("download_count")
@document.increment!(:download_count)
# Send file binary data to user's browser
send_data(@document.file_data, :type => @document.file_type, :filename => @document.file_name, :disposition => "inline")
else
Expand Down
20 changes: 18 additions & 2 deletions app/controllers/groups_controller.rb
Expand Up @@ -22,20 +22,36 @@ def create
end

def edit

@group = Group.find_by_id(params[:id])
end

def update
@group = Group.find_by_id(params[:id])
@group.update_attributes(group_params)
redirect_to @group
end

def add_member
leader = Membership.new(leader_params)
leader.group_id = params[:id]
leader.save

redirect_to edit_group_path(params[:id])
end

def destroy

group = Group.find_by_id(params[:id])
group.destroy
redirect_to groups_path
end

private
def group_params
params.require(:group).permit(:name)
end

def leader_params
params.require(:membership).permit(:user_id, :level)
end

end
8 changes: 6 additions & 2 deletions app/models/category.rb
Expand Up @@ -49,11 +49,15 @@ def self_and_siblings
end

def self.featured
categories = Category.where(is_featured: true)
# Show featured categories & their documents on the home page
# Select featured and public categories
categories = Category.where(is_featured: true, is_private: false)
featured_docs = {}

# select a categories documents that are private, order by upload date
# and choose only the most recent four to display
categories.each do |cat|
featured_docs[cat.id] = cat.documents.order("updated_at desc")[0..3]
featured_docs[cat.id] = cat.documents.where(is_private: false).order("updated_at desc")[0..3]
end

featured_docs
Expand Down
32 changes: 30 additions & 2 deletions app/models/group.rb
Expand Up @@ -3,7 +3,35 @@ class Group < ActiveRecord::Base
has_many :memberships, dependent: :destroy
has_many :users, through: :memberships

has_many :members, -> {where(level: Membership::LEVELS[:regular])}, :through => :memberships, :source => :user
has_many :leaders, -> {where(level: Membership::LEVELS[:leader])}, :through => :memberships, :source => :user
def leaders
memberships = Membership.where(group_id: id, level: Membership::LEVELS[:leader])
end

def members
regular_members = Membership.where(group_id: id, level: Membership::LEVELS[:regular])
end

def leader_names
names = Array.new
leaders.each { |leader| names << leader.user.username }
names.join(", ")
end

def member_names
names = Array.new
members.each { |member| names << member.user.username }
names.join(", ")
end

def documents
documents = Array.new
categories = Category.where(group_id: id)
categories.each do |cat|
cat.documents.each do |doc|
documents << doc
end
end
documents
end

end
2 changes: 2 additions & 0 deletions app/models/membership.rb
Expand Up @@ -3,6 +3,8 @@ class Membership < ActiveRecord::Base
belongs_to :group
belongs_to :user

validates :user_id, uniqueness: {scope: [:level, :group_id]}

LEVELS = {
regular: 1,
leader: 9
Expand Down
16 changes: 3 additions & 13 deletions app/views/categories/_categories_nav.html.erb
Expand Up @@ -4,11 +4,7 @@
<%= render partial: "documents/upload" %>

<!-- Previous category navigation -->
<% if !@category.nil? and @category.parent %>
<%= link_to "<< prev", @category.parent %>
<% elsif !@category.nil? %>
<%= link_to "<< prev", categories_path %>
<% end %>
<%= render partial: "categories/previous_navigation" %>

<div class="categories_list">
<!-- Title -->
Expand All @@ -32,14 +28,8 @@
<hr />
<div class="category_btn">
<%= link_to "New Category", new_category_path, :class => "category_text" %>
<%= link_to "Edit Categories", "", :class => "category_text" %>
<%= link_to "Edit Categories", manage_categories_path, :class => "category_text" %>
</div>
<% end %>
</div>
</div>

<!--
<div class="footer">
Copyright 2014 RPI Web Technologies Group
</div>
-->
</div>
24 changes: 15 additions & 9 deletions app/views/categories/_featured_categories.html.erb
@@ -1,12 +1,18 @@
<% @featured.each do |cat, docs| %>
<div class="featured_category">
<ol class="breadcrumb featured_category_title">
<li><%= Category.find_by_id(cat).name %></li>
</ol>
<div class="categories_grid">
<% docs.each do |doc| %>
<%= render partial: "documents/document_list_item", locals: {doc: doc} %>
<% end %>
<!-- Limit the number of featured categories to 3
and only show categories with documents available -->
<% total_featured = 0 %>
<% if docs.length > 0 or total_featured > 2 %>
<% total_featured += 1 %>
<div class="featured_category">
<ol class="breadcrumb featured_category_title">
<li><%= Category.find_by_id(cat).name %></li>
</ol>
<div class="categories_grid">
<% docs.each do |doc| %>
<%= render partial: "documents/document_list_item", locals: {doc: doc} %>
<% end %>
</div>
</div>
</div>
<% end %>
<% end %>
5 changes: 5 additions & 0 deletions app/views/categories/_previous_navigation.html.erb
@@ -0,0 +1,5 @@
<% if !@category.nil? and @category.parent %>
<%= link_to "<< prev", @category.parent, :class => "prev_category" %>
<% elsif !@category.nil? %>
<%= link_to "<< prev", categories_path, :class => "prev_category" %>
<% end %>
13 changes: 13 additions & 0 deletions app/views/categories/edit.html.erb
@@ -0,0 +1,13 @@
<div class="panel panel-default">
<ol class="breadcrumb">
<li><%= link_to "Home", categories_path %></li>
<li><%= link_to "Categories Index", manage_categories_path %></li>
<li class="active"> <%= "Editing #{@category.name}" %></li>
</ol>

<div class="panel-body">
<%= form_for @category do |f| %>
<% end %>
</div>
</div>
37 changes: 37 additions & 0 deletions app/views/categories/manage.html.erb
@@ -0,0 +1,37 @@
<div class="panel panel-default">
<ol class="breadcrumb">
<li><%= link_to "Home", categories_path %></li>
<li class="active">Manage Categories</li>
</ol>

<div class="panel-body">
<table class="table">
<tr>
<th> Category name </th>
<th> Group </th>
<th> Parent </th>
<th> Featured? </th>
<th> Private? </th>
<th> Actions </th>
</tr>
<% @categories.each do |cat| %>
<tr>
<td> <%= cat.name %> </td>
<td> </td>
<td>
<% if cat.parent %>
<%= link_to cat.parent.name, cat.parent %>
<% else %>
None
<% end %>
</td>
<td> <%= cat.is_featured? ? "yes" : "no" %> </td>
<td> <%= cat.is_private? ? "yes" : "no" %> </td>
<td> <%= link_to "Edit", edit_category_path(cat), :class => "btn btn-primary btn-xs" %>
<%= link_to "Delete", category_path(cat), method: :delete, :class => "btn btn-primary btn-xs" %>
</td>
</tr>
<% end %>
</table>
</div>
</div>
44 changes: 44 additions & 0 deletions app/views/groups/edit.html.erb
@@ -0,0 +1,44 @@
<div class="panel panel-default">
<ol class="breadcrumb">
<li><%= link_to "Home", categories_path %></li>
<li><%= link_to "Groups Index", groups_path %></li>
<li class="active"> <%= "Editing #{@group.name}" %></li>
</ol>

<div class="panel-body">
<div class="col-md-8">
<div class="row">
<%= form_for @group do |f| %>
<%= f.label :name %>
<%= f.text_field :name, :class => "form-control", placeholder: @group.name %>
<br />
<%= f.submit "submit", :class => "btn btn-default btn-xs" %>
<% end %>

<h3> Group Leaders </h3>
<%= @group.leader_names %>
<hr />

<%= form_for :membership, url: add_member_group_path(group_id: params[:id]) do |l| %>
<%= l.label :add_leader %>
<%= l.select :user_id, User.all.collect { |u| [u.username, u.id] }, {include_blank: true} %>
<%= l.hidden_field :level, value: Membership::LEVELS[:leader] %>
<%= l.submit "add", :class => "btn btn-default btn-xs" %>
<% end %>
<hr />

<h3> Group Members </h3>
<%= @group.member_names %>
<hr />

<%= form_for :membership, url: add_member_group_path(group_id: params[:id]) do |m| %>
<%= m.label :add_member %>
<%= m.select :user_id, User.all.collect { |u| [u.username, u.id]}, {include_blank: true} %>
<%= m.hidden_field :level, value: Membership::LEVELS[:regular] %>
<%= m.submit "add", :class => "btn btn-default btn-xs" %>
<% end %>

</div>
</div>
</div>
</div>
18 changes: 13 additions & 5 deletions app/views/groups/index.html.erb
Expand Up @@ -17,12 +17,20 @@
</tr>
<% @groups.each do |group| %>
<tr>
<td> <%= group.name %> </td>
<td> <%= group.leaders %> </td>
<td> <%= group.members %> </td>
<td> <%= link_to group.name, group_path(group) %> </td>
<td>
<%= link_to "Edit", "" %>
<%= link_to "Delete", "" %>
<% if group.leaders.length > 0 %>
<%= group.leader_names %>
<% end %>
</td>
<td>
<% if group.members.length > 0 %>
<%= group.member_names %>
<% end %>
</td>
<td>
<%= link_to "Edit", edit_group_path(group), :class => "btn btn-primary btn-xs" %>
<%= link_to "Delete", group_path(group), method: :delete, :class => "btn btn-primary btn-xs" %>
</td>
</tr>
<% end %>
Expand Down
8 changes: 7 additions & 1 deletion app/views/groups/show.html.erb
Expand Up @@ -2,17 +2,23 @@
<ol class="breadcrumb">
<li><%= link_to "Home", categories_path %></li>
<li class="active"><%= @group.name.capitalize %></li>
<div class="pull-right"><%= link_to "Edit", edit_group_path(@group), :class => "btn btn-primary btn-xs" %></div>
</ol>

<div class="panel-body">
<h3>
<%= @group.name.capitalize %>
</h3>
<hr />
<h4> Leaders </h4>
<%= @group.leader_names %>
<h4> Members </h4>
<%= @group.member_names %>
<br />
<h4> Documents Uploaded </h4>
<% @group.documents.each do |doc| %>
<%= render partial: "documents/document_list_item", locals: {doc: doc} %>
<% end %>
</div>

</div>

0 comments on commit b7e7380

Please sign in to comment.