<?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);
    }
}