Version Description
Download this release
Release Info
Developer | dd32-githubsync |
Plugin | Add From Server |
Version | 3.4.3 |
Comparing to | |
See all releases |
Code changes from version 3.4.2 to 3.4.3
- add-from-server.php +3 -3
- changelog.txt +5 -0
- class.add-from-server.php +54 -15
- readme.md +7 -2
add-from-server.php
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
namespace dd32\WordPress\AddFromServer;
|
3 |
/*
|
4 |
* Plugin Name: Add From Server
|
5 |
-
* Version: 3.4.
|
6 |
* Plugin URI: https://dd32.id.au/wordpress-plugins/add-from-server/
|
7 |
-
* Description: Plugin to allow the Media Manager to add files from the webservers filesystem.
|
8 |
* Author: Dion Hulse
|
9 |
* Author URI: https://dd32.id.au/
|
10 |
* Text Domain: add-from-server
|
@@ -16,7 +16,7 @@ if ( !is_admin() ) {
|
|
16 |
|
17 |
const MIN_WP = '5.4';
|
18 |
const MIN_PHP = '7.0';
|
19 |
-
const VERSION = '3.4.
|
20 |
|
21 |
// Dynamic constants must be define()'d.
|
22 |
define( __NAMESPACE__ . '\PLUGIN', plugin_basename( __FILE__ ) );
|
2 |
namespace dd32\WordPress\AddFromServer;
|
3 |
/*
|
4 |
* Plugin Name: Add From Server
|
5 |
+
* Version: 3.4.3
|
6 |
* Plugin URI: https://dd32.id.au/wordpress-plugins/add-from-server/
|
7 |
+
* Description: Plugin to allow the Media Manager to add files from the webservers filesystem.
|
8 |
* Author: Dion Hulse
|
9 |
* Author URI: https://dd32.id.au/
|
10 |
* Text Domain: add-from-server
|
16 |
|
17 |
const MIN_WP = '5.4';
|
18 |
const MIN_PHP = '7.0';
|
19 |
+
const VERSION = '3.4.3';
|
20 |
|
21 |
// Dynamic constants must be define()'d.
|
22 |
define( __NAMESPACE__ . '\PLUGIN', plugin_basename( __FILE__ ) );
|
changelog.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
1 |
= 3.4.2 =
|
2 |
* Restore case insensitive alphabetical sorting
|
3 |
|
1 |
+
= 3.4.3 =
|
2 |
+
* Better handling for `/` as the root path
|
3 |
+
* Better compatibility with certain WordPress docker images
|
4 |
+
* Better handling for some empty folders
|
5 |
+
|
6 |
= 3.4.2 =
|
7 |
* Restore case insensitive alphabetical sorting
|
8 |
|
class.add-from-server.php
CHANGED
@@ -323,7 +323,7 @@ class Plugin {
|
|
323 |
protected function get_default_dir() {
|
324 |
$root = $this->get_root();
|
325 |
|
326 |
-
if (
|
327 |
return WP_CONTENT_DIR;
|
328 |
}
|
329 |
|
@@ -353,15 +353,13 @@ class Plugin {
|
|
353 |
$cwd_relative = substr( $cwd, strlen( $root ) );
|
354 |
|
355 |
// Make a list of the directories the user can enter.
|
356 |
-
$dirparts = [
|
357 |
-
|
358 |
-
'<a href="' . esc_url( add_query_arg( 'path', '/', $url ) ) . '">' . esc_html( basename( $root ) ) . '</a>'
|
359 |
-
];
|
360 |
|
361 |
$dir_path = '';
|
362 |
-
foreach ( explode( '/', $cwd_relative ) as $dir ) {
|
363 |
$dir_path .= '/' . $dir;
|
364 |
-
$dirparts[] = '<a href="' . esc_url( add_query_arg( 'path', rawurlencode( $dir_path ), $url ) ) . '">' . esc_html( $dir ) . '/</a> ';
|
365 |
}
|
366 |
|
367 |
$dirparts = implode( '', $dirparts );
|
@@ -388,6 +386,27 @@ class Plugin {
|
|
388 |
return false;
|
389 |
}
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
if ( 1 === count( $files ) && is_dir( $files[0] ) ) {
|
392 |
return $get_import_root( $files[0] );
|
393 |
}
|
@@ -395,28 +414,46 @@ class Plugin {
|
|
395 |
return $path;
|
396 |
};
|
397 |
|
398 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
399 |
$import_root = $get_import_root( $path );
|
|
|
|
|
|
|
|
|
|
|
400 |
|
401 |
$data = [
|
402 |
'text' => substr(
|
403 |
-
|
404 |
strlen( $cwd_relative )
|
405 |
) . '/',
|
406 |
-
'path' =>
|
407 |
];
|
|
|
|
|
408 |
} );
|
409 |
|
|
|
|
|
410 |
// Sort the directories case insensitively.
|
411 |
uasort( $directories, $sort_by_text );
|
412 |
|
413 |
// Prefix the parent directory.
|
414 |
-
if ( str_starts_with( dirname( $cwd ), $root ) ) {
|
415 |
$directories = array_merge(
|
416 |
[
|
417 |
dirname( $cwd ) => [
|
418 |
'text' => __( 'Parent Folder', 'add-from-server' ),
|
419 |
-
'path' =>
|
420 |
]
|
421 |
],
|
422 |
$directories
|
@@ -426,13 +463,13 @@ class Plugin {
|
|
426 |
$files = array_flip( array_filter( $nodes, function( $node ) {
|
427 |
return is_file( $node );
|
428 |
} ) );
|
429 |
-
array_walk( $files, function( &$data, $path ) use( $root ) {
|
430 |
$importable = ( false !== wp_check_filetype( $path )['type'] || current_user_can( 'unfiltered_upload' ) );
|
431 |
$readable = is_readable( $path );
|
432 |
|
433 |
$data = [
|
434 |
'text' => basename( $path ),
|
435 |
-
'file' =>
|
436 |
'importable' => $importable,
|
437 |
'readable' => $readable,
|
438 |
'error' => (
|
@@ -476,7 +513,7 @@ class Plugin {
|
|
476 |
<td> </td>
|
477 |
<td><a href="%s">%s</a></td>
|
478 |
</tr>',
|
479 |
-
esc_url( add_query_arg( 'path', $dir['path'], $url ) ),
|
480 |
esc_html( $dir['text'] )
|
481 |
);
|
482 |
}
|
@@ -565,6 +602,8 @@ Thanks! Dion.', 'add-from-server' );
|
|
565 |
$old_root = get_option( 'frmsvr_root', '' );
|
566 |
|
567 |
if (
|
|
|
|
|
568 |
str_contains( $old_root, '%' )
|
569 |
&&
|
570 |
! defined( 'ADD_FROM_SERVER' )
|
323 |
protected function get_default_dir() {
|
324 |
$root = $this->get_root();
|
325 |
|
326 |
+
if ( str_starts_with( WP_CONTENT_DIR, $root ) ) {
|
327 |
return WP_CONTENT_DIR;
|
328 |
}
|
329 |
|
353 |
$cwd_relative = substr( $cwd, strlen( $root ) );
|
354 |
|
355 |
// Make a list of the directories the user can enter.
|
356 |
+
$dirparts = [];
|
357 |
+
$dirparts[] = '<a href="' . esc_url( add_query_arg( 'path', rawurlencode( '/' ), $url ) ) . '">' . esc_html( trailingslashit( $root ) ) . '</a> ';
|
|
|
|
|
358 |
|
359 |
$dir_path = '';
|
360 |
+
foreach ( array_filter( explode( '/', $cwd_relative ) ) as $dir ) {
|
361 |
$dir_path .= '/' . $dir;
|
362 |
+
$dirparts[] = '<a href="' . esc_url( add_query_arg( 'path', rawurlencode( $dir_path ), $url ) ) . '">' . esc_html( $dir ?: basename( $root ) ) . '/</a> ';
|
363 |
}
|
364 |
|
365 |
$dirparts = implode( '', $dirparts );
|
386 |
return false;
|
387 |
}
|
388 |
|
389 |
+
$has_files = false;
|
390 |
+
foreach ( $files as $i => $file ) {
|
391 |
+
if ( is_file( $file ) ) {
|
392 |
+
$has_files = true;
|
393 |
+
break;
|
394 |
+
} else {
|
395 |
+
if ( $get_import_root( $file ) ) {
|
396 |
+
$has_files = true;
|
397 |
+
break;
|
398 |
+
} else {
|
399 |
+
unset( $files[ $i ] );
|
400 |
+
}
|
401 |
+
}
|
402 |
+
}
|
403 |
+
if ( ! $has_files ) {
|
404 |
+
return false;
|
405 |
+
}
|
406 |
+
|
407 |
+
// Rekey the array incase anything was removed.
|
408 |
+
$files = array_values( $files );
|
409 |
+
|
410 |
if ( 1 === count( $files ) && is_dir( $files[0] ) ) {
|
411 |
return $get_import_root( $files[0] );
|
412 |
}
|
414 |
return $path;
|
415 |
};
|
416 |
|
417 |
+
$get_root_relative_path = function( $path ) use( $root ) {
|
418 |
+
$root_offset = strlen( $root );
|
419 |
+
if ( '/' !== $root ) {
|
420 |
+
$root_offset += 1;
|
421 |
+
}
|
422 |
+
|
423 |
+
return substr( $path, $root_offset );
|
424 |
+
};
|
425 |
+
|
426 |
+
array_walk( $directories, function( &$data, $path ) use( $root, $cwd_relative, $get_import_root, $get_root_relative_path ) {
|
427 |
$import_root = $get_import_root( $path );
|
428 |
+
if ( ! $import_root ) {
|
429 |
+
// Unreadable, etc.
|
430 |
+
$data = false;
|
431 |
+
return;
|
432 |
+
}
|
433 |
|
434 |
$data = [
|
435 |
'text' => substr(
|
436 |
+
$get_root_relative_path( $import_root ),
|
437 |
strlen( $cwd_relative )
|
438 |
) . '/',
|
439 |
+
'path' => $get_root_relative_path( $import_root )
|
440 |
];
|
441 |
+
|
442 |
+
$data['text'] = ltrim( $data['text'], '/' );
|
443 |
} );
|
444 |
|
445 |
+
$directories = array_filter( $directories );
|
446 |
+
|
447 |
// Sort the directories case insensitively.
|
448 |
uasort( $directories, $sort_by_text );
|
449 |
|
450 |
// Prefix the parent directory.
|
451 |
+
if ( str_starts_with( dirname( $cwd ), $root ) && dirname( $cwd ) != $cwd ) {
|
452 |
$directories = array_merge(
|
453 |
[
|
454 |
dirname( $cwd ) => [
|
455 |
'text' => __( 'Parent Folder', 'add-from-server' ),
|
456 |
+
'path' => $get_root_relative_path( dirname( $cwd ) ) ?: '/',
|
457 |
]
|
458 |
],
|
459 |
$directories
|
463 |
$files = array_flip( array_filter( $nodes, function( $node ) {
|
464 |
return is_file( $node );
|
465 |
} ) );
|
466 |
+
array_walk( $files, function( &$data, $path ) use( $root, $get_root_relative_path ) {
|
467 |
$importable = ( false !== wp_check_filetype( $path )['type'] || current_user_can( 'unfiltered_upload' ) );
|
468 |
$readable = is_readable( $path );
|
469 |
|
470 |
$data = [
|
471 |
'text' => basename( $path ),
|
472 |
+
'file' => $get_root_relative_path( $path ),
|
473 |
'importable' => $importable,
|
474 |
'readable' => $readable,
|
475 |
'error' => (
|
513 |
<td> </td>
|
514 |
<td><a href="%s">%s</a></td>
|
515 |
</tr>',
|
516 |
+
esc_url( add_query_arg( 'path', rawurlencode( $dir['path'] ), $url ) ),
|
517 |
esc_html( $dir['text'] )
|
518 |
);
|
519 |
}
|
602 |
$old_root = get_option( 'frmsvr_root', '' );
|
603 |
|
604 |
if (
|
605 |
+
$old_root
|
606 |
+
&&
|
607 |
str_contains( $old_root, '%' )
|
608 |
&&
|
609 |
! defined( 'ADD_FROM_SERVER' )
|
readme.md
CHANGED
@@ -5,13 +5,13 @@ Add From Server
|
|
5 |
* Requires at least: 5.4
|
6 |
* Tested up to: 5.5
|
7 |
* Requires PHP: 7.0
|
8 |
-
* Stable tag: 3.4.
|
9 |
|
10 |
Add From Server is designed to help ease the pain of bad web hosts, allowing you to upload files via FTP or SSH and later import them into WordPress.
|
11 |
|
12 |
## Description
|
13 |
|
14 |
-
This plugin
|
15 |
|
16 |
Add From Server is designed to help ease the pain of bad web hosts, allowing you to upload files via FTP or SSH and later import them into WordPress.
|
17 |
|
@@ -32,6 +32,11 @@ https://developer.wordpress.org/cli/commands/media/import/
|
|
32 |
|
33 |
## Changelog
|
34 |
|
|
|
|
|
|
|
|
|
|
|
35 |
### 3.4.2
|
36 |
* Restore case insensitive alphabetical sorting
|
37 |
|
5 |
* Requires at least: 5.4
|
6 |
* Tested up to: 5.5
|
7 |
* Requires PHP: 7.0
|
8 |
+
* Stable tag: 3.4.3
|
9 |
|
10 |
Add From Server is designed to help ease the pain of bad web hosts, allowing you to upload files via FTP or SSH and later import them into WordPress.
|
11 |
|
12 |
## Description
|
13 |
|
14 |
+
This plugin offers limited support. Please do not expect new features or too many bugfixes. Features may be removed at any time.
|
15 |
|
16 |
Add From Server is designed to help ease the pain of bad web hosts, allowing you to upload files via FTP or SSH and later import them into WordPress.
|
17 |
|
32 |
|
33 |
## Changelog
|
34 |
|
35 |
+
### 3.4.3
|
36 |
+
* Better handling for `/` as the root path
|
37 |
+
* Better compatibility with certain WordPress docker images
|
38 |
+
* Better handling for some empty folders
|
39 |
+
|
40 |
### 3.4.2
|
41 |
* Restore case insensitive alphabetical sorting
|
42 |
|