FileManager.php in Minify JS 8
File
src/Controller/FileManager.php
View source
<?php
namespace Drupal\minifyjs\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\file\Entity\File;
class FileManager extends ControllerBase {
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');
}
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');
}
public function scan($drush = FALSE) {
$directory = new \RecursiveDirectoryIterator(DRUPAL_ROOT);
$iterator = new \RecursiveIteratorIterator($directory);
$regex = new \RegexIterator($iterator, '/\\.js$/i');
$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);
if (\Drupal::service('path.matcher')
->matchPath($new_relative, $exclusions)) {
continue;
}
$exists = FALSE;
foreach ($existing as $file) {
if ($file->uri == $new_relative) {
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;
}
}
if (!$exists) {
$new_files[$new_absolute] = TRUE;
}
}
foreach ($existing as $file) {
if (!isset($old_files[$file->uri])) {
$this
->remove_file($file->uri);
}
}
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,
]));
}
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();
}
\Drupal::cache()
->delete(MINIFYJS_CACHE_CID);
$return = TRUE;
if (!$drush) {
$return = $this
->redirect('minifyjs.manage');
}
return $return;
}
private function remove_file($file_uri) {
$query = \Drupal::database()
->select('minifyjs_file', 'm')
->fields('m', array(
'fid',
'minified_uri',
))
->condition('m.uri', $file_uri);
if ($query
->countQuery()
->execute()
->fetchField() > 0) {
$file = $query
->execute()
->fetchObject();
if (!empty($file->minified_uri)) {
$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();
$minified_file = File::load($minified_file->fid);
$minified_file
->delete();
}
}
\Drupal::database()
->delete('minifyjs_file')
->condition('fid', $file->fid)
->execute();
return TRUE;
}
}
}