<?php
class robodn_DonationManager_Transaction_PayPal extends robodn_DonationManager_Transaction_Abstract
{
protected $_filtered = null;
protected $_processor = 'PayPal';
public function __construct(Zend_Controller_Request_Http $request)
{
parent::__construct($request);
$data = $this->_filtered = $this->_input->filter(array(
'shp_username' => XenForo_Input::STRING,
'Shp_item' => XenForo_Input::UINT,
'OutSum' => XenForo_Input::FLOAT,
'shp_note' => XenForo_Input::STRING,
));
$dateInput = $this->_input->filter(array(
'date' => XenForo_Input::STRING,
'hour' => XenForo_Input::UINT,
'minute' => XenForo_Input::UINT
));
if (!empty($dateInput['date']))
{
$datetime = new DateTime("$dateInput[date] $dateInput[hour]:$dateInput[minute]");
$data['donation_date'] = $datetime->format('U');
}
if (empty($data['user_id']))
{
$userModel = $this->getModelFromCache('XenForo_Model_User');
$data['user_id'] = $userModel->getUserIdFromUser($userModel->getUserByName($data['username']));
}
$dw = XenForo_DataWriter::create('robodn_DonationManager_DataWriter_Donation');
if ($donateId)
$dw->setExistingData($donateId);
$dw->bulkSet(array (
'user_id' => $data['shp_username'],
'donation_id' => $data['InvId'],
'transaction_id' => $data['shp_username'],
'goal_id' => $data['shp_username'],
'username' => $data['shp_username'],
'amount' => $data['OutSum'],
'note' => $data['shp_note'],
'donation_date' => XenForo_Application::$time,
'anonymous' => false
));
$dw->save();
return $this->responseRedirect(
$donateId ? XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED : XenForo_ControllerResponse_Redirect::RESOURCE_CREATED,
XenForo_Link::buildAdminLink('donations')
);
}
public function validateRequest()
{
return true;
}
public function validateTransaction()
{
$options = XenForo_Application::get('options');
$itemParts = explode(',', $this->_filtered['Shp_item'], 4);
if (count($itemParts) != 4)
{
return $this->error('Invalid item (Shp_item)');
}
list($token, $validation) = $itemParts;
$this->_transaction = $this->_transactionModel->getTransaction($token);
if ($this->_transaction['InvId'])
{
$user = $this->_userModel->getFullUserById($this->_transaction['InvId'], array('join' => XenForo_Model_User::FETCH_USER_PERMISSIONS));
if ($user)
{
$tokenParts = explode(',', $validation);
if (count($tokenParts) != 3 || sha1($tokenParts[1] . $user['csrf_token']) != $tokenParts[2])
{
return $this->error('Invalid validation');
}
}
}
return true;
}
public function processTransaction()
{
$donationId = $this->_transactionModel->commit($this->_transaction['token']);
return $this->log($donationId, $this->_transaction['transaction_id'], 'payment', 'Donation Received', $this->_transaction);
return $this->log(0, $this->_transaction['transaction_id'], 'info', 'OK, no action', $this->_transaction);
}
}