Plugin Directory

Changeset 3782631


Ignore:
Timestamp:
11/03/2026 09:15:42 PM (31 hours ago)
Author:
georgelivid
Message:

Update to version 2.1.0 from GitHub

Location:
livid-video-hosting
Files:
44 added
44 edited
1 copied

Legend:

Unmodified
Added
Removed
  • livid-video-hosting/tags/2.1.0/CHANGELOG.md

    r3755224 r3782631  
    11# @livid/vimeo-migrator-wordpress
     2
     3## 2.1.0
     4
     5### Minor Changes
     6
     7- ad2bdc5: Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds.
     8
     9  Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes.
     10
     11  Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity.
     12
     13  Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API.
    214
    315## 2.0.3
  • livid-video-hosting/tags/2.1.0/README.md

    r3755224 r3782631  
    1111- **Elementor widget** — A first-class **Livid Video** widget, plus Livid URL support in the background Video Link control.
    1212- **WPBakery element** — A **Livid Video** element and a general-purpose `[livid_video]` shortcode, plus Livid URL support in the row/section/column background video control.
     13- **Avada Builder** — An editable **Livid Video** element and `[fusion_livid_video]` shortcode, click-to-load previews, native on-page lightboxes, container backgrounds, and playback controls for supported post/portfolio FlexSlider embeds. Migration covers the static content and metadata fields listed below.
    1314- **Bricks element** — A **Livid Video** element registered from the plugin (no child theme needed), plus Livid URL support in Bricks' background video and lightbox video controls and in the native Video element's **File URL** / dynamic-data source (including ACF values inside templates and popups), with Bricks' poster click-to-load, iframe title, builder preview and pause-on-popup-close behaviour matched.
    1415- **Slider Revolution** — Livid as a video type in Slider Revolution 7 video layers and slide backgrounds, with full playback control (autoplay, loop, start/end, volume, mute, next-slide-on-end) driven over the embed's Player.js API.
    1516- **LearnDash LMS** — Livid lesson and topic embeds work with LearnDash video progression, including resume tracking and completion at the natural end of playback.
    1617- **Sensei LMS** — Livid iframes in lesson content support required-video completion, automatic lesson completion, and tab-away pausing through Sensei's progression hooks. Tested against Sensei 4.26.4. Course settings and per-block required/optional overrides are respected, including lessons with other supported video providers. Completion requires the player's natural `ended` event; looping videos do not complete lessons. This does not add support for Sensei interactive-video overlays or migrate Sensei-specific custom fields.
    17 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.
     18- **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Avada, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.
    1819
    1920## Installation
    … …  
    2526### Scope
    2627
    27 The scanner searches across all public post types (posts, pages, CPTs) in `publish`, `draft`, `future`, `pending`, and `private` statuses. For each candidate post it reads these sources:
    28 
    29 - `wp_posts.post_content` — for the classic editor / Gutenberg formats (including WPBakery shortcodes).
     28The scanner searches public post types (posts, pages, CPTs), plus the registered Avada content types `fusion_element`, `fusion_template`, `fusion_tb_section`, and `awb_off_canvas`, in `publish`, `draft`, `future`, `pending`, and `private` statuses. Other private post types are not added. For each candidate post it reads these sources:
     29
     30- `wp_posts.post_content` — for the classic editor / Gutenberg formats, WPBakery elements, and supported Avada shortcode attributes.
    3031- `wp_postmeta._elementor_data` — for pages built with Elementor.
    3132- `wp_postmeta._bricks_page_content_2` — for pages built with Bricks.
     33- `wp_postmeta._fusion` — Avada's `video_url` lightbox URL, raw iframe HTML in `video`, and the active Vimeo `vimeo_id` on Avada Slider records. Other fields remain unchanged.
     34- Legacy `pyre_video_url`, `pyre_video`, and active slide `pyre_vimeo_id` — only when Avada still reads the legacy source. Any existing `_fusion` array, including an empty array, takes precedence. Content layouts can also suppress legacy metadata; those potentially inactive sources are excluded and reported for inspection.
    3235- LearnDash's `lesson_video_url` setting — for lesson and topic video progression, read and written through LearnDash's public settings API.
    3336
    34 It does **not** scan options, widgets (sidebars), or arbitrary post meta beyond the builders' data blobs.
     37The migration scan does not rewrite global options, widgets, or arbitrary post meta beyond these fields. Diagnostics separately audits every Vimeo-bearing option record and every Avada global-settings leaf, without row or leaf sample limits. It also reports authored dynamic video bindings and their known source owners; it does not execute arbitrary callbacks or rewrite template fallbacks.
    3538
    3639### Embed Formats
    … …  
    4750| **Elementor widgets** | Video / HTML / Text Editor widgets containing Vimeo | `Elementor_Strategy` |
    4851| **WPBakery elements** | `[vc_video]` links and Vimeo iframes in `[vc_raw_html]`/`[vc_raw_js]` blocks | `Wpbakery_Strategy` |
     52| **Avada Vimeo elements** | `[fusion_vimeo id="123" /]`, also accepting a Vimeo URL | `Avada_Strategy` |
     53| **Avada native URL controls** | Lightbox `video_url`, button/column `link`, container `video_url` | `Avada_Attribute_Strategy` |
     54| **Avada post/portfolio video fields** | `_fusion.video_url` and iframe sources in `_fusion.video` | `Avada_Post_Meta_Strategy` |
     55| **Avada Slider source** | Active slide `_fusion.type="vimeo"` with `vimeo_id` | `Avada_Slider_Strategy` |
     56| **Avada legacy video fields** | Active `pyre_video_url`, `pyre_video`, `pyre_vimeo_id` | `Avada_Legacy_Meta_Strategy` |
     57| **Avada encoded Code Blocks** | Base64 `fusion_code` payloads containing supported iframes, anchors, Vimeo elements or native video URL controls | `Avada_Code_Strategy` |
    4958| **Bricks elements** | Video elements and Vimeo iframes in rich-text elements | `Bricks_Strategy` |
    5059| **LearnDash progression** | Lesson/topic `lesson_video_url` setting | `Learndash_Video_Strategy` |
    … …  
    91100
    92101- **WPBakery** `[vc_video]` shortcodes are converted to `[livid_video]`; Vimeo iframes inside `[vc_raw_html]`/`[vc_raw_js]` blocks are swapped within the base64-encoded payload.
     102- **Avada** static `[fusion_vimeo]` shortcodes become `[fusion_livid_video url="…"]`. Native lightbox, button, column and background controls retain their original shortcode and receive a Livid URL. The `_fusion` strategy changes only the selected video field or iframe and snapshots the whole original option map before writeback. Selected duplicates have separate locators, changed source values produce conflicts, and retries recognize the exact replacement. Escaped shortcodes and dynamically bound source attributes are skipped; unrelated title or layout bindings remain intact. Encoded Code Block selections are rewritten inside their payload and retain native base64 storage.
    93103- **Bricks elements** are rewritten by walking the serialized element list in `_bricks_page_content_2` and mutating the target element by its stable `id`. Video elements are converted to the first-class `livid-video` element (settings re-mapped, underscore-prefixed style settings preserved); rich-text elements keep their type but get their iframe `src` swapped. Signature-verified code elements are deliberately skipped.
    94104- **LearnDash progression URLs** are replaced with the clean Livid `/embed/…` player URL through LearnDash's public settings API. Other progression settings and lesson content are untouched. Because LearnDash keys partial playback resume data by video URL, learners' in-progress playback positions reset for replaced videos; completed lesson/course records are not modified.
    … …  
    98108- An in-progress migration can be cancelled from the admin UI. Pending Action Scheduler jobs check a cancellation flag before executing.
    99109- If the admin leaves the page mid-flow (after selection but before pickup), a "Resume" button appears on return.
     110
     111## Avada Builder
     112
     113Add **Livid Video** in Avada Builder, or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element accepts Livid watch, video and embed URLs and has a Live Builder preview. Migration accepts numeric IDs and individual Vimeo URLs in static `[fusion_vimeo]` elements, including paired and self-closing forms nested inside containers and columns.
     114
     115| Surface | Migration and playback support |
     116| --- | --- |
     117| Vimeo element | Converts to Livid Video while retaining dimensions, alignment, margins, responsive visibility, CSS class/ID, `title_attribute`, `start_time`, and supported autoplay/mute/loop parameters. |
     118| Video facade | Respects explicit `video_facade="on"` / `"off"` or Avada's inherited setting. Loads a Livid thumbnail and an accessible play button; the iframe is created on click. If the thumbnail is unavailable, the button remains usable. |
     119| Native lightbox links | Migrates `fusion_lightbox` video URLs and button/column links. Existing on-page galleries and native programmatic iLightbox URL/array calls retain captions, dimensions and navigation; Livid players mount for the active item and unload on change/close. Ordinary button/column links remain links. |
     120| Container background | Migrates Vimeo URLs and bare numeric Vimeo IDs in `fusion_builder_container.video_url`. Bound Livid sources are resolved through Avada before playback. Preserves the native container, image fallback and overlay, with cover sizing, mute, loop and aspect ratio controls. |
     121| Post/portfolio media | Migrates `_fusion.video_url` and iframe sources in `_fusion.video`. Supported `.full-video` / FlexSlider embeds receive Player.js controls for play/pause, slide changes, and natural ending. Active Slider `vimeo_id` fields and the three verified legacy `pyre_*` sources are scanned separately. |
     122| Dynamic sources | Native `fusion_vimeo` resolves its binding through Avada; a trusted Livid URL renders the Livid player with the binding unchanged. Non-source dynamic title/layout settings are retained. Arbitrary source fields and template fallbacks are not automatically rewritten. |
     123| Code Blocks | Decodes native base64 `fusion_code` payloads and migrates supported iframe, anchor and Fusion video sources independently. Rendered trusted Livid embed iframes receive playback lifecycle controls. Dynamically bound block content is audited rather than rewritten. |
     124| Reusable content | Scans supported elements in registered `fusion_element` library entries, `fusion_template` saved templates, `fusion_tb_section` layout sections and `awb_off_canvas` content, as well as public post types. |
     125
     126Facade posters come from Livid's public oEmbed metadata, cached by WordPress for an hour (failed lookups for five minutes). Live Builder URL changes use an authenticated same-site metadata endpoint restricted to editors and supported Livid URLs. Preview playback remains available if a poster is missing.
     127
     128Custom bound iLightBox galleries with global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available. For an instance recovered after earlier initialization, reapply the setting through its adapter-wrapped `instance.setOption({ smartRecognition: true })`; the native API has no option getter, so existing custom global recognition cannot be recovered automatically.
     129
     130The shared Player.js adapter accepts messages only from the matching iframe and trusted Livid origin. It reconnects after iframe loads, discovers dynamic renders, releases removed players, pauses hidden content, and coordinates supported FlexSlider playback. Native Modal and Off Canvas close events pause playback immediately, including during exit animations. Off Canvas opening rediscovers its content; backgrounds can resume after becoming visible, while ordinary videos wait for the visitor to play them again. An explicit user pause cancels background resume.
     131
     132Native URL-field rewrites carry supported `autoplay`, `muted`, `loop`, `playsinline`, `dnt` and `transparent` flags, plus a positive start offset. Unsupported Vimeo query parameters are discarded. Explicit native background controls continue to determine autoplay, mute and loop for that container.
     133
     134Diagnostics v4 adds `global_option_audit`, `avada_dynamic_sources` and `avada_legacy_layout_sources`. The option audit includes all Vimeo-matching rows, classifies cache/history/widget/settings records, and reports exact leaf paths and canonical public video references. Avada language settings, JSON and base64 values are inspected recursively. The dynamic audit reports exact element/attribute paths, known custom-field owners and video IDs, and distinguishes templates whose values depend on the rendering page. The legacy audit lists exact `pyre_*` owners and public video IDs excluded because a content layout or override filter may suppress the field. Global content sections take precedence; custom layout conditions depend on the rendering context, so discovery conservatively excludes legacy sources when such a content layout exists. Header/footer-only layouts do not cause this exclusion. The audit never invokes Avada's mutating metadata promotion or query-dependent layout resolver. Credentials, private URL query/hash values and full settings values are omitted; incomplete traversal or database errors are flagged. Discovery is separate from authorization to rewrite an option or source field.
     135
     136Use Avada's native Code Block element for raw iframe HTML. On the tested site, placing a literal iframe inside a Text Block prevented Live Builder saves; the same full page saved with that iframe in an encoded Code Block. This integration does not alter Avada's save handler or encode authors' Text Block content.
     137
     138Remaining limits: global options, widgets, arbitrary dynamic source fields/callbacks, and unrelated private post types are not automatically migrated. Context-dependent bindings stay intact and require inspection of the actual source record. Malformed encoded payloads and dynamically replaced Code Block content are not rewritten. Vimeo-specific structured data, animation controls and arbitrary API parameters are not reproduced by Livid Video. Autoplay remains subject to browser policy and video availability. Keep the plugin active, clear external page caches after migration, and verify each surface used by the site.
     139
     140The implementation follows [ThemeFusion's element extension example](https://github.com/Theme-Fusion/Fusion-Builder-Sample-Add-On/tree/front-end), [Avada's Vimeo options](https://classic.avada.com/documentation/vimeo-element/) and [its iLightbox integration](https://classic.avada.com/documentation/how-to-show-videos-in-lightbox/). The native source/markup contract was checked against Avada Builder 3.16.2 and Core 5.16.2. Automated tests cover migration, snapshots, rendering and player lifecycle behavior; they do not establish parity across every Avada release or third-party extension.
    100141
    101142## Sensei LMS completion
    … …  
    172213    class-bootstrap.php            # vc_map + [livid_video] shortcode registration
    173214    class-element-video.php        # First-class Livid Video element
     215  avada/
     216    class-bootstrap.php            # Early builder mapping and playback assets
     217    class-element-video.php        # Livid Video shortcode, facade and controls
     218    class-native-surfaces.php      # Native container background integration
     219    class-thumbnail.php            # Authenticated Live Builder poster metadata
     220    video-view.js                  # Live Builder values and custom view
     221    video-preview.php              # Live Builder preview template
    174222  bricks/
    175223    class-bootstrap.php            # Element registration, frontend script, builder i18n
    … …  
    207255      class-elementor-strategy.php
    208256      class-wpbakery-strategy.php
     257      class-avada-strategy.php
     258      class-avada-attribute-strategy.php
     259      class-avada-post-meta-strategy.php
     260      class-avada-url-options.php
    209261      class-bricks-strategy.php
    210262      class-learndash-video-strategy.php
    … …  
    213265  js/livid-admin.js                # Admin UI: scan, popup coordinator, progress
    214266  js/livid-elementor-background.js # Livid URLs in Elementor background videos
     267  js/livid-avada-player.js         # Player.js lifecycle, facade and FlexSlider controls
     268  js/livid-avada-native.js         # Native on-page iLightbox and container backgrounds
    215269  js/livid-bricks-frontend.js      # Livid URLs in Bricks background/lightbox videos (File URL videos are swapped server-side in bricks/class-bootstrap.php)
    216270  css/livid-admin.css              # Admin styles
  • livid-video-hosting/tags/2.1.0/assets/js/livid-admin.js

    r3749371 r3782631  
    938938
    939939        var advisoryHtml = '<div class="notice notice-info inline">' +
    940             '<p>We check post content, supported Elementor/WPBakery/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +
     940            '<p>We check post content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +
    941941            '</div>';
    942942        $('#livid-advisory').html(advisoryHtml);
  • livid-video-hosting/tags/2.1.0/blocks/video/block.json

    r3755224 r3782631  
    33    "apiVersion": 3,
    44    "name": "livid/video",
    5     "version": "2.0.3",
     5    "version": "2.1.0",
    66    "title": "Livid Video",
    77    "category": "embed",
  • livid-video-hosting/tags/2.1.0/blocks/video/index.asset.php

    r3755224 r3782631  
    1010        'wp-server-side-render',
    1111    ),
    12     'version'      => '2.0.3',
     12    'version'      => '2.1.0',
    1313);
  • livid-video-hosting/tags/2.1.0/includes/class-admin.php

    r3755224 r3782631  
    8484            LIVID_PLUGIN_URL . 'assets/js/livid-admin.js',
    8585            [ 'jquery' ],
    86             LIVID_VERSION,
     86            Assets::version( 'assets/js/livid-admin.js' ),
    8787            true
    8888        );
    … …  
    9292            LIVID_PLUGIN_URL . 'assets/css/livid-admin.css',
    9393            [],
    94             LIVID_VERSION
     94            Assets::version( 'assets/css/livid-admin.css' )
    9595        );
    9696
    … …  
    146146
    147147                <div class="livid-scope-notice">
    148                     <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Bricks data, and LearnDash lesson/topic video progression. We don&rsquo;t look in sidebars, footers, options, or other custom fields—if you use those, you may need to update them yourself.</p>
     148                    <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash lesson/topic video progression. Avada coverage includes saved templates, elements, layout sections, Off Canvas content, Code Blocks, and supported video metadata and Slider fields. Diagnostics also audit Avada dynamic sources and global settings; those sources and unrelated custom fields may need manual updates.</p>
    149149                </div>
    150150
  • livid-video-hosting/tags/2.1.0/includes/class-diagnostics-report.php

    r3749371 r3782631  
    7171                        '_about'              => self::about(),
    7272                        'meta'                => [
    73                                 'report_version'   => 3,
     73                                'report_version'   => 4,
    7474                                'generated_at_gmt' => gmdate( 'c' ),
    7575                                'plugin_version'   => defined( 'LIVID_VERSION' ) ? LIVID_VERSION : 'unknown',
    … …  
    8484                        'livid_blocks'        => $this->livid_blocks(),
    8585                        'strategy_inputs'     => $this->strategy_inputs( $sweep, $breakdown ),
     86                        'global_option_audit' => ( new \Livid\Avada\Option_Audit( $this->wpdb ) )->build(),
     87                        'avada_dynamic_sources' => \Livid\Avada\Dynamic_Audit::build( $this->wpdb ),
     88                        'avada_legacy_layout_sources' => \Livid\Avada\Legacy_Layout_Guard::audit( $this->wpdb ),
    8689                ];
    8790        }
    … …  
    102105                                'A few longer excerpts (up to ~3,200 characters for structured fields) of the embed code / field around each "vimeo" reference, so we can build the fix without asking you for more.',
    103106                                'A count of Livid video blocks already placed on the site, split by whether each block has a video URL set — so we can spot blocks that were added but never given a URL (which render nothing).',
     107                                'Every Vimeo-matching option record and Avada global-settings leaf: option name, classification, exact field path, encoding, and public video ID or collection path. Private URL hashes and query strings are omitted; the settings values themselves are never included.',
    104108                        ],
    105109                        'what_we_do_not_collect' => [
    … …  
    204208                        'Tutor LMS'        => [ 'tutor/' ],
    205209                        'WPBakery'         => [ 'js_composer/', 'js_composer_salient/' ],
     210                        'Avada'            => [ 'avada', 'fusion-builder/', 'fusion-core/' ],
    206211                        'Divi'             => [ 'divi', 'et_builder', 'elegant' ],
    207212                        'Beaver Builder'   => [ 'bb-plugin/', 'fl-builder' ],
  • livid-video-hosting/tags/2.1.0/includes/class-iframe-renderer.php

    r3749114 r3782631  
    119119    }
    120120
     121    /** Public oEmbed poster, cached separately from long-lived title/dimensions. */
     122    public static function thumbnail( string $video_id, string $web_url = '' ): ?string {
     123        $web_url = $web_url !== '' ? rtrim( $web_url, '/' ) : Config::web_url();
     124        $key = 'livid_thumbnail_' . md5( $web_url . '|' . $video_id );
     125        $cached = get_transient( $key );
     126        if ( is_string( $cached ) ) {
     127            return $cached !== '' ? $cached : null;
     128        }
     129        $meta = self::fetch_oembed_meta( $video_id, $web_url );
     130        $thumbnail = $meta['thumbnail'] ?? '';
     131        // Thumbnail URLs can change independently of a video's dimensions.
     132        set_transient( $key, $thumbnail, $thumbnail !== '' ? HOUR_IN_SECONDS : 300 );
     133        return $thumbnail !== '' ? $thumbnail : null;
     134    }
     135
    121136    /**
    122137     * Cached oEmbed metadata (ratio, title) per video and origin. Dimensions
    … …  
    136151        }
    137152
    138         $meta = self::fetch_oembed_meta( $video_id, $web_url );
    139 
    140         set_transient( $cache_key, $meta ?? [], $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS );
    141 
    142         return $meta ?? [];
     153        $meta = self::fetch_oembed_meta( $video_id, $web_url ) ?? [];
     154        // Posters have their own cache. A poster alone must not turn missing
     155        // title/dimensions into a successful, month-long metadata cache entry.
     156        unset( $meta['thumbnail'] );
     157
     158        set_transient( $cache_key, $meta, $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS );
     159
     160        return $meta;
    143161    }
    144162
    … …  
    175193            $meta['title'] = trim( wp_strip_all_tags( $data['title'] ) );
    176194        }
     195        if ( isset( $data['thumbnail_url'] ) && is_string( $data['thumbnail_url'] ) ) {
     196            $thumbnail = trim( $data['thumbnail_url'] );
     197            $parts = wp_parse_url( $thumbnail );
     198            if ( is_array( $parts ) && isset( $parts['host'], $parts['scheme'] )
     199                && in_array( strtolower( $parts['scheme'] ), [ 'http', 'https' ], true )
     200                && ! isset( $parts['user'] ) && ! isset( $parts['pass'] )
     201                && ! preg_match( '/[\x00-\x20]/', $thumbnail )
     202            ) {
     203                $meta['thumbnail'] = $thumbnail;
     204            }
     205        }
    177206
    178207        return $meta;
  • livid-video-hosting/tags/2.1.0/includes/class-plugin.php

    r3749371 r3782631  
    2323use Livid\Migration\Strategies\Anchor_Strategy;
    2424use Livid\Migration\Strategies\Wpbakery_Strategy;
     25use Livid\Migration\Strategies\Avada_Strategy;
     26use Livid\Migration\Strategies\Avada_Attribute_Strategy;
     27use Livid\Migration\Strategies\Avada_Post_Meta_Strategy;
     28use Livid\Migration\Strategies\Avada_Code_Strategy;
     29use Livid\Migration\Strategies\Avada_Slider_Strategy;
     30use Livid\Migration\Strategies\Avada_Legacy_Meta_Strategy;
    2531use Livid\Migration\Strategies\Bricks_Strategy;
    2632use Livid\Migration\Strategies\Learndash_Video_Strategy;
    … …  
    4248
    4349    public function __construct() {
     50        // Avada maps its elements before WordPress init on some versions.
     51        new \Livid\Avada\Bootstrap();
     52
    4453        $this->strategies = new Strategy_Registry();
    4554        $this->register_strategies();
    … …  
    120129        $this->strategies->register( new Elementor_Strategy() );
    121130        $this->strategies->register( new Wpbakery_Strategy() );
     131        $this->strategies->register( new Avada_Strategy() );
     132        $this->strategies->register( new Avada_Attribute_Strategy() );
     133        $this->strategies->register( new Avada_Post_Meta_Strategy() );
     134        $this->strategies->register( new Avada_Code_Strategy() );
     135        $this->strategies->register( new Avada_Slider_Strategy() );
     136        foreach ( [ 'video_url', 'video', 'vimeo_id' ] as $field ) {
     137            $this->strategies->register( new Avada_Legacy_Meta_Strategy( $field ) );
     138        }
    122139        $this->strategies->register( new Bricks_Strategy() );
    123140        $this->strategies->register( new Learndash_Video_Strategy() );
  • livid-video-hosting/tags/2.1.0/includes/migration/jobs/class-scan-job.php

    r3749371 r3782631  
    4040            $warnings['vimeography'] = 'Vimeography galleries store Vimeo sources in separate tables and are not migrated. Rebuild these galleries before closing your Vimeo account.';
    4141        }
     42        if ( stripos( implode( ' ', $plugins ), 'fusion-builder/' ) !== false || stripos( implode( ' ', $plugins ), 'fusion-core/' ) !== false ) {
     43            $warnings['avada'] = 'Avada dynamic source fields, global settings and legacy fields potentially suppressed by content layouts are audited separately and are not automatically rewritten. Review global_option_audit, avada_dynamic_sources and avada_legacy_layout_sources in diagnostics before retiring Vimeo; runtime playback support does not establish source migration.';
     44        }
    4245        if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
    4346            $warnings['cron'] = 'WP-Cron is disabled. Migration needs a working external cron or Action Scheduler runner; check Tools > Scheduled Actions if progress stops.';
    … …  
    6568        $public_types  = get_post_types( [ 'public' => true ] );
    6669        $exclude_types = [ 'revision', 'auto-draft', 'attachment', 'nav_menu_item' ];
    67         $include_types = array_diff( $public_types, $exclude_types );
     70        // Avada renders saved elements, layout sections and off-canvas content
     71        // from private post types. Only include these known, registered types;
     72        // unrelated private application data is outside the content scan.
     73        $avada_types   = array_intersect(
     74            [ 'fusion_template', 'fusion_element', 'fusion_tb_section', 'awb_off_canvas' ],
     75            get_post_types()
     76        );
     77        $include_types = array_values( array_diff( array_unique( array_merge( $public_types, $avada_types ) ), $exclude_types ) );
    6878
    6979        if ( empty( $include_types ) ) {
    … …  
    7888        // whose base64 payload never contains the literal "vimeo" — become candidates.
    7989        $content_like  = array_merge(
    80             [ '%vimeo%', '%elementor-action%' ],
     90            // Avada container backgrounds accept bare numeric Vimeo IDs;
     91            // encoded Code Blocks carry no searchable plain provider name.
     92            [ '%vimeo%', '%elementor-action%', '%[fusion_builder_container%', '%[fusion_code%' ],
    8193            array_map(
    8294                static function ( $marker ) {
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-anchor-strategy.php

    r3749371 r3782631  
    3838        $tags = new \WP_HTML_Tag_Processor( $html );
    3939        $urls = [];
    40         while ( $tags->next_tag( 'a' ) ) { $urls[] = self::url( $tags ); }
     40        $inactive = \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'a' );
     41        while ( $tags->next_tag( 'a' ) ) { $urls[] = isset( $inactive[ count( $urls ) ] ) ? null : self::url( $tags ); }
    4142        return $urls;
    4243    }
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-bare-url-strategy.php

    r3749371 r3782631  
    121121
    122122        $by_offset = [];
     123        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    123124        foreach ( $found as $unit ) {
    124             $unit['kind']                = $unit['kind'] ?? 'url';
     125            $unit['kind']                = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ? 'inactive' : ( $unit['kind'] ?? 'url' );
    125126            $by_offset[ $unit['offset'] ] = $unit;
    126127        }
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-gutenberg-embed-strategy.php

    r3749114 r3782631  
    2828        }
    2929
    30         $units   = self::embed_units( parse_blocks( $post_content ) );
     30        $units   = self::active_embed_units( parse_blocks( $post_content ), $post_content );
    3131        $urls    = array_map( [ self::class, 'unit_fingerprint' ], $units );
    3232        $matches = [];
    … …  
    7070
    7171        $blocks = parse_blocks( $post_content );
    72         $units  = self::embed_units( $blocks );
     72        $units  = self::active_embed_units( $blocks, $post_content );
    7373
    7474        $target = Unit_Locator::resolve(
    … …  
    141141            }
    142142        }
     143        return $units;
     144    }
     145
     146    private static function active_embed_units( array $blocks, string $content ): array {
     147        $units = self::embed_units( $blocks );
     148        $inactive = \Livid\Avada\Dynamic_Sources::inactive_block_indexes( $content, 'core/embed' );
     149        $index = 0;
     150        foreach ( $units as &$unit ) {
     151            if ( isset( $inactive[ $index++ ] ) ) { $unit['url'] = ''; }
     152        }
     153        unset( $unit );
    143154        return $units;
    144155    }
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-iframe-strategy.php

    r3749114 r3782631  
    8383                $new_src = self::transfer_universal_params( $src, $context->get_livid_player_url() );
    8484                $processor->set_attribute( 'src', $new_src );
    85                 return self::strip_vimeo_player_script( $processor->get_updated_html() );
     85                $updated = $processor->get_updated_html();
     86                // An unselected Vimeo player may still rely on its SDK. Only
     87                // remove the shared script after the final Vimeo iframe moves.
     88                foreach ( self::iframe_srcs( $updated, true ) as $remaining_src ) {
     89                    if ( is_string( $remaining_src ) && Vimeo_Url_Parser::extract_id( $remaining_src ) !== null ) {
     90                        return $updated;
     91                    }
     92                }
     93                return self::strip_vimeo_player_script( $updated );
    8694            }
    8795            $index++;
    … …  
    94102     * @return array<int, string|null> src of every iframe, in document order.
    95103     */
    96     private static function iframe_srcs( string $html ): array {
     104    private static function iframe_srcs( string $html, bool $include_inactive = false ): array {
    97105        $srcs      = [];
     106        $inactive  = $include_inactive ? [] : \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'iframe' );
    98107        $processor = new \WP_HTML_Tag_Processor( $html );
    99108        while ( $processor->next_tag( 'iframe' ) ) {
    100109            $src    = $processor->get_attribute( 'src' );
    101             $srcs[] = is_string( $src ) ? $src : null;
     110            $srcs[] = ! isset( $inactive[ count( $srcs ) ] ) && is_string( $src ) ? $src : null;
    102111        }
    103112        return $srcs;
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-vimeo-shortcode-strategy.php

    r3749114 r3782631  
    127127            return $a['offset'] <=> $b['offset'];
    128128        } );
     129        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
     130        foreach ( $units as &$unit ) {
     131            if ( \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ) {
     132                $unit['kind'] = 'inactive';
     133                $unit['vimeo_id'] = '';
     134            }
     135        }
     136        unset( $unit );
    129137        return array_values( $units );
    130138    }
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-wp-embed-shortcode-strategy.php

    r3749114 r3782631  
    9595        }
    9696        $units = [];
     97        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    9798        foreach ( $all[2] as $m ) {
    98             $units[] = [ 'offset' => $m[1], 'url' => $m[0] ];
     99            $units[] = [ 'offset' => $m[1], 'url' => \Livid\Avada\Dynamic_Sources::offset_is_inactive( $m[1], $inactive ) ? '' : $m[0] ];
    99100        }
    100101        return $units;
  • livid-video-hosting/tags/2.1.0/includes/migration/strategies/class-wpbakery-strategy.php

    r3749114 r3782631  
    176176
    177177        $counts = [];
     178        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    178179        foreach ( $all as $m ) {
    179180            // Escaped shortcode: [[vc_video]] renders literally — skip.
    … …  
    186187            $tag    = $m[2][0];
    187188            $n      = $counts[ $tag ] ?? 0;
     189            $is_inactive = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $offset, $inactive );
    188190
    189191            $counts[ $tag ] = $n + 1;
    … …  
    199201                    'offset'          => $offset,
    200202                    'text'            => $full,
    201                     'link'            => $link,
     203                    'link'            => $is_inactive ? '' : $link,
    202204                    'src'             => null,
    203205                    'iframe_index'    => null,
    … …  
    222224                    'text'            => $full,
    223225                    'link'            => '',
    224                     'src'             => is_string( $src ) ? $src : null,
     226                    'src'             => ! $is_inactive && is_string( $src ) ? $src : null,
    225227                    'iframe_index'    => $idx,
    226228                ];
  • livid-video-hosting/tags/2.1.0/livid.php

    r3755224 r3782631  
    33 * Plugin Name: Livid - Video Hosting
    44 * Description: Embed Livid videos and migrate from Vimeo to Livid
    5  * Version: 2.0.3
     5 * Version: 2.1.0
    66 * Requires at least: 6.5
    77 * Requires PHP: 7.4
    … …  
    1818define( 'LIVID_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    1919define( 'LIVID_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    20 define( 'LIVID_VERSION', '2.0.3' );
     20define( 'LIVID_VERSION', '2.1.0' );
    2121
    2222require_once LIVID_PLUGIN_DIR . 'vendor/autoload.php';
  • livid-video-hosting/tags/2.1.0/readme.txt

    r3755224 r3782631  
    44Tested up to: 7.1
    55Requires PHP: 7.4
    6 Stable tag: 2.0.3
     6Stable tag: 2.1.0
    77License: MIT
    88License URI: https://opensource.org/licenses/MIT
    … …  
    2121
    2222* **Automatic embeds** — Paste any livid.com URL and it auto-embeds
    23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode
     23* **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, Avada Builder, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode
     24* **Avada playback** — Click-to-load previews, existing on-page iLightbox galleries, container video backgrounds, and playback controls for supported post/portfolio FlexSlider embeds
    2425* **Sensei LMS ready** — Required-video completion, automatic lesson completion, and tab-away pausing; repeated required Livid embeds are tracked separately and mixed-provider lessons wait for all required videos
    2526* **LearnDash ready** — Livid lesson and topic embeds support LearnDash video progression, resume tracking, and completion
    26 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, Bricks elements, and LearnDash lesson/topic progression URLs
     27* **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, supported Avada elements and video fields, Bricks elements, and LearnDash lesson/topic progression URLs
    2728* **Background processing** — Scan and migration run as Action Scheduler jobs so they won't time out on large sites
    2829* **Safe replacement** — Only replaces the specific videos you select through the Livid migration popup
    … …  
    4142= Scope =
    4243
    43 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), and LearnDash's `lesson_video_url` setting for lessons/topics. Options, widget content, theme settings, and other post meta are not modified.
     44Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), Avada's `_fusion.video_url`, iframe sources in `_fusion.video`, active Slider `vimeo_id` fields and their verified legacy `pyre_*` equivalents, and LearnDash's `lesson_video_url` setting for lessons/topics. It includes public post types and registered Avada saved elements, templates, layout sections and Off Canvas records, in published, scheduled, draft, pending and private statuses. Global theme options, widget content and other post meta are not modified.
    4445
    4546== Installation ==
    … …  
    6768= What embed formats are supported? =
    6869
    69 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs.
     70Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), supported Avada static elements and post/portfolio video fields, Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs.
     71
     72= Does Avada Builder support Livid? =
     73
     74Add a Livid Video element in Avada Builder or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element supports a Live Builder preview, native layout settings, accessible title, start time, autoplay, mute and loop. Video Facade follows the element's on/off setting or Avada's default and shows a Livid thumbnail with a play button before loading the iframe.
     75
     76Migration covers static `[fusion_vimeo]` elements, Lightbox video URLs, button/column links, container video URLs and numeric Vimeo IDs, supported sources in encoded Code Blocks, modern `_fusion` post/portfolio and active Slider video fields, and the verified legacy `pyre_*` equivalents when still active. Existing on-page iLightbox galleries keep their groups, captions and navigation; background videos keep the container layout, cover sizing, mute and loop controls. Supported post/portfolio FlexSlider embeds use Player.js for playback and slide changes. Registered `fusion_element`, `fusion_template`, `fusion_tb_section` and `awb_off_canvas` content is scanned too. Metadata edits have an immutable pre-write snapshot.
     77
     78Native dynamic Vimeo elements and container backgrounds can render a Livid URL returned by Avada’s resolver while retaining the source binding. Diagnostics reports all Vimeo-bearing option records and Avada dynamic video bindings, with exact field paths and known owners; private tokens and full setting values are omitted. Legacy pyre video fields are excluded and audited when a content layout or override filter could suppress them; the background scanner does not execute Avada's context-dependent layout resolver or metadata promotion. Global options, widgets, arbitrary dynamic source fields/callbacks, malformed encoded blocks and unrelated private post types are not automatically migrated. Templates may resolve a different source on each page and need inspection of that actual source. Native programmatic iLightbox URL/array calls are supported. Modal/Off Canvas close events pause playback immediately, with visibility checks for hidden content. Vimeo-specific structured data, animations and arbitrary API options are not reproduced. The integration was checked against Builder 3.16.2 and Core 5.16.2 and does not claim complete Avada parity. Keep the plugin active and verify the surfaces used by your site after migration.
     79
     80Custom bound iLightBox galleries using global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available, or reapply the setting through the adapter-wrapped `instance.setOption({ smartRecognition: true })`. The native API cannot expose a custom gallery's earlier recognition setting.
    7081
    7182= How do I enable Sensei video completion? =
    … …  
    8899
    89100== External Services ==
    90 This plugin interacts with Livid in two ways:
     101This plugin interacts with Livid in these ways:
    911021. Video migration
    92103When you initiate a migration, the plugin sends a listing of Vimeo videos found on your site along with basic information about the pages they appear on. This is necessary so that Livid can match the Vimeo videos on your site to the ones you have uploaded to your Livid account. No data is sent unless you actively start a migration.
    931042. oEmbed provider
    94105This plugin registers Livid as an oEmbed provider in WordPress. When a Livid video URL is embedded in a post or page, WordPress will make a request to Livid's oEmbed endpoint to retrieve embed information (such as the video title and player HTML). This happens whenever a post containing a Livid embed is edited or its embed cache is refreshed.
    95 Both interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy).
     1063. Video playback and previews
     107The visitor's browser loads Livid players and preview images where they are embedded. For Avada click-to-load facades, WordPress requests public oEmbed thumbnail metadata and caches successful lookups for an hour and failures for five minutes. The browser loads the returned preview image before the player is opened; the player iframe is created when the visitor clicks the play button. Live Builder preview lookups use an authenticated same-site endpoint.
     108These interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy).
    96109
    97110== Changelog ==
     111
     112= 2.1.0 =
     113* Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API.
    98114
    99115= 2.0.3 =
  • livid-video-hosting/tags/2.1.0/vendor/composer/autoload_classmap.php

    r3755224 r3782631  
    99    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    1010    'Livid\\Admin' => $baseDir . '/includes/class-admin.php',
     11    'Livid\\Assets' => $baseDir . '/includes/class-assets.php',
     12    'Livid\\Avada\\Bootstrap' => $baseDir . '/includes/avada/class-bootstrap.php',
     13    'Livid\\Avada\\Dynamic_Audit' => $baseDir . '/includes/avada/class-dynamic-audit.php',
     14    'Livid\\Avada\\Dynamic_Sources' => $baseDir . '/includes/avada/class-dynamic-sources.php',
     15    'Livid\\Avada\\Element_Video' => $baseDir . '/includes/avada/class-element-video.php',
     16    'Livid\\Avada\\Legacy_Layout_Guard' => $baseDir . '/includes/avada/class-legacy-layout-guard.php',
     17    'Livid\\Avada\\Native_Surfaces' => $baseDir . '/includes/avada/class-native-surfaces.php',
     18    'Livid\\Avada\\Option_Audit' => $baseDir . '/includes/avada/class-option-audit.php',
     19    'Livid\\Avada\\Slider' => $baseDir . '/includes/avada/class-slider.php',
     20    'Livid\\Avada\\Thumbnail' => $baseDir . '/includes/avada/class-thumbnail.php',
    1121    'Livid\\Block' => $baseDir . '/includes/class-block.php',
    1222    'Livid\\Bricks\\Bootstrap' => $baseDir . '/includes/bricks/class-bootstrap.php',
    … …  
    4050    'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => $baseDir . '/includes/migration/strategies/class-acf-field-strategy.php',
    4151    'Livid\\Migration\\Strategies\\Anchor_Strategy' => $baseDir . '/includes/migration/strategies/class-anchor-strategy.php',
     52    'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-attribute-strategy.php',
     53    'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-code-strategy.php',
     54    'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php',
     55    'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-post-meta-strategy.php',
     56    'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-slider-strategy.php',
     57    'Livid\\Migration\\Strategies\\Avada_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-strategy.php',
     58    'Livid\\Migration\\Strategies\\Avada_Url_Options' => $baseDir . '/includes/migration/strategies/class-avada-url-options.php',
    4259    'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => $baseDir . '/includes/migration/strategies/class-bare-url-strategy.php',
    4360    'Livid\\Migration\\Strategies\\Bricks_Strategy' => $baseDir . '/includes/migration/strategies/class-bricks-strategy.php',
  • livid-video-hosting/tags/2.1.0/vendor/composer/autoload_static.php

    r3755224 r3782631  
    1010        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
    1111        'Livid\\Admin' => __DIR__ . '/../..' . '/includes/class-admin.php',
     12        'Livid\\Assets' => __DIR__ . '/../..' . '/includes/class-assets.php',
     13        'Livid\\Avada\\Bootstrap' => __DIR__ . '/../..' . '/includes/avada/class-bootstrap.php',
     14        'Livid\\Avada\\Dynamic_Audit' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-audit.php',
     15        'Livid\\Avada\\Dynamic_Sources' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-sources.php',
     16        'Livid\\Avada\\Element_Video' => __DIR__ . '/../..' . '/includes/avada/class-element-video.php',
     17        'Livid\\Avada\\Legacy_Layout_Guard' => __DIR__ . '/../..' . '/includes/avada/class-legacy-layout-guard.php',
     18        'Livid\\Avada\\Native_Surfaces' => __DIR__ . '/../..' . '/includes/avada/class-native-surfaces.php',
     19        'Livid\\Avada\\Option_Audit' => __DIR__ . '/../..' . '/includes/avada/class-option-audit.php',
     20        'Livid\\Avada\\Slider' => __DIR__ . '/../..' . '/includes/avada/class-slider.php',
     21        'Livid\\Avada\\Thumbnail' => __DIR__ . '/../..' . '/includes/avada/class-thumbnail.php',
    1222        'Livid\\Block' => __DIR__ . '/../..' . '/includes/class-block.php',
    1323        'Livid\\Bricks\\Bootstrap' => __DIR__ . '/../..' . '/includes/bricks/class-bootstrap.php',
    … …  
    4151        'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-acf-field-strategy.php',
    4252        'Livid\\Migration\\Strategies\\Anchor_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-anchor-strategy.php',
     53        'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-attribute-strategy.php',
     54        'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-code-strategy.php',
     55        'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php',
     56        'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-post-meta-strategy.php',
     57        'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-slider-strategy.php',
     58        'Livid\\Migration\\Strategies\\Avada_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-strategy.php',
     59        'Livid\\Migration\\Strategies\\Avada_Url_Options' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-url-options.php',
    4360        'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bare-url-strategy.php',
    4461        'Livid\\Migration\\Strategies\\Bricks_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bricks-strategy.php',
  • livid-video-hosting/tags/2.1.0/vendor/composer/installed.php

    r3755224 r3782631  
    22    'root' => array(
    33        'name' => 'livid/livid-wordpress',
    4         'pretty_version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    5         'version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    6         'reference' => 'dbba50ef9f273677ad15dc3385c455f1a4af24da',
     4        'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     5        'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     6        'reference' => '1959aad0a9187c378a66944ee439bd418b491589',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
    … …  
    1212    'versions' => array(
    1313        'livid/livid-wordpress' => array(
    14             'pretty_version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    15             'version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    16             'reference' => 'dbba50ef9f273677ad15dc3385c455f1a4af24da',
     14            'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     15            'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     16            'reference' => '1959aad0a9187c378a66944ee439bd418b491589',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
  • livid-video-hosting/trunk/CHANGELOG.md

    r3755224 r3782631  
    11# @livid/vimeo-migrator-wordpress
     2
     3## 2.1.0
     4
     5### Minor Changes
     6
     7- ad2bdc5: Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds.
     8
     9  Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes.
     10
     11  Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity.
     12
     13  Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API.
    214
    315## 2.0.3
  • livid-video-hosting/trunk/README.md

    r3755224 r3782631  
    1111- **Elementor widget** — A first-class **Livid Video** widget, plus Livid URL support in the background Video Link control.
    1212- **WPBakery element** — A **Livid Video** element and a general-purpose `[livid_video]` shortcode, plus Livid URL support in the row/section/column background video control.
     13- **Avada Builder** — An editable **Livid Video** element and `[fusion_livid_video]` shortcode, click-to-load previews, native on-page lightboxes, container backgrounds, and playback controls for supported post/portfolio FlexSlider embeds. Migration covers the static content and metadata fields listed below.
    1314- **Bricks element** — A **Livid Video** element registered from the plugin (no child theme needed), plus Livid URL support in Bricks' background video and lightbox video controls and in the native Video element's **File URL** / dynamic-data source (including ACF values inside templates and popups), with Bricks' poster click-to-load, iframe title, builder preview and pause-on-popup-close behaviour matched.
    1415- **Slider Revolution** — Livid as a video type in Slider Revolution 7 video layers and slide backgrounds, with full playback control (autoplay, loop, start/end, volume, mute, next-slide-on-end) driven over the embed's Player.js API.
    1516- **LearnDash LMS** — Livid lesson and topic embeds work with LearnDash video progression, including resume tracking and completion at the natural end of playback.
    1617- **Sensei LMS** — Livid iframes in lesson content support required-video completion, automatic lesson completion, and tab-away pausing through Sensei's progression hooks. Tested against Sensei 4.26.4. Course settings and per-block required/optional overrides are respected, including lessons with other supported video providers. Completion requires the player's natural `ended` event; looping videos do not complete lessons. This does not add support for Sensei interactive-video overlays or migrate Sensei-specific custom fields.
    17 - **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.
     18- **Vimeo Migration** — Scan post content, page-builder data (Elementor, WPBakery, Avada, Bricks), and LearnDash lesson/topic progression URLs for Vimeo embeds, select which to migrate via the Livid platform, and rewrite them in-place as background jobs.
    1819
    1920## Installation
    … …  
    2526### Scope
    2627
    27 The scanner searches across all public post types (posts, pages, CPTs) in `publish`, `draft`, `future`, `pending`, and `private` statuses. For each candidate post it reads these sources:
    28 
    29 - `wp_posts.post_content` — for the classic editor / Gutenberg formats (including WPBakery shortcodes).
     28The scanner searches public post types (posts, pages, CPTs), plus the registered Avada content types `fusion_element`, `fusion_template`, `fusion_tb_section`, and `awb_off_canvas`, in `publish`, `draft`, `future`, `pending`, and `private` statuses. Other private post types are not added. For each candidate post it reads these sources:
     29
     30- `wp_posts.post_content` — for the classic editor / Gutenberg formats, WPBakery elements, and supported Avada shortcode attributes.
    3031- `wp_postmeta._elementor_data` — for pages built with Elementor.
    3132- `wp_postmeta._bricks_page_content_2` — for pages built with Bricks.
     33- `wp_postmeta._fusion` — Avada's `video_url` lightbox URL, raw iframe HTML in `video`, and the active Vimeo `vimeo_id` on Avada Slider records. Other fields remain unchanged.
     34- Legacy `pyre_video_url`, `pyre_video`, and active slide `pyre_vimeo_id` — only when Avada still reads the legacy source. Any existing `_fusion` array, including an empty array, takes precedence. Content layouts can also suppress legacy metadata; those potentially inactive sources are excluded and reported for inspection.
    3235- LearnDash's `lesson_video_url` setting — for lesson and topic video progression, read and written through LearnDash's public settings API.
    3336
    34 It does **not** scan options, widgets (sidebars), or arbitrary post meta beyond the builders' data blobs.
     37The migration scan does not rewrite global options, widgets, or arbitrary post meta beyond these fields. Diagnostics separately audits every Vimeo-bearing option record and every Avada global-settings leaf, without row or leaf sample limits. It also reports authored dynamic video bindings and their known source owners; it does not execute arbitrary callbacks or rewrite template fallbacks.
    3538
    3639### Embed Formats
    … …  
    4750| **Elementor widgets** | Video / HTML / Text Editor widgets containing Vimeo | `Elementor_Strategy` |
    4851| **WPBakery elements** | `[vc_video]` links and Vimeo iframes in `[vc_raw_html]`/`[vc_raw_js]` blocks | `Wpbakery_Strategy` |
     52| **Avada Vimeo elements** | `[fusion_vimeo id="123" /]`, also accepting a Vimeo URL | `Avada_Strategy` |
     53| **Avada native URL controls** | Lightbox `video_url`, button/column `link`, container `video_url` | `Avada_Attribute_Strategy` |
     54| **Avada post/portfolio video fields** | `_fusion.video_url` and iframe sources in `_fusion.video` | `Avada_Post_Meta_Strategy` |
     55| **Avada Slider source** | Active slide `_fusion.type="vimeo"` with `vimeo_id` | `Avada_Slider_Strategy` |
     56| **Avada legacy video fields** | Active `pyre_video_url`, `pyre_video`, `pyre_vimeo_id` | `Avada_Legacy_Meta_Strategy` |
     57| **Avada encoded Code Blocks** | Base64 `fusion_code` payloads containing supported iframes, anchors, Vimeo elements or native video URL controls | `Avada_Code_Strategy` |
    4958| **Bricks elements** | Video elements and Vimeo iframes in rich-text elements | `Bricks_Strategy` |
    5059| **LearnDash progression** | Lesson/topic `lesson_video_url` setting | `Learndash_Video_Strategy` |
    … …  
    91100
    92101- **WPBakery** `[vc_video]` shortcodes are converted to `[livid_video]`; Vimeo iframes inside `[vc_raw_html]`/`[vc_raw_js]` blocks are swapped within the base64-encoded payload.
     102- **Avada** static `[fusion_vimeo]` shortcodes become `[fusion_livid_video url="…"]`. Native lightbox, button, column and background controls retain their original shortcode and receive a Livid URL. The `_fusion` strategy changes only the selected video field or iframe and snapshots the whole original option map before writeback. Selected duplicates have separate locators, changed source values produce conflicts, and retries recognize the exact replacement. Escaped shortcodes and dynamically bound source attributes are skipped; unrelated title or layout bindings remain intact. Encoded Code Block selections are rewritten inside their payload and retain native base64 storage.
    93103- **Bricks elements** are rewritten by walking the serialized element list in `_bricks_page_content_2` and mutating the target element by its stable `id`. Video elements are converted to the first-class `livid-video` element (settings re-mapped, underscore-prefixed style settings preserved); rich-text elements keep their type but get their iframe `src` swapped. Signature-verified code elements are deliberately skipped.
    94104- **LearnDash progression URLs** are replaced with the clean Livid `/embed/…` player URL through LearnDash's public settings API. Other progression settings and lesson content are untouched. Because LearnDash keys partial playback resume data by video URL, learners' in-progress playback positions reset for replaced videos; completed lesson/course records are not modified.
    … …  
    98108- An in-progress migration can be cancelled from the admin UI. Pending Action Scheduler jobs check a cancellation flag before executing.
    99109- If the admin leaves the page mid-flow (after selection but before pickup), a "Resume" button appears on return.
     110
     111## Avada Builder
     112
     113Add **Livid Video** in Avada Builder, or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element accepts Livid watch, video and embed URLs and has a Live Builder preview. Migration accepts numeric IDs and individual Vimeo URLs in static `[fusion_vimeo]` elements, including paired and self-closing forms nested inside containers and columns.
     114
     115| Surface | Migration and playback support |
     116| --- | --- |
     117| Vimeo element | Converts to Livid Video while retaining dimensions, alignment, margins, responsive visibility, CSS class/ID, `title_attribute`, `start_time`, and supported autoplay/mute/loop parameters. |
     118| Video facade | Respects explicit `video_facade="on"` / `"off"` or Avada's inherited setting. Loads a Livid thumbnail and an accessible play button; the iframe is created on click. If the thumbnail is unavailable, the button remains usable. |
     119| Native lightbox links | Migrates `fusion_lightbox` video URLs and button/column links. Existing on-page galleries and native programmatic iLightbox URL/array calls retain captions, dimensions and navigation; Livid players mount for the active item and unload on change/close. Ordinary button/column links remain links. |
     120| Container background | Migrates Vimeo URLs and bare numeric Vimeo IDs in `fusion_builder_container.video_url`. Bound Livid sources are resolved through Avada before playback. Preserves the native container, image fallback and overlay, with cover sizing, mute, loop and aspect ratio controls. |
     121| Post/portfolio media | Migrates `_fusion.video_url` and iframe sources in `_fusion.video`. Supported `.full-video` / FlexSlider embeds receive Player.js controls for play/pause, slide changes, and natural ending. Active Slider `vimeo_id` fields and the three verified legacy `pyre_*` sources are scanned separately. |
     122| Dynamic sources | Native `fusion_vimeo` resolves its binding through Avada; a trusted Livid URL renders the Livid player with the binding unchanged. Non-source dynamic title/layout settings are retained. Arbitrary source fields and template fallbacks are not automatically rewritten. |
     123| Code Blocks | Decodes native base64 `fusion_code` payloads and migrates supported iframe, anchor and Fusion video sources independently. Rendered trusted Livid embed iframes receive playback lifecycle controls. Dynamically bound block content is audited rather than rewritten. |
     124| Reusable content | Scans supported elements in registered `fusion_element` library entries, `fusion_template` saved templates, `fusion_tb_section` layout sections and `awb_off_canvas` content, as well as public post types. |
     125
     126Facade posters come from Livid's public oEmbed metadata, cached by WordPress for an hour (failed lookups for five minutes). Live Builder URL changes use an authenticated same-site metadata endpoint restricted to editors and supported Livid URLs. Preview playback remains available if a poster is missing.
     127
     128Custom bound iLightBox galleries with global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available. For an instance recovered after earlier initialization, reapply the setting through its adapter-wrapped `instance.setOption({ smartRecognition: true })`; the native API has no option getter, so existing custom global recognition cannot be recovered automatically.
     129
     130The shared Player.js adapter accepts messages only from the matching iframe and trusted Livid origin. It reconnects after iframe loads, discovers dynamic renders, releases removed players, pauses hidden content, and coordinates supported FlexSlider playback. Native Modal and Off Canvas close events pause playback immediately, including during exit animations. Off Canvas opening rediscovers its content; backgrounds can resume after becoming visible, while ordinary videos wait for the visitor to play them again. An explicit user pause cancels background resume.
     131
     132Native URL-field rewrites carry supported `autoplay`, `muted`, `loop`, `playsinline`, `dnt` and `transparent` flags, plus a positive start offset. Unsupported Vimeo query parameters are discarded. Explicit native background controls continue to determine autoplay, mute and loop for that container.
     133
     134Diagnostics v4 adds `global_option_audit`, `avada_dynamic_sources` and `avada_legacy_layout_sources`. The option audit includes all Vimeo-matching rows, classifies cache/history/widget/settings records, and reports exact leaf paths and canonical public video references. Avada language settings, JSON and base64 values are inspected recursively. The dynamic audit reports exact element/attribute paths, known custom-field owners and video IDs, and distinguishes templates whose values depend on the rendering page. The legacy audit lists exact `pyre_*` owners and public video IDs excluded because a content layout or override filter may suppress the field. Global content sections take precedence; custom layout conditions depend on the rendering context, so discovery conservatively excludes legacy sources when such a content layout exists. Header/footer-only layouts do not cause this exclusion. The audit never invokes Avada's mutating metadata promotion or query-dependent layout resolver. Credentials, private URL query/hash values and full settings values are omitted; incomplete traversal or database errors are flagged. Discovery is separate from authorization to rewrite an option or source field.
     135
     136Use Avada's native Code Block element for raw iframe HTML. On the tested site, placing a literal iframe inside a Text Block prevented Live Builder saves; the same full page saved with that iframe in an encoded Code Block. This integration does not alter Avada's save handler or encode authors' Text Block content.
     137
     138Remaining limits: global options, widgets, arbitrary dynamic source fields/callbacks, and unrelated private post types are not automatically migrated. Context-dependent bindings stay intact and require inspection of the actual source record. Malformed encoded payloads and dynamically replaced Code Block content are not rewritten. Vimeo-specific structured data, animation controls and arbitrary API parameters are not reproduced by Livid Video. Autoplay remains subject to browser policy and video availability. Keep the plugin active, clear external page caches after migration, and verify each surface used by the site.
     139
     140The implementation follows [ThemeFusion's element extension example](https://github.com/Theme-Fusion/Fusion-Builder-Sample-Add-On/tree/front-end), [Avada's Vimeo options](https://classic.avada.com/documentation/vimeo-element/) and [its iLightbox integration](https://classic.avada.com/documentation/how-to-show-videos-in-lightbox/). The native source/markup contract was checked against Avada Builder 3.16.2 and Core 5.16.2. Automated tests cover migration, snapshots, rendering and player lifecycle behavior; they do not establish parity across every Avada release or third-party extension.
    100141
    101142## Sensei LMS completion
    … …  
    172213    class-bootstrap.php            # vc_map + [livid_video] shortcode registration
    173214    class-element-video.php        # First-class Livid Video element
     215  avada/
     216    class-bootstrap.php            # Early builder mapping and playback assets
     217    class-element-video.php        # Livid Video shortcode, facade and controls
     218    class-native-surfaces.php      # Native container background integration
     219    class-thumbnail.php            # Authenticated Live Builder poster metadata
     220    video-view.js                  # Live Builder values and custom view
     221    video-preview.php              # Live Builder preview template
    174222  bricks/
    175223    class-bootstrap.php            # Element registration, frontend script, builder i18n
    … …  
    207255      class-elementor-strategy.php
    208256      class-wpbakery-strategy.php
     257      class-avada-strategy.php
     258      class-avada-attribute-strategy.php
     259      class-avada-post-meta-strategy.php
     260      class-avada-url-options.php
    209261      class-bricks-strategy.php
    210262      class-learndash-video-strategy.php
    … …  
    213265  js/livid-admin.js                # Admin UI: scan, popup coordinator, progress
    214266  js/livid-elementor-background.js # Livid URLs in Elementor background videos
     267  js/livid-avada-player.js         # Player.js lifecycle, facade and FlexSlider controls
     268  js/livid-avada-native.js         # Native on-page iLightbox and container backgrounds
    215269  js/livid-bricks-frontend.js      # Livid URLs in Bricks background/lightbox videos (File URL videos are swapped server-side in bricks/class-bootstrap.php)
    216270  css/livid-admin.css              # Admin styles
  • livid-video-hosting/trunk/assets/js/livid-admin.js

    r3749371 r3782631  
    938938
    939939        var advisoryHtml = '<div class="notice notice-info inline">' +
    940             '<p>We check post content, supported Elementor/WPBakery/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +
     940            '<p>We check post content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash video progression. Videos in sidebars, options, unsupported builders, or other custom fields may need to be updated by hand.</p>' +
    941941            '</div>';
    942942        $('#livid-advisory').html(advisoryHtml);
  • livid-video-hosting/trunk/blocks/video/block.json

    r3755224 r3782631  
    33    "apiVersion": 3,
    44    "name": "livid/video",
    5     "version": "2.0.3",
     5    "version": "2.1.0",
    66    "title": "Livid Video",
    77    "category": "embed",
  • livid-video-hosting/trunk/blocks/video/index.asset.php

    r3755224 r3782631  
    1010        'wp-server-side-render',
    1111    ),
    12     'version'      => '2.0.3',
     12    'version'      => '2.1.0',
    1313);
  • livid-video-hosting/trunk/includes/class-admin.php

    r3755224 r3782631  
    8484            LIVID_PLUGIN_URL . 'assets/js/livid-admin.js',
    8585            [ 'jquery' ],
    86             LIVID_VERSION,
     86            Assets::version( 'assets/js/livid-admin.js' ),
    8787            true
    8888        );
    … …  
    9292            LIVID_PLUGIN_URL . 'assets/css/livid-admin.css',
    9393            [],
    94             LIVID_VERSION
     94            Assets::version( 'assets/css/livid-admin.css' )
    9595        );
    9696
    … …  
    146146
    147147                <div class="livid-scope-notice">
    148                     <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Bricks data, and LearnDash lesson/topic video progression. We don&rsquo;t look in sidebars, footers, options, or other custom fields—if you use those, you may need to update them yourself.</p>
     148                    <p><strong>What we check:</strong> We look for Vimeo in post and page content, supported Elementor/WPBakery/Avada/Bricks data, and LearnDash lesson/topic video progression. Avada coverage includes saved templates, elements, layout sections, Off Canvas content, Code Blocks, and supported video metadata and Slider fields. Diagnostics also audit Avada dynamic sources and global settings; those sources and unrelated custom fields may need manual updates.</p>
    149149                </div>
    150150
  • livid-video-hosting/trunk/includes/class-diagnostics-report.php

    r3749371 r3782631  
    7171                        '_about'              => self::about(),
    7272                        'meta'                => [
    73                                 'report_version'   => 3,
     73                                'report_version'   => 4,
    7474                                'generated_at_gmt' => gmdate( 'c' ),
    7575                                'plugin_version'   => defined( 'LIVID_VERSION' ) ? LIVID_VERSION : 'unknown',
    … …  
    8484                        'livid_blocks'        => $this->livid_blocks(),
    8585                        'strategy_inputs'     => $this->strategy_inputs( $sweep, $breakdown ),
     86                        'global_option_audit' => ( new \Livid\Avada\Option_Audit( $this->wpdb ) )->build(),
     87                        'avada_dynamic_sources' => \Livid\Avada\Dynamic_Audit::build( $this->wpdb ),
     88                        'avada_legacy_layout_sources' => \Livid\Avada\Legacy_Layout_Guard::audit( $this->wpdb ),
    8689                ];
    8790        }
    … …  
    102105                                'A few longer excerpts (up to ~3,200 characters for structured fields) of the embed code / field around each "vimeo" reference, so we can build the fix without asking you for more.',
    103106                                'A count of Livid video blocks already placed on the site, split by whether each block has a video URL set — so we can spot blocks that were added but never given a URL (which render nothing).',
     107                                'Every Vimeo-matching option record and Avada global-settings leaf: option name, classification, exact field path, encoding, and public video ID or collection path. Private URL hashes and query strings are omitted; the settings values themselves are never included.',
    104108                        ],
    105109                        'what_we_do_not_collect' => [
    … …  
    204208                        'Tutor LMS'        => [ 'tutor/' ],
    205209                        'WPBakery'         => [ 'js_composer/', 'js_composer_salient/' ],
     210                        'Avada'            => [ 'avada', 'fusion-builder/', 'fusion-core/' ],
    206211                        'Divi'             => [ 'divi', 'et_builder', 'elegant' ],
    207212                        'Beaver Builder'   => [ 'bb-plugin/', 'fl-builder' ],
  • livid-video-hosting/trunk/includes/class-iframe-renderer.php

    r3749114 r3782631  
    119119    }
    120120
     121    /** Public oEmbed poster, cached separately from long-lived title/dimensions. */
     122    public static function thumbnail( string $video_id, string $web_url = '' ): ?string {
     123        $web_url = $web_url !== '' ? rtrim( $web_url, '/' ) : Config::web_url();
     124        $key = 'livid_thumbnail_' . md5( $web_url . '|' . $video_id );
     125        $cached = get_transient( $key );
     126        if ( is_string( $cached ) ) {
     127            return $cached !== '' ? $cached : null;
     128        }
     129        $meta = self::fetch_oembed_meta( $video_id, $web_url );
     130        $thumbnail = $meta['thumbnail'] ?? '';
     131        // Thumbnail URLs can change independently of a video's dimensions.
     132        set_transient( $key, $thumbnail, $thumbnail !== '' ? HOUR_IN_SECONDS : 300 );
     133        return $thumbnail !== '' ? $thumbnail : null;
     134    }
     135
    121136    /**
    122137     * Cached oEmbed metadata (ratio, title) per video and origin. Dimensions
    … …  
    136151        }
    137152
    138         $meta = self::fetch_oembed_meta( $video_id, $web_url );
    139 
    140         set_transient( $cache_key, $meta ?? [], $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS );
    141 
    142         return $meta ?? [];
     153        $meta = self::fetch_oembed_meta( $video_id, $web_url ) ?? [];
     154        // Posters have their own cache. A poster alone must not turn missing
     155        // title/dimensions into a successful, month-long metadata cache entry.
     156        unset( $meta['thumbnail'] );
     157
     158        set_transient( $cache_key, $meta, $meta ? MONTH_IN_SECONDS : HOUR_IN_SECONDS );
     159
     160        return $meta;
    143161    }
    144162
    … …  
    175193            $meta['title'] = trim( wp_strip_all_tags( $data['title'] ) );
    176194        }
     195        if ( isset( $data['thumbnail_url'] ) && is_string( $data['thumbnail_url'] ) ) {
     196            $thumbnail = trim( $data['thumbnail_url'] );
     197            $parts = wp_parse_url( $thumbnail );
     198            if ( is_array( $parts ) && isset( $parts['host'], $parts['scheme'] )
     199                && in_array( strtolower( $parts['scheme'] ), [ 'http', 'https' ], true )
     200                && ! isset( $parts['user'] ) && ! isset( $parts['pass'] )
     201                && ! preg_match( '/[\x00-\x20]/', $thumbnail )
     202            ) {
     203                $meta['thumbnail'] = $thumbnail;
     204            }
     205        }
    177206
    178207        return $meta;
  • livid-video-hosting/trunk/includes/class-plugin.php

    r3749371 r3782631  
    2323use Livid\Migration\Strategies\Anchor_Strategy;
    2424use Livid\Migration\Strategies\Wpbakery_Strategy;
     25use Livid\Migration\Strategies\Avada_Strategy;
     26use Livid\Migration\Strategies\Avada_Attribute_Strategy;
     27use Livid\Migration\Strategies\Avada_Post_Meta_Strategy;
     28use Livid\Migration\Strategies\Avada_Code_Strategy;
     29use Livid\Migration\Strategies\Avada_Slider_Strategy;
     30use Livid\Migration\Strategies\Avada_Legacy_Meta_Strategy;
    2531use Livid\Migration\Strategies\Bricks_Strategy;
    2632use Livid\Migration\Strategies\Learndash_Video_Strategy;
    … …  
    4248
    4349    public function __construct() {
     50        // Avada maps its elements before WordPress init on some versions.
     51        new \Livid\Avada\Bootstrap();
     52
    4453        $this->strategies = new Strategy_Registry();
    4554        $this->register_strategies();
    … …  
    120129        $this->strategies->register( new Elementor_Strategy() );
    121130        $this->strategies->register( new Wpbakery_Strategy() );
     131        $this->strategies->register( new Avada_Strategy() );
     132        $this->strategies->register( new Avada_Attribute_Strategy() );
     133        $this->strategies->register( new Avada_Post_Meta_Strategy() );
     134        $this->strategies->register( new Avada_Code_Strategy() );
     135        $this->strategies->register( new Avada_Slider_Strategy() );
     136        foreach ( [ 'video_url', 'video', 'vimeo_id' ] as $field ) {
     137            $this->strategies->register( new Avada_Legacy_Meta_Strategy( $field ) );
     138        }
    122139        $this->strategies->register( new Bricks_Strategy() );
    123140        $this->strategies->register( new Learndash_Video_Strategy() );
  • livid-video-hosting/trunk/includes/migration/jobs/class-scan-job.php

    r3749371 r3782631  
    4040            $warnings['vimeography'] = 'Vimeography galleries store Vimeo sources in separate tables and are not migrated. Rebuild these galleries before closing your Vimeo account.';
    4141        }
     42        if ( stripos( implode( ' ', $plugins ), 'fusion-builder/' ) !== false || stripos( implode( ' ', $plugins ), 'fusion-core/' ) !== false ) {
     43            $warnings['avada'] = 'Avada dynamic source fields, global settings and legacy fields potentially suppressed by content layouts are audited separately and are not automatically rewritten. Review global_option_audit, avada_dynamic_sources and avada_legacy_layout_sources in diagnostics before retiring Vimeo; runtime playback support does not establish source migration.';
     44        }
    4245        if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
    4346            $warnings['cron'] = 'WP-Cron is disabled. Migration needs a working external cron or Action Scheduler runner; check Tools > Scheduled Actions if progress stops.';
    … …  
    6568        $public_types  = get_post_types( [ 'public' => true ] );
    6669        $exclude_types = [ 'revision', 'auto-draft', 'attachment', 'nav_menu_item' ];
    67         $include_types = array_diff( $public_types, $exclude_types );
     70        // Avada renders saved elements, layout sections and off-canvas content
     71        // from private post types. Only include these known, registered types;
     72        // unrelated private application data is outside the content scan.
     73        $avada_types   = array_intersect(
     74            [ 'fusion_template', 'fusion_element', 'fusion_tb_section', 'awb_off_canvas' ],
     75            get_post_types()
     76        );
     77        $include_types = array_values( array_diff( array_unique( array_merge( $public_types, $avada_types ) ), $exclude_types ) );
    6878
    6979        if ( empty( $include_types ) ) {
    … …  
    7888        // whose base64 payload never contains the literal "vimeo" — become candidates.
    7989        $content_like  = array_merge(
    80             [ '%vimeo%', '%elementor-action%' ],
     90            // Avada container backgrounds accept bare numeric Vimeo IDs;
     91            // encoded Code Blocks carry no searchable plain provider name.
     92            [ '%vimeo%', '%elementor-action%', '%[fusion_builder_container%', '%[fusion_code%' ],
    8193            array_map(
    8294                static function ( $marker ) {
  • livid-video-hosting/trunk/includes/migration/strategies/class-anchor-strategy.php

    r3749371 r3782631  
    3838        $tags = new \WP_HTML_Tag_Processor( $html );
    3939        $urls = [];
    40         while ( $tags->next_tag( 'a' ) ) { $urls[] = self::url( $tags ); }
     40        $inactive = \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'a' );
     41        while ( $tags->next_tag( 'a' ) ) { $urls[] = isset( $inactive[ count( $urls ) ] ) ? null : self::url( $tags ); }
    4142        return $urls;
    4243    }
  • livid-video-hosting/trunk/includes/migration/strategies/class-bare-url-strategy.php

    r3749371 r3782631  
    121121
    122122        $by_offset = [];
     123        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    123124        foreach ( $found as $unit ) {
    124             $unit['kind']                = $unit['kind'] ?? 'url';
     125            $unit['kind']                = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ? 'inactive' : ( $unit['kind'] ?? 'url' );
    125126            $by_offset[ $unit['offset'] ] = $unit;
    126127        }
  • livid-video-hosting/trunk/includes/migration/strategies/class-gutenberg-embed-strategy.php

    r3749114 r3782631  
    2828        }
    2929
    30         $units   = self::embed_units( parse_blocks( $post_content ) );
     30        $units   = self::active_embed_units( parse_blocks( $post_content ), $post_content );
    3131        $urls    = array_map( [ self::class, 'unit_fingerprint' ], $units );
    3232        $matches = [];
    … …  
    7070
    7171        $blocks = parse_blocks( $post_content );
    72         $units  = self::embed_units( $blocks );
     72        $units  = self::active_embed_units( $blocks, $post_content );
    7373
    7474        $target = Unit_Locator::resolve(
    … …  
    141141            }
    142142        }
     143        return $units;
     144    }
     145
     146    private static function active_embed_units( array $blocks, string $content ): array {
     147        $units = self::embed_units( $blocks );
     148        $inactive = \Livid\Avada\Dynamic_Sources::inactive_block_indexes( $content, 'core/embed' );
     149        $index = 0;
     150        foreach ( $units as &$unit ) {
     151            if ( isset( $inactive[ $index++ ] ) ) { $unit['url'] = ''; }
     152        }
     153        unset( $unit );
    143154        return $units;
    144155    }
  • livid-video-hosting/trunk/includes/migration/strategies/class-iframe-strategy.php

    r3749114 r3782631  
    8383                $new_src = self::transfer_universal_params( $src, $context->get_livid_player_url() );
    8484                $processor->set_attribute( 'src', $new_src );
    85                 return self::strip_vimeo_player_script( $processor->get_updated_html() );
     85                $updated = $processor->get_updated_html();
     86                // An unselected Vimeo player may still rely on its SDK. Only
     87                // remove the shared script after the final Vimeo iframe moves.
     88                foreach ( self::iframe_srcs( $updated, true ) as $remaining_src ) {
     89                    if ( is_string( $remaining_src ) && Vimeo_Url_Parser::extract_id( $remaining_src ) !== null ) {
     90                        return $updated;
     91                    }
     92                }
     93                return self::strip_vimeo_player_script( $updated );
    8694            }
    8795            $index++;
    … …  
    94102     * @return array<int, string|null> src of every iframe, in document order.
    95103     */
    96     private static function iframe_srcs( string $html ): array {
     104    private static function iframe_srcs( string $html, bool $include_inactive = false ): array {
    97105        $srcs      = [];
     106        $inactive  = $include_inactive ? [] : \Livid\Avada\Dynamic_Sources::inactive_html_indexes( $html, 'iframe' );
    98107        $processor = new \WP_HTML_Tag_Processor( $html );
    99108        while ( $processor->next_tag( 'iframe' ) ) {
    100109            $src    = $processor->get_attribute( 'src' );
    101             $srcs[] = is_string( $src ) ? $src : null;
     110            $srcs[] = ! isset( $inactive[ count( $srcs ) ] ) && is_string( $src ) ? $src : null;
    102111        }
    103112        return $srcs;
  • livid-video-hosting/trunk/includes/migration/strategies/class-vimeo-shortcode-strategy.php

    r3749114 r3782631  
    127127            return $a['offset'] <=> $b['offset'];
    128128        } );
     129        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
     130        foreach ( $units as &$unit ) {
     131            if ( \Livid\Avada\Dynamic_Sources::offset_is_inactive( $unit['offset'], $inactive ) ) {
     132                $unit['kind'] = 'inactive';
     133                $unit['vimeo_id'] = '';
     134            }
     135        }
     136        unset( $unit );
    129137        return array_values( $units );
    130138    }
  • livid-video-hosting/trunk/includes/migration/strategies/class-wp-embed-shortcode-strategy.php

    r3749114 r3782631  
    9595        }
    9696        $units = [];
     97        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    9798        foreach ( $all[2] as $m ) {
    98             $units[] = [ 'offset' => $m[1], 'url' => $m[0] ];
     99            $units[] = [ 'offset' => $m[1], 'url' => \Livid\Avada\Dynamic_Sources::offset_is_inactive( $m[1], $inactive ) ? '' : $m[0] ];
    99100        }
    100101        return $units;
  • livid-video-hosting/trunk/includes/migration/strategies/class-wpbakery-strategy.php

    r3749114 r3782631  
    176176
    177177        $counts = [];
     178        $inactive = \Livid\Avada\Dynamic_Sources::inactive_content_ranges( $post_content );
    178179        foreach ( $all as $m ) {
    179180            // Escaped shortcode: [[vc_video]] renders literally — skip.
    … …  
    186187            $tag    = $m[2][0];
    187188            $n      = $counts[ $tag ] ?? 0;
     189            $is_inactive = \Livid\Avada\Dynamic_Sources::offset_is_inactive( $offset, $inactive );
    188190
    189191            $counts[ $tag ] = $n + 1;
    … …  
    199201                    'offset'          => $offset,
    200202                    'text'            => $full,
    201                     'link'            => $link,
     203                    'link'            => $is_inactive ? '' : $link,
    202204                    'src'             => null,
    203205                    'iframe_index'    => null,
    … …  
    222224                    'text'            => $full,
    223225                    'link'            => '',
    224                     'src'             => is_string( $src ) ? $src : null,
     226                    'src'             => ! $is_inactive && is_string( $src ) ? $src : null,
    225227                    'iframe_index'    => $idx,
    226228                ];
  • livid-video-hosting/trunk/livid.php

    r3755224 r3782631  
    33 * Plugin Name: Livid - Video Hosting
    44 * Description: Embed Livid videos and migrate from Vimeo to Livid
    5  * Version: 2.0.3
     5 * Version: 2.1.0
    66 * Requires at least: 6.5
    77 * Requires PHP: 7.4
    … …  
    1818define( 'LIVID_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    1919define( 'LIVID_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    20 define( 'LIVID_VERSION', '2.0.3' );
     20define( 'LIVID_VERSION', '2.1.0' );
    2121
    2222require_once LIVID_PLUGIN_DIR . 'vendor/autoload.php';
  • livid-video-hosting/trunk/readme.txt

    r3755224 r3782631  
    44Tested up to: 7.1
    55Requires PHP: 7.4
    6 Stable tag: 2.0.3
     6Stable tag: 2.1.0
    77License: MIT
    88License URI: https://opensource.org/licenses/MIT
    … …  
    2121
    2222* **Automatic embeds** — Paste any livid.com URL and it auto-embeds
    23 * **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode
     23* **Page builder ready** — Native Livid Video elements for Elementor, WPBakery, Avada Builder, and Bricks, a Livid video type in Slider Revolution, plus a `[livid_video]` shortcode
     24* **Avada playback** — Click-to-load previews, existing on-page iLightbox galleries, container video backgrounds, and playback controls for supported post/portfolio FlexSlider embeds
    2425* **Sensei LMS ready** — Required-video completion, automatic lesson completion, and tab-away pausing; repeated required Livid embeds are tracked separately and mixed-provider lessons wait for all required videos
    2526* **LearnDash ready** — Livid lesson and topic embeds support LearnDash video progression, resume tracking, and completion
    26 * **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, Bricks elements, and LearnDash lesson/topic progression URLs
     27* **Supported-format scanning** — Finds Vimeo iframes, Gutenberg embed blocks, bare URLs, `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements, supported Avada elements and video fields, Bricks elements, and LearnDash lesson/topic progression URLs
    2728* **Background processing** — Scan and migration run as Action Scheduler jobs so they won't time out on large sites
    2829* **Safe replacement** — Only replaces the specific videos you select through the Livid migration popup
    … …  
    4142= Scope =
    4243
    43 Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), and LearnDash's `lesson_video_url` setting for lessons/topics. Options, widget content, theme settings, and other post meta are not modified.
     44Migration scans and rewrites `post_content`, supported page-builder data for Elementor (`_elementor_data`) and Bricks (`_bricks_page_content_2`), Avada's `_fusion.video_url`, iframe sources in `_fusion.video`, active Slider `vimeo_id` fields and their verified legacy `pyre_*` equivalents, and LearnDash's `lesson_video_url` setting for lessons/topics. It includes public post types and registered Avada saved elements, templates, layout sections and Off Canvas records, in published, scheduled, draft, pending and private statuses. Global theme options, widget content and other post meta are not modified.
    4445
    4546== Installation ==
    … …  
    6768= What embed formats are supported? =
    6869
    69 Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs.
     70Gutenberg embed blocks, raw iframes, bare Vimeo URLs (auto-embeds), `[embed]` and `[vimeo]` shortcodes, Elementor widgets, WPBakery elements (both `[vc_video]` links and Vimeo iframes inside raw-HTML blocks), supported Avada static elements and post/portfolio video fields, Bricks elements (Video elements and Vimeo iframes inside rich-text elements), and LearnDash lesson/topic video-progression URLs.
     71
     72= Does Avada Builder support Livid? =
     73
     74Add a Livid Video element in Avada Builder or use `[fusion_livid_video url="https://livid.com/watch/VIDEO_ID" /]`. The element supports a Live Builder preview, native layout settings, accessible title, start time, autoplay, mute and loop. Video Facade follows the element's on/off setting or Avada's default and shows a Livid thumbnail with a play button before loading the iframe.
     75
     76Migration covers static `[fusion_vimeo]` elements, Lightbox video URLs, button/column links, container video URLs and numeric Vimeo IDs, supported sources in encoded Code Blocks, modern `_fusion` post/portfolio and active Slider video fields, and the verified legacy `pyre_*` equivalents when still active. Existing on-page iLightbox galleries keep their groups, captions and navigation; background videos keep the container layout, cover sizing, mute and loop controls. Supported post/portfolio FlexSlider embeds use Player.js for playback and slide changes. Registered `fusion_element`, `fusion_template`, `fusion_tb_section` and `awb_off_canvas` content is scanned too. Metadata edits have an immutable pre-write snapshot.
     77
     78Native dynamic Vimeo elements and container backgrounds can render a Livid URL returned by Avada’s resolver while retaining the source binding. Diagnostics reports all Vimeo-bearing option records and Avada dynamic video bindings, with exact field paths and known owners; private tokens and full setting values are omitted. Legacy pyre video fields are excluded and audited when a content layout or override filter could suppress them; the background scanner does not execute Avada's context-dependent layout resolver or metadata promotion. Global options, widgets, arbitrary dynamic source fields/callbacks, malformed encoded blocks and unrelated private post types are not automatically migrated. Templates may resolve a different source on each page and need inspection of that actual source. Native programmatic iLightbox URL/array calls are supported. Modal/Off Canvas close events pause playback immediately, with visibility checks for hidden content. Vimeo-specific structured data, animations and arbitrary API options are not reproduced. The integration was checked against Builder 3.16.2 and Core 5.16.2 and does not claim complete Avada parity. Keep the plugin active and verify the surfaces used by your site after migration.
     79
     80Custom bound iLightBox galleries using global `smartRecognition: true` must initialize after `window.LividAvadaNative` is available, or reapply the setting through the adapter-wrapped `instance.setOption({ smartRecognition: true })`. The native API cannot expose a custom gallery's earlier recognition setting.
    7081
    7182= How do I enable Sensei video completion? =
    … …  
    8899
    89100== External Services ==
    90 This plugin interacts with Livid in two ways:
     101This plugin interacts with Livid in these ways:
    911021. Video migration
    92103When you initiate a migration, the plugin sends a listing of Vimeo videos found on your site along with basic information about the pages they appear on. This is necessary so that Livid can match the Vimeo videos on your site to the ones you have uploaded to your Livid account. No data is sent unless you actively start a migration.
    931042. oEmbed provider
    94105This plugin registers Livid as an oEmbed provider in WordPress. When a Livid video URL is embedded in a post or page, WordPress will make a request to Livid's oEmbed endpoint to retrieve embed information (such as the video title and player HTML). This happens whenever a post containing a Livid embed is edited or its embed cache is refreshed.
    95 Both interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy).
     1063. Video playback and previews
     107The visitor's browser loads Livid players and preview images where they are embedded. For Avada click-to-load facades, WordPress requests public oEmbed thumbnail metadata and caches successful lookups for an hour and failures for five minutes. The browser loads the returned preview image before the player is opened; the player iframe is created when the visitor clicks the play button. Live Builder preview lookups use an authenticated same-site endpoint.
     108These interactions are in line with Livid's [terms of service](https://support.livid.com/article/18-livid-terms-of-service) and [privacy policy](https://support.livid.com/article/17-livid-privacy-policy).
    96109
    97110== Changelog ==
     111
     112= 2.1.0 =
     113* Add an editable Livid Video element for Avada Builder with native layout controls, title/start settings, inherited click-to-load facades and Live Builder previews. Add Player.js playback handling for hidden/dynamic content and supported post/portfolio FlexSlider embeds, plus adapters for existing on-page iLightbox galleries and container backgrounds. Migrate static Avada Vimeo elements, native lightbox/button/column/background URLs and numeric background IDs, encoded Code Block sources, and the modern `_fusion` post/portfolio and active Slider video fields. Support verified legacy `pyre_*` video fields only while Avada still reads them. Carry supported URL playback flags and start offsets. Include registered Avada library elements, saved templates, layout sections and Off Canvas records in scans. Preserve selected-occurrence locators, safe retries and immutable metadata backups. Keep the shared Vimeo SDK script while the rewritten source still contains unselected Vimeo iframes. Render native dynamically bound Vimeo elements and container backgrounds when Avada resolves their source to a trusted Livid URL, preserving bindings and dynamic layout/title settings. Add unsampled, redacted audits of every Vimeo-bearing option record, Avada dynamic source binding and legacy video field excluded because a content layout may suppress it. Global options and arbitrary dynamic source fields remain audit-only; do not infer a template source owner from a rendered fallback. This adds the documented Avada surfaces, not complete Vimeo-provider parity. Preserve saved URL playback options, skip inactive dynamically replaced fallback content, and protect encoded Code Block selections against content changes and reordering. Handle delayed player events and slider transitions without overriding a visitor's pause, replay completed videos on return, and respect disabled slideshow rotation. Custom bound lightboxes using global smart recognition must initialize after the adapter or reapply their recognition setting through its wrapped API.
    98114
    99115= 2.0.3 =
  • livid-video-hosting/trunk/vendor/composer/autoload_classmap.php

    r3755224 r3782631  
    99    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    1010    'Livid\\Admin' => $baseDir . '/includes/class-admin.php',
     11    'Livid\\Assets' => $baseDir . '/includes/class-assets.php',
     12    'Livid\\Avada\\Bootstrap' => $baseDir . '/includes/avada/class-bootstrap.php',
     13    'Livid\\Avada\\Dynamic_Audit' => $baseDir . '/includes/avada/class-dynamic-audit.php',
     14    'Livid\\Avada\\Dynamic_Sources' => $baseDir . '/includes/avada/class-dynamic-sources.php',
     15    'Livid\\Avada\\Element_Video' => $baseDir . '/includes/avada/class-element-video.php',
     16    'Livid\\Avada\\Legacy_Layout_Guard' => $baseDir . '/includes/avada/class-legacy-layout-guard.php',
     17    'Livid\\Avada\\Native_Surfaces' => $baseDir . '/includes/avada/class-native-surfaces.php',
     18    'Livid\\Avada\\Option_Audit' => $baseDir . '/includes/avada/class-option-audit.php',
     19    'Livid\\Avada\\Slider' => $baseDir . '/includes/avada/class-slider.php',
     20    'Livid\\Avada\\Thumbnail' => $baseDir . '/includes/avada/class-thumbnail.php',
    1121    'Livid\\Block' => $baseDir . '/includes/class-block.php',
    1222    'Livid\\Bricks\\Bootstrap' => $baseDir . '/includes/bricks/class-bootstrap.php',
    … …  
    4050    'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => $baseDir . '/includes/migration/strategies/class-acf-field-strategy.php',
    4151    'Livid\\Migration\\Strategies\\Anchor_Strategy' => $baseDir . '/includes/migration/strategies/class-anchor-strategy.php',
     52    'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-attribute-strategy.php',
     53    'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-code-strategy.php',
     54    'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php',
     55    'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-post-meta-strategy.php',
     56    'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-slider-strategy.php',
     57    'Livid\\Migration\\Strategies\\Avada_Strategy' => $baseDir . '/includes/migration/strategies/class-avada-strategy.php',
     58    'Livid\\Migration\\Strategies\\Avada_Url_Options' => $baseDir . '/includes/migration/strategies/class-avada-url-options.php',
    4259    'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => $baseDir . '/includes/migration/strategies/class-bare-url-strategy.php',
    4360    'Livid\\Migration\\Strategies\\Bricks_Strategy' => $baseDir . '/includes/migration/strategies/class-bricks-strategy.php',
  • livid-video-hosting/trunk/vendor/composer/autoload_static.php

    r3755224 r3782631  
    1010        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
    1111        'Livid\\Admin' => __DIR__ . '/../..' . '/includes/class-admin.php',
     12        'Livid\\Assets' => __DIR__ . '/../..' . '/includes/class-assets.php',
     13        'Livid\\Avada\\Bootstrap' => __DIR__ . '/../..' . '/includes/avada/class-bootstrap.php',
     14        'Livid\\Avada\\Dynamic_Audit' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-audit.php',
     15        'Livid\\Avada\\Dynamic_Sources' => __DIR__ . '/../..' . '/includes/avada/class-dynamic-sources.php',
     16        'Livid\\Avada\\Element_Video' => __DIR__ . '/../..' . '/includes/avada/class-element-video.php',
     17        'Livid\\Avada\\Legacy_Layout_Guard' => __DIR__ . '/../..' . '/includes/avada/class-legacy-layout-guard.php',
     18        'Livid\\Avada\\Native_Surfaces' => __DIR__ . '/../..' . '/includes/avada/class-native-surfaces.php',
     19        'Livid\\Avada\\Option_Audit' => __DIR__ . '/../..' . '/includes/avada/class-option-audit.php',
     20        'Livid\\Avada\\Slider' => __DIR__ . '/../..' . '/includes/avada/class-slider.php',
     21        'Livid\\Avada\\Thumbnail' => __DIR__ . '/../..' . '/includes/avada/class-thumbnail.php',
    1222        'Livid\\Block' => __DIR__ . '/../..' . '/includes/class-block.php',
    1323        'Livid\\Bricks\\Bootstrap' => __DIR__ . '/../..' . '/includes/bricks/class-bootstrap.php',
    … …  
    4151        'Livid\\Migration\\Strategies\\Acf_Field_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-acf-field-strategy.php',
    4252        'Livid\\Migration\\Strategies\\Anchor_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-anchor-strategy.php',
     53        'Livid\\Migration\\Strategies\\Avada_Attribute_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-attribute-strategy.php',
     54        'Livid\\Migration\\Strategies\\Avada_Code_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-code-strategy.php',
     55        'Livid\\Migration\\Strategies\\Avada_Legacy_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-legacy-meta-strategy.php',
     56        'Livid\\Migration\\Strategies\\Avada_Post_Meta_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-post-meta-strategy.php',
     57        'Livid\\Migration\\Strategies\\Avada_Slider_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-slider-strategy.php',
     58        'Livid\\Migration\\Strategies\\Avada_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-strategy.php',
     59        'Livid\\Migration\\Strategies\\Avada_Url_Options' => __DIR__ . '/../..' . '/includes/migration/strategies/class-avada-url-options.php',
    4360        'Livid\\Migration\\Strategies\\Bare_Url_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bare-url-strategy.php',
    4461        'Livid\\Migration\\Strategies\\Bricks_Strategy' => __DIR__ . '/../..' . '/includes/migration/strategies/class-bricks-strategy.php',
  • livid-video-hosting/trunk/vendor/composer/installed.php

    r3755224 r3782631  
    22    'root' => array(
    33        'name' => 'livid/livid-wordpress',
    4         'pretty_version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    5         'version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    6         'reference' => 'dbba50ef9f273677ad15dc3385c455f1a4af24da',
     4        'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     5        'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     6        'reference' => '1959aad0a9187c378a66944ee439bd418b491589',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
    … …  
    1212    'versions' => array(
    1313        'livid/livid-wordpress' => array(
    14             'pretty_version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    15             'version' => 'dev-dbba50ef9f273677ad15dc3385c455f1a4af24da',
    16             'reference' => 'dbba50ef9f273677ad15dc3385c455f1a4af24da',
     14            'pretty_version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     15            'version' => 'dev-1959aad0a9187c378a66944ee439bd418b491589',
     16            'reference' => '1959aad0a9187c378a66944ee439bd418b491589',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.