Archived
neuf-events: Add CLI command for migrating venue fields
This commit is contained in:
1 parent
41675c3b2d
commit
086ed05739
3 files changed
+92
-26
No files matched your search
@@ -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');
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in new issue
Block a user