HEX
Server: Apache
System: Linux webm005.cluster121.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: adventp (418412)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/adventp/www/wp-content/plugins/ut-portfolio/ut-portfolio-functions.php
<?php

/*
 * Portfolio Management by United Themes
 * http://unitedthemes.com/
 */


if ( !function_exists( 'ut_get_image_id' ) ) {

    function ut_get_image_id($image_url) {

        global $wpdb;

        if( empty($image_url) ) {
            return;
        }

        $prefix = $wpdb->prefix;
        $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM " . $prefix . "posts" . " WHERE guid='%s';", $image_url ));

        return isset($attachment[0]) ? $attachment[0] : '';


    }

}

if( !function_exists('ut_portfolio_get_image_id') ) {

    function ut_portfolio_get_image_id( $attachment_url ) {

        global $wpdb;
        $attachment_id = false;

        if ( '' == $attachment_url ) {
            return;
        }

        $upload_dir_paths = wp_upload_dir();

        /* Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image */
        if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {

            /* If this is the URL of an auto-generated thumbnail, get the URL of the original image */
            $attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );

            /* Remove the upload path base directory from the attachment URL */
            $attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );

            /* Finally, run a custom database query to get the attachment ID from the modified attachment URL */
            $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) );

        }

        return $attachment_id;

    }

}

if( !function_exists('ut_escape_javascript') ) {

    function ut_escape_javascript($string) {

        return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
    }

}

/*
|--------------------------------------------------------------------------
| Gallery Portfolio Post
|--------------------------------------------------------------------------
*/
if( !function_exists('ut_portfolio_flex_slider') ) {

    function ut_portfolio_flex_slider( $postID , $singular = false , $image_style = "ut-square" , $ut_page_hero_type = '' ) {

        // switch option key
        switch( $ut_page_hero_type ) {

            case 'slider':
            $optionkey = 'ut_page_hero_slider';
            break;

            case 'transition':
            $optionkey = 'ut_page_hero_fancy_slider';
            break;

            case 'tabs':
            $optionkey = 'ut_page_hero_tabs';
            break;

            default:
            $optionkey = '';

        }

		/* new portfolio settings */
		$has_simple_gallery = false;
		$onpage_media_type  = get_post_meta( $postID , 'ut_onpage_portfolio_media_type' , true);

		if( $onpage_media_type == 'gallery' ) {

			$has_simple_gallery = true;
			$onpage_gallery = get_post_meta( $postID , 'ut_onpage_portfolio_gallery' , true);

			// put images into array
			$ut_gallery_images = explode( ",", $onpage_gallery);

		}
		/* end new gallery */


        $ut_background_slider_slides = get_post_meta( $postID , $optionkey , true );

        if( empty( $ut_page_hero_type ) || empty( $ut_background_slider_slides ) || $has_simple_gallery ) :

            // get all necessary image ID's from content gallery
            if( !$has_simple_gallery )
			$ut_gallery_images = ut_portfolio_extract_gallery_images_ids( $postID );

            // start output
            if ( !empty( $ut_gallery_images ) && is_array( $ut_gallery_images )  ) :

            $script = "<script type='text/javascript'>
            /* <![CDATA[ */
            
            (function($){
                
                'use strict';
        
                $(window).on('load', function () {
                    
                    $('#portfolio-gallery-slider-$postID').ut_require_js({
                        plugin: 'flexslider',
                        source: 'flexslider',
                        callback : function ( element ) {
                            
                            element.flexslider({
                        
                                animation: 'fade',
                                controlNav: false,
                                animationLoop: true,
                                slideshow: false,
                                smoothHeight: true,
                                startAt: 0
                                                    
                            });                            
                            
                        }      
                        
                    });
                    
                });
            
            })(jQuery);
            
            /* ]]> */
            </script>";



            $slider ='<div class="ut-portfolio-gallery-slider flexslider" id="portfolio-gallery-slider-' . $postID . '">';

                $slider .='<ul class="slides">';

                    foreach ( $ut_gallery_images as $ID => $imagedata ) :

                        if( isset( $imagedata->guid ) && !empty($imagedata->guid) ) {

                            $image = $imagedata->guid; // fallback to older wp versions

                        } else {

                            $image = wp_get_attachment_image_src( $imagedata, 'full' );

                        }

                        if( !empty( $image[0] ) ) :

                        // ratio
                        $ratio = !empty( $image[1] ) && !empty( $image[2] ) ? $image[1] / $image[2] : false;

                        if( $ratio ) {

                            $targetWidth  = 1160;
                            $targetHeight = round( $targetWidth / $ratio );

                            $image = ut_resize( $image[0], $targetWidth, $targetHeight, true, true, true );

                        } else {

                            $image = $image[0];
                            $targetWidth = $image[1];
                            $targetHeight = $image[2];

                        }

                        $caption = !empty( get_post( $imagedata )->post_excerpt ) ? get_post( $imagedata )->post_excerpt : '';

                        $slider .='<li>';

                                /* output for single pages */
                                if( !$singular ) {

                                    if( !empty( $caption ) ) {

                                        $slider .= '<figure class="ut-post-thumbnail-caption-wrap" data-caption="' . esc_attr( $caption ) . '">';

                                            $slider .='<img width="'.$targetWidth.'" height="'.$targetHeight.'" src="" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" data-original="' . $image . '" />';

                                            $slider .='<figcaption class="ut-post-thumbnail-caption">' . $caption . '</figcaption>';

                                        $slider .= '</figure>';

                                    } else {

                                        $slider .='<img width="'.$targetWidth.'" height="'.$targetHeight.'" src="" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" data-original="' . $image . '" />';

                                    }

                                } else {

                                    $slider .='<img src="' . $image . '" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" />';

                                }

                            $slider .='</li>';

                        endif;

                  endforeach;

                $slider .='</ul>';
            $slider .='</div>';

            if( $singular ) {
                $slider = ut_compress_java($script) . $slider;
            }

            return $slider;

            endif;

        endif;

        if( !empty($ut_page_hero_type) && !empty($ut_background_slider_slides) && is_array($ut_background_slider_slides) ) {

                $script = "<script type='text/javascript'>
                /* <![CDATA[ */
                
                (function($){
                    
                    'use strict';
            
                    $(window).on('load', function () {
                        
                        $('#portfolio-gallery-slider-$postID').ut_require_js({
                            plugin: 'flexslider',
                            source: 'flexslider',
                            callback : function ( element ) {
                                
                                element.flexslider({
                            
                                    animation: 'fade',
                                    controlNav: false,
                                    animationLoop: true,
                                    slideshow: false,
                                    smoothHeight: true,
                                    startAt: 0
                                                        
                                });                            
                                
                            }      
                        
                        });                        
                        
                    });
                
                })(jQuery);
                
                /* ]]> */
                </script>";

                $slider ='<div class="ut-portfolio-gallery-slider flexslider" id="portfolio-gallery-slider-' . $postID . '">';
                    $slider .='<ul class="slides">';

                        foreach ($ut_background_slider_slides as $slide) :

                            $slider .='<li>';

                                if( !$singular ) {

                                    $image = array("1920","1080");

                                    if( function_exists('ut_get_image_id') ) {

                                        $imageID = ut_get_image_id($slide['image']);
                                        $image   = wp_get_attachment_image_src($imageID , 'single-post-thumbnail');
                                        $caption = !empty( get_post( $imageID )->post_excerpt ) ? get_post( $imageID )->post_excerpt : '';

                                    }

                                    // ratio
                                    $ratio = !empty( $image[1] ) && !empty( $image[2] ) ? $image[1] / $image[2] : false;

                                    if( $ratio ) {

                                        $targetWidth  = 1160;
                                        $targetHeight = round( $targetWidth / $ratio );

                                        $image = ut_resize( $image[0], $targetWidth, $targetHeight, true, true, true );

                                    } else {

                                        $image = !empty( $image[0] ) ? $image[0] : $slide['image'];
                                        $targetWidth = $image[1];
                                        $targetHeight = $image[2];

                                    }

                                    if( !empty( $caption ) ) {

                                        $slider .= '<figure class="ut-post-thumbnail-caption-wrap" data-caption="' . esc_attr( $caption ) . '">';

                                            $slider .='<img width="'.$targetWidth.'" height="'.$targetHeight.'" src="" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" data-original="' . $image . '" />';

                                            $slider .='<figcaption class="ut-post-thumbnail-caption">' . $caption . '</figcaption>';

                                        $slider .= '</figure>';

                                    } else {

                                        $slider .='<img width="'.$targetWidth.'" height="'.$targetHeight.'" src="" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" data-original="' . $image . '" />';

                                    }

                                } else {

                                    $slider .='<img src="' . $image . '" class="ut-load-me ' . $image_style . '" alt="' . get_the_title( $postID ) . '" />';

                                }

                            $slider .='</li>';

                        endforeach;

                    $slider .='</ul>';
                $slider .='</div>';

            if( $singular ) {
                $slider = ut_compress_java($script) . $slider;
            }

            return $slider;

        }

    }
}

