Your IP : 3.138.138.87


Current Path : /home/church/www/wp-content/plugins/dynamic-widgets/
Upload File :
Current File : /home/church/www/wp-content/plugins/dynamic-widgets/dynwid_admin_save.php

<?php
	/**
	 * dynwid_admin_save.php - Saving options to the database
	 *
	 * @copyright 2011 Jacco Drabbe
	 */

	defined('ABSPATH') or die("No script kiddies please!");

	// Security - nonce, etc.
	$widget_id = ( isset($_POST['widget_id']) && ! empty($_POST['widget_id']) ) ? esc_attr($_POST['widget_id']) : '';
	$returnurl = ( isset($_POST['returnurl']) && ! empty($_POST['returnurl']) ) ? esc_url($_POST['returnurl']) : '';

	// In some cases $widget_id appears not to be global (anymore)
	$GLOBALS['widget_id'] = $widget_id;

	check_admin_referer('plugin-name-action_edit_' . $widget_id);
	if ( !array_key_exists($widget_id, $DW->registered_widgets) ) {
		wp_die('WidgetID is not valid');
	}

	/* Checking basic stuff */
	$DW->registerOverrulers();
	foreach ( $DW->overrule_maintype as $o ) {
		if ( $o != 'date' && $o != 'url' ) {
			$act_field = $o . '_act';
			if ( isset($_POST[$act_field]) ) {
				if ( $_POST[$o] == 'no' && is_array($_POST[$act_field]) && count($_POST[$act_field]) == 0 ) {
					wp_redirect($_SERVER['REQUEST_URI'] . '&work=none');
					die();
				}
			}
		}
	}

	// Date check
	if ( $_POST['date'] == 'no' ) {
		$date_start = trim(esc_attr($_POST['date_start']));
		$date_end = trim(esc_attr($_POST['date_end']));

		if ( ! preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $date_start) && ! preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $date_end) ) {
			wp_redirect($_SERVER['REQUEST_URI'] . '&work=none');
			die();
		}

		if ( ! empty($date_start) ) {
			@list($date_start_year, $date_start_month, $date_start_day) = explode('-', $date_start);
			if ( !checkdate($date_start_month, $date_start_day, $date_start_year) ) {
				unset($date_start);
			}
		}
		if ( ! empty($date_end) ) {
			@list($date_end_year, $date_end_month, $date_end_day) = explode('-', $date_end);
			if ( !checkdate($date_end_month, $date_end_day, $date_end_year) ) {
				unset($date_end);
			}
		}

		if ( ! empty($date_start) && ! empty($date_end) ) {
			if ( mktime(0, 0, 0, $date_start_month, $date_start_day, $date_start_year) > mktime(0, 0, 0, $date_end_month, $date_end_day, $date_end_year) ) {
				wp_redirect($_SERVER['REQUEST_URI'] . '&work=nonedate');
				die();
			}
		}
	}

	// URL
	if ( $_POST['url'] == 'no' && empty($_POST['url_value']) ) {
		wp_redirect($_SERVER['REQUEST_URI'] . '&work=none');
		die();
	}

	// Domain
	if ( $_POST['domain'] == 'no' && empty($_POST['domain_value']) ) {
		wp_redirect($_SERVER['REQUEST_URI'] . '&work=none');
		die();
	}

	// IP
	if ( $_POST['ip'] == 'no' && empty($_POST['ip_value']) ) {
		wp_redirect($_SERVER['REQUEST_URI'] . '&work=none');
		die();
	}

	// Removing already set options, but keeping individual rules
	$dbtable = $GLOBALS['wpdb']->prefix . DW_DB_TABLE;
	$query = "SELECT COUNT(1) AS total FROM " . $dbtable . " WHERE widget_id = '" . $widget_id . "' AND maintype = 'individual'";
	$count = $GLOBALS['wpdb']->get_var($query);

	if ( $count > 0 && isset($_POST['individual']) && $_POST['individual'] == '1' ) {
		$post_types = ( is_array($_POST['post_types']) ) ? $_POST['post_types'] : array();
		$post_types = array_merge(array( 'single_post', 'single_tag' ), $post_types);

		foreach ( $post_types as $t ) {
			$maintype = ( !preg_match('/^single/', $t) ) ? $t . '-post' : $t;

			$query = "SELECT name FROM " . $dbtable . " WHERE widget_id = '" . $widget_id . "' AND maintype = '" . $maintype . "'";
			$results = $GLOBALS['wpdb']->get_results($query);

			foreach ( $results as $row ) {
				if ( is_numeric($row->name) ) {
					$a = $maintype . '_act';

					if ( !is_array($_POST[$a]) ) {
						$_POST[$a] = array();
					}

					$_POST[$a][] = $row->name;
				}
			}

		}

	}

	$DW->resetOptions($widget_id);

	// Role
	DWModule::save('role', 'complex');

	// Date
	if ( $_POST['date'] == 'no' ) {
		$dates = array();
		if ( preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $date_start) ) {
			$dates['date_start'] = $date_start;
		}
		if ( preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/', $date_end) ) {
			$dates['date_end'] = $date_end;
		}

		if ( count($dates) > 0 ) {
			$DW->addDate($widget_id, $dates);
		}
	}

	// Day
	DWModule::save('day', 'complex');

	// Week
	DWModule::save('week', 'complex');

	// Browser
	DWModule::save('browser', 'complex');

	// Device
	DWModule::save('device', 'complex');

	// Template
	DWModule::save('tpl', 'complex');

	// URL
	if ( ! empty($_POST['url_value']) ) {
		$urls = array();

		$url_values = trim($_POST['url_value']);
		$url_values = str_replace("\r", "", $url_values);
		$url_values = explode("\n", $url_values);

		foreach ( $url_values as $url ) {
			$url = trim($url);
			if ( ! empty($url) ) {
				$urls[] = $url;
			}
		}

		if ( count($urls) > 0 ) {
			$DW->addUrls($widget_id, $_POST['url'], $urls);
		}
	}

	// URL
	if ( ! empty($_POST['domain_value']) ) {
		$domains = array();

		$domain_values = trim($_POST['domain_value']);
		$domain_values = str_replace("\r", "", $domain_values);
		$domain_values = explode("\n", $domain_values);

		foreach ( $domain_values as $domain ) {
			$url = trim($domain);
			if ( ! empty($domain) ) {
				$domains[] = $domain;
			}
		}

		if ( count($domains) > 0 ) {
			$DW->addDomains($widget_id, $_POST['domain'], $domains);
		}
	}

	// IP
	if ( ! empty($_POST['ip_value']) ) {
		$ips = array();

		$ip_values = trim($_POST['ip_value']);
		$ip_values = str_replace("\r", "", $ip_values);
		$ip_values = explode("\n", $ip_values);

		foreach ( $ip_values as $ip ) {
			$ip = trim($ip);
			if ( ! empty($ip) ) {
				$ips[] = $ip;
			}
		}

		if ( count($ips) > 0 ) {
			$DW->addIPs($widget_id, $_POST['ip'], $ips);
		}
	}

	// Featured Image
	DWModule::save('fimage');

	// Shortcode
	if ( ! empty($_POST['shortcode_value']) ) {
		$value = sanitize_text_field($_POST['shortcode_value']);
		if ( ! empty($value) && substr($value, 0, 1) !== '[' && substr($value, strlen($value) - 1) !== ']' ) {
			$value = '[' . $value . ']';
		}

		$match = sanitize_text_field($_POST['shortcode_match']);
		$operator = $_POST['shortcode_operator'];
		if ( !in_array($operator, array( '=', '!=' )) ) {
			$operator = '=';
		}

		if ( ! empty($value) ) {
			$DW->addShortcode($widget_id, $_POST['shortcode'], $value, $match, $operator);
		}
	}

	// Front Page
	DWModule::save('front-page', 'complex');

	// Single Post
	DWModule::save('single');

	// -- Post Taxonomies
	if ( isset($_POST['single_tax_list']) && is_array($_POST['single_tax_list']) && count($_POST['single_tax_list']) > 0 ) {
		foreach ( $_POST['single_tax_list'] as $tax ) {
			$tax = sanitize_text_field($tax);
			$act_tax_field = $tax . '_act';
			// if ( isset($_POST[$act_tax_field]) && count($_POST[$act_tax_field]) > 0 ) {
			if ( isset($_POST[$act_tax_field]) && !empty($_POST[$act_tax_field]) ) {
				if ( substr($_POST[$act_tax_field], 0, 1) == ',' ) {
					$_POST[$act_tax_field] = substr($_POST[$act_tax_field], 1);
				}
				$t = explode(',', $_POST[$act_tax_field]);
				$t = array_unique($t);

				$DW->addMultiOption($widget_id, $tax, $_POST['single'], $t);
			}

			// ---- Childs >> Can't use DWModule::childSave() cause of $name != $tax, but $name == 'post'
			$act_tax_childs_field = $tax . '_childs_act';
			// if ( isset($_POST[$act_tax_field]) && count($_POST[$act_tax_field]) > 0 && isset($_POST[$act_tax_childs_field]) && count($_POST[$act_tax_childs_field]) > 0 ) {
			if ( isset($_POST[$act_tax_field]) && ! empty($_POST[$act_tax_field]) && isset($_POST[$act_tax_childs_field]) && ! empty($_POST[$act_tax_childs_field]) ) {
				if ( substr($_POST[$act_tax_childs_field], 0, 1) == ',' ) {
					$_POST[$act_tax_childs_field] = substr($_POST[$act_tax_childs_field], 1);
				}
				$t_childs = explode(',', $_POST[$act_tax_childs_field]);
				$t_childs = array_unique($t_childs);

				$DW->addChilds($widget_id, $tax . '-childs', $_POST['single'], $t, $t_childs);
			}
		}
	}

	// -- Author
	if ( isset($_POST['single_author_act']) && is_array($_POST['single_author_act']) && count($_POST['single_author_act']) > 0 ) {
		if ( $_POST['single'] == 'yes' ) {
			$DW->addSingleOption($widget_id, 'single', '1');
		}
		$DW->addMultiOption($widget_id, 'single-author', $_POST['single'], $_POST['single_author_act']);
	}

	// -- Category
	if ( isset($_POST['single_category_act']) && is_array($_POST['single_category_act']) && count($_POST['single_category_act']) > 0 ) {
		if ( $_POST['single'] == 'yes' && isset($_POST['single_author_act']) && count($_POST['single_author_act']) == 0 ) {
			$DW->addSingleOption($widget_id, 'single', '1');
		}
		$DW->addMultiOption($widget_id, 'single-category', $_POST['single'], $_POST['single_category_act']);
	}

	// ---- Childs
	if ( isset($_POST['single_category_act']) && is_array($_POST['single_category_act']) && count($_POST['single_category_act']) > 0 && isset($_POST['single_category_childs_act']) && is_array($_POST['single_category_childs_act']) && count($_POST['single_category_childs_act']) > 0 ) {
		$DW->addChilds($widget_id, 'single-category-childs', $_POST['single'], $_POST['single_category_act'], $_POST['single_category_childs_act']);
	}

	// -- Individual / Posts / Tag
	if ( isset($_POST['individual']) && $_POST['individual'] == '1' ) {
		$DW->addSingleOption($widget_id, 'individual', '1');
		if ( isset($_POST['single_post_act']) && is_array($_POST['single_post_act']) && count($_POST['single_post_act']) > 0 ) {
			$DW->addMultiOption($widget_id, 'single-post', $_POST['single'], $_POST['single_post_act']);
		}
		if ( isset($_POST['single_tag_act']) && is_array($_POST['single_tag_act']) && count($_POST['single_tag_act']) > 0 ) {
			$DW->addMultiOption($widget_id, 'single-tag', $_POST['single'], $_POST['single_tag_act']);
		}
	}

	// Attachment
	DWModule::save('attachment');

	// Pages
	// Go through the page_tax_list - Workaround as for some reason get_object_taxonomies() is not always filled
	$page_taxonomy = FALSE;
	$page_tax_list = array();
	if ( isset($_POST['page_tax_list']) && is_array($_POST['page_tax_list']) && count($_POST['page_tax_list']) > 0 ) {
		foreach ( $_POST['page_tax_list'] as $tax ) {
			$tax = sanitize_text_field($tax);
			$act_tax_field = $tax . '_act';
			if ( isset($_POST[$act_tax_field]) && is_array($_POST[$act_tax_field]) && count($_POST[$act_tax_field]) > 0 ) {
				$page_taxonomy = TRUE;
				break;
			}
		}
	}

	if ( ( isset($_POST['page_act']) && is_array($_POST['page_act']) && count($_POST['page_act']) > 0 ) || $page_taxonomy ) {
		// When $page_taxonomy = TRUE
		if ( !isset($_POST['page_act']) ) {
			$_POST['page_act'] = array();
		}

		$DW->addMultiOption($widget_id, 'page', $_POST['pg'], $_POST['page_act']);
	} else if ( $_POST['pg'] == 'no' ) {
		$DW->addSingleOption($widget_id, 'page');
	}

	// -- Childs
	DWModule::childSave('page');

	// -- Page Taxonomies
	if ( isset($_POST['page_tax_list']) && is_array($_POST['page_tax_list']) && count($_POST['page_tax_list']) > 0 ) {
		foreach ( $_POST['page_tax_list'] as $tax ) {
			$tax = sanitize_text_field($tax);

			$act_tax_field = $tax . '_act';
			if ( isset($_POST[$act_tax_field]) && ! empty($_POST[$act_tax_field]) ) {

				if ( substr($_POST[$act_tax_field], 0, 1) == ',' ) {
					$_POST[$act_tax_field] = substr($_POST[$act_tax_field], 1);
				}
				$t = explode(',', $_POST[$act_tax_field]);
				$t = array_unique($t);

				$DW->addMultiOption($widget_id, $tax, $_POST['page'], $t);
			}

			// ---- Childs >> Can't use DWModule::childSave() cause of $name != $tax, but $name == 'page'
			$act_tax_childs_field = $tax . '_childs_act';
			if ( isset($_POST[$act_tax_field]) && ! empty($_POST[$act_tax_field]) && isset($_POST[$act_tax_childs_field]) && !empty($_POST[$act_tax_childs_field]) ) {

				if ( substr($_POST[$act_tax_childs_field], 0, 1) == ',' ) {
					$_POST[$act_tax_childs_field] = substr($_POST[$act_tax_childs_field], 1);
				}
				$t_childs = explode(',', $_POST[$act_tax_childs_field]);
				$t_childs = array_unique($t_childs);

				$DW->addChilds($widget_id, $tax . '-childs', $_POST['page'], $t, $t_childs);
			}
		}
	}

	// Author
	DWModule::save('author', 'complex');

	// Categories
	DWModule::save('category', 'complex');
	DWModule::childSave('category');      // -- Childs

	// Tags
	DWModule::save('tag', 'complex');

	// Archive
	DWModule::save('archive');

	// Error 404
	DWModule::save('e404');

	// Search
	DWModule::save('search');

	// Custom Types
	if ( isset($_POST['post_types']) ) {
		foreach ( $_POST['post_types'] as $type ) {
			$type = sanitize_text_field($type);

			if ( isset($_POST['individual']) && sanitize_text_field($_POST['individual']) == '1' ) {
				if ( isset($_POST[$type . '-post_act']) && is_array($_POST[$type . '-post_act']) && count($_POST[$type . '-post_act']) > 0 ) {
					$DW->addMultiOption($widget_id, $type . '-post', $_POST[$type], $_POST[$type . '-post_act']);
				}
			}

			// Check taxonomies
			$taxonomy = FALSE;

			// Go through the tax_list - Workaround as for some reason get_object_taxonomies() is not always filled
			$tax_list = array();
			$len = strlen($type);
			if ( isset($_POST['tax_list']) && is_array($_POST['tax_list']) && count($_POST['tax_list']) > 0 ) {
				foreach ( $_POST['tax_list'] as $tl ) {
					$tl = sanitize_text_field($tl);

					if ( substr($tl, 0, $len) == $type ) {
						$tax_list[] = $tl;
					}
				}
			}

			foreach ( $tax_list as $tax ) {
				$act_tax_field = $tax . '_act';
				if ( isset($_POST[$act_tax_field]) && is_array($_POST[$act_tax_field]) && count($_POST[$act_tax_field]) > 0 ) {
					$taxonomy = TRUE;
					break;
				}
			}

			$act_field = $type . '_act';
			if ( ( isset($_POST[$act_field]) && is_array($_POST[$act_tax_field]) && count($_POST[$act_field]) > 0 ) || $taxonomy ) {
				// When taxonomy = TRUE
				if ( !isset($_POST[$act_field]) ) {
					$_POST[$act_field] = array();
				}

				$DW->addMultiOption($widget_id, $type, $_POST[$type], $_POST[$act_field]);
			} else if ( $_POST[$type] == 'no' ) {
				$DW->addSingleOption($widget_id, $type);
			}

			// -- Childs
			DWModule::childSave($type);

			// -- Taxonomies
			foreach ( $tax_list as $tax ) {
				$act_tax_field = $tax . '_act';
				if ( isset($_POST[$act_tax_field]) && ! empty($_POST[$act_tax_field]) ) {

					if ( substr($_POST[$act_tax_field], 0, 1) == ',' ) {
						$_POST[$act_tax_field] = substr($_POST[$act_tax_field], 1);
					}
					$t = explode(',', $_POST[$act_tax_field]);
					$t = array_unique($t);

					$DW->addMultiOption($widget_id, $tax, $_POST[$type], $t);
				}

				// ---- Childs >> Can't use DWModule::childSave() cause of $name != $tax, but $name == $type
				$act_tax_childs_field = $tax . '_childs_act';
				if ( isset($_POST[$act_tax_field]) && ! empty($_POST[$act_tax_field]) && isset($_POST[$act_tax_childs_field]) && !empty($_POST[$act_tax_childs_field]) ) {

					if ( substr($_POST[$act_tax_childs_field], 0, 1) == ',' ) {
						$_POST[$act_tax_childs_field] = substr($_POST[$act_tax_childs_field], 1);
					}
					$t_childs = explode(',', $_POST[$act_tax_childs_field]);
					$t_childs = array_unique($t_childs);

					$DW->addChilds($widget_id, $tax . '-childs', $_POST[$type], $t, $t_childs);
				}
			}
		}

		DWModule::save('cp_archive', 'complex');
	}

	// Custom Taxonomies
	if ( isset($_POST['dw_taxonomy']) ) {
		foreach ( $_POST['dw_taxonomy'] as $tax ) {
			$type = 'tax_' . $tax;
			$act_field = $type . '_act';
			if ( isset($_POST[$act_field]) && ! empty($_POST[$act_field]) ) {
				/*				if (! is_array($_POST[$act_field]) ) {
									$_POST[$act_field] = array();
								} */

				if ( substr($_POST[$act_field], 0, 1) == ',' ) {
					$_POST[$act_field] = substr($_POST[$act_field], 1);
				}
				$t = explode(',', $_POST[$act_field]);
				$t = array_unique($t);

				$DW->addMultiOption($widget_id, $type, $_POST[$type], $t);
			} else if ( $_POST[$type] == 'no' ) {
				$DW->addSingleOption($widget_id, $type);
			}

			DWModule::childSave($type);
		}
	}

	// WPML PLugin support
	DWModule::save('wpml', 'complex');

	// QTranslate Plugin support
	// DWModule::save('qt', 'complex');

	// WPSC/WPEC Plugin support
	DWModule::save('wpsc', 'complex');

	// bbPress Plugin support
	DWModule::save('bbp_profile', 'simple');

	// BP Plugin support
	DWModule::save('bp', 'complex');

	// BP Plugin support (Groups)
	DWModule::save('bp-group', 'complex');

	// Pods Plugin support
	DWModule::save('pods', 'complex');

	// Redirect to ReturnURL
	if ( ! empty($returnurl) ) {
		$q = array();

		// Checking if there are arguments set
		$pos = strpos($returnurl, '?');
		if ( $pos !== FALSE ) {
			// evaluate the args
			$query_string = substr($returnurl, ( $pos + 1 ));
			$args = explode('&', $query_string);
			foreach ( $args as $arg ) {
				@list($name, $value) = explode('=', $arg);
				if ( $name != 'dynwid_save' && $name != 'widget_id' ) {
					$q[] = $name . '=' . $value;
				}
			}
			$script_url = substr($returnurl, 0, $pos);
		} else {
			$script_url = $returnurl;
		}
		$q[] = 'dynwid_save=yes';
		$q[] = 'widget_id=' . $widget_id;

		wp_redirect($script_url . '?' . implode('&', $q));
		die();
	}
?>