diff --git a/Gemfile b/Gemfile
index 12a6f4a..a83dee3 100755
--- a/Gemfile
+++ b/Gemfile
@@ -115,3 +115,4 @@ gem 'sunspot_solr'
gem 'sitemap_generator'
gem 'whenever'
gem 'yaml_db'
+gem 'etherpad-lite'
\ No newline at end of file
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
new file mode 100644
index 0000000..dce8233
--- /dev/null
+++ b/app/controllers/documents_controller.rb
@@ -0,0 +1,134 @@
+class DocumentsController < ApplicationController
+# require('etherpad-lite')
+ load_and_authorize_resource
+ def index
+ respond_to do |format|
+ format.html {redirect_to rubriken_path}
+ end
+ end
+ def new
+ @document=Document.new
+ @parent=params[:parent_type].constantize.find(params[:parent_id])
+ @document.parent=@parent
+
+ @document.typ = 1
+ respond_to do |format|
+ format.js
+ end
+ end
+ def edit
+ @document = Document.find(params[:id])
+ @parent=@document.parent
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ def dump_to_etherpad
+ @document = Document.find(params[:id])
+ @document.dump_to_etherpad
+@document.save
+# author = ether.author('author_1')
+# pad=group.pad(@document.etherpadkey)
+# pad.html='
'+@document.text+'
'
+ redirect_to action: :show
+ end
+ def read_from_etherpad
+ @document = Document.find(params[:id])
+ @document.read_from_etherpad
+ @document.save
+ render :show
+ end
+
+ def write_etherpad
+ @document = Document.find(params[:id])
+
+ ether=Document.ether
+ author = Document.ether.author("fetsite_"+current_user.uid, :name => current_user.text)
+author = Document.ether.author("author_1")
+ session[:ep_sessions]={} if session[:ep_sessions].nil?
+ group=@document.ep_group
+
+ sess = session[:ep_sessions][group.id] ? ether.get_session(session[:ep_sessions][group.id]) : group.create_session(author, 60)
+
+ if sess.expired?
+ sess.delete
+ sess = group.create_session(author, 60)
+ end
+ session[:ep_sessions][group.id] = sess.id
+ # Set the EtherpadLite session cookie. This will automatically be picked up by the jQuery plugin's iframe.
+
+ cookies[:sessionID] = {:value => sess.id, :domain => "www.fet.at"}
+ #cookies[:sessionID] = {:value => sess.id}
+ cookies[:sessionID1]=sess.id
+# cookies[:sdf]=sess.id
+ # pad=ether.pad(@document.etherpadkey)
+ # redirect_to "http://www.fet.at/etherpad/p/"+@document.ep_pad.id
+ #render :write
+ end
+ def write
+ @document = Document.find(params[:id])
+ if @document.is_etherpad?
+ redirect_to action: :write_etherpad
+ else
+ @parent=@document.parent
+ respond_to do |format|
+ format.html
+ end
+ end
+ end
+
+ def create
+ @document = Document.new(params[:document])
+
+ @parent=@document.parent
+
+ respond_to do |format|
+ if @document.save
+ # format.html { redirect_to @document, notice: 'Document was successfully created.' }
+ #format.json { render json: @document, status: :created, location: @document }
+ format.js
+ else
+ # format.html { render action: "new" }
+ # format.json { render json: @document.errors, status: :unprocessable_entity }
+ format.js { render action: "new" }
+ end
+ end
+ end
+
+
+ def update
+ @document = Document.find(params[:id])
+ @parent=@document.parent
+
+ respond_to do |format|
+ if @document.update_attributes(params[:document])
+ format.html { redirect_to @document, notice: 'Document was successfully updated.' }
+ format.json { head :no_content }
+ format.js
+ else
+ # format.html { render action: "edit" }
+ # format.json { render json: @document.errors, status: :unprocessable_entity }
+ format.js { render action: "edit"}
+ end
+ end
+ end
+ def destroy
+ logger.info("-------------delete------------------")
+ @document = Document.find(params[:id])
+
+ @parent=@document.parent
+
+ @document_id = params[:id]
+
+ @document.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/home_controller.rb b/app/controllers/home_controller.rb
index 806822f..34725b2 100755
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -2,7 +2,8 @@ class HomeController < ApplicationController
def index
@beispiele = Beispiel.last([Beispiel.count, 3].min)
@neuigkeiten = Neuigkeit.recent
-
+ t=YAML.load_file("#{::Rails.root.to_s}/config/start_topic.yml")
+ @starttopic= @themen = Thema.where(:id=>t).first
end
def dev
diff --git a/app/controllers/meetings_controller.rb b/app/controllers/meetings_controller.rb
new file mode 100644
index 0000000..7bad531
--- /dev/null
+++ b/app/controllers/meetings_controller.rb
@@ -0,0 +1,132 @@
+class MeetingsController < ApplicationController
+
+
+
+
+ # load_and_authorize_resource
+ def index
+ parent=params[:parent_type].constantize.find(params[:parent_id])
+ unless parent.nil?
+ #authorize! :show, parent
+ if params[:filter]=="upcomming"
+ @meetings=parent.meetings.includes(:calentry).where("calentries.start>?",1.hour.ago)
+ else
+ @meetings=parent.meetings
+ end
+ @parent=parent
+ end
+ respond_to do |format|
+ format.html {redirect_to rubriken_path}
+ format.js
+ end
+ end
+ def announce
+ m=Meeting.find(params[:id])
+ m.create_announcement(current_user)
+ m.save
+
+ respond_to do |format|
+ format.html {redirect_to m.parent}
+ format.js {render action: :show}
+ end
+ end
+ def show
+ m=Meeting.find(params[:id])
+ respond_to do |format|
+ format.html {redirect_to m.parent}
+ format.js
+
+ end
+end
+ def new
+ @meeting=Meeting.new
+ @meeting.parent=params[:parent_type].constantize.find(params[:parent_id])
+ @parent=@meeting.parent
+ @meeting.calentry=Calentry.new
+ @meeting.calentry.typ = 2
+ 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])
+
+@parent=@meeting.parent
+respond_to do |format|
+ format.js
+ end
+
+ end
+
+ def create
+ @meeting = Meeting.new(params[:meeting])
+
+ @parent=@meeting.parent
+ #@meeting.assign_attributes(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])
+ @parent=@meeting.parent
+ 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
+ # 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])
+
+ @parent=@meeting.parent
+ @meeting_id = params[:id]
+ @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/controllers/neuigkeiten_controller.rb b/app/controllers/neuigkeiten_controller.rb
index 9bcdb5b..02da1fb 100755
--- a/app/controllers/neuigkeiten_controller.rb
+++ b/app/controllers/neuigkeiten_controller.rb
@@ -112,13 +112,13 @@ class NeuigkeitenController < ApplicationController
end
@calentries1=@neuigkeit.calentries
- @nlink_search = Neuigkeit::LINKTYPES.clone
+ nlink_search = Neuigkeit::LINKTYPES.clone
+ nlink_search.collect!{|t| t.constantize}
+ # @nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
+ @results= Sunspot.search nlink_search do
+ fulltext params[:query]
+ end
- @nlink_search.collect!{|t| t.constantize}
- @nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
-
-
- @nlink_search.flatten!
respond_to do |format|
format.html { render action:"show" }
format.js
diff --git a/app/controllers/rubriken_controller.rb b/app/controllers/rubriken_controller.rb
index 8f8857b..88c6250 100755
--- a/app/controllers/rubriken_controller.rb
+++ b/app/controllers/rubriken_controller.rb
@@ -29,7 +29,7 @@ class RubrikenController < ApplicationController
@rubrik = Rubrik.find(params[:id])
@moderatoren=User.with_role(:newsmoderator,@rubrik)
- @calentries= @rubrik.calentries
+ @calentries= @rubrik.calendar.calentries
if can?(:showunpublished, Neuigkeit)
@neuigkeiten = @rubrik.neuigkeiten.page(params[:page]).per(3)
else
diff --git a/app/controllers/themen_controller.rb b/app/controllers/themen_controller.rb
index b3d1ede..3490b13 100644
--- a/app/controllers/themen_controller.rb
+++ b/app/controllers/themen_controller.rb
@@ -11,7 +11,7 @@ class ThemenController < ApplicationController
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("thema.manage"), :path=>verwalten_thema_path(@thema)}]
@toolbar_elements << [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('thema.remove'), :path=>thema_path(@thema), :method=>:delete, :confirm=>I18n.t('thema.sure')}
-
+
respond_to do |format|
format.html {
redirect_to :controller=>'themengruppen', :id=>@thema.themengruppe.id, :action=>:show, :anchor=> "thema_"+params[:id].to_s
@@ -40,6 +40,11 @@ class ThemenController < ApplicationController
# @thema.text = @thema.text.sanitize
render :edit
end
+ def version
+ @thema = Thema.find(params[:id])
+
+ end
+
def verwalten
@thema = Thema.find(params[:id])
@attachment=Attachment.new
@@ -67,7 +72,7 @@ class ThemenController < ApplicationController
def edit
@thema = Thema.find(params[:id])
-
+
respond_to do |format|
format.html
format.js { @themen= @thema.themengruppe.themen }
@@ -107,7 +112,14 @@ class ThemenController < ApplicationController
format.js
end
end
- def attachments
+ def documents
+ @thema = Thema.find(params[:id])
+ @documents=@thema.documents
+ respond_to do |format|
+ format.js
+ end
+ end
+ def attachments
@thema = Thema.find(params[:id])
@attachments=@thema.attachments
@attachment=Attachment.new
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 32b5582..5395ac8 100755
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,7 +1,28 @@
module ApplicationHelper
- def current_url1(overwrite={})
- url_for :params => params.merge(overwrite).except(:controller,:action,:ansicht)
- end
+
+ def strip_control_chars(value)
+ value.chars.inject("") do |str, char|
+ unless char.ascii_only? && (char.ord < 32 || char.ord == 127)
+ str << char
+ end
+ str
+ end
+ end
+ def convert_topic_to_meeting(t,mt)
+ m=Meeting.new_with_date_and_typ(t,t.title.to_date+16.hour,mt)
+ m.save
+ m.create_protocol
+ m.protocol.text=t.text
+ m.protocol.save
+ m.update_time_from_protocol
+m.save
+
+ t.meetings << m
+ t.save
+ end
+ def current_url1(overwrite={})
+ url_for :params => params.merge(overwrite).except(:controller,:action,:ansicht)
+ end
def switch_locale_url(target_locale)
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..7bfcec3 100755
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -114,10 +114,22 @@ class Ability
unless user.has_role?("fetadmin")
cannot :delete, Rubrik
cannot :delete, Neuigkeit
-
end
-
+ # Calendar
+ if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
+ can :manage, Document
+ can :manage, Meeting
+ can :manage, Meetingtyp
+ end
+ unless user.has_role?( "fetadmin")
+ cannot :delete, Document
+ cannot :delete, Meeting
+ end
+ if user.has_role?( "fetadmin")
+ can :manage, Meetingtyp
+
+end
# Rechteverwaltung Kalender
can [:show, :index], Calendar, :public => true
@@ -125,8 +137,6 @@ class Ability
can [:show], Calentry
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
-
-
can [:show,:index], Calendar
can [:edit, :update,:new,:create,:verwalten], Calendar
can [:edit, :update,:new,:create,:verwalten,:delete], Calentry
diff --git a/app/models/calentry.rb b/app/models/calentry.rb
index 4c25840..8347a90 100644
--- a/app/models/calentry.rb
+++ b/app/models/calentry.rb
@@ -57,7 +57,7 @@ end
end
def name
unless self.object.nil?
- self.object.name
+ self.object.title
else
summary
end
diff --git a/app/models/document.rb b/app/models/document.rb
new file mode 100644
index 0000000..bf3714a
--- /dev/null
+++ b/app/models/document.rb
@@ -0,0 +1,64 @@
+class Document < ActiveRecord::Base
+
+ attr_accessible :name, :parent, :text, :typ, :parent_id, :parent_type
+
+ belongs_to :parent, :polymorphic => true
+ validate :name, :length=>{minimum:3}
+ validate :text, :presence=>true
+ validate :typ, :presence=>true
+ validate :parent, :presence=>true
+ has_paper_trail
+ TYPS = { 1=>"fet_docs", 10=>"protocol", 11=> "agenda"}
+ def self.new_divid_for(parent)
+ "document_new_parent_" + parent.class.to_s + "_" + parent.id.to_s
+ end
+ def divid
+ "document_"+self.id.to_s
+ end
+ def self.ether
+ EtherpadLite.connect('http://www.fet.at/etherpad', File.new('/home/andreas/www/APIKEY.txt'))
+ end
+ def ether
+ if @ep.nil?
+ @ep=Document.ether
+ end
+ @ep
+ end
+ def is_etherpad?
+ !(etherpadkey.nil? || etherpadkey.empty?)
+ end
+ def move_to_etherpad
+ unless self.is_etherpad? || self.id.nil?
+ self.etherpadkey="document_"+ self.id.to_s
+ self.ep_pad.html = ''+self.text+'
'
+ end
+ end
+ def dump_to_etherpad
+ if self.is_etherpad?
+ self.ep_pad.html = ''+self.text+'
'
+ else
+ self.move_to_etherpad
+ end
+ end
+ def read_from_etherpad
+ self.text=strip_control_chars(self.ep_pad.html)
+
+ end
+ def ep_pad
+ self.ep_group.pad(self.etherpadkey)
+ end
+ def ep_group
+ t= (self.typ.nil?) ? 1 : self.typ
+ Document.ether.group(Document::TYPS[t])
+ end
+ searchable do
+ text :text
+ text :name, :boost=>4.0
+ if typ = 10 || typ=11
+ text :meeting do
+ parent.text unless parent.nil?
+ end
+ end
+ end
+
+end
diff --git a/app/models/gallery.rb b/app/models/gallery.rb
index ac5855c..7c2079e 100644
--- a/app/models/gallery.rb
+++ b/app/models/gallery.rb
@@ -15,7 +15,11 @@ class Gallery < ActiveRecord::Base
attr_accessible :datum, :desc, :name
has_many :fotos
has_many :nlinks, as: :link
- scope :search, ->(query) {where("name like ? or galleries.desc like ?", "%#{query}%", "%#{query}%")}
+# scope :search, ->(query) {where("name like ? or galleries.desc like ?", "%#{query}%", "%#{query}%")}
+ searchable do
+ text :desc
+ text :name, :boost=>3.0
+ end
def title
name
diff --git a/app/models/gremium.rb b/app/models/gremium.rb
index aef3387..8fd3c7e 100644
--- a/app/models/gremium.rb
+++ b/app/models/gremium.rb
@@ -22,7 +22,11 @@ class Gremium < ActiveRecord::Base
attr_accessible :desc, :name, :typ, :geschlecht,:thema_id, :memberships_attributes
has_many :memberships, dependent: :destroy # Mitgliedschaften bei dem Gremium
has_many :nlinks, as: :link, dependent: :destroy
- scope :search, ->(query) {where("gremien.name like ? or gremien.desc like ?", "%#{query}%", "%#{query}%")}
+# scope :search, ->(query) {where("gremien.name like ? or gremien.desc like ?", "%#{query}%", "%#{query}%")}
+ searchable do
+ text :desc
+ text :name, :boost=>4.0
+ end
belongs_to :thema # Gehört zu einem Thema
scope :tabs, -> { where(:typ => [1,3]).order(:typ).order(:name) } # Gremien die in Tabs angezeigt werden (Alle Anderen nur in der Liste
diff --git a/app/models/lva.rb b/app/models/lva.rb
index c24cd22..c8752b4 100755
--- a/app/models/lva.rb
+++ b/app/models/lva.rb
@@ -47,7 +47,7 @@ class Lva < ActiveRecord::Base
has_and_belongs_to_many :lecturers
has_many :nlinks, as: :link
- scope :search, ->(query) {where("name like ? or lvas.desc like ?", "%#{query}%", "%#{query}%")}
+# scope :search, ->(query) {where("name like ? or lvas.desc like ?", "%#{query}%", "%#{query}%")}
validates :lvanr,:format=>{ :with => /^[0-9][0-9][0-9]\.[0-9A][0-9][0-9]$/}, :presence=>true, :uniqueness=>true # , :uniqueness=>true # LVA-Nummer muss das Format 000.000 besitzen (uniqueness?) oder 000 für nicht
validates_presence_of :ects # ECTS vorhanden?
diff --git a/app/models/meeting.rb b/app/models/meeting.rb
new file mode 100644
index 0000000..933ec2f
--- /dev/null
+++ b/app/models/meeting.rb
@@ -0,0 +1,130 @@
+class Meeting < ActiveRecord::Base
+ belongs_to :parent, :polymorphic=>true
+ belongs_to :meetingtyp
+
+ attr_accessible :desc, :intern, :name, :parent_id, :parent_type, :calentry,:calentry_attributes, :meetingtyp_id
+
+ belongs_to :neuigkeit
+ has_one :protocol, :class_name=>'Document', :conditions=>{:typ=>10}, :as=>:parent
+ has_one :agenda , :as=>:parent,:conditions=>{:typ=>11}, :class_name=>'Document'
+ has_one :calentry, as: :object
+ accepts_nested_attributes_for :calentry
+# validate :agenda, :presence=>true
+# validate :protocol, :presence=>true
+ validate :parent, :presence=>true
+ validate :calentry, :presence=>true
+ before_validation :fix_calentry
+ def title
+ self.text
+ end
+ def text
+ unless self.meetingtyp.try(:name).to_s.empty?
+ t = self.meetingtyp.name.to_s+", "
+ else
+ t=""
+ t = parent.title.to_s + ", " if self.name.empty?
+ end
+ t= t+ self.name.to_s
+ t = t + " " + I18n.l(self.calentry.start) unless self.calentry.nil?
+ t
+ end
+ def create_announcement(user)
+ n = Neuigkeit.new
+
+ n.title=self.text
+ n.text ="Agenda im Anhang"
+ n.rubrik = self.meetingtyp.rubrik
+ n.author=user
+ self.neuigkeit= n
+ end
+ def fix_calentry
+ self.calentry.object=self unless self.calentry.nil?
+ end
+ 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_calentry
+ if self.calentry.nil?
+ce =Calentry.new
+ce.typ=2
+self.calentry=ce
+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
+ def self.new_with_date_and_typ(parent,start, typ)
+ m= Meeting.new
+ m.parent=parent
+ m.calentry=Calentry.new
+ m.calentry.typ=2
+ m.calentry.start=start
+ m.calentry.dauer=4
+ m.meetingtyp=typ
+ m
+ end
+ def self.new_divid_for(parent)
+ "meeting_new_parent_" + parent.class.to_s + "_" + parent.id.to_s
+ end
+ def divid
+ "meeting_"+self.id.to_s
+ end
+
+ def update_time_from_protocol
+ st= /Beginn[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s
+ st= /Anfang[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s if st.empty?
+ self.calentry.start=(self.calentry.start.to_date.to_s + " " +st).to_datetime unless st.empty?
+ st= /Ende[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s
+ self.calentry.ende=(self.calentry.ende.to_date.to_s + " " +st).to_datetime unless st.empty?
+ end
+ def agenda_text
+ unless self.agenda.nil?
+ t= self.agenda.text
+ else
+ t= ""
+ end
+ t
+ end
+ def protocol_text
+ unless self.protocol.nil?
+ t= self.protocol.text
+ else
+ t= ""
+ end
+ t
+end
+
+ searchable do
+ text :text
+ text :name, :boost=>4.0
+
+ text :meetingtyp do
+ meetingtyp.name
+ end
+ text :protocol do
+ self.protocol_text
+ end
+
+ text :agenda do
+ self.agenda_text
+ end
+ end
+
+
+end
diff --git a/app/models/meetingtyp.rb b/app/models/meetingtyp.rb
new file mode 100644
index 0000000..9a1164a
--- /dev/null
+++ b/app/models/meetingtyp.rb
@@ -0,0 +1,6 @@
+class Meetingtyp < ActiveRecord::Base
+ attr_accessible :agendaintern, :desc, :name, :protocolintern
+ belongs_to :rubrik
+ validate :rubrik, :presence=>true
+
+end
diff --git a/app/models/neuigkeit.rb b/app/models/neuigkeit.rb
index c23be25..daab01e 100755
--- a/app/models/neuigkeit.rb
+++ b/app/models/neuigkeit.rb
@@ -23,7 +23,7 @@ class Neuigkeit < ActiveRecord::Base
has_many :calentries, as: :object
has_many :nlinks
-
+ has_one :meeting
mount_uploader :picture, PictureUploader
default_scope order(:datum).reverse_order
@@ -38,7 +38,9 @@ class Neuigkeit < ActiveRecord::Base
before_validation :sanitize
-
+ def is_annoncement?
+ self.meeting.nil?
+ end
def self.published
where("datum <= ? AND datum IS NOT NULL", Time.now.to_date)
end
diff --git a/app/models/rubrik.rb b/app/models/rubrik.rb
index 8d862fb..027156d 100755
--- a/app/models/rubrik.rb
+++ b/app/models/rubrik.rb
@@ -16,6 +16,7 @@ class Rubrik < ActiveRecord::Base
has_many :published, :class_name => "Neuigkeit", :conditions=>["Neuigkeit.published"]
has_many :calentries, :through => :neuigkeiten, :as=>:object
resourcify
+ has_many :meetingtyps
has_one :calendar
validates :calendar , :presence=>true
before_validation :sanitize
diff --git a/app/models/studium.rb b/app/models/studium.rb
index ceb73c6..a701f6a 100755
--- a/app/models/studium.rb
+++ b/app/models/studium.rb
@@ -29,7 +29,7 @@
class Studium < ActiveRecord::Base
attr_accessible :desc, :name,:abkuerzung, :typ, :zahl, :semester, :picture, :picture_cache, :qualifikation,:struktur, :jobmoeglichkeiten, :lvas_attributes
has_many :modulgruppen, inverse_of: :studium, :class_name => "Modulgruppe", :dependent => :destroy
- scope :search, ->(query) {where("name like ? or studien.desc like ?", "%#{query}%", "%#{query}%")}
+# scope :search, ->(query) {where("name like ? or studien.desc like ?", "%#{query}%", "%#{query}%")}
has_many :moduls, :through=>:modulgruppen
has_many :lvas, :through=>:moduls
has_many :semester, :dependent => :destroy
diff --git a/app/models/thema.rb b/app/models/thema.rb
index 6635dd8..c993349 100644
--- a/app/models/thema.rb
+++ b/app/models/thema.rb
@@ -21,24 +21,24 @@ 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}%")}
- searchable do
+ # scope :search, ->(query) {where("themen.text like ? or themen.title like ?", "%#{query}%", "%#{query}%")}
+ searchable do
text :text
text :title, :boost=>4.0
end
-
-
-scope :outdated, -> {includes(:translations).where("thema_translations.updated_at",2.month.ago).where("thema_translations.locale"=>I18n.t.locale)
-}
+ scope :outdated, -> {includes(:translations).where("thema_translations.updated_at",2.month.ago).where("thema_translations.locale"=>I18n.t.locale)
+ }
translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true
def is_outdated?
- unless translation.try(:updated_at).nil?
- translation.updated_at < 2.month.ago
- else
- false
- end
+ unless translation.try(:updated_at).nil?
+ translation.updated_at < 2.month.ago
+ else
+ false
+ end
end
def text_first_words
@@ -48,16 +48,13 @@ scope :outdated, -> {includes(:translations).where("thema_translations.updated_a
"...."
else
words[0..100].join(" ")+ " ..." unless words.nil?
-
end
end
-
+
def fix_links(host)
- full_url= URI.parse(root_url(:host=>host))
+ full_url= URI.parse(root_url(:host=>host))
self.text.gsub!(/src="[\.\/]*uploads\/attachment\/datei\/(\d+)\/thumb_big[^"]*"/){|s| full_url.path=Attachment.find($1.to_i).datei.thumb_big.url; 'src="'+full_url.to_s+'"'}
self.text.gsub!(/src="[\.\/^"]*uploads\/attachment\/datei\/(\d+)\/[^"]*"/){|s| full_url.path=Attachment.find($1.to_i).datei.url; 'src="'+full_url.to_s+'"'}
-
self.text.gsub!(/href="[^"]*themen\/(\d+)[^"]*"/){|s| full_url.path=thema_path(Thema.find($1.to_i)); 'href="'+full_url.to_s+'"'}
-
end
end
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/calentries/_nested_fields.html.erb b/app/views/calentries/_nested_fields.html.erb
index 6f1f97d..92d0b55 100644
--- a/app/views/calentries/_nested_fields.html.erb
+++ b/app/views/calentries/_nested_fields.html.erb
@@ -1,10 +1,15 @@
-
-<%= fa_icon("calendar 2x") %>
-
+
+
+ <%= fa_icon("calendar 2x") %>
+
+
+ <%= f.input :start, :as => :datetimepicker %>
+ <%= f.input :dauer , :as => :string, :append=>"h" %>
+ <% f.input :typ %>
+
+
+ <%= f.check_box :_destroy %>
+ <%= I18n.t 'common.delete' %>
+
-
- <%= f.input :start, :as => :datetimepicker %>
- <%= f.input :dauer , :as => :string, :append=>"h" %>
- <% f.input :typ %>
<%= f.check_box :_destroy %> <%= I18n.t 'common.delete' %>
-
diff --git a/app/views/calentries/_nested_form.html.erb b/app/views/calentries/_nested_form.html.erb
index 8421935..0add235 100644
--- a/app/views/calentries/_nested_form.html.erb
+++ b/app/views/calentries/_nested_form.html.erb
@@ -4,10 +4,15 @@
<%= semantic_form_for @calentry, :remote=>true, :html=>{:class=>"inline"} do |f| %>
<%= f.input :start, :as => :datetimepicker %>
- <%= f.input :dauer , :as => :string, :append=>"h" %>
+<% if @calentry.typ==1 %>
+<%= f.input :dauer , :as => :string, :append=>"h" %>
+<% else %>
+ <%= f.input :ende, :as => :datetimepicker %>
+
+<% end %>
<%= f.input :object_id , :as => :hidden %>
<%= f.input :object_type , :as => :hidden %>
-<%= f.input :typ , :as => :hidden %>
+ <%= f.input :typ , :as => :hidden %>
<%= f.action :submit, :as => :input_ %>
diff --git a/app/views/documents/_document.html.erb b/app/views/documents/_document.html.erb
new file mode 100644
index 0000000..567a483
--- /dev/null
+++ b/app/views/documents/_document.html.erb
@@ -0,0 +1,9 @@
+
+ <% image_tag("/iconnavy/time.png") %>
+
+ <%= fa_icon("file-text") %>
+<%= link_to document.name, document %>
+
+ <%= 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/_form.html.erb b/app/views/documents/_form.html.erb
new file mode 100644
index 0000000..1c2094d
--- /dev/null
+++ b/app/views/documents/_form.html.erb
@@ -0,0 +1,7 @@
+<%= semantic_form_for @document, :html=>{:class=>""} do |f| %>
+ <%= f.input :text, :as=>:tinymce_text %>
+<%= f.action :submit, :as => :input_ %>
+
+<% end %>
+<%= tinymce %>
+
diff --git a/app/views/documents/_nested_form.html.erb b/app/views/documents/_nested_form.html.erb
new file mode 100644
index 0000000..4390d36
--- /dev/null
+++ b/app/views/documents/_nested_form.html.erb
@@ -0,0 +1,13 @@
+<%= fa_icon("calendar 2x") %>
+<%= notice %>
+
+<%= semantic_form_for @document, :remote=>true, :html=>{:class=>""} do |f| %>
+
+ <%= f.input :name %>
+
+<%= f.input :parent_id, :as=>:hidden %>
+<%= f.input :parent_type, :as=>:hidden %>
+
+ <%= f.action :submit, :as => :input_ %>
+
+<% end %>
diff --git a/app/views/documents/create.js.erb b/app/views/documents/create.js.erb
new file mode 100644
index 0000000..97b82dc
--- /dev/null
+++ b/app/views/documents/create.js.erb
@@ -0,0 +1 @@
+$("#<%= Document.new_divid_for(@parent) %>").replaceWith("\">
<%=escape_javascript( render :partial=>"document", :object=>@document)%>");
diff --git a/app/views/documents/destroy.js.erb b/app/views/documents/destroy.js.erb
new file mode 100644
index 0000000..41b315b
--- /dev/null
+++ b/app/views/documents/destroy.js.erb
@@ -0,0 +1 @@
+$("#document_<%= @document_id %>").remove();
diff --git a/app/views/documents/edit.js.erb b/app/views/documents/edit.js.erb
new file mode 100644
index 0000000..98d6389
--- /dev/null
+++ b/app/views/documents/edit.js.erb
@@ -0,0 +1,7 @@
+
+$("#<%= @document.divid %>").html("<%=escape_javascript( render :partial=>"nested_form" ,:object=>@document)%>");
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/documents/new.js.erb b/app/views/documents/new.js.erb
new file mode 100644
index 0000000..1cf1117
--- /dev/null
+++ b/app/views/documents/new.js.erb
@@ -0,0 +1,5 @@
+
+$("#<%= Document.new_divid_for(@parent) %>").replaceWith("\"><%=escape_javascript( render :partial=>"nested_form" ,:object=>@document) %>
");
+
+
+
\ No newline at end of file
diff --git a/app/views/documents/show.html.erb b/app/views/documents/show.html.erb
new file mode 100644
index 0000000..8939bf0
--- /dev/null
+++ b/app/views/documents/show.html.erb
@@ -0,0 +1,9 @@
+<%= link_to "Back to parent" , @document.parent %>
+<%= link_to ff_icon("icon-pencil") + "Edit", write_document_path(@document) %>
+<%= link_to ff_icon("icon-refresh")+"Refresh from Etherpad", read_from_etherpad_document_path(@document) if @document.is_etherpad? %>
+<%= link_to "Copy Document to Etherpad", dump_to_etherpad_document_path(@document) , confirm: "Sicher? Löscht alle Änderungen im Etherpad"%>
+<%= @document.name %>
+
+<%= raw(@document.text) %>
+
+
diff --git a/app/views/documents/update.js.erb b/app/views/documents/update.js.erb
new file mode 100644
index 0000000..f5986eb
--- /dev/null
+++ b/app/views/documents/update.js.erb
@@ -0,0 +1 @@
+$("#document_<%= @document.id %>").replaceWith("<%=escape_javascript( render :partial=>"document", :object=>@document)%>");
diff --git a/app/views/documents/write.html.erb b/app/views/documents/write.html.erb
new file mode 100755
index 0000000..e3ab18b
--- /dev/null
+++ b/app/views/documents/write.html.erb
@@ -0,0 +1,6 @@
+Editing Dokument
+
+<%= render 'form' %>
+
+<%= link_to 'Show', @document %> |
+
diff --git a/app/views/documents/write_etherpad.html.erb b/app/views/documents/write_etherpad.html.erb
new file mode 100644
index 0000000..3c33eb4
--- /dev/null
+++ b/app/views/documents/write_etherpad.html.erb
@@ -0,0 +1 @@
+<%= link_to "weiter" , "http://www.fet.at/etherpad/p/"+@document.ep_pad.id , target: :blank %>
diff --git a/app/views/fragen/_form.html.erb b/app/views/fragen/_form.html.erb
index 07f8b7d..dc4ef15 100644
--- a/app/views/fragen/_form.html.erb
+++ b/app/views/fragen/_form.html.erb
@@ -1,7 +1,7 @@
<%= tinymce_assets %>
<%= semantic_form_for @frage do |f| %>
<%= f.inputs do %>
- <%= f.input :title %>
+ <%= f.input :title , :as=>:text %>
<%= f.input :thema %>
<%= f.input :text, :as=>:tinymce_text%>
<% end %>
diff --git a/app/views/fragen/_rform.html.erb b/app/views/fragen/_rform.html.erb
index b772066..db2efe0 100644
--- a/app/views/fragen/_rform.html.erb
+++ b/app/views/fragen/_rform.html.erb
@@ -1,7 +1,7 @@
<%= tinymce_assets %>
<%= semantic_form_for @frage , :remote=>true do |f| %>
<%= f.inputs do %>
- <%= f.input :title %>
+ <%= f.input :title, :as=>:text %>
<%= f.input :thema %>
<%= f.input :text, :as=>:tinymce_text%>
<% end %>
diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb
index 18c0747..da51049 100755
--- a/app/views/home/index.html.erb
+++ b/app/views/home/index.html.erb
@@ -1,5 +1,6 @@
-
<%= I18n.t('home.willkommen') %>
+
<%= I18n.t('home.willkommen') %>
+<%= render partial: "themen/small", object: @starttopic %>
diff --git a/app/views/home/kontakt.html.erb b/app/views/home/kontakt.html.erb
index 68ff483..764a481 100644
--- a/app/views/home/kontakt.html.erb
+++ b/app/views/home/kontakt.html.erb
@@ -3,8 +3,5 @@
<% @themen.each do |th| %>
<%= render partial: "themen/small", object: th %>
<% end %>
-
-
-
diff --git a/app/views/layouts/_login.html.erb b/app/views/layouts/_login.html.erb
index 7a65018..133ed37 100644
--- a/app/views/layouts/_login.html.erb
+++ b/app/views/layouts/_login.html.erb
@@ -1,9 +1,17 @@
<% if user_signed_in? %>
-
Logged in as : <%= current_user.email %>
- <%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
-
- <% else %>
-
- <%= link_to('Login', new_user_session_path) %>
-
- <% end %>
+
+ <%= ff_icon('icon-user')%>
+
+
+<% else %>
+
+ <%= link_to('Login', new_user_session_path) %>
+
+<% end %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index b6c22ee..1318273 100755
Binary files a/app/views/layouts/application.html.erb and b/app/views/layouts/application.html.erb differ
diff --git a/app/views/layouts/menu.html.erb b/app/views/layouts/menu.html.erb
index 04b795c..9a6d97c 100644
--- a/app/views/layouts/menu.html.erb
+++ b/app/views/layouts/menu.html.erb
@@ -35,15 +35,18 @@
-
+ <%= render 'layouts/login' %>
+
+
-
+
+
diff --git a/app/views/meetings/_meeting.html.erb b/app/views/meetings/_meeting.html.erb
new file mode 100644
index 0000000..9298e28
--- /dev/null
+++ b/app/views/meetings/_meeting.html.erb
@@ -0,0 +1,15 @@
+
+
+<%= link_to meeting.text, meeting %>
+<%= link_to "Ankündigung", rubrik_neuigkeit_path(meeting.neuigkeit.rubrik, meeting.neuigkeit) unless meeting.neuigkeit.nil? %>
+<%= link_to "ankündigen", announce_meeting_path(meeting), remote: true if meeting.neuigkeit.nil? %>
+<%= link_to "edit", edit_meeting_path(meeting), remote: true %>
+<%= link_to 'Delete', meeting, method: :delete, data: { confirm: 'Are you sure?' } , remote: true if can? :delete, meeting %>
+<%= render meeting.calentry unless meeting.calentry.nil? %>
+<%= link_to "Agenda" , create_agenda_meeting_path(meeting), :remote=>true if meeting.agenda.nil? %>
+<%= link_to "Protokoll" , create_protocol_meeting_path(meeting),:remote=>true if meeting.protocol.nil? %>
+<%= render meeting.agenda unless meeting.agenda.nil? %>
+<%= render meeting.protocol unless meeting.protocol.nil? %>
+
+
+
diff --git a/app/views/meetings/_meeting_list.html.erb b/app/views/meetings/_meeting_list.html.erb
new file mode 100644
index 0000000..1d17303
--- /dev/null
+++ b/app/views/meetings/_meeting_list.html.erb
@@ -0,0 +1,7 @@
+
+<% unless meeting_list.empty? %>
+<% meeting_list.each do |m| %>
+<%= render m %>
+<% end%>
+<% end%>
+
diff --git a/app/views/meetings/_nested_form.html.erb b/app/views/meetings/_nested_form.html.erb
new file mode 100644
index 0000000..db36946
--- /dev/null
+++ b/app/views/meetings/_nested_form.html.erb
@@ -0,0 +1,23 @@
+<%= fa_icon("calendar 2x") %>
+<%= notice %>
+
+<%= semantic_form_for @meeting, :remote=>true, :html=>{:class=>""} do |f| %>
+
+ <%= f.input :name %>
+ <%= f.input :meetingtyp %>
+
+ <%= f.semantic_fields_for :calentry, @meeting.calentry do |ff| %>
+ <%= ff.input :start, :as => :datetimepicker %>
+ <%= ff.input :ende, :as => :datetimepicker %>
+ <%= ff.input :typ %>
+ <% ff.input :object_id, :as=>:hidden %>
+ <% ff.input :object_type %>
+
+ <% end %>
+
+<%= f.input :parent_id, :as=>:hidden %>
+<%= f.input :parent_type, :as=>:hidden %>
+ <%= f.action :submit, :as => :input_ %>
+
+<% end %>
+<%= @meeting.calentry.to_yaml %>
diff --git a/app/views/meetings/create.js.erb b/app/views/meetings/create.js.erb
new file mode 100644
index 0000000..6e6be25
--- /dev/null
+++ b/app/views/meetings/create.js.erb
@@ -0,0 +1 @@
+$("#<%= Meeting.new_divid_for(@parent) %>").replaceWith("\">
<%=escape_javascript( render :partial=>"meeting", :object=>@meeting)%>");
diff --git a/app/views/meetings/destroy.js.erb b/app/views/meetings/destroy.js.erb
new file mode 100644
index 0000000..363a5a5
--- /dev/null
+++ b/app/views/meetings/destroy.js.erb
@@ -0,0 +1 @@
+$("#meeting_<%= @meeting_id %>").remove();
diff --git a/app/views/meetings/edit.js.erb b/app/views/meetings/edit.js.erb
new file mode 100644
index 0000000..773307c
--- /dev/null
+++ b/app/views/meetings/edit.js.erb
@@ -0,0 +1,5 @@
+$("#<%= @meeting.divid %>").html("<%=escape_javascript( render :partial=>"nested_form" ,:object=>@meeting)%>");
+
+
+
+
\ No newline at end of file
diff --git a/app/views/meetings/index.js.erb b/app/views/meetings/index.js.erb
new file mode 100644
index 0000000..91b9cd3
--- /dev/null
+++ b/app/views/meetings/index.js.erb
@@ -0,0 +1 @@
+$("#meetings_for_<%= @parent.class.to_s %>_<%= @parent.id.to_s %>").replaceWith("<%=escape_javascript( render :partial=>"meetings/meeting_list", object: @meetings, locals: {parent: @parent} ) %>");
diff --git a/app/views/meetings/new.js.erb b/app/views/meetings/new.js.erb
new file mode 100644
index 0000000..a580664
--- /dev/null
+++ b/app/views/meetings/new.js.erb
@@ -0,0 +1,3 @@
+$("#<%= Meeting.new_divid_for(@parent) %>").replaceWith("\"><%=escape_javascript( render :partial=>"nested_form" ,:object=>@meeting) %>
");
+
+
\ No newline at end of file
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/meetings/update.js.erb b/app/views/meetings/update.js.erb
new file mode 100644
index 0000000..24d02dc
--- /dev/null
+++ b/app/views/meetings/update.js.erb
@@ -0,0 +1 @@
+$("#meeting_<%= @meeting.id %>").replaceWith("<%=escape_javascript( render :partial=>"meeting", :object=>@meeting)%>");
diff --git a/app/views/neuigkeiten/_nlink_list_search_whole.html.erb b/app/views/neuigkeiten/_nlink_list_search_whole.html.erb
index f2aefa1..fa9e393 100644
--- a/app/views/neuigkeiten/_nlink_list_search_whole.html.erb
+++ b/app/views/neuigkeiten/_nlink_list_search_whole.html.erb
@@ -1,5 +1,19 @@
- <%= render partial: "nlink_list_search", collection: nlink_list_search_whole %>
+<% unless @results.nil? %>
+
+<% @results.results.each do |res| %>
+<% if can?(:show, res) %>
+-
+<%= link_to create_link_rubrik_neuigkeit_path(@neuigkeit.rubrik, @neuigkeit, :link_id=>res.id, :link_type=>res.class.to_s), remote: true, class: :linkbox do %>
+<%= render :partial=>res.class.to_s.pluralize.downcase+"/nlink", :object=>res %>
+<% end %>
+
+<% end %>
+<% end %>
+
+<% end %>
+
+ <% render partial: "nlink_list_search", collection: nlink_list_search_whole %>
diff --git a/app/views/neuigkeiten/show.html.erb b/app/views/neuigkeiten/show.html.erb
index 62afa66..8e33317 100755
--- a/app/views/neuigkeiten/show.html.erb
+++ b/app/views/neuigkeiten/show.html.erb
@@ -50,6 +50,9 @@ end
<%= render ce unless ce.nil? %>
<% end %>
+<% unless @neuigkeit.meeting.nil? %>
+<%= render @neuigkeit.meeting %>
+<% end%>
<%= link_to "new Calentry", new_calentry_path(:object_id=>@neuigkeit.id, :object_type=>"Neuigkeit"), :remote=>true if can? :edit, @neuigkeit %>
<%= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
diff --git a/app/views/rubriken/show.html.erb b/app/views/rubriken/show.html.erb
index a74232b..c3b567b 100755
--- a/app/views/rubriken/show.html.erb
+++ b/app/views/rubriken/show.html.erb
@@ -1,4 +1,6 @@
<%= content_for :header do %>
+
+
Fetsite - <%= @rubrik.name %>
<% set_meta_tags :og => {
:title => @rubrik.name.to_s,
@@ -8,7 +10,9 @@
<%= display_meta_tags %>
<% end %>
+
<%= render 'tabs' %>
+<%= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
<%= notice %>
@@ -52,7 +56,6 @@
-<%= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
diff --git a/app/views/themen/_documents.html.erb b/app/views/themen/_documents.html.erb
new file mode 100644
index 0000000..6183c01
--- /dev/null
+++ b/app/views/themen/_documents.html.erb
@@ -0,0 +1,16 @@
+
+<% if can?(:edit,@thema)|| ! @thema.documents.empty? %>
+
+Dokumente
+<%= link_to "Neues Dokument", new_document_path(:parent_id=>@thema.id, :parent_type=>"Thema"), :remote=>true %>
+
+
+<% unless @documents.empty? %>
+
+<% @documents.each do |d| %>
+<%= render d %>
+
+<% end%>
+<% end%>
+<% end%>
+
diff --git a/app/views/themen/_small.html.erb b/app/views/themen/_small.html.erb
index cc9ad4a..af1d9ed 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,37 @@
<%= raw(frage.text) %>
<% end %>
+
+
+<% if can?(:edit,small) || !small.meetings.empty? %>
+Treffen/Sitzungen
+<%= link_to "Neues Meeting", new_meeting_path(:parent_id=>small.id, :parent_type=>"Thema"), :remote=>true %>
+
+<%= link_to "All", meetings_path(:parent_id=>small.id, :parent_type=>"Thema"), :remote=>true %>
+<%= link_to "upcomming", meetings_path(:parent_id=>small.id, :parent_type=>"Thema",:filter=>"upcomming"), :remote=>true %>
+<%= render :partial=>"meetings/meeting_list", object: small.meetings, locals: {parent: small} %>
+<% end %>
+
+
+<% if can?(:edit,small)|| ! small.documents.empty? %>
+
+Dokumente
+<%= link_to "Neues Dokument", new_document_path(:parent_id=>small.id, :parent_type=>"Thema"), :remote=>true %>
+
+
+<% unless small.documents.empty? %>
+
+<% small.documents.each do |d| %>
+<%= render d %>
+
+<% end%>
+<% end%>
+<% end%>
+
+
+
+
+
<% unless small.hideattachment %>
<%= render partial: "themen/attachment_list", object: small.attachments, locals:{editor: false} unless small.attachments.empty? %>
<% end %>
diff --git a/app/views/themen/_verw_liste.html.erb b/app/views/themen/_verw_liste.html.erb
index 920fef3..12713b2 100644
--- a/app/views/themen/_verw_liste.html.erb
+++ b/app/views/themen/_verw_liste.html.erb
@@ -9,6 +9,9 @@
<%= link_to sanitize_thema_path(thema),:remote=>true do %> <%= ff_icon('icon-leaf') %> Sanitize <% end %>
<%= link_to fragen_thema_path(thema),:remote=>true do %> Fragen <% end %>
+<%= link_to documents_thema_path(thema),:remote=>true do %> Fragen <% end %>
+<%= link_to meetings_thema_path(thema),:remote=>true do %> Fragen <% end %>
+
<%= link_to attachments_thema_path(thema),:remote=>true do %> Attachments <% end %>
diff --git a/app/views/themen/documents.js.erb b/app/views/themen/documents.js.erb
new file mode 100644
index 0000000..3174d9a
--- /dev/null
+++ b/app/views/themen/documents.js.erb
@@ -0,0 +1 @@
+$("#themaview").html("<%=escape_javascript( render :partial=>'themen/documents' )%>")
\ No newline at end of file
diff --git a/app/views/themes/blue1/home/index.html.erb b/app/views/themes/blue1/home/index.html.erb
index e38d309..e6e922c 100644
--- a/app/views/themes/blue1/home/index.html.erb
+++ b/app/views/themes/blue1/home/index.html.erb
@@ -1,5 +1,8 @@
-
<%= I18n.t('home.willkommen') %>
+
<%= I18n.t('home.willkommen') %>
+<%= raw(@starttopic.text) %>
+
+
diff --git a/config/routes.rb b/config/routes.rb
index a7c5835..713df3d 100755
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -156,13 +156,34 @@ Fetsite::Application.routes.draw do
get :verwalten
get :sanitize
get :is_updated
+ get :documents
+ get :meetings
end
resources :attachments
end
-
+
resources :calendars
get 'verwalten/calendars', :controller=>:calendars, :action=>:verwalten, :as=>'calendars_verwalten'
resources :calentries
+ resources :documents do
+ member do
+ get :write
+ get :write_etherpad
+ get :read_from_etherpad
+ get :dump_to_etherpad
+ end
+ end
+ resources :meetings do
+ member do
+ get :announce
+ 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
new file mode 100644
index 0000000..027c7e9
--- /dev/null
+++ b/db/migrate/20141119200355_create_documents.rb
@@ -0,0 +1,15 @@
+class CreateDocuments < ActiveRecord::Migration
+ def change
+ create_table :documents do |t|
+ t.integer :typ, :default=>0
+ t.string :name
+ t.text :text
+ 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/db/migrate/20141214132815_add_neuigkeit_to_meeting.rb b/db/migrate/20141214132815_add_neuigkeit_to_meeting.rb
new file mode 100644
index 0000000..5dddd43
--- /dev/null
+++ b/db/migrate/20141214132815_add_neuigkeit_to_meeting.rb
@@ -0,0 +1,6 @@
+class AddNeuigkeitToMeeting < ActiveRecord::Migration
+ def change
+ add_column :meetings, :neuigkeit_id, :integer
+ add_column :meetingtyps, :rubrik_id, :integer
+ 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/documents.rb b/spec/factories/documents.rb
new file mode 100644
index 0000000..e7d4a9c
--- /dev/null
+++ b/spec/factories/documents.rb
@@ -0,0 +1,10 @@
+FactoryGirl.define do
+ factory :document do
+ typ 1
+name "MyString"
+text "MyText"
+etherpadkey "MyString"
+parent ""
+ end
+
+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/document_spec.rb b/spec/models/document_spec.rb
new file mode 100644
index 0000000..d39f418
--- /dev/null
+++ b/spec/models/document_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Document, :type => :model 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