From bd073e0835733b6e930625347b950162cb288f3d Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Tue, 3 Jun 2014 18:23:14 +0530 Subject: [PATCH] Wiki integriert in HP --- Gemfile | 5 +- app/controllers/home_controller.rb | 1 + app/controllers/themen_controller.rb | 5 ++ app/controllers/wikis_controller.rb | 46 ++++++++++++ app/models/thema.rb | 4 +- app/models/themengruppe.rb | 13 ++++ app/models/wiki.rb | 73 +++++++++++++++++++ app/views/home/intern.html.erb | 11 +++ app/views/themen/show.html.erb | 2 - app/views/themengruppen/index.html.erb | 36 ++++----- app/views/themes/blue1/home/index.html.erb | 51 +++++++++++++ app/views/wikis/_form.html.erb | 38 ++++++++++ app/views/wikis/edit.html.erb | 5 ++ app/views/wikis/show.html.erb | 9 +++ app/views/wikis/verwalten.html.erb | 8 ++ config/routes.rb | 20 ++++- .../20140529120536_add_wiki_to_thema.rb | 7 ++ ...0140601114003_add_wiki_to_themengruppen.rb | 5 ++ 18 files changed, 309 insertions(+), 30 deletions(-) create mode 100644 app/controllers/wikis_controller.rb create mode 100644 app/models/wiki.rb create mode 100644 app/views/themes/blue1/home/index.html.erb create mode 100644 app/views/wikis/_form.html.erb create mode 100644 app/views/wikis/edit.html.erb create mode 100644 app/views/wikis/show.html.erb create mode 100644 app/views/wikis/verwalten.html.erb create mode 100644 db/migrate/20140529120536_add_wiki_to_thema.rb create mode 100644 db/migrate/20140601114003_add_wiki_to_themengruppen.rb diff --git a/Gemfile b/Gemfile index ec3165b..ac45d67 100755 --- a/Gemfile +++ b/Gemfile @@ -72,8 +72,9 @@ gem 'paperclip' ,'~>3.4.0' gem 'git' gem 'haml' -#gem 'RedCloth' -#gem 'gollum' +gem 'RedCloth' +gem 'wikicloth' +gem 'gollum-lib' gem 'awesome_nested_set' gem 'annotate', ">=2.5.0" gem 'carrierwave', "~>0.9.0" diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index ba318ee..2aa11d6 100755 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -12,6 +12,7 @@ class HomeController < ApplicationController def intern authorize! :seeintern, User @neuigkeiten = Neuigkeit.intern.recent + @themengruppen=Themengruppe.intern end def startdev render 'setup_fetsite_dev' diff --git a/app/controllers/themen_controller.rb b/app/controllers/themen_controller.rb index 3a95e58..4462131 100644 --- a/app/controllers/themen_controller.rb +++ b/app/controllers/themen_controller.rb @@ -32,6 +32,10 @@ class ThemenController < ApplicationController end def verwalten @thema = Thema.find(params[:id]) + unless (@thema.wikiname.empty? || @thema.wikiname.nil?) + redirect_to verwalten_wiki_path(Wiki.find(@thema.id)) + end + @fragen=@thema.fragen @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>"Verwalten", :path=>verwalten_thema_path(@thema)}] @@ -54,6 +58,7 @@ class ThemenController < ApplicationController # GET /themen/1/edit def edit @thema = Thema.find(params[:id]) + respond_to do |format| format.html format.js diff --git a/app/controllers/wikis_controller.rb b/app/controllers/wikis_controller.rb new file mode 100644 index 0000000..1033d07 --- /dev/null +++ b/app/controllers/wikis_controller.rb @@ -0,0 +1,46 @@ +class WikisController < ApplicationController + load_and_authorize_resource + + def show + @wiki = Wiki.find(params[:id]) + @fragen = @wiki.fragen + @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}] + end + + def wiki + @wiki = Wiki.find_or_init(params[:name]) + @fragen = @wiki.fragen + @toolbar_elements = [] +# @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}] + + redirect_to wiki_path(@wiki) + end + + def verwalten + @wiki = Wiki.find(params[:id]) + @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>edit_wiki_path(@wiki)}] + + end + def edit + @wiki = Wiki.find(params[:id]) + + end + + def update + @wiki = Wiki.find(params[:id]) + @themen = @wiki.themengruppe.themen.order(:priority).reverse + @wiki.raw_data=params[:wiki][:raw_data] + respond_to do |format| + if @wiki.update_attributes(params[:wiki]) + format.html { redirect_to @wiki, notice: 'Thema was successfully updated.' } + format.json { head :no_content } + format.js + else + format.html { render action: "edit" } + format.json { render json: @wiki.errors, status: :unprocessable_entity } + format.js { render action: "edit" } + end + end + + end +end diff --git a/app/models/thema.rb b/app/models/thema.rb index c32149c..2a3a9c4 100644 --- a/app/models/thema.rb +++ b/app/models/thema.rb @@ -22,7 +22,9 @@ class Thema < ActiveRecord::Base validates :text, :presence => true scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")} translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true - + def is_wiki? + wikiname.empty? || wikiname.nil? + end def text_first_words md = /

