1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340:
<?php
if (!class_exists('CTA_Load_Extensions')) {
class CTA_Load_Extensions {
private static $instance;
public $definitions;
public $template_categories;
public static function instance() {
if (!isset(self::$instance) && !(self::$instance instanceof CTA_Load_Extensions)) {
self::$instance = new CTA_Load_Extensions;
if (!is_admin() || (defined('DOING_AJAX') && DOING_AJAX && isset($_POST['action']) && $_POST['action'] != 'wp_cta_get_template_meta')) {
self::$instance->template_definitions = get_transient('wp_cta_template_definitions');
if (self::$instance->template_definitions) {
return self::$instance;
}
}
self::$instance->include_template_files();
self::$instance->add_core_definitions();
self::$instance->load_definitions();
self::$instance->read_template_categories();
}
return self::$instance;
}
function include_template_files() {
$core_templates = self::$instance->get_core_templates();
foreach ($core_templates as $name) {
if ($name != ".svn" ) {
include_once(WP_CTA_PATH . "templates/$name/config.php");
}
}
$uploaded_templates = self::$instance->get_uploaded_templates();
foreach ($uploaded_templates as $name) {
if (file_exists(WP_CTA_UPLOADS_PATH . "$name/config.php")) {
include_once(WP_CTA_UPLOADS_PATH . "$name/config.php");
}
}
$included_templtes = self::$instance->get_theme_included_templates();
foreach ($included_templtes as $name) {
include_once(WP_CTA_THEME_TEMPLATES_PATH . "$name/config.php");
}
foreach ($wp_cta_data as $key => $data) {
if (isset($data['markup'])) {
$parsed = self::$instance->parse_markup($data['markup']);
$wp_cta_data[$key]['css-template'] = $parsed['css-template'];
$wp_cta_data[$key]['html-template'] = $parsed['html-template'];
}
}
self::$instance->template_definitions = $wp_cta_data;
}
function parse_markup($markup) {
if (strstr($markup, '</style>')) {
$pieces = explode('</style>', $markup);
$parsed['css-template'] = strip_tags($pieces[0]);
$parsed['html-template'] = $pieces[1];
} else {
$parsed['css-template'] = "";
$parsed['html-template'] = $markup;
}
return $parsed;
}
function get_core_templates() {
$core_templates = array();
$template_path = WP_CTA_PATH . "templates/";
$results = scandir($template_path);
foreach ($results as $name) {
if ($name === '.' or $name === '..' or $name === '__MACOSX') continue;
if (is_dir($template_path . '/' . $name)) {
$core_templates[] = $name;
}
}
return $core_templates;
}
function get_uploaded_templates() {
$uploaded_templates = array();
if (!is_dir(WP_CTA_UPLOADS_PATH)) {
wp_mkdir_p(WP_CTA_UPLOADS_PATH);
}
$templates = scandir(WP_CTA_UPLOADS_PATH);
foreach ($templates as $name) {
if ($name === '.' or $name === '..' or $name === '__MACOSX') continue;
if (is_dir(WP_CTA_UPLOADS_PATH . '/' . $name)) {
$uploaded_templates[] = $name;
}
}
return $uploaded_templates;
}
function get_theme_included_templates() {
$included_templates = array();
if (!is_dir(WP_CTA_THEME_TEMPLATES_PATH)) {
return $included_templates;
}
$templates = scandir(WP_CTA_THEME_TEMPLATES_PATH);
foreach ($templates as $name) {
if ($name === '.' or $name === '..' or $name === '__MACOSX') continue;
if (is_dir(WP_CTA_THEME_TEMPLATES_PATH . '/' . $name)) {
$included_templates[] = $name;
}
}
return $included_templates;
}
function load_definitions() {
$wp_cta_data = self::$instance->template_definitions;
self::$instance->definitions = apply_filters('wp_cta_extension_data', $wp_cta_data);
set_transient('wp_cta_extension_definitions', $wp_cta_data, 60 * 60 * 24);
}
function add_core_definitions() {
add_filter('save_post', array($this, 'store_template_data_as_transient'), 1);
add_filter('wp_cta_extension_data', array($this, 'add_default_metaboxes'), 1);
add_filter('wp_cta_extension_data', array($this, 'add_width_and_height_to_templates'), 1);
add_filter('wp_cta_extension_data', array($this, 'add_default_advanced_settings'), 1);
add_filter('wp_cta_extension_data', array($this, 'add_default_page_settings'), 1);
}
function store_template_data_as_transient($post_id) {
global $post;
if (!isset($post)) {
return;
}
if ($post->post_type == 'revision' || 'trash' == get_post_status($post_id)) {
return;
}
if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (isset($_POST['post_type']) && $_POST['post_type'] == 'revision')) {
return;
}
if ($post->post_type == 'wp-call-to-action') {
set_transient('wp_cta_template_definitions', self::$instance->template_definitions, 60 * 60 * 24);
}
}
function add_default_metaboxes($wp_cta_data) {
$parent_key = 'wp-cta';
$wp_cta_data[$parent_key]['settings'][] = array('data_type' => 'metabox', 'id' => 'selected-template', 'label' => __('Select Template', 'cta'), 'description' => __('This option provides a placeholder for the selected template data.', 'cta'), 'type' => 'radio',
'default' => 'blank-template', 'options' => null
);
return $wp_cta_data;
}
function add_default_advanced_settings($wp_cta_data) {
$parent_key = 'wp-cta';
$wp_cta_data[$parent_key]['settings']['advanced-core-options-header'] = array('datatype' => 'setting', 'region' => 'advanced', 'description' => __('<h3>CTA Settings</h3>', 'cta'), 'id' => 'advanced-core-options-header', 'type' => 'html-block');
$wp_cta_data[$parent_key]['settings']['link-open-option'] = array('data_type' => 'metabox', 'region' => 'advanced', 'label' => __('Open Links', 'cta'), 'description' => __('How do you want links on the call to action to work?', 'cta'), 'id' => 'link-open-option',
'type' => 'dropdown', 'default' => 'this_window', 'options' => array('this_window' => __('Open Links in Same Window (default)', 'cta'), 'new_tab' => __('Open Links in New Tab', 'cta')), 'context' => 'normal');
return $wp_cta_data;
}
function add_width_and_height_to_templates($wp_cta_data) {
foreach ($wp_cta_data as $key => $data) {
if (!isset($data['info']['data_type']) || $data['info']['data_type'] != 'template') {
continue;
}
$width = array('label' => __('CTA Width', 'cta'), 'description' => __('Enter the Width of the CTA in pixels. Example: 100% or 300px', 'cta'), 'id' => 'wp_cta_width', 'type' => 'width-height', 'default' => '100%', 'class' => 'cta-width', 'context' => 'priority', 'global' => true);
$height = array('label' => __('CTA Height', 'cta'), 'description' => __('Enter the Height of the CTA in pixels. Example: auto or 300px', 'cta'), 'id' => 'wp_cta_height', 'type' => 'width-height', 'default' => 'auto', 'class' => 'cta-height', 'context' => 'priority', 'global' => true);
array_unshift($wp_cta_data[$key]['settings'], $width, $height);
}
return $wp_cta_data;
}
function add_default_page_settings($wp_cta_data) {
$parent_key = 'wp-cta-controller';
$wp_cta_data[$parent_key]['settings'] = array(array('data_type' => 'setting', 'region' => 'cta-placement-controls', 'label' => __('Placement on Page', 'cta'), 'description' => __('Where would you like to insert the CTA on this page?', 'cta'), 'id' => 'cta_content_placement', 'type' => 'dropdown', 'default' => 'off', 'options' => array('below' => __('Below Content', 'cta'), 'middle' => __('Middle of Content', 'cta'), 'above' => __('Above Content', 'cta'), 'widget_1' => __('Use Dynamic Sidebar Widget', 'cta'), 'popup' => __('Popup', 'cta')), 'context' => 'normal', 'class' => 'cta-per-page-option'), array('data_type' => 'setting', 'region' => 'cta-placement-controls', 'label' => __('Sidebar Message', 'cta'), 'description' => "<div style='margin-top:10px; margin-left:10px;'><p>" . __('This option will place the selected CTA templates into the dynamic sidebar widget on this page. Make sure you have added the dynamic Call to Action widget to the sidebar of this page for this option to work.</p><p>To add the dynamic sidebar widget to this page, go into appearance > widgets and add the widget to the sidebar of your choice', 'cta') . "</p></div>", 'id' => 'sidebar_message', 'type' => 'html-block', 'default' => '', 'context' => 'normal', 'class' => '', 'reveal_on' => 'widget_1'), array('data_type' => 'setting', 'region' => 'cta-placement-controls', 'label' => __('Below Message', 'cta'), 'description' => "<div style='margin-top:10px; margin-left:10px;'><p>" . __('Your Call to Action will be inserted into the bottom of the page/post.', 'cta') . "</p></div>", 'id' => 'below_message', 'type' => 'html-block', 'default' => '', 'context' => 'normal', 'class' => '', 'reveal_on' => 'below'), array('data_type' => 'setting', 'region' => 'cta-placement-controls', 'label' => __('Above Message', 'cta'), 'description' => "<div style='margin-top:10px; margin-left:10px;'><p>" . __('Your Call to Action will be inserted into the top of the page/post.', 'cta') . "</p></div>", 'id' => 'above_message', 'type' => 'html-block', 'default' => '', 'context' => 'normal', 'class' => '', 'reveal_on' => 'above'), array('data_type' => 'setting', 'region' => 'cta-placement-controls', 'label' => __('Middle Message', 'cta'), 'description' => "<div style='margin-top:10px; margin-left:10px;'><p>" . __('Your Call to Action will be inserted into the middle of the page/post\'s content.', 'cta') . "</p></div>", 'id' => 'above_message', 'type' => 'html-block', 'default' => '', 'context' => 'normal', 'class' => '', 'reveal_on' => 'middle'),);
return $wp_cta_data;
}
function read_template_categories() {
$template_cats = array();
if (!isset(self::$instance->definitions)) {
return;
}
foreach (self::$instance->definitions as $key => $val) {
if (strstr($key, 'wp-cta') || !isset($val['info']['category'])) continue;
if (isset($val['category'])) {
$cats = $val['category'];
} else {
if (isset($val['info']['category'])) {
$cats = $val['info']['category'];
}
}
$cats = explode(',', $cats);
foreach ($cats as $cat_value) {
$cat_value = trim($cat_value);
$name = str_replace(array('-', '_'), ' ', $cat_value);
$name = ucwords($name);
if (!isset($template_cats[$cat_value])) {
$template_cats[$cat_value]['count'] = 1;
} else {
$template_cats[$cat_value]['count']++;
}
$template_cats[$cat_value]['value'] = $cat_value;
$template_cats[$cat_value]['label'] = "$name";
}
}
self::$instance->template_categories = $template_cats;
}
}
function CTA_Load_Extensions() {
return CTA_Load_Extensions::instance();
}
}