Untitled
unknown
plain_text
2 years ago
1.2 kB
8
Indexable
use Drupal\views\Plugin\views\filter\InOperator;
/**
* Implements hook_views_data_alter().
*/
function custom_filter_views_data_alter(array &$data) {
$data['node_field_data']['custom_file_filter'] = [
'title' => t('Custom File Filter'),
'filter' => [
'id' => 'custom_filter_handler',
],
];
}
/**
* Custom filter handler for filtering by file name.
*/
class CustomFilterHandler extends InOperator {
public function getValueOptions() {
$options = [];
$user_input = $this->getExposedInput()['custom_filter'];
$query = \Drupal::database()->select('node__field_attachments', 'fa')
->fields('fa', ['entity_id', 'field_attachments_target_id'])
->join('file_usage', 'fu', 'fa.field_attachments_target_id = fu.id')
->join('file_managed', 'fm', 'fu.fid = fm.fid')
->condition('fa.bundle', 'request_form')
->condition('fm.filename', '%' . db_like($user_input) . '%', 'LIKE')
->execute();
foreach ($query as $row) {
$file = \Drupal\file\Entity\File::load($row->field_attachments_target_id);
if ($file) {
$options[$file->getFilename()] = $file->getFilename();
}
}
return $options;
}
}
Editor is loading...