[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phortune/controller/ -> PhortuneMerchantViewController.php (source)

   1  <?php
   2  
   3  final class PhortuneMerchantViewController
   4    extends PhortuneMerchantController {
   5  
   6    private $id;
   7  
   8    public function willProcessRequest(array $data) {
   9      $this->id = $data['id'];
  10    }
  11  
  12    public function processRequest() {
  13      $request = $this->getRequest();
  14      $viewer = $request->getUser();
  15  
  16      $merchant = id(new PhortuneMerchantQuery())
  17        ->setViewer($viewer)
  18        ->withIDs(array($this->id))
  19        ->executeOne();
  20      if (!$merchant) {
  21        return new Aphront404Response();
  22      }
  23  
  24      $crumbs = $this->buildApplicationCrumbs();
  25      $crumbs->addTextCrumb($merchant->getName());
  26  
  27      $title = pht(
  28        'Merchant %d %s',
  29        $merchant->getID(),
  30        $merchant->getName());
  31  
  32      $header = id(new PHUIHeaderView())
  33        ->setObjectName(pht('Merchant %d', $merchant->getID()))
  34        ->setHeader($merchant->getName())
  35        ->setUser($viewer)
  36        ->setPolicyObject($merchant);
  37  
  38      $providers = id(new PhortunePaymentProviderConfigQuery())
  39        ->setViewer($viewer)
  40        ->withMerchantPHIDs(array($merchant->getPHID()))
  41        ->execute();
  42  
  43      $properties = $this->buildPropertyListView($merchant, $providers);
  44      $actions = $this->buildActionListView($merchant);
  45      $properties->setActionList($actions);
  46      $crumbs->setActionList($actions);
  47  
  48      $provider_list = $this->buildProviderList(
  49        $merchant,
  50        $providers);
  51  
  52      $box = id(new PHUIObjectBoxView())
  53        ->setHeader($header)
  54        ->appendChild($properties);
  55  
  56      $xactions = id(new PhortuneMerchantTransactionQuery())
  57        ->setViewer($viewer)
  58        ->withObjectPHIDs(array($merchant->getPHID()))
  59        ->execute();
  60  
  61      $timeline = id(new PhabricatorApplicationTransactionView())
  62        ->setUser($viewer)
  63        ->setObjectPHID($merchant->getPHID())
  64        ->setTransactions($xactions);
  65  
  66      return $this->buildApplicationPage(
  67        array(
  68          $crumbs,
  69          $box,
  70          $provider_list,
  71          $timeline,
  72        ),
  73        array(
  74          'title' => $title,
  75        ));
  76    }
  77  
  78    private function buildPropertyListView(
  79      PhortuneMerchant $merchant,
  80      array $providers) {
  81  
  82      $viewer = $this->getRequest()->getUser();
  83  
  84      $view = id(new PHUIPropertyListView())
  85        ->setUser($viewer)
  86        ->setObject($merchant);
  87  
  88      $status_view = new PHUIStatusListView();
  89  
  90      $have_any = false;
  91      $any_test = false;
  92      foreach ($providers as $provider_config) {
  93        $provider = $provider_config->buildProvider();
  94        if ($provider->isEnabled()) {
  95          $have_any = true;
  96        }
  97        if (!$provider->isAcceptingLivePayments()) {
  98          $any_test = true;
  99        }
 100      }
 101  
 102      if ($have_any) {
 103        $status_view->addItem(
 104          id(new PHUIStatusItemView())
 105            ->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
 106            ->setTarget(pht('Accepts Payments'))
 107            ->setNote(pht('This merchant can accept payments.')));
 108  
 109        if ($any_test) {
 110          $status_view->addItem(
 111            id(new PHUIStatusItemView())
 112              ->setIcon(PHUIStatusItemView::ICON_WARNING, 'yellow')
 113              ->setTarget(pht('Test Mode'))
 114              ->setNote(pht('This merchant is accepting test payments.')));
 115        } else {
 116          $status_view->addItem(
 117            id(new PHUIStatusItemView())
 118            ->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
 119              ->setTarget(pht('Live Mode'))
 120              ->setNote(pht('This merchant is accepting live payments.')));
 121        }
 122      } else if ($providers) {
 123        $status_view->addItem(
 124          id(new PHUIStatusItemView())
 125            ->setIcon(PHUIStatusItemView::ICON_REJECT, 'red')
 126            ->setTarget(pht('No Enabled Providers'))
 127            ->setNote(
 128              pht(
 129                'All of the payment providers for this merchant are '.
 130                'disabled.')));
 131      } else {
 132        $status_view->addItem(
 133          id(new PHUIStatusItemView())
 134            ->setIcon(PHUIStatusItemView::ICON_WARNING, 'yellow')
 135            ->setTarget(pht('No Providers'))
 136            ->setNote(
 137              pht(
 138                'This merchant does not have any payment providers configured '.
 139                'yet, so it can not accept payments. Add a provider.')));
 140      }
 141  
 142      $view->addProperty(pht('Status'), $status_view);
 143  
 144      $this->loadHandles($merchant->getMemberPHIDs());
 145  
 146      $view->addProperty(
 147        pht('Members'),
 148        $this->renderHandlesForPHIDs($merchant->getMemberPHIDs()));
 149  
 150      $view->invokeWillRenderEvent();
 151  
 152      $description = $merchant->getDescription();
 153      if (strlen($description)) {
 154        $description = PhabricatorMarkupEngine::renderOneObject(
 155          id(new PhabricatorMarkupOneOff())->setContent($description),
 156          'default',
 157          $viewer);
 158  
 159        $view->addSectionHeader(pht('Description'));
 160        $view->addTextContent($description);
 161      }
 162  
 163      return $view;
 164    }
 165  
 166    private function buildActionListView(PhortuneMerchant $merchant) {
 167      $viewer = $this->getRequest()->getUser();
 168      $id = $merchant->getID();
 169  
 170      $can_edit = PhabricatorPolicyFilter::hasCapability(
 171        $viewer,
 172        $merchant,
 173        PhabricatorPolicyCapability::CAN_EDIT);
 174  
 175      $view = id(new PhabricatorActionListView())
 176        ->setUser($viewer)
 177        ->setObject($merchant);
 178  
 179      $view->addAction(
 180        id(new PhabricatorActionView())
 181          ->setName(pht('Edit Merchant'))
 182          ->setIcon('fa-pencil')
 183          ->setDisabled(!$can_edit)
 184          ->setWorkflow(!$can_edit)
 185          ->setHref($this->getApplicationURI("merchant/edit/{$id}/")));
 186  
 187      $view->addAction(
 188        id(new PhabricatorActionView())
 189          ->setName(pht('View Orders'))
 190          ->setIcon('fa-shopping-cart')
 191          ->setHref($this->getApplicationURI("merchant/orders/{$id}/"))
 192          ->setDisabled(!$can_edit)
 193          ->setWorkflow(!$can_edit));
 194  
 195      return $view;
 196    }
 197  
 198    private function buildProviderList(
 199      PhortuneMerchant $merchant,
 200      array $providers) {
 201  
 202      $viewer = $this->getRequest()->getUser();
 203      $id = $merchant->getID();
 204  
 205      $can_edit = PhabricatorPolicyFilter::hasCapability(
 206        $viewer,
 207        $merchant,
 208        PhabricatorPolicyCapability::CAN_EDIT);
 209  
 210      $provider_list = id(new PHUIObjectItemListView())
 211        ->setNoDataString(pht('This merchant has no payment providers.'));
 212  
 213      foreach ($providers as $provider_config) {
 214        $provider = $provider_config->buildProvider();
 215        $provider_id = $provider_config->getID();
 216  
 217        $item = id(new PHUIObjectItemView())
 218          ->setHeader($provider->getName());
 219  
 220        if ($provider->isEnabled()) {
 221          if ($provider->isAcceptingLivePayments()) {
 222            $item->setBarColor('green');
 223          } else {
 224            $item->setBarColor('yellow');
 225            $item->addIcon('fa-exclamation-triangle', pht('Test Mode'));
 226          }
 227  
 228          $item->addAttribute($provider->getConfigureProvidesDescription());
 229        } else {
 230          // Don't show disabled providers to users who can't manage the merchant
 231          // account.
 232          if (!$can_edit) {
 233            continue;
 234          }
 235          $item->setDisabled(true);
 236          $item->addAttribute(
 237            phutil_tag('em', array(), pht('This payment provider is disabled.')));
 238        }
 239  
 240  
 241        if ($can_edit) {
 242          $edit_uri = $this->getApplicationURI(
 243            "/provider/edit/{$provider_id}/");
 244          $disable_uri = $this->getApplicationURI(
 245            "/provider/disable/{$provider_id}/");
 246  
 247          if ($provider->isEnabled()) {
 248            $disable_icon = 'fa-times';
 249            $disable_name = pht('Disable');
 250          } else {
 251            $disable_icon = 'fa-check';
 252            $disable_name = pht('Enable');
 253          }
 254  
 255          $item->addAction(
 256            id(new PHUIListItemView())
 257              ->setIcon($disable_icon)
 258              ->setHref($disable_uri)
 259              ->setName($disable_name)
 260              ->setWorkflow(true));
 261  
 262          $item->addAction(
 263            id(new PHUIListItemView())
 264              ->setIcon('fa-pencil')
 265              ->setHref($edit_uri)
 266              ->setName(pht('Edit')));
 267        }
 268  
 269        $provider_list->addItem($item);
 270      }
 271  
 272      $add_action = id(new PHUIButtonView())
 273        ->setTag('a')
 274        ->setHref($this->getApplicationURI('provider/edit/?merchantID='.$id))
 275        ->setText(pht('Add Payment Provider'))
 276        ->setDisabled(!$can_edit)
 277        ->setWorkflow(!$can_edit)
 278        ->setIcon(id(new PHUIIconView())->setIconFont('fa-plus'));
 279  
 280      $header = id(new PHUIHeaderView())
 281        ->setHeader(pht('Payment Providers'))
 282        ->addActionLink($add_action);
 283  
 284      return id(new PHUIObjectBoxView())
 285        ->setHeader($header)
 286        ->appendChild($provider_list);
 287    }
 288  
 289  
 290  
 291  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1