Skip to content

Commit

Permalink
Initial commit of JRuby version of BananaScrum.
Browse files Browse the repository at this point in the history
  • Loading branch information
lbadura committed Mar 15, 2015
1 parent b047561 commit fa3c669
Show file tree
Hide file tree
Showing 5,377 changed files with 701,226 additions and 31 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
49 changes: 18 additions & 31 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,31 +1,18 @@
*.rbc
capybara-*.html
.rspec
/log
/tmp
/db/*.sqlite3
/public/system
/coverage/
/spec/tmp
**.orig
rerun.txt
pickle-email-*.html

# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
config/initializers/secret_token.rb
config/secrets.yml

## Environment normalisation:
/.bundle
/vendor/bundle

# these should all be checked in to normalise the environment:
# Gemfile.lock, .ruby-version, .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc

# if using bower-rails ignore default bower_components path bower.json files
/vendor/assets/bower_components
*.bowerrc
bower.json
public/javascripts/less_routes.js
tmp/pids
test/reports/
public/javascripts/all.js
public/javascripts/jquery_all.js
public/stylesheets/all.css
/tags
nbproject
build/bananascrum.war
build/config.yml
build/database.yml
build/README
build/README.pdf
doc/_build
doc/deployment.pdf
build/livesync/livesync.jar
BananaScrum-*.*.tar.gz
bananascrum.war
3 changes: 3 additions & 0 deletions Capfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
19 changes: 19 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require(File.join(File.dirname(__FILE__), 'config', 'boot'))

require 'rake'
require 'rake/testtask'
require 'rdoc/task'
require 'tasks/rails'

require 'rubygems'
gem 'ci_reporter'
require 'ci/reporter/rake/test_unit'

begin
# Optionally use metric_fu gem
require 'metric_fu'
rescue LoadError
end
77 changes: 77 additions & 0 deletions app/controllers/abstract/admin_base_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Base controller for all admin actions
class AdminBaseController < DomainBaseController
before_filter :redirect_if_not_admin, :find_domain

protected

def changing_plans_enabled
render_404 unless AppConfig.payments_enabled
end

def prepare_users
@users = Domain.current.users
end

def prepare_projects
@projects = User.current.projects
end

def prepare_payments
if AppConfig.payments_enabled
@payments = Domain.current.payments
end
end

def prepare_plans
if AppConfig.payments_enabled
@current_plan = @domain.plan
@plans = Plan.enabled.public.find(:all, :order => "price ASC")
@free_plan = @plans.select { |plan| plan.name == 'Free' }.first

@not_available_plans = {}
for plan in @plans
exceedings = @domain.exceedes_plan?(plan)
if exceedings
@not_available_plans[plan] = exceedings
end
end

@show_free_plan = (@current_plan != @free_plan) && (@current_plan.free? || Domain.current.can_downgrade?) && @not_available_plans[@free_plan].nil?
end
end

def prepare_customer
@customer = @domain.customer
end

def find_domain
@domain = Domain.current
end

def redirect_if_not_xhr
unless request.xhr?
flash[:warning] = "Only xhr requests allowed"
redirect_to admin_panel_url
end
end

protected

def setup_gateway
paypal_credentials = AppConfig.paypal[:credentials]
@gateway ||= ActiveMerchant::Billing::PaypalExpressRecurringGateway.new(paypal_credentials)
end

def cancel_agreement_for(domain)
response = @gateway.cancel_profile(domain.billing_profile_id)

if response.success?
domain.billing_profile_id = nil
domain.billing_agreement_status = Domain::BILLING_AGREEMENT_STATUSES[:cancelled]
domain.save!
end

return response
end

end
7 changes: 7 additions & 0 deletions app/controllers/abstract/domain_base_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Just a wrapper around DomainAndAuthorization mixin.
# It just imports that module and should not do anything more
# the module must be fully usable outside this inheritance hierarchy
class DomainBaseController < ApplicationController
protected
include DomainAndAuthorization
end
11 changes: 11 additions & 0 deletions app/controllers/abstract/project_base_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Base controller for all operations inside a single project
# Just a wrapper around ProjectAccessControl - *do not* add anything
# but this include here - the module must be fully usable outside this
# inheritance hierarchy
class ProjectBaseController < DomainBaseController
protected
include ProjectAccessControl
around_filter :set_current_project
around_filter :ensure_current_project_set
before_filter :disallow_non_get_for_archived_projects
end
18 changes: 18 additions & 0 deletions app/controllers/admin/domains_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class Admin::DomainsController < AdminBaseController
helper Admin::PlansHelper

def update
domain_updated = @domain.update_attributes(params[:domain])

if domain_updated then
return render_json(200)
else
return render_json(409, :_error => { :message => @domain.errors.full_messages.join })
end
end

def show
prepare_plans
prepare_domain
end
end
10 changes: 10 additions & 0 deletions app/controllers/admin/invoices_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class Admin::InvoicesController < AdminBaseController

def show
invoice = Domain.current.invoices.find(params[:id])
if !File.exist?(invoice.original_filename)
return render_404
end
send_file invoice.original_filename, :type => "application/pdf"
end
end
39 changes: 39 additions & 0 deletions app/controllers/admin/passwords_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
class Admin::PasswordsController < AdminBaseController
before_filter :find_user

def reset
password = User.generate_password
@user.user_password = password
@user.save!

@user_activation = @user.user_activations.create(:reset_pwd => true)
@user_activation.save!

Notifier.deliver_admin_reset_password(@user, @user_activation.key)
flash[:notice] = "Password resetted and sent over to user"
render_json :ok
end

def new
render_to_json_envelope
end

def create
@user.user_password = params[:user] && params[:user][:user_password]
@user.user_password_confirmation = params[:user] && params[:user][:user_password_confirmation]
@user.password_changed = true
if @user.save
flash[:notice] = "Password updated"
render_json :ok
else
form = render_to_string(:action => :new, :layout => false)
render_json 409, { :html => form }
end
end

private

def find_user
@user = User.find(params[:user_id])
end
end
149 changes: 149 additions & 0 deletions app/controllers/admin/projects_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
class Admin::ProjectsController < AdminBaseController
include InPlaceEditing

include ApplicationHelper
include ActionView::Helpers::FormOptionsHelper
include ActionView::Helpers::TagHelper
helper :users, :admin

before_filter :set_project, :except => [ :create, :new ]
before_filter :redirect_if_not_xhr, :only => [:new, :create, :edit, :reset_settings_to_default, :update]

cache_sweeper :project_sweeper, :only => [:update]
prepend_after_filter :refresh_projects, :only => [:archive, :destroy, :create]

def edit
@assigned_users = @project.nil? ? [] : @project.users
@codename_opts = {:disabled => "disabled"}
render_to_json_envelope({:layout => false}, graphs_hashes_for_select_checkbox)
end

def update
if params["visible-graphs"] == "None"
@project.visible_graphs = Project::visible_graphs_unselected
end
if @project.update_attributes(params[:project])
flash[:notice] = "Project was successfully updated."
return render_to_json_envelope :partial => "admin/projects/projects_list", :locals => {:projects => User.current.projects}
else
@assigned_users = @project.nil? ? [] : @project.users
render_json 409, :_error => { :message => @project.errors.full_messages.join }
end
end

def new
@project = Project.new
@project.domain = Domain.current
@project.free_days = {'6' => '1', '0' => '1'}
render_to_json_envelope({:layout => false}, graphs_hashes_for_select_checkbox.merge(mass_assignment_hashes))
end

def create
@project = Project.new(params[:project])
@project.domain = Domain.current

if @project.save
flash[:notice] = "New project created. Start using it with creating some backlog items"

# deliver notifications
@project.users.each do |user|
Notifier.deliver_roles_assigment(@project, user) if user.like_spam?
end

return render_to_json_envelope :partial => "project", :object => @project
else
return render_json 409, {:html => render_to_string(:action => :new, :layout => false)}.merge(graphs_hashes_for_select_checkbox).merge(mass_assignment_hashes)
end
end

def destroy
begin
@project.purge!
flash[:notice] = "Project “#{@project.name}” was successfully deleted"
return render_json :ok
rescue Project::DestroyError => de
logger.error "Failed to delete project: '#{@project.name}': #{de.message}"
flash[:error] = "Project “#{@project.name}” can't be deleted!"
rescue => e
raise e # Rethrow exception
end
render_json 409, :_error => { :message => flash[:error] }
end

def project_description_text
if @project.description.nil?
render :text => "Project description not set"
else
render :text => @project.description
end
end

def reset_settings_to_defaults
@project.reset_settings!
flash[:notice] = "Settings reset for project #{@project.presentation_name}"
render_to_json_envelope :partial => "settings_form", :leaveOpen => true
rescue Project::ProjectError => e
render_json 409, :_error => { :message => e.message, :type => 'project_error' }
end

def archive
@project.archived = params[:project_archived].to_i != 0
@project.save!
if @project.archived
flash[:notice] = "Project #{@project.name} archived"
else
flash[:notice] = "Project #{@project.name} unarchived"
end
render_json 200, { :project => @project.id, :archived => @project.archived }
rescue ActiveRecord::RecordInvalid => ri
flash[:error] = ri.message
render_json 409, {:project => @project.id}
end

protected

def graphs_hashes_for_select_checkbox
all_graphs = Project::DEFAULT_VISIBLE_GRAPHS.map {|key, value| {:label => key.to_s, :value => 1, :name => "project[visible_graphs][#{key.to_s}]" }}
selected_graphs = @project.selected_visible_graphs_keys
return {:all_graphs => all_graphs, :selected_graphs => selected_graphs}
end

def mass_assignment_hashes
list = {}
users = @project.domain.users.not_blocked
roles = Role.find(:all)

roles.each do |role|
list[role.code] = users.map { |user| { :label => user.login, :value => 1, :name => "project[users_to_assign][#{role.code}][#{user.login}]"} }
end

selected = {}
roles.each { |role| selected[role.code] = [] }
if @project.users_to_assign
selected = @project.users_to_assign.inject({}) do |new_hash, (k,v)|
new_hash[k] = v.keys
new_hash
end
end

return { :mass_assignment => list, :mass_assignment_selected => selected }
end

def refresh_projects
return if error?

append_to_envelope(:_projects, projects_for_select)
end

def set_project
@project = find_current_project or render_not_found
end

def find_current_project
if params[:id] then
User.current.projects.find(params[:id])
else
raise ActiveRecord::RecordNotFound.new 'Project id not specified'
end
end
end
Loading

0 comments on commit fa3c669

Please sign in to comment.