Example #1
0
 /**
  * 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;
 }
Example #3
0
 /**
  * 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;
 }