Advertisement
Guest User

Initial Test

a guest
Nov 25th, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.48 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * Class FooBar_Controller
  5.  */
  6. class FooBar_Controller extends Page_Controller {
  7.  
  8.     private static $allowed_actions = array(
  9.         'Form',
  10.         'complete'
  11.     );
  12.  
  13.     public function init() {
  14.         parent::init();
  15.         Requirements::javascript('mysite/javascript/script.js');
  16.     }
  17.  
  18.     /**
  19.      * Create form to handle the submit() method
  20.      *
  21.      * @return mixed
  22.      */
  23.     public function Form() {
  24.         $action = new FormAction('submit', 'Make Payment');
  25.         $action->useButtonTag = true;
  26.         $action->addExtraClass('btn btn-primary btn-paypal');
  27.         return Form::create($this, 'Form',
  28.             new FieldList(),
  29.             new FieldList(
  30.                 $action
  31.             )
  32.         );
  33.     }
  34.  
  35.     /**
  36.      * Assign a member to a Payment, then redirect to the gateway.
  37.      *
  38.      * @param $data
  39.      * @param $form
  40.      * @return bool|SS_HTTPResponse
  41.      */
  42.     public function submit($data, $form) {
  43.  
  44.         $memberID = Member::currentUserID();
  45.  
  46.         /**
  47.          * Check if user exists, if not redirect to the previous page.
  48.          */
  49.         if(!$member = DataObject::get_by_id('Member', $memberID)) {
  50.             // TODO: Display error
  51.             $this->setFlash('You\re not currently logged in', 'danger');
  52.             return $this->redirect($this->Link());
  53.         }
  54.  
  55.         /**
  56.          * Assign the member id to the payment
  57.          * TODO: Check against a config/SiteConfig setting for the payment gateway, and price.
  58.          */
  59.         $payment = Payment::create()->init("PayPal_Express", 100, "NZD");
  60.         /**
  61.          * Assign the member id to the payment
  62.          */
  63.         $payment->MemberID = $memberID;
  64.  
  65.         /**
  66.          * Go to payment Gateway
  67.          * TODO: Customise Message
  68.          */
  69.         $response = PurchaseService::create($payment)
  70.             ->setReturnUrl($this->Link('complete'))
  71.             ->setCancelUrl($this->Link()."?message=payment cancelled")
  72.             ->purchase($form->getData());
  73.         $response->redirect();
  74.  
  75.     }
  76.  
  77.     /**
  78.      * Redirect the user once a payment has been made.
  79.      *
  80.      * @return SS_HTTPResponse
  81.      */
  82.     public function complete() {
  83.         //TODO: redirect to member page
  84.         return $this->redirect(Director::absoluteBaseURL());
  85.     }
  86.  
  87. }
  88.  
  89.  
  90. <?php
  91.  
  92. class PaymentExtension extends DataExtension {
  93.  
  94.     private static $has_one = array(
  95.         'Member' => 'Member'
  96.     );
  97.  
  98.     /**
  99.      * When a payment has been captured. Update the linked Member.
  100.      *
  101.      * @param $response
  102.      */
  103.     public function onCaptured($response) {
  104.         /**
  105.          * Check the member exists.
  106.          */
  107.         $member = $this->owner->Member();
  108.         if($member->exists()){
  109.             /**
  110.              * Update the {ExpiryDate} of the Member to the payments edited time plus one year.
  111.              * TODO: Add different time-frames.
  112.              * TODO: Check for valid time.
  113.              */
  114.             $newExpiryDate = date('Y-m-d H:i:s.u', strtotime('+1 year', strtotime($this->owner->LastEdited)));
  115.             $member->ExpiryDate = $newExpiryDate;
  116.             $member->write();
  117.  
  118.         } else {
  119.             // TODO: If there's no user found, email the admin
  120.         }
  121.     }
  122.  
  123. }
  124.  
  125. <?php
  126.  
  127. /**
  128.  * Class MemberExtension
  129.  */
  130. class MemberExtension extends DataExtension {
  131.  
  132.     private static $db = array(
  133.         'ExpiryDate' => 'Varchar(30)'
  134.     );
  135.  
  136.     /**
  137.      * @param FieldList $fields
  138.      */
  139.     public function updateCMSFields(FieldList $fields) {
  140.  
  141.         $fields->addFieldToTab('Root.Main', new TextField('ExpiryDate'));
  142.  
  143.         /* -----------------------------------------
  144.          * Payments
  145.          *
  146.          * Just for reference purposes in individual members.
  147.         ------------------------------------------*/
  148.  
  149.         $payments = Payment::get()->filter(array('MemberID' => $this->owner->ID));
  150.         $config = GridFieldConfig_RelationEditor::create(100);
  151.         $config->removeComponentsByType('GridFieldDeleteAction');
  152.         $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
  153.             'Created' => 'Created',
  154.             'Money' => 'Money',
  155.             'Gateway' => 'Gateway',
  156.             'Status' => 'Status'
  157.         ));
  158.         $gridField = new GridField(
  159.             'Payments',
  160.             'Payments',
  161.             $payments,
  162.             $config
  163.         );
  164.         $fields->addFieldToTab('Root.Payments', $gridField);
  165.  
  166.     }
  167.  
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement