File "frontend.php"

Full Path: /home/hathazar/public_html/wp-content/plugins/socialmark/includes/frontend.php
File size: 22.66 KB
MIME-type: --
Charset: utf-8

<?php
defined('ABSPATH') || exit();
global $wpdb;
define( 'SOCIALMARK_UPLOAD_BASE', $socialmark_upload_dir['basedir'] );
$socialmark_og_row = $wpdb->get_results("SELECT id FROM {$wpdb->prefix}sm_images", ARRAY_A);

if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins'))) || in_array('wordpress-seo-premium/wp-seo-premium.php', apply_filters('active_plugins', get_option('active_plugins')))) {
    function socialmark_yoast_support(){
        if (!is_front_page() && !is_home()) {
            function socialmark_change_wpseo_og_img_url($url)
            {
                $post_id = get_the_ID();
                if (is_singular('post') || is_singular('page')) {
                    if (get_post_type($post_id) === "post" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_posts') !== "on") {
                        $post_id = get_the_ID();
                        //return str_replace(wp_get_attachment_url(get_post_thumbnail_id($post_id)), socialmark_generate_og_image($post_id), $url);
                        $socialmark_url_for_yoast = socialmark_generate_og_image($post_id);
                        echo socialmark_twitter_yoast_support($socialmark_url_for_yoast);
                        return $socialmark_url_for_yoast;
                    }elseif (get_post_type($post_id) === "page" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_pages') !== "on") {
                        $post_id = get_the_ID();
                        //return str_replace(wp_get_attachment_url(get_post_thumbnail_id($post_id)), socialmark_generate_og_image($post_id), $url);
                        $socialmark_url_for_yoast = socialmark_generate_og_image($post_id);
                        echo socialmark_twitter_yoast_support($socialmark_url_for_yoast);
                        return $socialmark_url_for_yoast;

                    }else{
                        $socialmark_url_for_yoast = get_the_post_thumbnail_url($post_id,'full');
                        echo socialmark_twitter_yoast_support($socialmark_url_for_yoast);
                        return $socialmark_url_for_yoast;
                    }
                }else{
                    $socialmark_url_for_yoast = get_the_post_thumbnail_url($post_id,'full');
                    echo socialmark_twitter_yoast_support($socialmark_url_for_yoast);
                    return $socialmark_url_for_yoast;
                }
            }

            add_filter('wpseo_opengraph_image', 'socialmark_change_wpseo_og_img_url');
        }

    }
    add_action('wp_head', 'socialmark_yoast_support', 1);
    function socialmark_twitter_yoast_support($socialmark_url_for_yoast){

        return '
            <!-- Social Image Generated by: SocialMark Plugin -->
            <meta name="twitter:image" content="' . $socialmark_url_for_yoast . '" />
            <!--  SocialMark Plugin -->
            ';
    }


} else if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) {
    function socialmark_rankmath_support()
    {
        if (!is_front_page() && !is_home()) {
            function socialmark_change_rankmath_og_img_url($attachment_url)
            {
                $post_id = get_the_ID();
                if (is_singular('post') || is_singular('page')) {
                    if (get_post_type($post_id) === "post" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_posts') !== "on") {
                        return $attachment_url = socialmark_generate_og_image($post_id);
                    }elseif (get_post_type($post_id) === "page" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_pages') !== "on") {
                        return $attachment_url = socialmark_generate_og_image($post_id);
                    }else{
                        return get_the_post_thumbnail_url($post_id,'full');
                    }
                }else{
                    return get_the_post_thumbnail_url($post_id,'full');
                }

            }
            add_filter("rank_math/opengraph/facebook/image", 'socialmark_change_rankmath_og_img_url');
            add_filter("rank_math/opengraph/twitter/image", 'socialmark_change_rankmath_og_img_url');
        }
    }
    add_action('wp_head', 'socialmark_rankmath_support', 1);

} else {
    if (!empty($socialmark_og_row)) {
        add_action('wp_head', 'socialmark_frontend_header', 1);

    }
}
function socialmark_frontend_header()
{
    if(!is_front_page() && !is_home()) {
        if ( is_singular( 'post' ) ) {
            $post_id = get_the_ID();
            if (get_post_type($post_id) === "post" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_posts') !== "on") {
                $socialmark_generated_image=socialmark_generate_og_image($post_id);
                echo '
            <!-- Social Image Generated by: SocialMark Plugin -->
            <meta property="og:type" content="article" />
            <meta property="og:title" content="' . esc_html(get_the_title()) . '" />
            <meta property="og:url" content="'.get_permalink().'" />
            <meta property="og:image" content="' . $socialmark_generated_image . '" />
            <meta name="twitter:card" content="summary_large_image">
            <meta name="twitter:title" content="'.esc_html( get_the_title() ).'" />
            <meta name="twitter:image" content="' . $socialmark_generated_image . '" />
            <!--  SocialMark Plugin -->
            ';
            }
        }
        if ( is_singular( 'page' ) ) {
            $post_id = get_the_ID();
            if (get_post_type($post_id) === "page" && get_option('disable_socialmark') !== "on" && get_option('disable_socialmark_pages') !== "on") {
                $socialmark_generated_image = socialmark_generate_og_image($post_id);
                echo '
            <!-- Social Image Generated by: SocialMark Plugin -->
            <meta property="og:type" content="article" />
            <meta property="og:title" content="' . esc_html(get_the_title()) . '" />
            <meta property="og:url" content="' . get_permalink() . '" />
            <meta property="og:image" content="' . $socialmark_generated_image . '" />
            <meta name="twitter:card" content="summary_large_image">
            <meta name="twitter:title" content="' . esc_html(get_the_title()) . '" />
            <meta name="twitter:image" content="' . $socialmark_generated_image . '" />
            <!-- End: SocialMark Plugin -->
            ';
            }
        }
    }
}

