class FileManager in Minify JS 8
Same name and namespace in other branches
- 8.2 src/Controller/FileManager.php \Drupal\minifyjs\Controller\FileManager
Controller routines for minifyjs routes.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\minifyjs\Controller\FileManager
Expanded class hierarchy of FileManager
2 files declare their use of FileManager
- minifyjs.drush.inc in ./
minifyjs.drush.inc - MinifyJsCommands.php in src/
Commands/ MinifyJsCommands.php
File
- src/
Controller/ FileManager.php, line 11
Namespace
Drupal\minifyjs\ControllerView source
class FileManager extends ControllerBase {
/**
* Minify a single file.
*
* @param stdClass $file
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a redirect to the manage javascript page.
*/
public function minify($file) {
$result = minifyjs_minify_file($file, TRUE);
if ($result === TRUE) {
drupal_set_message(t('File was minified successfully.'));
}
else {
drupal_set_message($result, 'error');
}
return $this
->redirect('minifyjs.manage');
}
/**
* Remove the minified version of a single file (restore it).
*
* @param stdClass $file
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a redirect to the manage javascript page.
*/
public function restore($file) {
$result = minifyjs_remove_minified_file($file, TRUE);
if ($result === TRUE) {
drupal_set_message(t('File was restored successfully.'));
}
else {
drupal_set_message($result, 'error');
}
return $this
->redirect('minifyjs.manage');
}
/**
* Scans the system for javascript.
*
* @param bool $drush
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a redirect to the manage javascript page.
*/
public function scan($drush = FALSE) {
// Recursive scan of the entire doc root to find .js files. Include
// minified files as well so they can be re-minified (comments removed).
$directory = new \RecursiveDirectoryIterator(DRUPAL_ROOT);
$iterator = new \RecursiveIteratorIterator($directory);
$regex = new \RegexIterator($iterator, '/\\.js$/i');
// Process files.
$new_files = [];
$old_files = [];
$changed_files = [];
$existing = minifyjs_load_all_files();
$exclusions = \Drupal::config('minifyjs.config')
->get('exclusion_list');
foreach ($regex as $info) {
$new_absolute = $info
->getPathname();
$new_relative = str_replace(DRUPAL_ROOT . '/', '', $new_absolute);
// skip exclusions
if (\Drupal::service('path.matcher')
->matchPath($new_relative, $exclusions)) {
continue;
}
// Loop existing and see if it already exists from previous scans.
$exists = FALSE;
foreach ($existing as $file) {
if ($file->uri == $new_relative) {
// See if the size and modified time differ from the last time the scan
// checked this file. If the file has changed (based on those two
// pieces of data), mark the minified version for removal if a minified
// version of the file exists.
if (!empty($file->minified_uri)) {
$size = filesize($new_absolute);
$modified = filemtime($new_absolute);
if ($size != $file->size || $modified != $file->modified) {
$changed_files[$new_relative] = $file;
}
}
$exists = TRUE;
$old_files[$new_relative] = TRUE;
break;
}
}
// File not found in the existing array, so it's new.
if (!$exists) {
$new_files[$new_absolute] = TRUE;
}
}
// Build a list of files that currently exist in the minifyjs_file table but
// no longer exist in the file system. These files should be removed.
foreach ($existing as $file) {
if (!isset($old_files[$file->uri])) {
$this
->remove_file($file->uri);
}
}
// Remove changed files.
foreach ($changed_files as $file_uri => $file) {
$this
->remove_file($file->uri);
$new_files[$file_uri] = TRUE;
drupal_set_message(t('Original file %file has been modified and was restored.', [
'%file' => $file_uri,
]));
}
// Add all new files to the database.
foreach ($new_files as $file => $junk) {
\Drupal::database()
->insert('minifyjs_file')
->fields(array(
'uri' => str_replace(DRUPAL_ROOT . '/', '', $file),
'size' => filesize($file),
'modified' => filemtime($file),
))
->execute();
}
// Clear the cache so all of these new files will be picked up.
\Drupal::cache()
->delete(MINIFYJS_CACHE_CID);
$return = TRUE;
if (!$drush) {
$return = $this
->redirect('minifyjs.manage');
}
return $return;
}
/**
* Helper function removes the file, the entry in the file_managed table and
* the entry in the minifyjs_file.
*
* @param string $file_uri
*/
private function remove_file($file_uri) {
// Get the fid and minified uri of the file
$query = \Drupal::database()
->select('minifyjs_file', 'm')
->fields('m', array(
'fid',
'minified_uri',
))
->condition('m.uri', $file_uri);
// make sure that it exists
if ($query
->countQuery()
->execute()
->fetchField() > 0) {
$file = $query
->execute()
->fetchObject();
// Handle the minified file, if applicable.
if (!empty($file->minified_uri)) {
// Get the fid of the minified file.
$query = \Drupal::database()
->select('file_managed', 'f')
->fields('f', array(
'fid',
))
->condition('f.uri', $file->minified_uri);
if ($query
->countQuery()
->execute()
->fetchField() > 0) {
$minified_file = $query
->execute()
->fetchObject();
// Remove the file from the file_managed table
$minified_file = File::load($minified_file->fid);
$minified_file
->delete();
}
}
// Remove the file from minifyjs_file table.
\Drupal::database()
->delete('minifyjs_file')
->condition('fid', $file->fid)
->execute();
return TRUE;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
public static | function |
Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: |
40 |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
FileManager:: |
public | function | Minify a single file. | |
FileManager:: |
private | function | Helper function removes the file, the entry in the file_managed table and the entry in the minifyjs_file. | |
FileManager:: |
public | function | Remove the minified version of a single file (restore it). | |
FileManager:: |
public | function | Scans the system for javascript. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |