2
2
3
3
namespace Drupal \file_example \Form ;
4
4
5
- use Drupal \Core \Database \ Database ;
5
+ use Drupal \Core \Entity \ EntityTypeManagerInterface ;
6
6
use Drupal \Core \Extension \ModuleHandlerInterface ;
7
7
use Drupal \Core \File \FileSystemInterface ;
8
8
use Drupal \Core \Form \FormBase ;
9
9
use Drupal \Core \Form \FormStateInterface ;
10
10
use Drupal \Core \State \StateInterface ;
11
11
use Drupal \Core \StreamWrapper \StreamWrapperManagerInterface ;
12
12
use Drupal \Core \Url ;
13
- use Drupal \file \Entity \File ;
14
13
use Drupal \file \FileInterface ;
15
14
use Drupal \stream_wrapper_example \StreamWrapper \SessionWrapper ;
16
15
use Symfony \Component \DependencyInjection \ContainerInterface ;
@@ -55,6 +54,10 @@ class FileExampleReadWriteForm extends FormBase {
55
54
* Indicator variable for the session:// scheme being available.
56
55
*
57
56
* @var bool
57
+ *
58
+ * @todo Remove this since we have a hard dependency on
59
+ * stream_wrapper_example.
60
+ * https://www.drupal.org/project/examples/issues/2990336
58
61
*/
59
62
protected $ sessionSchemeEnabled ;
60
63
@@ -65,6 +68,13 @@ class FileExampleReadWriteForm extends FormBase {
65
68
*/
66
69
protected $ moduleHandler ;
67
70
71
+ /**
72
+ * Entity type manager service.
73
+ *
74
+ * @var \Drupal\Core\Entity\EntityTypeManagerInterface
75
+ */
76
+ protected $ entityTypeManager ;
77
+
68
78
/**
69
79
* Constructs a new FileExampleReadWriteForm page.
70
80
*
@@ -86,13 +96,15 @@ public function __construct(
86
96
FileSystemInterface $ file_system ,
87
97
StreamWrapperManagerInterface $ stream_wrapper_manager ,
88
98
ModuleHandlerInterface $ module_handler ,
89
- RequestStack $ request_stack
99
+ RequestStack $ request_stack ,
100
+ EntityTypeManagerInterface $ entity_type_manager
90
101
) {
91
102
$ this ->state = $ state ;
92
103
$ this ->fileSystem = $ file_system ;
104
+ $ this ->streamWrapperManager = $ stream_wrapper_manager ;
93
105
$ this ->moduleHandler = $ module_handler ;
94
106
$ this ->requestStack = $ request_stack ;
95
- $ this ->streamWrapperManager = $ stream_wrapper_manager ;
107
+ $ this ->entityTypeManager = $ entity_type_manager ;
96
108
$ this ->sessionSchemeEnabled = $ this ->moduleHandler ->moduleExists ('stream_wrapper_example ' );
97
109
}
98
110
@@ -105,7 +117,8 @@ public static function create(ContainerInterface $container) {
105
117
$ container ->get ('file_system ' ),
106
118
$ container ->get ('stream_wrapper_manager ' ),
107
119
$ container ->get ('module_handler ' ),
108
- $ container ->get ('request_stack ' )
120
+ $ container ->get ('request_stack ' ),
121
+ $ container ->get ('entity_type.manager ' )
109
122
);
110
123
$ form ->setMessenger ($ container ->get ('messenger ' ));
111
124
return $ form ;
@@ -204,15 +217,18 @@ protected function setDefaultDirectory($uri) {
204
217
* May be other alternatives.
205
218
* https://www.drupal.org/project/examples/issues/2986438
206
219
*/
207
- private static function getManagedFile ($ uri ) {
208
- $ fid = Database::getConnection ('default ' )->query (
209
- 'SELECT fid FROM {file_managed} WHERE uri = :uri ' ,
210
- [':uri ' => $ uri ]
211
- )->fetchField ();
220
+ protected function getManagedFile ($ uri ) {
221
+ // We'll use an entity query to get the managed part of the file.
222
+ $ storage = $ this ->entityTypeManager ->getStorage ('file ' );
223
+ $ query = $ storage ->getQuery ()
224
+ ->condition ('uri ' , $ uri );
225
+ $ fid = $ query ->execute ();
212
226
if (!empty ($ fid )) {
213
- $ file_object = File::load ($ fid );
227
+ // Now that we have a fid, we can load it.
228
+ $ file_object = $ storage ->load (reset ($ fid ));
214
229
return $ file_object ;
215
230
}
231
+ // Return FALSE because there's no managed file for that URI.
216
232
return FALSE ;
217
233
}
218
234
@@ -674,7 +690,7 @@ public function handleFileDelete(array &$form, FormStateInterface $form_state) {
674
690
// Since we don't know if the file is managed or not, look in the database
675
691
// to see. Normally, code would be working with either managed or unmanaged
676
692
// files, so this is not a typical situation.
677
- $ file_object = self :: getManagedFile ($ uri );
693
+ $ file_object = $ this -> getManagedFile ($ uri );
678
694
679
695
// If a managed file, use file_delete().
680
696
if (!empty ($ file_object )) {
0 commit comments