function socialmark_generate_og_image($post_id)
{
    if(get_attached_file(get_post_thumbnail_id($post_id))==""){
        return "";
    }
    if (get_post_meta($post_id, 'socialmark_og_image_url', true) && get_post_meta($post_id, 'socialmark_og_image_url', true) !== "") {
        $socialmark_og_image = SOCIALMARK_UPLOAD . '/' . esc_attr(get_post_meta($post_id, 'socialmark_og_image_url', true));
        $socialmark_og_image_url = SOCIALMARK_UPLOAD_URL . '/' . esc_attr(get_post_meta($post_id, 'socialmark_og_image_url', true));
        if (file_exists($socialmark_og_image)) {
            $GLOBALS['socialmark_global_image']=$socialmark_og_image_url;
            list($GLOBALS['socialmark_global_image_width'], $GLOBALS['socialmark_global_image_height']) = getimagesize($socialmark_og_image);
            return $socialmark_og_image_url;
        } else {
            $socialmark_og_image_raw=socialmark_regenerate_og_image($post_id);
            if($socialmark_og_image_raw!='attachment'){
                $socialmark_og_image = SOCIALMARK_UPLOAD . '/' . $socialmark_og_image_raw;
                $socialmark_og_image_url = SOCIALMARK_UPLOAD_URL . '/' . $socialmark_og_image_raw;
            }else{
                $socialmark_og_image = get_attached_file(get_post_thumbnail_id($post_id));;
                $socialmark_og_image_url = wp_get_attachment_url(get_post_thumbnail_id($post_id));
            }

            $GLOBALS['socialmark_global_image']=$socialmark_og_image_url;
            list($GLOBALS['socialmark_global_image_width'], $GLOBALS['socialmark_global_image_height']) = getimagesize($socialmark_og_image);
            return $socialmark_og_image_url;
        }

    } else {
        $socialmark_og_image_raw=socialmark_regenerate_og_image($post_id);
        if($socialmark_og_image_raw!='attachment'){
            $socialmark_og_image = SOCIALMARK_UPLOAD . '/' . $socialmark_og_image_raw;
            $socialmark_og_image_url = SOCIALMARK_UPLOAD_URL . '/' . $socialmark_og_image_raw;
        }else{
            $socialmark_og_image = get_attached_file(get_post_thumbnail_id($post_id));;
            $socialmark_og_image_url = wp_get_attachment_url(get_post_thumbnail_id($post_id));
        }
        $GLOBALS['socialmark_global_image']=$socialmark_og_image_url;
        list($GLOBALS['socialmark_global_image_width'], $GLOBALS['socialmark_global_image_height']) = getimagesize($socialmark_og_image);
        return $socialmark_og_image_url;
    }

}