/*
|--------------------------------------------------------------------------
| Lightgallery for Portfolio Post
|--------------------------------------------------------------------------
*/

$GLOBALS['lightgallery_count'] = 1;

if( !function_exists('ut_portfolio_lightgallery') ) {

    function ut_portfolio_lightgallery( $postID , $token , $ut_page_hero_type = '' ) {

        /* switch option key */
        switch ($ut_page_hero_type) {

            case 'slider':
            $optionkey = 'ut_page_hero_slider';
            break;

            case 'transition':
            $optionkey = 'ut_page_hero_fancy_slider';
            break;

            case 'tabs':
            $optionkey = 'ut_page_hero_tabs';
            break;

            default:
            $optionkey = '';

        }

        $ut_background_slider_slides = get_post_meta($postID , $optionkey , true);

		/* new portfolio settings */
		$has_simple_gallery = false;
		$onpage_media_type  = get_post_meta( $postID , 'ut_onpage_portfolio_media_type' , true );

		if( $onpage_media_type == 'gallery' ) {

			$has_simple_gallery = true;
			$onpage_gallery = get_post_meta( $postID , 'ut_onpage_portfolio_gallery' , true );

			// put images into array
			$ut_gallery_images = explode( ",", $onpage_gallery );

		}
		/* end new gallery */


        if( empty( $ut_page_hero_type ) || empty( $ut_background_slider_slides ) || $has_simple_gallery ) :

            /* get all necessary image ID's */
            if( !$has_simple_gallery )
			$ut_gallery_images = ut_portfolio_extract_gallery_images_ids( $postID );

            /* start output */
            if ( !empty( $ut_gallery_images ) && is_array( $ut_gallery_images )  ) :

            /* needed vars */
            $api_images = NULL;

            $counter = 1;
            foreach ( $ut_gallery_images as $ID => $imagedata ) :

                if( isset( $imagedata->guid ) && !empty($imagedata->guid) ) {

                    $image = $imagedata->guid; // fallback to older wp versions

                } else {

                    $image = wp_get_attachment_image_src( $imagedata , 'ut-lightbox' );
                    $image = $image[0];

                    $thumb = wp_get_attachment_image_src( $imagedata , 'thumbnail' );
                    $thumb = !empty( $thumb[0] ) ? $thumb[0] : $image[0];


                }

                if( !empty( $image[0] ) ) :

                    $api_images .= '{';
                        $api_images .= '"src"  : "' . $image .'",';
                        $api_images .= '"thumb": "' . $thumb .'",';
                        $api_images .= '"subHtml": "<h4>' . addslashes( get_the_title( $imagedata ) ) . '</h4><p>' . ut_escape_javascript( get_post( $imagedata )->post_excerpt ) .'</p>",';
                    $api_images .= '}';

                endif;

                if( $counter != count( $ut_gallery_images ) ) { $api_images .= ','; }

            $counter++;
            endforeach;


            $script = "<script type='text/javascript'>
            /* <![CDATA[ */
            
            (function($){
                
                'use strict';
                
                $(document).ready(function(){
                    
                    if( site_settings !== undefined && site_settings.lg_type === 'lightgallery' ) {
                    function ParseInt( numb ) {
                        try { numb = parseInt( numb ); } catch (e) {}
                        return numb;
                    }
	                    $('.ut-portfolio-popup-" . esc_attr( $postID ) . "').on('click', function(event) {
	                        
	                        $(this).ut_require_js({
	                            plugin: 'lightGallery',
	                            source: 'lightGallery',
	                            callback: function (element) {
	
	                                element.lightGallery({
	                                    dynamic: true, 
	                                    hash: false,
	                                    dynamicEl: [" . $api_images . "],
	                                    galleryId: " . $GLOBALS['lightgallery_count'] .",
	                                    download: ParseInt(site_settings.lg_download),
                                        mode: site_settings.lg_mode
	                                });
	
	                            }
	
	                        });
	                        
	                        event.preventDefault();                        
	                        
	                    });
                    
                    } else {
                        
                        $('.ut-portfolio-popup-" . esc_attr( $postID ) . "').on('click', function(event) {
                            
                            UT_Morph_Box_APP.create_morph_gallery();
                            
                        }); 
                        
                    }
                                    
                });
                        
            })(jQuery);
            
            /* ]]> */
            </script>";

            $GLOBALS['lightgallery_count']++;

            return $script;

            endif;

		endif;

        if( !empty( $ut_page_hero_type ) && !empty( $ut_background_slider_slides ) && is_array( $ut_background_slider_slides ) ) {

            /* needed vars */
            $api_images = NULL;

            $counter = 1;
            foreach ( $ut_background_slider_slides as $key => $slide ) :

                $image_id = NULL;

                if( !empty( $slide['image'] ) ) :

                    $image_id = ut_portfolio_get_image_id( $slide['image'] );

                    /* thumb */
                    $thumb = wp_get_attachment_image_src( $image_id , 'thumbnail' );
                    $thumb = !empty( $thumb[0] ) ? $thumb[0] : $slide['image'];

                    $api_images .= '{';

                    $api_images .= '"src"  : "' . $slide['image'] .'",';
                    $api_images .= '"thumb": "' . $thumb .'",';

                    if( empty( $slide['description'] ) && $image_id ) {

                        $api_titles = addslashes( get_the_title( $image_id ) );

                    } else {

                        $api_titles = addslashes( $slide['description'] );

                    }

                    if( empty( $slide['catchphrase'] ) && $image_id ) {

                        $api_descriptions = addslashes( get_post( $image_id )->post_excerpt );

                    } else {

                        $api_descriptions = addslashes( $slide['catchphrase'] );

                    }

                    $api_images .= '"subHtml": "<h4>' . $api_titles . '<h4><p>' . ut_escape_javascript( $api_descriptions ) . '</p>"';

                    $api_images .= '}';

                endif;

                if( $counter != count( $ut_background_slider_slides ) ) { $api_images .= ','; }


            $counter++;
            endforeach;

            $script = "<script type='text/javascript'>
            /* <![CDATA[ */
            
            (function($){
                
                'use strict';
                
                $(document).ready(function(){
                    
                    if( site_settings !== undefined && site_settings.lg_type === 'lightgallery' ) {
                    
	                    $('.ut-portfolio-popup-" . esc_attr( $postID ) . "').on('click', function(event) {                       
	                       
	                       $(this).ut_require_js({
	                            plugin: 'lightGallery',
	                            source: 'lightGallery',
	                            callback: function (element) {
	
	                                element.lightGallery({
	                                    dynamic: true,
	                                    hash: false,
	                                    dynamicEl: [" . $api_images . "],
	                                    galleryId: " . $GLOBALS['lightgallery_count'] . "
	                                });
	
	                            }
	
	                        });
	                       
	                        event.preventDefault();                        
	                        
	                    });
                    
                    } else {
                        
                        $('.ut-portfolio-popup-" . esc_attr( $postID ) . "').on('click', function(event) {
                            
                            UT_Morph_Box_APP.create_morph_gallery();
                            
                        });
                        
                    }
                                    
                });
                        
            })(jQuery);
            
            /* ]]> */
            </script>";

            $GLOBALS['lightgallery_count']++;

            return $script;


        }

    }
}

