44
55use Code_Snippets \DB ;
66use Code_Snippets \REST_API \Snippets_REST_Controller ;
7+ use Code_Snippets \Settings ;
8+ use Code_Snippets \Snippet_Files ;
79use function Code_Snippets \clean_active_snippets_cache ;
810use function Code_Snippets \clean_snippets_cache ;
911use function Code_Snippets \execute_snippet ;
12+ use function Code_Snippets \code_snippets ;
13+ use function Code_Snippets \execute_snippet_from_flat_file ;
1014
1115/**
1216 * Class for evaluating functions snippets.
@@ -104,6 +108,28 @@ private function quick_deactivate_snippet( int $snippet_id, string $table_name )
104108 [ '%d ' ]
105109 );
106110 clean_snippets_cache ( $ table_name );
111+
112+ $ network = $ table_name === $ this ->db ->ms_table ;
113+ do_action ( 'code_snippets/deactivate_snippet ' , $ snippet_id , $ network );
114+ }
115+ }
116+
117+ private function evaluate_snippet_flat_file ( array $ snippet , string $ file_path , ?array $ edit_snippet = null ) {
118+ $ snippet_id = $ snippet ['id ' ];
119+ $ code = $ snippet ['code ' ];
120+ $ table_name = $ snippet ['table ' ];
121+
122+ // If the snippet is a single-use snippet, deactivate it before execution to ensure that the process always happens.
123+ if ( 'single-use ' === $ snippet ['scope ' ] ) {
124+ $ this ->quick_deactivate_snippet ( $ snippet_id , $ table_name );
125+ }
126+
127+ if ( ! is_null ( $ edit_snippet ) && $ edit_snippet ['id ' ] === $ snippet_id && $ edit_snippet ['table ' ] === $ table_name ) {
128+ return ;
129+ }
130+
131+ if ( apply_filters ( 'code_snippets/allow_execute_snippet ' , true , $ snippet_id , $ table_name ) ) {
132+ execute_snippet_from_flat_file ( $ code , $ file_path , $ snippet_id );
107133 }
108134 }
109135
@@ -117,6 +143,14 @@ public function evaluate_early(): bool {
117143 return false ;
118144 }
119145
146+ if ( Snippet_Files::is_active () ) {
147+ return $ this ->evaluate_file_snippets ();
148+ }
149+
150+ return $ this ->evaluate_db_snippets ();
151+ }
152+
153+ public function evaluate_db_snippets (): bool {
120154 $ scopes = [ 'global ' , 'single-use ' , is_admin () ? 'admin ' : 'front-end ' ];
121155 $ active_snippets = $ this ->db ->fetch_active_snippets ( $ scopes );
122156 $ edit_snippet = $ this ->get_currently_editing_snippet ();
@@ -139,4 +173,21 @@ public function evaluate_early(): bool {
139173
140174 return true ;
141175 }
176+
177+ private function evaluate_file_snippets (): bool {
178+ $ type = 'php ' ;
179+ $ scopes = [ 'global ' , 'single-use ' , is_admin () ? 'admin ' : 'front-end ' ];
180+ $ snippets = Snippet_Files::get_active_snippets_from_flat_files ( $ scopes , $ type );
181+ $ edit_snippet = $ this ->get_currently_editing_snippet ();
182+
183+ foreach ( $ snippets as $ snippet ) {
184+ $ table_name = Snippet_Files::get_hashed_table_name ( $ snippet ['table ' ] );
185+ $ base_path = Snippet_Files::get_base_dir ( $ table_name , $ type );
186+ $ file = $ base_path . '/ ' . $ snippet ['id ' ] . '. ' . $ type ;
187+
188+ $ this ->evaluate_snippet_flat_file ( $ snippet , $ file , $ edit_snippet );
189+ }
190+
191+ return true ;
192+ }
142193}
0 commit comments