function socialmark_regenerate_og_image($post_id)
{
    global $wpdb;
    if (get_option('default_socialmark_overlay')) {
        $socialmark_de_ov = esc_attr(get_option('default_socialmark_overlay'));
        $socialmark_og_row = $wpdb->get_results("SELECT id, image_link FROM {$wpdb->prefix}sm_images where id=$socialmark_de_ov", ARRAY_A);
        $socialmark_overlay_image = str_replace(get_bloginfo('url')."/wp-content/uploads",SOCIALMARK_UPLOAD_BASE,$socialmark_og_row[0]['image_link']);
        if (get_post_thumbnail_id($post_id)) {
            $socialmark_main_image = get_attached_file(get_post_thumbnail_id($post_id));
        }else{
            if(wp_get_attachment_url(get_post_thumbnail_id($post_id))){
                //return wp_get_attachment_url(get_post_thumbnail_id($post_id));
                return 'attachment';
            }
        }
    }else{
        if(wp_get_attachment_url(get_post_thumbnail_id($post_id))){
           // return wp_get_attachment_url(get_post_thumbnail_id($post_id));
            return 'attachment';
        }
    }
    $socialmark_overlay_position = get_option('default_socialmark_position');
    //will be updated later
//    if(isset($socialmark_overlay_image) && !file_exists($socialmark_overlay_image)){
//        if(wp_get_attachment_url(get_post_thumbnail_id($post_id))){
//            //return wp_get_attachment_url(get_post_thumbnail_id($post_id));
//            return 'attachment';
//        }
//    }
    if (isset($socialmark_overlay_image) && isset($socialmark_main_image) && isset($socialmark_overlay_position)) {
        $socialmark_src_url = $socialmark_overlay_image;
        $socialmark_dest_url = $socialmark_main_image;
        $socialmark_position = $socialmark_overlay_position;
        $socialmark_src_type = getimagesize($socialmark_src_url);
        $socialmark_src_type = $socialmark_src_type['mime'];
        $socialmark_dest_type = getimagesize($socialmark_dest_url);
        $socialmark_dest_type = $socialmark_dest_type['mime'];
        switch ($socialmark_src_type) {
            case 'image/jpeg':
                $socialmark_src = imagecreatefromjpeg($socialmark_src_url);
                break;
            case 'image/gif':
                //Top-right
                $socialmark_src = imagecreatefromgif($socialmark_src_url);
                break;
            case 'image/png':
                //Top-right
                $socialmark_src = imagecreatefrompng($socialmark_src_url);
                break;
        }
        switch ($socialmark_dest_type) {
            case 'image/jpeg':
                $socialmark_dest1 = imagecreatefromjpeg($socialmark_dest_url);
                break;
            case 'image/gif':
                //Top-right
                $socialmark_dest1 = imagecreatefromgif($socialmark_dest_url);
                break;
            case 'image/png':
                //Top-right
                $socialmark_dest1 = imagecreatefrompng($socialmark_dest_url);
                break;
        }
        list($socialmark_width, $socialmark_height) = getimagesize($socialmark_dest_url);
        $socialmark_extra = 0;
        if (imagesx($socialmark_dest1) > 1200) {
            $socialmark_d_ratio = imagesy($socialmark_dest1) / imagesx($socialmark_dest1);
            $socialmark_n_width = 1200;
            $socialmark_n_height = 1200 * $socialmark_d_ratio;
            if ($socialmark_n_height > 630) {
                $socialmark_extra = ($socialmark_n_height - 630) / 2;
            }
        } else {
            list($socialmark_n_width, $socialmark_n_height) = getimagesize($socialmark_dest_url);
            if ($socialmark_n_width > 500 && ($socialmark_n_width / $socialmark_n_height) < 1.90 && $socialmark_n_width > $socialmark_n_height) {
                //$socialmark_extra = (((($socialmark_n_height * 1.9 - $socialmark_n_width) * 100) / $socialmark_n_width) * ($socialmark_n_height / 100)) / 2;
                $socialmark_extra = ($socialmark_n_height-($socialmark_n_width*0.525))/2;
            }
        }
        $socialmark_dest = imagecreatetruecolor($socialmark_n_width, $socialmark_n_height);

        imagecopyresampled($socialmark_dest, $socialmark_dest1, 0, 0, 0, 0, $socialmark_n_width, $socialmark_n_height, $socialmark_width, $socialmark_height);
        list($socialmark_src_w, $socialmark_src_h) = getimagesize($socialmark_src_url);

        $socialmark_name = time().$post_id;
        if (imagesx($socialmark_dest) < imagesx($socialmark_src)) {
            $socialmark_ratio = imagesy($socialmark_src) / imagesx($socialmark_src);
            $socialmark_src_w = imagesx($socialmark_dest);
            $socialmark_src_h = imagesx($socialmark_dest) * $socialmark_ratio;
            $socialmark_old_x = imagesx($socialmark_src);
            $socialmark_old_y = imagesy($socialmark_src);
            $socialmark_nw_img = ImageCreateTrueColor($socialmark_src_w, $socialmark_src_h);
            imagealphablending($socialmark_nw_img, false);
            imagesavealpha($socialmark_nw_img, true);
            $socialmark_transparent = imagecolorallocatealpha($socialmark_nw_img, 255, 255, 255, 127);
            imagefilledrectangle($socialmark_nw_img, 0, 0, $socialmark_src_w, $socialmark_src_h, $socialmark_transparent);
            imagecopyresampled($socialmark_nw_img, $socialmark_src, 0, 0, 0, 0, $socialmark_src_w, $socialmark_src_h, $socialmark_old_x, $socialmark_old_y);
            $socialmark_src = $socialmark_nw_img;
        } else if (imagesy($socialmark_dest) < imagesy($socialmark_src)) {
            $socialmark_ratio = imagesx($socialmark_src) / imagesy($socialmark_src);
            $socialmark_src_w = imagesy($socialmark_dest) * $socialmark_ratio;
            $socialmark_src_h = imagesy($socialmark_dest);
            $socialmark_old_x = imagesx($socialmark_src);
            $socialmark_old_y = imagesy($socialmark_src);
            $socialmark_nw_img = ImageCreateTrueColor($socialmark_src_w, $socialmark_src_h);
            imagealphablending($socialmark_nw_img, false);
            imagesavealpha($socialmark_nw_img, true);
            $socialmark_transparent = imagecolorallocatealpha($socialmark_nw_img, 255, 255, 255, 127);
            imagefilledrectangle($socialmark_nw_img, 0, 0, $socialmark_src_w, $socialmark_src_h, $socialmark_transparent);
            imagecopyresampled($socialmark_nw_img, $socialmark_src, 0, 0, 0, 0, $socialmark_src_w, $socialmark_src_h, $socialmark_old_x, $socialmark_old_y);
            $socialmark_src = $socialmark_nw_img;
        }
        switch ($socialmark_position) {
            case 5:
                //Center
                $socialmark_xaxis = (imagesx($socialmark_dest) / 2) - (imagesx($socialmark_src) / 2);
                $socialmark_yaxis = (imagesy($socialmark_dest) / 2) - (imagesy($socialmark_src) / 2);
                break;
            case 9:
                //Center-bottom
                $socialmark_xaxis = (imagesx($socialmark_dest) / 2) - (imagesx($socialmark_src) / 2);
                $socialmark_yaxis = (imagesy($socialmark_dest) - imagesy($socialmark_src)) - $socialmark_extra;
                break;
        }
        socialmark_imagecopymerge_alpha($socialmark_dest, $socialmark_src, $socialmark_xaxis, $socialmark_yaxis, 0, 0, $socialmark_src_w, $socialmark_src_h, 100);
//        imagejpeg($socialmark_dest, SOCIALMARK_UPLOAD . '/' . $socialmark_name . '.jpg');
//        $socialmark_og_image_url = $socialmark_name . '.jpg';
        if (imagesx($socialmark_dest) <= imagesy($socialmark_dest)) {
                $socialmark_background = "#FFFFFF";
                $socialmark_im = imagecreatetruecolor(1200, 630);

// fill the image with the color you want
                $color = '0x' . ltrim($socialmark_background, '#');
                imagefilledrectangle($socialmark_im, 0, 0, 1200, 630, hexdec($color));
                $socialmark_re_width = imagesx($socialmark_dest);
                $socialmark_re_height = imagesy($socialmark_dest);
                $socialmark_width_re_ratio = $socialmark_width / $socialmark_width;
//    $resized_width = 500; //suppose 500 is max width or height
//    $resized_height = 500/$ratio;
//}
//else {
                $socialmark_resized_width = 630 * $socialmark_width_re_ratio;
                $socialmark_resized_height = 630;
                //$image = imagecreatefromjpeg('shirt.jpg');

                $sm_resized_image = imagecreatetruecolor($socialmark_resized_width, $socialmark_resized_height);
                $left = (1200 - $socialmark_resized_width) / 2;
                imagecopyresampled($sm_resized_image, $socialmark_dest, 0, 0, 0, 0, $socialmark_resized_width, $socialmark_resized_height, $socialmark_re_width, $socialmark_re_height);
// set the headers and output the image
                imagecopymerge($socialmark_im, $sm_resized_image, $left, 0, 0, 0, $socialmark_resized_width, $socialmark_resized_height, 100);
                imagejpeg($socialmark_im, SOCIALMARK_UPLOAD . '/' . $socialmark_name . '.jpg');
                $socialmark_og_image_url = $socialmark_name . '.jpg';

        }else{
        $socialmark_crop_array = array('x' =>0 , 'y' =>  $socialmark_extra, 'width' => imagesx($socialmark_dest), 'height'=> imagesy($socialmark_dest)-$socialmark_extra*2);
        imagejpeg(imagecrop($socialmark_dest, $socialmark_crop_array), SOCIALMARK_UPLOAD . '/' . $socialmark_name . '.jpg');
        $socialmark_og_image_url = $socialmark_name . '.jpg';
    }

        update_post_meta(
            $post_id,
            'socialmark_og_image_url',
            sanitize_text_field($socialmark_og_image_url)
        );

        imagedestroy($socialmark_src);
        imagedestroy($socialmark_dest);
        imagedestroy($socialmark_dest1);
        //return SOCIALMARK_UPLOAD_URL . '/' . $socialmark_og_image_url;
        return $socialmark_og_image_url;

    }else{
        if (wp_get_attachment_url(get_post_thumbnail_id($post_id))) {
            //return wp_get_attachment_url(get_post_thumbnail_id($post_id));
            return "attachment";
        }
    }
}

