From 87dd70ea44a2b0f833375bc010bd9ddf36728dba Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Wed, 26 Nov 2014 20:36:04 +0100 Subject: [PATCH] meetings added, documents added --- app/assets/javascripts/meetings.js.coffee | 3 + app/assets/javascripts/meetingtyps.js.coffee | 3 + app/assets/stylesheets/meetings.css.scss | 3 + app/assets/stylesheets/meetingtyps.css.scss | 3 + app/controllers/documents_controller.rb | 2 +- app/controllers/meetings_controller.rb | 92 +++++++++++++++++++ app/controllers/meetingtyps_controller.rb | 2 + app/helpers/meetings_helper.rb | 2 + app/helpers/meetingtyps_helper.rb | 2 + app/models/ability.rb | 7 +- app/models/document.rb | 6 ++ app/models/meeting.rb | 32 +++++++ app/models/meetingtyp.rb | 3 + app/models/thema.rb | 2 + app/views/attachments/_attachment.html.erb | 2 +- app/views/documents/_document.html.erb | 4 +- app/views/documents/_nested_form.html.erb | 12 +-- app/views/meetings/_meeting.html.erb | 8 ++ app/views/meetings/show.js.erb | 1 + app/views/themen/_small.html.erb | 21 ++++- config/routes.rb | 10 +- db/migrate/20141119200355_create_documents.rb | 10 +- .../20141126115125_create_meetingtyps.rb | 11 +++ db/migrate/20141126120610_create_meetings.rb | 15 +++ spec/controllers/meetings_controller_spec.rb | 5 + .../meetingtyps_controller_spec.rb | 5 + spec/factories/meetings.rb | 10 ++ spec/factories/meetingtyps.rb | 9 ++ spec/helpers/meetings_helper_spec.rb | 15 +++ spec/helpers/meetingtyps_helper_spec.rb | 15 +++ spec/models/meeting_spec.rb | 5 + spec/models/meetingtyp_spec.rb | 5 + 32 files changed, 304 insertions(+), 21 deletions(-) create mode 100644 app/assets/javascripts/meetings.js.coffee create mode 100644 app/assets/javascripts/meetingtyps.js.coffee create mode 100644 app/assets/stylesheets/meetings.css.scss create mode 100644 app/assets/stylesheets/meetingtyps.css.scss create mode 100644 app/controllers/meetings_controller.rb create mode 100644 app/controllers/meetingtyps_controller.rb create mode 100644 app/helpers/meetings_helper.rb create mode 100644 app/helpers/meetingtyps_helper.rb create mode 100644 app/models/meeting.rb create mode 100644 app/models/meetingtyp.rb create mode 100644 app/views/meetings/_meeting.html.erb create mode 100644 app/views/meetings/show.js.erb create mode 100644 db/migrate/20141126115125_create_meetingtyps.rb create mode 100644 db/migrate/20141126120610_create_meetings.rb create mode 100644 spec/controllers/meetings_controller_spec.rb create mode 100644 spec/controllers/meetingtyps_controller_spec.rb create mode 100644 spec/factories/meetings.rb create mode 100644 spec/factories/meetingtyps.rb create mode 100644 spec/helpers/meetings_helper_spec.rb create mode 100644 spec/helpers/meetingtyps_helper_spec.rb create mode 100644 spec/models/meeting_spec.rb create mode 100644 spec/models/meetingtyp_spec.rb diff --git a/app/assets/javascripts/meetings.js.coffee b/app/assets/javascripts/meetings.js.coffee new file mode 100644 index 0000000..7615679 --- /dev/null +++ b/app/assets/javascripts/meetings.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/meetingtyps.js.coffee b/app/assets/javascripts/meetingtyps.js.coffee new file mode 100644 index 0000000..7615679 --- /dev/null +++ b/app/assets/javascripts/meetingtyps.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/meetings.css.scss b/app/assets/stylesheets/meetings.css.scss new file mode 100644 index 0000000..6b149af --- /dev/null +++ b/app/assets/stylesheets/meetings.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the meetings controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/meetingtyps.css.scss b/app/assets/stylesheets/meetingtyps.css.scss new file mode 100644 index 0000000..94c9425 --- /dev/null +++ b/app/assets/stylesheets/meetingtyps.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the meetingtyps controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index bfff993..07b59cf 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -57,7 +57,7 @@ def update logger.info("-------------delete------------------") @document = Document.find(params[:id]) @document_id = params[:id] - @object=@document.object + @document.destroy respond_to do |format| diff --git a/app/controllers/meetings_controller.rb b/app/controllers/meetings_controller.rb new file mode 100644 index 0000000..1592388 --- /dev/null +++ b/app/controllers/meetings_controller.rb @@ -0,0 +1,92 @@ +class MeetingsController < ApplicationController + + + + load_and_authorize_resource + def index + respond_to do |format| + format.html {redirect_to rubriken_path} + end + end + def new + @meeting=Meeting.new + @meeting.parent=params[:parent_typ].constantize.find(params[:parent_id]) + @meeting.typ = 1 + respond_to do |format| + format.js + end + end + def create_protocol + @meeting = Meeting.find(params[:id]) + @meeting.create_protocol + @meeting.save + respond_to do |format| + format.js {render action: :show} + end + end + def create_agenda + @meeting = Meeting.find(params[:id]) + @meeting.create_agenda + + + respond_to do |format| + format.js {render action: :show} + end + end + def edit + @meeting = Meeting.find(params[:id]) + respond_to do |format| + format.js + end + + end + + def create + @meeting = Meeting.new(params[:meeting]) + + respond_to do |format| + if @meeting.save + # format.html { redirect_to @meeting, notice: 'Meeting was successfully created.' } + #format.json { render json: @meeting, status: :created, location: @meeting } + format.js + else + # format.html { render action: "new" } + # format.json { render json: @meeting.errors, status: :unprocessable_entity } + format.js { render action: "new" } + end + end + end + +def update + @meeting = Meeting.find(params[:id]) + + respond_to do |format| + if @meeting.update_attributes(params[:meeting]) + format.html { redirect_to @meeting, notice: 'Meeting was successfully updated.' } + format.json { head :no_content } + format.js + else + # format.html { render action: "edit" } + # format.json { render json: @meeting.errors, status: :unprocessable_entity } + format.js { render action: "edit"} + end + end + end + def destroy + logger.info("-------------delete------------------") + @meeting = Meeting.find(params[:id]) + @meeting_id = params[:id] + @object=@meeting.object + @meeting.destroy + + respond_to do |format| + #format.html { redirect_to @object} + #format.json { head :no_content } + format.js + end + end + + + + +end diff --git a/app/controllers/meetingtyps_controller.rb b/app/controllers/meetingtyps_controller.rb new file mode 100644 index 0000000..b8884a1 --- /dev/null +++ b/app/controllers/meetingtyps_controller.rb @@ -0,0 +1,2 @@ +class MeetingtypsController < ApplicationController +end diff --git a/app/helpers/meetings_helper.rb b/app/helpers/meetings_helper.rb new file mode 100644 index 0000000..bdf5280 --- /dev/null +++ b/app/helpers/meetings_helper.rb @@ -0,0 +1,2 @@ +module MeetingsHelper +end diff --git a/app/helpers/meetingtyps_helper.rb b/app/helpers/meetingtyps_helper.rb new file mode 100644 index 0000000..544f299 --- /dev/null +++ b/app/helpers/meetingtyps_helper.rb @@ -0,0 +1,2 @@ +module MeetingtypsHelper +end diff --git a/app/models/ability.rb b/app/models/ability.rb index 7d49731..1514bda 100755 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -116,7 +116,12 @@ class Ability cannot :delete, Neuigkeit end - + # Calendar + if( user.has_role?("fetuser") || user.has_role?("fetadmin")) + can :manage, Document + can :manage, Meeting + can :manage, Meetingtyp + end # Rechteverwaltung Kalender diff --git a/app/models/document.rb b/app/models/document.rb index e7fa2f7..f0fa762 100644 --- a/app/models/document.rb +++ b/app/models/document.rb @@ -1,3 +1,9 @@ class Document < ActiveRecord::Base attr_accessible :etherpadkey, :name, :parent, :text, :typ + belongs_to :parent, :polymorphic => true + validate :name, :length=>{minimum:3} + validate :text, :presence=>true + validate :typ, :presence=>true + validate :parent, :presence=>true + end diff --git a/app/models/meeting.rb b/app/models/meeting.rb new file mode 100644 index 0000000..ccab3c0 --- /dev/null +++ b/app/models/meeting.rb @@ -0,0 +1,32 @@ +class Meeting < ActiveRecord::Base + belongs_to :parent, :polymorphic=>true + belongs_to :meetingtyp + attr_accessible :desc, :intern, :name + has_one :protocol, :class_name=>'Document', :conditions=>{:typ=>10}, :as=>:parent + has_one :agenda , :as=>:parent,:conditions=>{:typ=>11}, :class_name=>'Document' + validate :agenda, :presence=>true + validate :protocol, :presence=>true + has_one :calentry, :as=>:object + def public? + ! (self.intern) + end + def create_protocol + if self.protocol.nil? + d=Document.new + d.typ=10 + d.name="Protokoll" + d.save + self.protocol=d + end + + end + def create_agenda + if self.agenda.nil? + d=Document.new + d.typ=11 + d.name="Agenda" + d.save + self.agenda=d + end + end +end diff --git a/app/models/meetingtyp.rb b/app/models/meetingtyp.rb new file mode 100644 index 0000000..f610170 --- /dev/null +++ b/app/models/meetingtyp.rb @@ -0,0 +1,3 @@ +class Meetingtyp < ActiveRecord::Base + attr_accessible :agendaintern, :desc, :name, :protocolintern +end diff --git a/app/models/thema.rb b/app/models/thema.rb index 6635dd8..8dab0a6 100644 --- a/app/models/thema.rb +++ b/app/models/thema.rb @@ -21,6 +21,8 @@ include Rails.application.routes.url_helpers validates :themengruppe, :presence => true validates :title, :presence => true validates :text, :presence => true + has_many :meetings, :as=>:parent + has_many :documents, :as=>:parent scope :public, where(:isdraft=>false).includes(:themengruppe).where("themengruppen.public"=>true) default_scope order("themen.priority").reverse_order # scope :search, ->(query) {where("themen.text like ? or themen.title like ?", "%#{query}%", "%#{query}%")} diff --git a/app/views/attachments/_attachment.html.erb b/app/views/attachments/_attachment.html.erb index 0045f70..2b45971 100644 --- a/app/views/attachments/_attachment.html.erb +++ b/app/views/attachments/_attachment.html.erb @@ -1,4 +1,4 @@ - <% data_ext = attachment.datei.file.extension.downcase %> + <% data_ext = attachment.datei.file.try(:extension).try(:downcase) %> <% if (!["jpg","png","jpeg"].find_index(data_ext).nil?) %> diff --git a/app/views/documents/_document.html.erb b/app/views/documents/_document.html.erb index d76b082..c92c245 100644 --- a/app/views/documents/_document.html.erb +++ b/app/views/documents/_document.html.erb @@ -1,8 +1,8 @@
<% image_tag("/iconnavy/time.png") %> - <% fa_icon("calendar 2x") %> + <%= fa_icon("file-text 2x") %> - <%= document.title %> + <%= document.name %> <%= link_to "edit", edit_document_path(document),:remote=>true if can? :edit, document %> <%= link_to 'Delete', document, method: :delete, data: { confirm: 'Are you sure?' } , remote: true if can? :delete, document %>
diff --git a/app/views/documents/_nested_form.html.erb b/app/views/documents/_nested_form.html.erb index 8421935..6e045f3 100644 --- a/app/views/documents/_nested_form.html.erb +++ b/app/views/documents/_nested_form.html.erb @@ -1,15 +1,9 @@ <%= fa_icon("calendar 2x") %>

