class InstapageCmsPluginConnector in Instapage plugin 7.3
Same name and namespace in other branches
- 8.3 core/connectors/InstapageCmsPluginConnector.php \InstapageCmsPluginConnector
Main connector class, used to integrate with PHP-based CMSes. It's job is to detect a CMS that executes the code and select proper CMS Connector.
Hierarchy
- class \InstapageCmsPluginConnector
Expanded class hierarchy of InstapageCmsPluginConnector
File
- core/
connectors/ InstapageCmsPluginConnector.php, line 6
View source
class InstapageCmsPluginConnector {
/**
* @var object $selectedConnector Proper connector for current CMS.
*/
private static $selectedConnector = null;
/**
* @var string $selectedLanguage Language of current CMS. Currently only english is supported.
*/
private static $selectedLanguage = 'en-GB';
/**
* @var array $languageArray An array with proper dictionary.
*/
private static $languageArray = null;
/**
* Gets selected language.
*/
public static function getSelectedLanguage() {
return self::$selectedLanguage;
}
/**
* Checks if connector used in secured https:// env
* @return bool
*/
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';
}
/**
* Checks if WordPress is a currently used CMS.
*
* @return boolean
*/
public static function isWP() {
if (defined('ABSPATH') && defined('WPINC') && defined('WP_CONTENT_DIR')) {
return true;
}
return false;
}
/**
* Checks if Drupal 8 is a currently used CMS.
*
* @return boolean
*/
public static function isDrupal8() {
if (class_exists('\\Drupal\\Core\\DrupalKernel')) {
return true;
}
return false;
}
/**
* Checks if Drupal 7 is a currently used CMS.
*
* @return boolean
*/
public static function isDrupal7() {
if (defined('VERSION') && VERSION > 7.0 && VERSION < 8.0) {
return true;
}
return false;
}
/**
* Selects a proper connector based on currently used CMS.
*
* @return object Selected connector.
*/
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;
}
/**
* Gets the plugin's directory name in current CMS.
*
* @return string Directory name.
*/
public static function getPluginDirectoryName() {
return self::getSelectedConnector()
->getPluginDirectoryName();
}
/**
* Gets the current user access rights to the Instapage plugin.
*
* @return bool Returns true if user can manage the Instapage plugin.
*/
public static function currentUserCanManage() {
return self::getSelectedConnector()
->currentUserCanManage();
}
/**
* Gets the value of language variable.
*/
public static function lang() {
return self::getSelectedConnector()
->lang(func_get_args());
}
/**
* Gets the sitemane.
*
* @param bool $sanitized If the name should be sanitized.
*
* @return string Sitename, sanitized or not.
*/
public static function getSitename($sanitized = false) {
return self::getSelectedConnector()
->getSitename($sanitized);
}
/**
* Gets the site base URL.
*
* @param bool $protocol Value returned with protocol or not.
*
* @return string Site base URL. With protocol or not.
*/
public static function getSiteURL($protocol = true) {
return self::getSelectedConnector()
->getSiteURL($protocol);
}
/**
* Gets the site home URL.
*
* @param bool $protocol Value returned with protocol or not.
*
* @return string Site home URL. With protocol or not.
*/
public static function getHomeURL($protocol = true) {
return self::getSelectedConnector()
->getHomeURL($protocol);
}
/**
* Gets the currently used CMS name.
*
* @return string CMS name.
*/
public static function getCMSName() {
return self::getSelectedConnector()
->getCMSName();
}
/**
* Gets the currently used CMS version.
* @uses self::getSelectedConnector()
* @return string CMS version.
*/
public static function getCMSVersion() {
return self::getSelectedConnector()
->getCMSVersion();
}
/**
* Gets the currently used MySQL version.
* @uses self::getSelectedConnector()
* @return string MySQL version.
*/
public static function getMySQLVersion() {
$sql = 'SELECT VERSION() as version';
$result = self::getSelectedConnector()
->getRow($sql);
return $result->version;
}
/**
* Checks if API is accessible
* @uses self::getSelectedConnector()
* @return bool
*/
public static function isAPIAccessible() {
return self::getSelectedConnector()
->isAPIAccessible();
}
/**
* Checks if SEO friendly urls are enabled
* @uses self::getSelectedConnector()
* @return bool
*/
public static function areSEOFriendlyUrlsEnabled() {
return self::getSelectedConnector()
->areSEOFriendlyUrlsEnabled();
}
/**
* Sends an e-mail using CMS native email sending method.
*
* @param string $to Receiver address.
* @param string $subject A subject.
* @param string $message A message.
* @param string $headers Message headers. Default: ''.
* @param aray $attachments Attachments.
*
* @return bool True on success.
*/
public static function mail($to, $subject, $message, $headers = '', $attachments = array()) {
return self::getSelectedConnector()
->mail($to, $subject, $message, $headers, $attachments);
}
/**
* Gets the AJAX URL for currently used CMS.
*
* @return string AJAX URL.
*/
public static function getAjaxURL() {
return self::getSelectedConnector()
->getAjaxURL();
}
/**
* Adds a declaration of JS to Instapage plugin's dashboard in admin panel.
*
* @param string $handle Name of the script.
* @param string $file Path to JS file.
* @param bool $inFooter Can the file be loaded in the footer?
*/
public static function addAdminJS($handle, $file, $inFooter = false) {
return self::getSelectedConnector()
->addAdminJSaddAdminJS($handle, $file, $inFooter);
}
/**
* Adds a declaration of CSS to Instapage plugin's dashboard in admin panel.
*
* @param string $handle Name of the script.
* @param string $file Path to CSS file.
*/
public static function addAdminCSS($handle, $file) {
return self::getSelectedConnector()
->addAdminCSS($handle, $file);
}
/**
* Properly escapes the HTML.
*
* @param string $html HTML to escape.
* @return string Escaped HTML.
*/
public static function escapeHTML($html) {
return self::getSelectedConnector()
->escapeHTML($html);
}
/**
* Checks (and displays) if a landing page should be displayed instead of normal content served by CMS.
*
* @param string $type Type of page to check ('page', 'home' or '404').
* @param string $slug Slug to check. Default: ''.
*/
public static function checkPage($type, $slug = '') {
return self::getSelectedConnector()
->checkPage($type, $slug);
}
/**
* Checks if there is a need to replace content of CMS with a landing page. Prevents content replacement on admin/login pages.
*
* @return bool True if replace is possible.
*/
public static function isHtmlReplaceNecessary() {
return self::getSelectedConnector()
->isHtmlReplaceNecessary();
}
/**
* Initiates Instapage plugin's DB structure and loads plugin's classes and selected connector.
*/
public static function initPlugin() {
$db = InstapageCmsPluginDBModel::getInstance();
$db
->initPluginTables();
self::getSelectedConnector()
->initPlugin();
}
/**
* Removes the plugin.
*/
public static function removePlugin() {
return self::getSelectedConnector()
->removePlugin();
}
/**
* Gets the slugs of all landing pages stored in the plugin's DB.
* @deprecated
* @return array Stored slugs.
*/
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;
}
/**
* Checks if given slug is prohibited in terms of publishing a landing page. If it's free - will return false. Otherwise an array with slug details will be returned
* @param string $slug Slug to be checked
* @uses InstapageCmsPluginDBModel::$pagesTable
* @uses InstapageCmsPluginDBModel::getInstance()
* @uses InstapageCmsPluginDBModel::getResults()
* @return bool|array
*/
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;
}
/**
* Executes an action requested via AJAX.
*/
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;
}
/**
* Gets the settings module, a CMS-dependant part of the Settings page.
*
* @return string HTML form with settings for currently used CMS only.
*/
public static function getSettingsModule() {
return self::getSelectedConnector()
->getSettingsModule();
}
/**
* Gets requirements section for settings module
* @param array $features
* @uses self::getMySQLVersion()
* @uses self::isAPIAccessible()
* @uses self::areSEOFriendlyUrlsEnabled()
* @uses self::lang()
* @uses InstapageCmsPluginHelper::getRawVersion()
* @uses InstapageCmsPluginHelper::isRegularMySQL()
* @uses InstapageCmsPluginHelper::isMariaDBMySQL()
* @return string HTML
*/
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;
}
/**
* Toggles ssl on/off in given url
*
* @param $url
* @uses InstapageCmsPluginHelper::getOption()
* @return string
*/
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);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
InstapageCmsPluginConnector:: |
private static | property | ||
InstapageCmsPluginConnector:: |
private static | property | ||
InstapageCmsPluginConnector:: |
private static | property | ||
InstapageCmsPluginConnector:: |
public static | function | Adds a declaration of CSS to Instapage plugin's dashboard in admin panel. | |
InstapageCmsPluginConnector:: |
public static | function | Adds a declaration of JS to Instapage plugin's dashboard in admin panel. | |
InstapageCmsPluginConnector:: |
public static | function | Executes an action requested via AJAX. | |
InstapageCmsPluginConnector:: |
public static | function | Checks if SEO friendly urls are enabled @uses self::getSelectedConnector() | |
InstapageCmsPluginConnector:: |
public static | function | Checks (and displays) if a landing page should be displayed instead of normal content served by CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the current user access rights to the Instapage plugin. | |
InstapageCmsPluginConnector:: |
public static | function | Properly escapes the HTML. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the AJAX URL for currently used CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the currently used CMS name. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the currently used CMS version. @uses self::getSelectedConnector() | |
InstapageCmsPluginConnector:: |
public static | function | Gets the site home URL. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the slugs of all landing pages stored in the plugin's DB. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the currently used MySQL version. @uses self::getSelectedConnector() | |
InstapageCmsPluginConnector:: |
public static | function | Gets the plugin's directory name in current CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Gets requirements section for settings module | |
InstapageCmsPluginConnector:: |
public static | function | Selects a proper connector based on currently used CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Gets selected language. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the settings module, a CMS-dependant part of the Settings page. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the sitemane. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the site base URL. | |
InstapageCmsPluginConnector:: |
public static | function | Toggles ssl on/off in given url | |
InstapageCmsPluginConnector:: |
public static | function | Initiates Instapage plugin's DB structure and loads plugin's classes and selected connector. | |
InstapageCmsPluginConnector:: |
public static | function | Checks if API is accessible @uses self::getSelectedConnector() | |
InstapageCmsPluginConnector:: |
public static | function | Checks if Drupal 7 is a currently used CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Checks if Drupal 8 is a currently used CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Checks if there is a need to replace content of CMS with a landing page. Prevents content replacement on admin/login pages. | |
InstapageCmsPluginConnector:: |
public static | function | Checks if given slug is prohibited in terms of publishing a landing page. If it's free - will return false. Otherwise an array with slug details will be returned | |
InstapageCmsPluginConnector:: |
public static | function | Checks if connector used in secured https:// env | |
InstapageCmsPluginConnector:: |
public static | function | Checks if WordPress is a currently used CMS. | |
InstapageCmsPluginConnector:: |
public static | function | Gets the value of language variable. | |
InstapageCmsPluginConnector:: |
public static | function | Sends an e-mail using CMS native email sending method. | |
InstapageCmsPluginConnector:: |
public static | function | Removes the plugin. |