diff --git a/Gemfile b/Gemfile index 09643ba..62a6501 100644 --- a/Gemfile +++ b/Gemfile @@ -31,6 +31,8 @@ gem 'sdoc', '~> 0.4.0', group: :doc #auth gem 'devise' gem 'cancancan', '~> 1.7' +#gem 'will_paginate','~>3.0.5' + # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' diff --git a/README.rdoc b/README.rdoc index 318755a..a7064fd 100644 --- a/README.rdoc +++ b/README.rdoc @@ -13,5 +13,11 @@ 2) Семуков Илья 3) Синельников Дмитрий -Хероку : +Хероку (крайняя версия): https://rubybursa-social.herokuapp.com/ + + +Реализованный функционал: +1) Регистрация пользователя/сообщества +2) Возможностью менять информацию в профиле +3) Возможность отправлять и получать сообщения от зарегистрированный пользователей diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..e848a2d 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,14 @@ class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + #before_action :authenticate_user! + before_filter :configure_permitted_parameters, if: :devise_controller? + + protected + + def configure_permitted_parameters + devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:email, :password, :kind, :name)} + devise_parameter_sanitizer.for(:account_update){|u| u.permit(:email, :password, :current_password, :name)} + + end end diff --git a/app/controllers/communities_controller.rb b/app/controllers/communities_controller.rb new file mode 100644 index 0000000..d3c58bb --- /dev/null +++ b/app/controllers/communities_controller.rb @@ -0,0 +1,53 @@ +class CommunitiesController < ApplicationController +before_action :find_current_community, only: [:show, :edit, :update] +before_filter :authenticate_user! + + def index + @communities = Community.all + end + + def show + + end + + def edit + render :new unless @community + end + + + def update + if @community.update(community_params) + render :show + else + render :edit + end + end + + + def new + @community = Community.new + end + + def create + @community = Community.new(community_params) + @community.user_id = current_user.id + if @community.save + render :show + else + render :new + end + end + + + private + + + def community_params + params.require(:community).permit(:subject) + end + + + def find_current_community + @community = Community.where(id: params[:id]).take + end +end diff --git a/app/controllers/community_memberships_controller.rb b/app/controllers/community_memberships_controller.rb new file mode 100644 index 0000000..6cb1eda --- /dev/null +++ b/app/controllers/community_memberships_controller.rb @@ -0,0 +1,45 @@ +class CommunityMembershipsController < ApplicationController +before_action :find_current_community_membership, only: [:show, :destroy] +before_filter :authenticate_user! + + def index + + end + + def show + + end + + + def new + @community_membership = CommunityMembership.new + end + + def create + @community_membership = CommunityMembership.new(community_params) + @community_membership.community_id = current_user.id + if @community_membership.save + render :show + else + render :new + end + end + + def destroy + community_id = @community_membership.community_id + @community_membership.destroy + redirect_to url_for(:controller => :communities, :action => :show, :id => community_id) + end + + private + + + def community_membership_params + params.require(:community_membership).permit(:user_id) + end + + + def find_current_community_membership + @community_membership = CommunityMembership.where(id: params[:id]).take + end +end diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb new file mode 100644 index 0000000..2d2af19 --- /dev/null +++ b/app/controllers/messages_controller.rb @@ -0,0 +1,27 @@ +class MessagesController < ApplicationController + + before_action :authenticate_user! + +def index + @message_recieve = [] + @message_send = [] + current_user.recieved_messages.each {|t| @message_recieve << [User.find(t.user_id_to).name, t.message_text] } + current_user.send_messages.each {|t| @message_send << [User.find(t.user_id_from).name, t.message_text] } + + + @users = User.all + + if request.method == "POST" + mes = Message.new + mes.message_text = params[:message] + current_user.send_messages << mes + User.find((params[:recive_id])).recieved_messages << mes + @test = params[:recive_id] + mes.save + redirect_to :action => :index + end +end + + + +end diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb new file mode 100644 index 0000000..d463fd0 --- /dev/null +++ b/app/controllers/people_controller.rb @@ -0,0 +1,52 @@ +class PeopleController < ApplicationController +before_action :find_current_person, only: [:show, :edit, :update] +before_filter :authenticate_user! + + def index + @people = Person.all + end + + def show + + end + + def edit + render :new unless @person + end + + def update + if @person.update(person_params) + render :show + else + render :edit + end + end + + def new + @person = Person.new + end + + def create + @person = Person.new(person_params) + @person.user_id = current_user.id + if @person.save + redirect_to url_for(:controller => :people, :action => :show, :id => @person.id) + else + render :new + end + end + + + private + + + def person_params + params.require(:person).permit(:surename, :date_of_birth) + end + + def find_current_person + @person = Person.where(id: params[:id]).take + end + + +end diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb new file mode 100644 index 0000000..0380e35 --- /dev/null +++ b/app/controllers/posts_controller.rb @@ -0,0 +1,55 @@ +class PostsController < ApplicationController +before_action :find_current_post, only: [:show, :edit, :update, :destroy] +before_filter :authenticate_user! + + def index + + end + + def show + + end + + def edit + render :new unless @post + end + + def update + if @post.update(post_params) + render :show + else + render :edit + end + end + + def new + @post = Post.new + end + + def create + @post = Post.new(post_params) + @post.user_id = current_user.id + if @post.save + render :show + else + render :new + end + end + + def destroy + @post.destroy + redirect_to user_root_path + end + + private + + + def post_params + params.require(:post).permit(:content, :publish_date) + end + + def find_current_post + @post = Post.where(id: params[:id]).take + end + +end diff --git a/app/controllers/user_relations_controller.rb b/app/controllers/user_relations_controller.rb new file mode 100644 index 0000000..7439500 --- /dev/null +++ b/app/controllers/user_relations_controller.rb @@ -0,0 +1,45 @@ +class UserRelationsController < ApplicationController +before_action :find_current_user_relation, only: [:show, :destroy] +before_filter :authenticate_user! + + def index + + end + + def show + + end + + + def new + @user_relation = UserRelation.new + end + + def create + @user_relation = CommunityMembership.new(user_relation_params) + @user_relation.user_owner_id = current_user.id + if @user_relation.save + rednder :show + else + render :new + end + end + + def destroy + @user_relation.destroy + redirect_to user_root_path + end + + private + + + def user_relation_params + params.require(:community_membership).permit(:user_rel_id) + end + + + def find_current_user_relation + @user_relation = UserRelation.where(id: params[:id]).take + end + +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 59e9eab..1b88c86 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,4 +1,40 @@ class UsersController < ApplicationController + def profile end -end + + def show_profile + if current_user == nil + redirect_to new_user_session_path + return + end + + user = User.where(id: current_user.id).take + if user == nil + redirect_to root_path + return + end + + if user.person? + person = Person.where(user_id: user.id).take + if person == nil + redirect_to url_for(:controller => :people, :action => :new) + else + redirect_to url_for(:controller => :people, :action => :show, :id => person.id) + end + + elsif user.community? + community = Community.where(user_id: user.id).take + if community == nil + redirect_to url_for(:controller => :communities, :action => :new) + else + redirect_to url_for(:controller => :communities, :action => :show, :id =>community.id) + end + else + redirect_to root_path + end + + + end + +end \ No newline at end of file diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 89f412e..573baa1 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,4 +1,5 @@ class WelcomeController < ApplicationController def index + end end \ No newline at end of file diff --git a/app/models/community.rb b/app/models/community.rb index 454db8b..372fe6c 100644 --- a/app/models/community.rb +++ b/app/models/community.rb @@ -1,4 +1,9 @@ class Community < ActiveRecord::Base - has_one :user, :foreign_key => "id" - has_many :users, through: :community_memberships, dependent: :destroy + belongs_to :user, :foreign_key => "user_id" + has_many :users, through: :community_memberships#, dependent: :destroy + has_many :community_memberships, dependent: :destroy + + def user + User.where(id: self.user_id).take + end end diff --git a/app/models/community_membership.rb b/app/models/community_membership.rb index 050c12b..60adf5b 100644 --- a/app/models/community_membership.rb +++ b/app/models/community_membership.rb @@ -1,4 +1,12 @@ class CommunityMembership < ActiveRecord::Base - belongs_to :user - belongs_to :community + belongs_to :user, :foreign_key => "user_id" + belongs_to :community, :foreign_key => "community_id" + + def user + User.where(id: self.user_id).take + end + + def community + Community.where(id: self.community_id).take + end end diff --git a/app/models/message.rb b/app/models/message.rb new file mode 100644 index 0000000..9f3f0d1 --- /dev/null +++ b/app/models/message.rb @@ -0,0 +1,4 @@ +class Message < ActiveRecord::Base +belongs_to :message_to_user, class_name: "User", foreign_key: "message_to" +belongs_to :message_from_user, class_name: "User", foreign_key: "message_from" +end diff --git a/app/models/person.rb b/app/models/person.rb index 5352276..5380967 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -1,3 +1,8 @@ class Person < ActiveRecord::Base - has_one :user, :foreign_key => "id" + belongs_to :user, :foreign_key => "user_id" + + + def user + User.where(id: self.user_id).take + end end diff --git a/app/models/post.rb b/app/models/post.rb index 542c073..a899fb9 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1,3 +1,7 @@ class Post < ActiveRecord::Base - belongs_to :user + belongs_to :user, :foreign_key => "user_id" + + def user + User.where(id: self.user_id).take + end end diff --git a/app/models/user.rb b/app/models/user.rb index b5e8f87..163b32f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,12 +7,41 @@ class User < ActiveRecord::Base :rememberable, :trackable, :validatable -#has_many :communications -#has_many :posts - belongs_to :person, dependent: :destroy - belongs_to :community, dependent: :destroy - has_many :community, through: :community_memberships, dependent: :destroy - has_many :user_owner_relations, :class_name =>'UserRelation', :foreign_key =>"owner_id", :inverse_of => :user_owner, dependent: :destroy + has_one :person, dependent: :destroy + has_one :community, dependent: :destroy + has_many :community_memberships, dependent: :destroy + has_many :user_owner_relations, :class_name =>'UserRelation', :foreign_key =>"user_owner_id", :inverse_of => :user_owner, dependent: :destroy has_many :user_rel_relations, :class_name => 'UserRelation', :foreign_key =>"user_rel_id", :inverse_of => :user_rel, dependent: :destroy has_many :posts, dependent: :destroy +#add messages + has_many :send_messages, class_name: "Message", foreign_key: "user_id_to" + has_many :recieved_messages, class_name: "Message", foreign_key: "user_id_from" + + def kind_name + if self.kind == 1 + 'Person' + elsif self.kind == 2 + 'Community' + else + 'Unknown kind' + end + end + + def person? + self.kind == 1 + end + + def community? + self.kind == 2 + end + +# def person_id +# person = Person.where(user_id: self.id).take +# if person == nil +# nil +# else +# person.id +# end +# end + end diff --git a/app/models/user_relation.rb b/app/models/user_relation.rb index d07b78c..8c63dd2 100644 --- a/app/models/user_relation.rb +++ b/app/models/user_relation.rb @@ -3,4 +3,12 @@ class UserRelation < ActiveRecord::Base validates :user_owner, :presence => true belongs_to :user_rel, :class_name => "User", :inverse_of => :user_rel_relations + + def user + User.where(id: self.user_owner_id).take + end + + def user_rel + User.where(id: self.user_rel_id).take + end end diff --git a/app/views/communities/_form.html.erb b/app/views/communities/_form.html.erb new file mode 100644 index 0000000..8a68ac1 --- /dev/null +++ b/app/views/communities/_form.html.erb @@ -0,0 +1,15 @@ + +<%= form_for(@community) do |f| %> +<%= render 'shared/communities_errors' %> + +
+ <%= f.label :subject %>
+ <%= f.text_field :subject, autofocus: true, autocomplete: "on"%> +

