diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 2aa11d6..1162d63 100755 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -14,6 +14,12 @@ class HomeController < ApplicationController @neuigkeiten = Neuigkeit.intern.recent @themengruppen=Themengruppe.intern end + def admin + authorize! :doadmin, User + + + end + def startdev render 'setup_fetsite_dev' end diff --git a/app/controllers/neuigkeiten_controller.rb b/app/controllers/neuigkeiten_controller.rb index e3bc175..8d05e84 100755 --- a/app/controllers/neuigkeiten_controller.rb +++ b/app/controllers/neuigkeiten_controller.rb @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- class NeuigkeitenController < ApplicationController before_filter :load_toolbar_elements, :only=>[:show,:find_link] before_filter :load_toolbar_elements_edit, :only=>[:edit] @@ -61,9 +62,19 @@ class NeuigkeitenController < ApplicationController if params[:verwalten] redirect_to verwalten_rubrik_path(@neuigkeit.rubrik) end - redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit) + redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit) end - + def publish_to_facebook + @neuigkeit = Neuigkeit.find(params[:id]) + unless @neuigkeit.published? + redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit muss veröffentlicht sein um sie auf Facebook zu posten.' + else + page=YAML.load_file("#{::Rails.root.to_s}/tmp/page.yml") + page.feed!(:access_token=>page.access_token, :message=>@neuigkeit.text_first_words, :name=>@neuigkeit.title, :link=>rubrik_neuigkeit_url(@neuigkeit.rubrik, @neuigkeit)+".html") + + redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit auf Facebook gepostet' + end + end def edit @neuigkeit = Neuigkeit.find(params[:id]) @@ -137,9 +148,13 @@ 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 + @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-facebook', :text=> I18n.t('neuigkeit.publish')+" to facebook",:path => publish_to_facebook_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} diff --git a/app/controllers/themen_controller.rb b/app/controllers/themen_controller.rb index a4fbea3..a3aef45 100644 --- a/app/controllers/themen_controller.rb +++ b/app/controllers/themen_controller.rb @@ -57,13 +57,14 @@ class ThemenController < ApplicationController # GET /themen/1/edit def edit @thema = Thema.find(params[:id]) - unless ( @thema.wikiname.nil? || @thema.wikiname.empty? ) + + if @thema.is_wiki? redirect_to edit_wiki_path(Wiki.find(@thema.id)) return end respond_to do |format| format.html - format.js + format.js { @themen= @thema.themengruppe.themen } end end @@ -72,13 +73,15 @@ class ThemenController < ApplicationController def create @thema = Thema.new(params[:thema]) - @themen = @thema.themengruppe.themen.order(:priority).reverse + respond_to do |format| if @thema.save + @themen = @thema.themengruppe.themen.order(:priority).reverse format.html { redirect_to @thema, notice: 'Thema was successfully created.' } format.json { render json: @thema, status: :created, location: @thema } format.js {render action: "update"} else + @themen = @thema.themengruppe.themen.order(:priority).reverse format.html { render action: "new" } format.json { render json: @thema.errors, status: :unprocessable_entity } format.js { render action: "edit" } @@ -105,8 +108,10 @@ class ThemenController < ApplicationController def update @thema = Thema.find(params[:id]) @themen = @thema.themengruppe.themen.order(:priority).reverse + @thema.assign_attributes(params[:thema]) + @thema.fix_links(request.host_with_port) respond_to do |format| - if @thema.update_attributes(params[:thema]) + if @thema.save format.html { redirect_to @thema, notice: 'Thema was successfully updated.' } format.json { head :no_content } format.js @@ -123,7 +128,7 @@ class ThemenController < ApplicationController def destroy @thema = Thema.find(params[:id]) @thema.destroy - + @themen = @thema.themengruppe.themen.order(:priority).reverse respond_to do |format| format.html { redirect_to themengruppe_path(@thema.themengruppe) } format.json { head :no_content } diff --git a/app/controllers/themengruppen_controller.rb b/app/controllers/themengruppen_controller.rb index 8d0b956..cdd6465 100644 --- a/app/controllers/themengruppen_controller.rb +++ b/app/controllers/themengruppen_controller.rb @@ -48,7 +48,8 @@ class ThemengruppenController < ApplicationController @themengruppe = Themengruppe.find(params[:id]) end def verwalten_all - @themengruppen =Themengruppe.order(:priority).reverse + @themengruppen =Themengruppe.public.order(:priority).reverse +@themengruppen_intern =Themengruppe.intern.order(:priority).reverse @toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}] end diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 2c72832..82ed6ea 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,15 +1,17 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController -skip_before_filter :verify_authenticity_token -def failure - - # flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}" -#redirect_to new_user_registration_url , :notice=>"Omniauth Login failed" -super -end -def facebook + skip_before_filter :verify_authenticity_token + def failure + + # flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}" + #redirect_to new_user_registration_url , :notice=>"Omniauth Login failed" + super + end + def facebook # You need to implement the method below in your model (e.g. app/models/user.rb) @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) + data=request.env["omniauth.auth"] + session[:fbuser_access_token]=data.credentials.token if @user sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 474839f..f5a0334 100755 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -12,9 +12,19 @@ class UsersController < ApplicationController end redirect_to users_url end + def fb_set_default_publish_page + if params["page"].nil? || !(current_user.provider=="facebook") + redirect_to intern_home_index_path + else + @fbu=FbGraph::User.new(current_user.uid.to_s).fetch(:access_token=>session["fbuser_access_token"]) + File.open("tmp/page.yml",'w'){|f| f.write(@fbu.accounts(:access_token=>session["fbuser_access_token"]).select { |p| p.name == params["page"] }.first.to_yaml)} + logger.debug @fbu.to_s + redirect_to admin_home_index_path + end + + end def all_update - params[:users].each do |id,u| user=User.find(id) user.fetprofile = Fetprofile.find(u[:fetprofile_id].to_i) if u[:fetprofile_id].to_i>0 @@ -26,7 +36,6 @@ class UsersController < ApplicationController def do_confirm @user= User.find(params[:id]) @user.confirm! - redirect_to users_url end end diff --git a/app/models/ability.rb b/app/models/ability.rb index f61425f..d2a1a9e 100755 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -61,6 +61,7 @@ class Ability if( user.has_role?("fetadmin")) can [:delete],Calendar can [:delete],Calentry + can :doadmin, User end # Rechteverwaltung fuer Neuigkeiten diff --git a/app/models/neuigkeit.rb b/app/models/neuigkeit.rb index 72946df..261e1d1 100755 --- a/app/models/neuigkeit.rb +++ b/app/models/neuigkeit.rb @@ -46,7 +46,7 @@ class Neuigkeit < ActiveRecord::Base self.rubrik.public end def published? - self.datum_nilsave>=Time.now.to_date + self.datum_nilsave(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")} translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true def is_wiki? - wikiname.nil? || wikiname.empty? + !(wikiname.nil? || wikiname.empty?) end def text_first_words md = /