/*
|--------------------------------------------------------------------------
| Video Portfolio Post
|--------------------------------------------------------------------------
*/

if( !function_exists('ut_get_portfolio_format_video_content') ) {

    function ut_get_portfolio_format_video_content( $content ) {

        /* needed variables */
        $videofound = false;
		$value = ut_portfolio_url_grabber( $content );

        /* check for vimeo */
        $value = ut_check_for_vimeo($value);

        if( !empty( $value ) ) {

            /* set video found */
            $videofound = true;

        }

        /* we have a meta value , lets check its syntax and return it */
        if( $videofound ) {

            if ( is_numeric( $value ) ) {

                $video = wp_get_attachment_url( $value );
                return do_shortcode( sprintf( '[video src="%s"]', $video ) );

            } elseif ( preg_match( '/' . get_shortcode_regex() . '/s', $value ) ) {

                return do_shortcode( $value );

            } else {

                return $value;

            }

        }

    }

}
if( !function_exists('ut_get_portfolio_video_href') ) {
    function ut_get_portfolio_video_href( $postID, $video_media = '' ) {
        $media_type  = get_post_meta( $postID , 'ut_onpage_portfolio_media_type' , true);
        $href = '';
        if( $media_type === 'video' ) {
            $source = get_post_meta( $postID , 'ut_onpage_portfolio_video_source' , true);
            if( $source === 'youtube' || $source === 'vimeo' ) {
                $source_video  = '';
                if( $source === 'youtube' ) {
                    $source_video = get_post_meta( $postID , 'ut_onpage_portfolio_video_youtube' , true);
                } else {
                    $source_video = get_post_meta( $postID , 'ut_onpage_portfolio_video_vimeo' , true);
                }
                if( ! empty( $source_video ) ) {
                    $href = $source_video;
                }
            }
        }

        return $href;
    }
}
if( !function_exists('ut_get_portfolio_video_mini_thumb') ) {
    function ut_get_portfolio_video_mini_thumb( $postID ) {
        $mini = wp_get_attachment_image_src( get_post_thumbnail_id( $postID ) , 'ut-mini' );
        $thumb = !empty( $mini[0] ) ? $mini[0] : "";
        if( empty( $thumb ) ) {
            $thumb = get_post_meta( $postID, 'ut_video_auto_thumb', true );
        }

        return $thumb;
    }
}
if( !function_exists('ut_get_portfolio_video_popup') ) {
    function ut_get_portfolio_video_popup( $postID, $video_media = '' ) {
        $media_type  = get_post_meta( $postID , 'ut_onpage_portfolio_media_type' , true);
        $video_preview = get_post_meta( $postID, 'ut_portfolio_showcase_video_mp4' , true);

        $video_data = '';
        if( $media_type === 'video' ) {
            $source = get_post_meta( $postID , 'ut_onpage_portfolio_video_source' , true);
            if( $source === 'youtube' || $source === 'vimeo' ) {
                $source_video  = '';
                if( $source === 'youtube' ) {
                    $source_video = get_post_meta( $postID , 'ut_onpage_portfolio_video_youtube' , true);
                } else {
                    $source_video = get_post_meta( $postID , 'ut_onpage_portfolio_video_vimeo' , true);
                }
                if( ! empty( $source_video ) ) {
                    $video_data .= 'data-src="'.esc_url($source_video).'"';
                }
            }
        }
        if( empty( $video_data ) && !empty( $video_media ) && is_array( $video_media ) && isset( $video_media['iframe'] ) ) {

            $video_data = ' data-iframe="true"';
            $iframe_src = get_post_meta( $postID, 'ut_onpage_portfolio_video_custom' , true);
            $video_data .= 'data-src="'.esc_attr($iframe_src).'"';

        } elseif(empty( $video_data ) && !empty( $video_media ) && is_array( $video_media ) && isset( $video_media['selfhosted'] ) ) {

            $video_mp4 = get_post_meta( $postID, 'ut_onpage_portfolio_video_mp4' , true);
            $video_data = 'data-html="#ut-selfhosted-lightbox-player-' . $postID . '"'.' data-video=\'{"source":[{"src": "'.trim($video_mp4).'", "type":"video/mp4"}],"attributes": {"preload": false, "controls": true}}\'';

        } elseif ( empty( $video_data ) && ! empty( $video_preview ) ) {
            $video_data = 'data-video=\'{"source":[{"src": "'.trim($video_preview).'", "type":"video/mp4"}],"attributes": {"preload": false, "controls": true}}\'';
        }

        return $video_data;
    }
}

