1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
<?php
namespace SIW;
class htaccess {
public static function init() {
$self = new self();
add_action( 'siw_update_plugin', [ $self, 'regenerate_htaccess' ] );
add_filter( 'after_rocket_htaccess_rules', [ $self, 'add_rules'] );
}
public function regenerate_htaccess() {
if ( ! function_exists( 'flush_rocket_htaccess' ) || ! function_exists( 'rocket_generate_config_file' ) ) {
return false;
}
flush_rocket_htaccess();
rocket_generate_config_file();
}
public function add_rules( string $marker ) {
$htaccess_rules = siw_get_data('htaccess');
foreach ( $htaccess_rules as $rules ) {
$marker .= $this->format_rules( $rules );
}
return $marker;
}
protected function format_rules( array $rules ) {
$defaults = [
'comment' => '',
'tag' => '',
'value' => '',
'lines' => [],
];
$rules = wp_parse_args( $rules, $defaults );
foreach ( $rules['lines'] as $index => $line ) {
if ( ! is_array( $line ) && ! empty( $rules['tag'] ) ) {
$rules['lines'][$index] = "\t" . $rules['lines'][$index];
}
elseif ( is_array( $line ) ) {
$rules['lines'][ $index ] = $this->format_rules( $line );
}
}
$formatted_rules = implode( PHP_EOL, $rules['lines'] );
if ( ! empty( $rules['tag'] ) ) {
$tag_open = sprintf( '<%s %s>', $rules['tag'], $rules['value'] );
$tag_close = sprintf( '</%s>', $rules['tag'] );
$formatted_rules = $tag_open . PHP_EOL . $formatted_rules . PHP_EOL . $tag_close;
}
if ( ! empty( $rules['comment'] ) ) {
$comment_open = sprintf( '# START %s', $rules['comment'] );
$comment_close = sprintf( '# END %s', $rules['comment'] );
$formatted_rules = $comment_open . PHP_EOL . $formatted_rules . PHP_EOL . $comment_close;
}
$formatted_rules .= PHP_EOL;
return $formatted_rules;
}
}