Source Code for /public/appendix-quine/index.php
<?php
require('../inc/functions.php');
add_header('Appendix C: Source Code for <em>This Site</em>');
?>
<p>
The source code for this site <a href="https://github.com/dan-q/php-cookery-class">is available on GitHub</a>,
but you can also browse it right here.
</p>
<ul class="source-tree">
<?php
function render_file_link( $file ) {
$app_root = realpath( __DIR__ . '/../../' ) . '/';
$file = str_replace( $app_root, '', realpath( $file ) );
echo '<li><a href="/source-viewer.php?file=' . $file . '">' . basename( $file ) . '</a></li>';
}
function sort_files( $files ) {
$public_dir = null;
$directories = [];
$index_file = null;
$other_files = [];
foreach( $files as $file ) {
if( is_dir( $file ) && ( basename( $file ) === 'public' ) ) {
$public_dir = $file;
} elseif( is_dir( $file ) ) {
$directories[] = $file;
} elseif( basename( $file ) === 'index.php' ) {
$index_file = $file;
} else {
$other_files[] = $file;
}
}
sort( $directories );
sort( $other_files );
$sorted = [];
if( $public_dir !== null ) $sorted[] = $public_dir;
$sorted = array_merge( $sorted, $directories );
if( $index_file !== null ) $sorted[] = $index_file;
$sorted = array_merge( $sorted, $other_files );
return $sorted;
}
function render_tree( $path ) {
$files = sort_files( glob($path . '/*') );
$files_to_exclude = [
realpath( __DIR__ . '/../../vendor' ),
];
foreach( $files as $file ) {
if( in_array( realpath( $file ), $files_to_exclude ) ) continue;
$file_name = basename( $file );
if( is_dir( $file ) ) {
echo '<li>' . $file_name . '<ul>';
render_tree( $file );
echo '</ul></li>';
} else {
render_file_link( $file );
}
}
}
render_tree( '../../' );
?>
</ul>
<?php
add_footer();
?>