if( !function_exists('ut_get_portfolio_format_video_media') ) {

    function ut_get_portfolio_format_video_media( $postID ) {

		$content = false;

		// hero type settings
		$ut_page_hero_type    = get_post_meta( $postID, 'ut_page_hero_type' , true );
        $ut_page_video_source = get_post_meta( $postID, 'ut_page_video_source' , true );


		/* new portfolio settings since 4.7.4 */
		$has_media_type 	= false;
		$onpage_media_type  = get_post_meta( $postID , 'ut_onpage_portfolio_media_type' , true);

		if( $onpage_media_type == 'video' ) {

			// set flag for new media
			$has_media_type = true;

			// assign video source
			$ut_page_hero_type    = 'video';
			$ut_page_video_source = get_post_meta( $postID , 'ut_onpage_portfolio_video_source' , true);

		}
		/* end new portfolio settings */


	   	if( !empty( $ut_page_hero_type ) && $ut_page_hero_type == 'video' ) {

			// youtube video
            if( isset( $ut_page_video_source ) && $ut_page_video_source == 'youtube' )  {

				if( !$has_media_type )
                $content = get_post_meta($postID , 'ut_page_video', true);

				if( $has_media_type )
                $content = get_post_meta($postID , 'ut_onpage_portfolio_video_youtube', true);

            }

			// vimeo video
            if( isset( $ut_page_video_source ) && $ut_page_video_source == 'vimeo' )  {

				if( !$has_media_type )
                $content = get_post_meta($postID , 'ut_page_video_vimeo', true);

				if( $has_media_type )
                $content = get_post_meta($postID , 'ut_onpage_portfolio_video_vimeo', true);

            }

			// selfhosted video - current not support for lightbox
            if( isset( $ut_page_video_source ) && $ut_page_video_source == 'selfhosted' ) {

				$video_player = '<div style="display:none;" id="ut-selfhosted-lightbox-player-' . $postID . '">';

					$video_player .= '<video class="lg-video-object lg-html5" controls disablePictureInPicture  preload="none">';

						$mp4 = get_post_meta( $postID , 'ut_onpage_portfolio_video_mp4', true );
						if( $mp4 ) {
							$video_player .= '<source src="' . esc_url( $mp4 ) . '" type="video/mp4">';
						}

						$ogg = get_post_meta( $postID , 'ut_onpage_portfolio_video_ogg', true );
						if( $ogg ) {
							$video_player .= '<source src="' . esc_url( $ogg ) . '" type="video/ogg">';
						}

						$webm = get_post_meta( $postID , 'ut_onpage_portfolio_video_webm', true );
						if( $webm ) {
							$video_player .= '<source src="' . esc_url( $webm ) . '" type="video/webm">';
						}

                        // hero fallback
                        if( !$mp4 && !$ogg && !$webm ) {

                            $mp4 = get_post_meta($postID, 'ut_page_video_mp4', true);
                            if ($mp4) {
                                $video_player .= '<source src="' . esc_url($mp4) . '" type="video/mp4">';
                            }

                            $ogg = get_post_meta( $postID , 'ut_page_video_ogg', true );
                            if( $ogg ) {
                                $video_player .= '<source src="' . esc_url( $ogg ) . '" type="video/ogg">';
                            }

                            $webm = get_post_meta( $postID , 'ut_page_video_webm', true );
                            if( $webm ) {
                                $video_player .= '<source src="' . esc_url( $webm ) . '" type="video/webm">';
                            }

                        }

					$video_player .= '</video>';

				$video_player .= '</div>';

				$content = array(
					'selfhosted' => $video_player
				);

			}

			// custom video
            if( isset($ut_page_video_source) && $ut_page_video_source == 'custom' ) {

				if( !$has_media_type )
                $content = get_post_meta($postID , 'ut_page_video_custom', true);

				if( $has_media_type )
                $content = get_post_meta($postID , 'ut_onpage_portfolio_video_custom', true);

				$content = array(
					'iframe' => $content
				);



            }

		}

		return $content;

    }

}

