wikimedia/mediawiki-extensions-DonationInterface

View on GitHub
gateway_common/ResultPages.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

class ResultPages {
    /**
     * Get the URL for a page to show donors after a successful donation,
     * with the country code appended as a query string variable
     * @param GatewayType $adapter
     * @param array $extraParams any extra parameters to add to the URL
     * @return string full URL of the thank you page
     */
    public static function getThankYouPage( GatewayType $adapter, $extraParams = [] ) {
        $page = $adapter::getGlobal( "ThankYouPage" );
        if ( $page ) {
            $page = self::appendLanguageAndMakeURL(
                $page,
                $adapter->getData_Unstaged_Escaped( 'language' )
            );
        }
        $extraParams['country'] = $adapter->getData_Unstaged_Escaped( 'country' );
        $extraParams['amount'] = $adapter->getData_Unstaged_Escaped( 'amount' );
        $extraParams['currency'] = $adapter->getData_Unstaged_Escaped( 'currency' );
        $extraParams['payment_method'] = $adapter->getData_Unstaged_Escaped( 'payment_method' );
        $extraParams['order_id'] = $adapter->getData_Unstaged_Escaped( 'order_id' );
        $extraParams['recurring'] = $adapter->getData_Unstaged_Escaped( 'recurring' );
        // Map from internal-facing old utm_ prefixes to wmf_ prefixes that hopefully
        // are less likely to be stripped by privacy-preserving browsers.
        $extraParams['wmf_medium'] = $adapter->getData_Unstaged_Escaped( 'utm_medium' );
        $extraParams['wmf_source'] = $adapter->getData_Unstaged_Escaped( 'utm_source' );
        $extraParams['wmf_campaign'] = $adapter->getData_Unstaged_Escaped( 'utm_campaign' );

        return wfAppendQuery( $page ?? '', $extraParams );
    }

    /**
     * Get the URL for a page to show donors who cancel their attempt
     * @param GatewayType $adapter instance to use for logger and settings
     * @return string full URL of the cancel page
     */
    public static function getCancelPage( GatewayType $adapter ) {
        $cancelPage = $adapter->getGlobal( 'CancelPage' );
        if ( !$cancelPage ) {
            return '';
        }
        return self::appendLanguageAndMakeURL(
            $cancelPage,
            $adapter->getData_Unstaged_Escaped( 'language' )
        );
    }

    /**
     * For pages we intend to redirect to. This function will take either a full
     * URL or a page title, and turn it into a URL with the appropriate language
     * appended onto the end.
     * @param string $url Either a wiki page title, or a URL to an external wiki
     * page title.
     * @param string $language
     * @return string localized full URL
     */
    public static function appendLanguageAndMakeURL( $url, $language ) {
        // make sure we don't already have the language in there...
        $dirs = explode( '/', $url );
        if ( !in_array( $language, $dirs ) ) {
            $url .= "/$language";
        }

        if ( str_starts_with( $url, 'http' ) ) {
            return $url;
        } else { // this isn't a url yet.
            $returnTitle = Title::newFromText( $url );
            $url = $returnTitle->getFullURL( [], false, PROTO_CURRENT );
            return $url;
        }
    }
}