function socialmark_imagecopymerge_alpha($socialmark_dst_im, $socialmark_src_im, $socialmark_dst_x, $socialmark_dst_y, $socialmark_src_x, $socialmark_src_y, $socialmark_src_w, $socialmark_src_h, $socialmark_pct)
{
    $socialmark_cut = imagecreatetruecolor($socialmark_src_w, $socialmark_src_h);
    imagecopy($socialmark_cut, $socialmark_dst_im, 0, 0, $socialmark_dst_x, $socialmark_dst_y, $socialmark_src_w, $socialmark_src_h);
    imagecopy($socialmark_cut, $socialmark_src_im, 0, 0, $socialmark_src_x, $socialmark_src_y, $socialmark_src_w, $socialmark_src_h);
    imagecopymerge($socialmark_dst_im, $socialmark_cut, $socialmark_dst_x, $socialmark_dst_y, 0, 0, $socialmark_src_w, $socialmark_src_h, $socialmark_pct);

}


function socialmark_callback($buffer)
{
    global $socialmark_global_image;
    global $socialmark_global_image_width;
    global $socialmark_global_image_height;
    if($socialmark_global_image!=""){
        $buffer = preg_replace('/\<meta property="og:image" content="(.*?)"/si', '<meta property="og:image" content="' . $socialmark_global_image . '"', $buffer);
        $buffer = preg_replace('/\<meta property="og:image:width" content="(.*?)"/si', '<meta property="og:image:width" content="' . $socialmark_global_image_width . '"', $buffer);
        $buffer = preg_replace('/\<meta property="og:image:height" content="(.*?)"/si', '<meta property="og:image:height" content="' . $socialmark_global_image_height . '"', $buffer);
        $buffer = preg_replace('/\<meta name="twitter:image" content="(.*?)"/si', '<meta name="twitter:image" content="' . $socialmark_global_image . '"', $buffer);
        $buffer = preg_replace('/\<meta property="og:image:url" content="(.*?)"/si', '<meta property="twitter:image" content="' . $socialmark_global_image . '"', $buffer);
        $buffer = preg_replace('/\<meta property="og:image:secure_url" content="(.*?)"/si', '<meta property="twitter:image" content="' . $socialmark_global_image . '"', $buffer);
        $buffer = preg_replace('/\<meta property="twitter:image" content="(.*?)"/si', '<meta property="twitter:image" content="' . $socialmark_global_image . '"', $buffer);
    }
    return $buffer;
}