function ut_get_portfolio_preview_video( $postID, $post_format, $showcase = '', $in_slider = false ) {

    if( !class_exists('UT_Background_Video_Player') ) {
        return false;
    }

    if( get_post_meta( $postID, 'ut_portfolio_showcase_video_preview', true ) != 'on' ) {
        return false;
    }

    $exclude_from = get_post_meta( $postID, 'ut_portfolio_showcase_video_exclude', true );

    if( is_array( $exclude_from ) && array_key_exists( $showcase, $exclude_from ) ) {
    	return false;
    }

    // if original video plays we only play 10 seconds
    $trailer = false;

    // get preview videos
    $mp4  = get_post_meta( $postID, 'ut_portfolio_showcase_video_mp4', true );
    $ogg  = get_post_meta( $postID, 'ut_portfolio_showcase_video_ogg', true );
    $webm = get_post_meta( $postID, 'ut_portfolio_showcase_video_webm', true );

    // fallback to selfhosted videos
    if( $post_format == 'video' && get_post_meta( $postID, 'ut_onpage_portfolio_video_source', true ) == 'selfhosted' && empty( $mp4 ) ) {

        $mp4  = get_post_meta( $postID, 'ut_onpage_portfolio_video_mp4', true );
        $ogg  = get_post_meta( $postID, 'ut_onpage_portfolio_video_ogg', true );
        $webm = get_post_meta( $postID, 'ut_onpage_portfolio_video_webm', true );

        $trailer = true;

    }

    // other player configs
    $play_event = get_post_meta( $postID, 'ut_portfolio_showcase_video_play_event', true );
    $appear_offset = 'auto';

    if( $in_slider ) {

        $play_event    = 'on_appear';
        $appear_offset = 'auto';

    }

    // Background Player
    $video = new UT_Background_Video_Player();

    return $video->handle_shortcode( array(
        'id'                    => $postID,
        'containment'           => '#ut-portfolio-article-' . $postID . ' .ut-portfolio-item > a',
        'source'                => 'selfhosted',
        'play_event'            => empty( $play_event ) ? 'on_hover' : $play_event,
        'appear_offset'         => $appear_offset,
        'lazy_load'             => true,
        'preload'               => 'auto',
        'mp4'                   => $mp4,
        'ogg'                   => $ogg,
        'webm'                  => $webm,
        'video_trailer'         => $trailer,
        'force_aspect_ratio'    => 'no',
        'volume'                => '0',
        'glitch_effect'         => get_post_meta( $postID, 'ut_portfolio_showcase_video_glitch', true ),
        'video_filter'          => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter', true ),
        'video_filter_action'   => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_action', true ),
        'contrast'              => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_contrast', true ),
        'brightness'            => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_brightness', true ),
        'saturate'              => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_saturate', true ),
        'grayscale'             => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_grayscale', true ),
        'blur'                  => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_blur', true ),
        'sepia'                 => get_post_meta( $postID, 'ut_portfolio_showcase_video_filter_sepia', true ),
    ) );

}