<%= notice %>

-<%= semantic_form_for @calentry, :remote=>true, :html=>{:class=>"inline"} do |f| %> +<%= semantic_form_for @document, :remote=>true, :html=>{:class=>""} do |f| %> - <%= f.input :start, :as => :datetimepicker %> - <%= f.input :dauer , :as => :string, :append=>"h" %> - <%= f.input :object_id , :as => :hidden %> - <%= f.input :object_type , :as => :hidden %> -<%= f.input :typ , :as => :hidden %> - - - <%= f.action :submit, :as => :input_ %> + <%= f.input :name %> + <%= f.action :submit, :as => :input_ %> <% end %> diff --git a/app/views/meetings/_meeting.html.erb b/app/views/meetings/_meeting.html.erb new file mode 100644 index 0000000..93d6943 --- /dev/null +++ b/app/views/meetings/_meeting.html.erb @@ -0,0 +1,8 @@ +
+

Meeting: <%= meeting.name %>

+<%= render meeting.calentry %> +<%= link_to "Agenda" , create_agenda_meeting_path(meeting), :remote=>true %> +<%= link_to "Protokoll" , create_protocol_meeting_path(meeting),:remote=>true %> +<%= render meeting.agenda unless meeting.agenda.nil? %> +<%= render meeting.protocol unless meeting.protocol.nil? %> +
diff --git a/app/views/meetings/show.js.erb b/app/views/meetings/show.js.erb new file mode 100644 index 0000000..24d02dc --- /dev/null +++ b/app/views/meetings/show.js.erb @@ -0,0 +1 @@ +$("#meeting_<%= @meeting.id %>").replaceWith("<%=escape_javascript( render :partial=>"meeting", :object=>@meeting)%>"); diff --git a/app/views/themen/_small.html.erb b/app/views/themen/_small.html.erb index cc9ad4a..ef43568 100644 --- a/app/views/themen/_small.html.erb +++ b/app/views/themen/_small.html.erb @@ -8,8 +8,8 @@ <% if small.isdraft %>
<%= I18n.t("thema.isdraft") %>
-<% end %> -<%= raw(small.text) %> +<% end %>
+<%= raw(small.text) %>