+ + +
+ <%= f.submit "Save" %> +
+ +<% end %> diff --git a/app/views/communities/edit.html.erb b/app/views/communities/edit.html.erb new file mode 100644 index 0000000..16fa0e1 --- /dev/null +++ b/app/views/communities/edit.html.erb @@ -0,0 +1,3 @@ +

Edit community data

+ +<%= render "form" %> diff --git a/app/views/communities/index.html.erb b/app/views/communities/index.html.erb new file mode 100644 index 0000000..d7d679d --- /dev/null +++ b/app/views/communities/index.html.erb @@ -0,0 +1 @@ +Hello? index comm! \ No newline at end of file diff --git a/app/views/communities/new.html.erb b/app/views/communities/new.html.erb new file mode 100644 index 0000000..9a8fd59 --- /dev/null +++ b/app/views/communities/new.html.erb @@ -0,0 +1,2 @@ +

Create community data

+<%= render "form" %> diff --git a/app/views/communities/show.html.erb b/app/views/communities/show.html.erb new file mode 100644 index 0000000..7f24a58 --- /dev/null +++ b/app/views/communities/show.html.erb @@ -0,0 +1,11 @@ +<% content_for :title do %> + Social: Community profile +<% end %> + +<%= render 'shared/user_info' %> +
+ + +Название: <%= current_user.name %>
+Тема: <%= @community.subject %>
+<%= link_to 'Изменить данные сообщества', edit_community_path %>
diff --git a/app/views/community_memberships/_form.html.erb b/app/views/community_memberships/_form.html.erb new file mode 100644 index 0000000..6635cea --- /dev/null +++ b/app/views/community_memberships/_form.html.erb @@ -0,0 +1,14 @@ + +<%= form_for(@community_membership) do |f| %> + +
+ <%= f.label :user_id %>
+ <%= f.text_field :user_id, autofocus: true, autocomplete: "off"%> +

