diff --git a/admin/pages/class-settings-page.php b/admin/pages/class-settings-page.php
index 7fa548f..6e3f325 100755
--- a/admin/pages/class-settings-page.php
+++ b/admin/pages/class-settings-page.php
@@ -133,28 +133,36 @@ private function get_fields() {
'general' => array(
'title' => null,
'fields' => array(
- 'general-main-country' => array(
+ 'general-main-country' => array(
'title' => __( 'Default Country', 'calendar-plus' ),
'args' => $settings['country'],
),
- 'general-main-display-country' => array(
+ 'general-main-display-country' => array(
'title' => __( 'Display country in locations address', 'calendar-plus' ),
'args' => $settings['display_location_country'],
'sanitize' => 'isset',
),
- 'general-main-time-format' => array(
+ 'general-main-time-format' => array(
'title' => __( 'Time format selector', 'calendar-plus' ),
'args' => $settings['time_format'],
),
- 'general-main-events-page' => array(
+ 'general-main-events-page' => array(
'title' => __( 'Events Page', 'calendar-plus' ),
'args' => absint( $settings['events_page_id'] ),
'sanitize' => 'absint',
),
- 'general-main-replace-sidebar' => array(
+ 'general-main-replace-sidebar' => array(
'title' => __( 'Replace Calendar Plus sidebar for', 'calendar-plus' ),
'args' => $settings['replace_sidebar'],
),
+ 'general-main-update-rss-imported-events' => array(
+ 'title' => __( 'Keep RSS imported events updated', 'calendar-plus' ),
+ 'args' => $settings['update_rss_imported_events'],
+ ),
+ 'general-main-update-ical-imported-events' => array(
+ 'title' => __( 'Keep iCal imported events updated', 'calendar-plus' ),
+ 'args' => $settings['update_ical_imported_events'],
+ ),
),
),
'gmaps' => array(
diff --git a/admin/settings-fields.php b/admin/settings-fields.php
index 7ec9f54..69d06b0 100644
--- a/admin/settings-fields.php
+++ b/admin/settings-fields.php
@@ -69,6 +69,21 @@ function render_general_main_replace_sidebar_field( $replace_sidebar ) {
}
+ function render_general_main_update_rss_imported_events_field( $keep_updated ) {
+ ?>
+ value="1"/>
+
+ value="1"/>
+
diff --git a/includes/helpers/helpers-ical.php b/includes/helpers/helpers-ical.php
index dfa5b29..26effc0 100644
--- a/includes/helpers/helpers-ical.php
+++ b/includes/helpers/helpers-ical.php
@@ -186,6 +186,16 @@ function calendarp_ical_sync_events() {
continue;
}
+ if ( $feed['type'] === 'rss') {
+ $update_events_setting = calendarp_get_setting( 'update_rss_imported_events' );
+ } else {
+ $update_events_setting = calendarp_get_setting( 'update_ical_imported_events' );
+ if ( false === $update_events_setting ) {
+ $update_events_setting = '1';
+ }
+ }
+ $feed['update_events'] = $update_events_setting === '1';
+
$syncer = new Calendar_Plus_iCal_Sync( $events, $feed );
$synced_events = $syncer->sync();
diff --git a/includes/ical/class-calendar-plus-ical-sync.php b/includes/ical/class-calendar-plus-ical-sync.php
index ddbfaf2..f2a85de 100644
--- a/includes/ical/class-calendar-plus-ical-sync.php
+++ b/includes/ical/class-calendar-plus-ical-sync.php
@@ -31,6 +31,18 @@ class Calendar_Plus_iCal_Sync {
*/
protected $default_status;
+ /**
+ * Update events or keep them original
+ * @var bool
+ */
+ protected $update_events;
+
+ /**
+ * Parent feed url
+ * @var string
+ */
+ protected $feed_url;
+
/**
* Calendar_Plus_iCal_Sync constructor.
*
@@ -41,14 +53,18 @@ public function __construct( $events, $args = [] ) {
$this->events = $events;
$args = wp_parse_args( $args, [
- 'author' => 0,
- 'category' => 0,
- 'status' => 'publish',
+ 'author' => 0,
+ 'category' => 0,
+ 'status' => 'publish',
+ 'update_events' => false,
+ 'source' => '',
] );
$this->event_author = $args['author'] ? $args['author'] : get_current_user_id();
$this->event_category = $args['category'];
$this->default_status = $args['status'];
+ $this->update_events = $args['update_events'];
+ $this->feed_url = $args['source'];
}
/**
@@ -89,6 +105,8 @@ protected function sync_event( $event_data ) {
'categories' => [],
] );
+ $event_data_hash = md5( serialize( $event_data ) );
+
if ( 'publish' === $event_data['post_status'] ) {
$event_data['post_status'] = $this->default_status;
}
@@ -109,7 +127,14 @@ protected function sync_event( $event_data ) {
return $event->ID;
}
- if ( ! $event_data['last_updated'] || $event_data['last_updated'] === $event->get_meta( 'ical_last_updated' ) ) {
+ update_post_meta( $event->ID, '_event_feed_url', $this->feed_url );
+
+ if ( ! $this->update_events ) {
+ return false;
+ }
+
+ $old_event_hash = $event->get_meta( 'ical_hash' );
+ if ( $old_event_hash === $event_data_hash ) {
return false;
}
@@ -128,6 +153,8 @@ protected function sync_event( $event_data ) {
}
$post_id = wp_insert_post( $post_args );
+
+ update_post_meta( $post_id, '_event_feed_url', $this->feed_url );
}
update_post_meta( $post_id, '_event_uid', $event_data['uid'] );
@@ -162,6 +189,8 @@ protected function sync_event( $event_data ) {
update_post_meta( $post_id, '_ical_last_updated', $event_data['last_updated'] );
}
+ update_post_meta( $post_id, '_ical_hash', $event_data_hash );
+
do_action('calendarp_ical_sync_update_insert', $post_id, $post_args, $event_data );
return $post_id;