mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-16 13:13:33 +09:00
- file uploading/downloading fixes;
This commit is contained in:
@@ -39,6 +39,9 @@ if ( ! class_exists( 'um\core\Files' ) ) {
|
||||
|
||||
$this->setup_paths();
|
||||
|
||||
//add_action( 'template_redirect', array( &$this, 'file_download' ) );
|
||||
add_action( 'template_redirect', array( &$this, 'download_routing' ) );
|
||||
|
||||
$this->fonticon = array(
|
||||
'pdf' => array('icon' => 'um-faicon-file-pdf-o', 'color' => '#D24D4D' ),
|
||||
'txt' => array('icon' => 'um-faicon-file-text-o' ),
|
||||
@@ -66,6 +69,144 @@ if ( ! class_exists( 'um\core\Files' ) ) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* File download link generate
|
||||
*
|
||||
* @param int $form_id
|
||||
* @param string $field_key
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function get_download_link( $form_id, $field_key, $user_id ) {
|
||||
$field_key = urlencode( $field_key );
|
||||
|
||||
if ( UM()->permalinks ) {
|
||||
$url = get_site_url( get_current_blog_id() );
|
||||
$nonce = wp_create_nonce( $user_id . $form_id . 'um-download-nonce' );
|
||||
return $url . "/um-download/{$form_id}/{$field_key}/{$user_id}/{$nonce}";
|
||||
} else {
|
||||
$url = get_site_url( get_current_blog_id() );
|
||||
$nonce = wp_create_nonce( $user_id . $form_id . 'um-download-nonce' );
|
||||
return add_query_arg( array( 'um_action' => 'download', 'um_form' => $form_id, 'um_field' => $field_key, 'um_user' => $user_id, 'um_verify' => $nonce ), $url );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
function download_routing() {
|
||||
if ( 'download' !== get_query_var( 'um_action' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( empty( get_query_var( 'um_form' ) ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$form_id = get_query_var( 'um_form' );
|
||||
|
||||
if ( empty( get_query_var( 'um_field' ) ) ) {
|
||||
return false;
|
||||
}
|
||||
$field_key = urldecode( get_query_var( 'um_field' ) );
|
||||
|
||||
if ( empty( get_query_var( 'um_user' ) ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$user_id = get_query_var( 'um_user' );
|
||||
$user = get_userdata( $user_id );
|
||||
|
||||
if ( empty( $user ) || is_wp_error( $user ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( empty( get_query_var( 'um_verify' ) ) ||
|
||||
! wp_verify_nonce( get_query_var( 'um_verify' ), $user_id . $form_id . 'um-download-nonce' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
um_fetch_user( $user_id );
|
||||
$field_data = get_post_meta( $form_id, '_um_custom_fields', true );
|
||||
if ( empty( $field_data[ $field_key ] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! um_can_view_field( $field_data[ $field_key ] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$field_value = UM()->fields()->field_value( $field_key );
|
||||
if ( empty( $field_value ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$download_type = $field_data[ $field_key ]['type'];
|
||||
|
||||
if ( $download_type === 'file' ) {
|
||||
$this->file_download( $user_id, $field_key, $field_value );
|
||||
} else {
|
||||
$this->image_download( $user_id, $field_key, $field_value );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $user_id
|
||||
* @param $field_key
|
||||
* @param $field_value
|
||||
*/
|
||||
function image_download( $user_id, $field_key, $field_value ) {
|
||||
$file_path = UM()->uploader()->get_upload_base_dir() . $user_id . DIRECTORY_SEPARATOR . $field_value;
|
||||
$file_info = get_user_meta( $user_id, $field_key . "_metadata", true );
|
||||
|
||||
$size = filesize( $file_path );
|
||||
$originalname = $file_info['original_name'];
|
||||
$type = $file_info['type'];
|
||||
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: ' . $type );
|
||||
header('Content-Disposition: inline; filename="' . $originalname . '"');
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: ' . $size);
|
||||
readfile( $file_path );
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $user_id
|
||||
* @param $field_key
|
||||
* @param $field_value
|
||||
*/
|
||||
function file_download( $user_id, $field_key, $field_value ) {
|
||||
$file_path = UM()->uploader()->get_upload_base_dir() . $user_id . DIRECTORY_SEPARATOR . $field_value;
|
||||
$file_info = get_user_meta( $user_id, $field_key . "_metadata", true );
|
||||
|
||||
$size = filesize( $file_path );
|
||||
$originalname = $file_info['original_name'];
|
||||
$type = $file_info['type'];
|
||||
|
||||
header('Content-Description: File Transfer');
|
||||
header('Content-Type: ' . $type );
|
||||
header('Content-Disposition: attachment; filename="' . $originalname . '"');
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma: public');
|
||||
header('Content-Length: ' . $size);
|
||||
readfile( $file_path );
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove file by AJAX
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user