blob: 0f2666a3db094d7ffdd7c28febab800a2248b00a [file] [log] [blame]
<?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;
}
}