if( !function_exists('ut_portfolio_url_grabber') ) {

    function ut_portfolio_url_grabber( $string ) {

        $imageurl = !empty( $string ) ? preg_match_all('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', $string , $match) : '';
        return isset($match[0][0]) ? ut_portfolio_add_http($match[0][0]) : '';

    }

}

if( !function_exists('ut_portfolio_add_http') ) {

	function ut_portfolio_add_http( $url ) {

		if ( !preg_match("~^(?:f|ht)tps?://~i", $url ) ) {

            $url = is_ssl() ? "https://" . $url : "http://" . $url;

		}

		return esc_url_raw($url);

	}

}

if( !function_exists('ut_check_for_vimeo') ) {

	function ut_check_for_vimeo($url) {

        if( preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?\.*/", trim($url) , $matches) ){

            if( !empty($matches[5]) ) {

                return ut_portfolio_add_http( 'vimeo.com/' . $matches[5] );

            } else {

                return $url;

            }

        } else {

            return $url;

        }

	}

}

/*
|--------------------------------------------------------------------------
| Helper Function : Extract Attachment ID's from gallery shortcode
|--------------------------------------------------------------------------
*/
if ( !function_exists( 'ut_portfolio_extract_gallery_images_ids' ) ) {

    function ut_portfolio_extract_gallery_images_ids($postID = '') {

        if( empty( $postID ) ) {
            return false;
        }

        $the_content = get_the_content( $postID );

        // search for gallery shortcode
        preg_match_all( "/(.?)\[(ut_image_gallery)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s", $the_content, $matches );

        if( isset( $matches[0][0] ) && strpos($matches[0][0], 'ut_image_gallery') !== false ) {

            preg_match_all('!\d+!', $matches[0][0], $images);

            return isset( $images[0] ) ? $images[0] : false;

        }

        // search for gallery shortcode
        preg_match_all( "/(.?)\[(gallery)\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s", $the_content, $matches );

        if( isset( $matches[0][0] ) && strpos($matches[0][0], 'gallery') !== false ) {

            preg_match_all('!\d+!', $matches[0][0], $images);

            return isset( $images[0] ) ? $images[0] : false;

        }

    }

}