function socialmark_buffer_start()
{
    ob_start("socialmark_callback");
}

function socialmark_buffer_end()
{
    ob_end_flush();
}
function socialmark_test_global(){
    global $socialmark_global_image;
    return array_key_exists('socialmark_global_image', $GLOBALS) ? true : false;
}
function socialmark_jetpack_image( $tags ) {
    // Remove default blank image from Jetpack
    global $socialmark_global_image;
    global $socialmark_global_image_width;
    global $socialmark_global_image_height;
    unset( $tags['og:image'] );
    unset( $tags['og:image:width'] );
    unset( $tags['og:image:height'] );
    $tags['og:image'] = esc_url( $socialmark_global_image );
    $tags['og:image:width'] =  $socialmark_global_image_width ;
    $tags['og:image:height'] =  $socialmark_global_image_height ;
    return $tags;
}

if (get_option('disable_socialmark_force') !== "on") {
    if (socialmark_test_global()===true) {
        add_action('after_setup_theme', 'socialmark_buffer_start');
        add_action('wp_head', 'socialmark_buffer_end');
        if (in_array('jetpack/jetpack.php', apply_filters('active_plugins', get_option('active_plugins'))) || in_array('jetpack/jetpack.php', apply_filters('active_plugins', get_option('active_plugins')))) {
            add_filter('jetpack_open_graph_tags', 'socialmark_jetpack_image');
            add_filter('jetpack_disable_twitter_cards', '__return_true', 99);
        }
    }
}