AnsPress_Uploader()
Description #
AnsPress upload hooks.
Source #
File: includes/upload.php
class AnsPress_Uploader { /** * Delete question or answer attachment. */ public static function delete_attachment() { $attachment_id = ap_sanitize_unslash( 'attachment_id', 'r' ); if ( ! anspress_verify_nonce( 'delete-attachment-' . $attachment_id ) ) { ap_ajax_json( 'no_permission' ); } // If user cannot delete then die. if ( ! ap_user_can_delete_attachment( $attachment_id ) ) { ap_ajax_json( 'no_permission' ); } $attach = get_post( $attachment_id ); $row = wp_delete_attachment( $attachment_id, true ); if ( false !== $row ) { ap_update_post_attach_ids( $attach->post_parent ); ap_ajax_json( array( 'success' => true ) ); } ap_ajax_json( array( 'success' => false, 'snackbar' => array( 'message' => __( 'Unable to delete attachment', 'anspress-question-answer' ) ), ) ); } /** * Update users temporary attachment count before a attachment deleted. * * @param integer $post_id Post ID. */ public static function deleted_attachment( $post_id ) { $_post = get_post( $post_id ); if ( 'attachment' === $_post->post_type ) { ap_update_user_temp_media_count(); ap_update_post_attach_ids( $_post->post_parent ); } } /** * Schedule event twice daily. */ public static function create_single_schedule() { // Check if event scheduled before. if ( ! wp_next_scheduled( 'ap_delete_temp_attachments' ) ) { // Shedule event to run every day. wp_schedule_event( time(), 'twicedaily', 'ap_delete_temp_attachments' ); } } /** * Delete temporary media which are older then today. * * @since 4.1.8 Delete files from temporary directory as we well. */ public static function cron_delete_temp_attachments() { global $wpdb; $posts = $wpdb->get_results( "SELECT ID, post_author, post_parent FROM $wpdb->posts WHERE post_type = 'attachment' AND post_title='_ap_temp_media' AND post_date <= CURDATE()" ); // phpcs:ignore WordPress.DB $authors = array(); if ( $posts ) { foreach ( (array) $posts as $_post ) { wp_delete_attachment( $_post->ID, true ); ap_update_post_attach_ids( $_post->post_parent ); $authors[] = $_post->post_author; } // Update temporary attachment counts of a user. foreach ( (array) array_unique( $authors ) as $author ) { ap_update_user_temp_media_count( $author ); } } // Delete all temporary files. $uploads = wp_upload_dir(); $files = glob( $uploads['basedir'] . '/anspress-temp/*' ); $interval = strtotime( '-2 hours' ); // Make sure WP_Filesystem is loaded. if ( ! function_exists( 'WP_Filesystem' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } // Initialize WP_Filesystem. if ( ! \WP_Filesystem() ) { // Unable to initialize WP_Filesystem, handle error accordingly. return; } global $wp_filesystem; if ( $files ) { foreach ( $files as $file ) { if ( filemtime( $file ) <= $interval ) { $wp_filesystem->delete( $file ); } } } } /** * Ajax callback for image upload form. * * @return void * @since 4.1.8 */ public static function upload_modal() { // Check nonce. if ( ! anspress_verify_nonce( 'ap_upload_image' ) ) { ap_ajax_json( 'something_wrong' ); } // Check if user have permission to upload tem image. if ( ! ap_user_can_upload() ) { ap_send_json( array( 'success' => false, 'snackbar' => array( 'message' => __( 'Sorry! you do not have permission to upload image.', 'anspress-question-answer' ), ), ) ); } $image_for = ap_sanitize_unslash( 'image_for', 'r' ); ob_start(); anspress()->get_form( 'image_upload' )->generate( array( 'hidden_fields' => array( array( 'name' => 'action', 'value' => 'ap_image_upload', ), array( 'name' => 'image_for', 'value' => $image_for, ), ), ) ); $html = ob_get_clean(); ap_send_json( array( 'success' => true, 'action' => 'ap_upload_modal', 'html' => $html, 'title' => __( 'Select media file to upload', 'anspress-question-answer' ), ) ); } /** * Ajax callback for `ap_image_upload`. Process `image_upload` form. * * @return void * @since 4.1.8 * @since 4.1.13 Pass a `image_for` in JSON so that javascript callback can be triggered. */ public static function image_upload() { $form = anspress()->get_form( 'image_upload' ); // Check if user have permission to upload tem image. if ( ! ap_user_can_upload() ) { ap_send_json( array( 'success' => false, 'snackbar' => array( 'message' => __( 'Sorry! you do not have permission to upload image.', 'anspress-question-answer' ), ), ) ); } // Nonce check. if ( ! $form->is_submitted() ) { ap_ajax_json( 'something_wrong' ); } $image_for = ap_sanitize_unslash( 'image_for', 'r' ); $values = $form->get_values(); // Check for errors. if ( $form->have_errors() ) { ap_send_json( array( 'success' => false, 'snackbar' => array( 'message' => __( 'Unable to upload image(s). Please check errors.', 'anspress-question-answer' ), ), 'form_errors' => $form->errors, 'fields_errors' => $form->get_fields_errors(), ) ); } $field = $form->find( 'image' ); // Call save. $files = $field->save_cb(); $new_arr = array(); // Add a property to check if image or not. if ( ! empty( $files ) ) { $all_possible_images_ext = array( 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp' ); foreach ( $files as $file_basename => $file_url ) { // Get file extension from file name. $ext = pathinfo( $file_basename, PATHINFO_EXTENSION ); $new_arr[ $file_basename ] = array( 'ext' => $ext, 'filename' => $file_basename, 'is_image' => in_array( $ext, $all_possible_images_ext, true ), 'url' => $file_url, ); } $files = $new_arr; } $res = array( 'success' => true, 'action' => 'ap_image_upload', 'image_for' => $image_for, 'snackbar' => array( 'message' => __( 'Successfully uploaded image', 'anspress-question-answer' ) ), 'files' => $files, ); // Send response. if ( is_array( $res ) ) { ap_send_json( $res ); } ap_ajax_json( 'something_wrong' ); } /** * Callback for hook `intermediate_image_sizes_advanced`. * * @param array $sizes Image sizes. * @return array */ public static function image_sizes_advanced( $sizes ) { global $ap_thumbnail_only; if ( true === $ap_thumbnail_only ) { return array( 'thumbnail' => array( 'width' => 150, 'height' => 150, 'crop' => true, ), ); } return $sizes; } }
Expand full source code Collapse full source code View on GitHub: includes/upload.php:22
Add your comment