Advertisement
arie_cristianD

3s_video_upload_fix

Aug 30th, 2023
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.59 KB | None | 0 0
  1. <?php
  2.  
  3. namespace JNEWS_VIDEO\Frontend;
  4.  
  5. use Exception;
  6. use JNews\Util\VideoAttribute;
  7. use JNews_Frontend_Submit;
  8.  
  9. use function cli\err;
  10.  
  11. /**
  12.  * Class Frontend_Video
  13.  *
  14.  * @package JNEWS_VIDEO\Frontend
  15.  */
  16. class Frontend_Video extends JNews_Frontend_Submit {
  17.     /**
  18.      * Instance of Frontend_Video
  19.      *
  20.      * @var Frontend_Video
  21.      */
  22.     private static $instance;
  23.  
  24.     /**
  25.      * @var mixed
  26.      */
  27.     private $endpoint;
  28.  
  29.     /**
  30.      * @var string
  31.      */
  32.     private $post_flag = 'jnews_frontend_submit_post_flag';
  33.  
  34.     /**
  35.      * Frontend_Video constructor.
  36.      */
  37.     private function __construct() {
  38.         $this->endpoint = Frontend_Video_Endpoint::getInstance()->get_endpoint();
  39.         $this->setup_hook();
  40.     }
  41.  
  42.     /**
  43.      * Setup Frontend_Video hook
  44.      */
  45.     protected function setup_hook() {
  46.         add_action( 'wp_loaded', array( $this, 'submit_handler' ), 20 );
  47.         add_action( 'jnews_ajax_video_handler', array( $this, 'video_handler' ) );
  48.     }
  49.  
  50.     /**
  51.      * Singleton page of Frontend_Video class
  52.      *
  53.      * @return Frontend_Video
  54.      */
  55.     public static function getInstance() {
  56.         if ( null === static::$instance ) {
  57.             static::$instance = new static();
  58.         }
  59.  
  60.         return static::$instance;
  61.     }
  62.  
  63.     /**
  64.      * Video action handler
  65.      */
  66.     public function video_handler() {
  67.         if ( is_user_logged_in() ) {
  68.             $this->do_action_type();
  69.         } else {
  70.             wp_send_json(
  71.                 array(
  72.                     'response' => 0,
  73.                     'message'  => jnews_return_translation( 'You must login to do this thing!', 'jnews-video', 'video_must_login' ),
  74.                 )
  75.             );
  76.         }
  77.  
  78.         die();
  79.     }
  80.  
  81.     /**
  82.      * Video action
  83.      */
  84.     public function do_action_type() {
  85.         $nonce = empty( $_POST['nonce'] ) ? false : wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'jnews-video-frontend-nonce' );
  86.         if ( $nonce && isset( $_POST['url'] ) && isset( $_POST['type'] ) ) {
  87.             $type = sanitize_key( $_POST['type'] );
  88.             $url  = esc_url( $_POST['url'] );
  89.             switch ( $type ) {
  90.                 case 'embed-video':
  91.                     $details = VideoAttribute::getInstance()->get_video_attribute( $url );
  92.                     if ( ! is_wp_error( $details ) ) {
  93.                         if ( ! empty( $details ) ) {
  94.                             wp_send_json(
  95.                                 array(
  96.                                     'response' => 1,
  97.                                     'details'  => $details,
  98.                                 )
  99.                             );
  100.                         }
  101.                         wp_send_json(
  102.                             array(
  103.                                 'response' => 0,
  104.                                 'message'  => jnews_return_translation( 'Provider is not supported', 'jnews-video', 'provider_not_supported' ),
  105.                             )
  106.                         );
  107.                     }
  108.                     wp_send_json(
  109.                         array(
  110.                             'response' => 0,
  111.                             'message'  => jnews_return_translation( 'Internal Server Error!', 'jnews-video', 'internal_server_error' ),
  112.                         )
  113.                     );
  114.                     break;
  115.                 default:
  116.                     wp_send_json(
  117.                         array(
  118.                             'response' => 0,
  119.                             'message'  => jnews_return_translation( 'Internal Server Error!', 'jnews-video', 'internal_server_error' ),
  120.                         )
  121.                     );
  122.                     break;
  123.             }
  124.         }
  125.     }
  126.  
  127.     /**
  128.      * Frontend_Video submit handler
  129.      *
  130.      * @return bool
  131.      */
  132.     public function submit_handler() {
  133.         if ( defined( 'JNEWS_SANDBOX_URL' ) ) {
  134.             return false;
  135.         }
  136.  
  137.         if ( isset( $_REQUEST['jnews-action'] ) && ! empty( $_REQUEST['jnews-editor-nonce'] ) && wp_verify_nonce( $_REQUEST['jnews-editor-nonce'], 'jnews-editor' ) ) {
  138.             $action = $_REQUEST['jnews-action'];
  139.  
  140.             switch ( $action ) {
  141.                 case 'upload-video':
  142.                 case 'edit-video':
  143.                     $this->global_post_handler( $action );
  144.                     break;
  145.                 default:
  146.                     return false;
  147.             }
  148.         }
  149.  
  150.         return false;
  151.     }
  152.  
  153.  
  154.     protected function global_post_handler( $action ) {
  155.  
  156.         try {
  157.             $post_id   = '';
  158.             $user_id   = get_current_user_id();
  159.             $video_url = '';
  160.  
  161.             if ( 'edit-video' === $action ) {
  162.                 if ( isset( $_POST['post-id'] ) ) {
  163.                     $post_id = (int) sanitize_text_field( $_POST['post-id'] );
  164.                 }
  165.                 if ( empty( $post_id ) ) {
  166.                     throw new Exception( esc_html__( 'Post not found!', 'jnews-video' ) );
  167.                 }
  168.  
  169.                 $temporary_post = get_post( $post_id );
  170.                 if ( ! $temporary_post ) {
  171.                     throw new Exception( esc_html__( 'Post not found!', 'jnews-video' ) );
  172.                 }
  173.  
  174.                 if ( $user_id !== (int) $temporary_post->post_author ) {
  175.                     throw new Exception( sprintf( jnews_return_translation( 'User %s is not the owner!', 'jnews-video', 'user_is_not_the_owner' ), $user_id ) );
  176.                 }
  177.             }
  178.  
  179.             if ( empty( $_POST['title'] ) ) {
  180.                 throw new Exception( esc_html__( 'Post title cannot be empty', 'jnews-video' ) );
  181.             }
  182.  
  183.             if ( isset( $_POST['video-format'] ) ) {
  184.                 if ( 'video' === $_POST['video-format'] ) {
  185.                     $video_url = isset( $_POST['video'] ) ? $_POST['video'] : '';
  186.                 }
  187.                 if ( 'embed-video' === $_POST['video-format'] ) {
  188.                     $video_url  = isset( $_POST['embed-video'] ) ? $_POST['embed-video'] : '';
  189.                     $video_type = VideoAttribute::getInstance()->get_video_provider( $video_url );
  190.                     if ( 'mp4' !== $video_type && 'oembed' !== $video_type ) {
  191.                         $video_attribute = VideoAttribute::getInstance()->get_video_attribute( $video_url );
  192.                     }
  193.                 }
  194.             }
  195.  
  196.             if ( empty( $video_url ) ) {
  197.                 throw new Exception( esc_html__( 'Video cannot be empty', 'jnews-video' ) );
  198.             }
  199.  
  200.             if ( isset( $video_attribute ) && empty( $video_attribute ) ) {
  201.                 throw new Exception( esc_html__( 'URL or embed code is not supported', 'jnews-video' ) );
  202.             }
  203.  
  204.             $title   = sanitize_text_field( $_POST['title'] );
  205.             $content = $_POST['content'];
  206.  
  207.             $args = array(
  208.                 'post_title'   => $title,
  209.                 'post_content' => $content,
  210.             );
  211.             if ( 'edit-video' === $action ) {
  212.                 $args['ID'] = $post_id;
  213.                 $args       = apply_filters( 'jnews_frontend_submit_edit_video', $args );
  214.                 $post_id    = wp_update_post( $args );
  215.             } else {
  216.                 $args['post_type']   = 'post';
  217.                 $args['post_status'] = 'pending';
  218.                 $args['post_author'] = $user_id;
  219.                 $args                = apply_filters( 'jnews_frontend_submit_upload_video', $args );
  220.                 $post_id             = wp_insert_post( $args );
  221.             }
  222.  
  223.             if ( is_wp_error( $post_id ) ) {
  224.                 throw new Exception( $post_id->get_error_message() );
  225.             } else {
  226.                 $single_post  = get_post_meta( $post_id, 'jnews_single_post', true );
  227.                 $video_option = get_post_meta( $post_id, 'jnews_video_option', true );
  228.  
  229.                 if ( isset( $_POST['subtitle'] ) ) {
  230.                     update_post_meta( $post_id, 'post_subtitle', sanitize_text_field( $_POST['subtitle'] ) );
  231.                 }
  232.  
  233.                 if ( isset( $_POST['primary-category'] ) ) {
  234.                     update_post_meta( $post_id, 'jnews_primary_category', array( 'id' => (int) sanitize_text_field( $_POST['primary-category'] ) ) );
  235.                 }
  236.  
  237.                 if ( isset( $_POST['category'] ) ) {
  238.                     wp_set_post_terms( $post_id, $_POST['category'], 'category' );
  239.                 }
  240.  
  241.                 if ( isset( $_POST['tag'] ) ) {
  242.                     wp_set_post_tags( $post_id, array_map( 'intval', explode( ',', $_POST['tag'] ) ) );
  243.                 }
  244.  
  245.                 if ( isset( $_POST['source_name'] ) ) {
  246.                     $source_name = sanitize_text_field( $_POST['source_name'] );
  247.                     if ( isset( $single_post ) && is_array( $single_post ) ) {
  248.                         $single_post['source_name'] = $source_name;
  249.                     } else {
  250.                         $single_post = array(
  251.                             'source_name' => $source_name,
  252.                         );
  253.                     }
  254.                     if ( isset( $_POST['source_url'] ) ) {
  255.                         $single_post['source_url'] = esc_url( $_POST['source_url'] );
  256.                     }
  257.                 }
  258.  
  259.                 if ( isset( $_POST['via_name'] ) ) {
  260.                     $via_name = sanitize_text_field( $_POST['via_name'] );
  261.                     if ( isset( $single_post ) && is_array( $single_post ) ) {
  262.                         $single_post['via_name'] = $via_name;
  263.                     } else {
  264.                         $single_post = array(
  265.                             'via_name' => $via_name,
  266.                         );
  267.                     }
  268.                     if ( isset( $_POST['via_url'] ) ) {
  269.                         $single_post['via_url'] = esc_url( $_POST['via_url'] );
  270.                     }
  271.                 }
  272.  
  273.                 if ( isset( $_POST['duration'] ) ) {
  274.                     $duration = sanitize_text_field( $_POST['duration'] );
  275.                     if ( isset( $video_option ) && is_array( $video_option ) ) {
  276.                         $video_option['video_duration'] = $duration;
  277.                     } else {
  278.                         $video_option = array(
  279.                             'video_duration' => $duration,
  280.                         );
  281.                     }
  282.                 }
  283.  
  284.                 if ( isset( $_POST['video-preview-format'] ) ) {
  285.                     if ( isset( $video_option ) && is_array( $video_option ) ) {
  286.                         $video_option['video_preview'] = '';
  287.                     }
  288.                     $video_preview_format = 'video-preview';
  289.                     if ( filter_var( $_POST['video-preview-url'], FILTER_VALIDATE_URL ) ) {
  290.                         $video_preview_format = 'video-preview-url';
  291.                     }
  292.                     if ( 'video-preview' === $video_preview_format && isset( $_POST['video-preview'] ) ) {
  293.                         $video_preview_url = wp_get_attachment_url( (int) sanitize_text_field( $_POST['video-preview'][0] ) );
  294.                         if ( isset( $video_option ) && is_array( $video_option ) ) {
  295.                             $video_option['video_preview'] = $video_preview_url;
  296.                         } else {
  297.                             $video_option = array(
  298.                                 'video_preview' => $video_preview_url,
  299.                             );
  300.                         }
  301.                     }
  302.                     if ( 'video-preview-url' === $video_preview_format && isset( $_POST['video-preview-url'] ) ) {
  303.                         $attachment_id     = VideoAttribute::getInstance()->save_to_media_library( $post_id, isset( $_POST['video-preview-url'] ) ? ( $_POST['video-preview-url'] ) : '' );
  304.                         $video_preview_url = wp_get_attachment_url( $attachment_id );
  305.                         if ( isset( $video_option ) && is_array( $video_option ) ) {
  306.                             $video_option['video_preview'] = $video_preview_url;
  307.                         } else {
  308.                             $video_option = array(
  309.                                 'video_preview' => $video_preview_url,
  310.                             );
  311.                         }
  312.                     }
  313.                 }
  314.                 if ( isset( $video_attribute ) ) {
  315.                     if ( isset( $video_attribute['thumbnail'] ) ) {
  316.                         $video_attribute['thumbnail'] = '';
  317.                     }
  318.  
  319.                     if ( isset( $video_attribute['video_preview'] ) ) {
  320.                         unset( $video_attribute['video_preview'] );
  321.                     }
  322.                     VideoAttribute::getInstance()->save_attribute_to_post( $video_attribute, $post_id, $video_url );
  323.                 }
  324.                 if ( ! array_key_exists( 'image', $_POST ) && empty( $_POST['image-url'] ) ) {
  325.                     if ( metadata_exists( 'post', $post_id, '_thumbnail_id' ) ) {
  326.                         delete_post_meta( $post_id, '_thumbnail_id' );
  327.                     }
  328.                 } elseif ( isset( $_POST['image-format'] ) ) {
  329.                     if ( 'image' === $_POST['image-format'] && isset( $_POST['image'] ) ) {
  330.                         update_post_meta( $post_id, '_thumbnail_id', isset( $_POST['image'][0] ) ? (int) sanitize_text_field( $_POST['image'][0] ) : '' );
  331.                     }
  332.                     if ( 'image-url' === $_POST['image-format'] && isset( $_POST['image-url'] ) ) {
  333.                         $attachment_id = VideoAttribute::getInstance()->save_to_media_library( $post_id, isset( $_POST['image-url'] ) ? esc_url( $_POST['image-url'] ) : '' );
  334.                         if ( ! empty( $attachment_id ) ) {
  335.                             if ( 'edit-video' === $action ) {
  336.                                 update_post_meta( $post_id, '_thumbnail_id', $attachment_id );
  337.                             } else {
  338.                                 VideoAttribute::getInstance()->set_featured_image( $post_id, $attachment_id, $video_url );
  339.                             }
  340.                         }
  341.                     }
  342.                 }
  343.  
  344.                 set_post_format( $post_id, 'video' );
  345.                 update_post_meta( $post_id, '_format_video_embed', $video_url );
  346.                 update_post_meta( $post_id, 'jnews_video_option', $video_option );
  347.                 update_post_meta( $post_id, 'jnews_single_post', $single_post );
  348.  
  349.                 if ( 'edit-video' !== $action ) {
  350.                     if ( get_theme_mod( 'jnews_frontend_submit_enable_woocommerce', false ) ) {
  351.                         $this->reduce_listing_left( $post_id );
  352.                     }
  353.  
  354.                     update_post_meta( $post_id, $this->post_flag, true );
  355.                 }
  356.  
  357.                 if ( 'edit-video' === $action ) {
  358.                     jnews_flash_message( 'message', esc_html( __( 'Post updated successfully', 'jnews-video' ) ), 'alert-success' );
  359.                 } else {
  360.                     jnews_flash_message( 'message', esc_html( __( 'Your post has submitted for review', 'jnews-video' ) ), 'alert-success' );
  361.                 }
  362.  
  363.                 wp_redirect( jnews_home_url_multilang( $this->endpoint['upload']['slug'] . '/' . $post_id ) );
  364.                 exit;
  365.             }
  366.         } catch ( Exception $e ) {
  367.             jnews_flash_message( 'message', $e->getMessage(), 'alert-danger' );
  368.         }
  369.     }
  370. }
  371.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement