diff --git a/plugins/neuf-events/neuf-events-cli.php b/plugins/neuf-events/neuf-events-cli.php new file mode 100644 index 00000000..e90a29a3 --- /dev/null +++ b/plugins/neuf-events/neuf-events-cli.php @@ -0,0 +1,54 @@ +ID, '_neuf_events_venue', true); + if ($orig_venue === 'BokCaféen') { + $orig_venue = 'Bokcaféen'; + } + + // To handle running script several times + $orig_venue_id = get_post_meta($event->ID, '_neuf_events_venue_id', true); + if (!empty($orig_venue_id)) { + WP_CLI::log('Did nothing for ' . $event->ID); + return; + } + + $validated_venues = neuf_events_validate_venues(null, $orig_venue); + [$venue_id, $venue_custom] = $validated_venues; + + if ($venue_custom === $orig_venue) { + WP_CLI::log('Custom venue for ' . $event->ID . ': ' . $venue_custom); + } else { + WP_CLI::log('Found venue ID for ' . $event->ID . ': ' . $venue_id . ' (' . $orig_venue . ')'); + } + + $saved_id = update_post_meta($event->ID, '_neuf_events_venue_id', $venue_id); + $saved_custom = update_post_meta($event->ID, '_neuf_events_venue', $venue_custom); + + if ($saved_id !== false || $saved_custom !== false) { + return true; + } + return false; +} + +function neuf_events_cli_migrate_venues($args, $args_assoc) +{ + $venues = neuf_events_get_venue_map(); + $events = get_posts(array( + 'post_type' => 'event', + 'numberposts' => -1, + )); + + $changes = 0; + foreach ($events as $event) { + if (migrate_event($event)) { + $changes++; + } + } + + WP_CLI::success('Handled ' . count($events) . ' events'); + WP_CLI::success('Changed ' . $changes . ' events'); +} + +WP_CLI::add_command('neuf-events migrate-venues', 'neuf_events_cli_migrate_venues'); diff --git a/plugins/neuf-events/neuf-events-post-types.php b/plugins/neuf-events/neuf-events-post-types.php index 6729b3f6..3dd6e775 100644 --- a/plugins/neuf-events/neuf-events-post-types.php +++ b/plugins/neuf-events/neuf-events-post-types.php @@ -66,6 +66,35 @@ function neuf_events_get_venue_map() return $venues; } +function neuf_events_validate_venues($venue_id, $venue_custom) +{ + $venues = neuf_events_get_venue_map(); + + // If the custom venue name matches a registered venue, + // use the opportunity to store the venue ID instead + if (empty($venue_id) && !empty($venue_custom)) { + $found_venue_id = array_search($venue_custom, $venues); + if ($found_venue_id) { + $venue_id = $found_venue_id; + $venue_custom = ''; + } + } + // Validate venue ID + if (!empty($venue_id) && !array_key_exists($venue_id, $venues)) { + $venue_id = ''; + } + // Strip custom venue if we have a valid venue ID + if (!empty($venue_id) && !empty($venue_custom)) { + $venue_custom = ''; + } + // Fallback to elsewhere + if (empty($venue_id) && empty($venue_custom)) { + $venue_custom = 'Annetsteds'; + } + + return array($venue_id, $venue_custom); +} + /* When the post is saved, save our custom data */ function neuf_events_save_post($post_id, $post) { @@ -91,32 +120,11 @@ function neuf_events_save_post($post_id, $post) $tosave['_neuf_events_endtime'] = strtotime($_POST['_neuf_events_endtime']); // Venue fields - $venue_custom = $_POST['_neuf_events_venue']; - $venue_id = $_POST['_neuf_events_venue_id']; - - $venues = neuf_events_get_venue_map(); - - // If the custom venue name matches a registered venue, - // use the opportunity to store the venue ID instead - if (empty($venue_id) && !empty($venue_custom)) { - $found_venue_id = array_search($venue_custom, $venues); - if ($found_venue_id) { - $venue_id = $found_venue_id; - $venue_custom = ''; - } - } - // Validate venue ID - if (!empty($venue_id) && !array_key_exists($venue_id, $venues)) { - $venue_id = ''; - } - // Strip custom venue if we have a valid venue ID - if (!empty($venue_id) && !empty($venue_custom)) { - $venue_custom = ''; - } - // Fallback to elsewhere - if (empty($venue_id) && empty($venue_custom)) { - $venue_custom = 'Annetsteds'; - } + $validated_venues = neuf_events_validate_venues( + $_POST['_neuf_events_venue_id'], + $_POST['_neuf_events_venue'] + ); + [$venue_id, $venue_custom] = $validated_venues; $tosave['_neuf_events_venue'] = $venue_custom; $tosave['_neuf_events_venue_id'] = $venue_id; diff --git a/plugins/neuf-events/neuf-events.php b/plugins/neuf-events/neuf-events.php index 08cd58e1..6c6482ef 100644 --- a/plugins/neuf-events/neuf-events.php +++ b/plugins/neuf-events/neuf-events.php @@ -16,6 +16,10 @@ require_once 'neuf-events-post-types.php'; require_once 'neuf-events-admin.php'; require_once 'neuf-events-taxonomies.php'; +if (defined('WP_CLI') && WP_CLI) { + require_once 'neuf-events-cli.php'; +} + /* Register the translations */ add_action('init', 'neuf_events_i18n', 0);