';
echo '
' . esc_html__( 'Code Search', 'admin-code-search' ) . '
';
echo '
' . esc_html__( 'Search code inside active themes and plugins directly from the WordPress admin area.', 'admin-code-search' ) . '
';
$this->render_form( $data );
if ( ! empty( $data['error'] ) ) {
echo '
' . esc_html( $data['error'] ) . '
';
}
if ( $data['submitted'] && empty( $data['error'] ) ) {
if ( ! empty( $data['results'] ) ) {
$this->render_results( $data['results'], $data['term'] );
} else {
echo '
' . esc_html__( 'No matches found.', 'admin-code-search' ) . '
';
}
}
echo '
';
}
/**
* Prepare submitted form data and run scan if needed.
*
* @return array
*/
private function get_form_data() {
$data = array(
'term' => '',
'exts' => 'php',
'scan_plugins' => true,
'scan_themes' => true,
'submitted' => false,
'error' => '',
'results' => array(),
);
if ( isset( $_POST['term'] ) ) {
$data['term'] = sanitize_text_field( wp_unslash( $_POST['term'] ) );
}
if ( isset( $_POST['exts'] ) ) {
$data['exts'] = sanitize_text_field( wp_unslash( $_POST['exts'] ) );
}
$data['scan_plugins'] = isset( $_POST['scan_plugins'] );
$data['scan_themes'] = isset( $_POST['scan_themes'] );
if ( ! isset( $_POST['adcose_do_search'] ) ) {
return $data;
}
$data['submitted'] = true;
check_admin_referer( 'adcose_search_action', 'adcose_search_nonce' );
if ( '' === trim( $data['term'] ) ) {
$data['error'] = __( 'Search term is required.', 'admin-code-search' );
return $data;
}
if ( ! $data['scan_plugins'] && ! $data['scan_themes'] ) {
$data['error'] = __( 'Select at least one search location.', 'admin-code-search' );
return $data;
}
$dirs = array();
if ( $data['scan_plugins'] && defined( 'WP_PLUGIN_DIR' ) ) {
$dirs[] = wp_normalize_path( WP_PLUGIN_DIR );
}
if ( $data['scan_themes'] ) {
$stylesheet_dir = get_stylesheet_directory();
$template_dir = get_template_directory();
if ( is_dir( $stylesheet_dir ) ) {
$dirs[] = $stylesheet_dir;
}
if ( $template_dir !== $stylesheet_dir && is_dir( $template_dir ) ) {
$dirs[] = $template_dir;
}
}
$extensions = ADCOSE_Helpers::normalize_extensions( $data['exts'] );
$exclude_names = array(
'vendor',
'node_modules',
'wp-content/uploads',
'cache',
'.git',
'.svn',
);
$scanner = new ADCOSE_Scanner();
$data['results'] = $scanner->scan( $dirs, $data['term'], $extensions, $exclude_names );
return $data;
}
/**
* Render search form.
*
* @param array $data Form data.
* @return void
*/
private function render_form( $data ) {
echo '