<?php 
 
  /* 
  * Plugin Name: File Attachments for Posts & Pages 
  * Plugin URI: https://github.com/ValkyriaTech/file-attachments-posts-pages/ 
  * Description: 
  * Version: 2.2.0 
  * Author: ValkyriaTech 
  * Author URI: https://github.com/ValkyriaTech 
  * License: GPLv3 
  * License URI: https://www.gnu.org/licenses/gpl-3.0.pt-br.html 
  */ 
 
  function loadPdfFilesBox() { 
 
    wp_enqueue_script( 
      'dropzone', 
      plugin_dir_url(__FILE__) . 'js/dropzone.min.js', 
      null, 
      true 
    ); 
 
    wp_enqueue_script( 
      'main', 
      plugin_dir_url(__FILE__) . 'js/main.min.js', 
      null, 
      '2.2.0' 
    ); 
 
    wp_enqueue_style( 
      'dropzone-css', 
      plugin_dir_url(__FILE__) . 'css/dropzone.min.css', 
      null, 
      '5.7.2', 
      'screen' 
    ); 
 
    wp_enqueue_style( 
      'style', 
      plugin_dir_url(__FILE__) . 'css/style.min.css', 
      null, 
      '2.2.0', 
      'screen' 
    ); 
 
    //custom metabox 
    add_meta_box( 
      'fapp_attachments_block', 
      'Anexos', 
      'fapp_attachments_block', 
      'post', 
      'side' 
    ); 
 
    add_meta_box( 
      'fapp_attachments_block', 
      'Anexos', 
      'fapp_attachments_block', 
      'page', 
      'side' 
    ); 
 
  } 
  add_action('add_meta_boxes', 'loadPdfFilesBox'); 
 
  function fapp_attachments_block() { 
 
    $attachments = get_post_meta(get_the_ID(), 'fapp_attachment_list', true) ?? ''; 
 
    $attachmentsListBlock = ''; 
    if(!empty($attachments)) { 
      $attJson = json_decode($attachments); 
      foreach ($attJson as $key => $attachment) { 
        $attachmentsListBlock .= '<li class="att-item" id="attachment_' . $key . '"> 
          <span>' . $attachment->name . '</span> 
          <div class="action-btns"> 
            <a title="Open" class="link-btn" href="' . $attachment->url . '" target="blank" rel="noopener noreferrer"><i>?</i></a> 
            <i title="Details" data-key="' . $key . '" class="edit-btn">🖉</i> 
            <i title="Remove" data-key="' . $key . '" class="remove-btn">?</i> 
          </div> 
        </li>'; 
      } 
    } 
 
    ?> 
 
      <div id="attachmentDialog"> 
        <button type="button" id="closeAttachmentDialog"> 
          <i class="fas fa-times"></i> 
        </button> 
        <div class="row"> 
          <div class="column"> 
            <h3 id="fapp_attachmentTitleShow">Attachment Cover</h3> 
            <img title="Imagem de capa do anexo" id="fapp_attachmentCoverImageShow" src="<?= plugin_dir_url(__FILE__) . 'img/default.jpg' ?>" alt="Attachment Cover"> 
          </div> 
          <div class="column"> 
            <h3>Detalhes do anexo:</h3> 
            <input placeholder="Título" type="text" name="fapp_attachmentTitle" id="fapp_attachmentTitle"> 
            <br> 
            <textarea placeholder="Descrição" type="text" name="fapp_attachmentDescription" id="fapp_attachmentDescription"></textarea> 
            <br> 
            <label for="fapp_attachmentCoverImage" class="components-button is-secondary" id="fapp_attachmentCoverImageLabel" > 
              <i class="far fa-file-image"></i> 
              Alterar imagem de capa 
            </label> 
            <input type="file" id="fapp_attachmentCoverImage" name="fapp_attachmentCoverImage" value="" size="25"/> 
            <input type="hidden" name="fapp_attachmentFileUrl" id="fapp_attachmentFileUrl" value=""> 
            <button class="components-button is-primary" type="button" name="fapp_attachmentSend" id="fapp_attachmentSend">Salvar</button> 
          </div> 
        </div> 
      </div> 
 
      <div action="<?= get_site_url() . '/wp-admin/admin-ajax.php?action=fappUploadFile' ?>" id="attachmentDropzone" class="dropzone"></div> 
      <ul id="attachmentsContainer"><?= $attachmentsListBlock ?></ul> 
      <input type="hidden" id="fapp_attachment_list" name="fapp_attachment_list" value='<?= $attachments ?>'/> 
      <script> 
        var wpApiUrl = '<?= get_site_url() ?>/wp-admin/admin-ajax.php'; 
        var fileList = <?= (!empty($attachments) ? json_encode($attachments) : '""') ?>; 
      </script> 
    <?php 
  } 
 
  function fapp_metabox_save( $post_id ) { 
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; 
    if ( $parent_id = wp_is_post_revision( $post_id ) ) { 
        $post_id = $parent_id; 
    } 
    $fields = [ 
      'fapp_attachment_list' 
    ]; 
    foreach ( $fields as $field ) { 
      if ( array_key_exists( $field, $_POST ) ) { 
        update_post_meta( $post_id, $field, sanitize_text_field( $_POST[$field] ) ); 
      } 
    } 
  } 
  add_action('save_post', 'fapp_metabox_save'); 
 
  function fappUploadFile() { 
 
    $attachments = $_FILES['file']; 
 
    $supported_types = [ 
      'text/plain', 
      'text/csv', 
      'application/pdf', 
      'application/vnd.oasis.opendocument.text', 
      'application/msword' 
    ]; 
 
    // Get the file type of the upload 
    $arr_file_type = wp_check_filetype(basename($attachments['name'])); 
    $uploaded_type = $arr_file_type['type']; 
 
    // Check if the type is supported. If not, throw an error. 
    if(in_array($uploaded_type, $supported_types)) { 
 
      // Use the WordPress API to upload the file 
      $upload = wp_upload_bits($attachments['name'], null, file_get_contents($attachments['tmp_name'])); 
 
      if(isset($upload['error']) && $upload['error'] != 0) { 
          wp_die('There was an error uploading your file. The error is: ' . $upload['error']); 
      } else { 
        echo $upload['url']; 
      } 
 
    } else { 
        wp_die('Formato de arquivo não suportado!'); 
    } 
 
    die(); 
  } 
  add_action('wp_ajax_fappUploadFile', 'fappUploadFile'); 
  add_action('wp_ajax_nopriv_fappUploadFile', 'fappUploadFile'); 
 
  function fappUploadImage() { 
 
    $attachments = $_FILES['file']; 
 
    // Setup the array of supported file types. In this case, it's just PDF. 
    $supported_types = ['image/jpg', 'image/jpeg', 'image/png']; 
 
    // Get the file type of the upload 
    $arr_file_type = wp_check_filetype(basename($attachments['name'])); 
    $uploaded_type = $arr_file_type['type']; 
 
    // Check if the type is supported. If not, throw an error. 
    if(in_array($uploaded_type, $supported_types)) { 
 
      // Use the WordPress API to upload the file 
      $upload = wp_upload_bits($attachments['name'], null, file_get_contents($attachments['tmp_name'])); 
 
      if(isset($upload['error']) && $upload['error'] != 0) { 
          wp_die('There was an error uploading your file. The error is: ' . $upload['error']); 
      } else { 
        echo $upload['url']; 
      } 
 
    } else { 
        wp_die('Formato de arquivo não suportado!'); 
    } 
 
    die(); 
  } 
  add_action('wp_ajax_fappUploadImage', 'fappUploadImage'); 
  add_action('wp_ajax_nopriv_fappUploadImage', 'fappUploadImage'); 
 
?> 
 
 |