neuf-events: Add CLI command for migrating venue fields

This commit is contained in:
ponas committed 2019-05-06 23:25:14 +02:00
1 parent 41675c3b2d
commit 086ed05739
3 files changed
+92 -26

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
<?php
function migrate_event($event)
{
$orig_venue = get_post_meta($event->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');
+34 -26
View File
@@ -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;
+4
View File
@@ -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);