403Webshell
Server IP : 195.130.67.5  /  Your IP : 216.73.217.154
Web Server : Microsoft-IIS/10.0
System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586
User : IUSR ( 0)
PHP Version : 7.4.19
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Old Sites/repository/wp-content/plugins/yop-poll/admin/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Old Sites/repository/wp-content/plugins/yop-poll/admin/models/polls.php
<?php
class YOP_Poll_Polls {
	private static $errors_present = false,
			$error_text,
			$text_size_allowed = array( 'small', 'medium', 'large' ),
			$yes_no_allowed = array( 'yes', 'no' ),
			$answers_display_allowed = array( 'vertical', 'horizontal', 'columns' ),
			$date_values_allowed = array( 'now', 'custom', 'never', 'custom-date' ),
			$reset_stats_allowed = array( 'hours', 'days' ),
			$show_results_allowed = array( 'before-vote', 'after-vote', 'after-end-date', 'never', 'custom-date' ),
			$show_results_to_allowed = array( 'guest', 'registered' ),
			$sort_results_allowed = array( 'as-defined', 'alphabetical', 'number-of-votes' ),
			$sort_results_rule_allowed = array( 'asc', 'desc' ),
			$display_results_as_allowed = array( 'bar', 'pie' ),
			$vote_permissions_allowed = array( 'guest', 'wordpress', 'facebook', 'google' ),
			$block_voters_allowed = array( 'no-block', 'by-cookie', 'by-ip', 'by-user-id' ),
			$block_voters_period_allowed = array( 'minutes', 'hours', 'days' ),
			$sort_order_allowed = array( 'asc', 'desc' ),
			$order_by_allowed = array( 'id', 'name', 'status', 'total_submits', 'author', 'sdate', 'edate' ),
			$ends_soon_interval = 10,
			$polls_per_page = 10;
	public static function get_text_sizes() {
		return self::$text_size_allowed;
	}
	public static function get_owner( $poll_id ) {
		$query = $GLOBALS['wpdb']->prepare(
			"SELECT * FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `id` = %s", $poll_id
		);
		$poll = $GLOBALS['wpdb']->get_row( $query, OBJECT );
		if( null !== $poll ){
			return $poll->author;
		} else {
			return false;
		}
	}
	public static function paginate( $params ) {
		$return_data = array();
		$total_pages = 0;
		$total_polls = 0;
		$current_user = wp_get_current_user();
		if ( current_user_can( 'yop_poll_results_others' ) ) {
			$query = "SELECT COUNT(*) FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` != 'deleted'";
			if ( isset( $params['q'] ) && ( '' !== $params['q'] ) ) {
				$params['q'] = "'" . '%' . esc_sql( $GLOBALS['wpdb']->esc_like( $params['q'] ) ) . '%' . "'";
				$query .= " AND `name` LIKE {$params['q']}";
			}
		} else if ( current_user_can( 'yop_poll_results_own' ) ) {
			$query = "SELECT COUNT(*) FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE
						`author` = '" . $current_user->ID . "'
						AND `status` !='deleted'";
			if ( isset( $params['q'] ) && ( '' !== $params['q'] ) ) {
				$params['q'] = "'" . '%' . esc_sql( $GLOBALS['wpdb']->esc_like( $params['q'] ) ) . '%' . "'";
				$query .= " AND `name` LIKE {$params['q']}";
			}
		}
		if ( '' !== $query ) {
			$total_polls = $GLOBALS['wpdb']->get_var( $query );
		}
		if ( 0 < $total_polls ) {
			if ( $total_polls <= self::$polls_per_page ) {
				$data['pagination'] = '';
				$page = 1;
				$total_pages = 1;
			} else {
				$total_pages = intval( ceil( $total_polls / self::$polls_per_page ) );
			}
		} else {
			$data['pagination'] = '';
		}
		if ( 1 < $total_pages ){
			$pagination['first_page'] = '<span class="tablenav-pages-navspan" aria-hidden="true">
							«
						  </span>';
			$pagination['previous_page'] = '<span class="screen-reader-text">
								' . __( 'Previous page', 'yop-poll' ) . '
							</span>
							<span class="tablenav-pages-navspan" aria-hidden="true">
								‹
							</span>';
			$pagination['next_page'] = '<span class="screen-reader-text">' . __( 'Next page', 'yop-poll' ) . '
							</span>
							<span aria-hidden="true">›</span>';
			$pagination['last_page'] = '<span class="tablenav-pages-navspan" aria-hidden="true">
							»
							</span>';
			if ( 1 === intval( $params['page_no'] ) ) {
				//we're on the first page.
				$links['next_page'] = esc_url(
						add_query_arg(
							array(
								'action' => false,
								'poll_id' => false,
								'_token' => false,
								'order_by' => $params['order_by'],
								'sort_order' => $params['sort_order'],
								'q' => htmlentities( $params['q'] ),
								'page_no' => $params['page_no']+1
							)
						)
					);
				$pagination['next_page'] = "<a
										class=\"next-page\"
										href=\"{$links['next_page']}\">{$pagination['next_page']}</a>";
				if ( 2 < intval( $total_pages ) ) {
					$links['last_page'] = esc_url(
							add_query_arg(
								array(
									'action' => false,
									'poll_id' => false,
									'_token' => false,
									'order_by' => $params['order_by'],
									'sort_order' => $params['sort_order'],
									'q' => htmlentities( $params['q'] ),
									'page_no' => intval( $total_pages )
								)
							)
						);
					$pagination['last_page'] = "<a
												class=\"last-page\"
												href=\"{$links['last_page']}\">{$pagination['last_page']}</a>";
				}
			} else if ( intval( $params['page_no'] ) === intval( $total_pages ) ) {
				//we're on the last page
				$links['previous_page'] = esc_url(
						add_query_arg(
							array(
								'action' => false,
								'poll_id' => false,
								'_token' => false,
								'order_by' => $params['order_by'],
								'sort_order' => $params['sort_order'],
								'q' => htmlentities( $params['q'] ),
								'page_no' => $params['page_no']-1
							)
						)
					);
				$pagination['previous_page'] = "<a
											class=\"prev-page\"
											href=\"{$links['previous_page']}\">{$pagination['previous_page']}</a>";
				if ( 2 < intval( $total_pages ) ) {
					$links['first_page'] = esc_url(
							add_query_arg(
								array(
									'action' => false,
									'poll_id' => false,
									'_token' => false,
									'order_by' => $params['order_by'],
									'sort_order' => $params['sort_order'],
									'q' => htmlentities( $params['q'] ),
									'page_no' => 1
								)
							)
						);
					$pagination['first_page'] = "<a
												class=\"first-page\"
												href=\"{$links['first_page']}\">{$pagination['first_page']}</a>";
				}
			} else {
				//we're on an intermediary page
				$links['previous_page'] = esc_url(
						add_query_arg(
							array(
								'action' => false,
								'poll_id' => false,
								'_token' => false,
								'order_by' => $params['order_by'],
								'sort_order' => $params['sort_order'],
								'q' => htmlentities( $params['q'] ),
								'page_no' => $params['page_no']-1
							)
						)
					);
				$links['next_page'] = esc_url(
						add_query_arg(
							array(
								'action' => false,
								'poll_id' => false,
								'_token' => false,
								'order_by' => $params['order_by'],
								'sort_order' => $params['sort_order'],
								'q' => htmlentities( $params['q'] ),
								'page_no' => $params['page_no']+1
							)
						)
					);
				$pagination['previous_page'] = "<a
											class=\"prev-page\"
											href=\"{$links['previous_page']}\">{$pagination['previous_page']}</a>";
				$pagination['next_page'] = "<a
											class=\"prev-page\"
											href=\"{$links['next_page']}\">{$pagination['next_page']}</a>";
				if ( 2 < intval( $params['page_no'] ) ) {
					$links['first_page'] = esc_url(
							add_query_arg(
								array(
									'action' => false,
									'poll_id' => false,
									'_token' => false,
									'order_by' => $params['order_by'],
									'sort_order' => $params['sort_order'],
									'q' => htmlentities( $params['q'] ),
									'page_no' => 1
								)
							)
						);
					$pagination['first_page'] = "<a
												class=\"first-page\"
												href=\"{$links['first_page']}\">{$pagination['first_page']}</a>";
				}
				if ( ( intval( $params['page_no'] + 2 ) ) <= $total_pages ) {
					$links['last_page'] = esc_url(
							add_query_arg(
								array(
									'action' => false,
									'poll_id' => false,
									'_token' => false,
									'order_by' => $params['order_by'],
									'sort_order' => $params['sort_order'],
									'q' => htmlentities( $params['q'] ),
									'page_no' => intval( $total_pages )
								)
							)
						);
					$pagination['last_page'] = "<a
												class=\"last-page\"
												href=\"{$links['last_page']}\">{$pagination['last_page']}</a>";
				}
			}
		} else {
			$pagination['first_page'] = '';
			$pagination['previous_page'] = '';
			$pagination['next_page'] = '';
			$pagination['last_page'] = '';
		}
		return array(
			'total_polls' => $total_polls,
			'total_pages' => $total_pages,
			'pagination' => $pagination
		);
	}
	public static function get_polls( $params ) {
		$query = '';
		$polls = '';
		$statistics = array(
			'published' => 0,
			'draft' => 0,
			'archived' => 0,
			'ending-soon' => 0,
			'ended' => 0
		);
		$current_user = wp_get_current_user();
		if ( 0 >= intval( $params['page_no'] ) ) {
			$params['page_no'] = 1;
		}
		$pagination = self::paginate( $params );
		if ( !in_array( $params['sort_order'], self::$sort_order_allowed ) ) {
			$params['sort_order'] = SORT_ASC;
		} elseif ( 'desc' === $params['sort_order'] ) {
			$params['sort_order'] = SORT_DESC;
		} else{
			$params['sort_order'] = SORT_ASC;
		}
		if ( !in_array( $params['order_by'], self::$order_by_allowed ) ) {
			$params['order_by'] = 'id';
		}
		if ( $params['page_no'] > $pagination['total_pages']) {
			$params['page_no'] = 1;
		}
		$limit = self::$polls_per_page * ( $params['page_no'] - 1 );
		$limit_query = " LIMIT {$limit}, ". self::$polls_per_page;
		if ( current_user_can( 'yop_poll_results_others' ) ) {
			$query = "SELECT * FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` != 'deleted'";
			if ( isset( $params['q'] ) && ( '' !== $params['q'] ) ) {
				$params['q'] = "'" . '%' . esc_sql( $GLOBALS['wpdb']->esc_like( $params['q'] ) ) . '%' . "'";
				$query .= " AND `name` LIKE {$params['q']} ORDER BY `id` DESC";
			} else {
				$query .= " ORDER BY `id` DESC";
			}
		} else if ( current_user_can( 'yop_poll_results_own' ) ) {
			$query = "SELECT * FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `author` = '" . $current_user->ID . "'
					AND `status` != 'deleted'";
			if ( isset( $params['q'] ) && ( '' !== $params['q'] ) ) {
				$params['q'] = "'" . '%' . esc_sql( $GLOBALS['wpdb']->esc_like( $params['q'] ) ) . '%' . "'";
				$query .= " AND `name` LIKE {$params['q']} ORDER BY `id` DESC";
			} else {
				$query .= " ORDER BY `id` DESC";
			}
		}
		if ( '' !== $query ) {
			$query .= $limit_query;
			$polls = $GLOBALS['wpdb']->get_results( $query, ARRAY_A );
		}
		foreach( $polls as &$poll ) {
			$statistics[$poll['status']]++;
			if ( true === self::is_ended( $poll, false ) ) {
				$poll['status'] = 'ended';
				$statistics['ended']++;
			} else if ( true === self::ends_soon( $poll ) ) {
				$statistics['ending-soon']++;
				$poll['status'] = 'ending soon';
			}
			$poll_author = get_user_by( 'id', $poll['author'] );
			if ( false !== $poll_author ) {
				$poll['author'] = $poll_author->display_name;
			} else {
				$poll['author'] = '';
			}
			$poll_meta_data = unserialize( $poll['meta_data'] );
			if ( 'now' === $poll_meta_data['options']['poll']['startDateOption'] ) {
				$poll['sdate'] = $poll['added_date'];
			} else {
				$poll['sdate'] = $poll_meta_data['options']['poll']['startDateCustom'];
			}
			if ( 'never' === $poll_meta_data['options']['poll']['endDateOption'] ) {
				$poll['edate'] = '2100-12-31 23:59:59';
			} else {
				$poll['edate'] = $poll_meta_data['options']['poll']['endDateCustom'];
			}
		}
		foreach ( $polls as $key => $row ) {
			$order_by['id'][$key] = $row['id'];
			$order_by['name'][$key] = $row['name'];
			$order_by['status'][$key] = $row['status'];
			$order_by['votes'][$key] = $row['total_submits'];
			$order_by['author'][$key] = $row['author'];
			$order_by['sdate'][$key] = strtotime( $row['sdate'] );
			$order_by['edate'][$key] = strtotime( $row['edate'] );
		}
		if ( 0 < count( $polls ) ) {
			array_multisort( $order_by[$params['order_by']], $params['sort_order'], $polls );
		}
		return array(
			'polls' => $polls,
			'statistics' => $statistics,
			'total_polls' => $pagination['total_polls'],
			'total_pages' => $pagination['total_pages'],
			'pagination' => $pagination['pagination']
		);
	}
	public static function get_names() {
		$polls = false;
		$current_user = wp_get_current_user();
		if ( current_user_can( 'yop_poll_results_others' ) ) {
			$query = "SELECT `id`, `name` FROM {$GLOBALS['wpdb']->yop_poll_polls} ORDER BY `name`";
		} else if ( current_user_can( 'yop_poll_results_own' ) ) {
			$query = "SELECT `id`, `name` FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `author` = '" . $current_user->ID . "' ORDER BY `name`";
		}
		if ( '' !== $query ) {
			$polls = $GLOBALS['wpdb']->get_results( $query, OBJECT );
		}
		return $polls;
	}
	public static function add( stdClass $poll ) {
		$elements_result = array();
		$poll_id = '';
		$current_user = wp_get_current_user();
		self::validate_data( $poll );
		if ( false === self::$errors_present ) {
			self::check_for_name( $poll->name );
			if ( false === self::$errors_present ) {
				$poll_meta_data = self::create_meta_data( $poll );
				$data = array(
					'name' => $poll->name,
					'template' => $poll->design->template,
					'template_base' => $poll->design->templateBase,
					'author' => $current_user->ID,
					'stype' => 'poll',
					'status' => $poll->status,
					'meta_data' => serialize( $poll_meta_data ),
					'total_submits' => 0,
					'total_submited_answers' => 0,
					'added_date' => isset( $poll->added_date ) ? $poll->added_date : current_time( 'mysql' ),
					'modified_date' => isset( $poll->modified_date ) ? $poll->modified_date : current_time( 'mysql' )
				);
				if ( isset( $poll->ID ) && is_numeric($poll->ID ) ) {
					$data['id'] = $poll->ID;
				}
				if ( isset( $poll->poll_author ) && is_numeric( $poll->poll_author ) ) {
					$data['author'] = $poll->poll_author;
				}
				if ( isset( $poll->total_submits ) && is_numeric( $poll->total_submits ) ) {
					$data['total_submits'] = $poll->total_submits;
				}
				if ( isset( $poll->total_submited_answers ) && is_int( $poll->total_submited_answers ) ) {
					$data['total_submited_answers'] = $poll->total_submited_answers;
				}
				if ( false !== $GLOBALS['wpdb']->insert( $GLOBALS['wpdb']->yop_poll_polls, $data ) ) {
					$poll_id = $GLOBALS['wpdb']->insert_id;
					if ( isset( $poll->ID ) && is_numeric( $poll->ID ) ) {
						$elements_result = YOP_Poll_Elements::add( $poll_id, $poll->elements, true );
					} else {
						$elements_result = YOP_Poll_Elements::add( $poll_id, $poll->elements );
					}
					if ( false === $elements_result['errors_present'] ) {
						if ( 'yes' === $poll->options->poll->autoGeneratePollPage ) {
							$page_id = wp_insert_post( array(
								'post_title' => $poll->name,
								'post_content' => "[yop_poll id='{$poll_id}']",
								'post_status' => 'publish',
								'post_type' => 'page',
								'comment_status' => 'open',
								'ping_status' => 'open',
								'post_category' => array( 1 )
							) );
							if ( 0 !== $page_id ) {
								$poll_meta_data['options']['poll']['pageId'] = $page_id;
								$poll_meta_data['options']['poll']['pageLink'] = get_permalink( $page_id );
								$data = array(
									'meta_data' => serialize( $poll_meta_data )
								);
								if ( false !== $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->yop_poll_polls, $data, array( 'id' => $poll_id ) ) ) {
									self::$errors_present = false;
								} else {
									self::$errors_present = true;
									self::$error_text = __( 'Error adding page', 'yop-poll' );
								}
							}
						}
						self::$errors_present = false;
						self::$error_text = $elements_result['error_text'];
					}
				} else {
					self::$errors_present = true;
					self::$error_text = __( 'Error adding poll', 'yop-poll' );
				}
			} else {
				self::$errors_present = true;
				self::$error_text = __( 'A poll with this name already exists', 'yop-poll' );
			}
		}
		return array(
			'success' => !self::$errors_present,
			'error' => self::$error_text,
			'poll_id' => $poll_id
		);
	}
	public static function check_for_name( $poll_name ) {
		$sql_query = $GLOBALS['wpdb']->prepare( "SELECT COUNT(*) FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status`!= 'deleted' AND `name` = %s", $poll_name );
		$polls_count = $GLOBALS['wpdb']->get_var( $sql_query );
		if ( 0 === intval( $polls_count ) ) {
			self::$errors_present = false;
		} else {
			self::$errors_present = true;
		}
	}
	public static function update( stdClass $poll ) {
		$poll_id = $poll->id;
		if ( 0 < intval( $poll_id ) ) {
			$elements_result = array();
			self::validate_data( $poll );
			if ( false === self::$errors_present ) {
				$poll_meta_data = self::create_meta_data( $poll );
				if ( 'yes' === $poll->options->poll->autoGeneratePollPage ) {
					$page_id = wp_insert_post( array(
						'ID' => ( isset( $poll->options->poll->pageId ) && ( 0 < $poll->options->poll->pageId ) ) ? $poll->options->poll->pageId : 0,
						'post_title' => $poll->name,
						'post_content' => "[yop_poll id='{$poll_id}']",
						'post_status' => 'publish',
						'post_type' => 'page',
						'comment_status' => 'open',
						'ping_status' => 'open',
						'post_category' => array( 1 )
					) );
					if ( 0 !== $page_id ) {
						$poll_meta_data['options']['poll']['pageId'] = $page_id;
						$poll_meta_data['options']['poll']['pageLink'] = get_permalink( $page_id );
					}
				} else {
					if ( '' !== $poll->options->poll->pageId ) {
						wp_delete_post( $poll->options->poll->pageId );
						$poll_meta_data['options']['poll']['pageId'] = '';
						$poll_meta_data['options']['poll']['pageLink'] = '';
					}
				}
				$data = array(
					'name' => $poll->name,
					'template' => $poll->design->template,
					'template_base' => $poll->design->templateBase,
					'stype' => 'poll',
					'status' => $poll->status,
					'meta_data' => serialize( $poll_meta_data ),
					'modified_date' => current_time( 'mysql' )
				);
				if ( false !== $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->yop_poll_polls, $data, array( 'id' => $poll_id ) ) ) {
					$elements_result = YOP_Poll_Elements::update( $poll_id, $poll->elements );
					if ( false === $elements_result['errors_present'] ) {
						self::$errors_present = false;
						self::$error_text = $elements_result['error_text'];
					}
				} else {
					self::$errors_present = true;
					self::$error_text = __( 'Error adding poll', 'yop-poll' );
				}
				if ( true === isset( $poll->elementsRemoved ) ) {
					$elements_removed = explode( ',', $poll->elementsRemoved );
					foreach ( $elements_removed as $element_removed ) {
						YOP_Poll_Elements::delete( $poll_id, $element_removed );
						YOP_Poll_SubElements::delete_all_for_element( $poll_id, $element_removed );
					}
				}
			}
		} else {
			self::$errors_present = true;
			self::$error_text = __( 'Error updating poll', 'yop-poll' );
		}
		return array(
			'success' => !self::$errors_present,
			'error' => self::$error_text
		);
	}
	public static function delete( $poll_id ) {
		$meta_data = self::get_meta_data( $poll_id );
		if ( '' !== $meta_data['options']['poll']['pageId'] ) {
			wp_delete_post( $meta_data['options']['poll']['pageId'] );
		}
		$data = array( 'status' => 'deleted' );
		$delete_poll_result = $GLOBALS['wpdb']->update(
			$GLOBALS['wpdb']->yop_poll_polls,
			$data,
			array(
				'id' => $poll_id
			)
		);
		if ( false !== $delete_poll_result ) {
			$delete_elements_result = YOP_Poll_Elements::delete_all_for_poll( $poll_id );
			if ( false === $delete_elements_result['errors_present'] ) {
				$delete_subelements_result = YOP_Poll_SubElements::delete_all_for_poll( $poll_id );
				if ( false === $delete_subelements_result['errors_present'] ) {
					self::$errors_present = false;
				} else {
					self::$errors_present = true;
					self::$error_text = $delete_subelements_result['error_text'];
				}
			} else {
				self::$errors_present = true;
				self::$error_text = $delete_poll_result['error_text'];
			}
		} else {
			self::$errors_present = true;
			self::$error_text = __( 'Error deleting poll', 'yop-poll' );
		}
		return array(
			'success' => !self::$errors_present,
			'error' => self::$error_text
		);
	}
	public static function clone_poll( $poll_id ) {
		$current_user = wp_get_current_user();
		$poll_query = $GLOBALS['wpdb']->prepare(
			"SELECT * from {$GLOBALS['wpdb']->yop_poll_polls} WHERE `id`=%s", $poll_id
		);
		$cloned_poll = $GLOBALS['wpdb']->get_row( $poll_query, OBJECT );
		$data = array(
			'name' => $cloned_poll->name . ' ' . __( 'clone', 'yop-poll' ),
			'template' => $cloned_poll->template,
			'template_base' => $cloned_poll->template_base,
			'author' => $current_user->ID,
			'stype' => 'poll',
			'status' => $cloned_poll->status,
			'meta_data' => $cloned_poll->meta_data,
			'total_submits' => 0,
			'added_date' => current_time( 'mysql' ),
			'modified_date' => current_time( 'mysql' )
		);
		if ( false !== $GLOBALS['wpdb']->insert( $GLOBALS['wpdb']->yop_poll_polls, $data ) ) {
			$new_poll_id = $GLOBALS['wpdb']->insert_id;
			$elements_result = YOP_Poll_Elements::clone_all( $poll_id, $new_poll_id );
			if ( false === $elements_result['errors_present'] ) {
				self::$errors_present = false;
				self::$error_text = $elements_result['error_text'];
			}
			$new_poll_meta_data = unserialize( $cloned_poll->meta_data );
			if ( 'yes' === $new_poll_meta_data['options']['poll']['autoGeneratePollPage'] ) {
				$page_id = wp_insert_post( array(
					'post_title' => $cloned_poll->name . ' ' . __( 'clone', 'yop-poll' ),
					'post_content' => "[yop_poll id='{$new_poll_id}']",
					'post_status' => 'publish',
					'post_type' => 'page',
					'comment_status' => 'open',
					'ping_status' => 'open',
					'post_category' => array( 1 )
				) );
				if ( 0 !== $page_id ) {
					$new_poll_meta_data['options']['poll']['pageId'] = $page_id;
					$ne_poll_meta_data['options']['poll']['pageLink'] = get_permalink( $page_id );
					$data = array(
						'meta_data' => serialize( $new_poll_meta_data )
					);
					if ( false !== $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->yop_poll_polls, $data, array( 'id' => $new_poll_id ) ) ) {
						self::$errors_present = false;
					} else {
						self::$errors_present = true;
						self::$error_text = __( 'Error adding page', 'yop-poll' );
					}
				}
			}
		} else {
			self::$errors_present = true;
			self::$error_text = __( 'Error cloning poll', 'yop-poll' );
		}
		return array(
			'success' => !self::$errors_present,
			'error' => self::$error_text
		);
	}
	public static function reset_poll( $poll_id ) {
		$data = array(
			'total_submits' => '0',
			'total_submited_answers' => '0',
			'modified_date' => current_time( 'mysql' )
		);
		if ( false !== $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->yop_poll_polls, $data, array( 'id' => $poll_id ) ) ) {
			YOP_Poll_SubElements::reset_submits_for_poll( $poll_id );
			YOP_Poll_Votes::delete_votes_for_poll( $poll_id );
		} else {
			self::$errors_present = true;
			self::$error_text = __( 'Error resetting votes', 'yop-poll' );
		}
		return array(
			'success' => !self::$errors_present,
			'error' => self::$error_text
		);
	}
	public static function create_meta_data( stdClass $poll ) {
		return array(
			'style' => array(
				'poll' => array(
					'backgroundColor' => $poll->design->style->poll->backgroundColor,
					'borderSize' => $poll->design->style->poll->borderSize,
					'borderColor' => $poll->design->style->poll->borderColor,
					'borderRadius' => $poll->design->style->poll->borderRadius,
					'padding' => $poll->design->style->poll->padding,
					'textColor' => $poll->design->style->poll->textColor,
					'inputElementsBorderColor' => $poll->design->style->poll->inputElementsBorderColor
				),
				'questions' => array(
					'backgroundColor' => $poll->design->style->questions->backgroundColor,
					'borderSize' => $poll->design->style->questions->borderSize,
					'borderColor' => $poll->design->style->questions->borderColor,
					'borderRadius' => $poll->design->style->questions->borderRadius,
					'padding' => $poll->design->style->questions->padding,
					'textColor' => $poll->design->style->questions->textColor,
					'textSize' => $poll->design->style->questions->textSize
				),
				'answers' => array(
					'backgroundColor' => $poll->design->style->answers->backgroundColor,
					'borderSize' => $poll->design->style->answers->borderSize,
					'borderColor' => $poll->design->style->answers->borderColor,
					'borderRadius' => $poll->design->style->answers->borderRadius,
					'padding' => $poll->design->style->answers->padding,
					'textColor' => $poll->design->style->answers->textColor,
					'textSize' => $poll->design->style->answers->textSize,
					'skin' => $poll->design->style->answers->skin,
					'colorScheme' => $poll->design->style->answers->colorScheme
				),
				'buttons' => array(
					'backgroundColor' => $poll->design->style->buttons->backgroundColor,
					'borderSize' => $poll->design->style->buttons->borderSize,
					'borderColor' => $poll->design->style->buttons->borderColor,
					'borderRadius' => $poll->design->style->buttons->borderRadius,
					'padding' => $poll->design->style->buttons->padding,
					'textColor' => $poll->design->style->buttons->textColor,
					'textSize' => $poll->design->style->buttons->textSize
				),
				'captcha' => array(),
				'errors' => array(
					'backgroundColor' => $poll->design->style->errors->backgroundColor,
					'borderSize' => $poll->design->style->errors->borderSize,
					'borderColor' => $poll->design->style->errors->borderColor,
					'borderRadius' => $poll->design->style->errors->borderRadius,
					'padding' => $poll->design->style->errors->padding,
					'textColor' => $poll->design->style->errors->textColor,
					'textSize' => $poll->design->style->errors->textSize
				)
			),
			'options' => array(
				'poll' => array(
					'voteButtonLabel' => $poll->options->poll->voteButtonLabel,
					'showResultsLink' => $poll->options->poll->showResultsLink,
					'resultsLabelText' => $poll->options->poll->resultsLabelText,
					'showTotalVotes' => $poll->options->poll->showTotalVotes,
					'showTotalAnswers' => $poll->options->poll->showTotalAnswers,
					'startDateOption' => $poll->options->poll->startDateOption,
					'startDateCustom' => $poll->options->poll->startDateCustom,
					'endDateOption' => $poll->options->poll->endDateOption,
					'endDateCustom' => $poll->options->poll->endDateCustom,
					'redirectAfterVote' => $poll->options->poll->redirectAfterVote,
					'redirectUrl' => $poll->options->poll->redirectUrl,
					'resetPollStatsAutomatically' => $poll->options->poll->resetPollStatsAutomatically,
					'resetPollStatsOn' => $poll->options->poll->resetPollStatsOn,
					'resetPollStatsEvery' => $poll->options->poll->resetPollStatsEvery,
					'resetPollStatsEveryPeriod' => $poll->options->poll->resetPollStatsEveryPeriod,
					'autoGeneratePollPage' => $poll->options->poll->autoGeneratePollPage,
					'pageId' => ( 'yes' === $poll->options->poll->autoGeneratePollPage ) ? $poll->options->poll->pageId : '',
					'pageLink' => ( 'yes' === $poll->options->poll->autoGeneratePollPage ) ? $poll->options->poll->pageLink : '',
					'useCaptcha' => $poll->options->poll->useCaptcha,
					'sendEmailNotifications' => $poll->options->poll->sendEmailNotifications,
					'emailNotificationsFromName' => $poll->options->poll->emailNotificationsFromName,
					'emailNotificationsFromEmail' => $poll->options->poll->emailNotificationsFromEmail,
					'emailNotificationsSubject' => $poll->options->poll->emailNotificationsSubject,
					'emailNotificationsMessage' => $poll->options->poll->emailNotificationsMessage,
					'enableGdpr' => $poll->options->poll->enableGdpr,
					'gdprSolution' => $poll->options->poll->gdprSolution,
					'gdprConsentText' => $poll->options->poll->gdprConsentText,
				),
				'results' => array(
					'showResultsMoment' => $poll->options->results->showResultsMoment,
					'customDateResults' => $poll->options->results->customDateResults,
					'showResultsTo' => $poll->options->results->showResultsTo,
					'resultsDetails' => $poll->options->results->resultsDetails,
					'backToVoteOption' => $poll->options->results->backToVoteOption,
					'backToVoteCaption' => $poll->options->results->backToVoteCaption,
					'sortResults' => $poll->options->results->sortResults,
					'sortResultsRule' => $poll->options->results->sortResultsRule,
					'displayResultsAs' => $poll->options->results->displayResultsAs
				),
				'access' => array(
					'votePermissions' => $poll->options->access->votePermissions,
					/*'allowWordpressVotes' => $poll->options->access->allowWordpressVotes,*/
					'blockVoters' => $poll->options->access->blockVoters,
					'blockForValue' => $poll->options->access->blockForValue,
					'blockForPeriod' => $poll->options->access->blockForPeriod,
					'limitVotesPerUser' => $poll->options->access->limitVotesPerUser,
					'votesPerUserAllowed' => $poll->options->access->votesPerUserAllowed
				)
			)
		);
	}
	public static function validate_data( stdClass $poll ) {
		if ( false === is_object( $poll ) ) {
			self::$errors_present = true;
			self::$error_text = __( 'Invalid data', 'yop-poll' );
		} else {
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->name ) ||
				( '' === trim( $poll->name ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Name" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->template ) ||
				( '' === trim( $poll->design->template ) ) ||
				( 0 === intval( $poll->design->template ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Template" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->backgroundColor ) ||
				( '' === trim( $poll->design->style->poll->backgroundColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->poll->backgroundColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Background Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->borderSize ) ||
				( '' === trim( $poll->design->style->poll->borderSize ) ) ||
				( !ctype_digit( (string) $poll->design->style->poll->borderSize ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Border Thickness" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->borderColor ) ||
				( '' === trim( $poll->design->style->poll->borderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->poll->borderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Border Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->borderRadius ) ||
				( '' === trim( $poll->design->style->poll->borderRadius ) ) ||
				( !ctype_digit( (string) $poll->design->style->poll->borderRadius ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Border Radius" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->padding ) ||
				( '' === trim( $poll->design->style->poll->padding ) ) ||
				( !ctype_digit( (string) $poll->design->style->poll->padding ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Padding" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->textColor ) ||
				( '' === trim( $poll->design->style->poll->textColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->poll->textColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Text Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->poll->inputElementsBorderColor ) ||
				( '' === trim( $poll->design->style->poll->inputElementsBorderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->poll->inputElementsBorderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Poll Input Elements Border Color" is invalid', 'yop-poll' );
			}
			/* QUESTIONS STYLE CHECK */
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->backgroundColor ) ||
				( '' === trim( $poll->design->style->questions->backgroundColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->questions->backgroundColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Background Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->borderSize ) ||
				( '' === trim( $poll->design->style->questions->borderSize ) ) ||
				( !ctype_digit( (string) $poll->design->style->questions->borderSize ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Border Thickness" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->borderColor ) ||
				( '' === trim( $poll->design->style->questions->borderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->questions->borderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Border Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->borderRadius ) ||
				( '' === trim( $poll->design->style->questions->borderRadius ) ) ||
				( !ctype_digit( (string) $poll->design->style->questions->borderRadius ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Border Radius" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->padding ) ||
				( '' === trim( $poll->design->style->questions->padding ) ) ||
				( !ctype_digit( (string) $poll->design->style->questions->padding ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Padding" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->textColor ) ||
				( '' === trim( $poll->design->style->questions->textColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->questions->textColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Text Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->questions->textSize ) ||
				( '' === trim( $poll->design->style->questions->textSize ) ) ||
				( !in_array( $poll->design->style->questions->textSize, self::$text_size_allowed ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Question Text Size" is invalid', 'yop-poll' );
			}
			/* ANSWERS STYLE CHECK */
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->backgroundColor ) ||
				( '' === trim( $poll->design->style->questions->backgroundColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->answers->backgroundColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Background Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->borderSize ) ||
				( '' === trim( $poll->design->style->answers->borderSize ) ) ||
				( !ctype_digit( (string) $poll->design->style->answers->borderSize ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Border Thickness" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->borderColor ) ||
				( '' === trim( $poll->design->style->answers->borderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->answers->borderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Border Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->borderRadius ) ||
				( '' === trim( $poll->design->style->answers->borderRadius ) ) ||
				( !ctype_digit( (string) $poll->design->style->answers->borderRadius ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Border Radius" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->padding ) ||
				( '' === trim( $poll->design->style->answers->padding ) ) ||
				( !ctype_digit( (string) $poll->design->style->answers->padding ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Padding" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->textColor ) ||
				( '' === trim( $poll->design->style->answers->textColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->answers->textColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Text Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->answers->textSize ) ||
				( '' === trim( $poll->design->style->answers->textSize ) ) ||
				( !in_array( $poll->design->style->answers->textSize, self::$text_size_allowed ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Answers Text Size" is invalid', 'yop-poll' );
			}
			/* BUTTONS STYLE CHECK */
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->backgroundColor ) ||
				( '' === trim( $poll->design->style->buttons->backgroundColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->buttons->backgroundColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Background Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->borderSize ) ||
				( '' === trim( $poll->design->style->buttons->borderSize ) ) ||
				( !ctype_digit( (string) $poll->design->style->buttons->borderSize ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Border Thickness" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->borderColor ) ||
				( '' === trim( $poll->design->style->buttons->borderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->buttons->borderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Border Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->borderRadius ) ||
				( '' === trim( $poll->design->style->buttons->borderRadius ) ) ||
				( !ctype_digit( (string) $poll->design->style->buttons->borderRadius ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Border Radius" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->padding ) ||
				( '' === trim( $poll->design->style->buttons->padding ) ) ||
				( !ctype_digit( (string) $poll->design->style->buttons->padding ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Padding" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->textColor ) ||
				( '' === trim( $poll->design->style->buttons->textColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->buttons->textColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Text Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->buttons->textSize ) ||
				( '' === trim( $poll->design->style->buttons->textSize ) ) ||
				( !in_array( $poll->design->style->buttons->textSize, self::$text_size_allowed ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Text Size" is invalid', 'yop-poll' );
			}
			/* ERRORS STYLE CHECK */
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->backgroundColor ) ||
				( '' === trim( $poll->design->style->errors->backgroundColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->errors->backgroundColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Background Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->borderSize ) ||
				( '' === trim( $poll->design->style->errors->borderSize ) ) ||
				( !ctype_digit( (string) $poll->design->style->errors->borderSize ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Border Thickness" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->borderColor ) ||
				( '' === trim( $poll->design->style->errors->borderColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->errors->borderColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Border Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->borderRadius ) ||
				( '' === trim( $poll->design->style->errors->borderRadius ) ) ||
				( !ctype_digit( (string) $poll->design->style->errors->borderRadius ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Border Radius" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->padding ) ||
				( '' === trim( $poll->design->style->errors->padding ) ) ||
				( !ctype_digit( (string) $poll->design->style->errors->padding ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Padding" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->textColor ) ||
				( '' === trim( $poll->design->style->errors->textColor ) ) ||
				( !ctype_alnum( str_replace( '#', '', $poll->design->style->errors->textColor ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Buttons Text Color" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->design->style->errors->textSize ) ||
				( '' === trim( $poll->design->style->errors->textSize ) ) ||
				( !in_array( $poll->design->style->errors->textSize, self::$text_size_allowed ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Errors Text Size" is invalid', 'yop-poll' );
			}
			/* POLL ELEMENTS CHECK */
			if (
			 	( false === self::$errors_present ) &&
				( 0 === count( $poll->elements ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'No elements present', 'yop-poll' );
			}
			if ( false === self::$errors_present ) {
				foreach( $poll->elements as $element ) {
					switch ( $element->type ) {
						case 'text-question': {
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->text ) ||
								( '' === trim( $element->text ) ) )
							) {
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Question" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( 0 == count( $element->answers ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'At least one answer per question is required', 'yop-poll' );
							}
							if (
								( false === self::$errors_present )
							){
								foreach( $element->answers as $answer ) {
									if (
										( false === self::$errors_present ) &&
										( !isset( $answer->text ) ||
										( '' === trim( $answer->text ) ) )
									){
										self::$errors_present = true;
										self::$error_text = __( 'Answer text is invalid', 'yop-poll' );
									}
									if (
										( false === self::$errors_present ) &&
										!in_array( $answer->options->makeDefault, self::$yes_no_allowed )
									) {
										self::$errors_present = true;
										self::$error_text = __( 'Data for default answer is invalid', 'yop-poll' );
									}
									if (
										( false === self::$errors_present ) &&
										!in_array( $answer->options->makeLink, self::$yes_no_allowed )
									) {
										self::$errors_present = true;
										self::$error_text = __( ' Data for "Answer Link" is invalid', 'yop-poll' );
									}
									if (
										( false === self::$errors_present ) &&
										( 'yes' === $answer->options->makeLink ) &&
										( ( !isset( $answer->options->link ) ) ||
										( '' === trim( $answer->options->link ) ) ||
										!filter_var( $answer->options->link, FILTER_VALIDATE_URL ) )
									) {
										self::$errors_present = true;
										self::$error_text = __( 'Data for "Answer link" is invalid', 'yop-poll' );
									}
								}
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->allowOtherAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Allow other options" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->otherAnswersLabel ) ||
								( '' === trim( $element->options->otherAnswersLabel ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Label for Other Answers" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->addOtherAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Add other answers in answer list" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->displayOtherAnswersInResults, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Display other answers in results list" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->allowMultipleAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Allow multiple answers " is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->multipleAnswersMinim ) ||
								( '' === trim( $element->options->multipleAnswersMinim ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Minimum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->multipleAnswersMaxim ) ||
								( '' === trim( $element->options->multipleAnswersMaxim ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Maximum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( intval( $element->options->multipleAnswersMinim ) > intval( $element->options->multipleAnswersMaxim ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Minimum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->answersDisplay, self::$answers_display_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Display answers " is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( 'columns' === $element->options->answersDisplay ) &&
								( !isset( $element->options->answersColumns ) ||
								( '' === trim( $element->options->answersColumns ) ) ||
								( 0 === intval( $element->options->answersColumns ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Maximum answers required" is invalid', 'yop-poll' );
							}
							break;
						}
						case 'custom-field': {
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->text ) ||
								( '' === trim( $element->text ) ) )
							) {
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Custom Field" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->makeRequired, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Make Required" is invalid', 'yop-poll' );
							}
							break;
						}
						case 'media-question': {
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->text ) ||
								( '' === trim( $element->text ) ) )
							) {
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Question" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( 0 === count( $element->answers ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'At least one answer per question is required', 'yop-poll' );
							}
							if (
								( false === self::$errors_present )
							){
								foreach( $element->answers as $answer ) {
									if (
										( false === self::$errors_present ) &&
										( !isset( $answer->text ) ||
										( '' === trim( $answer->text ) ) )
									){
										self::$errors_present = true;
										self::$error_text = __( 'Answer is invalid', 'yop-poll');
									}
									if (
										( false === self::$errors_present ) &&
										!in_array( $answer->options->makeDefault, self::$yes_no_allowed )
									) {
										self::$errors_present = true;
										self::$error_text = __( 'Data for default answer is invalid', 'yop-poll' );
									}
									if (
										( false === self::$errors_present ) &&
										!in_array( $answer->options->addText, self::$yes_no_allowed )
									) {
										self::$errors_present = true;
										self::$error_text = __( ' Data for "Answer Text" is invalid', 'yop-poll' );
									}
								}
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->allowOtherAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Allow other options" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->otherAnswersLabel ) ||
								( '' === trim( $element->options->otherAnswersLabel ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Label for Other Answers" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->addOtherAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Add other answers in answer list" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->displayOtherAnswersInResults, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Display other answers in results list" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->allowMultipleAnswers, self::$yes_no_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Allow multiple answers " is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->multipleAnswersMinim ) ||
								( '' === trim( $element->options->multipleAnswersMinim ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Minimum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !isset( $element->options->multipleAnswersMaxim ) ||
								( '' === trim( $element->options->multipleAnswersMaxim ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Maximum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( intval( $element->options->multipleAnswersMinim ) > intval( $element->options->multipleAnswersMaxim ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Minimum answers required" is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( !in_array( $element->options->answersDisplay, self::$answers_display_allowed ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Display answers " is invalid', 'yop-poll' );
							}
							if (
								( false === self::$errors_present ) &&
								( 'columns' === $element->options->answersDisplay ) &&
								( !isset( $element->options->answersColumns ) ||
								( '' === trim( $element->options->answersColumns ) ) ||
								( 0 === intval( $element->options->answersColumns ) ) )
							){
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Maximum answers required" is invalid', 'yop-poll' );
							}
							break;
						}
						case 'space-separator': {
							break;
						}
						case 'text-block': {
							if(
								( false === self::$errors_present ) &&
								( !isset( $element->text ) ) ||
								( '' === trim( $element->text ) )
							) {
								self::$errors_present = true;
								self::$error_text = __( 'Data for "Text Block" is invalid', 'yop-poll' );
							}
							break;
						}
						default: {
							break;
						}
					}
				}
			}
			/* POLL OPTIONS->POLL CHECK */
			if (
				( false === self::$errors_present ) &&
				( !isset( $poll->options->poll->voteButtonLabel ) ||
				( '' === trim( $poll->options->poll->voteButtonLabel ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Vote Button Label" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->showResultsLink, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Show [Results] link" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->showResultsLink ) &&
				( !isset( $poll->options->poll->resultsLabelText ) ||
				( '' === trim( $poll->options->poll->resultsLabelText ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "[Results] Link Label" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->showTotalVotes, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Show Total Votes" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->showTotalAnswers, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Show Total Answers" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->startDateOption, self::$date_values_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Start Date" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'custom' === $poll->options->poll->startDateOption ) &&
				( !isset( $poll->options->poll->startDateCustom ) ||
				( '' === trim( $poll->options->poll->startDateCustom ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Start Date" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->endDateOption, self::$date_values_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "End Date" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'custom' === $poll->options->poll->endDateOption ) &&
				( !isset( $poll->options->poll->endDateCustom ) ||
				( '' === trim( $poll->options->poll->endDateCustom ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "End Date" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->redirectAfterVote, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Redirect after vote" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->redirectAfterVote ) &&
				( !isset( $poll->options->poll->redirectUrl ) ||
				( '' === trim( $poll->options->poll->redirectUrl ) ) ||
				( !filter_var( $poll->options->poll->redirectUrl, FILTER_VALIDATE_URL ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Redirect Url" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->resetPollStatsAutomatically, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Reset Poll Stats automatically" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->resetPollStatsEveryPeriod, self::$reset_stats_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Reset Every" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->autoGeneratePollPage, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Auto Generate Poll Page" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->useCaptcha, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Use Captcha" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->poll->sendEmailNotifications, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Send Email notifications" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->sendEmailNotifications ) &&
				( !isset( $poll->options->poll->emailNotificationsFromName ) ||
				( '' === trim( $poll->options->poll->emailNotificationsFromName ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "From Name" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->sendEmailNotifications ) &&
				( !isset( $poll->options->poll->emailNotificationsFromEmail ) ||
				( '' === trim( $poll->options->poll->emailNotificationsFromEmail ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "From Email" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->sendEmailNotifications ) &&
				( !isset( $poll->options->poll->emailNotificationsSubject ) ||
				( '' === trim( $poll->options->poll->emailNotificationsSubject ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Subject" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->poll->sendEmailNotifications ) &&
				( !isset( $poll->options->poll->emailNotificationsMessage ) ||
				( '' === trim( $poll->options->poll->emailNotificationsMessage ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Message" is invalid', 'yop-poll' );
			}
			/* POLL OPTIONS->RESULTS CHECK */
			if (
				( false === self::$errors_present ) &&
				( 0 < count( $poll->options->results->showResultsMoment ) ) &&
				( 0 === count( array_intersect( $poll->options->results->showResultsMoment, self::$show_results_allowed ) ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Show results" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( in_array( 'custom-date', $poll->options->results->showResultsMoment ) ) &&
				( !isset( $poll->options->results->customDateResults ) ||
				( '' === trim( $poll->options->results->customDateResults ) ) )
			 ) {
				 self::$errors_present = true;
				 self::$error_text = __( 'Data for "Show Results" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 0 < count( $poll->options->results->showResultsMoment ) ) &&
				( ( 0 === count( $poll->options->results->showResultsTo )) ||
				( 0 === count( array_intersect( $poll->options->results->showResultsTo, self::$show_results_to_allowed ) ) ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Show results to" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->results->backToVoteOption, self::$yes_no_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Display [Back to vote] link" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->results->backToVoteOption ) &&
				( !isset( $poll->options->results->backToVoteCaption ) ||
				( '' === trim( $poll->options->results->backToVoteCaption ) ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "[Back to vote] caption" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->results->sortResults, self::$sort_results_allowed ) )
			){
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Sort Results" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'number-of-votes' === $poll->options->results->sortResults ) &&
				( !in_array( $poll->options->results->sortResultsRule, self::$sort_results_rule_allowed ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Sort rule" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->results->displayResultsAs, self::$display_results_as_allowed ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Display Results As"', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( ( 0 === count( $poll->options->access->votePermissions ) ) ||
				( 0 === count( array_intersect( $poll->options->access->votePermissions, self::$vote_permissions_allowed ) ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Vote Permissions" is invalid', 'yop-poll' );
			}
			/*
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->access->allowWordpressVotes, self::$yes_no_allowed ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Wordpress" is invalid', 'yop-poll' );
			}
			*/
			if (
				( false === self::$errors_present ) &&
				( 0 < count( $poll->options->access->blockVoters ) ) &&
				( 0 === count( array_intersect($poll->options->access->blockVoters, self::$block_voters_allowed) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Block Voters" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 0 < count( $poll->options->access->blockVoters ) ) &&
				( !in_array( 'no-block', $poll->options->access->blockVoters ) ) &&
				( ( !isset( $poll->options->access->blockForValue ) ||
				( 0 === intval( $poll->options->access->blockForValue ) ) ) ||
				( !in_array( $poll->options->access->blockForPeriod, self::$block_voters_period_allowed ) ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Block For" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( !in_array( $poll->options->access->limitVotesPerUser, self::$yes_no_allowed ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Limit Number Of Votes per User" is invalid', 'yop-poll' );
			}
			if (
				( false === self::$errors_present ) &&
				( 'yes' === $poll->options->access->limitVotesPerUser ) &&
				( 0 === intval( $poll->options->access->votesPerUserAllowed ) )
			) {
				self::$errors_present = true;
				self::$error_text = __( 'Data for "Votes per user" is invalid', 'yop-poll' );
			}
		}
	}
	public static function is_ended( $poll, $is_serialized ) {
		$today = new DateTime( current_time( 'mysql' ) );
		if ( false === $is_serialized ) {
			$poll_meta_data = unserialize( $poll['meta_data'] );
		} else {
			$poll_meta_data = $poll->meta_data;
		}
		if ( 'custom' === $poll_meta_data['options']['poll']['endDateOption'] ) {
			$end_date = new DateTime( $poll_meta_data['options']['poll']['endDateCustom'] );
			if ( $today > $end_date ) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	public static function ends_soon( $poll ) {
		$ends_soon_date = new DateTime( current_time( 'mysql' ) );
		$ends_soon_date->add( new DateInterval( 'P' . self::$ends_soon_interval . 'D' ) );
		$poll_meta_data = unserialize( $poll['meta_data'] );
		if ( 'custom' === $poll_meta_data['options']['poll']['endDateOption'] ) {
			$end_date = new DateTime( $poll_meta_data['options']['poll']['endDateCustom'] );
			if ( $ends_soon_date >= $end_date ) {
				return true;
			} else {
				return false;
			}
		}
	}
	public static function get_poll(
			$poll_id,
			$elements_order_by = 'sorder',
			$elements_sort_rule = 'ASC',
			$sub_elements_order_by = 'sorder',
			$sub_elements_sort_rule = 'ASC'
		) {
		$query = $GLOBALS['wpdb']->prepare(
			"SELECT * FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `id` = %s AND `status` != 'deleted'", $poll_id
		);
		$poll = $GLOBALS['wpdb']->get_row( $query, OBJECT );
		if( null !== $poll ){
			$poll->meta_data = unserialize( $poll->meta_data );
			$poll_elements = YOP_Poll_Elements::get( $poll_id, $elements_order_by, $elements_sort_rule );
			$poll_sub_elements = YOP_Poll_SubElements::get( $poll_id, $sub_elements_order_by, $sub_elements_sort_rule );
			foreach ( $poll_elements as $poll_element ) {
				foreach ( $poll_sub_elements as $poll_sub_element ) {
					if ( $poll_element->id === $poll_sub_element->element_id ) {
						$poll_element->answers[] = $poll_sub_element;
					}
				}
			}
			$poll->elements = $poll_elements;
			return $poll;
		} else {
			return false;
		}
	}
	public static function get_current_active() {
		$query = "SELECT max(`id`) FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` = 'published'";
		$poll_id = $GLOBALS['wpdb']->get_var( $query );
		return $poll_id;
	}
	public static function get_latest() {
		$query = "SELECT max(`id`) FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` = 'published'";
		$poll_id = $GLOBALS['wpdb']->get_var( $query );
		return $poll_id;
	}
	public static function get_random() {
		$query = "SELECT `id` FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` = 'published' ORDER BY rand() LIMIT 1";
		$poll_id = $GLOBALS['wpdb']->get_var( $query );
		return $poll_id;
	}
	public static function get_meta_data( $poll_id ) {
		$query = $GLOBALS['wpdb']->prepare(
			"SELECT `meta_data` FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `id` = %s", $poll_id
		);
		$poll = $GLOBALS['wpdb']->get_col( $query );
		if ( 1 === count( $poll ) ) {
			return unserialize( $poll[0] );
		} else {
			return false;
		}
	}
	public static function is_ended_frontend( $poll ) {
		$today = new DateTime( current_time( 'mysql' ) );
		if ( 'custom' === $poll->meta_data['options']['poll']['endDateOption'] ) {
			$end_date = new DateTime( $poll->meta_data['options']['poll']['endDateCustom'] );
			if ( $today > $end_date ) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	public static function has_started_frontend( $poll ) {
		$today = new DateTime( current_time( 'mysql' ) );
		if ( 'custom' === $poll->meta_data['options']['poll']['startDateOption'] ) {
			$end_date = new DateTime( $poll->meta_data['options']['poll']['startDateCustom'] );
			if ( $today < $end_date ) {
				return false;
			} else {
				return true;
			}
		} else {
			return true;
		}
	}
	public static function get_results_for_frontend(
		$poll,
		$before_or_after_vote,
		$sort_params = array( 'order_by' => 'sorder', 'sort_order' => 'asc' ) ) {
		switch ( $sort_params['order_by'] ) {
			case 'as-defined' :{
				$sort_params['order_by'] = 'sorder';
				break;
			}
			case 'alphabetical': {
				$sort_params['order_by'] = 'stext';
				break;
			}
			case 'number-of-votes': {
				$sort_params['order_by'] = 'votes';
				break;
			}
			default: {
				$sort_params['order_by'] = 'sorder';
				break;
			}
		}
		switch ( $sort_params['sort_order'] ) {
			case 'asc': {
				$sort_params['sort_order'] = SORT_ASC;
				break;
			}
			case 'desc': {
				$sort_params['sort_order'] = SORT_DESC;
				break;
			}
			default: {
				$sort_params['sort_order'] = SORT_ASC;
				break;
			}
		}
		$results = array();
		$max = 0;
		$i = 0;
		foreach ( $poll->elements[0]->answers as $answer ) {
			if (
				( 'before-vote' === $before_or_after_vote ) ||
				( '0' !== $answer->author ) ||
				( ( '0' === $answer->author ) && ( 'yes' === $poll->elements[0]->meta_data['displayOtherAnswersInResults'] ) )
			) {
				$results[$i]['id'] = $answer->id;
				$results[$i]['stext'] = $answer->stext;
				$results[$i]['sorder'] = $answer->sorder;
				$results[$i]['votes'] = $answer->total_submits;
				if ( 0 < intval( $poll->total_submits ) ) {
					if ( 0 ===  ( 100 * $answer->total_submits % $poll->total_submits ) ) {
						$results[$i]['percentage'] = number_format( $answer->total_submits / $poll->total_submits * 100, 0 );
					} else {
						$results[$i]['percentage'] = number_format( $answer->total_submits / $poll->total_submits * 100, 2 );
					}
					if ( $answer->total_submits >= $max ) {
						$max = $answer->total_submits;
					}
				} else {
					$results[$i]['percentage'] = 0;
				}
				$i++;
			}
		}
		foreach ( $results as &$result ) {
			if ( $result['votes'] === $max ) {
				$result['winner'] = 'yes';
			} else {
				$result['winner'] = 'no';
			}
		}
		foreach ( $results as $key => $row ) {
			$order_by['sorder'][$key] = $row['sorder'];
			$order_by['stext'][$key] = $row['stext'];
			$order_by['votes'][$key] = $row['votes'];
			$order_by['percentage'][$key] = $row['percentage'];
		}
		if ( 0 < count( $results) ) {
			array_multisort( $order_by[$sort_params['order_by']], $sort_params['sort_order'], $results );
		}
		return $results;
	}
	public static function add_vote( $poll_id, $total_submited_answers ) {
		$query = $GLOBALS['wpdb']->prepare(
			"UPDATE {$GLOBALS['wpdb']->yop_poll_polls} SET `total_submits` = `total_submits` + 1, "
			. "`total_submited_answers` = `total_submited_answers` + {$total_submited_answers} WHERE `id` = %s", $poll_id
		);
		$GLOBALS['wpdb']->query( $query );
	}
	public static function is_show_results_before_vote( $poll ) {
		$show = false;
		if ( true === in_array( 'before-vote', $poll->meta_data['options']['results']['showResultsMoment'] ) ) {
			if (
				( 1 === count( $poll->meta_data['options']['results']['showResultsTo'] ) ) &&
				( true === in_array( 'registered', $poll->meta_data['options']['results']['showResultsTo'] ) )
				) {
				if ( true === is_user_logged_in() ) {
					$show = true;
				} else {
					$show = false;
				}
			} else {
				$show = true;
			}
		} else {
			$show = false;
		}
		return $show;
	}
	public static function is_show_results_after_vote( $poll ) {
		$show = false;
		if ( true === in_array( 'after-vote', $poll->meta_data['options']['results']['showResultsMoment'] ) ) {
			if (
				( 1 === count( $poll->meta_data['options']['results']['showResultsTo'] ) ) &&
				( true === in_array( 'registered', $poll->meta_data['options']['results']['showResultsTo'] ) )
				) {
				if ( true === is_user_logged_in() ) {
					$show = true;
				} else {
					$show = false;
				}
			} else {
				$show = true;
			}
		} else {
			$show = false;
		}
		return $show;
	}
	public static function generate_results_after_vote( $poll ) {
		$poll_results = array();
		foreach ( $poll->elements as $element ) {
			if ( true === in_array( $element->etype, array( 'text-question', 'media-question' ) ) ) {
				$element_results = array();
				$element_results['id'] = $element->id;
				$element_results['text'] = $element->etext;
				$element_results['type'] = $element->etype;
				$element_results['answers'] = array();
				foreach ( $element->answers as $subelement ) {
					$element_results['answers'][] = array(
						'id' => $subelement->id,
						'text' => $subelement->stext,
						'type' => $subelement->stype,
						'color' => $subelement->meta_data['resultsColor'],
						'votes' => $subelement->total_submits
					);
				}
				$poll_results[] = $element_results;
			}
		}
		return $poll_results;
	}
	public static function get_polls_for_cron() {
		$returned_polls = array();
		$query = "SELECT `id`, `meta_data` FROM {$GLOBALS['wpdb']->yop_poll_polls} WHERE `status` != 'deleted'";
		$polls = $GLOBALS['wpdb']->get_results( $query, ARRAY_A );
		foreach ( $polls as $poll ) {
			$poll_meta_data = unserialize( $poll['meta_data'] );
			array_push( $returned_polls, array(
				'id' => $poll['id'],
				'resetPollStatsAutomatically' => $poll_meta_data['options']['poll']['resetPollStatsAutomatically'],
				'resetPollStatsOn' => $poll_meta_data['options']['poll']['resetPollStatsOn'],
				'resetPollStatsEvery' => $poll_meta_data['options']['poll']['resetPollStatsEvery'],
				'resetPollStatsEveryPeriod' => $poll_meta_data['options']['poll']['resetPollStatsEveryPeriod']
			));
		}
		return $returned_polls;
	}
	public static function reset_stats_for_poll( $poll_id ) {
		$query = $GLOBALS['wpdb']->prepare(
			"UPDATE {$GLOBALS['wpdb']->yop_poll_polls} SET `total_submits` = '0', `total_submited_answers` = '0' WHERE `id` = %s", $poll_id
		);
		$GLOBALS['wpdb']->query( $query );
		YOP_POLL_SubElements::reset_submits_for_poll( $poll_id );
		YOP_Poll_Votes::delete_votes_for_poll( $poll_id );
	}
	public static function update_meta_data( $poll_id, $meta_flag_owner, $meta_flag, $meta_value ) {
		$meta_data = self::get_meta_data( $poll_id );
		$meta_data['options'][$meta_flag_owner][$meta_flag] = $meta_value;
		$query = $GLOBALS['wpdb']->prepare(
			"UPDATE {$GLOBALS['wpdb']->yop_poll_polls} SET `meta_data` = %s, `total_submited_answers` = '0' WHERE `id` = %s",
				serialize( $meta_data ),
				$poll_id
		);
		$GLOBALS['wpdb']->query( $query );
	}
	public static function accept_votes_from_user( $poll, $user, $user_type ) {
		$search_field = '';
		$total_votes_for_user = '';
		$accept_votes_from_user = true;
		switch( $user_type ) {
			case 'wordpress': {
				$search_field = "user_id";
				break;
			}
			case 'facebook': {
				$search_field = 'user_email';
				break;
			}
			case 'google': {
				$search_field = 'user_email';
				break;
			}
			default: {
				$search_field = 'user_email';
				break;
			}
		}
		if ( ( 'yes' === $poll->meta_data['options']['access']['limitVotesPerUser'] ) && ( $poll->meta_data['options']['access']['votesPerUserAllowed'] > 0 ) ) {
			$query = $GLOBALS['wpdb']->prepare(
				"SELECT COUNT(*) FROM {$GLOBALS['wpdb']->yop_poll_votes} WHERE `" . $search_field . "` = %s", $user
			);
			$total_votes_for_user = $GLOBALS['wpdb']->get_var( $query );
			if ( $total_votes_for_user >= $poll->meta_data['options']['access']['votesPerUserAllowed'] ) {
				$accept_votes_from_user = false;
			} else {
				$accept_votes_from_user = true;
			}
		}
		return $accept_votes_from_user;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit