CCCPaste

ce084a798bd32

function glsr_reassign_reviews(int $assignedPostId = 0, array $newAssignedPostIds = [], int $per_page = 100)
{
    // set_time_limit(0); // Uncomment only if necessary

    $delay_ms = 5000;
    $newAssignedPostIds = array_filter($newAssignedPostIds, 'is_numeric');
    $processed = 0;
    $resumeKey = "glsr_reassign_reviews_last_page_{$assignedPostId}";

    $stream_reviews = function (int $assignedPostId, int $start_page, int $per_page) use ($resumeKey): \Generator
    {
        $page = max(1, $start_page);
        while (true) {
            $reviews = glsr_get_reviews([
                'assigned_posts' => $assignedPostId,
                'orderby' => 'ID',
                'page' => $page,
                'per_page' => max(1, $per_page),
            ]);
            if (1 === $page && empty($reviews->reviews)) {
                break;
            }
            if ($page >= $reviews->max_num_pages) {
                break;
            }
            foreach ($reviews->reviews as $review) {
                yield $review->ID;
            }
            $page++;
            update_option($resumeKey, $page);
        }
    }
    $last_page = get_option($resumeKey, 1);
    foreach ($stream_reviews($assignedPostId, $last_page, $per_page) as $reviewId) {
        glsr_update_review($reviewId, [
            'assigned_posts' => $newAssignedPostIds,
        ]);
        $processed++;
        if ($processed % 200 === 0) {
            glsr_log("Processed {$processed} reviews");
            usleep($delay_ms); // delay every 200 reviews to reduce server load
        }
    }
    glsr_log("Finished processing {$processed} reviews");
    delete_option($resumeKey);
}