facebookpublish,themen fixes

This commit is contained in:
2014-06-20 00:15:45 +05:30
parent 61510a8891
commit 2df0d89b61
16 changed files with 158 additions and 37 deletions

View File

@@ -14,6 +14,12 @@ class HomeController < ApplicationController
@neuigkeiten = Neuigkeit.intern.recent @neuigkeiten = Neuigkeit.intern.recent
@themengruppen=Themengruppe.intern @themengruppen=Themengruppe.intern
end end
def admin
authorize! :doadmin, User
end
def startdev def startdev
render 'setup_fetsite_dev' render 'setup_fetsite_dev'
end end

View File

@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
class NeuigkeitenController < ApplicationController class NeuigkeitenController < ApplicationController
before_filter :load_toolbar_elements, :only=>[:show,:find_link] before_filter :load_toolbar_elements, :only=>[:show,:find_link]
before_filter :load_toolbar_elements_edit, :only=>[:edit] before_filter :load_toolbar_elements_edit, :only=>[:edit]
@@ -61,9 +62,19 @@ class NeuigkeitenController < ApplicationController
if params[:verwalten] if params[:verwalten]
redirect_to verwalten_rubrik_path(@neuigkeit.rubrik) redirect_to verwalten_rubrik_path(@neuigkeit.rubrik)
end end
redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit) redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)
end 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 def edit
@neuigkeit = Neuigkeit.find(params[:id]) @neuigkeit = Neuigkeit.find(params[:id])
@@ -137,9 +148,13 @@ private
def load_toolbar_elements def load_toolbar_elements
@neuigkeit=Neuigkeit.find(params[:id]) @neuigkeit=Neuigkeit.find(params[:id])
@toolbar_elements=[] @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-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 << {: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 << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik
@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 @versions= @neuigkeit.translation.versions.select([:created_at]).reverse
@toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions} @toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions}

View File

@@ -57,13 +57,14 @@ class ThemenController < ApplicationController
# GET /themen/1/edit # GET /themen/1/edit
def edit def edit
@thema = Thema.find(params[:id]) @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)) redirect_to edit_wiki_path(Wiki.find(@thema.id))
return return
end end
respond_to do |format| respond_to do |format|
format.html format.html
format.js format.js { @themen= @thema.themengruppe.themen }
end end
end end
@@ -72,13 +73,15 @@ class ThemenController < ApplicationController
def create def create
@thema = Thema.new(params[:thema]) @thema = Thema.new(params[:thema])
@themen = @thema.themengruppe.themen.order(:priority).reverse
respond_to do |format| respond_to do |format|
if @thema.save if @thema.save
@themen = @thema.themengruppe.themen.order(:priority).reverse
format.html { redirect_to @thema, notice: 'Thema was successfully created.' } format.html { redirect_to @thema, notice: 'Thema was successfully created.' }
format.json { render json: @thema, status: :created, location: @thema } format.json { render json: @thema, status: :created, location: @thema }
format.js {render action: "update"} format.js {render action: "update"}
else else
@themen = @thema.themengruppe.themen.order(:priority).reverse
format.html { render action: "new" } format.html { render action: "new" }
format.json { render json: @thema.errors, status: :unprocessable_entity } format.json { render json: @thema.errors, status: :unprocessable_entity }
format.js { render action: "edit" } format.js { render action: "edit" }
@@ -105,8 +108,10 @@ class ThemenController < ApplicationController
def update def update
@thema = Thema.find(params[:id]) @thema = Thema.find(params[:id])
@themen = @thema.themengruppe.themen.order(:priority).reverse @themen = @thema.themengruppe.themen.order(:priority).reverse
@thema.assign_attributes(params[:thema])
@thema.fix_links(request.host_with_port)
respond_to do |format| respond_to do |format|
if @thema.update_attributes(params[:thema]) if @thema.save
format.html { redirect_to @thema, notice: 'Thema was successfully updated.' } format.html { redirect_to @thema, notice: 'Thema was successfully updated.' }
format.json { head :no_content } format.json { head :no_content }
format.js format.js
@@ -123,7 +128,7 @@ class ThemenController < ApplicationController
def destroy def destroy
@thema = Thema.find(params[:id]) @thema = Thema.find(params[:id])
@thema.destroy @thema.destroy
@themen = @thema.themengruppe.themen.order(:priority).reverse
respond_to do |format| respond_to do |format|
format.html { redirect_to themengruppe_path(@thema.themengruppe) } format.html { redirect_to themengruppe_path(@thema.themengruppe) }
format.json { head :no_content } format.json { head :no_content }

View File

@@ -48,7 +48,8 @@ class ThemengruppenController < ApplicationController
@themengruppe = Themengruppe.find(params[:id]) @themengruppe = Themengruppe.find(params[:id])
end end
def verwalten_all 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()}] @toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}]
end end

View File

@@ -1,15 +1,17 @@
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_filter :verify_authenticity_token skip_before_filter :verify_authenticity_token
def failure def failure
# flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}" # flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}"
#redirect_to new_user_registration_url , :notice=>"Omniauth Login failed" #redirect_to new_user_registration_url , :notice=>"Omniauth Login failed"
super super
end end
def facebook def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb) # 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) @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 if @user
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated

View File

@@ -12,9 +12,19 @@ class UsersController < ApplicationController
end end
redirect_to users_url redirect_to users_url
end 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 def all_update
params[:users].each do |id,u| params[:users].each do |id,u|
user=User.find(id) user=User.find(id)
user.fetprofile = Fetprofile.find(u[:fetprofile_id].to_i) if u[:fetprofile_id].to_i>0 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 def do_confirm
@user= User.find(params[:id]) @user= User.find(params[:id])
@user.confirm! @user.confirm!
redirect_to users_url redirect_to users_url
end end
end end

View File

@@ -61,6 +61,7 @@ class Ability
if( user.has_role?("fetadmin")) if( user.has_role?("fetadmin"))
can [:delete],Calendar can [:delete],Calendar
can [:delete],Calentry can [:delete],Calentry
can :doadmin, User
end end
# Rechteverwaltung fuer Neuigkeiten # Rechteverwaltung fuer Neuigkeiten

View File

@@ -46,7 +46,7 @@ class Neuigkeit < ActiveRecord::Base
self.rubrik.public self.rubrik.public
end end
def published? def published?
self.datum_nilsave>=Time.now.to_date self.datum_nilsave<Time.now.to_date
end end
def publish def publish

View File

@@ -9,8 +9,9 @@
# updated_at :datetime not null # updated_at :datetime not null
# themengruppe_id :integer # themengruppe_id :integer
# #
require 'uri'
class Thema < ActiveRecord::Base class Thema < ActiveRecord::Base
include Rails.application.routes.url_helpers
attr_accessible :text, :title, :themengruppe_id attr_accessible :text, :title, :themengruppe_id
has_many :fragen has_many :fragen
has_many :attachments has_many :attachments
@@ -23,7 +24,7 @@ class Thema < ActiveRecord::Base
scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")} scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")}
translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true
def is_wiki? def is_wiki?
wikiname.nil? || wikiname.empty? !(wikiname.nil? || wikiname.empty?)
end end
def text_first_words def text_first_words
md = /<p>(?<text>[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p']) md = /<p>(?<text>[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p'])
@@ -36,4 +37,10 @@ class Thema < ActiveRecord::Base
end end
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 end

View File

@@ -22,6 +22,7 @@ class Themengruppe < ActiveRecord::Base
translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true
scope :intern,-> {where(:public=>false)} scope :intern,-> {where(:public=>false)}
scope :public,-> {where(:public=>true)}
def self.find_wiki_default def self.find_wiki_default
where(:wiki_default=>true).first where(:wiki_default=>true).first

View File

@@ -38,16 +38,17 @@ belongs_to :fetprofile
def self.find_for_facebook_oauth(auth, signed_in_resource=nil) def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
logger.debug auth.to_s logger.debug auth.to_s
logger.debug "DDD Username= #{auth.username}" 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 unless user
user = User.create(name:auth.uid, user = User.create(name: auth.uid,
provider:auth.provider, provider:auth.provider,
uid:auth.uid, uid: auth.uid,
email:auth.info.email, email:auth.info.email,
password:Devise.friendly_token[0,20] password:Devise.friendly_token[0,20]
) )
end end
user user
end end
def self.find_for_ldap_oauth(auth,signed_in_resource=nil) def self.find_for_ldap_oauth(auth,signed_in_resource=nil)

View File

@@ -0,0 +1,12 @@
<p><%= link_to "Grant extra FB privileges", user_omniauth_authorize_path(:facebook,:params=>{scope:"manage_pages,publish_actions,email"}) %>
</p>
<p>
<%= link_to "user", users_path %>
</p>
<p>
<%= @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 %>
</p>

View File

