foldershare-8.x-1.2/src/Form/AdminSettingsTraits/AdminSettingsInterfaceTab.php
src/Form/AdminSettingsTraits/AdminSettingsInterfaceTab.php
<?php namespace Drupal\foldershare\Form\AdminSettingsTraits; use Drupal\Core\Cache\Cache; use Drupal\Core\Form\FormStateInterface; use Drupal\foldershare\Constants; use Drupal\foldershare\Settings; use Drupal\foldershare\Entity\FolderShare; use Drupal\foldershare\Utilities\ConfigurationUtilities; use Drupal\foldershare\Utilities\LinkUtilities; /** * Manages the "Interface" tab for the module's settings form. * * <B>Warning:</B> This is an internal trait that is strictly used by * the AdminSettings form class. It is a mechanism to group functionality * to improve code management. * * @ingroup foldershare */ trait AdminSettingsInterfaceTab { /*--------------------------------------------------------------------- * * Build. * *---------------------------------------------------------------------*/ /** * Builds the user interface tab. * * @param array $form * An associative array containing the structure of the form. The form * is modified to include additional render elements for the tab. * @param \Drupal\Core\Form\FormStateInterface $formState * The current state of the form. * @param string $tabGroup * The name of the tab group. */ private function buildInterfaceTab( array & $form , FormStateInterface $formState , string $tabGroup ) { // // Find installed modules. // ----------------------- // Tab sections vary their presentation based upon what modules are // installed at the site. $mh = \Drupal::service( 'module_handler' ); $helpInstalled = $mh ->moduleExists( 'help' ); $viewsUiInstalled = $mh ->moduleExists( 'views_ui' ); $realnameInstalled = $mh ->moduleExists( 'realname' ); $fieldUiInstalled = $mh ->moduleExists( 'field_ui' ); // // Set up tab names. // ----------------- // Create the machine name for the tab and the tab's title. $tabMachineName = 'interface' ; $tabTitle = $this ->t( 'Interface' ); $tabPaneTitle = $this ->t( 'Manage the user interface' ); // // Set up class names. // ------------------- // Use a set of standard class names for tab sections. $moduleName = self::makeCssSafe(Constants::MODULE); $tabName = $moduleName . '_' . $tabMachineName . '_tab' ; $tabSubtitleClass = $moduleName . '-settings-subtitle' ; $sectionWrapperClass = $moduleName . '-settings-section-wrapper' ; $sectionClass = $moduleName . '-settings-section' ; $sectionDescriptionClass = $moduleName . '-settings-section-description' ; $itemDefaultClass = $moduleName . '-settings-item-default' ; $itemNoteClass = $moduleName . '-settings-item-note' ; $warningClass = $moduleName . '-warning' ; $noteClass = $moduleName . '-note' ; $menuAllowAllCheck = $moduleName . '_menu_allow_all' ; $menuAllowedCommandsList = $moduleName . '_menu_allowed_commands' ; $restoreMenuButton = $moduleName . '_menu_restore' ; $restoreViewButton = $moduleName . '_view_restore' ; $restoreFormsButton = $moduleName . '_forms_restore' ; $restoreDisplaysButton = $moduleName . '_displays_restore' ; $userautocompleteClass = $moduleName . '-settings-userautocomplete' ; $userautocomplete = $moduleName . '_userautocomplete' ; // // Create the tab // -------------- // Start the tab with a title, subtitle, and description. $form [ $tabName ] = [ '#type' => 'details' , '#open' => FALSE, '#group' => $tabGroup , '#title' => $tabTitle , '#description' => [ 'subtitle' => [ '#type' => 'html_tag' , '#tag' => 'h2' , '#value' => $tabPaneTitle , '#attributes' => [ 'class' => [ $tabSubtitleClass ], ], ], 'description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Control forms, pages, menus, file and folder lists, and autocomplete prompts.' ), '#attributes' => [ 'class' => [ $moduleName . '-settings-description' , ], ], ], ], '#attributes' => [ 'class' => [ $moduleName . '-settings-tab ' , $moduleName . '-interface-tab' , ], ], ]; // // Manage fields, forms, and displays. // ----------------------------------- // // FIELD UI HELP MESSAGE // no no basic message // no yes basic message + field help // yes no basic message + field UI links // yes yes basic message + field UI links + field and field UI help // // The Field module is always installed since it is a required part of core. if ( $fieldUiInstalled === TRUE) { $fieldUiName = $mh ->getName( 'field_ui' ); } else { $fieldUiName = 'Field UI' ; } if ( $fieldUiInstalled === TRUE && $helpInstalled === TRUE) { // Field UI is installed and help is available. $description = $this ->t( 'Files and folders may be given additional @fieldUiFieldLink, and their @fieldUiFormLink and @fieldUiDisplayLink configured using the %fieldUiName module (see @fieldHelpLink and @fieldUiHelpLink).' , [ '%fieldUiName' => $fieldUiName , '@fieldUiFieldLink' => LinkUtilities::createRouteLink( 'entity.' . FolderShare::ENTITY_TYPE_ID . '.field_ui_fields' , '' , $this ->t( 'fields' )), '@fieldUiFormLink' => LinkUtilities::createRouteLink( 'entity.entity_form_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'forms' )), '@fieldUiDisplayLink' => LinkUtilities::createRouteLink( 'entity.entity_view_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'page displays' )), '@fieldHelpLink' => LinkUtilities::createHelpLink( 'field' , $this ->t( 'Field help' )), '@fieldUiHelpLink' => LinkUtilities::createHelpLink( 'field_ui' , $this ->t( 'Field UI help' )), ]); $restoreFormDescription = $this ->t( 'Restore @fieldUiFormLink to default values.' , [ '@fieldUiFormLink' => LinkUtilities::createRouteLink( 'entity.entity_form_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'forms' )), ]); $restoreDisplaysDescription = $this ->t( 'Restore @fieldUiDisplayLink to default values.' , [ '@fieldUiDisplayLink' => LinkUtilities::createRouteLink( 'entity.entity_view_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'page displays' )), ]); } elseif ( $fieldUiInstalled === TRUE && $helpInstalled === FALSE) { // Field UI is installed but there is no help. $description = $this ->t( 'Files and folders may be given additional @fieldUiFieldLink, and their @fieldUiFormLink and @fieldUiDisplayLink configured using the %fieldUiName module.' , [ '%fieldUiName' => $fieldUiName , '@fieldUiFieldLink' => LinkUtilities::createRouteLink( 'entity.' . FolderShare::ENTITY_TYPE_ID . '.field_ui_fields' , '' , $this ->t( 'fields' )), '@fieldUiFormLink' => LinkUtilities::createRouteLink( 'entity.entity_form_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'forms' )), '@fieldUiDisplayLink' => LinkUtilities::createRouteLink( 'entity.entity_view_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'page displays' )), ]); $restoreFormDescription = $this ->t( 'Restore @fieldUiFormLink to default values.' , [ '@fieldUiFormLink' => LinkUtilities::createRouteLink( 'entity.entity_form_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'forms' )), ]); $restoreDisplaysDescription = $this ->t( 'Restore @fieldUiDisplayLink to default values.' , [ '@fieldUiDisplayLink' => LinkUtilities::createRouteLink( 'entity.entity_view_display.' . FolderShare::ENTITY_TYPE_ID . '.default' , '' , $this ->t( 'page displays' )), ]); } else { // All other cases. $description = $this ->t( 'Files and folders may be given additional fields, and their forms and page displays configured by installing the %fieldUiEnableLink module.' , [ '%fieldUiEnableLink' => LinkUtilities::createRouteLink( 'system.modules_list' , 'module-field-ui' , $fieldUiName ), ]); $restoreFormDescription = $this ->t( 'Restore forms to default values.' ); $restoreDisplaysDescription = $this ->t( 'Restore page displays to default values.' ); } $form [ $tabName ][ 'manage-forms' ] = [ '#type' => 'details' , '#title' => $this ->t( 'Forms and pages' ), '#open' => FALSE, '#attributes' => [ 'class' => [ $sectionWrapperClass ], ], 'section' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $sectionClass ], ], 'section-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $description , '#attributes' => [ 'class' => [ $sectionDescriptionClass ], ], ], 'forms-pair' => [ '#type' => 'container' , // A button to restore the default form configuration. $restoreFormsButton => [ '#type' => 'submit' , '#value' => $this ->t( 'Restore' ), '#name' => $restoreFormsButton , '#attributes' => [ 'class' => [ $restoreFormsButton , ], ], ], // A description for the button. 'forms-restore-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $restoreFormDescription , '#attributes' => [ 'class' => [ $restoreFormsButton . '_description' , ], ], ], ], 'displays-pair' => [ '#type' => 'container' , // A button to restore the default page display configuration. $restoreDisplaysButton => [ '#type' => 'submit' , '#value' => $this ->t( 'Restore' ), '#name' => $restoreDisplaysButton , '#attributes' => [ 'class' => [ $restoreDisplaysButton , ], ], ], // A description for the button. 'displays-restore-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $restoreDisplaysDescription , '#attributes' => [ 'class' => [ $restoreDisplaysButton . '_description' , ], ], ], ], ], ]; // // Manage file & folder lists. // --------------------------- // Add a restore button to reset the view configuration. // // The description changes a bit for different configurations: // // VIEWS VIEWS UI HELP MESSAGE // yes no no basic message + views ui enable // yes no yes basic message + views ui enable + help // yes yes no basic message + views form // yes yes yes basic message + views form + help // // The Views module is always enabled in these choices because FolderShare // requires it. if ( $viewsUiInstalled === TRUE) { $viewsUiName = $mh ->getName( 'views_ui' ); } else { $viewsUiName = 'Views UI' ; } $viewsName = $mh ->getName( 'views' ); $viewsUiEnableLink = LinkUtilities::createRouteLink( 'system.modules_list' , 'module-viewsui' , $viewsUiName ); if ( $viewsUiInstalled === TRUE && $helpInstalled === TRUE) { // Views UI installed and help available. $description = $this ->t( 'A @viewLink for the %viewsName module (see @viewsHelpLink) creates lists of files and folders. Use the %viewsUiLink module (see @viewsUiHelpLink) to configure lists.' , [ '%viewsName' => $viewsName , '@viewLink' => LinkUtilities::createRouteLink( 'entity.view.edit_form' , '' , $this ->t( 'view' ), [ 'view' => Constants::VIEW_LISTS, ]), '%viewsUiLink' => LinkUtilities::createRouteLink( 'entity.view.collection' , '' , $viewsUiName ), '@viewsHelpLink' => LinkUtilities::createHelpLink( 'views' , $this ->t( 'help' )), '@viewsUiHelpLink' => LinkUtilities::createHelpLink( 'views_ui' , $this ->t( 'help' )), ]); $buttonDescription = $this ->t( 'Restore @viewLink to default values.' , [ '@viewLink' => LinkUtilities::createRouteLink( 'entity.view.edit_form' , '' , $this ->t( 'view' ), [ 'view' => Constants::VIEW_LISTS, ]), ]); } elseif ( $viewsUiInstalled === TRUE && $helpInstalled === FALSE) { // Views UI installed but no help. $description = $this ->t( 'A @viewLink for the %viewsName module creates lists of files and folders. Use the %viewsUiLink module to configure lists.' , [ '%viewsName' => $viewsName , '@viewLink' => LinkUtilities::createRouteLink( 'entity.view.edit_form' , '' , $this ->t( 'view' ), [ 'view' => Constants::VIEW_LISTS, ]), '%viewsUiLink' => LinkUtilities::createRouteLink( 'entity.view.collection' , '' , $viewsUiName ), ]); $buttonDescription = $this ->t( 'Restore @viewLink to default values.' , [ '@viewLink' => LinkUtilities::createRouteLink( 'entity.view.edit_form' , '' , $this ->t( 'view' ), [ 'view' => Constants::VIEW_LISTS, ]), ]); } elseif ( $viewsUiInstalled === FALSE && $helpInstalled === TRUE) { // Views UI is not installed, but there is help. $description = $this ->t( 'A view for the %viewsName module (see @viewsHelpLink) creates lists of files and folders. Install the %viewsUiEnableLink module to configure lists.' , [ '%viewsName' => $viewsName , '%viewsUiEnableLink' => $viewsUiEnableLink , '@viewsHelpLink' => LinkUtilities::createHelpLink( 'views' , $this ->t( 'help' )), ]); $buttonDescription = $this ->t( 'Restore view to default values.' ); } else { // All other cases. $description = $this ->t( 'A view for the %viewsName module creates lists of files and folders. Install the %viewsUiEnableLink module to configure lists.' , [ '%viewsName' => $viewsName , '%viewsUiEnableLink' => $viewsUiEnableLink , ]); $buttonDescription = $this ->t( 'Restore view to default values.' ); } $form [ $tabName ][ 'manage-views-ui' ] = [ '#type' => 'details' , '#title' => $this ->t( 'File & folder lists' ), '#attributes' => [ 'class' => [ $sectionWrapperClass ], ], 'section' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $sectionClass ], ], 'section-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $description , '#attributes' => [ 'class' => [ $sectionDescriptionClass ], ], ], // A button to restore the default configuration. $restoreViewButton => [ '#type' => 'submit' , '#value' => $this ->t( 'Restore' ), '#name' => $restoreViewButton , '#attributes' => [ 'class' => [ $restoreViewButton , ], ], ], // A description for the button. 'view-restore-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $buttonDescription , '#attributes' => [ 'class' => [ $restoreViewButton . '_description' , ], ], ], // A warning of ViewsUI is not installed. 'viewsui-disabled-warning' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'View editing features are disabled because the @viewsUiEnableLink module is not installed.' , [ '@viewsUiEnableLink' => $viewsUiEnableLink , ]), '#attributes' => [ 'class' => [ $warningClass ], ], ], ], ]; // If the view_ui module is not installed, links to the views config // pages will not work. Create a warning. if ( $viewsUiInstalled === TRUE) { // Views UI is installed. Remove the warning about it not being installed. unset( $form [ $tabName ][ 'manage-views-ui' ][ 'section' ][ 'viewsui-disabled-warning' ]); } // // Manage menus. // ------------- // Add a checkbox to enable/disable menu restrictions, and a list of // checkboxes to enable/disable specific menu items. // // Get the unsorted list of all menu command definitions. Array keys are // IDs and values are definitions. $defs = Settings::getAllCommandDefinitions(); // Sort them, reordering the keys to sort by definition label. usort( $defs , function ( $a , $b ) { if ( $a [ 'label' ] == $b [ 'label' ]) { return ( $a [ 'id' ] < $b [ 'id' ]) ? (-1) : 1; } return ( $a [ 'label' ] < $b [ 'label' ]) ? (-1) : 1; }); // Build a sorted list of menu commands, with descriptions, for use in // creating checkboxes. $allNames = []; $allChosen = []; foreach ( $defs as $def ) { $id = $def [ 'id' ]; $label = $def [ 'label' ]; $provider = $def [ 'provider' ]; $description = $def [ 'description' ]; $allNames [ $id ] = "<strong>$label</strong> (<em>$id</em>)<p>$description <em>($provider module)</em></p>" ; $allChosen [ $id ] = NULL; } foreach (Settings::getCommandMenuAllowed() as $id ) { $allChosen [ $id ] = $id ; } $form [ $tabName ][ 'manage-menus' ] = [ '#type' => 'details' , '#title' => $this ->t( 'Menus' ), '#open' => FALSE, '#attributes' => [ 'class' => [ $sectionWrapperClass ], ], 'section' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $sectionClass ], ], 'section-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Menu item plugins support upload, download, copy, move, delete, and so forth.' ), '#attributes' => [ 'class' => [ $sectionDescriptionClass ], ], ], // Checkbox to enable/disable restrictions. $menuAllowAllCheck => [ '#type' => 'checkbox' , '#title' => $this ->t( 'Allow all menu items' ), '#default_value' => (Settings::getCommandMenuRestrict() === FALSE), '#return_value' => 'enabled' , '#required' => FALSE, '#name' => $menuAllowAllCheck , ], // The default setting. 'menu-restrictions-default' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Default: Allow all menu items' ), '#attributes' => [ 'class' => [ $itemDefaultClass , $itemNoteClass , ], ], ], // List of menu commands. 'foldershare_command_menu_choices' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ 'foldershare_command_menu_choices' ], ], '#states' => [ 'invisible' => [ 'input[name="' . $menuAllowAllCheck . '"]' => [ 'checked' => TRUE, ], ], ], // A prompt before the list of checkboxes. 'description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Select the menu items to allow:' ), ], // The list of checkboxes. $menuAllowedCommandsList => [ '#type' => 'checkboxes' , '#options' => $allNames , '#default_value' => $allChosen , '#prefix' => '<div class="' . $menuAllowedCommandsList . '">' , '#suffix' => '</div>' , ], ], // A button to restore the default configuration. $restoreMenuButton => [ '#type' => 'submit' , '#value' => $this ->t( 'Restore' ), '#name' => $restoreMenuButton , '#attributes' => [ 'class' => [ $restoreMenuButton , ], ], ], // A description for the button. 'menu-restore-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Restore menus to default values.' ), '#attributes' => [ 'class' => [ $restoreMenuButton . '_description' , ], ], ], ], ]; // // Manage user autocomplete. // ------------------------- // Add information and a menu to select the user autocomplete style. // // The select menu options remain the same, but the text changes a bit // depending upon what modules are installed. The descriptions also // vary a bit. // // REALNAME OPTIONS // no Account names... // yes User names... // // REALNAME HELP OPTIONS // no no basic message. // no yes basic message. // yes no basic message. // yes yes basic message + help. if ( $realnameInstalled === TRUE) { // Realname module installed. $realnameName = $mh ->getName( 'realname' ); $userautocompleteOptions = [ 'none' => $this ->t( 'Disable user autocomplete' ), 'name-only' => $this ->t( 'Show user names' ), 'name-email' => $this ->t( 'Show user names and email addresses' ), 'name-masked-email' => $this ->t( 'Show user names and partially masked email addresses' ), ]; $description = $this ->t( 'Autocomplete menus help to select among users.' ); $defaultDescription = t( 'Default: Show user names' ); $realnameLink = LinkUtilities::createRouteLink( 'realname.admin_settings_form' , '' , $realnameName ); if ( $helpInstalled === TRUE) { // Help is installed. $realnameHelpLink = LinkUtilities::createHelpLink( 'realname' , $this ->t( 'help' )); $nameOnlyDescription = t( 'Autocomplete menus show full user names configured by the %realnameLink module (see @realnameHelpLink).' , [ '%realnameLink' => $realnameLink , '@realnameHelpLink' => $realnameHelpLink , ]); $nameEmailDescription = t( 'Autocomplete menus full user names configured by the %realnameLink module (see @realnameHelpLink). Full email addresses are included' , [ '%realnameLink' => $realnameLink , '@realnameHelpLink' => $realnameHelpLink , ]); $nameMaskedEmailDescription = t( 'Autocomplete menus show full user names configured by the %realnameLink module (see @realnameHelpLink). Partially masked email addresses are included (e.g. "a****b@example.com").' , [ '%realnameLink' => $realnameLink , '@realnameHelpLink' => $realnameHelpLink , ]); } else { $nameOnlyDescription = t( 'Autocomplete menus show full user names configured by the %realnameLink module.' , [ '%realnameLink' => $realnameLink , ]); $nameEmailDescription = t( 'Autocomplete menus full user names configured by the %realnameLink module. Full email addresses are included' , [ '%realnameLink' => $realnameLink , ]); $nameMaskedEmailDescription = t( 'Autocomplete menus show full user names configured by the %realnameLink module. Partially masked email addresses are included (e.g. "a****b@example.com").' , [ '%realnameLink' => $realnameLink , ]); } } else { // Realname module is not installed. $realnameName = 'Real name' ; $userautocompleteOptions = [ 'none' => $this ->t( 'Disable user autocomplete' ), 'name-only' => $this ->t( 'Show account names' ), 'name-email' => $this ->t( 'Show account names and email addresses' ), 'name-masked-email' => $this ->t( 'Show account names and partially masked email addresses' ), ]; $description = $this ->t( 'Autocomplete menus help to select among users. Install the %realnameProjectLink contributed module to show full user names.' , [ '%realnameProjectLink' => LinkUtilities::createProjectLink( 'realname' , $realnameName ), ]); $defaultDescription = t( 'Default: Show account names' ); $nameOnlyDescription = t( 'Autocomplete menus show user account names.' ); $nameEmailDescription = t( 'Autocomplete menus show user account names along with full email addresses.' ); $nameMaskedEmailDescription = t( 'Autocomplete menus show user account names along with partially masked email addresses (e.g. "a****b@example.com").' ); } $form [ $tabName ][ 'manage-user-autocomplete' ] = [ '#type' => 'details' , '#title' => $this ->t( 'User autocomplete' ), '#attributes' => [ 'class' => [ $sectionWrapperClass ], ], 'section' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $sectionClass ], ], 'section-description' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $description , '#attributes' => [ 'class' => [ $sectionDescriptionClass ], ], ], // Autocomplete menu. $userautocomplete => [ '#type' => 'select' , '#options' => $userautocompleteOptions , '#default_value' => Settings::getUserAutocompleteStyle(), '#name' => $userautocomplete , '#attributes' => [ 'class' => [ $userautocompleteClass , ], ], ], // The default setting. 'user-autocomplete-default' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $defaultDescription , '#attributes' => [ 'class' => [ $itemDefaultClass , $itemNoteClass , ], ], ], // A note when names only. 'userautocompleteNameOnly' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $itemNoteClass , ], ], '#states' => [ 'visible' => [ 'select[name="' . $userautocomplete . '"]' => [ 'value' => 'name-only' , ], ], ], 'note' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $nameOnlyDescription , ], ], // A note when users with email. 'userautocompleteEmail' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $itemNoteClass , ], ], '#states' => [ 'visible' => [ 'select[name="' . $userautocomplete . '"]' => [ 'value' => 'name-email' , ], ], ], 'note' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $nameEmailDescription , ], 'warning' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Email addresses are often considered private information. Use this option with caution.' ), '#attributes' => [ 'class' => [ $noteClass , ], ], ], ], // A note when users with masked email. 'userautocompleteMaskedEmail' => [ '#type' => 'container' , '#attributes' => [ 'class' => [ $itemNoteClass , ], ], '#states' => [ 'visible' => [ 'select[name="' . $userautocomplete . '"]' => [ 'value' => 'name-masked-email' , ], ], ], 'note' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $nameMaskedEmailDescription , ], 'warning' => [ '#type' => 'html_tag' , '#tag' => 'p' , '#value' => $this ->t( 'Email addresses are often considered private information. Partially masking an email address may not be sufficient to protect it. Use this option with caution.' ), '#attributes' => [ 'class' => [ $noteClass , ], ], ], ], ], ]; } /*--------------------------------------------------------------------- * * Validate. * *---------------------------------------------------------------------*/ /** * Validates form values. * * @param array $form * The form configuration. * @param \Drupal\Core\Form\FormStateInterface $formState * The entered values for the form. */ private function validateInterfaceTab( array & $form , FormStateInterface & $formState ) { $moduleName = Constants::MODULE; $trigger = $formState ->getTriggeringElement(); $userInput = $formState ->getUserInput(); $menuAllowAllCheck = $moduleName . '_menu_allow_all' ; $menuAllowedCommandsList = $moduleName . '_menu_allowed_commands' ; $restoreMenuButton = $moduleName . '_menu_restore' ; $restoreViewButton = $moduleName . '_view_restore' ; $restoreFormsButton = $moduleName . '_forms_restore' ; $restoreDisplaysButton = $moduleName . '_displays_restore' ; // // Restore menu commands. // ---------------------- // Restore command restrictions to an original configuration. if ( $trigger [ '#name' ] === $restoreMenuButton ) { // Reset menu command configuration. Settings::setCommandMenuRestrict( Settings::getCommandMenuRestrictDefault()); Settings::setCommandMenuAllowed( Settings::getCommandMenuAllowedDefault()); $formState ->setRebuild(TRUE); $formState ->cleanValues(); $formState ->setTriggeringElement(NULL); // Update form state. foreach (Settings::getCommandMenuAllowed() as $id ) { $allChosen [ $id ] = $id ; } $userInput [ $menuAllowedCommandsList ] = $allChosen ; $userInput [ $menuAllowAllCheck ] = (Settings::getCommandMenuRestrict() === FALSE); unset( $userInput [ $restoreMenuButton ]); $formState ->setUserInput( $userInput ); \Drupal::messenger()->addMessage( $this ->t( 'Menus have been restored to their defaults.' ), 'status' ); return ; } // // Restore view. // ------------- // Restore the view to an original configuration. if ( $trigger [ '#name' ] === $restoreViewButton ) { // Restore the view. $status = ConfigurationUtilities::revertConfiguration( 'view' , Constants::VIEW_LISTS); $formState ->setRebuild(TRUE); $formState ->cleanValues(); $formState ->setTriggeringElement(NULL); if ( $status === TRUE) { \Drupal::messenger()->addMessage( $this ->t( 'File and folder views have been restored to their defaults.' ), 'status' ); } else { \Drupal::messenger()->addMessage( $this ->t( 'File and folder views could not be restored to their defaults due to an unexpected problem.' ), 'error' ); } return ; } // // Restore forms. // -------------- // Restore the configuration. if ( $trigger [ '#name' ] === $restoreFormsButton ) { // Revert form configuration. $status = ConfigurationUtilities::revertConfiguration( 'core' , 'entity_form_display.foldershare.foldershare.default' ); $formState ->setRebuild(TRUE); $formState ->cleanValues(); $formState ->setTriggeringElement(NULL); if ( $status === TRUE) { \Drupal::messenger()->addMessage( $this ->t( 'File and folder forms have been restored to their defaults.' ), 'status' ); } else { \Drupal::messenger()->addMessage( $this ->t( 'File and folder forms could not be restored to their defaults due to an unexpected problem.' ), 'error' ); } return ; } // // Restore displays. // ----------------- // Restore the configuraiton. if ( $trigger [ '#name' ] === $restoreDisplaysButton ) { // Revert form configuration. $status = ConfigurationUtilities::revertConfiguration( 'core' , 'entity_view_display.foldershare.foldershare.default' ); $formState ->setRebuild(TRUE); $formState ->cleanValues(); $formState ->setTriggeringElement(NULL); if ( $status === TRUE) { \Drupal::messenger()->addMessage( $this ->t( 'File and folder page displays have been restored to their defaults.' ), 'status' ); } else { \Drupal::messenger()->addMessage( $this ->t( 'File and folder page displays could not be restored to their defaults due to an unexpected problem.' ), 'error' ); } return ; } } /*--------------------------------------------------------------------- * * Submit. * *---------------------------------------------------------------------*/ /** * Stores submitted form values. * * @param array $form * The form configuration. * @param \Drupal\Core\Form\FormStateInterface $formState * The entered values for the form. */ private function submitInterfaceTab( array & $form , FormStateInterface & $formState ) { $moduleName = Constants::MODULE; $menuAllowAllCheck = $moduleName . '_menu_allow_all' ; $menuAllowedCommandsList = $moduleName . '_menu_allowed_commands' ; $userautocomplete = $moduleName . '_userautocomplete' ; // Get whether the command menu is restricted. $value = $formState ->getValue( $menuAllowAllCheck ); $enabled = ( $value === 'enabled' ) ? TRUE : FALSE; Settings::setCommandMenuRestrict( $enabled === FALSE); // Get allowed menu commands. $allChosen = $formState ->getValue( $menuAllowedCommandsList ); Settings::setCommandMenuAllowed( array_keys ( array_filter ( $allChosen ))); // Get user autocomplete style. $userautocompleteStyle = $formState ->getValue( $userautocomplete ); Settings::setUserAutocompleteStyle( $userautocompleteStyle ); Cache::invalidateTags([ 'rendered' ]); } } |