📦 EqualifyEverything / equalify-wp-network-tools

📄 equalify-wp-network-tools.php · 97 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97<?php
/**
 * Plugin Name: Equalify WP Network Tools
 * Description: Tools to help use Equalify with WP Multisite.
 * Version: 1.0
 * Author: Blake
 * Network: true
 */

if (!defined('ABSPATH')) exit;

// Add "Settings" link in Network Plugins list
add_filter('network_admin_plugin_action_links_' . plugin_basename(__FILE__), function ($links) {
    $links[] = '<a href="' . network_admin_url('plugins.php?page=equalify_wp_network_tools') . '">Settings</a>';
    return $links;
});

// Register admin page
add_action('network_admin_menu', function () {
    add_submenu_page(
        null,
        'Equalify Network Tools Settings',
        'Equalify Network Tools',
        'manage_network',
        'equalify_wp_network_tools',
        'render_equalify_network_tools_page'
    );
});

// Render admin UI
function render_equalify_network_tools_page() {
    $csv_path = get_site_option('equalify_network_tools_csv_path');
    echo '<div class="wrap"><h1>Equalify Network Tools</h1>';

    if (isset($_POST['generate_report'])) {
        $timestamp = time();
        wp_clear_scheduled_hook('equalify_network_tools_generate');
        wp_schedule_single_event($timestamp + 5, 'equalify_network_tools_generate');
        echo '<p>Scan scheduled. Reload this page in a few minutes to download your report.</p>';
    }

    echo '<form method="post">';
    submit_button('Generate Report', 'primary', 'generate_report');
    echo '</form>';

    if ($csv_path && file_exists($csv_path)) {
        $download_url = content_url(str_replace(WP_CONTENT_DIR, '', $csv_path));
        echo '<p><strong>Latest Report:</strong> <a href="' . esc_url($download_url) . '" download>Download CSV</a></p>';
    }

    echo '</div>';
}

// Register cron job
add_action('equalify_network_tools_generate', 'run_equalify_network_tools_report');

function run_equalify_network_tools_report() {
    $csv_rows = [['Site', 'Title', 'Post URL', 'Matched URL']];
    $sites = get_sites(['number' => 0]);

    foreach ($sites as $site) {
        switch_to_blog($site->blog_id);

        $posts = get_posts([
            'post_type' => ['post', 'page'],
            'post_status' => 'publish',
            'numberposts' => -1
        ]);

        foreach ($posts as $post) {
            preg_match_all('/href=["\']([^"\']+\.(pdf|box\.com)[^"\']*)["\']/i', $post->post_content, $matches);
            foreach ($matches[1] as $match) {
                $csv_rows[] = [
                    get_bloginfo('name'),
                    $post->post_title,
                    get_permalink($post),
                    $match
                ];
            }
        }

        restore_current_blog();
    }

    // Save CSV
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['basedir'] . '/equalify-network-report.csv';

    $fp = fopen($file_path, 'w');
    foreach ($csv_rows as $row) {
        fputcsv($fp, $row);
    }
    fclose($fp);

    update_site_option('equalify_network_tools_csv_path', $file_path);
}