566 lines
13 KiB
PHP
566 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Helper class of SPu for admin
|
|
*
|
|
* @package SocialPopup_Admin
|
|
* @author Damian Logghe <info@timersys.com>
|
|
*/
|
|
class Spu_Helper {
|
|
/**
|
|
* Plugin slug
|
|
* @var string
|
|
*/
|
|
protected static $plugin_slug = '';
|
|
|
|
/**
|
|
* ajax_render_operator
|
|
*
|
|
* @description creates the HTML for the field group operator metabox. Called from both Ajax and PHP
|
|
* @since 1.4.6
|
|
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
|
*/
|
|
|
|
public static function ajax_render_operator( $options = array() ) {
|
|
// defaults
|
|
$defaults = array(
|
|
'group_id' => 0,
|
|
'rule_id' => 0,
|
|
'value' => null,
|
|
'param' => null,
|
|
);
|
|
|
|
$is_ajax = false;
|
|
|
|
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
|
{
|
|
$is_ajax = true;
|
|
}
|
|
|
|
// Is AJAX call?
|
|
if( $is_ajax )
|
|
{
|
|
$options = array_merge($defaults, $_POST);
|
|
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][operator]';
|
|
}
|
|
else
|
|
{
|
|
$options = array_merge($defaults, $options);
|
|
}
|
|
// default for all rules
|
|
$choices = array(
|
|
'==' => __("is equal to", 'popups' ),
|
|
'!=' => __("is not equal to", 'popups' ),
|
|
);
|
|
if( $options['param'] == 'local_time' ) {
|
|
$choices = array(
|
|
'<' => __("less than", 'popups' ),
|
|
'>' => __("greater than", 'popups' ),
|
|
);
|
|
}
|
|
|
|
if( $options['param'] == 'date' ) {
|
|
$choices = array_merge( $choices,array(
|
|
'<' => __("less than", 'popups' ),
|
|
'>' => __("greater than", 'popups' ),
|
|
));
|
|
}
|
|
|
|
// allow custom operators
|
|
$choices = apply_filters( 'spu/metaboxes/rule_operators', $choices, $options );
|
|
|
|
self::print_select( $options, $choices );
|
|
|
|
// ajax?
|
|
if( $is_ajax )
|
|
{
|
|
die();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ajax_render_rules
|
|
*
|
|
* @description creates the HTML for the field group rules metabox. Called from both Ajax and PHP
|
|
* @since 2.0
|
|
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
|
*/
|
|
|
|
public static function ajax_render_rules( $options = array() )
|
|
{
|
|
|
|
// defaults
|
|
$defaults = array(
|
|
'group_id' => 0,
|
|
'rule_id' => 0,
|
|
'value' => null,
|
|
'param' => null,
|
|
);
|
|
|
|
$is_ajax = false;
|
|
|
|
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
|
{
|
|
$is_ajax = true;
|
|
}
|
|
|
|
// Is AJAX call?
|
|
if( $is_ajax )
|
|
{
|
|
$options = array_merge($defaults, $_POST);
|
|
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][value]';
|
|
}
|
|
else
|
|
{
|
|
$options = array_merge($defaults, $options);
|
|
}
|
|
|
|
// vars
|
|
$choices = array();
|
|
|
|
|
|
// some case's have the same outcome
|
|
if($options['param'] == "page_parent")
|
|
{
|
|
$options['param'] = "page";
|
|
}
|
|
|
|
|
|
switch($options['param'])
|
|
{
|
|
case "post_type":
|
|
|
|
// all post types except attachment
|
|
$choices = apply_filters('spu/get_post_types', array(), array('attachment') );
|
|
|
|
break;
|
|
|
|
|
|
case "page":
|
|
|
|
$post_type = 'page';
|
|
$args = array(
|
|
'posts_per_page' => -1,
|
|
'post_type' => $post_type,
|
|
'orderby' => 'menu_order title',
|
|
'order' => 'ASC',
|
|
'post_status' => 'any',
|
|
'suppress_filters' => false,
|
|
'update_post_meta_cache' => false,
|
|
);
|
|
|
|
$posts = get_posts( apply_filters('spu/rules/page_args', $args ) );
|
|
|
|
if( $posts )
|
|
{
|
|
// sort into hierachial order!
|
|
if( is_post_type_hierarchical( $post_type ) )
|
|
{
|
|
$posts = get_page_children( 0, $posts );
|
|
}
|
|
|
|
foreach( $posts as $page )
|
|
{
|
|
$title = '';
|
|
$ancestors = get_ancestors($page->ID, 'page');
|
|
if($ancestors)
|
|
{
|
|
foreach($ancestors as $a)
|
|
{
|
|
$title .= '- ';
|
|
}
|
|
}
|
|
|
|
$title .= apply_filters( 'the_title', $page->post_title, $page->ID );
|
|
|
|
|
|
// status
|
|
if($page->post_status != "publish")
|
|
{
|
|
$title .= " ($page->post_status)";
|
|
}
|
|
|
|
$choices[ $page->ID ] = $title;
|
|
|
|
}
|
|
// foreach($pages as $page)
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
case "page_type" :
|
|
|
|
$choices = array(
|
|
'all_pages' => __("All Pages", 'popups'),
|
|
'front_page' => __("Front Page", 'popups'),
|
|
'posts_page' => __("Posts Page", 'popups'),
|
|
'category_page' => __("Category Page", 'popups'),
|
|
'search_page' => __("Search Page", 'popups'),
|
|
'archive_page' => __("Archives Page", 'popups'),
|
|
'top_level' => __("Top Level Page (parent of 0)", 'popups'),
|
|
'parent' => __("Parent Page (has children)", 'popups'),
|
|
'child' => __("Child Page (has parent)", 'popups'),
|
|
);
|
|
|
|
break;
|
|
|
|
case "page_template" :
|
|
|
|
$choices = array(
|
|
'default' => __("Default Template", 'popups'),
|
|
);
|
|
|
|
$templates = get_page_templates();
|
|
foreach($templates as $k => $v)
|
|
{
|
|
$choices[$v] = $k;
|
|
}
|
|
|
|
break;
|
|
|
|
case "post" :
|
|
$post_types = apply_filters('spu/get_post_types', array());
|
|
unset( $post_types['page'], $post_types['attachment'], $post_types['revision'] , $post_types['nav_menu_item'], $post_types['spucpt'] );
|
|
if( $post_types )
|
|
{
|
|
foreach( $post_types as $post_type )
|
|
{
|
|
$args = array(
|
|
'numberposts' => '-1',
|
|
'post_type' => $post_type,
|
|
'post_status' => array('publish', 'private', 'draft', 'inherit', 'future'),
|
|
'suppress_filters' => false,
|
|
'update_post_meta_cache' => false,
|
|
'update_post_term_cache' => false,
|
|
);
|
|
$posts = get_posts(apply_filters('spu/rules/post_args', $args ));
|
|
|
|
if( $posts)
|
|
{
|
|
$choices[$post_type] = array();
|
|
|
|
foreach($posts as $post)
|
|
{
|
|
$title = apply_filters( 'the_title', $post->post_title, $post->ID );
|
|
|
|
// status
|
|
if($post->post_status != "publish")
|
|
{
|
|
$title .= " ($post->post_status)";
|
|
}
|
|
|
|
$choices[$post_type][$post->ID] = $title;
|
|
|
|
}
|
|
// foreach($posts as $post)
|
|
}
|
|
// if( $posts )
|
|
}
|
|
// foreach( $post_types as $post_type )
|
|
}
|
|
// if( $post_types )
|
|
|
|
|
|
break;
|
|
|
|
case "post_category" :
|
|
|
|
$categories = get_terms('category', array('get' => 'all', 'fields' => 'id=>name' ) );
|
|
$choices = apply_filters('spu/rules/categories', $categories );
|
|
|
|
break;
|
|
|
|
case "post_format" :
|
|
|
|
$choices = get_post_format_strings();
|
|
|
|
break;
|
|
|
|
case "post_status" :
|
|
|
|
$choices = get_post_stati();
|
|
|
|
break;
|
|
|
|
case "user_type" :
|
|
|
|
global $wp_roles;
|
|
|
|
$choices = $wp_roles->get_names();
|
|
|
|
if( is_multisite() )
|
|
{
|
|
$choices['super_admin'] = __('Super Admin');
|
|
}
|
|
|
|
break;
|
|
|
|
case "taxonomy" :
|
|
|
|
$choices = array();
|
|
$simple_value = true;
|
|
$choices = apply_filters('spu/get_taxonomies', $choices, $simple_value);
|
|
|
|
break;
|
|
|
|
case "logged_user" :
|
|
case "mobiles" :
|
|
case "tablets" :
|
|
case "desktop" :
|
|
case "crawlers" :
|
|
case "left_comment" :
|
|
case "search_engine" :
|
|
case "same_site" :
|
|
|
|
$choices = array('true' => __( 'True', 'popups' ) );
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
// allow custom rules rules
|
|
$choices = apply_filters( 'spu/rules/rule_values/' . $options['param'], $choices );
|
|
|
|
// Custom fields for rules
|
|
do_action( 'spu/rules/print_' . $options['param'] . '_field', $options, $choices );
|
|
|
|
// ajax?
|
|
if( $is_ajax )
|
|
{
|
|
die();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper function to print select fields for rules
|
|
* @since 2.0
|
|
* @param array $choices options values for select
|
|
* @param array $options array to pass group, id, rule_id etc
|
|
* @return echo the select field
|
|
*/
|
|
static function print_select( $options, $choices ) {
|
|
|
|
// value must be array
|
|
if( !is_array($options['value']) )
|
|
{
|
|
// perhaps this is a default value with new lines in it?
|
|
if( strpos($options['value'], "\n") !== false )
|
|
{
|
|
// found multiple lines, explode it
|
|
$options['value'] = explode("\n", $options['value']);
|
|
}
|
|
else
|
|
{
|
|
$options['value'] = array( $options['value'] );
|
|
}
|
|
}
|
|
|
|
|
|
// trim value
|
|
$options['value'] = array_map('trim', $options['value']);
|
|
// determin if choices are grouped (2 levels of array)
|
|
if( is_array($choices) )
|
|
{
|
|
foreach( $choices as $k => $v )
|
|
{
|
|
if( is_array($v) )
|
|
{
|
|
$optgroup = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
echo '<select id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" class="select" name="'.$options['name'].'">';
|
|
|
|
// loop through values and add them as options
|
|
if( is_array($choices) )
|
|
{
|
|
foreach( $choices as $key => $value )
|
|
{
|
|
if( isset($optgroup) )
|
|
{
|
|
// this select is grouped with optgroup
|
|
if($key != '') echo '<optgroup label="'.$key.'">';
|
|
|
|
if( is_array($value) )
|
|
{
|
|
foreach($value as $id => $label)
|
|
{
|
|
|
|
$selected = in_array($id, $options['value']) ? 'selected="selected"' : '';
|
|
|
|
echo '<option value="'.$id.'" '.$selected.'>'.$label.'</option>';
|
|
}
|
|
}
|
|
|
|
if($key != '') echo '</optgroup>';
|
|
}
|
|
else
|
|
{
|
|
$selected = in_array($key, $options['value']) ? 'selected="selected"' : '';
|
|
echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
echo '</select>';
|
|
|
|
}
|
|
|
|
/**
|
|
* Prints a text field rule
|
|
* @param $options
|
|
*/
|
|
static function print_textfield( $options ) {
|
|
echo '<input type="text" name="'.$options['name'].'" value="'.$options['value'].'" id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" />';
|
|
}
|
|
|
|
/**
|
|
* Return the box options
|
|
* @param int $id spucpt id
|
|
* @since 2.0
|
|
* @return array metadata values
|
|
*/
|
|
function get_box_options( $id )
|
|
{
|
|
$defaults = array(
|
|
'css' => array(
|
|
'bgopacity' => '0.5',
|
|
'overlay_color' => '#000',
|
|
'background_color' => '#eeeeee',
|
|
'background_opacity'=> '1',
|
|
'width' => '600px',
|
|
'padding' => '25',
|
|
'color' => '#333',
|
|
'shadow_color' => '#666',
|
|
'shadow_type' => 'outset',
|
|
'shadow_x_offset' => '0',
|
|
'shadow_y_offset' => '0',
|
|
'shadow_blur' => '10',
|
|
'shadow_spread' => '1',
|
|
'border_color' => '#eee',
|
|
'border_width' => '8',
|
|
'border_radius' => '0',
|
|
'border_type' => 'none',
|
|
'close_color' => '#666',
|
|
'close_hover_color' => '#000',
|
|
'close_size' => '30px',
|
|
'close_position' => 'top_right',
|
|
'close_shadow_color'=> '#fff',
|
|
'position' => 'centered',
|
|
),
|
|
'trigger' => 'seconds',
|
|
'trigger_number' => '5',
|
|
'animation' => 'fade',
|
|
'duration-convert-cookie' => '999',
|
|
'type-convert-cookie' => 'd',
|
|
'duration-close-cookie' => '30',
|
|
'type-close-cookie' => 'd',
|
|
'name-convert-cookie' => 'spu_conversion',
|
|
'name-close-cookie' => 'spu_closing',
|
|
'auto_hide' => 0,
|
|
'test_mode' => 0,
|
|
'conversion_close' => '1',
|
|
'powered_link' => '0',
|
|
);
|
|
|
|
$opts = apply_filters( 'spu/metaboxes/box_options', get_post_meta( $id, 'spu_options', true ), $id );
|
|
|
|
$opts = wp_parse_args( $opts, apply_filters( 'spu/metaboxes/default_options', $defaults ) );
|
|
// we added new rules as we can't merge recursively, so manual check them
|
|
foreach ( $defaults['css'] as $key => $value ) {
|
|
if( ! isset($opts['css'][$key] ) )
|
|
$opts['css'][$key] = $value;
|
|
}
|
|
|
|
return $opts;
|
|
}
|
|
|
|
/**
|
|
* Return the box rules
|
|
* @param int $id spucpt id
|
|
* @since 2.0
|
|
* @return array metadata values
|
|
*/
|
|
function get_box_rules( $id )
|
|
{
|
|
$defaults = array(
|
|
// group_0
|
|
array(
|
|
|
|
// rule_0
|
|
array(
|
|
'param' => 'page_type',
|
|
'operator' => '==',
|
|
'value' => 'all_pages',
|
|
'order_no' => 0,
|
|
'group_no' => 0
|
|
)
|
|
)
|
|
);
|
|
|
|
$rules = get_post_meta( $id, 'spu_rules', true );
|
|
|
|
if( empty( $rules ) ) {
|
|
|
|
return apply_filters( 'spu/metaboxes/default_rules', $defaults );
|
|
|
|
} else {
|
|
|
|
return $rules;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Simple HEX TO RGBA converter
|
|
* @param $color
|
|
* @param bool $opacity
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function hex2rgba($color, $opacity = false) {
|
|
|
|
$default = 'rgb(0,0,0)';
|
|
|
|
//Return default if no color provided
|
|
if(empty($color))
|
|
return $default;
|
|
|
|
//Sanitize $color if "#" is provided
|
|
if ($color[0] == '#' ) {
|
|
$color = substr( $color, 1 );
|
|
}
|
|
|
|
//Check if color has 6 or 3 characters and get values
|
|
if (strlen($color) == 6) {
|
|
$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
|
|
} elseif ( strlen( $color ) == 3 ) {
|
|
$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
|
|
} else {
|
|
return $default;
|
|
}
|
|
|
|
//Convert hexadec to rgb
|
|
$rgb = array_map('hexdec', $hex);
|
|
|
|
//Check if opacity is set(rgba or rgb)
|
|
if($opacity){
|
|
if(abs($opacity) > 1)
|
|
$opacity = 1.0;
|
|
$output = 'rgba('.implode(",",$rgb).','.$opacity.')';
|
|
} else {
|
|
$output = 'rgb('.implode(",",$rgb).')';
|
|
}
|
|
|
|
//Return rgb(a) color string
|
|
return $output;
|
|
}
|
|
}
|