mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 22:30:04 +00:00
File Editors: Display list of theme/plugin files in scrollable directory tree.
Props WraithKenny, afercia, melchoyce, westonruter. Amends [41721]. Fixes #24048. git-svn-id: https://develop.svn.wordpress.org/trunk@41851 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -269,6 +269,178 @@ function update_recently_edited( $file ) {
|
||||
update_option( 'recently_edited', $oldfiles );
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a tree structure for the Theme Editor's file list.
|
||||
*
|
||||
* @since 4.9.0
|
||||
* @access private
|
||||
*
|
||||
* @param array $allowed_files List of theme file paths.
|
||||
* @return array Tree structure for listing theme files.
|
||||
*/
|
||||
function wp_make_theme_file_tree( $allowed_files ) {
|
||||
$tree_list = array();
|
||||
foreach ( $allowed_files as $file_name => $absolute_filename ) {
|
||||
$list = explode( '/', $file_name );
|
||||
$last_dir = &$tree_list;
|
||||
foreach ( $list as $dir ) {
|
||||
$last_dir =& $last_dir[ $dir ];
|
||||
}
|
||||
$last_dir = $file_name;
|
||||
}
|
||||
return $tree_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the formatted file list for the Theme Editor.
|
||||
*
|
||||
* @since 4.9.0
|
||||
* @access private
|
||||
*
|
||||
* @param array|string $tree List of file/folder paths, or filename.
|
||||
* @param int $level The aria-level for the current iteration.
|
||||
* @param int $size The aria-setsize for the current iteration.
|
||||
* @param int $index The aria-posinset for the current iteration.
|
||||
*/
|
||||
function wp_print_theme_file_tree( $tree, $level = 2, $size = 1, $index = 1 ) {
|
||||
global $relative_file, $stylesheet;
|
||||
|
||||
if ( is_array( $tree ) ) {
|
||||
$index = 0;
|
||||
$size = count( $tree );
|
||||
foreach ( $tree as $label => $theme_file ) :
|
||||
$index++;
|
||||
if ( ! is_array( $theme_file ) ) {
|
||||
wp_print_theme_file_tree( $theme_file, $level, $index, $size );
|
||||
continue;
|
||||
}
|
||||
?>
|
||||
<li role="treeitem" aria-expanded="true" tabindex="-1"
|
||||
aria-level="<?php echo esc_attr( $level ); ?>"
|
||||
aria-setsize="<?php echo esc_attr( $size ); ?>"
|
||||
aria-posinset="<?php echo esc_attr( $index ); ?>">
|
||||
<span class="folder-label"><?php echo esc_html( $label ); ?> <span class="screen-reader-text"><?php _e( 'folder' ); ?></span><span aria-hidden="true" class="icon"></span></span>
|
||||
<ul role="group" class="tree-folder"><?php wp_print_theme_file_tree( $theme_file, $level + 1, $index, $size ); ?></ul>
|
||||
</li>
|
||||
<?php
|
||||
endforeach;
|
||||
} else {
|
||||
$filename = $tree;
|
||||
$url = add_query_arg(
|
||||
array(
|
||||
'file' => rawurlencode( $tree ),
|
||||
'theme' => rawurlencode( $stylesheet ),
|
||||
),
|
||||
admin_url( 'theme-editor.php' )
|
||||
);
|
||||
?>
|
||||
<li role="none" class="<?php echo esc_attr( $relative_file === $filename ? 'current-file' : '' ); ?>">
|
||||
<a role="treeitem" tabindex="<?php echo esc_attr( $relative_file === $filename ? '0' : '-1' ); ?>"
|
||||
href="<?php echo esc_url( $url ); ?>"
|
||||
aria-level="<?php echo esc_attr( $level ); ?>"
|
||||
aria-setsize="<?php echo esc_attr( $size ); ?>"
|
||||
aria-posinset="<?php echo esc_attr( $index ); ?>">
|
||||
<?php
|
||||
$file_description = esc_html( get_file_description( $filename ) );
|
||||
if ( $file_description !== $filename && basename( $filename ) !== $file_description ) {
|
||||
$file_description .= '<br /><span class="nonessential">(' . esc_html( $filename ) . ')</span>';
|
||||
}
|
||||
|
||||
if ( $relative_file === $filename ) {
|
||||
echo '<span class="notice notice-info">' . $file_description . '</span>';
|
||||
} else {
|
||||
echo $file_description;
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a tree structure for the Plugin Editor's file list.
|
||||
*
|
||||
* @since 4.9.0
|
||||
* @access private
|
||||
*
|
||||
* @param string $plugin_editable_files List of plugin file paths.
|
||||
* @return array Tree structure for listing plugin files.
|
||||
*/
|
||||
function wp_make_plugin_file_tree( $plugin_editable_files ) {
|
||||
$tree_list = array();
|
||||
foreach ( $plugin_editable_files as $plugin_file ) {
|
||||
$list = explode( '/', preg_replace( '#^.+?/#', '', $plugin_file ) );
|
||||
$last_dir = &$tree_list;
|
||||
foreach ( $list as $dir ) {
|
||||
$last_dir =& $last_dir[ $dir ];
|
||||
}
|
||||
$last_dir = $plugin_file;
|
||||
}
|
||||
return $tree_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the formatted file list for the Plugin Editor.
|
||||
*
|
||||
* @since 4.9.0
|
||||
* @access private
|
||||
*
|
||||
* @param array|string $tree List of file/folder paths, or filename.
|
||||
* @param string $label Name of file or folder to print.
|
||||
* @param int $level The aria-level for the current iteration.
|
||||
* @param int $size The aria-setsize for the current iteration.
|
||||
* @param int $index The aria-posinset for the current iteration.
|
||||
*/
|
||||
function wp_print_plugin_file_tree( $tree, $label = '', $level = 2, $size = 1, $index = 1 ) {
|
||||
global $file, $plugin;
|
||||
if ( is_array( $tree ) ) {
|
||||
$index = 0;
|
||||
$size = count( $tree );
|
||||
foreach ( $tree as $label => $plugin_file ) :
|
||||
$index++;
|
||||
if ( ! is_array( $plugin_file ) ) {
|
||||
wp_print_plugin_file_tree( $plugin_file, $label, $level, $index, $size );
|
||||
continue;
|
||||
}
|
||||
?>
|
||||
<li role="treeitem" aria-expanded="true" tabindex="-1"
|
||||
aria-level="<?php echo esc_attr( $level ); ?>"
|
||||
aria-setsize="<?php echo esc_attr( $size ); ?>"
|
||||
aria-posinset="<?php echo esc_attr( $index ); ?>">
|
||||
<span class="folder-label"><?php echo esc_html( $label ); ?> <span class="screen-reader-text"><?php _e( 'folder' ); ?></span><span aria-hidden="true" class="icon"></span></span>
|
||||
<ul role="group" class="tree-folder"><?php wp_print_plugin_file_tree( $plugin_file, '', $level + 1, $index, $size ); ?></ul>
|
||||
</li>
|
||||
<?php
|
||||
endforeach;
|
||||
} else {
|
||||
$url = add_query_arg(
|
||||
array(
|
||||
'file' => rawurlencode( $tree ),
|
||||
'plugin' => rawurlencode( $plugin ),
|
||||
),
|
||||
admin_url( 'plugin-editor.php' )
|
||||
);
|
||||
?>
|
||||
<li role="none" class="<?php echo esc_attr( $file === $tree ? 'current-file' : '' ); ?>">
|
||||
<a role="treeitem" tabindex="<?php echo esc_attr( $file === $tree ? '0' : '-1' ); ?>"
|
||||
href="<?php echo esc_url( $url ); ?>"
|
||||
aria-level="<?php echo esc_attr( $level ); ?>"
|
||||
aria-setsize="<?php echo esc_attr( $size ); ?>"
|
||||
aria-posinset="<?php echo esc_attr( $index ); ?>">
|
||||
<?php
|
||||
if ( $file === $tree ) {
|
||||
echo '<span class="notice notice-info">' . esc_html( $label ) . '</span>';
|
||||
} else {
|
||||
echo esc_html( $label );
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flushes rewrite rules if siteurl, home or page_on_front changed.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user