Loading l10n_community/src/Form/FilterForm.php +42 −8 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Drupal\l10n_community\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\Language; use Drupal\Core\Url; use Drupal\l10n_community\Controller\L10nCommunityLanguagesController; Loading Loading @@ -49,6 +50,7 @@ class FilterForm extends FormBase { /** @var \Drupal\group\Entity\Group $group */ $group = \Drupal::routeMatch()->getParameter('group'); $langcode = $group->get('field_translation_language')->first()->getValue()['target_id']; $language = \Drupal::languageManager()->getLanguage($langcode); $translation_options = [ L10N_STATUS_ALL => '<' . $this->t('Any') . '>', Loading Loading @@ -93,8 +95,8 @@ class FilterForm extends FormBase { '#title' => $this->t('Project'), '#default_value' => $selected_project ?? NULL, '#ajax' => [ // 'event' missing, Drupal will apply the per-#type defaults. 'callback' => 'ajaxReleases', 'callback' => '::ajaxReleases', 'event' => 'change', 'wrapper' => 'l10n-server-releases', 'effect' => 'fade', 'progress' => [ Loading @@ -110,7 +112,7 @@ class FilterForm extends FormBase { if ($project_count <= 30) { // Select widget for 1-30 projects. $form['project']['#type'] = 'select'; $form['project']['#options'] = ['' => $this->t('All')]; $form['project']['#options'] = ['all' => $this->t('All')]; $projects = $project_storage->loadMultiple(); /** @var \Drupal\l10n_server\Entity\L10nServerProjectInterface $project */ foreach ($projects as $project) { Loading Loading @@ -143,7 +145,7 @@ class FilterForm extends FormBase { '#title' => $this->t('Release'), '#type' => 'select', '#options' => $release_options, '#default_value' => $form_state->getValue('release'), '#default_value' => $form_state->getValue('release') ?? 'all', // Wrapper used to replace release options via AJAX. '#prefix' => '<div id="l10n-server-releases">', '#suffix' => '</div>', Loading @@ -155,7 +157,7 @@ class FilterForm extends FormBase { if (isset($selected_project) && $form_state->getValue('release') != 'all') { $form['release']['#field_suffix'] = '<div class="start-over-link"><a href="' . Url::fromUri('internal:/translate/languages/' . $langcode . '/translate/reset/' . $selected_project->getUri() . '/' . $form_state->getValue('release'))->toString() . '">' . t('Missing strings?') . '</a></div>'; $form['release']['#field_suffix'] = '<div class="start-over-link"><a href="' . Url::fromUri('internal:/group/' . $group->id() . '/reset/' . $selected_project->getUri() . '/' . $form_state->getValue('release'))->toString() . '">' . t('Missing strings?') . '</a></div>'; } if (count($contexts = $this->getContexts()) > 1) { Loading Loading @@ -185,12 +187,12 @@ class FilterForm extends FormBase { $form['status']['translation'] = [ '#type' => 'select', '#options' => $translation_options, '#default_value' => $form_state->getValue('status') & (L10N_STATUS_TRANSLATED | L10N_STATUS_UNTRANSLATED | L10N_STATUS_IS_TRANSLATION), '#default_value' => $form_state->getValue('status') || (L10N_STATUS_TRANSLATED | L10N_STATUS_UNTRANSLATED | L10N_STATUS_IS_TRANSLATION), ]; $form['status']['suggestion'] = [ '#type' => 'select', '#options' => $suggestion_options, '#default_value' => $form_state->getValue('status') & (L10N_STATUS_HAS_SUGGESTION | L10N_STATUS_NO_SUGGESTION | L10N_STATUS_IS_SUGGESTION), '#default_value' => $form_state->getValue('status') || (L10N_STATUS_HAS_SUGGESTION | L10N_STATUS_NO_SUGGESTION | L10N_STATUS_IS_SUGGESTION), ]; $class_is_default_author = empty($form_state->getValue('author')) ? 'is-default' : 'is-not-default'; Loading Loading @@ -265,7 +267,10 @@ class FilterForm extends FormBase { '#type' => 'markup', '#markup' => '<div class="reset-link"><a href="' . Url::fromUri('internal:/group/' . $group->id() . '/translate')->toString() . '" class="filter-exclude">' . $this->t('Clear all filters') . '</a></div>', ]; $form['#attached']['library'][] = 'l10n_community/editor'; if ($language->getDirection() == LANGUAGE::DIRECTION_RTL) { $form['#attached']['library'][] = 'l10n_community/editor-rtl'; } return $form; } Loading Loading @@ -327,4 +332,33 @@ class FilterForm extends FormBase { return $contexts; } /** * Ajax callback. * * @param array $form * The form array. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form_state object. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ public static function ajaxReleases(array &$form, FormStateInterface $form_state) { $release_options = []; if ($pid = $form_state->getValue('project')) { $releases = \Drupal::entityTypeManager() ->getStorage('l10n_server_release') ->loadByProperties(['pid' => $pid]); foreach ($releases as $release) { $release_options[$release->id()] = t('@version only', [ '@version' => $release->getVersion(), ]); } krsort($release_options); } $release_options = ['all' => t('All')] + $release_options; $form['release']['#options'] = $release_options; return $form['release']; } } Loading
l10n_community/src/Form/FilterForm.php +42 −8 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Drupal\l10n_community\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\Language; use Drupal\Core\Url; use Drupal\l10n_community\Controller\L10nCommunityLanguagesController; Loading Loading @@ -49,6 +50,7 @@ class FilterForm extends FormBase { /** @var \Drupal\group\Entity\Group $group */ $group = \Drupal::routeMatch()->getParameter('group'); $langcode = $group->get('field_translation_language')->first()->getValue()['target_id']; $language = \Drupal::languageManager()->getLanguage($langcode); $translation_options = [ L10N_STATUS_ALL => '<' . $this->t('Any') . '>', Loading Loading @@ -93,8 +95,8 @@ class FilterForm extends FormBase { '#title' => $this->t('Project'), '#default_value' => $selected_project ?? NULL, '#ajax' => [ // 'event' missing, Drupal will apply the per-#type defaults. 'callback' => 'ajaxReleases', 'callback' => '::ajaxReleases', 'event' => 'change', 'wrapper' => 'l10n-server-releases', 'effect' => 'fade', 'progress' => [ Loading @@ -110,7 +112,7 @@ class FilterForm extends FormBase { if ($project_count <= 30) { // Select widget for 1-30 projects. $form['project']['#type'] = 'select'; $form['project']['#options'] = ['' => $this->t('All')]; $form['project']['#options'] = ['all' => $this->t('All')]; $projects = $project_storage->loadMultiple(); /** @var \Drupal\l10n_server\Entity\L10nServerProjectInterface $project */ foreach ($projects as $project) { Loading Loading @@ -143,7 +145,7 @@ class FilterForm extends FormBase { '#title' => $this->t('Release'), '#type' => 'select', '#options' => $release_options, '#default_value' => $form_state->getValue('release'), '#default_value' => $form_state->getValue('release') ?? 'all', // Wrapper used to replace release options via AJAX. '#prefix' => '<div id="l10n-server-releases">', '#suffix' => '</div>', Loading @@ -155,7 +157,7 @@ class FilterForm extends FormBase { if (isset($selected_project) && $form_state->getValue('release') != 'all') { $form['release']['#field_suffix'] = '<div class="start-over-link"><a href="' . Url::fromUri('internal:/translate/languages/' . $langcode . '/translate/reset/' . $selected_project->getUri() . '/' . $form_state->getValue('release'))->toString() . '">' . t('Missing strings?') . '</a></div>'; $form['release']['#field_suffix'] = '<div class="start-over-link"><a href="' . Url::fromUri('internal:/group/' . $group->id() . '/reset/' . $selected_project->getUri() . '/' . $form_state->getValue('release'))->toString() . '">' . t('Missing strings?') . '</a></div>'; } if (count($contexts = $this->getContexts()) > 1) { Loading Loading @@ -185,12 +187,12 @@ class FilterForm extends FormBase { $form['status']['translation'] = [ '#type' => 'select', '#options' => $translation_options, '#default_value' => $form_state->getValue('status') & (L10N_STATUS_TRANSLATED | L10N_STATUS_UNTRANSLATED | L10N_STATUS_IS_TRANSLATION), '#default_value' => $form_state->getValue('status') || (L10N_STATUS_TRANSLATED | L10N_STATUS_UNTRANSLATED | L10N_STATUS_IS_TRANSLATION), ]; $form['status']['suggestion'] = [ '#type' => 'select', '#options' => $suggestion_options, '#default_value' => $form_state->getValue('status') & (L10N_STATUS_HAS_SUGGESTION | L10N_STATUS_NO_SUGGESTION | L10N_STATUS_IS_SUGGESTION), '#default_value' => $form_state->getValue('status') || (L10N_STATUS_HAS_SUGGESTION | L10N_STATUS_NO_SUGGESTION | L10N_STATUS_IS_SUGGESTION), ]; $class_is_default_author = empty($form_state->getValue('author')) ? 'is-default' : 'is-not-default'; Loading Loading @@ -265,7 +267,10 @@ class FilterForm extends FormBase { '#type' => 'markup', '#markup' => '<div class="reset-link"><a href="' . Url::fromUri('internal:/group/' . $group->id() . '/translate')->toString() . '" class="filter-exclude">' . $this->t('Clear all filters') . '</a></div>', ]; $form['#attached']['library'][] = 'l10n_community/editor'; if ($language->getDirection() == LANGUAGE::DIRECTION_RTL) { $form['#attached']['library'][] = 'l10n_community/editor-rtl'; } return $form; } Loading Loading @@ -327,4 +332,33 @@ class FilterForm extends FormBase { return $contexts; } /** * Ajax callback. * * @param array $form * The form array. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form_state object. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException */ public static function ajaxReleases(array &$form, FormStateInterface $form_state) { $release_options = []; if ($pid = $form_state->getValue('project')) { $releases = \Drupal::entityTypeManager() ->getStorage('l10n_server_release') ->loadByProperties(['pid' => $pid]); foreach ($releases as $release) { $release_options[$release->id()] = t('@version only', [ '@version' => $release->getVersion(), ]); } krsort($release_options); } $release_options = ['all' => t('All')] + $release_options; $form['release']['#options'] = $release_options; return $form['release']; } }