Plugin Directory

Changeset 3454525


Ignore:
Timestamp:
02/05/2026 11:11:26 AM (5 weeks ago)
Author:
codeandcore
Message:

Enhanced: Deactivation feedback popup UI

Location:
cross-site-copy-field-for-acf
Files:
55 added
3 edited

Legend:

Unmodified
Added
Removed
  • cross-site-copy-field-for-acf/trunk/assets/css/variables.css

    r3452604 r3454525  
    1010   ======================================== */
    1111@font-face {
    12    font-family: 'Poppins';
    13    src: url('../fonts/Poppins-Thin.ttf') format('truetype');
    14    font-weight: 100;
    15    font-style: normal;
    16    font-display: swap;
    17 }
    18 
    19 @font-face {
    20    font-family: 'Poppins';
    21    src: url('../fonts/Poppins-ExtraLight.ttf') format('truetype');
    22    font-weight: 200;
    23    font-style: normal;
    24    font-display: swap;
    25 }
    26 
    27 @font-face {
    28    font-family: 'Poppins';
    29    src: url('../fonts/Poppins-Light.ttf') format('truetype');
    30    font-weight: 300;
    31    font-style: normal;
    32    font-display: swap;
    33 }
    34 
    35 @font-face {
    36    font-family: 'Poppins';
    37    src: url('../fonts/Poppins-Regular.ttf') format('truetype');
    38    font-weight: 400;
    39    font-style: normal;
    40    font-display: swap;
    41 }
    42 
    43 @font-face {
    44    font-family: 'Poppins';
    45    src: url('../fonts/Poppins-Medium.ttf') format('truetype');
    46    font-weight: 500;
    47    font-style: normal;
    48    font-display: swap;
    49 }
    50 
    51 @font-face {
    52    font-family: 'Poppins';
    53    src: url('../fonts/Poppins-SemiBold.ttf') format('truetype');
    54    font-weight: 600;
    55    font-style: normal;
    56    font-display: swap;
    57 }
    58 
    59 @font-face {
    60    font-family: 'Poppins';
    61    src: url('../fonts/Poppins-Bold.ttf') format('truetype');
    62    font-weight: 700;
    63    font-style: normal;
    64    font-display: swap;
    65 }
    66 
    67 @font-face {
    68    font-family: 'Poppins';
    69    src: url('../fonts/Poppins-ExtraBold.ttf') format('truetype');
    70    font-weight: 800;
    71    font-style: normal;
    72    font-display: swap;
    73 }
    74 
    75 @font-face {
    76    font-family: 'Poppins';
    77    src: url('../fonts/Poppins-Black.ttf') format('truetype');
    78    font-weight: 900;
    79    font-style: normal;
    80    font-display: swap;
     12    font-family: 'Poppins';
     13    src: url('../fonts/Poppins-Thin.ttf') format('truetype');
     14    font-weight: 100;
     15    font-style: normal;
     16    font-display: swap;
     17}
     18
     19@font-face {
     20    font-family: 'Poppins';
     21    src: url('../fonts/Poppins-ExtraLight.ttf') format('truetype');
     22    font-weight: 200;
     23    font-style: normal;
     24    font-display: swap;
     25}
     26
     27@font-face {
     28    font-family: 'Poppins';
     29    src: url('../fonts/Poppins-Light.ttf') format('truetype');
     30    font-weight: 300;
     31    font-style: normal;
     32    font-display: swap;
     33}
     34
     35@font-face {
     36    font-family: 'Poppins';
     37    src: url('../fonts/Poppins-Regular.ttf') format('truetype');
     38    font-weight: 400;
     39    font-style: normal;
     40    font-display: swap;
     41}
     42
     43@font-face {
     44    font-family: 'Poppins';
     45    src: url('../fonts/Poppins-Medium.ttf') format('truetype');
     46    font-weight: 500;
     47    font-style: normal;
     48    font-display: swap;
     49}
     50
     51@font-face {
     52    font-family: 'Poppins';
     53    src: url('../fonts/Poppins-SemiBold.ttf') format('truetype');
     54    font-weight: 600;
     55    font-style: normal;
     56    font-display: swap;
     57}
     58
     59@font-face {
     60    font-family: 'Poppins';
     61    src: url('../fonts/Poppins-Bold.ttf') format('truetype');
     62    font-weight: 700;
     63    font-style: normal;
     64    font-display: swap;
     65}
     66
     67@font-face {
     68    font-family: 'Poppins';
     69    src: url('../fonts/Poppins-ExtraBold.ttf') format('truetype');
     70    font-weight: 800;
     71    font-style: normal;
     72    font-display: swap;
     73}
     74
     75@font-face {
     76    font-family: 'Poppins';
     77    src: url('../fonts/Poppins-Black.ttf') format('truetype');
     78    font-weight: 900;
     79    font-style: normal;
     80    font-display: swap;
    8181}
    8282
    8383:root {
    84    /* ========================================
     84    /* ========================================
    8585       BRAND COLORS - User Specified
    8686       ======================================== */
    87    --cnc-acf-primary-color: #6167F8;
    88    /* Primary brand blue */
    89    --cnc-acf-primary-light: #AECFFF;
    90    /* Light brand blue */
    91    --cnc-acf-primary-accent: #9966FF;
    92    /* Purple accent */
    93    --cnc-acf-primary-gradient: linear-gradient(135deg, #AECFFF 0%, #6167F8 100%);
    94 
    95    /* ========================================
     87    --cnc-acf-primary-color: #6167F8;
     88    /* Primary brand blue */
     89    --cnc-acf-primary-light: #AECFFF;
     90    /* Light brand blue */
     91    --cnc-acf-primary-accent: #9966FF;
     92    /* Purple accent */
     93    --cnc-acf-primary-gradient: linear-gradient(135deg, #AECFFF 0%, #6167F8 100%);
     94
     95    /* ========================================
    9696       TEXT COLORS
    9797       ======================================== */
    98    --cnc-acf-text-black: #000000;
    99    /* Black text */
    100    --cnc-acf-text-white: #FFFFFF;
    101    /* White text */
    102 
    103    /* ========================================
     98    --cnc-acf-text-black: #000000;
     99    /* Black text */
     100    --cnc-acf-text-white: #FFFFFF;
     101    /* White text */
     102
     103    --cnc-acf-text-dark: #111827;
     104    --cnc-acf-text-gray-dark: #374151;
     105    --cnc-acf-text-gray-medium: #4b5563;
     106    --cnc-acf-text-gray: #6b7280;
     107    --cnc-acf-text-light-gray: #9ca3af;
     108
     109    /* ========================================
    104110       STATUS COLORS
    105111       ======================================== */
    106    --cnc-acf-success-color: #22bb67;
    107    /* Success green */
    108    --cnc-acf-warning-color: #ed4d4d;
    109    /* Warning red */
    110    --cnc-acf-danger-color: #ed4d4d;
    111    /* Danger red (same as warning) */
    112    --cnc-acf-info-color: #6167F8;
    113    /* Info - using primary brand color */
    114 
    115    /* ========================================
     112    --cnc-acf-success-color: #22bb67;
     113    /* Success green */
     114    --cnc-acf-warning-color: #ed4d4d;
     115    /* Warning red */
     116    --cnc-acf-danger-color: #ed4d4d;
     117    /* Danger red (same as warning) */
     118    --cnc-acf-info-color: #6167F8;
     119    /* Info - using primary brand color */
     120
     121    /* ========================================
    116122       BACKGROUND COLORS
    117123       ======================================== */
    118    --cnc-acf-white: #FFFFFF;
    119    --cnc-acf-black: #000000;
    120    --cnc-acf-overlay-bg: rgba(0, 0, 0, 0.8);
    121 
    122    /* ========================================
     124    --cnc-acf-white: #FFFFFF;
     125    --cnc-acf-black: #000000;
     126    --cnc-acf-overlay-bg: rgba(0, 0, 0, 0.6);
     127    --cnc-acf-bg-gray-light: #f9fafb;
     128    --cnc-acf-bg-gray-lighter: #f3f4f6;
     129    --cnc-acf-bg-purple-light: #faf5ff;
     130    --cnc-acf-bg-purple-lighter: #f5f3ff;
     131    --cnc-acf-btn-gradient: linear-gradient(135deg, #6167F8 0%, #8b5cf6 100%);
     132
     133    /* ========================================
     134       BORDER COLORS
     135       ======================================== */
     136    --cnc-acf-border-gray: #e5e7eb;
     137    --cnc-acf-border-purple-light: #c4b5fd;
     138
     139    /* ========================================
    123140       TYPOGRAPHY - Poppins Font
    124141       ======================================== */
    125    --cnc-acf-line-height-tight: 1.25;
    126    --cnc-acf-line-height-normal: 1.5;
    127    --cnc-acf-line-height-relaxed: 1.75;
    128 
    129    /* ========================================
     142    --cnc-acf-line-height-tight: 1.25;
     143    --cnc-acf-line-height-normal: 1.5;
     144    --cnc-acf-line-height-relaxed: 1.75;
     145
     146    /* ========================================
    130147       SPACING - Consistent Rhythm
    131148       ======================================== */
    132    --cnc-acf-spacing-xs: 8px;
    133    --cnc-acf-spacing-sm: 12px;
    134    --cnc-acf-spacing-md: 16px;
    135    --cnc-acf-spacing-lg: 24px;
    136    --cnc-acf-spacing-xl: 32px;
    137    --cnc-acf-spacing-2xl: 40px;
    138 
    139    /* ========================================
     149    --cnc-acf-spacing-xs: 8px;
     150    --cnc-acf-spacing-sm: 12px;
     151    --cnc-acf-spacing-md: 16px;
     152    --cnc-acf-spacing-lg: 24px;
     153    --cnc-acf-spacing-xl: 32px;
     154    --cnc-acf-spacing-2xl: 40px;
     155
     156    /* ========================================
    140157       BORDER RADIUS - Sharp & Rectangular
    141158       ======================================== */
    142    --cnc-acf-radius-none: 0;
    143    --cnc-acf-radius-sm: 2px;
    144    /* Very subtle corners */
    145    --cnc-acf-radius-md: 3px;
    146    /* Slightly rounded */
    147    --cnc-acf-radius-lg: 4px;
    148    /* Minimal rounding */
    149    --cnc-acf-radius-xl: 6px;
    150    /* Modal corners */
    151    --cnc-acf-radius-full: 9999px;
    152    /* Only for close button */
    153 
    154 
    155    /* ========================================
     159    --cnc-acf-radius-none: 0;
     160    --cnc-acf-radius-sm: 2px;
     161    /* Very subtle corners */
     162    --cnc-acf-radius-md: 3px;
     163    /* Slightly rounded */
     164    --cnc-acf-radius-lg: 4px;
     165    /* Minimal rounding */
     166    --cnc-acf-radius-xl: 6px;
     167    /* Modal corners */
     168    --cnc-acf-radius-full: 9999px;
     169    /* Only for close button */
     170
     171
     172    /* ========================================
    156173       BORDERS
    157174       ======================================== */
    158    --cnc-acf-border-width: 1px;
    159    --cnc-acf-border-width-thick: 2px;
    160    --cnc-acf-border-color: var(--cnc-acf-border-gray);
    161    --cnc-acf-border-color-hover: #D1D5DB;
    162 
    163    /* ========================================
     175    --cnc-acf-border-width: 1px;
     176    --cnc-acf-border-width-thick: 2px;
     177    --cnc-acf-border-color: var(--cnc-acf-border-gray);
     178    --cnc-acf-border-color-hover: #D1D5DB;
     179
     180    /* ========================================
    164181       SHADOWS - Subtle Depth
    165182       ======================================== */
    166    --cnc-acf-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
    167    --cnc-acf-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
    168    --cnc-acf-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
    169    --cnc-acf-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
    170    --cnc-acf-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
    171    --cnc-acf-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
    172 
    173    /* ========================================
     183    --cnc-acf-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
     184    --cnc-acf-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
     185    --cnc-acf-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
     186    --cnc-acf-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
     187    --cnc-acf-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
     188    --cnc-acf-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
     189
     190    /* ========================================
    174191       TRANSITIONS - Smooth Interactions
    175192       ======================================== */
    176    --cnc-acf-transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
    177    --cnc-acf-transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1);
    178    --cnc-acf-transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
    179 
    180    /* ========================================
     193    --cnc-acf-transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
     194    --cnc-acf-transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1);
     195    --cnc-acf-transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
     196
     197    /* ========================================
    181198       Z-INDEX
    182199       ======================================== */
    183    --cnc-acf-z-dropdown: 1000;
    184    --cnc-acf-z-sticky: 1020;
    185    --cnc-acf-z-fixed: 1030;
    186    --cnc-acf-z-modal-backdrop: 1040;
    187    --cnc-acf-z-modal: 1050;
    188    --cnc-acf-z-popover: 1060;
    189    --cnc-acf-z-tooltip: 1070;
    190 
    191    /* ========================================
     200    --cnc-acf-z-dropdown: 1000;
     201    --cnc-acf-z-sticky: 1020;
     202    --cnc-acf-z-fixed: 1030;
     203    --cnc-acf-z-modal-backdrop: 1040;
     204    --cnc-acf-z-modal: 1050;
     205    --cnc-acf-z-popover: 1060;
     206    --cnc-acf-z-tooltip: 1070;
     207
     208    /* ========================================
    192209       BUTTON SPECIFIC
    193210       ======================================== */
    194    --cnc-acf-btn-padding-y: 10px;
    195    --cnc-acf-btn-padding-x: 24px;
    196    --cnc-acf-btn-padding-sm-y: 8px;
    197    --cnc-acf-btn-padding-sm-x: 16px;
    198    --cnc-acf-btn-padding-lg-y: 12px;
    199    --cnc-acf-btn-padding-lg-x: 32px;
    200 
    201    /* ========================================
     211    --cnc-acf-btn-padding-y: 10px;
     212    --cnc-acf-btn-padding-x: 24px;
     213    --cnc-acf-btn-padding-sm-y: 8px;
     214    --cnc-acf-btn-padding-sm-x: 16px;
     215    --cnc-acf-btn-padding-lg-y: 12px;
     216    --cnc-acf-btn-padding-lg-x: 32px;
     217
     218    /* ========================================
    202219       POPUP/MODAL SPECIFIC
    203220       ======================================== */
    204    --cnc-acf-popup-max-width: 600px;
    205    --cnc-acf-popup-max-height: 80vh;
    206    --cnc-acf-modal-max-width: 480px;
    207 }
     221    --cnc-acf-popup-max-width: 600px;
     222    --cnc-acf-popup-max-height: 80vh;
     223    --cnc-acf-modal-max-width: 480px;
     224}
  • cross-site-copy-field-for-acf/trunk/cross-site-copy-field-acf.php

    r3452604 r3454525  
    33 * Plugin Name: Cross Site Copy Field for ACF
    44 * Description: Duplicate and transfer ACF field definitions between field groups and across WordPress sites. Supports nested fields, automatic key generation, and JSON-based transfer.
    5  * Version: 1.0.0
     5 * Version: 1.0.1
    66 * Author: Code and Core
    77 * Author URI: https://codeandcore.com
     
    120120    $rest_api = new CSCF_ACF_Rest_API();
    121121    $rest_api->init();
     122
     123    // Initialize Tracking
     124    // Check for "do not track" constant if you want to be nice, but standard is just the option
     125    $tracking = new CSCF_ACF_Tracking();
     126    $tracking->init();
     127
     128    // Initialize Deactivation Feedback
     129    $deactivation = new CSCF_ACF_Deactivation();
     130    $deactivation->init();
    122131}
    123132add_action('plugins_loaded', 'cscf_acf_init');
     
    138147    // Flush rewrite rules for REST API
    139148    flush_rewrite_rules();
     149
     150    // Tracking
     151    if (class_exists('CSCF_ACF_Tracking')) {
     152        $tracking = new CSCF_ACF_Tracking();
     153        $tracking->send_tracking('Activation');
     154
     155        // Save current version for future comparisons
     156        if (!function_exists('get_plugin_data')) {
     157            require_once(ABSPATH . 'wp-admin/includes/plugin.php');
     158        }
     159        $info = get_plugin_data(__FILE__);
     160        update_option('cscf_acf_plugin_version', $info['Version']);
     161    }
     162
     163    // Set transient for redirect
     164    set_transient('cscf_acf_activation_redirect', true, 30);
    140165}
    141166register_activation_hook(__FILE__, 'cscf_acf_activate');
     
    151176    // Flush rewrite rules
    152177    flush_rewrite_rules();
     178
     179    // Tracking
     180    if (class_exists('CSCF_ACF_Tracking')) {
     181        $tracking = new CSCF_ACF_Tracking();
     182        $tracking->send_tracking('Deactivation');
     183    }
    153184}
    154185register_deactivation_hook(__FILE__, 'cscf_acf_deactivate');
     186
     187/**
     188 * Uninstall hook
     189 */
     190register_uninstall_hook(__FILE__, ['CSCF_ACF_Tracking', 'uninstall']);
  • cross-site-copy-field-for-acf/trunk/readme.txt

    r3452604 r3454525  
    44Requires at least: 5.8
    55Tested up to: 6.9
    6 Stable tag: 1.0.0
     6Stable tag: 1.0.1
    77Requires PHP: 7.4
    88License: GPLv2 or later
     
    5353Note: Complex field types like Repeater, Flexible Content, and Group require ACF PRO.
    5454
     55= Privacy & Data Collection =
     56
     57**Your Privacy Matters**
     58
     59This plugin respects your privacy and operates with full transparency:
     60
     61* **No Automatic Data Collection** - The plugin does not collect or transmit any data without your explicit consent
     62* **Opt-In Telemetry** - You can optionally enable anonymous usage tracking from Settings > ACF WYSIWYG Limit to help improve the plugin
     63* **Deactivation Feedback** - When deactivating, you can choose to share feedback to help us improve. This is completely optional
     64* **No Personal Content** - We never collect your post content, user passwords, or sensitive information
     65* **What We Collect (Only if you opt-in)**:
     66  - Plugin version and settings
     67  - WordPress and PHP versions
     68  - Theme information
     69  - Site language and multisite status
     70  - Anonymous site URL (for duplicate detection only)
     71
     72**Deactivation Feedback**
     73
     74When you deactivate the plugin, a feedback modal appears asking for your reason. This helps us improve the plugin:
     75
     76* **Completely Optional** - You can skip and deactivate immediately
     77* **Contact Consent** - Check the consent box only if you want us to follow up with support
     78* **Your Choice** - Your name and email are only sent if you check the consent checkbox
     79
    5580== Installation ==
    5681
     
    99124== Changelog ==
    100125
     126= 1.0.1 - 2026-02-05 =
     127* Enhanced: Deactivation feedback popup UI with new Dashicons and better hover effects
     128* Fix: Moved deactivation logic to separate class for better organization
     129* Fix: Resolved security lint errors (escaping, sanitization, nonce verification)
     130* Fix: CSS variable usage for easier maintenance
     131* Improvement: Made support contact consent optional in deactivation popup
     132
    101133= 1.0.0 - 2026-02-03 =
    102134* Initial release
     
    112144== Upgrade Notice ==
    113145
     146= 1.0.1 =
     147Includes UI improvements, security fixes, and enhanced deactivation feedback logic.
     148
    114149= 1.0.0 =
    115150Initial release of Cross Site Copy Field for ACF.
Note: See TracChangeset for help on using the changeset viewer.