<%= raw("FAQs:") unless small.fragen.empty? %> @@ -20,6 +20,23 @@ <%= raw(frage.text) %>

<% end %> +<% unless small.meetings.empty? %> +Treffen/Sitzungen +<% small.meetings.each do |m| %> +<%= render m %> + +<% end%> +<% end%> + + +<% unless small.documents.empty? %> +Dokumente +<% small.documents.each do |d| %> +<%= render d %> + +<% end%> +<% end%> + <% unless small.hideattachment %> <%= render partial: "themen/attachment_list", object: small.attachments, locals:{editor: false} unless small.attachments.empty? %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index a7c5835..e5263fc 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -159,10 +159,18 @@ Fetsite::Application.routes.draw do end resources :attachments end - + resources :calendars get 'verwalten/calendars', :controller=>:calendars, :action=>:verwalten, :as=>'calendars_verwalten' resources :calentries + resources :documents + resources :meetings do + member do + get :create_protocol + get :create_agenda + end + end + resources :meetingtyps end end root :to => 'home#index' diff --git a/db/migrate/20141119200355_create_documents.rb b/db/migrate/20141119200355_create_documents.rb index fc4d30e..027c7e9 100644 --- a/db/migrate/20141119200355_create_documents.rb +++ b/db/migrate/20141119200355_create_documents.rb @@ -1,13 +1,15 @@ class CreateDocuments < ActiveRecord::Migration def change create_table :documents do |t| - t.integer :typ + t.integer :typ, :default=>0 t.string :name t.text :text - t.string :etherpadkey - t.references{polymorphic} :parent - + t.string :etherpadkey, :default=>"" + t.references :parent,:polymorphic=>{:default=>'Thema'} t.timestamps end + add_index :documents, :parent_id + add_index :documents, :parent_type + end end diff --git a/db/migrate/20141126115125_create_meetingtyps.rb b/db/migrate/20141126115125_create_meetingtyps.rb new file mode 100644 index 0000000..02f1111 --- /dev/null +++ b/db/migrate/20141126115125_create_meetingtyps.rb @@ -0,0 +1,11 @@ +class CreateMeetingtyps < ActiveRecord::Migration + def change + create_table :meetingtyps do |t| + t.string :name + t.text :desc + t.boolean :agendaintern, :default=>false + t.boolean :protocolintern, :default=>true + t.timestamps + end + end +end diff --git a/db/migrate/20141126120610_create_meetings.rb b/db/migrate/20141126120610_create_meetings.rb new file mode 100644 index 0000000..8c23b80 --- /dev/null +++ b/db/migrate/20141126120610_create_meetings.rb @@ -0,0 +1,15 @@ +class CreateMeetings < ActiveRecord::Migration + def change + create_table :meetings do |t| + t.string :name + t.text :desc + t.boolean :intern, :default=>true + t.references :parent, :polymorphic=>{:default=>'Thema'} + t.references :meetingtyp + t.timestamps + end + add_index :meetings, :parent_id + add_index :meetings, :parent_type + add_index :meetings, :meetingtyp_id + end +end diff --git a/spec/controllers/meetings_controller_spec.rb b/spec/controllers/meetings_controller_spec.rb new file mode 100644 index 0000000..7a4bfca --- /dev/null +++ b/spec/controllers/meetings_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe MeetingsController, :type => :controller do + +end diff --git a/spec/controllers/meetingtyps_controller_spec.rb b/spec/controllers/meetingtyps_controller_spec.rb new file mode 100644 index 0000000..4c5b03c --- /dev/null +++ b/spec/controllers/meetingtyps_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe MeetingtypsController, :type => :controller do + +end diff --git a/spec/factories/meetings.rb b/spec/factories/meetings.rb new file mode 100644 index 0000000..8e0726f --- /dev/null +++ b/spec/factories/meetings.rb @@ -0,0 +1,10 @@ +FactoryGirl.define do + factory :meeting do + name "MyString" +desc "MyText" +parent nil +intern false +meetingtyp nil + end + +end diff --git a/spec/factories/meetingtyps.rb b/spec/factories/meetingtyps.rb new file mode 100644 index 0000000..6538467 --- /dev/null +++ b/spec/factories/meetingtyps.rb @@ -0,0 +1,9 @@ +FactoryGirl.define do + factory :meetingtyp do + name "MyString" +desc "MyText" +agendaintern false +protocolintern false + end + +end diff --git a/spec/helpers/meetings_helper_spec.rb b/spec/helpers/meetings_helper_spec.rb new file mode 100644 index 0000000..3276f26 --- /dev/null +++ b/spec/helpers/meetings_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the MeetingsHelper. For example: +# +# describe MeetingsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe MeetingsHelper, :type => :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/meetingtyps_helper_spec.rb b/spec/helpers/meetingtyps_helper_spec.rb new file mode 100644 index 0000000..34541e2 --- /dev/null +++ b/spec/helpers/meetingtyps_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the MeetingtypsHelper. For example: +# +# describe MeetingtypsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe MeetingtypsHelper, :type => :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/meeting_spec.rb b/spec/models/meeting_spec.rb new file mode 100644 index 0000000..93d55f7 --- /dev/null +++ b/spec/models/meeting_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Meeting, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/meetingtyp_spec.rb b/spec/models/meetingtyp_spec.rb new file mode 100644 index 0000000..c55d7c0 --- /dev/null +++ b/spec/models/meetingtyp_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Meetingtyp, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end