+ + +
+ <%= f.submit "Save" %> +
+ +<% end %> diff --git a/app/views/community_memberships/index.html.erb b/app/views/community_memberships/index.html.erb new file mode 100644 index 0000000..e22fab5 --- /dev/null +++ b/app/views/community_memberships/index.html.erb @@ -0,0 +1 @@ +Hello index community membership! diff --git a/app/views/community_memberships/new.html.erb b/app/views/community_memberships/new.html.erb new file mode 100644 index 0000000..603cb48 --- /dev/null +++ b/app/views/community_memberships/new.html.erb @@ -0,0 +1,2 @@ +

Create community membership data

+<%= render "form" %> diff --git a/app/views/community_memberships/show.html.erb b/app/views/community_memberships/show.html.erb new file mode 100644 index 0000000..5e0797f --- /dev/null +++ b/app/views/community_memberships/show.html.erb @@ -0,0 +1,5 @@ +Сообщество: <%= @community_membership.community.subject %>
+Пользователь: <%= @community_membership.user.name %>
+Добавлен: <%= @community_membership.create_at %>
+ + diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index 3ea40f0..d7aea1a 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -8,6 +8,11 @@ <%= f.email_field :email, autofocus: true %> +
+ <%= f.label :name %>
+ <%= f.text_field :name, autocomplete: "on" %> +
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
Currently waiting confirmation for: <%= resource.unconfirmed_email %>
<% end %> diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 343b265..a7f9ed4 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -8,6 +8,18 @@ <%= f.email_field :email, autofocus: true %> +
+ <%= f.label :name %>
+ <%= f.text_field :name, autocomplete: "on" %> +
+ + +
+ <%= f.label :kind %>
+ <%= f.radio_button :kind, '1', :checked => true %><%= f.label :kind, "User" %> + <%= f.radio_button :kind, '2' %><%= f.label :kind, "Community" %> +
+
<%= f.label :password %> <% if @validatable %> @@ -21,6 +33,8 @@ <%= f.password_field :password_confirmation, autocomplete: "off" %>
+ +
<%= f.submit "Sign up" %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index c2d3b91..d9e6a85 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -51,8 +51,17 @@