(?[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p']) words=md[:text].split(" ") unless md.nil? diff --git a/app/models/themengruppe.rb b/app/models/themengruppe.rb index 0dd89b2..f4f206e 100644 --- a/app/models/themengruppe.rb +++ b/app/models/themengruppe.rb @@ -20,4 +20,17 @@ class Themengruppe < ActiveRecord::Base validates :text, :presence => true translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true + + scope :intern,-> {where(:public=>false)} + + def self.find_wiki_default + where(:wiki_default=>true).first + end + + def make_wiki_default + Themengruppe.where(:wiki_default=>:true).update_all(:wiki_default=>:false) + self.wiki_default=true; + self.save; + end + end diff --git a/app/models/wiki.rb b/app/models/wiki.rb new file mode 100644 index 0000000..23cd374 --- /dev/null +++ b/app/models/wiki.rb @@ -0,0 +1,73 @@ +class Wiki < Thema + validates :wikiname, :uniqueness=>true, :presence=>true + after_initialize :load_wiki + attr_accessible :wikiname, :wikiformat, :hidelink, :raw_data + WIKIFORMATS={nil=> :textile, 0 =>:textile, 1=> :mediawiki} + + def self.find_or_init(name) + w = Wiki.where(:wikiname=>name).first + page = is_file_availaible(name) + if w.nil? + unless page.nil? + w=Wiki.new(:wikiname=>name, :title=>name, :wikiformat=>Wiki::WIKIFORMATS.invert[page.format], :hidelink=>true) + else + w=Wiki.new(:wikiname=>name, :title=>name, :wikiformat=>0, :hidelink=>true) + wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki") + page=wiki.write_page(name, :textile, "ioi", self.commit) + w.reload_page + end + + w.themengruppe = Themengruppe.find_wiki_default + w.raw_data="Neues Wiki" + w.save + end + w + end + + def raw_data + self.page.raw_data + end + + def raw_data=(data) + self.get_page(self.wikiname) + self.wiki.update_page(self.page, self.wikiname, Wiki::WIKIFORMATS[self.wikiformat], data, self.commit) + self.text=self.page.formatted_data + + end + + def page + self.get_page(wikiname) if @page.nil? + @page + end + + def wiki + @wiki + end + def reload_page + self.get_page(self.wikiname) + end + protected + + + def self.is_file_availaible(name) + wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki") + wiki.page(name) + end + + def load_wiki + @wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki") + end + + def get_page(name) + @page= @wiki.page(name) + @page=self.wiki.write_page(self.wikiname, Wiki::WIKIFORMATS[self.wikiformat]," ",self.commit) if @page.nil? + @page + end + def commit + {message: "RailsUpdate", name:"SomeUser", email: "ttt@t"} + end + + def self.commit + {message: "RailsUpdate", name:"SomeUser", email: "ttt@t"} + end +end diff --git a/app/views/home/intern.html.erb b/app/views/home/intern.html.erb index 2948dfa..ac474c8 100644 --- a/app/views/home/intern.html.erb +++ b/app/views/home/intern.html.erb @@ -4,6 +4,17 @@

<%= link_to "Adressliste", internlist_fetprofiles_path %> <%= link_to "Internes Nachschlagewerk" %> + + +

Neuigkeiten

diff --git a/app/views/themen/show.html.erb b/app/views/themen/show.html.erb index aa8912a..534a436 100644 --- a/app/views/themen/show.html.erb +++ b/app/views/themen/show.html.erb @@ -5,5 +5,3 @@ <%= render :partial=>'layouts/pretty_toolbar' %> -<%= link_to new_thema_attachment_path(@thema) ,:remote=>true do %> new Attachment <% end %> -<%= render :partial => "themen/select", :object => @thema, :locals=>{:editor => :false} %> diff --git a/app/views/themengruppen/index.html.erb b/app/views/themengruppen/index.html.erb index a083311..40e7649 100644 --- a/app/views/themengruppen/index.html.erb +++ b/app/views/themengruppen/index.html.erb @@ -1,31 +1,23 @@
-<%= render :partial=>'layouts/pretty_toolbar' %> -

<%= link_to "FAQS", faqs_themengruppen_path,class: :btn %>

- -
+
- diff --git a/app/views/themes/blue1/home/index.html.erb b/app/views/themes/blue1/home/index.html.erb new file mode 100644 index 0000000..69ac8dd --- /dev/null +++ b/app/views/themes/blue1/home/index.html.erb @@ -0,0 +1,51 @@ +
+

<%= I18n.t('home.willkommen') %>

+
+
+
+ + +

+<%= link_to I18n.t('home.login'), user_omniauth_authorize_path(:ldap) %> +

+
+

Beta Test

+

Die Webseite befindet sich derzeit in einem Entwicklungsstadium, + volle Funktionsfähigkeit ist noch nicht erreicht. Bitte Featurerequests und + Fehlermeldungen auf GitHub melden. +

+

+ <%= link_to "Issues", "http://www.github.com/fetsite/fetsite/issues" %> +

+

+ Bezüglich Design und Steuerung sind Vorschläge erwünscht. +

+

<%= link_to "Steuerelemente und Komponenten", "http://getbootstrap.com/2.3.2/index.html" %>

+

Um bei der Entwicklung mitzuhelfen braucht nur Ruby on Rails installiert werden

+

<%= link_to "Getting Started" , startdev_home_index_path %>

+

Das Kalender Feature wird überarbeitet, in Zukunft soll folgender Link nicht mehr funktionieren <%= link_to "Kalender", calendars_path %> +

+ +
+ <%= link_to "Entwicklungsstatus" , dev_home_index_path %> + <%= render 'beispiele' %> +
+
+ +Verschiedene Styles +
    +
  • <%= link_to "Darkblue", home_index_path({:theme=>"darkblue"}) %>
  • +
  • <%= link_to "Blue1", home_index_path({:theme=>"blue1"}) %>
  • + +
  • <%= link_to "2003", home_index_path({:theme=>"2003"}) %>
  • +
  • <%= link_to "white_1", home_index_path({:theme=>"white_1"}) %>
  • +
+
+
+
+
+ diff --git a/app/views/wikis/_form.html.erb b/app/views/wikis/_form.html.erb new file mode 100644 index 0000000..18361c3 --- /dev/null +++ b/app/views/wikis/_form.html.erb @@ -0,0 +1,38 @@ +<%= tinymce_assets %> +
+ <%= semantic_form_for @wiki do |f| %> + <%= f.inputs do %> +
+
+ <%= f.input :title %> +
+
+ <%= f.input :themengruppe %> +
+
+
+
+ <%= f.input :wikiformat, :as=>:select, :collection=>Wiki::WIKIFORMATS.invert %> +
+
+ <%= f.input :hidelink, :as=>:boolean %> + + <%= @wiki.wikiname %> +
+
+ +
+
+ <%= f.input :raw_data, :label=>false,:as=>:text, :input_html=>{:rows=>20,:class=>"row-fluid"} %> +
+
+ <%= f.actions do %> + <%= f.action :submit, :as => :button %> + <%= f.action :cancel, :as => :link %> + <% end %> + <% end %><% end %> + <%= tinymce %> +

Attachments:

+ + + diff --git a/app/views/wikis/edit.html.erb b/app/views/wikis/edit.html.erb new file mode 100644 index 0000000..de6c7a3 --- /dev/null +++ b/app/views/wikis/edit.html.erb @@ -0,0 +1,5 @@ +
+

Editing thema

+<%= render 'form' %> +
+
<%= link_to 'Back', @thema %> diff --git a/app/views/wikis/show.html.erb b/app/views/wikis/show.html.erb new file mode 100644 index 0000000..9917dee --- /dev/null +++ b/app/views/wikis/show.html.erb @@ -0,0 +1,9 @@ +

<%= notice %>

+<%= link_to "Zurück", @wiki.themengruppe %> +
+<%= debug @wiki %> +<%= render :partial=>"themen/small", :object=>@wiki %> + + +<%= render :partial=>'layouts/pretty_toolbar' %> + diff --git a/app/views/wikis/verwalten.html.erb b/app/views/wikis/verwalten.html.erb new file mode 100644 index 0000000..a2e6f28 --- /dev/null +++ b/app/views/wikis/verwalten.html.erb @@ -0,0 +1,8 @@ +verwalte ein wiki + +<%= @wiki %> + +<%= render :partial=>'layouts/pretty_toolbar' %> + +<%= debug @wiki %> +<%= debug params %> diff --git a/config/routes.rb b/config/routes.rb index a3d5cd6..8c50b6c 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Fetsite::Application.routes.draw do - themes_for_rails + themes_for_rails devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } resources :home, :only=>[:index] do @@ -16,10 +16,24 @@ get 'users/:id/do_confirm', :controller=>:users, :action=>:do_confirm, :as=>'user_do_confirm' get 'config',:controller=>:config,:action=>:index , :as => 'config' - end + end devise_for :users , :controllers=>{:omniauth_callbacks=> "users/omniauth_callbacks"} - + scope '(:locale)' do + scope '(t/:theme)' do + + get "wiki/:name", action: :wiki, controller: :wikis + resources :wikis do + member do + get :verwalten + end + end + end + + end + + # end + # end scope ':locale' do scope '(t/:theme)' do # Studien diff --git a/db/migrate/20140529120536_add_wiki_to_thema.rb b/db/migrate/20140529120536_add_wiki_to_thema.rb new file mode 100644 index 0000000..0c5ccca --- /dev/null +++ b/db/migrate/20140529120536_add_wiki_to_thema.rb @@ -0,0 +1,7 @@ +class AddWikiToThema < ActiveRecord::Migration + def change + add_column :themen, :wikiname, :string + add_column :themen, :wikiformat, :integer + add_column :themen, :hidelink, :boolea + end +end diff --git a/db/migrate/20140601114003_add_wiki_to_themengruppen.rb b/db/migrate/20140601114003_add_wiki_to_themengruppen.rb new file mode 100644 index 0000000..d715a5c --- /dev/null +++ b/db/migrate/20140601114003_add_wiki_to_themengruppen.rb @@ -0,0 +1,5 @@ +class AddWikiToThemengruppen < ActiveRecord::Migration + def change + add_column :themengruppen, :wiki_default, :boolean + end +end