113 lines
2.6 KiB
PHP
113 lines
2.6 KiB
PHP
|
<?php
|
||
|
|
||
|
defined('ABSPATH') or exit;
|
||
|
|
||
|
/**
|
||
|
* @ignore
|
||
|
* @return object
|
||
|
*/
|
||
|
function _mc4wp_400_find_grouping_for_interest_category($groupings, $interest_category)
|
||
|
{
|
||
|
foreach ($groupings as $grouping) {
|
||
|
// cast to stdClass because of missing class
|
||
|
$grouping = (object) (array) $grouping;
|
||
|
|
||
|
if ($grouping->name === $interest_category->title) {
|
||
|
return $grouping;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @ignore
|
||
|
* @return object
|
||
|
*/
|
||
|
function _mc4wp_400_find_group_for_interest($groups, $interest)
|
||
|
{
|
||
|
foreach ($groups as $group_id => $group_name) {
|
||
|
if ($group_name === $interest->name) {
|
||
|
return (object) array(
|
||
|
'name' => $group_name,
|
||
|
'id' => $group_id,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
// in case the migration is _very_ late to the party
|
||
|
if (! class_exists('MC4WP_API_V3')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$options = get_option('mc4wp', array());
|
||
|
if (empty($options['api_key'])) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// get current state from transient
|
||
|
$lists = get_transient('mc4wp_mailchimp_lists_fallback');
|
||
|
if (empty($lists)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
@set_time_limit(600);
|
||
|
$api_v3 = new MC4WP_API_V3($options['api_key']);
|
||
|
$map = array();
|
||
|
|
||
|
foreach ($lists as $list) {
|
||
|
// cast to stdClass because of missing classes
|
||
|
$list = (object) (array) $list;
|
||
|
|
||
|
// no groupings? easy!
|
||
|
if (empty($list->groupings)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// fetch (new) interest categories for this list
|
||
|
try {
|
||
|
$interest_categories = $api_v3->get_list_interest_categories($list->id);
|
||
|
} catch (MC4WP_API_Exception $e) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
|
||
|
foreach ($interest_categories as $interest_category) {
|
||
|
// compare interest title with grouping name, if it matches, get new id.
|
||
|
$grouping = _mc4wp_400_find_grouping_for_interest_category($list->groupings, $interest_category);
|
||
|
if (! $grouping) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$groups = array();
|
||
|
|
||
|
try {
|
||
|
$interests = $api_v3->get_list_interest_category_interests($list->id, $interest_category->id);
|
||
|
} catch (MC4WP_API_Exception $e) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
foreach ($interests as $interest) {
|
||
|
$group = _mc4wp_400_find_group_for_interest($grouping->groups, $interest);
|
||
|
|
||
|
if ($group) {
|
||
|
$groups[ $group->id ] = $interest->id;
|
||
|
$groups[ $group->name ] = $interest->id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$map[ (string) $grouping->id ] = array(
|
||
|
'id' => $interest_category->id,
|
||
|
'groups' => $groups,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if (! empty($map)) {
|
||
|
update_option('mc4wp_groupings_map', $map);
|
||
|
}
|