diff --git a/composer.json b/composer.json index d96bfa9..e7315d4 100644 --- a/composer.json +++ b/composer.json @@ -3,8 +3,6 @@ "type": "drupal-module", "description": "Provides configurable front page", "homepage": "http://drupal.org/project/front", - "license": "GPL-2.0+", - "require": { - "drupal/core": "~8.1" - } + "license": "GPL-2.0+" + } diff --git a/front_page.info.yml b/front_page.info.yml index 00bea40..b06ca76 100644 --- a/front_page.info.yml +++ b/front_page.info.yml @@ -2,5 +2,4 @@ name: Front Page description: 'Allows site admins setup custom front pages for the site.' type: module configure: front_page.settings -core: 8.x -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 diff --git a/front_page.module b/front_page.module index 180dd42..6adc57f 100644 --- a/front_page.module +++ b/front_page.module @@ -52,138 +52,13 @@ function front_page_parse_url($path) { return $url; } -/** - * Function to return the first role enabled in front page, ordered by weight. - */ -function front_page_get_by_role($index = 0, $number = 1) { - $roles = \Drupal::currentUser()->getRoles(); - $result = Database::getConnection()->select('front_page', 'fp') - ->fields('fp') - ->condition('rid', $roles, 'IN') - ->condition('mode', '', '<>') - ->orderBy('weight', 'ASC') - ->orderBy('rid', 'DESC') - ->range($index, $number) - ->execute() - ->fetchAssoc(); - return $result; -} - -/** - * Function to return the first role enabled in front page, ordered by weight. - */ -function front_page_get_by_rid($rid) { - - $result = Database::getConnection()->select('front_page', 'fp') - ->fields('fp') - ->condition('rid', $rid) - ->condition('mode', '', '<>') - ->execute() - ->fetchAssoc(); - return $result; -} - -/** - * Function to return all the roles in front page, ordered by weight. - */ -function front_page_get_all() { - $result = Database::getConnection()->select('front_page', 'fp') - ->fields('fp') - ->orderBy('weight', 'ASC') - ->orderBy('rid', 'DESC') - ->execute() - ->fetchAllAssoc('rid', PDO::FETCH_ASSOC); - return $result; -} - -/** - * Implements hook_theme(). - */ -function front_page_theme() { - return [ - 'front_page_admin_arrange_form' => [ - 'render element' => 'form', - 'function' => 'theme_front_page_admin_arrange_form', - ], - ]; -} /** * Implements hook_user_role_delete(). */ function front_page_user_role_delete($role) { // Delete Front configuration for the role being deleted. - Database::getConnection()->delete('front_page') - ->condition('rid', $role->rid) - ->execute(); + $config = \Drupal::configFactory()->getEditable('front_page.settings'); + $config->get('rid_' . $role->id()); } -/** - * Returns HTML for the front page arrange form into a table. - * - * @param array $variables - * An associative array containing: - * - form: A render element representing the form. - * - * @return string - * Rendered admin form. - * - * @todo Refactor this function, it's a legacy way. - */ -function theme_front_page_admin_arrange_form($variables) { - $form = $variables['form']; - - // Enable the drag handles. - drupal_attach_tabledrag($form['roles'], [ - 'table_id' => 'front-page-arrange', - 'action' => 'order', - 'relationship' => 'sibling', - 'group' => 'front-page-weight', - ]); - - $header = [ - t('Role'), - t('Mode'), - t('Preview'), - t('Enabled'), - t('Weight'), - ]; - - $rows = []; - $renderer = \Drupal::service('renderer'); - foreach (Element::children($form['roles']) as $rid) { - $element = &$form['roles'][$rid]; - - // Add special classes to be used for tabledrag.js. - $element['weight']['#attributes']['class'] = ['front-page-weight']; - - $row = []; - $row[] = $renderer->render($element['title'], FALSE); - $row[] = $renderer->render($element['mode'], FALSE); - $row[] = $renderer->render($element['preview'], FALSE); - $row[] = $renderer->render($element['enabled'], FALSE); - $row[] = $renderer->render($element['weight'], FALSE); - - $row = array_merge(['data' => $row], $element['#attributes']); - $row['class'][] = 'draggable'; - $rows[] = $row; - } - $output = ''; - if (empty($rows)) { - $rows[] = [['data' => 'no roles', 'colspan' => '5']]; - } - - $front_page_arrange = [ - '#theme' => 'table', - '#header' => $header, - '#rows' => $rows, - 'attributes' => ['id' => 'front-page-arrange'], - ]; - $output .= $renderer->render($front_page_arrange); - foreach (Element::children($form) as $key) { - if (!empty($form[$key])) { - $output .= \Drupal::service('renderer')->render($form[$key]); - } - } - return $output; -} diff --git a/src/EventSubscriber/FrontPageSubscriber.php b/src/EventSubscriber/FrontPageSubscriber.php index ea8cf82..d089a76 100644 --- a/src/EventSubscriber/FrontPageSubscriber.php +++ b/src/EventSubscriber/FrontPageSubscriber.php @@ -5,7 +5,7 @@ namespace Drupal\front_page\EventSubscriber; use Drupal\Core\Url; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpKernel\KernelEvents; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use \Drupal\Core\Installer\InstallerKernel; @@ -19,10 +19,10 @@ class FrontPageSubscriber implements EventSubscriberInterface { /** * Manage the logic. * - * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event + * @param \Symfony\Component\HttpKernel\Event\RequestEvent $event * Managed event. */ - public function initData(GetResponseEvent $event) { + public function initData(RequestEvent $event) { // Make sure front page module is not run when using cli (drush). // Make sure front page module does not run when installing Drupal either. @@ -67,7 +67,8 @@ class FrontPageSubscriber implements EventSubscriberInterface { $front_page = "/{$front_page}"; } $current_language = \Drupal::languageManager()->getCurrentLanguage(); - $url = Url::fromUserInput($front_page, ['language' => $current_language]); + $request = clone $event->getRequest(); + $url = Url::fromUserInput($front_page, ['language' => $current_language, 'query' => $request->query->all()]); $event->setResponse(new RedirectResponse($url->toString())); // @todo Probably we must to remove this and manage cache by role.