/*
|--------------------------------------------------------------------------
| Hex to RGB Changer
|--------------------------------------------------------------------------
*/
if( !function_exists('ut_hex_to_rgb') ) :

	function ut_hex_to_rgb($hex) {

		$hex = preg_replace("/#/", "", $hex);
		$color = array();

		if(strlen($hex) == 3) {
			$color['r'] = hexdec(substr($hex, 0, 1) . $r);
			$color['g'] = hexdec(substr($hex, 1, 1) . $g);
			$color['b'] = hexdec(substr($hex, 2, 1) . $b);
		}
		else if(strlen($hex) == 6) {
			$color['r'] = hexdec(substr($hex, 0, 2));
			$color['g'] = hexdec(substr($hex, 2, 2));
			$color['b'] = hexdec(substr($hex, 4, 2));
		}

		$color = implode(',', $color);

		return $color;
	}

endif;


/*
|--------------------------------------------------------------------------
| Custom JS Minifier
|--------------------------------------------------------------------------
*/

if ( !function_exists( 'ut_compress_java' ) ) {

	function ut_compress_java($buffer) {

		// remove comments
		$buffer = preg_replace("/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/", "", $buffer);

		// remove tabs, spaces, newlines, etc.
		$buffer = str_replace(array("\r\n","\r","\t","\n",'  ','    ','     '), '', $buffer);

		// remove other spaces before/after )
		$buffer = preg_replace(array('(( )+\))','(\)( )+)'), ')', $buffer);

		return $buffer;

	}

}


/*
|--------------------------------------------------------------------------
| Generate Category List - Into Class
|--------------------------------------------------------------------------
*/
if( !function_exists('ut_generate_cat_list') ) :

	function ut_generate_cat_list( $categories , $separator = "," ) {

		if(!is_array($categories)) {
			return;
		}

		$return = '';
		$cats = count( $categories );
		$counter = 1;

		foreach( $categories as $category ) {

			$return .= $category->name;

			if( $counter < $cats) {
				$return .= $separator.' ';
			}

			$counter++;

		}

		return $return;

	}

endif;


/*
|--------------------------------------------------------------------------
| Generate Packery Caption
|--------------------------------------------------------------------------
*/
if( !function_exists('ut_generate_packery_caption') ) :

	function ut_generate_packery_caption( $ID ) {

		if( empty( $ID ) ) {
			return false;
		}

        $return = false;

        /* get theme option settings */
        if( ot_get_option('ut_portfolio_showcase_icon_type') == 'custom' && ot_get_option('ut_portfolio_showcase_custom_icon') )  {

            $return = '<div class="ut-portfolio-custom-icon"><img src="' . esc_url( ot_get_option('ut_portfolio_showcase_custom_icon') ) . '"></div>';

        } elseif( ot_get_option('ut_portfolio_showcase_font_icon')  ) {

            $return = '<div class="ut-portfolio-custom-icon"><i class="' . esc_attr( ot_get_option('ut_portfolio_showcase_font_icon') ) . '" aria-hidden="true"></i></div>';

        }

		return $return;

	}

endif;


/*
|--------------------------------------------------------------------------
| Add WMode
|--------------------------------------------------------------------------
*/
if( !function_exists('ut_add_video_wmode_transparent') ) :

		function ut_add_video_wmode_transparent( $html, $url, $attr ) {

		if ( strpos( $html, "<embed src=" ) !== false ) {

			return str_replace('</param><embed', '</param><param name="wmode" value="opaque"></param><embed wmode="opaque" ', $html);

		} elseif ( strpos ( $html, 'feature=oembed' ) !== false ) {

			return str_replace( 'feature=oembed', 'feature=oembed&wmode=opaque', $html );

		} else {

			return $html;

		}
	}

	add_filter( 'oembed_result', 'ut_add_video_wmode_transparent', 10, 3);

endif;