View source
<?php
class InstapageCmsPluginConnector {
private static $selectedConnector = null;
private static $selectedLanguage = 'en-GB';
private static $languageArray = null;
public static function getSelectedLanguage() {
return self::$selectedLanguage;
}
public static function isSSL() {
return in_array(filter_input(INPUT_SERVER, 'HTTPS'), [
'on',
1,
]) || filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_PROTO') == 'https' || filter_input(INPUT_SERVER, 'REQUEST_SCHEME') == 'https';
}
public static function isWP() {
if (defined('ABSPATH') && defined('WPINC') && defined('WP_CONTENT_DIR')) {
return true;
}
return false;
}
public static function isDrupal8() {
if (class_exists('\\Drupal\\Core\\DrupalKernel')) {
return true;
}
return false;
}
public static function isDrupal7() {
if (defined('VERSION') && VERSION > 7.0 && VERSION < 8.0) {
return true;
}
return false;
}
public static function getSelectedConnector() {
if (self::$selectedConnector === null) {
switch (true) {
case self::isWP():
require_once INSTAPAGE_PLUGIN_PATH . '/connectors/InstapageCmsPluginWPConnector.php';
self::$selectedConnector = new InstapageCmsPluginWPConnector();
break;
case self::isDrupal7():
require_once INSTAPAGE_PLUGIN_PATH . '/connectors/InstapageCmsPluginDrupal7Connector.php';
self::$selectedConnector = new InstapageCmsPluginDrupal7Connector();
break;
case self::isDrupal8():
require_once INSTAPAGE_PLUGIN_PATH . '/connectors/InstapageCmsPluginDrupal8Connector.php';
self::$selectedConnector = new InstapageCmsPluginDrupal8Connector();
break;
default:
die('Unsupported CMS');
}
}
return self::$selectedConnector;
}
public static function getPluginDirectoryName() {
return self::getSelectedConnector()
->getPluginDirectoryName();
}
public static function currentUserCanManage() {
return self::getSelectedConnector()
->currentUserCanManage();
}
public static function lang() {
return self::getSelectedConnector()
->lang(func_get_args());
}
public static function getSitename($sanitized = false) {
return self::getSelectedConnector()
->getSitename($sanitized);
}
public static function getSiteURL($protocol = true) {
return self::getSelectedConnector()
->getSiteURL($protocol);
}
public static function getHomeURL($protocol = true) {
return self::getSelectedConnector()
->getHomeURL($protocol);
}
public static function getCMSName() {
return self::getSelectedConnector()
->getCMSName();
}
public static function getCMSVersion() {
return self::getSelectedConnector()
->getCMSVersion();
}
public static function getMySQLVersion() {
$sql = 'SELECT VERSION() as version';
$result = self::getSelectedConnector()
->getRow($sql);
return $result->version;
}
public static function isAPIAccessible() {
return self::getSelectedConnector()
->isAPIAccessible();
}
public static function areSEOFriendlyUrlsEnabled() {
return self::getSelectedConnector()
->areSEOFriendlyUrlsEnabled();
}
public static function mail($to, $subject, $message, $headers = '', $attachments = array()) {
return self::getSelectedConnector()
->mail($to, $subject, $message, $headers, $attachments);
}
public static function getAjaxURL() {
return self::getSelectedConnector()
->getAjaxURL();
}
public static function addAdminJS($handle, $file, $inFooter = false) {
return self::getSelectedConnector()
->addAdminJSaddAdminJS($handle, $file, $inFooter);
}
public static function addAdminCSS($handle, $file) {
return self::getSelectedConnector()
->addAdminCSS($handle, $file);
}
public static function escapeHTML($html) {
return self::getSelectedConnector()
->escapeHTML($html);
}
public static function checkPage($type, $slug = '') {
return self::getSelectedConnector()
->checkPage($type, $slug);
}
public static function isHtmlReplaceNecessary() {
return self::getSelectedConnector()
->isHtmlReplaceNecessary();
}
public static function initPlugin() {
$db = InstapageCmsPluginDBModel::getInstance();
$db
->initPluginTables();
self::getSelectedConnector()
->initPlugin();
}
public static function removePlugin() {
return self::getSelectedConnector()
->removePlugin();
}
public static function getLandingPageSlugs() {
$db = InstapageCmsPluginDBModel::getInstance();
$sql = 'SELECT id, slug, \'\' AS editUrl FROM ' . $db->pagesTable . ' WHERE type = \'page\' AND slug <> \'\'';
$results = $db
->getResults($sql);
return $results;
}
public static function isProhibitedLandingPageSlug($slug) {
$db = InstapageCmsPluginDBModel::getInstance();
$sql = 'SELECT id, slug, \'\' AS editUrl FROM ' . $db->pagesTable . ' WHERE type = \'page\' AND slug = \'%s\' LIMIT 1';
$results = $db
->getResults($sql, $slug);
return $results;
}
public static function ajaxCallback() {
ini_set('display_errors', 0);
header('Content-Type: application/json');
$post = isset($_POST['data']) ? json_decode(urldecode($_POST['data'])) : array();
$post->data = isset($post->data) ? $post->data : null;
if (!empty($post->action)) {
InstapageCmsPluginAjaxController::getInstance()
->doAction($post->action, $post->data);
}
die;
}
public static function getSettingsModule() {
return self::getSelectedConnector()
->getSettingsModule();
}
public static function getPluginRequirements($features) {
$dbVersion = InstapageCmsPluginConnector::getMySQLVersion();
$commonFeatures = array(
array(
'label' => InstapageCmsPluginConnector::lang('PHP 5.5+'),
'condition' => version_compare(phpversion(), '5.5.0', '>='),
),
array(
'label' => InstapageCmsPluginConnector::lang('MySQL 5.5.3+ / MariaDB 5.5+'),
'condition' => InstapageCmsPluginHelper::isRegularMySQL($dbVersion) && version_compare(InstapageCmsPluginHelper::getRawVersion($dbVersion), '5.5.3', '>=') || InstapageCmsPluginHelper::isMariaDBMySQL($dbVersion) && version_compare(InstapageCmsPluginHelper::getRawVersion($dbVersion), '5.5.0', '>='),
),
array(
'label' => InstapageCmsPluginConnector::lang('PHP Curl extension or another way to make remote requests'),
'condition' => InstapageCmsPluginConnector::isAPIAccessible(),
),
array(
'label' => InstapageCmsPluginConnector::lang('Enabled clean / SEO friendly URLs'),
'condition' => InstapageCmsPluginConnector::areSEOFriendlyUrlsEnabled(),
),
array(
'label' => InstapageCmsPluginConnector::lang('Every request for landing page requires a request to our page server (' . InstapageCmsPluginConnector::getURLWithSelectedProtocol(INSTAPAGE_ENTERPRISE_ENDPOINT) . ') and this URL has to be accessible.'),
'condition' => InstapageCmsPluginConnector::isAPIAccessible(),
),
);
$features = array_merge($features, $commonFeatures);
ob_start();
?>
<div class="custom-params-form ui-section">
<h3 class="ui-subtitle"><?php
echo InstapageCmsPluginConnector::lang('Plugin requirements');
?></h3>
<p class="l-space-bottom-primary"><?php
echo InstapageCmsPluginConnector::lang('Instapage plugin requires following settings to work correctly:');
?></p>
<ul class="c-list">
<?php
foreach ($features as $feature) {
?>
<li class="c-list-item">
– <span class="<?php
echo $feature['condition'] ? 'u-text--success' : 'u-text--danger';
?>">
<?php
echo $feature['label'];
?>
</span>
</li>
<?php
}
?>
</ul>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
return $html;
}
public static function getURLWithSelectedProtocol($url) {
$useHttpsProtocol = InstapageCmsPluginHelper::getOption('ssl', false);
$protocolsToToggle = [
'http://',
'https://',
];
list($search, $replace) = $useHttpsProtocol ? $protocolsToToggle : array_reverse($protocolsToToggle);
return str_ireplace($search, $replace, $url);
}
}