Skip to content

Commit

Permalink
support for opentransact with oauth
Browse files Browse the repository at this point in the history
  • Loading branch information
herestomwiththeweather committed Oct 5, 2009
1 parent 672440d commit 3b254a9
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 54 deletions.
52 changes: 36 additions & 16 deletions app/controllers/transacts_controller.rb
@@ -1,56 +1,76 @@
class TransactsController < ApplicationController
skip_before_filter :require_activation
before_filter :login_or_oauth_required
skip_before_filter :verify_authenticity_token, :if => :oauth?

def index
@transactions = current_person.transactions
respond_to do |format|
format.html
format.xml { render :xml => @transactions.to_xml(:root => "txns") }
format.json { render :json => @transactions.to_json }
end
end

def show
@transact = current_person.transactions.find(params[:id])
if nil == @transact
flash[:error] = "could not find transaction"
redirect_to home_url
return
end
respond_to do |format|
format.html
format.xml { render :xml => @transact.to_xml }
format.json { render :json => @transact.to_json }
end
end

def new
@swp = params[:to] && params[:amount]

@req = Req.new()
@req.name = params[:memo]
@transact = Transact.new(:to => params[:to], :amount => params[:amount], :callback_url => params[:callback_url], :redirect_url => params[:redirect_url])
if @swp
@worker = Person.find_by_email(@transact.to)
@worker = Person.find_by_email(params[:to])
if nil == @worker
@swp = false
flash[:error] = "could not find payee"
render :action => "new"
return
end
end
end

def create
@transact = Transact.new(params[:transact])
@transact.customer = current_person

@worker = Person.find_by_email(@transact.to)
@worker = Person.find_by_email(params[:to])
if nil == @worker
@swp = false
flash[:error] = "could not find payee"
render :action => "new"
return
end


# Transact.to and Transact.memo - makes @transact look opentransacty
#
@transact = Transact.new(:to => params[:to], :memo => params[:memo], :amount => params[:amount], :callback_url => params[:callback_url], :redirect_url => params[:redirect_url])
@transact.customer = current_person
@transact.worker = @worker

@req = Req.new(params[:req])
@transact.save_req(@req)
@transact.metadata = @transact.create_req(params[:memo])

if @transact.save
if @transact.redirect_url.blank?
flash[:notice] = "Transfer succeeded."
redirect_to person_path(@worker) and return
respond_to do |format|
format.html { redirect_to person_path(@worker) }
format.json { render :json => @transact.to_json }
format.xml { render :xml => @transact.to_xml }
end
else
@transact.redirect_url << "?status=ok"
redirect_to @transact.redirect_url
end
else
flash[:error] = "Error with transfer."
req_name = @req.name
@req.destroy
@req = Req.new
@req.name = req_name
render :action => "new"
end

Expand Down
12 changes: 12 additions & 0 deletions app/helpers/transacts_helper.rb
@@ -1,2 +1,14 @@
module TransactsHelper
def counterparty(t)
counterparty = current_person?(t.worker) ? t.customer : t.worker
end

def counterparty_action(t)
units = t.group.nil? ? "hours" : t.group.unit
if current_person?(t.worker)
"+#{t.amount.to_s} #{units} (received from "
else
"-#{t.amount.to_s} #{units} (paid to "
end
end
end
28 changes: 14 additions & 14 deletions app/models/transact.rb
@@ -1,18 +1,18 @@
class Transact < Exchange
extend PreferencesHelper
attr_accessor :to, :callback_url, :redirect_url
attr_accessible :to, :callback_url, :redirect_url
attr_accessor :to, :memo, :callback_url, :redirect_url

after_create :perform_callback

def save_req(req, person = self.customer)
req.name = 'miscellaneous' if req.name.blank? # XML creation might not set this
req.estimated_hours = self.amount
def create_req(memo)
req = Req.new
req.name = memo.blank? ? 'miscellaneous' : memo
req.person = customer
req.estimated_hours = amount
req.due_date = Time.now
req.person = person
req.active = false
req.save!
self.req = req
req
end

def results
Expand All @@ -23,12 +23,12 @@ def results
}
else
{
:to => self.to,
:from => self.customer.email,
:amount => self.amount.to_s,
:to => worker.email,
:from => customer.email,
:amount => amount.to_s,
:txn_date => created_at.iso8601,
:memo => self.metadata.name,
:txn_id => "http://" + Transact.global_prefs.server_name + "/transacts/#{self.id}",
:memo => metadata.name,
:txn_id => "http://" + Transact.global_prefs.server_name + "/transacts/#{id}",
:status => 'ok'
}
end
Expand All @@ -45,7 +45,7 @@ def to_json(options={})
protected

