class AudiofieldCommands in AudioField 8
A Drush commandfile for Audiofield module.
Hierarchy
- class \Drupal\audiofield\Commands\AudiofieldCommands extends \Drush\Commands\DrushCommands
Expanded class hierarchy of AudiofieldCommands
1 string reference to 'AudiofieldCommands'
1 service uses AudiofieldCommands
File
- src/
Commands/ AudiofieldCommands.php, line 15
Namespace
Drupal\audiofield\CommandsView source
class AudiofieldCommands extends DrushCommands {
/**
* Library discovery service.
*
* @var Drupal\audiofield\AudioFieldPlayerManager
*/
protected $playerManager;
/**
* File system service.
*
* @var Drupal\Component\FileSystem\FileSystemInterface
*/
protected $fileSystem;
/**
* Archive manager service.
*
* @var Drupal\Core\Archiver\ArchiverManager
*/
protected $archiverManager;
/**
* {@inheritdoc}
*/
public function __construct(AudioFieldPlayerManager $player_manager, FileSystemInterface $file_system, ArchiverManager $archiver_manager) {
parent::__construct();
$this->playerManager = $player_manager;
$this->fileSystem = $file_system;
$this->archiverManager = $archiver_manager;
}
/**
* Downloads the suggested Audiofield libraries from their remote repos.
*
* @param string $installLibrary
* The name of the library. If omitted, all libraries will be installed.
* @param bool $print_messages
* Flag indicating if messages should be displayed.
*
* @command audiofield:download
* @aliases audiofield-download
*/
public function download($installLibrary = '', $print_messages = TRUE) {
// Get a list of the audiofield plugins.
$pluginList = $this->playerManager
->getDefinitions();
// If there is an argument, check to make sure its valid.
if (!empty($installLibrary)) {
if (!isset($pluginList[$installLibrary . '_audio_player'])) {
$this
->logger()
->error(dt('Error: @library is not a valid Audiofield library.', [
'@library' => $installLibrary,
]));
return;
}
// If the argument is valid, we only want to install that plugin.
$pluginList = [
$installLibrary . '_audio_player' => $pluginList[$installLibrary . '_audio_player'],
];
}
// Loop over each plugin and make sure it's library is installed.
foreach ($pluginList as $pluginName => $plugin) {
// Create an instance of this plugin.
$pluginInstance = $this->playerManager
->createInstance($pluginName);
// Only check install if there is a library for the plugin.
if (!$pluginInstance
->getPluginLibrary()) {
continue;
}
// Skip if the plugin is installed.
if ($pluginInstance
->checkInstalled()) {
if ($print_messages) {
$this
->logger()
->notice(dt('Audiofield library for @library is already installed at @location', [
'@library' => $pluginInstance
->getPluginTitle(),
'@location' => $pluginInstance
->getPluginLibraryPath(),
]));
}
continue;
}
// Get the library install path.
$path = DRUPAL_ROOT . $pluginInstance
->getPluginLibraryPath();
// Create the install directory if it does not exist.
if (!is_dir($path)) {
$this->fileSystem
->mkdir($path);
}
// Download the file.
$destination = $this->fileSystem
->tempnam($this->fileSystem
->getTempDirectory(), 'file.') . "tar.gz";
system_retrieve_file($pluginInstance
->getPluginRemoteSource(), $destination, FALSE);
if (!file_exists($destination)) {
// Remove the directory.
$this->fileSystem
->rmdir($path);
$this
->logger()
->error(dt('Error: unable to download @library.', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
continue;
}
$this->fileSystem
->move($destination, $path . '/audiofield-dl.zip');
if (!file_exists($path . '/audiofield-dl.zip')) {
// Remove the directory where we tried to install.
$this->fileSystem
->rmdir($path);
if ($print_messages) {
$this
->logger()
->error(dt('Error: unable to download Audiofield library @library', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
continue;
}
}
// Unzip the file.
$zipFile = $this->archiverManager
->getInstance([
'filepath' => $path . '/audiofield-dl.zip',
]);
$zipFile
->extract($path);
// Remove the downloaded zip file.
$this->fileSystem
->unlink($path . '/audiofield-dl.zip');
// If the library still is not installed, we need to move files.
if (!$pluginInstance
->checkInstalled()) {
// Find all folders in this directory and move their
// subdirectories up to the parent directory.
$directories = $this->fileSystem
->scanDirectory($path, '/.*?/', [
'recurse' => FALSE,
]);
foreach ($directories as $dirName) {
$this->fileSystem
->move($path . '/' . $dirName->filename, $this->fileSystem
->getTempDirectory() . '/temp_audiofield', FileSystemInterface::EXISTS_REPLACE);
$this->fileSystem
->rmdir($path);
$this->fileSystem
->move($this->fileSystem
->getTempDirectory() . '/temp_audiofield', $path, FileSystemInterface::EXISTS_REPLACE);
}
// Projekktor source files need to be installed.
if ($pluginInstance
->getPluginId() == 'projekktor_audio_player') {
$process = Drush::process('npm install', $path);
$process
->run();
$process = Drush::process('grunt --force', $path);
$process
->run();
}
// Wavesurfer source files need to be installed.
if ($pluginInstance
->getPluginId() == 'wavesurfer_audio_player') {
$this
->logger()
->notice(dt('Installing @library', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
$process = Drush::process('npm install', $path);
$process
->run();
$this
->logger()
->notice(dt('Building @library', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
$process = Drush::process('npm run build', $path);
$process
->run();
}
}
if ($pluginInstance
->checkInstalled()) {
if ($print_messages) {
$this
->logger()
->notice(dt('Audiofield library for @library has been successfully installed at @location', [
'@library' => $pluginInstance
->getPluginTitle(),
'@location' => $pluginInstance
->getPluginLibraryPath(),
]));
}
}
else {
// Remove the directory where we tried to install.
$this->fileSystem
->rmdir($path);
if ($print_messages) {
$this
->logger()
->error(dt('Error: unable to install Audiofield library @library', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
}
}
}
}
/**
* Updates Audiofield libraries from their remote repos if out of date.
*
* @param string $updateLibrary
* The name of the library. If omitted, all libraries will be updated.
* @param bool $print_messages
* Flag indicating if messages should be displayed.
*
* @command audiofield:update
* @aliases audiofield-update
*/
public function update($updateLibrary = '', $print_messages = TRUE) {
// Get a list of the audiofield plugins.
$pluginList = $this->playerManager
->getDefinitions();
// If there is an argument, check to make sure its valid.
if (!empty($updateLibrary)) {
if (!isset($pluginList[$updateLibrary . '_audio_player'])) {
$this
->logger()
->error(dt('Error: @library is not a valid Audiofield library.', [
'@library' => $updateLibrary,
]));
return;
}
// If the argument is valid, we only want to install that plugin.
$pluginList = [
$updateLibrary . '_audio_player' => $pluginList[$updateLibrary . '_audio_player'],
];
}
// Loop over each plugin and make sure it's library is installed.
foreach ($pluginList as $pluginName => $plugin) {
// Create an instance of this plugin.
$pluginInstance = $this->playerManager
->createInstance($pluginName);
// Only check install if there is a library for the plugin.
if (!$pluginInstance
->getPluginLibrary()) {
continue;
}
// Get the library install path.
$path = DRUPAL_ROOT . $pluginInstance
->getPluginLibraryPath();
// If the library isn't installed at all we just run the install.
if (!$pluginInstance
->checkInstalled(FALSE)) {
$this
->download($pluginInstance
->getPluginLibraryName());
continue;
}
// Don't updating the library if its up to date.
if ($pluginInstance
->checkVersion(FALSE)) {
$this
->logger()
->notice(dt('Audiofield library for @library is already up to date', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
continue;
}
// Move the current installation to the temp directory.
$this->fileSystem
->move($path, $this->fileSystem
->getTempDirectory() . '/temp_audiofield', TRUE);
// If the directory failed to move, just delete it.
if (is_dir($path)) {
$this->fileSystem
->rmdir($path);
}
// Run the install command now to get the latest version.
$this
->download($updateLibrary, FALSE);
// Check if library has been properly installed.
if ($pluginInstance
->checkInstalled()) {
// Remove the temporary directory.
$this->fileSystem
->rmdir($this->fileSystem
->getTempDirectory() . '/temp_audiofield');
$this
->logger()
->notice(dt('Audiofield library for @library has been successfully updated at @location', [
'@library' => $pluginInstance
->getPluginTitle(),
'@location' => $pluginInstance
->getPluginLibraryPath(),
]));
}
else {
// Remove the directory where we tried to install.
$this->fileSystem
->rmdir($path);
$this
->logger()
->error(dt('Error: unable to update Audiofield library @library', [
'@library' => $pluginInstance
->getPluginTitle(),
]));
// Restore the original install since we failed to update.
$this->fileSystem
->move($this->fileSystem
->getTempDirectory() . '/temp_audiofield', $path, TRUE);
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AudiofieldCommands:: |
protected | property | Archive manager service. | |
AudiofieldCommands:: |
protected | property | File system service. | |
AudiofieldCommands:: |
protected | property | Library discovery service. | |
AudiofieldCommands:: |
public | function | Downloads the suggested Audiofield libraries from their remote repos. | |
AudiofieldCommands:: |
public | function | Updates Audiofield libraries from their remote repos if out of date. | |
AudiofieldCommands:: |
public | function |