| <?php | |
| /** | |
| * Copyright (c) 2022 Eclipse Foundation. | |
| * | |
| * This program and the accompanying materials are made | |
| * available under the terms of the Eclipse Public License 2.0 | |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ | |
| * | |
| * Contributors: | |
| * Christopher Guindon (Eclipse Foundation) - Initial implementation | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 | |
| */ | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/friends/payment.class.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); | |
| /** | |
| * Donate View | |
| * | |
| * @author Christopher Guindon | |
| */ | |
| class Donate { | |
| /** | |
| * Instance of App() | |
| * | |
| * @var object | |
| */ | |
| protected $App; | |
| /** | |
| * Instance of Paypal() | |
| * | |
| * @var object | |
| */ | |
| protected $Paypal; | |
| /** | |
| * Donation Layout | |
| * | |
| * @var string | |
| */ | |
| protected $layout = ''; | |
| /** | |
| * Download Information | |
| * | |
| * @var array | |
| */ | |
| protected $download_info = array(); | |
| /** | |
| * Class constructor | |
| */ | |
| public function __construct() { | |
| // Initialize required helper classes | |
| $this->App = new App(); | |
| $this->Paypal = new Paypal(); | |
| // Set default layout | |
| $this->setLayout('eclipsefdn-layout_a'); | |
| // Initialize $download_info | |
| $this->download_info = array( | |
| 'url' => '', | |
| 'file_id' => '', | |
| 'title' => '' | |
| ); | |
| } | |
| /** | |
| * Set the desired layout | |
| * | |
| * A layout is always associated to a WG or foundation. | |
| * This allows us to track where the donation money should go. | |
| * | |
| * @param string $layout The layout key | |
| * | |
| * @return string | |
| */ | |
| public function setLayout($layout = '') { | |
| // layout_key|name => working group (donation tracking) | |
| $valid_layouts = array( | |
| 'eclipsefdn-layout_a' => 'eclipsefdn', | |
| 'eclipsefdn-layout_b' => 'eclipsefdn', | |
| 'eclipse_ide' => 'eclipse_ide', | |
| 'ecdtools' => 'ecdtools', | |
| 'adoptium' => 'adoptium', | |
| 'openvsx' => 'openvsx', | |
| ); | |
| // Standardize layout names without changing /downloads | |
| if ($layout === 'layout_a' || $layout === 'layout_b') { | |
| $layout = 'eclipsefdn-' . $layout; | |
| } | |
| // Update layout if the value is valid | |
| if (!empty($layout) && !empty($valid_layouts[$layout])) { | |
| $this->layout = array($layout => $valid_layouts[$layout]); | |
| } | |
| return $this->layout; | |
| } | |
| /** | |
| * Get the desired layout | |
| * | |
| * @return array The key is the layout name and | |
| * value is landing_page/wg for tracking purposes. | |
| */ | |
| public function getLayout() { | |
| return $this->layout; | |
| } | |
| /** | |
| * Set Download Title | |
| * | |
| * @param string $title The download title | |
| * | |
| * @return string | |
| */ | |
| public function setDownloadTitle($title = '') { | |
| if (!empty($title) && is_string($title)) { | |
| $this->download_info['title'] = $title; | |
| } | |
| return $this->download_info['title']; | |
| } | |
| /** | |
| * Get Download Title | |
| * | |
| * @return string | |
| */ | |
| public function getDownloadTitle() { | |
| return $this->download_info['title']; | |
| } | |
| /** | |
| * Set Download URL | |
| * | |
| * @param string $url The downloaded file | |
| * | |
| * @return string | |
| */ | |
| public function setDownloadUrl($url = '') { | |
| if (!empty($url) && is_string($url)) { | |
| $this->download_info['url'] = $url; | |
| } | |
| return $this->download_info['url']; | |
| } | |
| /** | |
| * Get Download URL | |
| * | |
| * @return string | |
| */ | |
| public function getDownloadUrl() { | |
| return $this->download_info['url']; | |
| } | |
| /** | |
| * Set Download file_id | |
| * | |
| * @param string $file_id The downloaded file id | |
| * | |
| * @return string | |
| */ | |
| public function setDownloadFileId($file_id = 0) { | |
| if (!empty($file_id) && is_numeric($file_id)) { | |
| $this->download_info['file_id'] = (string)$file_id; | |
| } | |
| return $this->download_file_id; | |
| } | |
| /** | |
| * Get Download File ID | |
| * | |
| * @return string | |
| */ | |
| public function getDownloadFileId() { | |
| return (string)$this->download_info['file_id']; | |
| } | |
| /** | |
| * Detect if this is a donation from our download page | |
| * | |
| * @return boolean | |
| */ | |
| public function isDownloadPage() { | |
| // @todo: Consider including file_id | |
| if (!empty($this->download_info['title']) && !empty($this->download_info['url'])) { | |
| return TRUE; | |
| } | |
| return FALSE; | |
| } | |
| /** | |
| * Build the thank you for downloading section | |
| * | |
| * @return string | |
| */ | |
| public function getThankYouOutput() { | |
| $html = ''; | |
| if ($this->isDownloadPage()) { | |
| $html = '<div class="container-thankyou"><div class="row thankyou text-center">'; | |
| if ($title = $this->getDownloadTitle()) { | |
| $html .= '<p class="thankyou-title">' . $title . '</p>'; | |
| } | |
| if ($url = $this->getDownloadUrl()) { | |
| $html .= '<span class="direct-link">' . $url . '</span>'; | |
| } | |
| $html .= '</div></div>'; | |
| } | |
| return $html; | |
| } | |
| /** | |
| * Fetch content from template file | |
| * | |
| * @return string | |
| */ | |
| public function getLayoutTemplatePage($suffix = '') { | |
| $layout = $this->getLayout(); | |
| $current_layout = key($layout); | |
| $path = realpath(dirname(__FILE__) . '/tpl/pages/' . $current_layout . $suffix . '.tpl.php'); | |
| $html = ''; | |
| if (file_exists($path)) { | |
| ob_start(); | |
| require_once($path); | |
| $html = ob_get_clean(); | |
| } | |
| return $html; | |
| } | |
| /** | |
| * Build HTML for donation page | |
| * | |
| * @return string | |
| */ | |
| public function output() { | |
| $html = $this->getThankYouOutput(); | |
| ob_start(); | |
| include('tpl/slider.tpl.php'); | |
| include('tpl/modal.tpl.php'); | |
| $html .= ob_get_clean(); | |
| return $html; | |
| } | |
| /** | |
| * Get landing_page hidden input | |
| * | |
| * @return string | |
| */ | |
| public function getLandingPageInput() { | |
| $layout_info = $this->getLayout(); | |
| $value = current($layout_info); | |
| if ($this->isDownloadPage()) { | |
| $value = 'download'; | |
| } | |
| return $this->_createHiddenInput("landing_page", $value); | |
| } | |
| /** | |
| * Get file_id hidden input | |
| * | |
| * @return string | |
| */ | |
| public function getFileIdInput() { | |
| return $this->_createHiddenInput("file_id", $this->getDownloadFileId()); | |
| } | |
| /** | |
| * Get scope hidden input | |
| * | |
| * @return string | |
| */ | |
| public function getScopeInput() { | |
| $value = ''; | |
| if (!empty($_GET['scope'])) { | |
| $value = $_GET['scope']; | |
| } | |
| if ($this->isDownloadPage()) { | |
| $layout = $this->getLayout(); | |
| $value = key($layout); | |
| } | |
| return $this->_createHiddenInput("scope", $value); | |
| } | |
| /** | |
| * Get campaign hidden input | |
| * | |
| * @return string | |
| */ | |
| public function getCampaignInput() { | |
| $value = ''; | |
| if (!empty($_GET['campaign'])) { | |
| $value = $_GET['campaign']; | |
| } | |
| // Override campaign value for our downloads section | |
| if ($this->isDownloadPage()) { | |
| $value = 'ab_testing'; | |
| } | |
| return $this->_createHiddenInput("campaign", $value); | |
| } | |
| /** | |
| * Build hidden input field | |
| * | |
| * @return string | |
| */ | |
| private function _createHiddenInput($name = '', $value = '') { | |
| $html = ''; | |
| if (!empty($name) && !empty($value) && is_string($name) && is_string($value)) { | |
| $html = '<input type="hidden" name="' . $this->App->checkPlain($name) . '" value="' . $this->App->checkPlain($value) . '">'; | |
| } | |
| return $html; | |
| } | |
| } |