def callback_uri
@callback_uri ||= URI.parse(self.callback_url) if self.callback_url
@callback_uri ||= URI.parse(callback_url) if callback_url
end

def http
Expand All @@ -57,7 +57,7 @@ def http
end

def perform_callback
if self.callback_url
if callback_url
request = Net::HTTP::Post.new(callback_uri.path+(callback_uri.query || '' ))
request.set_form_data(results)
response = http.request(request)
Expand Down
10 changes: 10 additions & 0 deletions app/views/shared/_transact.html.erb
@@ -0,0 +1,10 @@
<div class="profile-image">
<%= image_link counterparty(transact), :image => :thumbnail %>
<%= image_tag "icons/switch.gif", :class => "icon", :alt => "Transaction" %>
</div>
<p>
<%= counterparty_action(transact) %><%= person_link counterparty(transact) %>) for <%= link_to h(transact.metadata.name), transact.metadata %>
</p>
<p class="meta published">
<%= time_ago_in_words(transact.created_at).capitalize %> ago
</p>
10 changes: 10 additions & 0 deletions app/views/transacts/index.html.erb
@@ -0,0 +1,10 @@
<%- column_div :type => :primary do -%>
<h2>Transactions</h2>
<ul class="list activity full">
<%= render :partial => 'shared/transact', :collection => @transactions %>
</ul>
<%- end -%>
<%- column_div :type => :secondary do -%>
<%= render :partial => 'shared/minifeed' %>
<%- end -%>
42 changes: 18 additions & 24 deletions app/views/transacts/new.html.erb
@@ -1,53 +1,47 @@
<%- column_div :type => :primary do -%>
<% if @swp %>
<h2><%= @worker.name %> requested <%= @transact.amount %> hours</h2>
<h2><%= h @worker.name %> requested <%= h params[:amount] %> hours</h2>
<% else %>
<h2>Pay someone</h2>
<% end %>
<%= error_messages_for :transact %>
<% if @swp %>
<div class="profile vcard">
<% form_for :transact, :url => transacts_path do |f| %>
<%= f.hidden_field :to %>
<%= f.hidden_field :amount %>
<%= f.hidden_field :callback_url %>
<%= f.hidden_field :redirect_url %>
<% fields_for :req do |r| %>
<%= r.hidden_field :name %>
<% end %>
<% form_tag :action => :create do %>
<%= hidden_field_tag(:to,params[:to]) %>
<%= hidden_field_tag(:amount,params[:amount]) %>
<%= hidden_field_tag(:memo,params[:memo]) %>
<%= hidden_field_tag(:callback_url,params[:callback_url]) %>
<%= hidden_field_tag(:redirect_url,params[:redirect_url]) %>
<div class="toolbox">
<%= image_tag @worker.main_photo, :class => "profile-image photo",
:alt => h(@worker.name) %>
</div>
<%= display "This has been requested in return for:", :class => "meta" %>
<%= display @req.name %>
<%= display params[:memo] %>
<div class="status-btn">
<input type="submit" name="update" value="pay now" id="update-submit" class="round-btn"/>
</div>
<br><br>
<% end %>
</div>
<% else %>
<% form_for :transact, :url => transacts_path do |f| %>
<% form_tag :action => :create do %>
<div class="form_row">
<%= f.label :payee_email_address %>
<%= f.text_field :to %>
<label for="to">Payee email address</label>
<%= text_field_tag(:to,params[:to],:size => 40) %>
</div>
<div class="form_row">
<%= f.label :amount %>
<%= f.text_field :amount, :size => 2 %> hours
<label for="amount">Amount</label>
<%= text_field_tag(:amount,params[:amount],:size => 3) %> hours
</div>
<% fields_for :req do |r| %>
<div class="form_row">
<%= r.label 'Service provided' %>
<%= r.text_field :name %>
</div>
<% end %>
<div class="form_row">
<%= f.submit "Submit" %>
<label for="memo">Description</label>
<%= text_field_tag(:memo,params[:memo],:size => 40) %>
</div>
<div class="status-btn">
<input type="submit" name="update" value="pay now" id="update-submit" class="round-btn"/>
</div>
<% end %>
<% end %>
<%- end -%>
Expand Down
10 changes: 10 additions & 0 deletions app/views/transacts/show.html.erb
@@ -0,0 +1,10 @@
<%- column_div :type => :primary do -%>
<h2>Transaction</h2>
<ul class="list activity full">
<%= render :partial => 'shared/transact' %>
</ul>
<%- end -%>
<%- column_div :type => :secondary do -%>
<%= render :partial => 'shared/minifeed' %>
<%- end -%>

0 comments on commit 3b254a9

Please sign in to comment.