(?[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p']) @@ -36,4 +37,10 @@ class Thema < ActiveRecord::Base end end + def fix_links(host) + full_url= URI.parse(root_url(:host=>host)) + self.text.gsub!(/src="[^"]*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/models/themengruppe.rb b/app/models/themengruppe.rb index f4f206e..ccb5e5a 100644 --- a/app/models/themengruppe.rb +++ b/app/models/themengruppe.rb @@ -22,6 +22,7 @@ class Themengruppe < ActiveRecord::Base translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true scope :intern,-> {where(:public=>false)} + scope :public,-> {where(:public=>true)} def self.find_wiki_default where(:wiki_default=>true).first diff --git a/app/models/user.rb b/app/models/user.rb index a715c06..a81f497 100755 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -38,16 +38,17 @@ belongs_to :fetprofile def self.find_for_facebook_oauth(auth, signed_in_resource=nil) logger.debug auth.to_s logger.debug "DDD Username= #{auth.username}" - user = User.where(:provider => auth.provider, :uid => auth.extra.raw_info.uid).first + user = User.where(:provider => auth.provider, :uid => auth.uid).first unless user - user = User.create(name:auth.uid, + user = User.create(name: auth.uid, provider:auth.provider, - uid:auth.uid, + uid: auth.uid, email:auth.info.email, password:Devise.friendly_token[0,20] ) end + user end def self.find_for_ldap_oauth(auth,signed_in_resource=nil) diff --git a/app/views/home/admin.html.erb b/app/views/home/admin.html.erb new file mode 100644 index 0000000..55cc15d --- /dev/null +++ b/app/views/home/admin.html.erb @@ -0,0 +1,12 @@ +

<%= link_to "Grant extra FB privileges", user_omniauth_authorize_path(:facebook,:params=>{scope:"manage_pages,publish_actions,email"}) %> +

+

+<%= link_to "user", users_path %> +

+

+<%= @fbu.to_yaml.to_s %> + +<%= semantic_form_for :set_page, url: fb_set_default_publish_page_user_path(current_user), html:{method: :get} do |f| %> +<%= f.input :page , :input_html => { :name => 'page' }%> +<% end %> +

diff --git a/app/views/home/intern.html.erb b/app/views/home/intern.html.erb index ac474c8..e5d5eef 100644 --- a/app/views/home/intern.html.erb +++ b/app/views/home/intern.html.erb @@ -3,7 +3,8 @@
<%= link_to "Adressliste", internlist_fetprofiles_path %> - <%= link_to "Internes Nachschlagewerk" %> + <%= link_to "Admin" , admin_home_index_path if current_user.has_role?(:fetadmin) %> + - + <%= link_to "Users", users_path %>

Neuigkeiten

@@ -28,4 +29,3 @@

- diff --git a/app/views/themen/edit.js.erb b/app/views/themen/edit.js.erb index 7256636..5c8ca30 100644 --- a/app/views/themen/edit.js.erb +++ b/app/views/themen/edit.js.erb @@ -1 +1,3 @@ $("#themaview").html("<%= escape_javascript(raw("

"+I18n.t('thema.edit')+"

")+render(:partial=>"themen/form", :locals=>{:remote=>true}) )%>"); + + diff --git a/app/views/themengruppen/verwalten_all.html.erb b/app/views/themengruppen/verwalten_all.html.erb new file mode 100644 index 0000000..8d40ec1 --- /dev/null +++ b/app/views/themengruppen/verwalten_all.html.erb @@ -0,0 +1,54 @@ + +<%= render :partial=>'layouts/pretty_toolbar' %> +
+
+
+
    +<% @themengruppen.each do |themengruppe| %> +
  • <%= themengruppe.title %>-<%= themengruppe.priority %>
  • +<% end %> +
+
    +<% @themengruppen_intern.each do |themengruppe| %> +
  • <%= themengruppe.title %>-<%= themengruppe.priority %>
  • +<% end %> +
+ +
+
+
+ diff --git a/config/routes.rb b/config/routes.rb index da56eba..8d41d4d 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,9 @@ get :index post :all_update end + member do + get :fb_set_default_publish_page + end end get 'users/:id/add_role/:role', :controller=>:users, :action=>:add_role, :as=>'user_add_role' get 'users/:id/do_confirm', :controller=>:users, :action=>:do_confirm, :as=>'user_do_confirm' @@ -34,7 +37,7 @@ # end # end - scope ':locale' do + scope '(:locale)' do scope '(t/:theme)' do # Studien @@ -126,6 +129,7 @@ get 'rm_calentry' get 'create_link' get 'find_link' + get 'publish_to_facebook' end end end @@ -135,13 +139,14 @@ # get 'rubriken/verwalten',:controller=>:rubriken,:action=>:alle_verwalten, :as=>'rubriken_verwalten' resources :home, :only=>[:index] do - get :search, :on=>:collection + get :search, :on => :collection collection do - get 'intern' - get 'dev' - get 'startdev' - get 'linksnotimplemented' - get 'kontakt' + get 'intern' + get 'admin' + get 'dev' + get 'startdev' + get 'linksnotimplemented' + get 'kontakt' end end