/** * Create the html element used as the UI control for the datepicker button. * The href must keep only active filters. * * @param array $args Populated args for the view * @param int|string|null $initial_date The datepicker's initially set date * @return Ai1ec_Generic_Html_Tag */ public function create_datepicker_link(array $args, $initial_date = null) { $settings = $this->_registry->get('model.settings'); $date_system = $this->_registry->get('date.system'); $date_format_pattern = $date_system->get_date_pattern_by_key($settings->get('input_date_format')); if (null === $initial_date) { // If exact_date argument was provided, use its value to initialize // datepicker. if (isset($args['exact_date']) && $args['exact_date'] !== false && $args['exact_date'] !== null) { $initial_date = $args['exact_date']; } else { $initial_date = $date_system->current_time(); } } // Convert initial date to formatted date if required. if (Ai1ec_Validation_Utility::is_valid_time_stamp($initial_date)) { $initial_date = $date_system->format_date($initial_date, $settings->get('input_date_format')); } $href_args = array('action' => $args['action'], 'cat_ids' => $args['cat_ids'], 'tag_ids' => $args['tag_ids'], 'exact_date' => "__DATE__"); $data_href = $this->create_href_helper_instance($href_args); $attributes = array('data-date' => $initial_date, 'data-date-format' => $date_format_pattern, 'data-date-weekstart' => $settings->get('week_start_day'), 'href' => '#', 'data-href' => $data_href->generate_href()); $loader = $this->_registry->get('theme.loader'); $file = $loader->get_file('date-icon.png'); $args = array('attributes' => $attributes, 'data_type' => $args['data_type'], 'icon_url' => $file->get_url(), 'text_date' => __('Choose a date using calendar', AI1EC_PLUGIN_NAME)); return $loader->get_file('datepicker_link.twig', $args); }
/** * Create the html element used as the UI control for the datepicker button. * The href must keep only active filters. * * @param array $args Populated args for the view * @param int|string|null $initial_date The datepicker's initially set date * @return Ai1ec_Generic_Html_Tag */ public static function create_datepicker_link(array $args, $initial_date = null) { global $ai1ec_settings, $ai1ec_view_helper; $link = Ai1ec_Helper_Factory::create_generic_html_tag('a'); $date_format_pattern = Ai1ec_Time_Utility::get_date_pattern_by_key($ai1ec_settings->input_date_format); if ($initial_date == null) { // If exact_date argument was provided, use its value to initialize // datepicker. if (isset($args['exact_date']) && $args['exact_date'] !== false && $args['exact_date'] !== null) { $initial_date = $args['exact_date']; } else { $initial_date = Ai1ec_Time_Utility::gmt_to_local(Ai1ec_Time_Utility::current_time()); } } // Convert initial date to formatted date if required. if (Ai1ec_Validation_Utility::is_valid_time_stamp($initial_date)) { $initial_date = Ai1ec_Time_Utility::format_date(Ai1ec_Time_Utility::gmt_to_local($initial_date), $ai1ec_settings->input_date_format); } $link->add_class('ai1ec-minical-trigger btn'); $link->set_attribute('data-date', $initial_date); $link->set_attribute('data-date-format', $date_format_pattern); $link->set_attribute('data-date-weekstart', $ai1ec_settings->week_start_day); $link->set_attribute_expr($args['data_type']); $text = '<img src="' . esc_attr($ai1ec_view_helper->get_theme_img_url('date-icon.png')) . '" class="ai1ec-icon-datepicker" />'; $link->set_text($text); $href_args = array('action' => $args['action'], 'cat_ids' => $args['cat_ids'], 'tag_ids' => $args['tag_ids'], 'exact_date' => "__DATE__"); $data_href = self::create_href_helper_instance($href_args); $link->set_attribute('data-href', $data_href->generate_href()); $link->set_attribute('href', '#'); return $link; }
/** * Decomposes an 'exact_date' parameter into month, day, year components based * on date pattern defined in settings (assumed to be in local time zone), * then returns a timestamp in GMT. * * @param string $exact_date 'exact_date' parameter passed to a view * @return bool|int false if argument not provided or invalid, * else UNIX timestamp in GMT */ private function return_gmtime_from_exact_date($exact_date) { $input_format = $this->_registry->get('model.settings')->get('input_date_format'); $date = Ai1ec_Validation_Utility::format_as_iso($exact_date, $input_format); if (false === $date) { $exact_date = false; } else { $exact_date = $this->_registry->get('date.time', $date, 'sys.default')->format_to_gmt(); if ($exact_date < 0) { return false; } } return $exact_date; }
/** * Decomposes an 'exact_date' parameter into month, day, year components based * on date pattern defined in settings (assumed to be in local time zone), * then returns a timestamp in GMT. * * @param string $exact_date 'exact_date' parameter passed to a view * @return bool|int false if argument not provided or invalid, * else UNIX timestamp in GMT */ private function return_gmtime_from_exact_date($exact_date) { global $ai1ec_settings; $bits = Ai1ec_Validation_Utility::validate_date_and_return_parsed_date($exact_date, $ai1ec_settings->input_date_format); if (false === $bits) { $exact_date = false; } else { $exact_date = Ai1ec_Time_Utility::local_to_gmt(gmmktime(0, 0, 0, $bits['month'], $bits['day'], $bits['year'])); } return $exact_date; }
/** * update_settings method * * Handle settings page submit. * * @param array $params User supplied settings options * * @return bool Success */ public function update_settings(array $params) { global $ai1ec_app_helper; // Default values to use for fields if none provided. $field_defaults = array('default_categories' => array(), 'default_tags' => array()); $field_names = array('default_categories', 'default_tags', 'default_calendar_view', 'calendar_css_selector', 'week_start_day', 'exact_date', 'posterboard_events_per_page', 'posterboard_tile_min_width', 'stream_events_per_page', 'week_view_ends_at', 'week_view_starts_at', 'agenda_events_per_page', 'input_date_format', 'allow_events_posting_facebook', 'facebook_credentials', 'user_role_can_create_event', 'timezone', 'recaptcha_public_key', 'recaptcha_private_key', 'admin_mail_subject', 'admin_mail_body', 'user_mail_subject', 'user_mail_body', 'view_cache_refresh_interval', 'admin_add_new_event_mail_body', 'admin_add_new_event_mail_subject', 'user_upcoming_event_mail_body', 'user_upcoming_event_mail_subject', 'license_key', 'oauth_twitter_id', 'oauth_twitter_pass', 'twitter_notice_interval', 'disclaimer'); $checkboxes = array('disable_standard_filter_menu', 'view_posterboard_enabled', 'view_stream_enabled', 'view_month_enabled', 'view_week_enabled', 'view_oneday_enabled', 'view_agenda_enabled', 'agenda_include_entire_last_day', 'agenda_events_expanded', 'include_events_in_rss', 'show_publish_button', 'hide_maps_until_clicked', 'exclude_from_search', 'show_create_event_button', 'show_front_end_create_form', 'allow_anonymous_submissions', 'allow_anonymous_uploads', 'show_add_calendar_button', 'turn_off_subscription_buttons', 'inject_categories', 'input_24h_time', 'geo_region_biasing', 'disable_autocompletion', 'show_location_in_title', 'show_year_in_agenda_dates', 'skip_in_the_loop_check', 'ajaxify_events_in_web_widget', 'calendar_base_url_for_permalinks', 'enable_user_event_notifications', 'use_select2_widgets', 'require_disclaimer', 'use_authors_filter', 'disable_gzip_compression'); // Save the Buy Tickets Button setting. Since it's a boolean we just set the // key so that later we can use isset() instead of in_array(), which is much // slower. $this->views_enabled_ticket_button = array(); foreach ($ai1ec_app_helper->view_names() as $key => $name) { $checkbox_name = "buy_ticket_{$key}_enabled"; $this->views_enabled_ticket_button[$key] = isset($params[$checkbox_name]); } // Only super-admins have the power to change Event Platform mode. if (is_super_admin()) { $checkboxes[] = 'event_platform'; $checkboxes[] = 'event_platform_strict'; } // ===================================== // = Save the settings for the plugins = // ===================================== global $ai1ec_importer_plugin_helper; $ai1ec_importer_plugin_helper->save_plugins_settings($params); // ================================= // = Assign parameters to settings = // ================================= foreach ($field_names as $field_name) { if (isset($params[$field_name])) { $this->{$field_name} = stripslashes_deep($params[$field_name]); } elseif (isset($field_defaults[$field_name])) { $this->{$field_name} = $field_defaults[$field_name]; } } foreach ($checkboxes as $checkbox) { $this->{$checkbox} = isset($params[$checkbox]) ? true : false; } $frequency = new Ai1ec_Frequency_Utility(); $frequency->parse($this->twitter_notice_interval); $this->twitter_notice_interval = $frequency->to_string(); unset($frequency); Ai1ec_Scheduling_Utility::instance()->reschedule('ai1ec_purge_events_cache', $this->view_cache_refresh_interval); // ================================ // = Validate specific parameters = // ================================ // Posterboard events per page $this->posterboard_events_per_page = intval($this->posterboard_events_per_page); if ($this->posterboard_events_per_page <= 0) { $this->posterboard_events_per_page = 1; } // Stream events per page $this->stream_events_per_page = intval($this->stream_events_per_page); if ($this->stream_events_per_page <= 0) { $this->stream_events_per_page = 1; } // Starting time to show in the week view $this->week_view_starts_at = intval($this->week_view_starts_at); if ($this->week_view_starts_at < 0 || $this->week_view_starts_at > 24) { $this->week_view_starts_at = self::WEEK_VIEW_STARTS_AT; } // Starting time to show in the week view $this->week_view_ends_at = intval($this->week_view_ends_at); if ($this->week_view_ends_at < 0 || $this->week_view_ends_at > 24) { $this->week_view_ends_at = self::WEEK_VIEW_ENDS_AT; } // Posterboard tile minimum width $this->posterboard_tile_min_width = intval($this->posterboard_tile_min_width); if ($this->posterboard_tile_min_width <= 0) { $this->posterboard_tile_min_width = 1; } // Agenda events per page $this->agenda_events_per_page = intval($this->agenda_events_per_page); if ($this->agenda_events_per_page <= 0) { $this->agenda_events_per_page = 1; } // Calendar default start date $exact_date_valid = Ai1ec_Validation_Utility::validate_date($this->exact_date, $this->input_date_format); if (false === $exact_date_valid) { $this->exact_date = ''; } // ============================= // = Update special parameters = // ============================= $this->update_page('calendar_page_id', $params); // Flush rewrite rules to regenerate them. // Needed for the // Base permalinks of single event pages on the calendar page URL // setting flush_rewrite_rules(); return true; }
/** * update_settings method * * Handle settings page submit. * * @param array $params User supplied settings options * * @return bool Success */ public function update_settings(array $params) { // Default values to use for fields if none provided. $field_defaults = array('default_categories' => array(), 'default_tags' => array()); $field_names = array('default_categories', 'default_tags', 'default_calendar_view', 'calendar_css_selector', 'week_start_day', 'exact_date', 'posterboard_events_per_page', 'posterboard_tile_min_width', 'stream_events_per_page', 'agenda_events_per_page', 'input_date_format', 'allow_events_posting_facebook', 'facebook_credentials', 'user_role_can_create_event', 'timezone', 'recaptcha_public_key', 'recaptcha_private_key', 'admin_mail_subject', 'admin_mail_body', 'user_mail_subject', 'user_mail_body'); $checkboxes = array('view_posterboard_enabled', 'view_stream_enabled', 'view_month_enabled', 'view_week_enabled', 'view_oneday_enabled', 'view_agenda_enabled', 'agenda_include_entire_last_day', 'agenda_events_expanded', 'include_events_in_rss', 'show_publish_button', 'hide_maps_until_clicked', 'exclude_from_search', 'show_create_event_button', 'show_front_end_create_form', 'allow_anonymous_submissions', 'allow_anonymous_uploads', 'show_add_calendar_button', 'turn_off_subscription_buttons', 'inject_categories', 'input_24h_time', 'geo_region_biasing', 'disable_autocompletion', 'show_location_in_title', 'show_year_in_agenda_dates', 'ajaxify_events_in_web_widget'); // Only super-admins have the power to change Event Platform mode. if (is_super_admin()) { $checkboxes[] = 'event_platform'; $checkboxes[] = 'event_platform_strict'; } // ===================================== // = Save the settings for the plugins = // ===================================== global $ai1ec_importer_plugin_helper; $ai1ec_importer_plugin_helper->save_plugins_settings($params); // ================================= // = Assign parameters to settings = // ================================= foreach ($field_names as $field_name) { if (isset($params[$field_name])) { $this->{$field_name} = $params[$field_name]; if (get_magic_quotes_gpc()) { $this->{$field_name} = stripslashes($this->{$field_name}); } } elseif (isset($field_defaults[$field_name])) { $this->{$field_name} = $field_defaults[$field_name]; } } foreach ($checkboxes as $checkbox) { $this->{$checkbox} = isset($params[$checkbox]) ? true : false; } // ================================ // = Validate specific parameters = // ================================ // Posterboard events per page $this->posterboard_events_per_page = intval($this->posterboard_events_per_page); if ($this->posterboard_events_per_page <= 0) { $this->posterboard_events_per_page = 1; } // Stream events per page $this->stream_events_per_page = intval($this->stream_events_per_page); if ($this->stream_events_per_page <= 0) { $this->stream_events_per_page = 1; } // Posterboard tile minimum width $this->posterboard_tile_min_width = intval($this->posterboard_tile_min_width); if ($this->posterboard_tile_min_width <= 0) { $this->posterboard_tile_min_width = 1; } // Agenda events per page $this->agenda_events_per_page = intval($this->agenda_events_per_page); if ($this->agenda_events_per_page <= 0) { $this->agenda_events_per_page = 1; } // Calendar default start date $exact_date_valid = Ai1ec_Validation_Utility::validate_date($this->exact_date, $this->input_date_format); if (false === $exact_date_valid) { $this->exact_date = ''; } // ============================= // = Update special parameters = // ============================= $this->update_page('calendar_page_id', $params); return true; }