@@ -47,7 +47,7 @@ public function migrate( int $post_id ) {
4747
4848 if ( is_array ( $ meta ) && count ( $ meta ) ) {
4949 try {
50- QueryHelper::insert_multiple_rows ( $ wpdb ->postmeta , $ meta );
50+ QueryHelper::insert_multiple_rows ( $ wpdb ->postmeta , $ meta, false , false );
5151 } catch ( \Throwable $ th ) {
5252 throw $ th ;
5353 }
@@ -73,9 +73,7 @@ public function get_meta(): array {
7373
7474 if ( isset ( $ meta ['sfwd-lessons_lesson_video_enabled ' ] ) && 'on ' === $ meta ['sfwd-lessons_lesson_video_enabled ' ] ) {
7575 if ( ! empty ( $ meta ['sfwd-lessons_lesson_video_url ' ] ) ) {
76- $ tutor_meta ['_video ' ] = array (
77- 'source_external_url ' => $ meta ['sfwd-lessons_lesson_video_url ' ],
78- );
76+ $ tutor_meta ['_video ' ] = maybe_serialize ( $ this ->get_video_source_by_url ( $ meta ['sfwd-lessons_lesson_video_url ' ] ) );
7977 }
8078 }
8179
@@ -136,4 +134,68 @@ public function get_migrate_able_meta(): array {
136134
137135 return array_intersect_key ( $ ld_meta , array_flip ( $ migrate_able_meta ) );
138136 }
137+
138+ /**
139+ * Get video source by url
140+ *
141+ * @since 2.3.0
142+ *
143+ * @param string $url Video url, sortcode or embed code.
144+ *
145+ * @return array
146+ */
147+ public function get_video_source_by_url ( string $ url ): array {
148+ $ source = 'external_url ' ;
149+ $ source_youtube = '' ;
150+ $ source_vimeo = '' ;
151+ $ source_shortcode = '' ;
152+ $ source_embedded = '' ;
153+ $ source_external_url = '' ;
154+ $ source_html5 = '' ;
155+
156+ if ( preg_match ( '/youtube\.com\/watch\?v=([^\&\s]+)/ ' , $ url , $ matches ) || preg_match ( '/youtu\.be\/([^\&\s]+)/ ' , $ url , $ matches ) ) {
157+ $ source = 'youtube ' ;
158+ $ source_youtube = $ url ;
159+ } elseif ( preg_match ( '/vimeo\.com\/(\d+)/ ' , $ url , $ matches ) ) {
160+ $ source = 'vimeo ' ;
161+ $ source_vimeo = $ url ;
162+ } elseif ( preg_match ( '/^\[.*\]$/s ' , trim ( $ url ) ) ) {
163+ // Shortcode starts and ends with square brackets.
164+ $ source = 'shortcode ' ;
165+ $ source_shortcode = $ url ;
166+ } elseif ( preg_match ( '/<iframe.+src="(.+?)"/s ' , $ url , $ matches ) ) {
167+ // Embedded iframe.
168+ $ source = 'embedded ' ;
169+ $ source_embedded = $ url ;
170+ } elseif ( filter_var ( $ url , FILTER_VALIDATE_URL ) ) {
171+ // Generic external URL (e.g., mp4).
172+ $ source = 'external_url ' ;
173+ $ source_external_url = $ url ;
174+ } else {
175+ // If none matched, maybe it's HTML5 file (local path).
176+ $ source = 'html5 ' ;
177+ $ source_html5 = $ url ;
178+ }
179+
180+ $ video_info = array (
181+ 'source ' => $ source ,
182+ 'source_video_id ' => '' ,
183+ 'poster ' => '' ,
184+ 'poster_url ' => '' ,
185+ 'source_html5 ' => $ source_html5 ,
186+ 'source_external_url ' => $ source_external_url ,
187+ 'source_shortcode ' => $ source_shortcode ,
188+ 'source_youtube ' => $ source_youtube ,
189+ 'source_vimeo ' => $ source_vimeo ,
190+ 'source_embedded ' => $ source_embedded ,
191+ 'runtime ' => array (
192+ 'hours ' => 0 ,
193+ 'minutes ' => 0 ,
194+ 'seconds ' => 0 ,
195+ ),
196+ );
197+
198+ return $ video_info ;
199+ }
200+
139201}
0 commit comments