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: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434:
<?php
class CTA_Metaboxes_Global {
function __construct() {
self::load_hooks();
}
public static function load_hooks() {
add_action('add_meta_boxes', array(__CLASS__, 'load_metaboxes'));
add_action( 'save_post', array(__CLASS__, 'save_data'));
}
public static function get_excluded_post_types() {
$exclude[] = 'attachment';
$exclude[] = 'revisions';
$exclude[] = 'nav_menu_item';
$exclude[] = 'wp-lead';
$exclude[] = 'automation';
$exclude[] = 'rule';
$exclude[] = 'list';
$exclude[] = 'wp-call-to-action';
$exclude[] = 'tracking-event';
$exclude[] = 'inbound-forms';
$exclude[] = 'email-template';
$exclude[] = 'inbound-log';
$exclude[] = 'inbound-email';
$exclude[] = 'landing-page';
$exclude[] = 'edd-license';
$exclude[] = 'acf-field-group';
$exclude = apply_filters( 'cta_excluded_post_types', $exclude);
return $exclude;
}
public static function load_metaboxes() {
$post_types= get_post_types('','names');
$exclude = self::get_excluded_post_types();
foreach ($post_types as $value ) {
$priority = ($value === 'landing-page') ? 'core' : 'high';
if (!in_array($value,$exclude)) {
add_meta_box(
'wp-cta-inert-to-post',
__( 'Insert Call to Action Template into Content', 'cta'),
array(__CLASS__, 'display_cta_placement_metabox'),
$value,
'normal',
$priority
);
}
}
}
public static function display_cta_placement_metabox() {
global $post;
$args = array(
'posts_per_page' => -1,
'post_type'=> 'wp-call-to-action'
);
$cta_list = get_posts($args);
$cta_display_list = get_post_meta($post->ID ,'cta_display_list', true);
$cta_display_list = ($cta_display_list != '') ? $cta_display_list : array();
?>
<script type="text/javascript">
jQuery(document).ready(function($)
{
function format(state) {
if (!state.id) return state.text;
var href = jQuery("#cta-" + state.id).attr("href");
return state.text;
}
jQuery("#cta_template_selection").select2({
placeholder: " <?php _e( 'Select one or more calls to action to rotate through', 'inbound-pro' ); ?>",
allowClear: true,
formatResult: format,
formatSelection: format,
escapeMarkup: function(m) { return m; }
});
jQuery('select#cta_content_placement').on('change', function () {
var this_val = jQuery(this).val();
jQuery(".dynamic-visable-on").hide();
console.log(this_val);
jQuery('.reveal-' + this_val).removeClass('inbound-hidden-row').show().addClass('dynamic-visable-on');
});
var onload = jQuery('select#cta_content_placement').val();
jQuery('.reveal-' + onload).removeClass('inbound-hidden-row').show().addClass('dynamic-visable-on');
});
</script>
<style type="text/css">
.select2-container {
width: 100%;
padding-top: 15px;
}
.inbound-hidden-row {
display: none;
}
.wp-cta-option-row {
padding-top: 5px;
padding-bottom: 5px;
}
.wp_cta_label.cta-per-page-option, .wp-cta-option-area.cta-per-page-option {
display: inline-block;
}
label.cta-per-page-option {
width: 190px;
padding-left: 12px;
display: inline-block;
}
.cta-options-label {
width: 190px;
display: inline-block;
vertical-align: top;
padding-top: 20px;
}
.cta-options-row {
width: 65%;
display: inline-block;
}
.cta-select-preview-link {
font-size: 10px;
padding-left: 5px;
vertical-align: middle;
}
.select2-highlighted a.cta-select-preview-link {
color:
}
.cta-links-hidden {
display: none;
}
</style>
<div class='wp_cta_select_display'>
<div class="inside">
<div class="wp-cta-option-row">
<div class='cta-options-label'>
<label for=keyword>
<?php _e( 'Call to Action Template', 'inbound-pro' ); ?>
</label>
</div>
<div class='cta-options-row'>
<?php
foreach ( $cta_list as $cta ) {
$this_id = $cta->ID;
$this_link = get_permalink( $this_id );
$this_link = preg_replace('/\?.*/', '', $this_link); ?>
<a class='thickbox cta-links-hidden' id="cta-<?php echo $this_id;?>" href='<?php echo $this_link;?>?wp-cta-variation-id=0&inbound_popup_preview=on&post_id=<?php echo $cta->ID; ?>&TB_iframe=true&width=640&height=703'>Preview</a>
<?php } ?>
<select multiple name='cta_display_list[]' id="cta_template_selection" style=''>
<?php
foreach ( $cta_list as $cta ) {
$this_id = $cta->ID;
$this_link = get_permalink( $this_id );
$title = $cta->post_title;
$selected = (in_array($this_id, $cta_display_list)) ? " selected='selected'" : "";
echo '<option', $selected, ' value="'.$this_id.'" rel="work?" >'.$title.'</option>';
} ?>
</select><br /><span class="description"><?php _e( 'Click the above select box to select call to action templates to insert', 'inbound-pro' ); ?></span>
</div>
</div>
</div>
</div>
<?php
self::render_additional_settings();
}
public static function render_additional_settings() {
$CTAExtensions = CTA_Load_Extensions();
$extension_data = $CTAExtensions->definitions;
foreach ($extension_data['wp-cta-controller']['settings'] as $key=>$field)
{
if ( isset($field['region']) && $field['region'] =='cta-placement-controls')
{
self::render_setting($field);
}
}
}
public static function render_setting($field) {
global $post, $wpdb;
$meta = get_post_meta($post->ID, $field['id'], true);
if ( !isset( $field['default'] ) ) {
$field['default'] = '';
}
$final['value'] = (!empty($meta) || is_numeric($meta)) ? $meta : $field['default'];
$meta_class = (isset($field['class'])) ? " " . $field['class'] : '';
$dynamic_hide = (isset($field['reveal_on'])) ? ' inbound-hidden-row' : '';
$reveal_on = (isset($field['reveal_on'])) ? ' reveal-' . $field['reveal_on'] : '';
$no_label = array('html-block');
echo '<div id='.$field['id'].' class="wp-cta-option-row '.$meta_class. $dynamic_hide. $reveal_on.'">';
if (!in_array($field['type'],$no_label)) {
echo'<div class="wp_cta_label'.$meta_class. $dynamic_hide. $reveal_on.'"><label class="'.$meta_class.'" for="'.$field['id'].'">'.$field['label'].'</label></div>';
}
echo '<div class="wp-cta-option-area '.$meta_class.' field-'.$field['type'].'">';
switch($field['type']) {
case 'text':
echo '<input type="text" class="'.$meta_class.'" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$final['value'].'" size="30" />
<div class="wp_cta_tooltip" title="'.$field['description'].'"></div>';
break;
case 'colorpicker':
echo '<input type="text" class="jpicker '.$meta_class.'" style="background-color:#'.$final['value'].'" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$final['value'].'" size="5" />
<div class="wp_cta_tooltip tool_color" title="'.$field['description'].'"></div>';
break;
case 'html-block':
echo '<div class="'.$meta_class.'">'.$field['description'].'</div>';
break;
case 'dropdown':
echo '<select name="'.$field['id'].'" id="'.$field['id'].'" class="'.$meta_class.'">';
foreach ($field['options'] as $value=>$label) {
echo '<option', $final['value'] == $value ? ' selected="selected"' : '', ' value="'.$value.'">'.$label.'</option>';
}
echo '</select><div class="wp_cta_tooltip" title="'.$field['description'].'"></div>';
break;
case 'image-select':
echo '<select name="'.$field['id'].'" id="'.$field['id'].'" class="'.$meta_class.'">';
foreach ($field['options'] as $value=>$label) {
echo '<option', $final['value'] == $value ? ' selected="selected"' : '', ' value="'.$value.'">'.$label.'</option>';
}
echo '</select><br /><div class="wp-cta-image-container"></div></br><span class="description">'.$field['description'].'</span>';
break;
case 'textarea':
echo '<textarea name="'.$field['id'].'" id="'.$field['id'].'" cols="250" rows="6">'.$final['value'].'</textarea>
<br /><span class="description">'.$field['description'].'</span>';
break;
case 'checkbox':
echo '<input type="checkbox" name="'.$field['id'].'" id="'.$field['id'].'" ', $final['value'] ? ' checked="checked"' : '','/>
<label for="'.$field['id'].'">'.$field['description'].'</label>';
break;
case 'radio':
foreach ( $field['options'] as $option ) {
echo '<input type="radio" name="'.$field['id'].'" id="'.$option['value'].'" value="'.$option['value'].'" ',$final['value'] == $option['value'] ? ' checked="checked"' : '',' />
<label for="'.$option['value'].'">'.$option['label'].'</label><br />';
}
echo '<span class="description">'.$field['description'].'</span>';
break;
case 'checkbox_group':
foreach ($field['options'] as $option) {
echo '<input type="checkbox" value="'.$option['value'].'" name="'.$field['id'].'[]" id="'.$option['value'].'"',$final['value'] && in_array($option['value'], $final['value']) ? ' checked="checked"' : '',' />
<label for="'.$option['value'].'">'.$option['label'].'</label><br />';
}
echo '<span class="description">'.$field['description'].'</span>';
break;
case 'meta_vals':
$post_type = 'wp-lead';
$query = "
SELECT DISTINCT($wpdb->postmeta.meta_key)
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta
ON $wpdb->posts.ID = $wpdb->postmeta.post_id
WHERE $wpdb->posts.post_type = 'wp-lead'
AND $wpdb->postmeta.meta_key != ''
AND $wpdb->postmeta.meta_key NOT RegExp '(^[_0-9].+$)'
AND $wpdb->postmeta.meta_key NOT RegExp '(^[0-9]+$)'
";
$sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta;
$meta_keys = $wpdb->get_col($wpdb->prepare($query, $post_type));
$list = get_post_meta( $post->ID, 'wp_cta_global_bt_values', true);
echo '<select multiple name="'.$field['id'].'[]" class="inbound-multi-select" id="'.$field['id'].'">';
$nice_names = array(
"wpleads_first_name" => "First Name",
"wpleads_last_name" => "Last Name",
"wpleads_email_address" => "Email Address",
"wpleads_city" => "City",
"wpleads_areaCode" => "Area Code",
"wpleads_country_name" => "Country Name",
"wpleads_region_code" => "State Abbreviation",
"wpleads_region_name" => "State Name",
"wp_lead_status" => "Lead Status",
"events_triggered" => "Number of Events Triggered",
"lp_page_views_count" => "Page View Count",
"wpl-lead-conversion-count" => "Number of Conversions"
);
foreach ($meta_keys as $meta_key) {
if (array_key_exists($meta_key, $nice_names)) {
$label = $nice_names[$meta_key];
$selected = (in_array($meta_key, $list)) ? " selected='selected'" : "";
echo '<option', $selected, ' value="'.$meta_key.'" rel="" >'.$label.'</option>';
}
}
echo "</select><br><span class='description'>'".$field['description']."'</span>";
break;
case 'multiselect':
$selected_lists = (is_array($final['value'])) ? $final['value'] : array();
echo '<select multiple name="'.$field['id'].'[]" class="inbound-multi-select" id="'.$field['id'].'">';
foreach ($field['options'] as $id => $value) {
$selected = (in_array($id, $selected_lists)) ? " selected='selected'" : "";
echo '<option', $selected, ' value="'.$id.'" rel="" >'.$value.'</option>';
}
echo "</select><br><span class='description'>'".$field['description']."'</span>";
break;
}
echo '</div></div>';
}
public static function save_data( $post_id ) {
global $post;
if (!isset($post)){
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
return;
}
$exclude = self::get_excluded_post_types();
if (in_array($post->post_type, $exclude)) {
return;
}
$CTAExtensions = CTA_Load_Extensions();
$extension_data = $CTAExtensions->definitions;
foreach ($extension_data['wp-cta-controller']['settings'] as $key=>$field) {
( isset($field['global']) && $field['global'] ) ? $field['id'] : $field['id'] = $field['id'];
if($field['type'] == 'tax_select'){
continue;
}
$old = get_post_meta($post_id, $field['id'], true);
$new = (isset($_POST[$field['id']])) ? $_POST[$field['id']] : null;
if (isset($new) && $new != $old ) {
update_post_meta($post_id, $field['id'], $new);
} elseif ('' == $new && $old) {
delete_post_meta($post_id, $field['id'], $old);
}
}
if ( isset($_POST['cta_display_list']) ) {
update_post_meta($post_id, "cta_display_list", $_POST['cta_display_list'] );
} else {
delete_post_meta($post_id, "cta_display_list" );
}
if ( isset($_POST['cta_alignment']) ) {
update_post_meta($post_id, "cta_alignment", $_POST['cta_alignment'] );
} else {
delete_post_meta($post_id, "cta_alignment" );
}
}
}
new CTA_Metaboxes_Global;