event deleting

This commit is contained in:
Kyle Drake 2014-05-02 17:44:31 -07:00
parent 6277a94a5b
commit a4a2b5165b
14 changed files with 105 additions and 31 deletions

17
app.rb
View file

@ -870,7 +870,7 @@ post '/event/:event_id/comment' do |event_id|
content_type :json content_type :json
event = Event[id: event_id] event = Event[id: event_id]
event.add_site_comment current_site, params[:message] event.add_site_comment current_site, params[:message]
{result: 'ok'}.to_json {result: 'success'}.to_json
end end
post '/event/:event_id/update_profile_comment' do |event_id| post '/event/:event_id/update_profile_comment' do |event_id|
@ -880,7 +880,20 @@ post '/event/:event_id/update_profile_comment' do |event_id|
return {result: 'error'}.to_json unless current_site.id == event.profile_comment.actioning_site_id return {result: 'error'}.to_json unless current_site.id == event.profile_comment.actioning_site_id
event.profile_comment.update message: params[:message] event.profile_comment.update message: params[:message]
return {result: 'ok'}.to_json return {result: 'success'}.to_json
end
post '/event/:event_id/delete' do |event_id|
require_login
content_type :json
event = Event[id: event_id]
if event.site_id == current_site.id || event.owned_by?(current_site)
event.delete
return {result: 'success'}.to_json
end
return {result: 'error'}.to_json
end end
def require_admin def require_admin

View file

@ -12,6 +12,8 @@ require 'zip'
Bundler.require Bundler.require
Bundler.require :development if ENV['RACK_ENV'] == 'development' Bundler.require :development if ENV['RACK_ENV'] == 'development'
Dir['./ext/**/*.rb'].each {|f| require f}
if ENV['TRAVIS'] if ENV['TRAVIS']
$config = YAML.load_file File.join(DIR_ROOT, 'config.yml.travis') $config = YAML.load_file File.join(DIR_ROOT, 'config.yml.travis')
else else
@ -91,29 +93,3 @@ Sinatra::Application.set :erb, escape_html: true
# Session fix for Internet Fucking Explorer https://github.com/rkh/rack-protection/issues/11 # Session fix for Internet Fucking Explorer https://github.com/rkh/rack-protection/issues/11
Sinatra::Application.set :protection, except: :session_hijacking Sinatra::Application.set :protection, except: :session_hijacking
class Sinatra::Base
alias_method :render_original, :render
def render(engine, data, options = {}, locals = {}, &block)
options.merge!(pretty: self.class.development?) if engine == :slim && options[:pretty].nil?
render_original engine, data, options, locals, &block
end
end
class Numeric
def roundup(nearest=10)
self % nearest == 0 ? self : self + nearest - (self % nearest)
end
def rounddown(nearest=10)
self % nearest == 0 ? self : self - (self % nearest)
end
end
class Time
alias_method :ago_original, :ago
def ago
ago_original.downcase.gsub('right now, this very moment.', 'just now')
end
end

9
ext/numeric.rb Normal file
View file

@ -0,0 +1,9 @@
class Numeric
def roundup(nearest=10)
self % nearest == 0 ? self : self + nearest - (self % nearest)
end
def rounddown(nearest=10)
self % nearest == 0 ? self : self - (self % nearest)
end
end

View file

@ -0,0 +1,32 @@
module Sequel
module ParanoidDelete
def self.included(base)
base.extend(ClassMethods)
end
# Instead of actually deleting, we just set is_deleted to true,
# and look for it with our default dataset filter.
def delete
self.is_deleted = true
save :validate => false
true
end
module ClassMethods
# There's no hook for setting default filters after inheritance (that I'm aware of),
# so this adds the filter for the first time the class' dataset is accessed for the new model.
def dataset
if @_is_deleted_filter_set.nil?
@dataset.filter! is_deleted: false
@_is_deleted_filter_set = true
end
super
end
end
end
# Model.include ParanoidDelete
end

7
ext/sinatra/base.rb Normal file
View file

@ -0,0 +1,7 @@
class Sinatra::Base
alias_method :render_original, :render
def render(engine, data, options = {}, locals = {}, &block)
options.merge!(pretty: self.class.development?) if engine == :slim && options[:pretty].nil?
render_original engine, data, options, locals, &block
end
end

7
ext/time.rb Normal file
View file

@ -0,0 +1,7 @@
class Time
alias_method :ago_original, :ago
def ago
ago_original.downcase.gsub('right now, this very moment.', 'just now')
end
end

View file

@ -0,0 +1,9 @@
Sequel.migration do
up {
DB.add_column :sites, :is_deleted, :boolean, default: false
}
down {
DB.drop_column :sites, :is_deleted
}
end

View file

@ -0,0 +1,9 @@
Sequel.migration do
up {
DB.add_column :events, :is_deleted, :boolean, default: false
}
down {
DB.drop_column :events, :is_deleted
}
end

View file

@ -1,4 +1,6 @@
class Event < Sequel::Model class Event < Sequel::Model
include Sequel::ParanoidDelete
many_to_one :site many_to_one :site
one_to_one :follow one_to_one :follow
one_to_one :tip one_to_one :tip

View file

@ -1,7 +1,8 @@
require 'tilt' require 'tilt'
class Site < Sequel::Model class Site < Sequel::Model
# We might need to include fonts in here.. include Sequel::ParanoidDelete
VALID_MIME_TYPES = %w{ VALID_MIME_TYPES = %w{
text/plain text/plain
text/html text/html

View file

@ -0,0 +1,7 @@
var Event = {
delete: function(eventId, csrfToken) {
$.post('/event/'+eventId+'/delete', {csrf_token: csrfToken}, function(res) {
location.reload()
})
}
}

File diff suppressed because one or more lines are too long

View file

@ -2,6 +2,7 @@
<script src="/assets/scripts/news/like.js"></script> <script src="/assets/scripts/news/like.js"></script>
<script src="/assets/scripts/news/comment.js"></script> <script src="/assets/scripts/news/comment.js"></script>
<script src="/assets/scripts/news/profile_comment.js"></script> <script src="/assets/scripts/news/profile_comment.js"></script>
<script src="/assets/scripts/news/event.js"></script>
<% events.each do |event| %> <% events.each do |event| %>
<% if event.profile_comment_id %> <% if event.profile_comment_id %>
<div class="news-item comment for-me" id="event_<%= event.id %>"> <div class="news-item comment for-me" id="event_<%= event.id %>">

View file

@ -16,6 +16,6 @@
<% end %> <% end %>
<% end %> <% end %>
<% if event.created_by?(current_site) || event.site_id == current_site.id %> <% if event.created_by?(current_site) || event.site_id == current_site.id %>
<a href="#">Delete</a> <a href="#" onclick="Event.delete(<%= event.id %>, '<%= csrf_token %>'); return false">Delete</a>
<% end %> <% end %>
</div> </div>