From a8401391a6ad3dbf5cf94395df35bbe77311b6e6 Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Sat, 29 Mar 2014 11:30:46 +0100 Subject: [PATCH] Neuigkeiten Link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Querverweise für Neuigkeiten --- app/controllers/neuigkeiten_controller.rb | 58 ++++++++++++++----- app/controllers/themengruppen_controller.rb | 7 +-- app/models/gallery.rb | 7 +++ app/models/gremium.rb | 4 +- app/models/lva.rb | 7 ++- app/models/neuigkeit.rb | 3 + app/models/nlink.rb | 10 ++++ app/models/thema.rb | 2 +- app/views/galleries/_nlink.html.erb | 21 +++++++ app/views/galleries/index.html.erb | 21 +++++++ app/views/home/search.html.erb | 2 +- app/views/lvas/_nlink.html.erb | 3 + app/views/neuigkeiten/_nlink_list.html.erb | 11 ++++ .../neuigkeiten/_nlink_list_search.html.erb | 12 ++++ app/views/neuigkeiten/show.html.erb | 22 +++++-- app/views/themen/_nlink.html.erb | 1 + app/views/themengruppen/show.html.erb | 7 ++- .../themes/2003/themengruppen/show.html.erb | 25 -------- config/routes.rb | 2 + db/migrate/20140328200432_create_nlinks.rb | 13 +++++ spec/factories/nlinks.rb | 11 ++++ spec/models/nlink_spec.rb | 5 ++ 22 files changed, 199 insertions(+), 55 deletions(-) create mode 100644 app/models/nlink.rb create mode 100644 app/views/galleries/_nlink.html.erb create mode 100644 app/views/lvas/_nlink.html.erb create mode 100644 app/views/neuigkeiten/_nlink_list.html.erb create mode 100644 app/views/neuigkeiten/_nlink_list_search.html.erb create mode 100644 app/views/themen/_nlink.html.erb delete mode 100644 app/views/themes/2003/themengruppen/show.html.erb create mode 100644 db/migrate/20140328200432_create_nlinks.rb create mode 100644 spec/factories/nlinks.rb create mode 100644 spec/models/nlink_spec.rb diff --git a/app/controllers/neuigkeiten_controller.rb b/app/controllers/neuigkeiten_controller.rb index df2bd33..575bb09 100755 --- a/app/controllers/neuigkeiten_controller.rb +++ b/app/controllers/neuigkeiten_controller.rb @@ -1,28 +1,16 @@ class NeuigkeitenController < ApplicationController - before_filter {@toolbar_elements=[]} + before_filter :load_toolbar_elements, :only=>[:show,:find_link] load_and_authorize_resource def show - @neuigkeit = Neuigkeit.find(params[:id]) + @neuigkeit = Neuigkeit.find(params[:id]) @rubrik=@neuigkeit.rubrik + if !params[:version].nil? @neuigkeit.assign_attributes(@neuigkeit.translation.versions.reverse[params[:version].to_i].reify.attributes.select{|k,v| @neuigkeit.translated_attribute_names.include? k.to_sym }) - - # @neuigkeit=Neuigkeit.find(params[:id]) end @calentries1=@neuigkeit.calentries - @toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>"Sure?" } if can? :publish, @neuigkeit - @toolbar_elements << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>"Sure?" } if can?(:unpublish, @neuigkeit) && !@neuigkeit.published? - - @toolbar_elements << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik - @versions= @neuigkeit.translation.versions.select([:created_at]).reverse - @toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions} - - @toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit -# @toolbar_elements << {:path=> add_calentry_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :text=>"Add Calentry", :icon=>:plus} - - end def new @@ -45,7 +33,7 @@ class NeuigkeitenController < ApplicationController @neuigkeit.calentry=ce @neuigkeit.save - render 'edit' + render 'edit' end def unpublish @@ -74,6 +62,24 @@ class NeuigkeitenController < ApplicationController @calentries<< Calentry.new end + def find_link + @rubrik=@neuigkeit.rubrik + @calentries1=@neuigkeit.calentries + @nlink_search = Neuigkeit::LINKTYPES.clone + + @nlink_search.collect!{|t| t.constantize} + @nlink_search.collect!{|t| t.search(params[:query]).limit(2)} + + +@nlink_search.flatten! + + render action:"show" + end + def create_link + Nlink.create(:link=>params[:link_type].constantize.find(params[:link_id]),:neuigkeit=>Neuigkeit.find(params[:id])) + + redirect_to action:"show" + end def create @neuigkeit = Neuigkeit.new(params[:neuigkeit]) @@ -111,4 +117,24 @@ class NeuigkeitenController < ApplicationController end end + +private + def load_toolbar_elements + @neuigkeit=Neuigkeit.find(params[:id]) + @toolbar_elements=[] + @toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:publish, @neuigkeit) && @neuigkeit.published? + @toolbar_elements << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:unpublish, @neuigkeit) && !@neuigkeit.published? + @toolbar_elements << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik + @versions= @neuigkeit.translation.versions.select([:created_at]).reverse + + @toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions} + + @toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit + + end + + + + + end diff --git a/app/controllers/themengruppen_controller.rb b/app/controllers/themengruppen_controller.rb index 223881d..6506015 100644 --- a/app/controllers/themengruppen_controller.rb +++ b/app/controllers/themengruppen_controller.rb @@ -21,14 +21,13 @@ class ThemengruppenController < ApplicationController # GET /themengruppen/1.json def show @themengruppe = Themengruppe.find(params[:id]) - @themen = @themengruppe.themen.order(:priority).reverse + @themen = @themengruppe.themen.order(:priority).reverse @toolbar_elements = [] @toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('thema.add'), :path=>new_themengruppe_thema_path(@themengruppe)} if can? :new, Themengruppe @toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('themengruppe.edit'), :path=>edit_themengruppe_path(@themengruppe)} if can? :edit, @themengruppe - @toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("themengruppe.manage"), :path=>themengruppe_verwalten_path(@themengruppe)} if can? :edit, @themengruppe - @toolbar_elements << {:hicon=>'icon-remove-circle',:text=>I18n.t('themengruppe.remove'), :path=>themengruppe_path(@themengruppe), :method=>:delete,:confirm=>I18n.t('themengruppe.sure')} if can? :delete, @themengruppe - + @toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("themengruppe.manage"), :path=>themengruppe_verwalten_path(@themengruppe)} if can? :edit, @themengruppe + @toolbar_elements << {:hicon=>'icon-remove-circle',:text=>I18n.t('themengruppe.remove'), :path=>themengruppe_path(@themengruppe), :method=>:delete,:confirm=>I18n.t('themengruppe.sure')} if can? :delete, @themengruppe respond_to do |format| format.html # show.html.erb diff --git a/app/models/gallery.rb b/app/models/gallery.rb index ae4afde..bddea61 100644 --- a/app/models/gallery.rb +++ b/app/models/gallery.rb @@ -14,4 +14,11 @@ class Gallery < ActiveRecord::Base WORD_COUNT = 20 attr_accessible :datum, :desc, :name has_many :fotos + has_many :nlinks, as: :link + scope :search, ->(query) {where("name like ? or desc like ?", "%#{query}%", "%#{query}%")} + + def title + name + end end + diff --git a/app/models/gremium.rb b/app/models/gremium.rb index ebc571d..c119b55 100644 --- a/app/models/gremium.rb +++ b/app/models/gremium.rb @@ -23,7 +23,9 @@ class Gremium < ActiveRecord::Base 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 - # Gremium im 2. Fall für die Konstruktion "Mitglied des ... / der ... " + scope :search, ->(query) {where("name like ? or desc like ?", "%#{query}%", "%#{query}%")} + + # Gremium im 2. Fall für die Konstruktion "Mitglied des ... / der ... " accepts_nested_attributes_for :memberships, :reject_if=>lambda{|a| a[:typ].blank?|| a[:start].blank? ||a[:fetprofile_id].blank?} def fall2 Gremium::ART2FALL[self.geschlecht.to_i].to_s+" "+ self.name.to_s+ ((self.geschlecht.to_i==1||self.geschlecht.to_i==0)? "s":"") diff --git a/app/models/lva.rb b/app/models/lva.rb index e963d0d..34b6ab0 100755 --- a/app/models/lva.rb +++ b/app/models/lva.rb @@ -44,6 +44,7 @@ class Lva < ActiveRecord::Base has_many :beispiele , :class_name => "Beispiel" has_and_belongs_to_many :lecturers translates :desc,:pruefungsinformation, :fallbacks_for_empty_translations => true, :versioning=>true + scope :search, ->(query) {where("name like ? or 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? @@ -52,6 +53,11 @@ class Lva < ActiveRecord::Base validates_presence_of :stunden # Stunden Eingetragen? validates_presence_of :modul # Zugehöriges Modul eingetragen? # (zumindest eines) + has_many :nlinks, as: :link + + def title + self.name + end def full_name return self.typ + ' ' + self.name end @@ -69,7 +75,6 @@ class Lva < ActiveRecord::Base end - ## # Lade Daten aus TISS und füge diese in die Datenbank ein. def tisshash(semester) diff --git a/app/models/neuigkeit.rb b/app/models/neuigkeit.rb index 1660869..ab3bdd9 100755 --- a/app/models/neuigkeit.rb +++ b/app/models/neuigkeit.rb @@ -28,8 +28,11 @@ class Neuigkeit < ActiveRecord::Base scope :unpublished, -> {where("datum >= ? OR datum IS NULL", Date.today)} scope :public, ->{includes(:rubrik).where("rubriken.public"=>:true)} scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")} + LINKTYPES=["Thema", "Gallery", "Lva"] accepts_nested_attributes_for :calentries, :allow_destroy=>true , :reject_if=> lambda{|a| a[:start].blank?} before_validation :sanitize + has_many :nlinks + def datum_nilsave self.datum.nil? ? Time.now + 42.years : self.datum end diff --git a/app/models/nlink.rb b/app/models/nlink.rb new file mode 100644 index 0000000..c3130f9 --- /dev/null +++ b/app/models/nlink.rb @@ -0,0 +1,10 @@ +class Nlink < ActiveRecord::Base + attr_accessible :link_id, :link_type, :neuigkeit_id, :neuigkeit,:link, :sort, :title + belongs_to :neuigkeit + belongs_to :link, :polymorphic=>true + validates :neuigkeit, :presence=>true + validates :link, :presence=>true +validates :link_id, :uniqueness=>{:scope=>[:neuigkeit_id]} + + +end diff --git a/app/models/thema.rb b/app/models/thema.rb index 58097ac..c11e5f7 100644 --- a/app/models/thema.rb +++ b/app/models/thema.rb @@ -19,6 +19,6 @@ class Thema < ActiveRecord::Base validates :themengruppe, :presence => true validates :title, :presence => true scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")} - + has_many :nlinks, as: :link translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true end diff --git a/app/views/galleries/_nlink.html.erb b/app/views/galleries/_nlink.html.erb new file mode 100644 index 0000000..72f2216 --- /dev/null +++ b/app/views/galleries/_nlink.html.erb @@ -0,0 +1,21 @@ + diff --git a/app/views/galleries/index.html.erb b/app/views/galleries/index.html.erb index 68a8a8f..ed4bb87 100644 --- a/app/views/galleries/index.html.erb +++ b/app/views/galleries/index.html.erb @@ -25,6 +25,27 @@

+ <% end %> <% end %> diff --git a/app/views/home/search.html.erb b/app/views/home/search.html.erb index a22bf16..f0a0f2f 100644 --- a/app/views/home/search.html.erb +++ b/app/views/home/search.html.erb @@ -1,6 +1,6 @@
<%= semantic_form_for :search,:remote=>true, :url=>search_home_index_path, :html=>{:id=>"search_form", :method=>'get'} do |f| %> -<%= f.input :query, :input_html => { :name => 'query' } %> +<%= f.input :query, :input_html => { :name => 'query' } , :label=>false %> <% end %>