View source
<?php
namespace Drupal\module_missing_message_fixer\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\module_missing_message_fixer\ModuleMissingMessageFixer;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Database\Connection;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Messenger\MessengerInterface;
class ModuleMissingMessageFixerForm extends FormBase {
protected $connection;
protected $configFactory;
protected $messenger;
protected $mmmf;
public function __construct(Connection $connection, ConfigFactoryInterface $config_factory, MessengerInterface $messenger, ModuleMissingMessageFixer $mmmf) {
$this->connection = $connection;
$this->configFactory = $config_factory;
$this->messenger = $messenger;
$this->mmmf = $mmmf;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('database'), $container
->get('config.factory'), $container
->get('messenger'), $container
->get('module_missing_message_fixer.fixer'));
}
public function getFormId() {
return 'module_missing_message_fixer_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$title = $this
->t('This list comes from the system table and is checked against the drupal_get_filename() function. See <a href="@link" target="_blank">this issue</a> for more information.', [
'@link' => 'https://www.drupal.org/node/2487215',
]);
$form['title'] = [
'#type' => 'item',
'#markup' => '<h4>' . $title . '</h4>',
];
$form['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Remove These Errors!'),
];
$form['table'] = [
'#type' => 'tableselect',
'#header' => $this->mmmf
->getTableHeader(),
'#options' => $this->mmmf
->getTableRows(),
'#empty' => $this
->t('No Missing Modules Found!!!'),
];
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$modules = [];
foreach ($form_state
->getValue([
'table',
]) as $module) {
if ($module) {
$modules[] = $module;
$like = $this->connection
->escapeLike($module . '.');
$config_names = $this->connection
->select('config', 'c')
->fields('c', [
'name',
])
->condition('name', $like . '%', 'LIKE')
->execute()
->fetchAll();
foreach ($config_names as $config_name) {
$this->configFactory
->getEditable($config_name->name)
->delete();
}
if (!empty($config_name)) {
$this->messenger
->addWarning("Don't forget to export your config");
}
}
}
if (count($modules) > 0) {
$query = $this->connection
->delete('key_value');
$query
->condition('collection', 'system.schema');
$query
->condition('name', $modules, 'IN');
$query
->execute();
}
}
}