@@ -3,7 +3,8 @@
<div class="row-fluid"> <div class="row-fluid">
<div class="span6"> <div class="span6">
<%= link_to "Adressliste", internlist_fetprofiles_path %> <%= link_to "Adressliste", internlist_fetprofiles_path %>
<%= link_to "Internes Nachschlagewerk" %> <%= link_to "Admin" , admin_home_index_path if current_user.has_role?(:fetadmin) %>
<ul class="unstyled linkbox-list"> <ul class="unstyled linkbox-list">
<li> <li>
<% @themengruppen.each do |themengruppe| %> <% @themengruppen.each do |themengruppe| %>
@@ -14,7 +15,7 @@
</li> </li>
</ul> </ul>
<%= link_to "Users", users_path %>
</div> </div>
<div class="span6"> <div class="span6">
<h2>Neuigkeiten</h2> <h2>Neuigkeiten</h2>
@@ -28,4 +29,3 @@
</div> </div>
<h2></h2> <h2></h2>

View File

@@ -1 +1,3 @@
$("#themaview").html("<%= escape_javascript(raw("<h2>"+I18n.t('thema.edit')+"</h2>")+render(:partial=>"themen/form", :locals=>{:remote=>true}) )%>"); $("#themaview").html("<%= escape_javascript(raw("<h2>"+I18n.t('thema.edit')+"</h2>")+render(:partial=>"themen/form", :locals=>{:remote=>true}) )%>");

View File

@@ -0,0 +1,54 @@
<%= render :partial=>'layouts/pretty_toolbar' %>
<div class="container-fluid">
<div class="row-fluid">
<div class="span4">
<ul id="themengruppen" class="sort" >
<% @themengruppen.each do |themengruppe| %>
<li id="themengruppen_<%= themengruppe.id %>" class="sort" style="background:white;display:block;" ><%= themengruppe.title %>-<%= themengruppe.priority %></li>
<% end %>
</ul>
<ul id="themengruppen_intern" class="sort" >
<% @themengruppen_intern.each do |themengruppe| %>
<li id="themengruppen_<%= themengruppe.id %>" class="sort" style="background:white;display:block;" ><%= themengruppe.title %>-<%= themengruppe.priority %></li>
<% end %>
</ul>
</div>
</div>
<div>
<script>
$( document ).ready(function(){
$("#themengruppen").sortable({
cursor: 'crosshair',
drag:true,
update: function(){
$.ajax({
url: '<%= sort_themengruppen_themengruppen_path() %>',
type: 'post',
data: $('#themengruppen').sortable('serialize'),
dataType: 'script',
complete: function(request){
}
})
}
});
});
$( document ).ready(function(){
$("#themengruppen_intern").sortable({
cursor: 'crosshair',
drag:true,
update: function(){
$.ajax({
url: '<%= sort_themengruppen_themengruppen_path() %>',
type: 'post',
data: $('#themengruppen_intern').sortable('serialize'),
dataType: 'script',
complete: function(request){
}
})
}
});
});
</script>

View File

@@ -11,6 +11,9 @@
get :index get :index
post :all_update post :all_update
end end
member do
get :fb_set_default_publish_page
end
end end
get 'users/:id/add_role/:role', :controller=>:users, :action=>:add_role, :as=>'user_add_role' 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' get 'users/:id/do_confirm', :controller=>:users, :action=>:do_confirm, :as=>'user_do_confirm'
@@ -34,7 +37,7 @@
# end # end
# end # end
scope ':locale' do scope '(:locale)' do
scope '(t/:theme)' do scope '(t/:theme)' do
# Studien # Studien
@@ -126,6 +129,7 @@
get 'rm_calentry' get 'rm_calentry'
get 'create_link' get 'create_link'
get 'find_link' get 'find_link'
get 'publish_to_facebook'
end end
end end
end end
@@ -135,13 +139,14 @@
# get 'rubriken/verwalten',:controller=>:rubriken,:action=>:alle_verwalten, :as=>'rubriken_verwalten' # get 'rubriken/verwalten',:controller=>:rubriken,:action=>:alle_verwalten, :as=>'rubriken_verwalten'
resources :home, :only=>[:index] do resources :home, :only=>[:index] do
get :search, :on=>:collection get :search, :on => :collection
collection do collection do
get 'intern' get 'intern'
get 'dev' get 'admin'
get 'startdev' get 'dev'
get 'linksnotimplemented' get 'startdev'
get 'kontakt' get 'linksnotimplemented'
get 'kontakt'
end end
end end