From 89a6ed98e7b8ac9292c91a94c6f7ab7f020f30aa Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 7 Oct 2014 15:07:01 -0700 Subject: [PATCH] Use real icons for payment providers Summary: Ref T2787. Uses the real icons. Straightens out the add payment flow a tiny bit. Test Plan: {F214922} Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T2787 Differential Revision: https://secure.phabricator.com/D10654 --- resources/celerity/map.php | 5 ---- .../PhortuneAccountViewController.php | 1 - .../PhortuneCartCheckoutController.php | 2 +- .../controller/PhortuneController.php | 2 +- .../PhortunePaymentMethodCreateController.php | 22 +++++++++++------- .../PhortuneBalancedPaymentProvider.php | 2 +- .../PhortunePayPalPaymentProvider.php | 2 +- .../provider/PhortunePaymentProvider.php | 5 ++-- .../PhortuneStripePaymentProvider.php | 2 +- .../provider/PhortuneTestPaymentProvider.php | 2 +- .../provider/PhortuneWePayPaymentProvider.php | 2 +- webroot/rsrc/image/phortune/balanced.png | Bin 2765 -> 0 bytes webroot/rsrc/image/phortune/paypal.png | Bin 2765 -> 0 bytes webroot/rsrc/image/phortune/stripe.png | Bin 2765 -> 0 bytes webroot/rsrc/image/phortune/test.png | Bin 2765 -> 0 bytes webroot/rsrc/image/phortune/wepay.png | Bin 2765 -> 0 bytes 16 files changed, 23 insertions(+), 24 deletions(-) delete mode 100644 webroot/rsrc/image/phortune/balanced.png delete mode 100644 webroot/rsrc/image/phortune/paypal.png delete mode 100644 webroot/rsrc/image/phortune/stripe.png delete mode 100644 webroot/rsrc/image/phortune/test.png delete mode 100644 webroot/rsrc/image/phortune/wepay.png diff --git a/resources/celerity/map.php b/resources/celerity/map.php index eb7862b810..2638acd08c 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -306,11 +306,6 @@ return array( 'rsrc/image/people/mckinley.png' => 'fb8f16ce', 'rsrc/image/people/taft.png' => 'd7bc402c', 'rsrc/image/people/washington.png' => '40dd301c', - 'rsrc/image/phortune/balanced.png' => 'f6ba2691', - 'rsrc/image/phortune/paypal.png' => '9747cb33', - 'rsrc/image/phortune/stripe.png' => 'bfedc2ce', - 'rsrc/image/phortune/test.png' => '0235d8a7', - 'rsrc/image/phortune/wepay.png' => 'b37163ce', 'rsrc/image/phrequent_active.png' => 'a466a8ed', 'rsrc/image/phrequent_inactive.png' => 'bfc15a69', 'rsrc/image/search-white.png' => '64cc0d45', diff --git a/src/applications/phortune/controller/PhortuneAccountViewController.php b/src/applications/phortune/controller/PhortuneAccountViewController.php index 1017f05ee1..39b23d6dba 100644 --- a/src/applications/phortune/controller/PhortuneAccountViewController.php +++ b/src/applications/phortune/controller/PhortuneAccountViewController.php @@ -130,7 +130,6 @@ final class PhortuneAccountViewController extends PhortuneController { $provider = $method->buildPaymentProvider(); $item->addAttribute($provider->getPaymentMethodProviderDescription()); - $item->setImageURI($provider->getPaymentMethodIcon()); $edit_uri = $this->getApplicationURI('card/'.$id.'/edit/'); diff --git a/src/applications/phortune/controller/PhortuneCartCheckoutController.php b/src/applications/phortune/controller/PhortuneCartCheckoutController.php index 6284c3a04b..fae092ece2 100644 --- a/src/applications/phortune/controller/PhortuneCartCheckoutController.php +++ b/src/applications/phortune/controller/PhortuneCartCheckoutController.php @@ -161,7 +161,7 @@ final class PhortuneCartCheckoutController $add_providers = $this->loadCreatePaymentMethodProvidersForMerchant( $merchant); if ($add_providers) { - $new_method = phutil_tag( + $new_method = javelin_tag( 'a', array( 'class' => 'button grey', diff --git a/src/applications/phortune/controller/PhortuneController.php b/src/applications/phortune/controller/PhortuneController.php index 9195b18c10..87bd6eef7b 100644 --- a/src/applications/phortune/controller/PhortuneController.php +++ b/src/applications/phortune/controller/PhortuneController.php @@ -27,7 +27,7 @@ abstract class PhortuneController extends PhabricatorController { $rows[] = array( $charge->getID(), $cart_href, - $charge->getPaymentProviderKey(), + $charge->getProviderPHID(), $charge->getPaymentMethodPHID(), $charge->getAmountAsCurrency()->formatForDisplay(), $charge->getStatus(), diff --git a/src/applications/phortune/controller/PhortunePaymentMethodCreateController.php b/src/applications/phortune/controller/PhortunePaymentMethodCreateController.php index 043ee82ff2..831f3983b0 100644 --- a/src/applications/phortune/controller/PhortunePaymentMethodCreateController.php +++ b/src/applications/phortune/controller/PhortunePaymentMethodCreateController.php @@ -29,8 +29,12 @@ final class PhortunePaymentMethodCreateController return new Aphront404Response(); } - $cancel_uri = $this->getApplicationURI($account->getID().'/'); - $account_uri = $this->getApplicationURI($account->getID().'/'); + $cart_id = $request->getInt('cartID'); + if ($cart_id) { + $cancel_uri = $this->getApplicationURI("cart/{$cart_id}/checkout/"); + } else { + $cancel_uri = $this->getApplicationURI($account->getID().'/'); + } $providers = $this->loadCreatePaymentMethodProvidersForMerchant($merchant); if (!$providers) { @@ -58,7 +62,7 @@ final class PhortunePaymentMethodCreateController ->setTitle(pht('Add Payment Method')) ->appendParagraph(pht('Choose a payment method to add:')) ->appendChild($content) - ->addCancelButton($account_uri); + ->addCancelButton($cancel_uri); } $provider = $providers[$provider_id]; @@ -107,11 +111,11 @@ final class PhortunePaymentMethodCreateController // If we added this method on a cart flow, return to the cart to // check out. - $cart_id = $request->getInt('cartID'); if ($cart_id) { $next_uri = $this->getApplicationURI( "cart/{$cart_id}/checkout/?paymentMethodID=".$method->getID()); } else { + $account_uri = $this->getApplicationURI($account->getID().'/'); $next_uri = new PhutilURI($account_uri); $next_uri->setFragment('payment'); } @@ -140,7 +144,7 @@ final class PhortunePaymentMethodCreateController ->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Add Payment Method')) - ->addCancelButton($account_uri)); + ->addCancelButton($cancel_uri)); $box = id(new PHUIObjectBoxView()) ->setHeaderText($provider->getPaymentMethodDescription()) @@ -172,18 +176,20 @@ final class PhortunePaymentMethodCreateController $this->requireResource('phortune-css'); $icon = id(new PHUIIconView()) - ->setImage($icon_uri) - ->addClass('phortune-payment-icon'); + ->setSpriteSheet(PHUIIconView::SPRITE_LOGIN) + ->setSpriteIcon($provider->getPaymentMethodIcon()); $button = id(new PHUIButtonView()) ->setSize(PHUIButtonView::BIG) ->setColor(PHUIButtonView::GREY) ->setIcon($icon) ->setText($description) - ->setSubtext($details); + ->setSubtext($details) + ->setMetadata(array('disableWorkflow' => true)); $form = id(new AphrontFormView()) ->setUser($viewer) + ->setAction($request->getRequestURI()) ->addHiddenInput('providerID', $provider->getProviderConfig()->getID()) ->appendChild($button); diff --git a/src/applications/phortune/provider/PhortuneBalancedPaymentProvider.php b/src/applications/phortune/provider/PhortuneBalancedPaymentProvider.php index eb9be17358..c2e74be345 100644 --- a/src/applications/phortune/provider/PhortuneBalancedPaymentProvider.php +++ b/src/applications/phortune/provider/PhortuneBalancedPaymentProvider.php @@ -121,7 +121,7 @@ final class PhortuneBalancedPaymentProvider extends PhortunePaymentProvider { } public function getPaymentMethodIcon() { - return celerity_get_resource_uri('/rsrc/image/phortune/balanced.png'); + return 'Balanced'; } public function getPaymentMethodProviderDescription() { diff --git a/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php b/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php index c1632c52e1..91d92915a5 100644 --- a/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php +++ b/src/applications/phortune/provider/PhortunePayPalPaymentProvider.php @@ -148,7 +148,7 @@ final class PhortunePayPalPaymentProvider extends PhortunePaymentProvider { } public function getPaymentMethodIcon() { - return celerity_get_resource_uri('rsrc/image/phortune/paypal.png'); + return 'PayPal'; } public function getPaymentMethodProviderDescription() { diff --git a/src/applications/phortune/provider/PhortunePaymentProvider.php b/src/applications/phortune/provider/PhortunePaymentProvider.php index 3874752ede..a6e925cb1e 100644 --- a/src/applications/phortune/provider/PhortunePaymentProvider.php +++ b/src/applications/phortune/provider/PhortunePaymentProvider.php @@ -212,13 +212,12 @@ abstract class PhortunePaymentProvider { require_celerity_resource('phortune-css'); - $icon_uri = $this->getPaymentMethodIcon(); $description = $this->getPaymentMethodProviderDescription(); $details = $this->getPaymentMethodDescription(); $icon = id(new PHUIIconView()) - ->setImage($icon_uri) - ->addClass('phortune-payment-icon'); + ->setSpriteSheet(PHUIIconView::SPRITE_LOGIN) + ->setSpriteIcon($this->getPaymentMethodIcon()); $button = id(new PHUIButtonView()) ->setSize(PHUIButtonView::BIG) diff --git a/src/applications/phortune/provider/PhortuneStripePaymentProvider.php b/src/applications/phortune/provider/PhortuneStripePaymentProvider.php index e50f6a6a57..6cef2cbf3e 100644 --- a/src/applications/phortune/provider/PhortuneStripePaymentProvider.php +++ b/src/applications/phortune/provider/PhortuneStripePaymentProvider.php @@ -29,7 +29,7 @@ final class PhortuneStripePaymentProvider extends PhortunePaymentProvider { } public function getPaymentMethodIcon() { - return celerity_get_resource_uri('/rsrc/image/phortune/stripe.png'); + return 'Stripe'; } public function getPaymentMethodProviderDescription() { diff --git a/src/applications/phortune/provider/PhortuneTestPaymentProvider.php b/src/applications/phortune/provider/PhortuneTestPaymentProvider.php index cbff927fb7..4750931b71 100644 --- a/src/applications/phortune/provider/PhortuneTestPaymentProvider.php +++ b/src/applications/phortune/provider/PhortuneTestPaymentProvider.php @@ -34,7 +34,7 @@ final class PhortuneTestPaymentProvider extends PhortunePaymentProvider { } public function getPaymentMethodIcon() { - return celerity_get_resource_uri('/rsrc/image/phortune/test.png'); + return 'TestPayment'; } public function getPaymentMethodProviderDescription() { diff --git a/src/applications/phortune/provider/PhortuneWePayPaymentProvider.php b/src/applications/phortune/provider/PhortuneWePayPaymentProvider.php index 7dacd7ed32..9f22c76632 100644 --- a/src/applications/phortune/provider/PhortuneWePayPaymentProvider.php +++ b/src/applications/phortune/provider/PhortuneWePayPaymentProvider.php @@ -148,7 +148,7 @@ final class PhortuneWePayPaymentProvider extends PhortunePaymentProvider { } public function getPaymentMethodIcon() { - return celerity_get_resource_uri('/rsrc/image/phortune/wepay.png'); + return 'WePay'; } public function getPaymentMethodProviderDescription() { diff --git a/webroot/rsrc/image/phortune/balanced.png b/webroot/rsrc/image/phortune/balanced.png deleted file mode 100644 index ef94cd3ca8fe2abacec5a0eff964b0fb9ca2c20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2765 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 kDUqMD$w{DgV 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 kDUqMD$w{DgV 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 kDUqMD$w{DgV zD^^8ATW%$+u_2+@Eiw_Jp>3D-jkb2b=X>_q?>y(6|Ns9!zu)`*-phHOljh>=psuQ` z3V}e>9S@RevK6uRC_`m$qQm+Y*|H6!c!6%bKro6S03bFjUH|}hE&8o*%1gg*i- zAP|K;Y`PcdMRg)Fc^o6g8pbG^!@`)%^R8*8vl(7*{5QM@I2!u5sSS(V8Kni2HAR`*d74H7* zfeZ+l0yZCH^SJOekBk6b1V}>2l>V6lhfk&c<(Mn{R47@=P|*xN3S)#uaX4#veMAdE z8t}J_e?$xEF?;|;1BAQ?0aMnGz}=t8vfBN7pf#XO4Ux=aMsNTw=tw3ZWELY9n?*FU z#S)BdZ7FChhK#{ba0C+y*$#)bHKkx}&~|o|&s;~Y5M*$fz-KP|Z!Y;?xkNhwzyNsy zI*%9jxqB|bJdh_0=JDZnZl-VpDuc=9t{J{qEAA()fPftduTQL=I*+t8zji@c6HxqE6opTi!J2hLt4pD$DG&^&co zc`ubdO#aa9#cVrr?c2=TORXLueOfgkSHGKaScTCtZ|hp=QYmf~Dh74Q82L`PvNE>o z@&?i1x#MxO3YANH_DzmPy?-88eCu@GTpjhuk-m`(FizCmb*N-}ZESROlT|`<{KC?L zhxk$!sr>9iJsbw}Q%8NmyhUr>&8nubse4k9j#0?1yDA-OiN&WFFshSNse7g8#wQ&e z2N&Z*rY`D9YKOx5hlU&n1_r=IaV6c&EoHLt!~BLD3Q`Yiowh(IAN%{Yu;KIdC$){d z59Z|Lgs3X(T+CqHdR0{eQ={Am4PjUrJ&cgI|dW{K=GrnxdU-nw;5F97Y=WTFY3XFlny(o@oa!SQ&!uAZLB zHcbT`$e#BL-7(6+7FJ&I*@q4v&N9v~?y=4wSi{6UJ)^F4dg-hZ6e^kM$_q)qvK8fP zu(#&aKDaQq6Z~`VvP+O?!~_tSDEl^unXQAQfrIx zc%x(P^H`L+KgICk`j?m541JJ0Z+`2q$n4d(2HN9B>N(}Jv$I)-`}Z4tsl%8US&F}X zy6Ns+c5raVv)Tr04@hF;)$P}|C})h1vNoqSY;IKY5C5t`^*!Y7be~UWS-VNMy)%vW zSX5PYU}|Q@#IJuP+S@xEs8uY^KIx3UePSgx zXUlG+2@;FLfz*(Y{fqD47jm;3vTwF&)DA1Xp}+DgtB!yZbx3y|9PEF5+M-$Jnv-kf zb7 zSoBMa%P^a?v~!R10{)n_m=u(2nLkxkQ)_#v2zfC*^OBRs{la6@zMfWsC2P;(o}(Gl zL78O5$hN|p*_8#(^W27Ryg`frn4 z5^L_47Is$JR&-Afzx8(S2KR!2Qu{;0Dn)FA2T()a3(IB;t95ruYgng%DAR%oc~S>+ z=feU_K=P&VEY{hlQ?FkqITTMq)c=OHWnI1UF{ePdg^ zmfwwv3PkJDp*xA^Ks$4Pp_5nseF8Qw^nziBcS>o%;gpkYyg{@ZdQ8}z zc71*Q^er}(<-<9n8()Z(0A(dzd0ee|xb_*KxXYk=xAPr`(FkLh#2wkbaq!^C_JlF( zC$M$UR?I~HE1y+xcA2m+KkwR1@N|v)O?rL2>7@FjO>FgS!uj8_rzKN$^bkpkxR$-8MNCDhJL{`|qha#zXn%8GlKWCjwM;)Cc6>RhN2E1#ph zOZ~Y&&U5)JwYw0XH9RtMeLO^EU~n)&@m;RRx#K2}Y%U7N-);nY`}+FmmyJ{A-wYYw zvW$M4SWr;VA0ZSPlj47Mk-M04?1&%4c6<7LQlwPp3G8XnK)bP_TSP=e0@~+8JEgrs znrwT8?$ul{T^Op{+XxaiNm~p|6hwO;?CY;rPtY50)eh_VK# zT(Vy?Neg0)BKHUQUwJh})!(PXMkh3~y}$hOdQFXH826-l_@gSZO1ap2Fh4&ZbRL>{ zW^?>}VPPc^sfAyu+dN%%nF^MzW=upsG%hulPlydE=vj>{>FnwhFEm==akvXfH^0uj z_hBSY5&p}g=S#lTD8Hbg|jwS=yyUMue|!Pu)?Ee8Qj_@t z$=HW6h_>wxQEk9IiA0j=B=qI;`G=l;Z)s)L?R^W?fxf*Ao=2#-Bg@-VhN3?QRo8#F3GnB&FrW+}vDK kDUqMD$w{DgV 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 kDUqMD