Further modules included.
authorJeff Veit <jeff.veit@gmail.com>
Fri, 23 Jun 2017 01:05:03 +0000 (02:05 +0100)
committerJeff Veit <jeff.veit@gmail.com>
Fri, 23 Jun 2017 01:05:03 +0000 (02:05 +0100)
731 files changed:
web/modules/contrib/advanced_help [deleted submodule]
web/modules/contrib/advanced_help/README.txt [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.info.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.install [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.libraries.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.links.menu.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.links.task.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.module [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.permissions.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.routing.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/advanced_help.services.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/composer.json [new file with mode: 0644]
web/modules/contrib/advanced_help/css/help-icon.css [new file with mode: 0644]
web/modules/contrib/advanced_help/css/help.css [new file with mode: 0644]
web/modules/contrib/advanced_help/help/advanced_help.help.yml [new file with mode: 0644]
web/modules/contrib/advanced_help/help/ahelp_tab.png [new file with mode: 0755]
web/modules/contrib/advanced_help/help/click_icon.png [new file with mode: 0644]
web/modules/contrib/advanced_help/help/ini-file.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help/readme.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help/translation.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help/using-advanced-help.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help/why-advanced-help.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/180px-Andi_Gutmans_1.jpg [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/180px-Lerdorf.jpg [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/180px-PHP_Hello_World_screenshot.png [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/about-php.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/help_example.help.ini [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/history.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/security.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/syntax.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help/usage.html [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help_example.info [new file with mode: 0644]
web/modules/contrib/advanced_help/help_example/help_example.module [new file with mode: 0644]
web/modules/contrib/advanced_help/images/help.png [new file with mode: 0644]
web/modules/contrib/advanced_help/src/AdvancedHelpManager.php [new file with mode: 0644]
web/modules/contrib/advanced_help/src/Controller/AdvancedHelpController.php [new file with mode: 0644]
web/modules/contrib/advanced_help/src/HelpInterface.php [new file with mode: 0644]
web/modules/contrib/advanced_help/src/Plugin/Derivative/DynamicLocalTasks.php [new file with mode: 0644]
web/modules/contrib/advanced_help/src/Plugin/Search/AdvancedHelpSearch.php [new file with mode: 0644]
web/modules/contrib/advanced_help/templates/advanced-help-topic.html.twig [new file with mode: 0644]
web/modules/contrib/better_formats [deleted submodule]
web/modules/contrib/better_formats/README.txt [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.info.yml [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.install [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.links.task.yml [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.module [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.permissions.yml [new file with mode: 0644]
web/modules/contrib/better_formats/better_formats.routing.yml [new file with mode: 0644]
web/modules/contrib/better_formats/composer.json [new file with mode: 0644]
web/modules/contrib/better_formats/config/install/better_formats.settings.yml [new file with mode: 0644]
web/modules/contrib/better_formats/config/schema/better_formats.schema.yml [new file with mode: 0644]
web/modules/contrib/better_formats/src/BetterFormatsPermissions.php [new file with mode: 0644]
web/modules/contrib/better_formats/src/Form/SettingsForm.php [new file with mode: 0644]
web/modules/contrib/better_formats/src/Tests/BetterFormatsFilterFormatAccessTest.php [new file with mode: 0644]
web/modules/contrib/better_formats/src/Tests/BetterFormatsTermTest.php [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets [deleted submodule]
web/modules/contrib/ckeditor_widgets/CHANGELOG.txt [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/README.md [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/ckeditor_widgets.info.yml [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/contents.css [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetbootstrapAlert.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetfoundationAccordion.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAccordion.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAlert.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapLeftCol.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapRightCol.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapThreeCol.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapTwoCol.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/plugin.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/samples/index.html [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/samples/simplebox.html [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/contents.css [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/dialogs/foundation2Col.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/dialogs/widgetfoundationAccordion.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/icons/widgetcommonBox.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/icons/widgetcommonQuotebox.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/plugin.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/samples/contents.css [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgetcommon/samples/simplebox.html [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/extraIcons/codesnippet.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/extraIcons/drupalbreak.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/extraIcons/fontawesome.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/extraIcons/leaflet.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/extraIcons/oembed.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/icons/widgettemplatemenu.png [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/plugin.js [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/samples/contents.css [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/js/plugins/widgettemplatemenu/samples/simplebox.html [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/src/Plugin/CKEditorPlugin/WidgetBootstrap.php [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/src/Plugin/CKEditorPlugin/WidgetCommon.php [new file with mode: 0644]
web/modules/contrib/ckeditor_widgets/src/Plugin/CKEditorPlugin/WidgetTemplateMenu.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader [deleted submodule]
web/modules/contrib/drupalmoduleupgrader/.gitignore [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/.gitmodules [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/README.txt [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/composer.json [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/composer.lock [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.entity_operations.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.functions.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.grep.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.hooks.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.rewriters.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/config/install/drupalmoduleupgrader.tags.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/drupalmoduleupgrader.drush.inc [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/drupalmoduleupgrader.info.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/drupalmoduleupgrader.module [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/drupalmoduleupgrader.services.yml [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/phpunit.xml.dist [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/AnalyzerBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/AnalyzerInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Annotation/Analyzer.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Annotation/Converter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Annotation/Fixer.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Annotation/Indexer.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Annotation/Rewriter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/ArrayIndexer.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/ConverterBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/ConverterInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/DependencyCollectorTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/DeriverBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/FixerBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/FixerInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IOException.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IndexerBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IndexerExecutionInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IndexerInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IndexerUsageInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Issue.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/IssueInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/DB.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/DBDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/FlagHook.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/FlagHookDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/FunctionCall.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/FunctionCallDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/Grep.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/HookFormAlter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/HookPermission.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/HookUninstall.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/InfoFile.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/PSR4.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Analyzer/Tests.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Blocks.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/EntityHooks.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CToolsGetPlugins.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CToolsObjectCacheGet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CToolsObjectCacheSet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CacheGet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CacheSet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/CommentLoad.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DB.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DBDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/Disable.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DisableDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DrupalGetTitle.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DrupalIsCLI.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DrupalMapAssoc.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/DrupalWriteRecord.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/EntityCreate.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/EntityGetInfo.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/EntityLoad.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/EntityOperation.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/EntityOperationDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldInfoFieldTypes.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldInfoFormatterTypes.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldInfoWidgetTypes.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldUpdateField.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldUpdateInstance.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldViewField.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FieldViewValue.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FormExecuteHandlers.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FormLoadInclude.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FormSetValue.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FormStateDefaults.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FormStateValuesClean.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/FunctionCallModifier.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/GetT.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/L.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/LoadMultiple.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/LoadMultipleDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/ModuleInvoke.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/ModuleInvokeAll.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/NodeLoad.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/St.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/ThemeGetRegistry.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/URL.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/UserAccess.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/UserLoad.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/UserSave.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/VariableAPI.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/VariableDel.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/VariableGet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/VariableSet.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Functions/Watchdog.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Grep.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookBoot.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookEntityInfo.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookEntityTypeView.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookExit.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFieldAttachCreateBundle.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFieldAttachDeleteBundle.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFieldAttachRenameBundle.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFieldFormatterInfo.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFieldWidgetInfo.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookFormAlter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookInit.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookLibrary.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookMenuAlter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookNodePrepare.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookPermission.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookURLOutboundAlter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookUserLogin.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/HookWatchdog.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/InfoToYAML.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Links.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/PSR4.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Routing.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/Tests.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/UnitTests.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Converter/UserHooks.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/CreateClass.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/Define.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/Delete.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/Disable.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/FormCallbackToMethod.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/HookToYAML.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/Implement.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/ImplementHook.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/NodeCollectorTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/Notify.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/PSR4.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Indexer/Classes.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Indexer/Constants.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Indexer/FunctionCalls.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Indexer/Functions.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Rewriter/FormState.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Rewriter/Generic.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Rewriter/GenericDeriver.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Routing/ContentRoute.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Routing/FormRoute.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/PluginBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Report.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/ReportInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/RewriterInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal7/RouteWrapper.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal7/Router.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal8/RouteWrapper.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/HookMenu.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LinkBinding.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LinkBindingFactory.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LocalActionLinkBinding.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LocalTaskLinkBinding.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/MenuLinkBinding.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkIndex.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/ParameterBinding.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/ParameterMap.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/RouteConverterInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/RouteWrapperInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/RouterBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/RouterBuiltEvent.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Routing/RouterInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Target.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/TargetInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Filter/ContainsLogicFilter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Filter/FieldValueFilter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Filter/FunctionCallArgumentFilter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Filter/NodeAssignmentFilter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/FormConverter.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/FormConverterFactory.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/Drupal7/PathComponent.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/Drupal7/PathUtility.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/Drupal8/PathComponent.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/Drupal8/PathUtility.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/PathComponentBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/PathComponentInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/PathUtilityBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/Path/PathUtilityInterface.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/src/Utility/StringTransformTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Block.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Controller.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/EntityType.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/EventSubscriber.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Form.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Formatter.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Issue.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Logger.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/OutboundPathProcessor.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Report.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/RouteSubscriber.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/templates/Widget.html.twig [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/bootstrap.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/ContainerMockTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/IssueTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/ModuleMockerTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/AnalyzerTestBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/DBTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/FlagHookTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/FunctionCallTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/HookFormAlterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/HookPermissionTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/HookUninstallTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/InfoFileTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/PSR4Test.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Analyzer/TestsTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CToolsGetPluginsTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CToolsObjectCacheGetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CToolsObjectCacheSetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CacheGetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CacheSetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/CommentLoadTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DBTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DisableTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DrupalGetTitleTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DrupalIsCLITest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DrupalMapAssocTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/DrupalWriteRecordTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/EntityCreateTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/EntityGetInfoTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldInfoFieldTypesTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldInfoFormatterTypesTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldInfoWidgetTypesTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldUpdateFieldTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldUpdateInstanceTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldViewFieldTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FieldViewValueTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FormExecuteHandlersTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FormLoadIncludeTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FormSetValueTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FormStateValuesCleanTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/FunctionCallModifierTestBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/GetTTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/ModuleInvokeAllTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/ModuleInvokeTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/NodeLoadTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/StTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/ThemeGetRegistryTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/UserAccessTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/UserLoadTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/UserSaveTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/VariableDelTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/VariableGetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/VariableSetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Converter/Functions/WatchdogTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/CreateClassTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/DefineTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/DeleteTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/DisableTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/FormCallbackToMethodTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/HookToYAMLTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/ImplementHookTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/ImplementTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/NotifyTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Fixer/PSR4Test.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Indexer/ClassesTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Indexer/FunctionsTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Indexer/IndexerTestBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Rewriter/FormStateTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Plugin/DMU/Rewriter/GenericTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/ReportTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/Drupal7/RouteWrapperTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/Drupal7/RouterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/Drupal8/RouteWrapperTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/LinkBinding/LinkBindingTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/ParameterBindingTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Routing/RouterBaseTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/SQLiteDatabaseTrait.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/TargetTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/TestBase.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Filter/ContainsLogicFilterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Filter/FieldValueFilterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Filter/FunctionCallArgumentFilterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Filter/NodeAssignmentFilterTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Path/Drupal7/PathComponentTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Path/Drupal7/PathUtilityTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Path/Drupal8/PathComponentTest.php [new file with mode: 0644]
web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/Utility/Path/Drupal8/PathUtilityTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources [deleted submodule]
web/modules/contrib/filefield_sources/README.txt [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.data_types.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.setting.source_attach.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.setting.source_imce.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.setting.source_reference.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.setting.sources.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.attach.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.clipboard.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.imce.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.reference.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.remote.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/config/schema/filefield_sources.source.upload.schema.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/css/filefield_sources.css [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.api.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.info.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.install [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.libraries.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.module [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.routing.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/filefield_sources.services.yml [new file with mode: 0644]
web/modules/contrib/filefield_sources/js/filefield_sources.js [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Access/FieldAccessCheck.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Annotation/FilefieldSource.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Controller/ImceController.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/File/MimeType/ExtensionMimeTypeGuesser.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/FilefieldSourceInterface.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/FilefieldSourceManager.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/FilefieldSourcesServiceProvider.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/ImceScanner.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Plugin/FilefieldSource/Attach.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Plugin/FilefieldSource/Clipboard.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Plugin/FilefieldSource/Imce.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Plugin/FilefieldSource/Reference.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Plugin/FilefieldSource/Remote.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/ProxyClass/File/MimeType/ExtensionMimeTypeGuesser.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Routing/FilefieldSourcesRoutes.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/AttachSourceTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/ClipboardSourceTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/EmptyValuesTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/FileFieldSourcesTestBase.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/ImceSourceTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/MultipleValuesTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/ReferenceSourceTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/RemoteSourceTest.php [new file with mode: 0644]
web/modules/contrib/filefield_sources/src/Tests/UploadSourceTest.php [new file with mode: 0644]
web/modules/contrib/libraries [deleted submodule]
web/modules/contrib/libraries/CHANGELOG.txt [new file with mode: 0644]
web/modules/contrib/libraries/README.txt [new file with mode: 0644]
web/modules/contrib/libraries/composer.json [new file with mode: 0644]
web/modules/contrib/libraries/config/install/libraries.settings.yml [new file with mode: 0644]
web/modules/contrib/libraries/config/schema/libraries.schema.yml [new file with mode: 0644]
web/modules/contrib/libraries/libraries.api.php [new file with mode: 0644]
web/modules/contrib/libraries/libraries.drush.inc [new file with mode: 0644]
web/modules/contrib/libraries/libraries.info.yml [new file with mode: 0644]
web/modules/contrib/libraries/libraries.install [new file with mode: 0644]
web/modules/contrib/libraries/libraries.module [new file with mode: 0644]
web/modules/contrib/libraries/libraries.services.yml [new file with mode: 0644]
web/modules/contrib/libraries/src/Annotation/LibraryType.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Annotation/Locator.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Annotation/VersionDetector.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Config/LibrariesConfigSubscriber.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/AssetLibrary.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/AssetLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/AttachableAssetLibraryRegistrationInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/LocalRemoteAssetTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/MultipleAssetLibrary.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Asset/MultipleAssetLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/ChainDefinitionDiscovery.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/DefinitionDiscoveryFactory.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/DefinitionDiscoveryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/FileDefinitionDiscovery.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/FileDefinitionDiscoveryBase.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/GuzzleDefinitionDiscovery.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/WritableDefinitionDiscoveryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Definition/WritableFileDefinitionDiscovery.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Dependency/DependentLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Dependency/DependentLibraryTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Exception/InvalidLibraryDependencyException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Exception/LibraryDefinitionNotFoundException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Exception/LibraryNotInstalledException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Exception/UnknownLibraryVersionException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/LibraryBase.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/LibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/LibraryManager.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/LibraryManagerInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Local/LocalLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Local/LocalLibraryTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Local/LocatorInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Local/LocatorManager.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/PhpFile/PhpFileLibrary.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/PhpFile/PhpFileLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/PhpFile/PhpFileLoaderInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/PhpFile/PhpRequireLoader.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Remote/RemoteLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Remote/RemoteLibraryTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Type/LibraryCreationListenerInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Type/LibraryLoadingListenerInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Type/LibraryTypeBase.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Type/LibraryTypeFactory.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Type/LibraryTypeInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/DependencyAccessorTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/IdAccessorTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/LibraryAccessorInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/LibraryAccessorTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Version/VersionDetectorInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Version/VersionDetectorManager.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Version/VersionedLibraryInterface.php [new file with mode: 0644]
web/modules/contrib/libraries/src/ExternalLibrary/Version/VersionedLibraryTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/MissingPluginConfigurationException.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Locator/ChainLocator.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Locator/GlobalLocator.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Locator/UriLocator.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Type/AssetLibraryType.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Type/MultipleAssetLibraryType.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/Type/PhpFileLibraryType.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/VersionDetector/LinePatternDetector.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Plugin/libraries/VersionDetector/StaticDetector.php [new file with mode: 0644]
web/modules/contrib/libraries/src/StreamWrapper/AssetLibrariesStream.php [new file with mode: 0644]
web/modules/contrib/libraries/src/StreamWrapper/LibraryDefinitionsStream.php [new file with mode: 0644]
web/modules/contrib/libraries/src/StreamWrapper/LocalHiddenStreamTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/StreamWrapper/PhpFileLibrariesStream.php [new file with mode: 0644]
web/modules/contrib/libraries/src/StreamWrapper/PrivateStreamTrait.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Tests/LibrariesUnitTest.php [new file with mode: 0644]
web/modules/contrib/libraries/src/Tests/LibrariesWebTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_library/example.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_library/example.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_multiple_library/example.first.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_multiple_library/example.first.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_multiple_library/example.second.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/assets/vendor/test_asset_multiple_library/example.second.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/README.txt [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_1.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_1.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_1.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_2.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_2.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_2.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_3.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_3.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_3.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_4.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_4.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_4.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/example/example_info_file.libraries.info.yml [new file with mode: 0644]
web/modules/contrib/libraries/tests/libraries/test_php_file_library/test_php_file_library.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/library_definitions/test_asset_library.json [new file with mode: 0644]
web/modules/contrib/libraries/tests/library_definitions/test_asset_multiple_library.json [new file with mode: 0644]
web/modules/contrib/libraries/tests/library_definitions/test_php_file_library.json [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.css [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.inc [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.info.yml [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.js [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.module [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/libraries_test.routing.yml [new file with mode: 0644]
web/modules/contrib/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Functional/ExternalLibrary/Definition/DefinitionDiscoveryFactoryTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/Asset/AssetLibraryTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/Asset/AssetLibraryTestBase.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/Asset/MultipleAssetLibraryTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/GlobalLocatorTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/PhpFile/PhpFileLibraryTest.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/ExternalLibrary/TestLibraryFilesStream.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Kernel/LibraryTypeKernelTestBase.php [new file with mode: 0644]
web/modules/contrib/libraries/tests/src/Unit/Plugin/libraries/VersionDetector/LinePatternDetectorTest.php [new file with mode: 0644]
web/modules/contrib/linkchecker [deleted submodule]
web/modules/contrib/linkchecker/CHANGELOG.txt [new file with mode: 0644]
web/modules/contrib/linkchecker/README.txt [new file with mode: 0644]
web/modules/contrib/linkchecker/composer.json [new file with mode: 0644]
web/modules/contrib/linkchecker/config/install/linkchecker.settings.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/config/schema/linkchecker.schema.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/js/linkchecker.content_types.js [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.batch.inc [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.drush.inc [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.info.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.install [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.libraries.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.links.menu.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.links.task.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.module [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.pages.inc [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.permissions.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.redirect.inc [new file with mode: 0644]
web/modules/contrib/linkchecker/linkchecker.routing.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/migration_templates/d6_linkchecker_settings.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/migration_templates/d7_linkchecker_settings.yml [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Controller/LinkCheckerAdminReportPage.php [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Controller/LinkCheckerUserReportPage.php [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Form/LinkCheckerAdminSettingsForm.php [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Form/LinkCheckerEditLinkSettingsForm.php [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Tests/LinkCheckerInterfaceTest.php [new file with mode: 0644]
web/modules/contrib/linkchecker/src/Tests/LinkCheckerLinkExtractionTest.php [new file with mode: 0644]
web/modules/contrib/livereload [deleted submodule]
web/modules/contrib/livereload/README.txt [new file with mode: 0644]
web/modules/contrib/livereload/config/install/livereload.settings.yml [new file with mode: 0644]
web/modules/contrib/livereload/config/schema/livereload.schema.yml [new file with mode: 0644]
web/modules/contrib/livereload/js/pseudo.js [new file with mode: 0644]
web/modules/contrib/livereload/livereload.info.yml [new file with mode: 0644]
web/modules/contrib/livereload/livereload.libraries.yml [new file with mode: 0644]
web/modules/contrib/livereload/livereload.module [new file with mode: 0644]
web/modules/contrib/livereload/livereload.permissions.yml [new file with mode: 0644]
web/modules/contrib/media [deleted submodule]
web/modules/contrib/media/.travis.yml [new file with mode: 0644]
web/modules/contrib/media/README.md [new file with mode: 0644]
web/modules/contrib/media/composer.json [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.document.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.gallery.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.image.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.instagram.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.tweet.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_form_display.media.video.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.document.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.document.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.gallery.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.gallery.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.image.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.image.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.instagram.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.instagram.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.tweet.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.tweet.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.video.default.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_display.media.video.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_mode.media.gallery.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/core.entity_view_mode.media.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/crop.type.media_crop.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/embed.button.media.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/entity_browser.browser.gallery_media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/entity_browser.browser.media_embed.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/entity_browser.browser.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.document.field_document.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.document.field_document_size.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.document.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.document.field_mime_type.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.gallery.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.gallery.field_slide.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.image.field_image.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.image.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.instagram.field_instagram_shortcode.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.instagram.field_instagram_url.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.instagram.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.tweet.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.tweet.field_tweet_author.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.tweet.field_tweet_id.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.tweet.field_tweet_url.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.video.field_id.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.video.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.video.field_source.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.field.media.video.field_video.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_document.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_document_size.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_id.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_image.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_instagram_shortcode.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_instagram_url.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_media_in_library.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_mime_type.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_slide.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_source.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_tweet_author.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_tweet_id.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_tweet_url.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/field.storage.media.field_video.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/image.style.gallery_item.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/image.style.media_crop.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/image.style.media_crop_preview.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/image.style.media_library_item.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.document.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.gallery.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.image.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.instagram.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.tweet.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/media_entity.bundle.video.yml [new file with mode: 0644]
web/modules/contrib/media/config/install/views.view.media_library.yml [new file with mode: 0644]
web/modules/contrib/media/css/media.view.css [new file with mode: 0644]
web/modules/contrib/media/drupal_ti/before/before_script.sh [new file with mode: 0644]
web/modules/contrib/media/files/Test.doc [new file with mode: 0644]
web/modules/contrib/media/files/Test.docx [new file with mode: 0644]
web/modules/contrib/media/files/Test.ods [new file with mode: 0644]
web/modules/contrib/media/files/Test.odt [new file with mode: 0644]
web/modules/contrib/media/files/Test.ott [new file with mode: 0644]
web/modules/contrib/media/files/Test.pdf [new file with mode: 0644]
web/modules/contrib/media/files/Test.ppt [new file with mode: 0644]
web/modules/contrib/media/files/Test.pptx [new file with mode: 0644]
web/modules/contrib/media/files/Test.rtf [new file with mode: 0644]
web/modules/contrib/media/files/Test.txt [new file with mode: 0644]
web/modules/contrib/media/files/Test.xls [new file with mode: 0644]
web/modules/contrib/media/files/Test.xlsx [new file with mode: 0644]
web/modules/contrib/media/images/checkmark.svg [new file with mode: 0755]
web/modules/contrib/media/images/icons/application-msword.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-pdf.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-rtf.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.ms-excel.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.ms-powerpoint.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.oasis.opendocument.spreadsheet.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.oasis.opendocument.text-template.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.oasis.opendocument.text.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.openxmlformats-officedocument.presentationml.presentation.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png [new file with mode: 0644]
web/modules/contrib/media/images/icons/text-plain.png [new file with mode: 0644]
web/modules/contrib/media/images/media_embed_icon.png [new file with mode: 0644]
web/modules/contrib/media/js/media.view.js [new file with mode: 0644]
web/modules/contrib/media/media.info.yml [new file with mode: 0644]
web/modules/contrib/media/media.install [new file with mode: 0644]
web/modules/contrib/media/media.libraries.yml [new file with mode: 0644]
web/modules/contrib/media/media.module [new file with mode: 0644]
web/modules/contrib/media/src/Plugin/Validation/Constraint/GalleryMediaBundleConstraint.php [new file with mode: 0644]
web/modules/contrib/media/src/Plugin/Validation/Constraint/GalleryMediaBundleConstraintValidator.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/DocumentBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/GalleryBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/ImageBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/InstagramBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/TweetBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/src/Tests/VideoBundleTest.php [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/core.entity_form_display.node.page.default.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/editor.editor.basic_html.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/editor.editor.full_html.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/field.field.node.page.body.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/filter.format.basic_html.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/filter.format.full_html.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/config/install/node.type.page.yml [new file with mode: 0644]
web/modules/contrib/media/tests/modules/media_embed_test/media_embed_test.info.yml [new file with mode: 0644]
web/modules/contrib/media/tests/src/FunctionalJavascript/EmbedButtonTest.php [new file with mode: 0644]
web/modules/contrib/php [deleted submodule]
web/modules/contrib/php/composer.json [new file with mode: 0644]
web/modules/contrib/php/config/install/filter.format.php_code.yml [new file with mode: 0644]
web/modules/contrib/php/js/php.admin.js [new file with mode: 0644]
web/modules/contrib/php/php.info.yml [new file with mode: 0644]
web/modules/contrib/php/php.libraries.yml [new file with mode: 0644]
web/modules/contrib/php/php.module [new file with mode: 0644]
web/modules/contrib/php/php.permissions.yml [new file with mode: 0644]
web/modules/contrib/php/src/Plugin/Condition/Php.php [new file with mode: 0644]
web/modules/contrib/php/src/Plugin/Filter/Php.php [new file with mode: 0644]
web/modules/contrib/php/src/Plugin/views/argument_default/Php.php [new file with mode: 0644]
web/modules/contrib/php/src/Plugin/views/argument_validator/Php.php [new file with mode: 0644]
web/modules/contrib/php/src/Tests/Condition/PhpConditionTest.php [new file with mode: 0644]
web/modules/contrib/php/src/Tests/PhpAccessTest.php [new file with mode: 0644]
web/modules/contrib/php/src/Tests/PhpFilterTest.php [new file with mode: 0644]
web/modules/contrib/php/src/Tests/PhpTestBase.php [new file with mode: 0644]
web/modules/contrib/php/src/Tests/Plugin/views/PhpArgumentValidatorTest.php [new file with mode: 0644]
web/modules/contrib/php/tests/modules/php_views_test_config/php_views_test_config.info.yml [new file with mode: 0644]
web/modules/contrib/php/tests/modules/php_views_test_config/test_views/views.view.test_view_argument_validate_php.yml [new file with mode: 0644]
web/modules/contrib/views_responsive_grid [deleted submodule]
web/modules/contrib/views_responsive_grid/README.txt [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/lib/Drupal/views_responsive_grid/Plugin/views/style/ResponsiveGrid.php [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/templates/views-view-responsive-grid.html.twig [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/views_responsive_grid.css [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/views_responsive_grid.info.yml [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/views_responsive_grid.module [new file with mode: 0644]
web/modules/contrib/views_responsive_grid/views_responsive_grid.theme.inc [new file with mode: 0644]

diff --git a/web/modules/contrib/advanced_help b/web/modules/contrib/advanced_help
deleted file mode 160000 (submodule)
index ed80f44..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit ed80f440c8bb0c3c5b1868f3429f296e52c841a6
diff --git a/web/modules/contrib/advanced_help/README.txt b/web/modules/contrib/advanced_help/README.txt
new file mode 100644 (file)
index 0000000..e32ce02
--- /dev/null
@@ -0,0 +1,49 @@
+CONTENTS OF THIS FILE
+--------------------
+
+* Introduction
+* Requirements
+* Recommended modules
+* Installation
+* Configuration
+* Maintainers
+
+
+INTRODUCTION
+------------
+
+The Advanced help module allows module developers to store their help outside the module system, in pure .html or .md (MarkDown) files.  It provides a framework that allows module and theme developers to integrate help texts in a Drupal site, as well as exposing help to site administrators through the administrative interface.
+
+* For a full description of the module visit https://www.drupal.org/node/2461741
+
+* To submit bug reports and feature suggestions, or to track changes visit https://www.drupal.org/project/issues/advanced_help
+
+
+REQUIREMENTS
+------------
+
+This module has no required dependencies outside of Drupal core.
+
+
+RECOMMENDED MODULES
+-------------------
+
+* Advanced help hint - If Advanced help is not enabled, this module will generate a hint string that can be used in the project's hook_help to hint that Advanced help should be enabled. (https://www.drupal.org/project/advanced_help_hint)
+
+
+INSTALLATION
+------------
+
+* Install the Advanced help module as you would normally install a contributed Drupal module. Visit https://www.drupal.org/node/1897420 for further information.
+
+
+CONFIGURATION
+--------------
+
+By itself, this module doesn't do much. The Advanced help assists other modules and themes in showing help texts. Nothing will show up until you enable at least one other module that makes use of the advanced help framework or comes with a file named README.md or README.txt.
+
+
+MAINTAINERS
+-----------
+
+* David Valdez - https://www.drupal.org/u/gnuget
diff --git a/web/modules/contrib/advanced_help/advanced_help.info.yml b/web/modules/contrib/advanced_help/advanced_help.info.yml
new file mode 100644 (file)
index 0000000..28a815a
--- /dev/null
@@ -0,0 +1,6 @@
+name: Advanced help
+type: module
+description: 'Provide extended help and documentation.'
+version: VERSION
+core: 8.x
+
diff --git a/web/modules/contrib/advanced_help/advanced_help.install b/web/modules/contrib/advanced_help/advanced_help.install
new file mode 100644 (file)
index 0000000..7e735e4
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Implements hook_schema().
+ */
+function advanced_help_schema() {
+  $schema['advanced_help_index'] = [
+    'description' => 'Stores search index correlations for advanced help topics.',
+    'fields' => [
+      'sid' => [
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'description' => 'The primary key to give to the search engine for this topic.',
+        'no export' => TRUE,
+      ],
+      'module' => [
+        'type' => 'varchar',
+        'length' => '255',
+        'default' => '',
+        'not null' => TRUE,
+        'description' => 'The module that owns this topic.',
+      ],
+      'topic' => [
+        'type' => 'varchar',
+        'length' => '255',
+        'default' => '',
+        'not null' => TRUE,
+        'description' => 'The topic id.',
+      ],
+      'langcode' => [
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'The langcode this search index relates to.',
+      ],
+    ],
+    'primary key' => ['sid'],
+    'indexes' => ['langcode' => ['langcode']],
+    'foreign keys' => [
+      'system' => [
+        'table' => 'system',
+        'columns' => ['name' => 'name'],
+      ],
+    ],
+  ];
+
+  return $schema;
+}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/advanced_help.libraries.yml b/web/modules/contrib/advanced_help/advanced_help.libraries.yml
new file mode 100644 (file)
index 0000000..821d172
--- /dev/null
@@ -0,0 +1,10 @@
+help:
+  version: 0
+  css:
+    theme:
+      css/help.css: {}
+help.icon:
+  version: 0
+  css:
+    theme:
+      css/help-icon.css: {}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/advanced_help.links.menu.yml b/web/modules/contrib/advanced_help/advanced_help.links.menu.yml
new file mode 100644 (file)
index 0000000..5f7ca75
--- /dev/null
@@ -0,0 +1,6 @@
+advanced_help.main:
+  title: 'Advanced help'
+  description: 'Advanced help'
+  route_name: advanced_help.main
+  weight: 9
+  parent: system.admin
diff --git a/web/modules/contrib/advanced_help/advanced_help.links.task.yml b/web/modules/contrib/advanced_help/advanced_help.links.task.yml
new file mode 100644 (file)
index 0000000..470c9b8
--- /dev/null
@@ -0,0 +1,3 @@
+advanced_help.local_tasks:
+  deriver: 'Drupal\advanced_help\Plugin\Derivative\DynamicLocalTasks'
+  weight: 100
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/advanced_help.module b/web/modules/contrib/advanced_help/advanced_help.module
new file mode 100644 (file)
index 0000000..9bfba51
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+use Drupal\Core\Template\Attribute;
+use Drupal\Component\Serialization\Json;
+
+/**
+ * Implements hook_menu_links_discovered_alter().
+ *
+ * Remove the admin menu in case the help module is enabled.
+ */
+function advanced_help_menu_links_discovered_alter(&$links) {
+
+  if (Drupal::moduleHandler()->moduleExists('help')) {
+    unset($links['advanced_help.main']);
+  }
+}
+
+/**
+ * Implements hook_modules_installed().
+ */
+function advanced_help_modules_installed($modules) {
+  $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
+  \Drupal::cache('discovery')->invalidate('advanced_help_ini_' . $language);
+}
+
+/**
+ * Implements hook_theme().
+ */
+function advanced_help_theme() {
+  return [
+    'advanced_help_topic' => [
+      'variables' => [
+        'module' => NULL,
+        'topic'  => NULL,
+        'type'   => 'icon',
+      ]
+    ]
+  ];
+}
+
+/**
+ * Implements hook_preprocess_HOOK().
+ */
+function advanced_help_preprocess_advanced_help_topic(&$variables) {
+  $module = $variables['module'];
+  $topic  = $variables['topic'];
+  $type   = $variables['type'];
+
+  $advancedHelp = \Drupal::service('plugin.manager.advanced_help');
+  $info = $variables['topic_exists'] = $advancedHelp->getTopic($module, $topic);
+  $variables['attributes'] = new Attribute();
+  $variables['attributes']['class'] = [];
+  $variables['attributes']['title'] = $info['title'];
+
+  if (\Drupal::currentUser()->hasPermission('view advanced help popup')) {
+    $variables['attributes']['class'][] = 'advanced-help-link';
+    $variables['attributes']['class'][] = 'use-ajax';
+    $variables['attributes']['data-dialog-type'] = 'modal';
+    $variables['attributes']['data-dialog-options'] = Json::encode(['width' => $info['popup width'], 'height' => $info['popup height']]);
+    $variables['#attached']['library'][] = 'advanced_help/help.icon';
+  }
+  switch ($type) {
+    case 'icon':
+      $variables['text'] = '<span>' . t('Help') . '</span>';
+      break;
+
+    case 'title':
+      $variables['text'] = $info['title'];
+      $variables['attributes']['class'][] = 'advanced-help-title';
+      break;
+
+    default:
+      $variables['text'] = $type;
+      $variables['attributes']['class'][] = 'advanced-help-title';
+      break;
+  }
+}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/advanced_help.permissions.yml b/web/modules/contrib/advanced_help/advanced_help.permissions.yml
new file mode 100644 (file)
index 0000000..3c37465
--- /dev/null
@@ -0,0 +1,9 @@
+view advanced help index:
+  title: 'View help index'
+  restrict access: TRUE
+view advanced help topic:
+  title: 'View help topics'
+  restrict access: TRUE
+view advanced help popup:
+  title: 'View help popups'
+  restrict access: TRUE
diff --git a/web/modules/contrib/advanced_help/advanced_help.routing.yml b/web/modules/contrib/advanced_help/advanced_help.routing.yml
new file mode 100644 (file)
index 0000000..2fe8b92
--- /dev/null
@@ -0,0 +1,23 @@
+advanced_help.main:
+  path: '/admin/help/ah'
+  defaults:
+    _controller: '\Drupal\advanced_help\Controller\AdvancedHelpController::main'
+    _title: 'Module help index'
+  requirements:
+    _permission: 'view advanced help index'
+
+advanced_help.module_index:
+  path: '/admin/help/ah/{module}'
+  defaults:
+    _controller: '\Drupal\advanced_help\Controller\AdvancedHelpController::moduleIndex'
+    _title_callback: '\Drupal\advanced_help\Controller\AdvancedHelpController::moduleIndexTitle'
+  requirements:
+    _permission: 'view advanced help index'
+
+advanced_help.help:
+  path: '/help/ah/{module}/{topic}'
+  defaults:
+    _controller: '\Drupal\advanced_help\Controller\AdvancedHelpController::topicPage'
+    _title_callback: '\Drupal\advanced_help\Controller\AdvancedHelpController::topicPageTitle'
+  requirements:
+    _permission: 'view advanced help topic'
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/advanced_help.services.yml b/web/modules/contrib/advanced_help/advanced_help.services.yml
new file mode 100644 (file)
index 0000000..130b448
--- /dev/null
@@ -0,0 +1,4 @@
+services:
+  plugin.manager.advanced_help:
+    class: Drupal\advanced_help\AdvancedHelpManager
+    arguments: ['@module_handler', '@theme_handler', '@cache.discovery', '@string_translation']
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/composer.json b/web/modules/contrib/advanced_help/composer.json
new file mode 100644 (file)
index 0000000..7b7e22c
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "name": "drupal/advanced_help",
+  "description": "Provide extended help and documentation.",
+  "type": "drupal-module",
+  "license": "GPL-2.0+",
+  "minimum-stability": "dev",
+  "authors": [
+    {
+      "name": "David Valdez (gnuget)",
+      "homepage": "https://www.drupal.org/u/gnuget",
+      "role": "Maintainer"
+    }
+  ],
+  "support": {
+    "issues": "https://www.drupal.org/project/issues/advanced_help",
+    "irc": "irc://irc.freenode.org/drupal-contribute",
+    "source": "https://cgit.drupalcode.org/advanced_help"
+  },
+  "require": {
+    "michelf/php-markdown": "^1.7"
+  }
+}
diff --git a/web/modules/contrib/advanced_help/css/help-icon.css b/web/modules/contrib/advanced_help/css/help-icon.css
new file mode 100644 (file)
index 0000000..a3cbc54
--- /dev/null
@@ -0,0 +1,18 @@
+
+.advanced-help-link {
+  background: transparent url('../images/help.png') no-repeat top left;
+  background-position: 0px 0px;
+  display: inline-block;
+  height: 12px;
+  margin-top: 2px;
+  padding: 0px;
+  width: 12px;
+}
+
+.advanced-help-link span {
+  display: none;
+}
+
+.advanced-help-link:hover {
+  background-position: 0px -12px;
+}
diff --git a/web/modules/contrib/advanced_help/css/help.css b/web/modules/contrib/advanced_help/css/help.css
new file mode 100644 (file)
index 0000000..b4a8087
--- /dev/null
@@ -0,0 +1,69 @@
+
+.advanced-help-topic code,
+.advanced-help-topic pre {
+  background: #f1f1f1;
+  border: 1px solid #444;
+  display: block;
+  margin: 1em;
+  padding: .2em;
+}
+
+.advanced-help-topic h3,
+.advanced-help-topic h4,
+.advanced-help-topic h5,
+.advanced-help-topic h6,
+.advanced-help-topic dt {
+  font-weight: bold;
+}
+
+.advanced-help-topic li h3,
+.advanced-help-topic li h4,
+.advanced-help-topic li h5,
+.advanced-help-topic li h6 {
+  font-weight: normal;
+}
+
+.help-left {
+  display: block;
+  float: left; /* LTR */
+  text-align: left;
+  width: 42%;
+}
+
+.help-up {
+  display: block;
+  float: left; /* LTR */
+  margin: 0 5%;
+  width: 4%;
+}
+
+.help-up-noleft {
+  display: block;
+  float: left; /* LTR */
+  margin: 0 5%;
+  text-align: right;
+  width: 42%;
+}
+
+.help-right {
+  display: block;
+  float: right;
+  text-align: right;
+  width: 42%;
+}
+
+.help-box {
+  margin: .5em;
+}
+
+.help-navigation {
+  border-top: 1px dotted #ccc;
+}
+
+.help-previous {
+  float: left;
+}
+
+.help-next {
+  float: right;
+}
diff --git a/web/modules/contrib/advanced_help/help/advanced_help.help.yml b/web/modules/contrib/advanced_help/help/advanced_help.help.yml
new file mode 100644 (file)
index 0000000..00eb598
--- /dev/null
@@ -0,0 +1,14 @@
+readme:
+  title: 'README'
+  weight: -11
+using-advanced-help:
+  title: 'Using advanced help'
+  weight: -10
+translation:
+    title: 'Translating advanced help'
+ini-file:
+    title: 'Advanced help .init file format'
+    line break: false
+why-advanced-help:
+    title: 'Why advanced help?'
+    line break: true
diff --git a/web/modules/contrib/advanced_help/help/ahelp_tab.png b/web/modules/contrib/advanced_help/help/ahelp_tab.png
new file mode 100755 (executable)
index 0000000..37ef6be
Binary files /dev/null and b/web/modules/contrib/advanced_help/help/ahelp_tab.png differ
diff --git a/web/modules/contrib/advanced_help/help/click_icon.png b/web/modules/contrib/advanced_help/help/click_icon.png
new file mode 100644 (file)
index 0000000..0f05444
Binary files /dev/null and b/web/modules/contrib/advanced_help/help/click_icon.png differ
diff --git a/web/modules/contrib/advanced_help/help/ini-file.html b/web/modules/contrib/advanced_help/help/ini-file.html
new file mode 100644 (file)
index 0000000..05b85e4
--- /dev/null
@@ -0,0 +1,117 @@
+<p>The advanced help configuration file is in simple .ini file format.
+It has an optional section for global settings that might be inherited
+for each help file, followed by sections for each help file.</p>
+
+<p>Global settings may be put into a section named <code>[advanced help
+settings]</code>.  This means that this name is reserved and it cannot
+be a help file in any module or theme. The following settings may be
+set in this section, with the default value (if any) in brackets.</p>
+
+<dl>
+<dt><code>line break</code> (FALSE)</dt>
+<dd>If set, the line break filter will be applied to all help files
+defined by this module or theme, unless that help file specifically is
+set otherwise.  The line break converts line breaks
+into <code>br</code> and <code>p</code> tags automatically.</dd>
+
+<dt><code>navigation</code> (TRUE)</dt>
+<dd>If set, this navigation will be displayed at the end of the topic:
+<em>previous topic</em>, Up (parent), <em>next topic</em>.</dd>
+
+<dt><code>css</code></dt>
+<dd>Specify a css file that will be used for all help files (unless
+overridden), including the .css extension. This .css file must reside
+in the help directory along with the .html files, and will not be
+affected by translation.</dd>
+
+<dt><code>name</code></dt>
+<dd>May be set to override the module or theme name as displayed in
+both the module/theme index as well as the navigation and breadcrumb
+trail. Usually, this is not set, but for some projects you may want to
+use a more friendly name than appears in the project's .info file.</dd>
+
+<dt><code>index name</code></dt>
+<dd>This may be set to change the name of the module or theme in the
+module/theme index. It overrides the <code>name</code> setting above,
+as well as the project's name in its .info file.</dd>
+
+<dt><code>hide</code> (FALSE)</dt>
+<dd>This may be used to hide a module or theme in the module/theme
+index. This is particularly useful for modules who insert their help
+files into the hierarchy of another module or theme, as might be done
+by modules that extend <strong>Views</strong> or derived themes that
+extend base themes like <strong>Zen</strong>. By setting this to TRUE
+the project will not appear as its own entry.</dd>
+</dl>
+
+<p>Each section after that will correspond to a single help file for a
+single topic.  It starts with the topic name in square brackets
+(e.g. <code>[ini-file]</code>).  The following settings may be set for
+each file/topic, with the default value (if any) in brackets.</p>
+
+<dl>
+<dt><code>title</code></dt>
+<dd>The title of the topic, presented to the user and used in
+links. If you have special characters in your title, be sure to
+enclose it in quotes.  (This setting is currently not optional.)</dd>
+
+<dt><code>file</code> (topic name)</dt>
+<dd>The filename, without the .html extension, used for the file with
+the help text for the topic. This is optional; if not specified, the
+topic name wil be the file name.</dd>
+
+<dt><code>weight</code> (0)</dt>
+<dd>The weight, used for sorting topics on the administration
+page. The default is 0 (zero) if unspecified. Items with the same weight
+are sorted alphabetically.</dd>
+
+<dt><code>parent</code></dt>
+<dd>The topic ID to use in a hierarchy; children will be listed
+beneath parents in the topic list, and will have the parent in their
+breadcrumb trail. You may parent this topic to a topic in another
+module or theme by using <code>module%topic</code>
+or <code>theme%topic</code> as the identifier,
+where <code>module</code> or <code>theme</code> is the project's short
+name. For example if parent is set to, '<code>views%display</code>',
+the topic will be regarded as a child of the
+<code>display</code> topic in the <strong>Views</strong> module.</dd>
+
+<dt><code>line break</code> (FALSE)</dt>
+<dd>Set the line break filter for this topic. Set to FALSE to disable
+the line break filter if this has been turned on in the global
+settings.</dd>
+
+<dt><code>css</code></dt>
+<dd>Specify a css file that will be used for this file. This .css file
+must reside in the help directory along with the .html files. This
+will override any .css file added by the global settings.</dd>
+
+<dt><code>popup width</code> (500)</dt>
+<dd>The width in pixels of the popup window.</dd>
+
+<dt><code>popup height</code> (500)</dt>
+<dd>The height in pixels of the popup window.</dd>
+</dl>
+
+<p>For example, here is a version of the <code>advanced_help.help.ini</code> file:</p>
+
+<pre>
+[readme]
+title = README
+weight = -11
+
+[using-advanced-help]
+title = Using advanced help
+weight = -10
+
+[translation]
+title = Translating advanced help
+
+[ini-file]
+title = Help .ini file format
+line break = FALSE
+
+[why-advanced-help]
+title = Why advanced help?
+line break = TRUE
+</pre>
diff --git a/web/modules/contrib/advanced_help/help/readme.html b/web/modules/contrib/advanced_help/help/readme.html
new file mode 100644 (file)
index 0000000..99f0e51
--- /dev/null
@@ -0,0 +1,107 @@
+<h2 id="project-description">Synopsis</h2>
+
+<p>The <strong>Advanced help</strong> module provides a framework that allows
+module and theme developers integrate help texts in a Drupal site.</p>
+
+<p>These help texts are stored in ordinary <code>.html</code>-files
+that lives in the file system (as opposed to the database).  These
+files are distributed from the project Drupal.org repo in the same
+package as the module or theme, and placed in a subdirectory named
+<code>help</code> in the project or theme directory.  This means that
+the help texts can be easily kept in sync with the project they
+provide help texts for, but also that read access to these files
+are not managed by any content access restrictions imposed by Drupal.</p>
+  
+<p>The help texts can be marked up with standard HTML. They will be
+rendered using your site's theme.</p>
+
+<p>If the module or theme author does not make use of the
+<em>Advanced help</em> HTML-framework, but if there is a
+<code>README.md</code> or <code>README.txt</code> in the package,
+the content of that file will be shown instead.</p>
+  
+<p>The help texts may appear in a popup or not as the project prefers.
+By taking away access to view the popups, a site can hide popups from
+users.</p>
+
+<p>The help texts can be placed in a hierarchy, allowing for top down
+navigation of help.</p>
+
+<p>The help texts may be made searchable. If advanced help search is
+enabled, all help texts are fully indexed. This means that the entire
+contents of the advanced help set of pages can be searched for
+keywords.</p>
+
+<h2 id="use">Using the module</h2>
+
+<p>When you enable the module, a new tab with the legend “Advanced
+help” will show up under “Help”:
+
+<div class="ta-center">
+<img class="help-img-center" alt="ahelp_tab.png" src="&path&ahelp_tab.png" width="661" height="225" border="1" />
+</div>
+
+<p>By itself, this module doesn't do much.  The <strong>Advanced
+help</strong> assists other modules and themes in showing help texts.
+Nothing will show up until you enable at least one other module that
+makes use of the advanced help framework or comes with a file
+named <code>README.md</code> or <code>README.txt</code>.  However, it
+comes with a small companion demo module named
+<strong>Advanced help example</strong> to demonstrate how it works.
+For more extensive example of use of the advanced help features, see
+the <strong>Views</strong> project.</p>
+
+<!--
+<h2 id="project-recommended">Recommended modules</h2>
+
+<ul>
+<li><a href="https://www.drupal.org/project/markdown">Markdown filter</a>:<br>
+When this module is enabled, display of any <code>README.md</code> the
+module shows will be rendered with markdown.</li>
+<li><a href="https://www.drupal.org/project/attributions">Attributions</a>:<br>
+When this module is enabled, attributions of third party content used
+by the project (i.e. some text from Wikipedia) will be available in an
+attribution block and on an attribution page.</li>
+</ul>
+-->
+
+<h2 id="support-status">Support status</h2>
+
+<p>Reported bugs for the Drupal 7 branch will be fixed in a timely
+manner.  Bugs in the issue queue for the Drupal 6 branch will only be
+fixed if accompanied with a patch, after the patch has been reviewed
+and tested by the community.  No Drupal 8 version is currently under
+development.  Post a message in
+the <a href="https://www.drupal.org/node/1928218">issue queue</a> if
+you're interested in managing a port of the project to to Drupal
+8. Older versions are no longer supported.</p>
+
+<p>Community support in the form of patches are very welcome for both
+Drupal 6 and Drupal 7 versions, and will be given priority. For QA,
+the project needs community support in the form of reviews of patches,
+development versions and releases.</p>
+
+<p>The primary goal of the module is to remain <strong>light-weight
+and simple</strong>.  This means that not all feature requests will be
+implemented, even if they are a good idea.  Feature requests
+accompanied by patches are more likely to make it into a release.</p>
+
+<p>The maintainer hopes that the community is willing to help out by
+answering &amp; closing support requests.</p>
+
+<!--
+<h2 id="project-problems">Known problems</h2>
+-->
+
+
+
+<h2 id="project-maintainers">Credits</h2>
+
+<ul>
+<li><a href="https://www.drupal.org/u/merlinofchaos">merlinofchaos</a> (52 commits, original creator)</li>
+<li><a href="https://www.drupal.org/u/redndahead">redndahead</a> (8 commits)</li>
+<li><a href="https://www.drupal.org/u/dmitrig01">dmitrig01</a> (3 commits)</li>
+<li><a href="https://www.drupal.org/u/amitgoyal">amitgoyal </a> (5 commits)</li>
+<li><a href="https://www.drupal.org/u/gisle">gisle</a> (current maintainer, D7)</li>
+<li><a href="https://www.drupal.org/u/gnuget">gnuget</a> (current maintainer, D8)</li>
+</ul>
diff --git a/web/modules/contrib/advanced_help/help/translation.html b/web/modules/contrib/advanced_help/help/translation.html
new file mode 100644 (file)
index 0000000..75de70f
--- /dev/null
@@ -0,0 +1,44 @@
+<p>To translate a help-file indexed by <strong>Advanced help</strong>,
+first create a directory
+<code>translations/help/<em>language</em></code> in the project's 
+root directory. The <em>language</em>  is the language code that
+appears on the <em>Languages</em> page in the administrative UI.</p>
+
+<p>Then, copy the <code>.ini</code> file and all
+the <code>.html</code> files from the help directory into this.  If
+you need to alter an image to use it in a translation, you may also
+put the altered image there.</p>
+
+<p>In the topics section, the <code>.ini</code> file only needs to
+keep the topic names (unaltered) and titles (translated). If there is
+a <code>name</code> or <code>index name</code> setting in the
+'advanced help settings' portion, that should be retained. Any
+retained settings should be translated. The rest of the data in the
+<code>.ini</code> file may be discarded or ignored.</p>
+
+<p>Each <code>.html</code> file should then be translated in place.</p>
+
+<p>When translating a <code>.html</code> file, you will find that
+the <code>&amp;path&amp;</code> keyword (used for images and links)
+will lead to the original directory. If you must translate items that
+are linked, such as images containing text,
+use <code>&amp;trans_path&amp;</code> instead, which will lead to the
+translated directory. This will allow you to pick and choose which
+linked items, if any, will be translated.</p>
+
+<p>If a topic is not translated, the default (untranslated) version
+will be shown instead.</p>
+
+<h2>Translating Advanced help's help files</h2>
+
+<p>If you want to help with the translation of
+<strong>Advanced help</strong> help texts for a particular language, look for an issue named named “Translation to XXX” (where
+“XXX” is the language you want to translate the help texts to) in the <a href="https://www.drupal.org/project/issues/advanced_help">issue queue for Advanced help</a>.
+If such an issue does not exist, please can create it.
+Choose <em>Category</em>   “Task”,
+<em>Status</em> “Needs review” and
+<em>Component</em>  “Documentation”.
+Upload translated files as an attachment (change the file type from <code>.html</code> to <code>.txt</code> to be allowed to upload). </p>
+
+<p>Uploaded translations will be included in the next version if
+reviewed and approved by other users (i.e. gets to status “RTBC”).</p>
diff --git a/web/modules/contrib/advanced_help/help/using-advanced-help.html b/web/modules/contrib/advanced_help/help/using-advanced-help.html
new file mode 100644 (file)
index 0000000..c47750b
--- /dev/null
@@ -0,0 +1,152 @@
+<p>The <strong>Advanced help</strong> module provides a framework that
+allows module and theme developers integrate help texts in a Drupal
+site.  Although the <strong>Advanced help</strong> does not provide
+general help by itself, it provides a powerful and easy framework that
+modules and themes may use to provide their own help.</p>
+
+<p>Modules and themes utilizing <strong>Advanced help</strong> should
+create a subdirectory named <code>help</code> inside their own main
+directory. Place the file
+<em>MODULENAME</em>.help.ini (resp. <em>THEMENAME</em>.help.ini) in this subdirectory.
+formatted similar to the following example:</p>
+
+<pre>
+[about-php]
+title = About PHP
+file = about-php
+weight = -10
+
+[history]
+title = History of PHP
+parent = about-php
+
+[usage]
+title = Usage of PHP
+weight = 1
+
+[security] 
+title = Security of PHP
+weight = 2
+
+[syntax]
+title = PHP syntax
+parent = usage
+</pre>
+
+<p>This file defines five help topics (inside the square brackets), and
+some settings for them.
+See: <a href="&topic:advanced_help/ini-file&">Advanced help .ini file format</a> for
+a list of defined settings.</p>
+
+
+<p>All topics are addressed by the module or theme providing the
+topic, and by the topic id. To produce a themed link to popup
+about a topic, use the a format similar to the following example:</p>
+
+<!-- D6
+<pre>
+$output = theme('advanced_help_topic', 'help_example', 'about-php');
+$output .= '&nbsp;' . t('Click the help icon!');
+</pre>
+-->
+
+<!-- D7 -->
+<pre>
+$output = theme('advanced_help_topic', array(
+  'module' => 'help_example',
+  'topic' => 'about-php',
+));
+$output .= '&nbsp;' . t('Click the help icon!');
+</pre>
+
+<p>This produces the following output:</p>
+
+<pre>
+&lt;a class="advanced-help-link" title="About PHP"
+  onclick="var w=window.open(this.href, 'advanced_help_window',
+  'width=500,height=500,scrollbars,resizable');
+  w.focus(); return false;"
+  href="/help/help_example/about-php?popup=1"&gt;
+&lt;span&gt;Help&lt;/span&gt;
+&lt;/a&gt;
+ Click the help icon!
+&lt;/div&gt;
+</pre>
+
+<p>This produces a clickable help icon like the one shown below:</p>
+
+<div class="ta-center">
+<img class="help-img-center" alt="clickable icon" src="&path&click_icon.png" width="180" height="90" border="0" />
+</div>
+
+<p>Inside your help file, you may link to other help topics using this format:</p>
+<pre>
+&lt;a href="&amp;topic:module/topic&amp;"&gt;topic&lt;/a&gt;
+</pre>
+<p>This format will ensure the popup status remains consistent when
+switching between links.</p>
+
+<p>To reference items within the help directory, such as images you wish to embed  within the help text, use:</p>
+
+<pre>
+&lt;img src="&amp;path&amp;example.png"/&gt;
+&lt;img src="&amp;trans_path&amp;example.png"/&gt;
+</pre>
+
+<p>The <code>trans_path</code> keyword refers to a translated version of the image in the translation directory and may be used it differs from the original.</p>
+
+<p>To reference any normal path in the site, use:</p>
+<pre>
+&lt;a href="&amp;base_url&amp;admin/settings/site-configuration"&gt;anchor text&lt;/a&gt;
+</pre>
+
+<p><strong>NOTE: </strong> In previous versions <strong>Advanced
+help</strong> did not require the &amp;'s to be wrapped around
+<code>topic</code>, <code>path</code>, and <code>base_url</code>.
+This is currently still supported, but will be removed in a future
+version.  By adding the &amp;'s these tokens are now not limited
+to <code>href=""</code> and <code>src=""</code> parameters.</p>
+
+<h2 id="access-control">Access control</h2>
+
+<p>When this module is installed, users with the
+<code>view advanced help index</code>
+permission can access the advanced help index by going to
+<em>Administer &rarr; Advanced Help</em>
+(<code>admin/advanced_help</code>). Additional permissions
+<code>view advanced help topic</code>  and
+<code>view advanced help popup</code>
+enable users to access the actual help pages and popups.</p>
+
+<p>The help texts are stored as plain .html-files and can, unless
+protected, be accessed by anyone who knows their URL.  To protect
+them, place the following four lines in a file named
+<code>.htaccess</code> in project's <code>help</code> directory:</p>
+
+<pre>
+&lt;Files *\.html&gt;
+Order Allow,Deny
+Deny from all
+&lt;/Files&gt;
+</pre>
+
+<p>It as the responsibility of the site manager to make sure this type
+of protection is in place if the site has help files that merits
+protection from direct access.</p>
+
+<p>See also this tracker in the project's issue queue:  
+<a href="https://www.drupal.org/node/1980936">#1980936 Typing complete path to .html help files in module bypasses user permissions</a>.</p>
+
+<h2 id="search">Search</h2>
+
+<p>To enable advanced help search, navigate to
+<em>Administration → Configuration → Search and metadata → Search settings</em>.
+Scroll down to <em>Active search modules</em> and tick the box to the
+left of “Advanced help”.  The search form will appear on the top of
+the advanced help index pages.</p>
+
+<p>If the core <strong>Search</strong> module is enabled, the contents
+of the advanced help framework will be indexed on cron. If you enable
+new modules or themes and wish to immediately index their help text,
+navigate to <em>Administration → Reports → Status report</em> and
+click the link “run cron manually”.</p>
diff --git a/web/modules/contrib/advanced_help/help/why-advanced-help.html b/web/modules/contrib/advanced_help/help/why-advanced-help.html
new file mode 100644 (file)
index 0000000..3f36b3d
--- /dev/null
@@ -0,0 +1,44 @@
+The <strong>Advanced help</strong> framework was designed to replace the original Drupal help system, which has several flaws that make it hard to create new help, hard to maintain existing help, and particularly hard to access help.
+
+The primary goal, then, is to increase the accessibility of help, meaning the ability of both the user and the help text author to access the needed tools to use, create, maintain and translate the help.
+
+This system is completely separate from Drupal's <code>hook_help()</code>. In Drupal 6 and 7, it actually co-exists with it; in the future, it is hoped that it will completely replace it allowing <code>hook_help()</code> to be deprecated and removed.
+
+Messages added to the top of a page are not really “help”. Often these messages are an introduction to a form or a short blurb telling a user what to do with a particular page. The problem is, these messages are always there, they are easily ignored, and they come before the actual page. In general, when users are learning, they want to see the page first, then ask questions. The reverse order is much less conducive to actually teaching a user how to use something. By allowing help to be available on request, the system conforms more naturally to how most people work.
+
+<h2>Advanced help is organized by topic</h2>
+With the <code>hook_help()</code> method, help text is organized by URL path. This is fine if you have help text describing how to use a particular page or what a particular page does, but ultimately is limiting because manuals and documentation are usually grouped by topic, and those topics are determined by the material itself.
+
+<strong>Advanced help</strong> allows the documentation author to organize topics as he or she sees fit; the only restriction, really, is that each individual chunk of text needs to stand on its own as a discrete topic.
+
+What's more, modules and themes can insert their topics into another's hierarchy. This would allow the Drupal core to create a task based help navigation system which allows modules and themes to insert topics into that navigation fluidly. This allows modules and themes to continue to keep their systems separate, yet integrate into the main system.
+
+<h2>Advanced help topics are processed HTML in their own files</h2>
+This separation makes it easy to find and modify. Currently, everything is lumped together in <code>hook_help()</code> in PHP strings that are run through <code>t()</code>, and there is a fair amount of PHP code necessary in this system that actually gets in the way of writing good, explanatory text.
+
+In fact, requiring a documentation author to understand PHP at all is a detriment. The idea that documentation writers need to have PHP development as a skill seriously reduces the number of available contributors. HTML, on the other hand, is a much more common skill, is relatively easy to learn, and the amount of HTML needed to write documentation is only a little bit more than the HTML used in forum posts.
+
+Another benefit to not using PHP is that the files themselves are safe. They are filtered to escape malicious script code that could take over the server or do worse things. This means that these files can be used relatively easily on Drupal.org itself. It also means that descriptions of the project pulled from the project's help pages or README.txt or README.md can be made on the project's Drupal.org without the need to download the module or theme to look at the contents of these files.  This also simplifies maintenance, as the files can be corrected easily by patches, which are updated by tyhe maintainer and pushed to git.
+
+By moving all docymentation into help files, we could, if we wanted, package the Drupal.org handbooks, or a subset of them, directly into a Drupal distribution, or a Drupal add-on, so that Drupal administrators can have Drupal help without needing to visit Drupal.org. This can be valuable in locked down corporate environments and on planes. But more importantly, the handbooks can be made version aware much more easily than the current method on Drupal.org.
+
+The downside to this method is that these books can't easily be made dynamic. Though the use of alter hooks could allow a module or theme to make modifications to the help as needed, doing this could make the help files less useful when you take them out of context.
+
+<h2>Advanced help files are translated as a file</h2>
+It is actually not easy to translate documents as strings, particularly when the language being used is very much unlike English. In fact, when translating a document, the organization of the sentences may change drastically. It is also a burden on the CPU to do this, as you are indexing on very long strings.
+
+Translators have a much better time translating a document as a unit, because of the presence of the entire context.
+
+<h2>Advanced help has its own navigation system</h2>
+By making use of a navigation system specified in a .ini file (which is not PHP code and therefore safe to use), the help can be structured like a book, which is typical of online manuals. This is familiar to users, can be organized (and re-organized) and allows a module or theme to include significantly richer text without burdening the PHP code with having its help loaded unnecessarily.
+
+This book can be navigated hierarchically as well, making it easy to keep related topics together.
+<h2>Advanced help is indexed by the search engine</h2>
+An important goal of this system was to add searchability to the help. By being able to enter keywords into the search box and find relevant topics, we come up with a system that resembles the kind of help that comes with many operating systems. This is very valuable when searching through manuals trying to find out how to do a particular thing.
+
+This search is specific to the help, meaning that the help will not be mixed in with the global node search. This can be considered both an advantage and a disadvantage. For the most part, this help system is meant to provide help to site administrators, and content searches should not find it. The disadvantage, of course, is when you want to use it for end user help, you will not be able to.
+
+<h2>Inline help can be brought in via popups</h2>
+In addition to the manual-like hierarchical navigation, <strong>Advanced help</strong> can also provide context-sensitive additional help through a popup. While popups are controversial, the argument for using them is that when getting help while on a form, <i>a popup will not throw away a user's data.</i> Browsers are not very friendly to input forms if they are not submitted, and navigating away from the form can be dangerous. There are various other solutions to this problem, but each one has a drawback. The drawbacks to popups are well known, but mostly it is the irritation of having new windows. When getting help, though, a popup is usually invited. Help should not interfere with what the operation the user is trying to complete. It differs greatly from the uninvited popup, which are usually ads or popups meant to prevent users from navigating away from a site.
+
+Popups can be added to a page with plain text links or themed icon links.
diff --git a/web/modules/contrib/advanced_help/help_example/help/180px-Andi_Gutmans_1.jpg b/web/modules/contrib/advanced_help/help_example/help/180px-Andi_Gutmans_1.jpg
new file mode 100644 (file)
index 0000000..b182676
Binary files /dev/null and b/web/modules/contrib/advanced_help/help_example/help/180px-Andi_Gutmans_1.jpg differ
diff --git a/web/modules/contrib/advanced_help/help_example/help/180px-Lerdorf.jpg b/web/modules/contrib/advanced_help/help_example/help/180px-Lerdorf.jpg
new file mode 100644 (file)
index 0000000..5a437f4
Binary files /dev/null and b/web/modules/contrib/advanced_help/help_example/help/180px-Lerdorf.jpg differ
diff --git a/web/modules/contrib/advanced_help/help_example/help/180px-PHP_Hello_World_screenshot.png b/web/modules/contrib/advanced_help/help_example/help/180px-PHP_Hello_World_screenshot.png
new file mode 100644 (file)
index 0000000..38f33b8
Binary files /dev/null and b/web/modules/contrib/advanced_help/help_example/help/180px-PHP_Hello_World_screenshot.png differ
diff --git a/web/modules/contrib/advanced_help/help_example/help/about-php.html b/web/modules/contrib/advanced_help/help_example/help/about-php.html
new file mode 100644 (file)
index 0000000..f19f30c
--- /dev/null
@@ -0,0 +1,5 @@
+<p><b>PHP</b> (<i>PHP: Hypertext Preprocessor</i>) is a computer <a target="_blank" href="http://en.wikipedia.org/wiki/Scripting_language" title="Scripting language">scripting language</a>, originally designed for producing <a target="_blank" href="http://en.wikipedia.org/wiki/Dynamic_web_page" title="Dynamic web page">dynamic web pages</a>. It is mainly used in <a target="_blank" href="http://en.wikipedia.org/wiki/Server-side_scripting" title="Server-side scripting">server-side scripting</a>, but can be used from a <a target="_blank" href="http://en.wikipedia.org/wiki/Command_line_interface" title="Command line interface">command line interface</a> or in <a target="_blank" href="http://en.wikipedia.org/wiki/Standalone" title="Standalone">standalone</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Graphical_user_interface" title="Graphical user interface">graphical applications</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1" title="">[2]</a></sup></p>
+
+<p>While PHP was originally created by <a target="_blank" href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf" title="Rasmus Lerdorf">Rasmus Lerdorf</a> in 1994, the main implementation of PHP is now produced by The PHP Group and serves as the <a target="_blank" href="http://en.wikipedia.org/wiki/De_facto_standard" title="De facto standard"><i>de facto</i> standard</a> for PHP as there is no <a target="_blank" href="http://en.wikipedia.org/wiki/Formal_specification" title="Formal specification">formal specification</a>.<sup id="cite_ref-history_2-0" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> Released under the <a target="_blank" href="http://en.wikipedia.org/wiki/PHP_License" title="PHP License">PHP License</a>, the <a target="_blank" href="http://en.wikipedia.org/wiki/Free_Software_Foundation" title="Free Software Foundation">Free Software Foundation</a> considers it to be <a target="_blank" href="http://en.wikipedia.org/wiki/Free_software" title="Free software">free software</a>.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3" title="">[4]</a></sup></p>
+
+<p>PHP is a widely-used general-purpose scripting language that is especially suited for <a target="_blank" href="http://en.wikipedia.org/wiki/Web_development" title="Web development">web development</a> and can be embedded into <a target="_blank" href="http://en.wikipedia.org/wiki/HTML" title="HTML">HTML</a>. It generally runs on a <a target="_blank" href="http://en.wikipedia.org/wiki/Web_server" title="Web server">web server</a>, taking PHP code as its input and creating <a target="_blank" href="http://en.wikipedia.org/wiki/Web_page" title="Web page">web pages</a> as output. It can be deployed on most web servers and on almost every <a target="_blank" href="http://en.wikipedia.org/wiki/Operating_system" title="Operating system">operating system</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Platform_%28computing%29" class="mw-redirect" title="Platform (computing)">platform</a> free of charge.<sup id="cite_ref-foundations_4-0" class="reference"><a href="#cite_note-foundations-4" title="">[5]</a></sup> PHP is installed on more than 20 million websites and 1 million <a target="_blank" href="http://en.wikipedia.org/wiki/Server_%28computing%29" title="Server (computing)">servers</a>, although the number of websites with PHP <a target="_blank" href="http://en.wikipedia.org/wiki/Installation_%28computer_programs%29" title="Installation (computer programs)">installed</a> has declined since August 2005.<sup id="cite_ref-usage_5-0" class="reference"><a href="#cite_note-usage-5" title="">[6]</a></sup> It is also the most popular <a target="_blank" href="http://en.wikipedia.org/wiki/Apache_HTTP_Server" title="Apache HTTP Server">Apache</a> module among computers using Apache as a web server.<sup id="cite_ref-usage_5-1" class="reference"><a href="#cite_note-usage-5" title="">[6]</a></sup> The most recent major release of PHP was version 5.2.5 on <a target="_blank" href="http://en.wikipedia.org/wiki/November_8" title="November 8">November 8</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/2007" title="2007">2007</a>.<sup id="cite_ref-php5changelog_6-0" class="reference"><a href="#cite_note-php5changelog-6" title="">[7]</a></sup></p>
diff --git a/web/modules/contrib/advanced_help/help_example/help/help_example.help.ini b/web/modules/contrib/advanced_help/help_example/help/help_example.help.ini
new file mode 100644 (file)
index 0000000..83f9ec7
--- /dev/null
@@ -0,0 +1,24 @@
+[about-php]
+title = About PHP
+file = about-php
+weight = -10
+
+[history]
+title = History of PHP
+file = history
+parent = about-php
+
+[usage]
+title = Usage of PHP
+file = usage
+weight = 1
+
+[security] 
+title = Security of PHP
+file = security
+weight = 2
+
+[syntax]
+title = PHP syntax
+file = syntax
+parent = usage
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/help_example/help/history.html b/web/modules/contrib/advanced_help/help_example/help/history.html
new file mode 100644 (file)
index 0000000..9993403
--- /dev/null
@@ -0,0 +1,23 @@
+<div class="help-box help-left">
+<div class="thumbinner" style="width:182px;"><a href="http://en.wikipedia.org/wiki/Image:Lerdorf.jpg" class="image" title="Rasmus Lerdorf, who wrote the original Common Gateway Interface binaries"><img alt="Rasmus Lerdorf, who wrote the original Common Gateway Interface binaries" src="path:180px-Lerdorf.jpg" width="180" height="270" border="0" class="thumbimage" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/Image:Lerdorf.jpg" class="internal" title="Enlarge"><img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>
+<a href="/wiki/Rasmus_Lerdorf" title="Rasmus Lerdorf">Rasmus Lerdorf</a>, who wrote the original <a href="/wiki/Common_Gateway_Interface" title="Common Gateway Interface">Common Gateway Interface</a> binaries</div>
+</div>
+</div>
+
+
+<p>PHP, standing for Personal Home Page, began as a set of <a target="_blank" href="http://en.wikipedia.org/wiki/Common_Gateway_Interface" title="Common Gateway Interface">Common Gateway Interface</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Binary_file" title="Binary file">binaries</a> written in the <a target="_blank" href="http://en.wikipedia.org/wiki/C_programming_language" class="mw-redirect" title="C programming language">C programming language</a> in 1994 by the <a target="_blank" href="http://en.wikipedia.org/wiki/Danish_people" title="Danish people">Danish</a>/<a target="_blank" href="http://en.wikipedia.org/wiki/Greenland" title="Greenland">Greenlandic</a> programmer <a target="_blank" href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf" title="Rasmus Lerdorf">Rasmus Lerdorf</a>. Lerdorf initially created these Personal Home Page Tools to replace a small set of <a target="_blank" href="http://en.wikipedia.org/wiki/Perl" title="Perl">Perl</a> scripts he had been using to maintain his <a target="_blank" href="http://en.wikipedia.org/wiki/Personal_homepage" class="mw-redirect" title="Personal homepage">personal homepage</a>. The tools were originally created to perform tasks such as displaying his <a target="_blank" href="http://en.wikipedia.org/wiki/R%C3%A9sum%C3%A9" title="Résumé">résumé</a> and recording how much <a target="_blank" href="http://en.wikipedia.org/wiki/Web_traffic" title="Web traffic">traffic</a> his page was receiving.<sup id="cite_ref-history_2-1" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> He combined these binaries with his Form Interpreter to create PHP/FI, which had more functionality. It included a larger <a target="_blank" href="http://en.wikipedia.org/wiki/C_%28programming_language%29" title="C (programming language)">C implementation</a> which could communicate with <a target="_blank" href="http://en.wikipedia.org/wiki/Database" title="Database">databases</a> and helped build simple, dynamic <a target="_blank" href="http://en.wikipedia.org/wiki/Web_application" title="Web application">web applications</a>. He released PHP publicly on <a target="_blank" href="http://en.wikipedia.org/wiki/June_8" title="June 8">June 8</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/1995" title="1995">1995</a> to speed up the finding of <a target="_blank" href="http://en.wikipedia.org/wiki/Software_bug" title="Software bug">bugs</a> and improving the code.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7" title="">[8]</a></sup> This release was named PHP version 2, and already had basic functionality that PHP has today. This includes Perl-like variables, form handling, and the ability to embed HTML. The syntax was similar to Perl but was more limited, simpler, and less consistent.<sup id="cite_ref-history_2-2" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup></p>
+
+<div class="help-box help-right">
+<div class="thumbinner" style="width:182px;"><a target="_blank" href="http://en.wikipedia.org/wiki/Image:Andi_Gutmans_1.jpg" class="image" title="Andi Gutmans, who, along with Zeev Suraski, rewrote the parser that formed PHP 3"><img alt="Andi Gutmans, who, along with Zeev Suraski, rewrote the parser that formed PHP 3" src="path:180px-Andi_Gutmans_1.jpg" width="180" height="244" border="0" class="thumbimage" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a target="_blank" href="http://en.wikipedia.org/wiki/Image:Andi_Gutmans_1.jpg" class="internal" title="Enlarge"><img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>
+<a target="_blank" href="http://en.wikipedia.org/wiki/Andi_Gutmans" title="Andi Gutmans">Andi Gutmans</a>, who, along with <a target="_blank" href="http://en.wikipedia.org/wiki/Zeev_Suraski" title="Zeev Suraski">Zeev Suraski</a>, rewrote the <a target="_blank" href="http://en.wikipedia.org/wiki/Parser" class="mw-redirect" title="Parser">parser</a> that formed PHP 3</div>
+</div>
+</div>
+<p><a target="_blank" href="http://en.wikipedia.org/wiki/Zeev_Suraski" title="Zeev Suraski">Zeev Suraski</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Andi_Gutmans" title="Andi Gutmans">Andi Gutmans</a>, two <a target="_blank" href="http://en.wikipedia.org/wiki/Israelis" title="Israelis">Israeli</a> developers at the <a target="_blank" href="http://en.wikipedia.org/wiki/Technion_IIT" class="mw-redirect" title="Technion IIT">Technion IIT</a>, rewrote the <a target="_blank" href="http://en.wikipedia.org/wiki/Parser" class="mw-redirect" title="Parser">parser</a> in 1997 and formed the base of PHP 3, changing the language's name to the <a target="_blank" href="http://en.wikipedia.org/wiki/Recursive_initialism" class="mw-redirect" title="Recursive initialism">recursive initialism</a> <i>PHP: Hypertext Preprocessor</i>.<sup id="cite_ref-history_2-3" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> The development team officially released PHP/FI 2 in November 1997 after months of <a target="_blank" href="http://en.wikipedia.org/wiki/Development_stage#beta" class="mw-redirect" title="Development stage">beta</a> testing. Afterwards, public testing of PHP 3 began, and the official launch came in June 1998. Suraski and Gutmans then started a new <a target="_blank" href="http://en.wikipedia.org/wiki/Rewrite_%28programming%29" title="Rewrite (programming)">rewrite</a> of PHP's core, producing the <a target="_blank" href="http://en.wikipedia.org/wiki/Zend_Engine" title="Zend Engine">Zend Engine</a> in 1999.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8" title="">[9]</a></sup> They also founded <a target="_blank" href="http://en.wikipedia.org/wiki/Zend_Technologies" title="Zend Technologies">Zend Technologies</a> in <a target="_blank" href="http://en.wikipedia.org/wiki/Ramat_Gan" title="Ramat Gan">Ramat Gan</a>, Israel, which manages the development of PHP.<sup id="cite_ref-history_2-4" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup></p>
+
+<p>On <a target="_blank" href="http://en.wikipedia.org/wiki/May_22" title="May 22">May 22</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/2000" title="2000">2000</a>, PHP 4, powered by the Zend Engine 1.0, was released.<sup id="cite_ref-history_2-5" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> On <a target="_blank" href="http://en.wikipedia.org/wiki/July_13" title="July 13">July 13</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/2004" title="2004">2004</a>, PHP 5 was released and is powered by the new Zend Engine II.<sup id="cite_ref-history_2-6" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> PHP 5 included new features such as improved support for <a target="_blank" href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a>, the PHP Data Objects extension (which defines a lightweight and consistent interface for accessing databases), and numerous performance enhancements.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9" title="">[10]</a></sup> The most recent update released by The PHP Group is for the older PHP version 4 code branch. As of January 2008, this branch is up to version 4.4.8. PHP 4 will be supported by security updates until <a target="_blank" href="http://en.wikipedia.org/wiki/August_8" title="August 8">August 8</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/2008" title="2008">2008</a>.<sup id="cite_ref-2007_news_10-0" class="reference"><a href="#cite_note-2007_news-10" title="">[11]</a></sup></p>
+
+<p>PHP 5 is the only stable version still being developed. <a target="_blank" href="http://en.wikipedia.org/wiki/Late_static_binding" class="mw-redirect" title="Late static binding">Late static binding</a> has been missing from PHP and will be added in version 5.3.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11" title="">[12]</a></sup> <sup id="cite_ref-12" class="reference"><a href="#cite_note-12" title="">[13]</a></sup> Development on PHP 4 ceased at the end of 2007, except for the critical security updates for PHP 4 already mentioned.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13" title="">[14]</a></sup><sup id="cite_ref-2007_news_10-1" class="reference"><a href="#cite_note-2007_news-10" title="">[11]</a></sup> PHP 6 is now under development and major changes include the removal of <code>register_globals</code><sup id="cite_ref-14" class="reference"><a href="#cite_note-14" title="">[15]</a></sup>, <a target="_blank" href="http://en.wikipedia.org/wiki/Magic_quotes" title="Magic quotes">magic quotes</a>, and <a target="_blank" href="http://en.wikipedia.org/wiki/Safe_mode#Application_software_safe_mode" title="Safe mode">safe mode</a>.<sup id="cite_ref-2007_news_10-2" class="reference"><a href="#cite_note-2007_news-10" title="">[11]</a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15" title="">[16]</a></sup> PHP does not have complete native support for <a target="_blank" href="http://en.wikipedia.org/Unicode" title="Unicode">Unicode</a> or multibyte strings;<sup id="cite_ref-16" class="reference"><a href="#cite_note-16" title="">[17]</a></sup> unicode support will be added in PHP 6.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17" title="">[18]</a></sup> Many high profile open source projects ceased to support PHP 4 in new code as of <a target="_blank" href="http://en.wikipedia.org/wiki/February_5" title="February 5">February 5</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/2008" title="2008">2008</a>, due to the GoPHP5 initiative, provided by a consortium of PHP developers promoting the transition from PHP 4 to PHP 5.<sup id="cite_ref-gophp5_18-0" class="reference"><a href="#cite_note-gophp5-18" title="">[19]</a></sup><sup id="cite_ref-19" class="reference"><a href="#cite_note-19" title="">[20]</a></sup></p>
diff --git a/web/modules/contrib/advanced_help/help_example/help/security.html b/web/modules/contrib/advanced_help/help_example/help/security.html
new file mode 100644 (file)
index 0000000..31d43dc
--- /dev/null
@@ -0,0 +1 @@
+<p>PHP is a popular target of <a target="_blank" href="http://en.wikipedia.org/wiki/Hacker" title="Hacker">hackers</a> who exploit vulnerable applications written in PHP. Software vulnerabilities related to PHP are identified among the <a target="_blank" href="http://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures" title="Common Vulnerabilities and Exposures">CVE (Common Vulnerabilities and Exposures)</a> records, available from the <a target="_blank" href="http://en.wikipedia.org/wiki/National_Vulnerability_Database" title="National Vulnerability Database">National Vulnerability Database</a>. The proportion of vulnerabilities related to PHP, out of the total of all common vulnerabilities, amounted to: 12% in 2003, 20% in 2004, 28% in 2005, 43% in 2006, 36% in 2007, and 33.8% for the first quarter of 2008. More than a quarter of all software vulnerabilities listed in this database are related to PHP, and more than a third of vulnerabilities listed recently. Most of these vulnerabilities can be exploited remotely, that is without being logged on the computer hosting the vulnerable application.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27" title="">[28]</a></sup> Such exploitation is made possible due to poor programming habits, such as failing to check data before entering it into a database, and features of the language such as <code>register_globals</code>, which is now deprecated.<sup id="cite_ref-register_globals_21-1" class="reference"><a href="#cite_note-register_globals-21" title="">[22]</a></sup> These result in <a target="_blank" href="http://en.wikipedia.org/wiki/Code_injection" title="Code injection">code injection</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/Cross-site_scripting" title="Cross-site scripting">cross-site scripting</a> and other <a target="_blank" href="http://en.wikipedia.org/wiki/Application_security" title="Application security">application security</a> issues. It's important to note that none of these attacks are exclusive to PHP and all are avoidable by following proper coding techniques and principles.</p>
diff --git a/web/modules/contrib/advanced_help/help_example/help/syntax.html b/web/modules/contrib/advanced_help/help_example/help/syntax.html
new file mode 100644 (file)
index 0000000..48d8109
--- /dev/null
@@ -0,0 +1,38 @@
+<h2> <span class="mw-headline">Syntax</span></h2>
+<div class="help-right">
+<div class="thumbinner" style="width:182px;"><a target="_blank" href="http://en.wikipedia.org/wiki/Image:PHP_Hello_World_screenshot.png" class="image" title="Syntax-highlighted PHP code"><img alt="Syntax-highlighted PHP code" src="path:180px-PHP_Hello_World_screenshot.png" width="180" height="87" border="0" class="thumbimage" /></a>
+<div class="thumbcaption">
+
+<div class="magnify"><a target="_blank" href="http://en.wikipedia.org/wiki/Image:PHP_Hello_World_screenshot.png" class="internal" title="Enlarge"><img src="/skins-1.5/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>
+<a target="_blank" href="http://en.wikipedia.org/wiki/Syntax-highlighted" class="mw-redirect" title="Syntax-highlighted">Syntax-highlighted</a> PHP code</div>
+</div>
+</div>
+<p>PHP only parses code within its <a target="_blank" href="http://en.wikipedia.org/wiki/Delimiter" title="Delimiter">delimiters</a>. Anything outside its delimiters is sent directly to the output and is not parsed by PHP. The most common delimiters are <span s>&lt;?php</span> and <span>?&gt;</span>, which are open and close delimiters respectively. <span>&lt;script language="php"&gt;</span> and <span>&lt;/script&gt;</span> delimiters are also available. Short tags (<span>&lt;?</span> or <span>&lt;?=</span> and <span>?&gt;</span>) are also commonly used, but like ASP-style tags (<span>&lt;%</span> or <span>&lt;%=</span> and <span>%&gt;</span>), they are less portable as they can be disabled in the PHP configuration. For this reason, the use of short tags and ASP-style tags is discouraged.<sup id="cite_ref-basic_syntax_28-0" class="reference"><a href="#cite_note-basic_syntax-28" title="">[29]</a></sup> The purpose of these delimiters is to separate PHP code from non-PHP code, including HTML. Everything outside the delimiters is ignored by the parser and is passed through as output.<sup id="cite_ref-29" class="reference"><a href="#cite_note-29" title="">[30]</a></sup></p>
+
+<p>Variables are prefixed with a <a target="_blank" href="http://en.wikipedia.org/wiki/Dollar_sign" title="Dollar sign">dollar symbol</a> and a <a target="_blank" href="http://en.wikipedia.org/wiki/Primitive_type" title="Primitive type">type</a> does not need to be specified in advance. Unlike function and class names, variable names are case sensitive. Both double-quoted (<span>""</span>) and <a target="_blank" href="http://en.wikipedia.org/wiki/Heredoc" class="mw-redirect" title="Heredoc">heredoc</a> strings allow the ability to embed the variable's value into the string.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30" title="">[31]</a></sup> PHP treats <a target="_blank" href="http://en.wikipedia.org/wiki/Newline" title="Newline">newlines</a> as <a target="_blank" href="http://en.wikipedia.org/wiki/Whitespace_%28computer_science%29" title="Whitespace (computer science)">whitespace</a> in the manner of a <a target="_blank" href="http://en.wikipedia.org/wiki/Free-form_language" title="Free-form language">free-form language</a> (except when inside string quotes), and statements are terminated by a semicolon.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31" title="">[32]</a></sup> PHP has three types of <a target="_blank" href="http://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28syntax%29#Comments" title="Comparison of programming languages (syntax)">comment syntax</a>: <span>/* */</span> serves as block comments, and <span>//</span> as well as <span>#</span> are used for inline comments.<sup id="cite_ref-32" class="reference"><a href="#cite_note-32" title="">[33]</a></sup> To output text to the browser, either the <tt>print</tt> function or the <tt>echo</tt> function is used. Both functions are nearly identical; the major difference is that <tt>print</tt> is slower than <tt>echo</tt> because the former will return a status indicating if it was successful or not, whereas the latter does not return a status and only returns the text for output.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33" title="">[34]</a></sup></p>
+
+<p><a name="Data_types" id="Data_types"></a></p>
+<h3><span class="mw-headline">Data types</span></h3>
+<p>PHP stores whole numbers in a platform-dependent range. This range is typically that of 32-bit <a target="_blank" href="http://en.wikipedia.org/wiki/Signed_number_representations" title="Signed number representations">signed</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Integer_%28computer_science%29" title="Integer (computer science)">integers</a>. Unsigned integers are converted to signed values in certain situations; this behavior is different from other programming languages.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34" title="">[35]</a></sup> Integer variables can be assigned using decimal (positive and negative), <a target="_blank" href="http://en.wikipedia.org/wiki/Octal" title="Octal">octal</a>, and <a target="_blank" href="http://en.wikipedia.org/wiki/Hexadecimal" title="Hexadecimal">hexadecimal</a> notations. <a target="_blank" href="http://en.wikipedia.org/wiki/Real_numbers" class="mw-redirect" title="Real numbers">Real numbers</a> are also stored in a platform-specific range. They can be specified using <a target="_blank" href="http://en.wikipedia.org/wiki/Floating_point" title="Floating point">floating point</a> notation, or two forms of <a target="_blank" href="http://en.wikipedia.org/wiki/Scientific_notation" title="Scientific notation">scientific notation</a>.<sup id="cite_ref-types_35-0" class="reference"><a href="#cite_note-types-35" title="">[36]</a></sup> PHP has a native <a target="_blank" href="http://en.wikipedia.org/wiki/Boolean_datatype" title="Boolean datatype">Boolean</a> type that is similar to the native Boolean types in <a target="_blank" href="http://en.wikipedia.org/wiki/Java_%28programming_language%29" title="Java (programming language)">Java</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/C%2B%2B" title="C++">C++</a>. Using the Boolean type conversion rules, non-zero values are interpreted as true and zero as false, as in Perl and C++.<sup id="cite_ref-types_35-1" class="reference"><a href="#cite_note-types-35" title="">[36]</a></sup> The null data type represents a variable that has no value. The only value in the null data type is <i>NULL</i>.<sup id="cite_ref-types_35-2" class="reference"><a href="#cite_note-types-35" title="">[36]</a></sup> Variables of the "resource" type represent references to resources from external sources. These are typically created by functions from a particular extension, and can only be processed by functions from the same extension; examples include file, image, and database resources.<sup id="cite_ref-types_35-3" class="reference"><a href="#cite_note-types-35" title="">[36]</a></sup> Arrays can contain elements of any type that PHP can handle, including resources, objects, and even other arrays. Order is preserved in lists of values and in <a target="_blank" href="http://en.wikipedia.org/wiki/Hash_table" title="Hash table">hashes</a> with both keys and values, and the two can be intermingled.<sup id="cite_ref-types_35-4" class="reference"><a href="#cite_note-types-35" title="">[36]</a></sup> PHP also supports <a target="_blank" href="http://en.wikipedia.org/wiki/String_%28computing%29" class="mw-redirect" title="String (computing)">strings</a>, which can be used with single quotes, double quotes, or <a target="_blank" href="http://en.wikipedia.org/wiki/Heredoc" class="mw-redirect" title="Heredoc">heredoc syntax</a>.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36" title="">[37]</a></sup></p>
+
+<p><a name="Functions" id="Functions"></a></p>
+<h3><span class="mw-headline">Functions</span></h3>
+<p>PHP has hundreds of base functions and thousands more from extensions. Functions are not <a target="_blank" href="http://en.wikipedia.org/wiki/First-class_function" title="First-class function">first-class functions</a> and can only be referenced by their name. <sup id="cite_ref-functions_37-0" class="reference"><a href="#cite_note-functions-37" title="">[38]</a></sup> User-defined functions can be created at any time without being prototyped.<sup id="cite_ref-functions_37-1" class="reference"><a href="#cite_note-functions-37" title="">[38]</a></sup> Functions can be defined inside code blocks, permitting a <a target="_blank" href="http://en.wikipedia.org/wiki/Dynamic_dispatch" title="Dynamic dispatch">run-time decision</a> as to whether or not a function should be defined. Function calls must use parentheses, with the exception of zero argument class <a target="_blank" href="http://en.wikipedia.org/wiki/Constructor_%28computer_science%29" title="Constructor (computer science)">constructor</a> functions called with the PHP <span>new</span> operator, where parentheses are optional. PHP supports quasi-<a target="_blank" href="http://en.wikipedia.org/wiki/Anonymous_function" title="Anonymous function">anonymous functions</a> through the <span>create_function()</span> function, although they are not true anonymous functions because anonymous functions are nameless, but functions can only be referenced by name, or indirectly through a variable <span>$function_name();</span>, in PHP.<sup id="cite_ref-functions_37-2" class="reference"><a href="#cite_note-functions-37" title="">[38]</a></sup></p>
+
+<p><a name="Objects" id="Objects"></a></p>
+<h3><span class="mw-headline">Objects</span></h3>
+<p>Basic <a target="_blank" href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> functionality was added in PHP 3.<sup id="cite_ref-history_2-10" class="reference"><a href="#cite_note-history-2" title="">[3]</a></sup> Object handling was completely rewritten for PHP 5, expanding the feature set and enhancing performance.<sup id="cite_ref-php_5_objects_38-0" class="reference"><a href="#cite_note-php_5_objects-38" title="">[39]</a></sup> In previous versions of PHP, objects were handled like <a target="_blank" href="http://en.wikipedia.org/wiki/Primitive_type" title="Primitive type">primitive types</a>.<sup id="cite_ref-php_5_objects_38-1" class="reference"><a href="#cite_note-php_5_objects-38" title="">[39]</a></sup> The drawback of this method was that the whole object was copied when a variable was assigned or passed as a parameter to a method. In the new approach, objects are referenced by <a target="_blank" href="http://en.wikipedia.org/wiki/Smart_pointer#Handles" title="Smart pointer">handle</a>, and not by value. PHP 5 introduced private and protected <a target="_blank" href="http://en.wikipedia.org/wiki/Member_variable" class="mw-redirect" title="Member variable">member variables</a> and methods, along with <a target="_blank" href="http://en.wikipedia.org/wiki/Abstract_type" title="Abstract type">abstract classes</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Final_type" class="mw-redirect" title="Final type">final classes</a> as well as <a target="_blank" href="http://en.wikipedia.org/wiki/Abstract_method" class="mw-redirect" title="Abstract method">abstract methods</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Final_method" class="mw-redirect" title="Final method">final methods</a>. It also introduced a standard way of declaring <a target="_blank" href="http://en.wikipedia.org/wiki/Constructor_%28computer_science%29" title="Constructor (computer science)">constructors</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Destructor_%28computer_science%29" title="Destructor (computer science)">destructors</a>, similar to that of other object-oriented languages such as <a target="_blank" href="http://en.wikipedia.org/wiki/C%2B%2B" title="C++">C++</a>, and a standard <a target="_blank" href="http://en.wikipedia.org/wiki/Exception_handling" title="Exception handling">exception handling</a> model. Furthermore, PHP 5 added <a target="_blank" href="http://en.wikipedia.org/wiki/Interfaces" class="mw-redirect" title="Interfaces">interfaces</a> and allowed for multiple interfaces to be implemented. There are special interfaces that allow objects to interact with the runtime system. <a target="_blank" href="http://en.wikipedia.org/wiki/Object" title="Object">Objects</a> implementing <a target="_blank" href="http://en.wikipedia.org/wiki/ArrayAccess" class="mw-redirect" title="ArrayAccess">ArrayAccess</a> can be used with array syntax and <a target="_blank" href="http://en.wikipedia.org/wiki/Object" title="Object">objects</a> implementing <a target="_blank" href="http://en.wikipedia.org/wiki/Iterator" title="Iterator">Iterator</a> or <a target="_blank" href="http://en.wikipedia.org/wiki/IteratorAggregate" class="mw-redirect" title="IteratorAggregate">IteratorAggregate</a> can be used with the <span>foreach</span> language construct. There is no <a target="_blank" href="http://en.wikipedia.org/wiki/Virtual_table" class="mw-redirect" title="Virtual table">virtual table</a> feature in the engine, so <a target="_blank" href="http://en.wikipedia.org/wiki/Static_variable" title="Static variable">static variables</a> are bound with a name instead of a reference at compile time.<sup id="cite_ref-zend_engine_2_39-0" class="reference"><a href="#cite_note-zend_engine_2-39" title="">[40]</a></sup></p>
+
+<p>If the developer creates a copy of an object using the reserved word <i>clone</i>, the Zend engine will check if a <tt>__clone()</tt> method has been defined or not. If not, it will call a default <tt>__clone()</tt> which will copy the object's properties. If a <tt>__clone()</tt> method is defined, then it will be responsible for setting the necessary properties in the created object. For convenience, the engine will supply a function that imports the properties of the source object, so that the programmer can start with a by-value <a href="http://en.wiktionary.org/wiki/replica" class="extiw" title="wikt:replica">replica</a> of the source object and only override properties that need to be changed.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40" title="">[41]</a></sup></p>
+
+<p><a name="Resources" id="Resources"></a></p>
+<h2> <span class="mw-headline">Resources</span></h2>
+<p>PHP includes <a target="_blank" href="http://en.wikipedia.org/wiki/List_of_PHP_libraries" title="List of PHP libraries">free and open source libraries</a> with the core build. PHP is a fundamentally <a target="_blank" href="http://en.wikipedia.org/wiki/Internet" title="Internet">Internet</a>-aware system with modules built in for accessing <a target="_blank" href="http://en.wikipedia.org/wiki/File_transfer_protocol" class="mw-redirect" title="File transfer protocol">FTP</a> servers, many database servers, embedded SQL libraries such as embedded <a target="_blank" href="http://en.wikipedia.org/wiki/MySQL" title="MySQL">MySQL</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/SQLite" title="SQLite">SQLite</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol" title="Lightweight Directory Access Protocol">LDAP</a> servers, and others. Many functions familiar to C programmers such as those in the <tt><a target="_blank" href="http://en.wikipedia.org/wiki/Stdio.h" title="Stdio.h">stdio</a></tt> family are available in the standard PHP build.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41" title="">[42]</a></sup> PHP has traditionally used features such as "<a target="_blank" href="http://en.wikipedia.org/wiki/Magic_quotes" title="Magic quotes">magic_quotes_gpc</a>" and "magic_quotes_runtime" which attempt to escape apostrophes (') and quotes (") in strings in the assumption that they will be used in databases, to prevent <a target="_blank" href="http://en.wikipedia.org/wiki/SQL_injection" title="SQL injection">SQL injection</a> attacks. This leads to confusion over which data is escaped and which is not, and to problems when data is not in fact used as input to a database and when the escaping used is not completely correct.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42" title="">[43]</a></sup> To make code portable between servers which do and do not use magic quotes, developers can preface their code with a script to reverse the effect of magic quotes when it is applied.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43" title="">[44]</a></sup></p>
+
+<p>PHP allows developers to write <a target="_blank" href="http://en.wikipedia.org/wiki/Extension_%28computing%29" class="mw-redirect" title="Extension (computing)">extensions</a> in <a target="_blank" href="http://en.wikipedia.org/wiki/C_%28programming_language%29" title="C (programming language)">C</a> to add functionality to the PHP language. These can then be compiled into PHP or loaded dynamically at runtime. Extensions have been written to add support for the <a target="_blank" href="http://en.wikipedia.org/wiki/Windows_API" title="Windows API">Windows API</a>, process management on <a target="_blank" href="http://en.wikipedia.org/wiki/Unix-like" title="Unix-like">Unix-like</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Operating_system" title="Operating system">operating systems</a>, multibyte strings (<a target="_blank" href="http://en.wikipedia.org/wiki/Unispan" title="Unispan">Unispan</a>), <a target="_blank" href="http://en.wikipedia.org/wiki/CURL" title="CURL">cURL</a>, and several popular <a target="_blank" href="http://en.wikipedia.org/wiki/Compression_formats" class="mw-redirect" title="Compression formats">compression formats</a>. Some more unusual features include integration with <a target="_blank" href="http://en.wikipedia.org/wiki/Internet_relay_chat" class="mw-redirect" title="Internet relay chat">Internet relay chat</a>, dynamic generation of images and <a target="_blank" href="http://en.wikipedia.org/wiki/Adobe_Flash" title="Adobe Flash">Adobe Flash</a> content, and even <a target="_blank" href="http://en.wikipedia.org/wiki/Speech_synthesis" title="Speech synthesis">speech synthesis</a>. The <a target="_blank" href="http://en.wikipedia.org/wiki/PHP_Extension_Community_Library" class="mw-redirect" title="PHP Extension Community Library">PHP Extension Community Library</a> (PECL) project is a repository for extensions to the PHP language.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44" title="">[45]</a></sup></p>
+
+<p>As with many scripting languages, PHP scripts are normally kept as human-readable source code, even on production web servers.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45" title="">[46]</a></sup> While this allows flexibility, releasing scripts in source form is undesirable for commercial software developers, and can raise issues with security of web servers; as an example, if a hacker acquires control of a server, database passwords may be quickly discovered, and undesirable changes to scripts may be made that remain undiscovered indefinitely. Various encoding tools are available for PHP to offer code protection.<sup class="noprint Template-Fact"><span title="This claim needs references to reliable sources&#160;since March 2008" style="white-space: nowrap;">[<i><a target="_blank" href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</span></sup></p>
+<p>span optimizers improve the quality of the compiled code by reducing its size and making changes that can reduce the execution time and improve performance. The nature of the PHP <a target="_blank" href="http://en.wikipedia.org/wiki/Compiler" title="Compiler">compiler</a> is such that there are often opportunities for <a target="_blank" href="http://en.wikipedia.org/wiki/Optimization_%28computer_science%29" title="Optimization (computer science)">span optimization</a><sup id="cite_ref-46" class="reference"><a href="#cite_note-46" title="">[47]</a></sup>, and an example of a code optimizer is the <a target="_blank" href="http://en.wikipedia.org/wiki/PHP_accelerator#Zend_Optimizer" title="PHP accelerator">Zend Optimizer</a> PHP extension.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47" title="">[48]</a></sup></p>
+
+<p><a target="_blank" href="http://en.wikipedia.org/wiki/PHP_accelerator" title="PHP accelerator">PHP accelerators</a> can offer significant performance gains by <a target="_blank" href="http://en.wikipedia.org/wiki/Caching" class="mw-redirect" title="Caching">caching</a> the compiled form of a PHP script in <a target="_blank" href="http://en.wikipedia.org/wiki/Shared_memory" title="Shared memory">shared memory</a> to avoid the overhead of <a target="_blank" href="http://en.wikipedia.org/wiki/Parsing" title="Parsing">parsing</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Compiling" class="mw-redirect" title="Compiling">compiling</a> the code every time the script runs. They may also perform <a target="_blank" href="http://en.wikipedia.org/wiki/span_optimization" class="mw-redirect" title="span optimization">span optimization</a> to provide increased execution performance.<sup class="noprint Template-Fact"><span title="This claim needs references to reliable sources&#160;since March 2008" style="white-space: nowrap;">[<i><a target="_blank" href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</span></sup></p>
+
diff --git a/web/modules/contrib/advanced_help/help_example/help/usage.html b/web/modules/contrib/advanced_help/help_example/help/usage.html
new file mode 100644 (file)
index 0000000..8f1e9ad
--- /dev/null
@@ -0,0 +1,9 @@
+<p>PHP is a general-purpose scripting language that is especially suited for <a target="_blank" href="http://en.wikipedia.org/wiki/Web_development" title="Web development">web development</a>. It is the fourth most popular computer programming language, ranking behind <a target="_blank" href="http://en.wikipedia.org/wiki/Java_%28programming_language%29" title="Java (programming language)">Java</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/C_%28programming_language%29" title="C (programming language)">C</a>, and <a target="_blank" href="http://en.wikipedia.org/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a>.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22" title="">[23]</a></sup> PHP generally runs on a <a target="_blank" href="http://en.wikipedia.org/wiki/Web_server" title="Web server">web server</a>, taking PHP code as its input and creating <a target="_blank" href="http://en.wikipedia.org/wiki/Web_page" title="Web page">web pages</a> as output. It can also be used for <a target="_blank" href="http://en.wikipedia.org/wiki/Command-line" class="mw-redirect" title="Command-line">command-line</a> scripting and <a target="_blank" href="http://en.wikipedia.org/wiki/Client-side" title="Client-side">client-side</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Graphical_user_interface" title="Graphical user interface">GUI</a> applications. PHP can be deployed on most <a target="_blank" href="http://en.wikipedia.org/wiki/Web_server" title="Web server">web servers</a>, many <a target="_blank" href="http://en.wikipedia.org/wiki/Operating_system" title="Operating system">operating systems</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Platform_%28computing%29" class="mw-redirect" title="Platform (computing)">platforms</a>, and can be used with many <a target="_blank" href="http://en.wikipedia.org/wiki/Relational_database_management_system" title="Relational database management system">relational database management systems</a>. It is available free of charge, and the PHP Group provides the complete source code for users to build, customize and extend for their own use.<sup id="cite_ref-foundations_4-1" class="reference"><a href="#cite_note-foundations-4" title="">[5]</a></sup></p>
+
+<p>PHP primarily acts as a <a target="_blank" href="http://en.wikipedia.org/wiki/Filter_%28software%29" title="Filter (software)">filter</a><sup id="cite_ref-23" class="reference"><a href="#cite_note-23" title="">[24]</a></sup>, taking input from a file or stream containing text and/or PHP instructions and outputs another stream of data; most commonly the output will be HTML. From PHP 4, the PHP <a target="_blank" href="http://en.wikipedia.org/wiki/Parser" class="mw-redirect" title="Parser">parser</a> <a target="_blank" href="http://en.wikipedia.org/wiki/Compiler" title="Compiler">compiles</a> input to produce <a target="_blank" href="http://en.wikipedia.org/wiki/Bytecode" title="Bytecode">bytecode</a> for processing by the <a target="_blank" href="http://en.wikipedia.org/wiki/Zend_Engine" title="Zend Engine">Zend Engine</a>, giving improved performance over its <a target="_blank" href="http://en.wikipedia.org/wiki/Interpreter_%28computing%29" title="Interpreter (computing)">interpreter</a> predecessor.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24" title="">[25]</a></sup></p>
+
+<p>Originally designed to create dynamic web pages, PHP's principal focus is <a target="_blank" href="http://en.wikipedia.org/wiki/Server-side_scripting" title="Server-side scripting">server-side scripting</a><sup id="cite_ref-25" class="reference"><a href="#cite_note-25" title="">[26]</a></sup>, and it is similar to other server-side scripting languages that provide dynamic content from a web server to a <a target="_blank" href="http://en.wikipedia.org/wiki/Client_%28computing%29" title="Client (computing)">client</a>, such as <a target="_blank" href="http://en.wikipedia.org/wiki/Microsoft" title="Microsoft">Microsoft</a>'s <a target="_blank" href="http://en.wikipedia.org/wiki/ASP.NET" title="ASP.NET">ASP.NET</a> system, <a target="_blank" href="http://en.wikipedia.org/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>' <a target="_blank" href="http://en.wikipedia.org/wiki/JavaServer_Pages" title="JavaServer Pages">JavaServer Pages</a><sup id="cite_ref-26" class="reference"><a href="#cite_note-26" title="">[27]</a></sup>, and <a target="_blank" href="http://en.wikipedia.org/wiki/Mod_perl" title="Mod perl">mod_perl</a>. PHP has also attracted the development of many <a target="_blank" href="http://en.wikipedia.org/wiki/Software_framework" title="Software framework">frameworks</a> that provide building blocks and a design structure to promote <a target="_blank" href="http://en.wikipedia.org/wiki/Rapid_application_development" title="Rapid application development">rapid application development</a> (RAD). Some of these include <a target="_blank" href="http://en.wikipedia.org/wiki/CakePHP" title="CakePHP">CakePHP</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/PRADO" title="PRADO">PRADO</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/Symfony" title="Symfony">Symfony</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/Zend_Framework" title="Zend Framework">Zend Framework</a>, offering features similar to other <a target="_blank" href="http://en.wikipedia.org/wiki/List_of_web_application_frameworks" title="List of web application frameworks">web application frameworks</a>.</p>
+
+<p>The <a target="_blank" href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29" title="LAMP (software bundle)">LAMP</a> architecture has become popular in the web industry as a way of deploying web applications. PHP is commonly used as the <i>P</i> in this bundle alongside <a target="_blank" href="http://en.wikipedia.org/wiki/Linux" title="Linux">Linux</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/Apache_HTTP_Server" title="Apache HTTP Server">Apache</a> and <a target="_blank" href="http://en.wikipedia.org/wiki/MySQL" title="MySQL">MySQL</a>, although the <i>P</i> can also refer to <a target="_blank" href="http://en.wikipedia.org/wiki/Python_%28programming_language%29" title="Python (programming language)">Python</a> or <a target="_blank" href="http://en.wikipedia.org/wiki/Perl" title="Perl">Perl</a>.</p>
+
+<p>As of April 2007, over 20 million Internet domains were hosted on servers with PHP installed, and PHP was recorded as the most popular Apache module.<sup id="cite_ref-usage_5-2" class="reference"><a href="#cite_note-usage-5" title="">[6]</a></sup></p>
diff --git a/web/modules/contrib/advanced_help/help_example/help_example.info b/web/modules/contrib/advanced_help/help_example/help_example.info
new file mode 100644 (file)
index 0000000..f396100
--- /dev/null
@@ -0,0 +1,4 @@
+name = Advanced help example
+description = A example help module to demonstrate the advanced help module.
+core = 7.x
+dependencies[] = advanced_help
diff --git a/web/modules/contrib/advanced_help/help_example/help_example.module b/web/modules/contrib/advanced_help/help_example/help_example.module
new file mode 100644 (file)
index 0000000..1815112
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @file
+ * Provide example help for the advanced help module.
+ */
+
+/**
+ * Implements hook_menu().
+ */
+function help_example_menu() {
+  // View help topic index.
+  $items['admin/help_example'] = [
+    'title' => 'Example help',
+    'page callback' => 'help_example_index_page',
+    'access arguments' => ['view advanced help index'],
+    'weight' => 9,
+  ];
+  return $items;
+}
+
+/**
+ * Help topic index.
+ */
+function help_example_index_page() {
+  $output = theme('advanced_help_topic', [
+    'module' => 'help_example',
+    'topic' => 'about-php',
+  ]);
+  $output .= '&nbsp;' . t('Click the help icon to view some example help about the PHP programming language (from wikipedia.org). Be sure to run cron to update the index if you want to try out the search features.');
+  return $output;
+}
diff --git a/web/modules/contrib/advanced_help/images/help.png b/web/modules/contrib/advanced_help/images/help.png
new file mode 100644 (file)
index 0000000..7645023
Binary files /dev/null and b/web/modules/contrib/advanced_help/images/help.png differ
diff --git a/web/modules/contrib/advanced_help/src/AdvancedHelpManager.php b/web/modules/contrib/advanced_help/src/AdvancedHelpManager.php
new file mode 100644 (file)
index 0000000..db9abe5
--- /dev/null
@@ -0,0 +1,233 @@
+<?php
+
+namespace Drupal\advanced_help;
+
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\ThemeHandlerInterface;
+use Drupal\Core\StringTranslation\TranslationInterface;
+use Drupal\Core\Plugin\DefaultPluginManager;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\Component\Serialization\Yaml;
+
+/**
+ * AdvancedHelp plugin manager.
+ */
+class AdvancedHelpManager extends DefaultPluginManager {
+  use StringTranslationTrait;
+
+  /**
+   * Constructs an AdvancedHelpManager instance.
+   *
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
+   *   Cache backend instance to use.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to invoke the alter hook with.
+   * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
+   *   Theme handler.
+   * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
+   *   The string translation service.
+   */
+  public function __construct(ModuleHandlerInterface $module_handler, ThemeHandlerInterface $theme_handler, CacheBackendInterface $cache_backend, TranslationInterface $string_translation) {
+    $this->module_handler = $module_handler;
+    $this->theme_handler = $theme_handler;
+    $this->setStringTranslation($string_translation);
+    $this->alterInfo('advanced_help');
+    $this->setCacheBackend($cache_backend, 'advanced_help', ['advanced_help']);
+  }
+
+  /**
+   * Get the modules/theme list.
+   * @todo cache
+   */
+  public function getModuleList() {
+    $modules = $this->module_handler->getModuleList();
+    $themes = $this->theme_handler->listInfo();
+    $result = [];
+
+    foreach ($modules + $themes  as $name => $data) {
+      $result[$name] = $this->module_handler->getName($name);
+    }
+    return $result;
+  }
+
+  /**
+   * Get the information for a single help topic.
+   * @param $module
+   * @param $topic
+   * @return string|bool
+   */
+  function getTopic($module, $topic) {
+    $topics = $this->getTopics();
+    if (!empty($topics[$module][$topic])) {
+      return $topics[$module][$topic];
+    }
+    return FALSE;
+  }
+
+  /**
+   * Return the name of the module.
+   * @param string $module
+   * @return string
+   */
+  function getModuleName($module) {
+    return $this->module_handler->getName($module);
+  }
+
+  /**
+   * Search the system for all available help topics.
+   * @todo check visibility of the method.
+   */
+  public function getTopics() {
+    $ini = $this->parseHelp();
+    return $ini['topics'];
+  }
+
+  /**
+   * Returns advanced help settings.
+   * @todo check visibility of the method.
+   */
+  public function getSettings() {
+    $ini = $this->parseHelp();
+    return $ini['settings'];
+  }
+
+
+  /**
+   * Function to parse yml / txt files.
+   *
+   * @todo implement cache
+   * @todo check visibility of the method.
+   */
+  public function parseHelp() {
+    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
+    static $ini = NULL;
+
+    $cache = $this->cacheGet('advanced_help_ini_' . $language);
+    if ($cache) {
+      $ini = $cache->data;
+    }
+
+    if (!isset($ini)) {
+      $ini = ['topics' => [], 'settings' => []];
+
+      foreach ($this->module_handler->getModuleList() + $this->theme_handler->listInfo() as $plugin_name => $extension) {
+        $module = $plugin_name;
+        $module_path = $extension->getPath();
+        $info = [];
+
+        if (file_exists("$module_path/help/$module.help.yml")) {
+          $path = "$module_path/help";
+          $info =  Yaml::decode(file_get_contents("$module_path/help/$module.help.yml"));
+        }
+        elseif (!file_exists("$module_path/help")) {
+          // Look for one or more README files.
+          $files = file_scan_directory("./$module_path",
+            '/^(readme).*\.(txt|md)$/i', ['recurse' => FALSE]);
+          $path = "./$module_path";
+          foreach ($files as $name => $fileinfo) {
+            $info[$fileinfo->filename] = [
+              'line break' => TRUE,
+              'readme file' => TRUE,
+              'file' => $fileinfo->filename,
+              'title' => $fileinfo->name,
+            ];
+          }
+        }
+
+        if (!empty($info)) {
+          // Get translated titles:
+          $translation = [];
+          if (file_exists("$module_path/translations/help/$language/$module.help.yml")) {
+            $translation = Yaml::decode(file_get_contents("$module_path/translations/help/$language/$module.help.yml"));
+          }
+
+          $ini['settings'][$module] = [];
+          if (!empty($info['advanced help settings'])) {
+            $ini['settings'][$module] = $info['advanced help settings'];
+            unset($info['advanced help settings']);
+
+            // Check translated strings for translatable global settings.
+            if (isset($translation['advanced help settings']['name'])) {
+              $ini['settings']['name'] = $translation['advanced help settings']['name'];
+            }
+            if (isset($translation['advanced help settings']['index name'])) {
+              $ini['settings']['index name'] = $translation['advanced help settings']['index name'];
+            }
+
+          }
+
+          foreach ($info as $name => $topic) {
+            // Each topic should have a name, a title, a file and path.
+            $file = !empty($topic['file']) ? $topic['file'] : $name;
+            $ini['topics'][$module][$name] = [
+              'name' => $name,
+              'module' => $module,
+              'ini' => $topic,
+              'title' => !empty($translation[$name]['title']) ? $translation[$name]['title'] : $topic['title'],
+              'weight' => isset($topic['weight']) ? $topic['weight'] : 0,
+              'parent' => isset($topic['parent']) ? $topic['parent'] : 0,
+              'popup width' => isset($topic['popup width']) ? $topic['popup width'] : 500,
+              'popup height' => isset($topic['popup height']) ? $topic['popup height'] : 500,
+              // Require extension.
+              'file' => isset($topic['readme file']) ? $file : $file . '.html',
+              // Not in .ini file.
+              'path' => $path,
+              'line break' => isset($topic['line break']) ? $topic['line break'] : (isset($ini['settings'][$module]['line break']) ? $ini['settings'][$module]['line break'] : FALSE),
+              'navigation' => isset($topic['navigation']) ? $topic['navigation'] : (isset($ini['settings'][$module]['navigation']) ? $ini['settings'][$module]['navigation'] : TRUE),
+              'css' => isset($topic['css']) ? $topic['css'] : (isset($ini['settings'][$module]['css']) ? $ini['settings'][$module]['css'] : NULL),
+              'readme file' => isset($topic['readme file']) ? $topic['readme file'] : FALSE,
+            ];
+          }
+        }
+      }
+      // drupal_alter('advanced_help_topic_info', $ini);
+      $this->cacheSet('advanced_help_ini_' . $language, $ini);
+    }
+    return $ini;
+  }
+
+  /**
+   * Load and render a help topic.
+   *
+   * @todo allow the theme override the help.
+   * @param $module.
+   * @param $topic.
+   * @return array.
+  */
+  public function getTopicFileInfo($module, $topic) {
+    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
+
+    $info = $this->getTopic($module, $topic);
+    if (empty($info)) {
+      return FALSE;
+    }
+
+    $path_type = (preg_match('/themes/', $info['path'])) ? 'theme' : 'module';
+    // Search paths:
+    $paths = [
+//      // Allow theme override.
+//      path_to_theme() . '/help',
+      // Translations.
+      drupal_get_path($path_type, $module) . "/translations/help/$language",
+      // In same directory as .inc file.
+      $info['path'],
+    ];
+
+    foreach ($paths as $path) {
+      if (file_exists("$path/$info[file]")) {
+        return ['path' => $path, 'file' => $info['file']];
+      }
+    }
+
+    return FALSE;
+  }
+
+  public function getTopicFileName($module, $topic) {
+    $info = $this->getTopicFileInfo($module, $topic);
+    if ($info) {
+      return "./{$info['path']}/{$info['file']}";
+    }
+  }
+
+}
diff --git a/web/modules/contrib/advanced_help/src/Controller/AdvancedHelpController.php b/web/modules/contrib/advanced_help/src/Controller/AdvancedHelpController.php
new file mode 100644 (file)
index 0000000..8e06706
--- /dev/null
@@ -0,0 +1,391 @@
+<?php
+
+namespace Drupal\advanced_help\Controller;
+
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\Xss;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
+use Drupal\Core\Url;
+use Michelf\MarkdownExtra;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Class AdvancedHelpController.
+ *
+ * @package Drupal\advanced_help\Controller\AdvancedHelpController.
+ */
+class AdvancedHelpController extends ControllerBase {
+
+  /**
+   * The advanced help plugin manager.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  private $advanced_help;
+
+
+  public function __construct(PluginManagerInterface $advanced_help) {
+    $this->advanced_help = $advanced_help;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.advanced_help')
+    );
+  }
+
+  /**
+   * Content.
+   *
+   * @todo Implement search integration.
+   * @return array
+   *   Returns module index.
+   */
+  public function main() {
+    $topics = $this->advanced_help->getTopics();
+    $settings = $this->advanced_help->getSettings();
+
+    // Print a module index.
+    $modules = $this->advanced_help->getModuleList();
+    asort($modules);
+
+    $items = [];
+    foreach ($modules as $module => $module_name) {
+      if (!empty($topics[$module]) && empty($settings[$module]['hide'])) {
+        if (isset($settings[$module]['index name'])) {
+          $name = $settings[$module]['index name'];
+        }
+        elseif (isset($settings[$module]['name'])) {
+          $name = $settings[$module]['name'];
+        }
+        else {
+          $name = $this->t($module_name);
+        }
+        $items[] = $this->l($name, new Url('advanced_help.module_index', ['module' => $module]));
+      }
+    }
+
+    return [
+      'help_modules' => [
+        '#theme' => 'item_list',
+        '#items' => $items,
+        '#title' => $this->t('Module help index'),
+      ]
+    ];
+  }
+
+  /**
+   * Build a hierarchy for a single module's topics.
+   *
+   * @param $topics array.
+   * @return array.
+   */
+  private function getTopicHierarchy($topics) {
+    foreach ($topics as $module => $module_topics) {
+      foreach ($module_topics as $topic => $info) {
+        $parent_module = $module;
+        // We have a blank topic that we don't want parented to itself.
+        if (!$topic) {
+          continue;
+        }
+
+        if (empty($info['parent'])) {
+          $parent = '';
+        }
+        elseif (strpos($info['parent'], '%')) {
+          list($parent_module, $parent) = explode('%', $info['parent']);
+          if (empty($topics[$parent_module][$parent])) {
+            // If it doesn't exist, top level.
+            $parent = '';
+          }
+        }
+        else {
+          $parent = $info['parent'];
+          if (empty($module_topics[$parent])) {
+            // If it doesn't exist, top level.
+            $parent = '';
+          }
+        }
+
+        if (!isset($topics[$parent_module][$parent]['children'])) {
+          $topics[$parent_module][$parent]['children'] = [];
+        }
+        $topics[$parent_module][$parent]['children'][] = [$module, $topic];
+        $topics[$module][$topic]['_parent'] = [$parent_module, $parent];
+      }
+    }
+    return $topics;
+  }
+
+  /**
+   * Helper function to sort topics.
+   * @param string $id_a
+   * @param string $id_b
+   * @return mixed
+   */
+  private function helpUasort($id_a, $id_b) {
+    $topics = $this->advanced_help->getTopics();
+    list($module_a, $topic_a) = $id_a;
+    $a = $topics[$module_a][$topic_a];
+    list($module_b, $topic_b) = $id_b;
+    $b = $topics[$module_b][$topic_b];
+
+    $a_weight = isset($a['weight']) ? $a['weight'] : 0;
+    $b_weight = isset($b['weight']) ? $b['weight'] : 0;
+    if ($a_weight != $b_weight) {
+      return ($a_weight < $b_weight) ? -1 : 1;
+    }
+
+    if ($a['title'] != $b['title']) {
+      return ($a['title'] < $b['title']) ? -1 : 1;
+    }
+    return 0;
+  }
+
+  /**
+   * Build a tree of advanced help topics.
+   *
+   * @param array $topics
+   *   Topics.
+   * @param array $topic_ids
+   *   Topic Ids.
+   * @param int $max_depth
+   *   Maximum depth for subtopics.
+   * @param int $depth
+   *   Default depth for subtopics.
+   *
+   * @return array
+   *   Returns list of topics/subtopics.
+   */
+  private function getTree($topics, $topic_ids, $max_depth = -1, $depth = 0) {
+    uasort($topic_ids, [$this, 'helpUasort']);
+    $items = [];
+    foreach ($topic_ids as $info) {
+      list($module, $topic) = $info;
+      $item = $this->l($topics[$module][$topic]['title'], new Url('advanced_help.help', ['module' => $module, 'topic' => $topic]));
+      if (!empty($topics[$module][$topic]['children']) && ($max_depth == -1 || $depth < $max_depth)) {
+        $link = [
+          '#theme' => 'item_list',
+          '#items' => advanced_help_get_tree($topics, $topics[$module][$topic]['children'], $max_depth, $depth + 1),
+        ];
+        $item .= \Drupal::service('renderer')->render($link, FALSE);
+      }
+      $items[] = $item;
+    }
+
+    return $items;
+  }
+
+
+  public function moduleIndex($module) {
+    $topics = $this->advanced_help->getTopics();
+
+    if (empty($topics[$module])) {
+      throw new NotFoundHttpException();
+    }
+
+    $topics = $this->getTopicHierarchy($topics);
+    $items = $this->getTree($topics, $topics[$module]['']['children']);
+
+    return [
+      'index' => [
+        '#theme' => 'item_list',
+        '#items' => $items,
+      ]
+    ];
+  }
+
+  /**
+   * Set the name of the module in the index page.
+   *
+   * @param string $module Module name
+   * @return string
+   */
+  public function moduleIndexTitle($module) {
+    return $this->advanced_help->getModuleName($module) . ' help index';
+  }
+
+  public function topicPage(Request $request, $module, $topic) {
+    $is_modal = ($request->query->get(MainContentViewSubscriber::WRAPPER_FORMAT) === 'drupal_modal');
+    $info = $this->advanced_help->getTopic($module, $topic);
+    if (!$info) {
+      throw new NotFoundHttpException();
+    }
+
+    $parent = $info;
+    $pmodule = $module;
+
+    // Loop checker.
+    $checked = [];
+    while (!empty($parent['parent'])) {
+      if (strpos($parent['parent'], '%')) {
+        list($pmodule, $ptopic) = explode('%', $parent['parent']);
+      }
+      else {
+        $ptopic = $parent['parent'];
+      }
+
+      if (!empty($checked[$pmodule][$ptopic])) {
+        break;
+      }
+
+      $checked[$pmodule][$ptopic] = TRUE;
+
+      $parent = $this->advanced_help->getTopic($pmodule, $ptopic);
+      if (!$parent) {
+        break;
+      }
+
+    }
+
+    $build = $this->viewTopic($module, $topic, $is_modal);
+    if (empty($build['#markup'])) {
+      $build['#markup'] = $this->t('Missing help topic.');
+    }
+    $build['#attached']['library'][] = 'advanced_help/help';
+    return $build;
+  }
+
+    /**
+   * Load and render a help topic.
+   *
+   * @param string $module
+   *   Name of the module.
+   * @param string $topic
+   *   Name of the topic.
+   * @todo port the drupal_alter functionality.
+   *
+   * @return string
+   *   Returns formatted topic.
+   */
+  public function viewTopic($module, $topic, $is_modal = false) {
+    $file_info = $this->advanced_help->getTopicFileInfo($module, $topic);
+    if ($file_info) {
+      $info = $this->advanced_help->getTopic($module, $topic);
+      $file = "{$file_info['path']}/{$file_info['file']}";
+      $build = [
+        '#type' => 'markup',
+      ];
+
+      if (!empty($info['css'])) {
+        $build['#attached']['library'][] = $info['module'] . '/' . $info['css'];
+      }
+
+      $build['#markup'] = file_get_contents($file);
+      if (isset($info['readme file']) && $info['readme file']) {
+        $ext = pathinfo($file, PATHINFO_EXTENSION);
+        if ('md' == $ext) {
+          $build['#markup'] = '<div class="advanced-help-topic">' . Xss::filterAdmin(MarkdownExtra::defaultTransform($build['#markup'])) . '</div>';
+        }
+        return $build;
+      }
+
+      // Change 'topic:' to the URL for another help topic.
+      preg_match('/&topic:([^"]+)&/', $build['#markup'], $matches);
+      if (isset($matches[1]) && preg_match('/[\w\-]\/[\w\-]+/', $matches[1])) {
+        list($umodule, $utopic) = explode('/', $matches[1]);
+        $path = new Url('advanced_help.help', ['module' => $umodule, 'topic' => $utopic]);
+        $build['#markup'] = preg_replace('/&topic:([^"]+)&/', $path->toString(), $build['#markup']);
+      }
+
+      global $base_path;
+
+      // Change 'path:' to the URL to the base help directory.
+      $build['#markup'] = str_replace('&path&', $base_path . $info['path'] . '/', $build['#markup']);
+
+      // Change 'trans_path:' to the URL to the actual help directory.
+      $build['#markup'] = str_replace('&trans_path&', $base_path . $file_info['path'] . '/', $build['#markup']);
+
+      // Change 'base_url:' to the URL to the site.
+      $build['#markup'] = preg_replace('/&base_url&([^"]+)"/', $base_path . '$1' . '"', $build['#markup']);
+
+      // Run the line break filter if requested.
+      if (!empty($info['line break'])) {
+        // Remove the header since it adds an extra <br /> to the filter.
+        $build['#markup'] = preg_replace('/^<!--[^\n]*-->\n/', '', $build['#markup']);
+
+        $build['#markup'] = _filter_autop($build['#markup']);
+      }
+
+      if (!empty($info['navigation']) && !$is_modal) {
+        $topics = $this->advanced_help->getTopics();
+        $topics = $this->getTopicHierarchy($topics);
+        if (!empty($topics[$module][$topic]['children'])) {
+          $items = $this->getTree($topics, $topics[$module][$topic]['children']);
+          $links = [
+            '#theme' => 'item_list',
+            '#items' => $items
+          ];
+          $build['#markup'] .= \Drupal::service('renderer')->render($links, FALSE);
+        }
+
+        list($parent_module, $parent_topic) = $topics[$module][$topic]['_parent'];
+        if ($parent_topic) {
+          $parent = $topics[$module][$topic]['_parent'];
+          $up = new Url('advanced_help.help', ['module' => $parent[0], 'topic' => $parent[1]]);
+        }
+        else {
+          $up = new Url('advanced_help.module_index', ['module' => $module]);
+        }
+
+        $siblings = $topics[$parent_module][$parent_topic]['children'];
+        uasort($siblings, [$this, 'helpUasort']);
+        $prev = $next = NULL;
+        $found = FALSE;
+        foreach ($siblings as $sibling) {
+          list($sibling_module, $sibling_topic) = $sibling;
+          if ($found) {
+            $next = $sibling;
+            break;
+          }
+          if ($sibling_module == $module && $sibling_topic == $topic) {
+            $found = TRUE;
+            continue;
+          }
+          $prev = $sibling;
+        }
+
+        if ($prev || $up || $next) {
+          $navigation = '<div class="help-navigation clear-block">';
+
+          if ($prev) {
+            $navigation .= $this->l('«« ' . $topics[$prev[0]][$prev[1]]['title'], new Url('advanced_help.help', ['module' => $prev[0], 'topic' => $prev[1]], ['attributes' => ['class' => 'help-left']]));
+          }
+          if ($up) {
+            $navigation .= $this->l($this->t('Up'), $up->setOption('attributes', ['class' => ($prev) ? 'help-up' : 'help-up-noleft']));
+          }
+          if ($next) {
+            $navigation .= $this->l($topics[$next[0]][$next[1]]['title'] . ' »»', new Url('advanced_help.help', ['module' => $next[0], 'topic' => $next[1]], ['attributes' => ['class' => 'help-right']]));
+          }
+
+          $navigation .= '</div>';
+          $build['#markup'] .= $navigation;
+        }
+      }
+      $build['#markup'] = '<div class="advanced-help-topic">' . $build['#markup'] . '</div>';
+//      drupal_alter('advanced_help_topic', $output, $popup);
+      return $build;
+    }
+  }
+
+  /**
+   * Set the title of the topic.
+   * @param $module
+   * @param $topic
+   * @return string
+   */
+  public function topicPageTitle($module, $topic) {
+    $info = $this->advanced_help->getTopic($module, $topic);
+    if (!$info) {
+      throw new NotFoundHttpException();
+    }
+    return $info['title'];
+  }
+}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/src/HelpInterface.php b/web/modules/contrib/advanced_help/src/HelpInterface.php
new file mode 100644 (file)
index 0000000..1168749
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+
+namespace Drupal\advanced_help;
+
+use Drupal\Component\Plugin\PluginInspectionInterface;
+
+/**
+ * Defines an interface for ice cream flavor plugins.
+ */
+interface HelpInterface extends PluginInspectionInterface {
+}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/src/Plugin/Derivative/DynamicLocalTasks.php b/web/modules/contrib/advanced_help/src/Plugin/Derivative/DynamicLocalTasks.php
new file mode 100644 (file)
index 0000000..b4eea41
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\advanced_help\Plugin\Derivative;
+
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+
+/**
+ * Defines dynamic local tasks.
+ */
+class DynamicLocalTasks extends DeriverBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) {
+
+    if (\Drupal::moduleHandler()->moduleExists('help')) {
+      $this->derivatives['advanced_help.help'] = $base_plugin_definition;
+      $this->derivatives['advanced_help.help']['title'] = "Help";
+      $this->derivatives['advanced_help.help']['route_name'] = 'help.main';
+      $this->derivatives['advanced_help.help']['base_route'] = 'help.main';
+
+      $this->derivatives['help.main'] = $base_plugin_definition;
+      $this->derivatives['help.main']['title'] = "Advanced Help";
+      $this->derivatives['help.main']['route_name'] = 'advanced_help.main';
+      $this->derivatives['help.main']['base_route'] = 'help.main';
+
+      return $this->derivatives;
+    }
+  }
+}
+?>
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/src/Plugin/Search/AdvancedHelpSearch.php b/web/modules/contrib/advanced_help/src/Plugin/Search/AdvancedHelpSearch.php
new file mode 100644 (file)
index 0000000..3618df0
--- /dev/null
@@ -0,0 +1,267 @@
+<?php
+
+namespace Drupal\advanced_help\Plugin\Search;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\Access\AccessibleInterface;
+use Drupal\search\Plugin\SearchPluginBase;
+use Drupal\advanced_help\AdvancedHelpManager;
+use Drupal\search\Plugin\SearchIndexingInterface;
+use Drupal\Core\Config\Config;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Executes a keyword search for Advanced Help against the {advanced_help} topic pages.
+ *
+ * @SearchPlugin(
+ *   id = "advanced_help_search",
+ *   title = @Translation("Advanced Help")
+ * )
+ */
+class AdvancedHelpSearch extends SearchPluginBase implements AccessibleInterface, SearchIndexingInterface {
+
+  /**
+   * The database connection.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $database;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * Advanced Help Manager.
+   * @var \Drupal\advanced_help\AdvancedHelpManager
+   */
+  protected $advancedHelp;
+
+  /**
+   * A config object for 'search.settings'.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $searchSettings;
+
+
+  /**
+   * {@inheritdoc}
+   */
+  static public function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $container->get('database'),
+      $container->get('plugin.manager.advanced_help'),
+      $container->get('current_user'),
+      $container->get('config.factory')->get('search.settings'),
+      $configuration,
+      $plugin_id,
+      $plugin_definition
+    );
+  }
+
+  /**
+   * Creates a UserSearch object.
+   *
+   * @param Connection $database
+   *   The database connection.
+   * @param \Drupal\advanced_help\AdvancedHelpManager $advanced_help
+   *   The advanced Help manager.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user.
+   * @param array $configuration
+   * @param \Drupal\Core\Config\Config $search_settings
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   */
+  public function __construct(Connection $database, AdvancedHelpManager $advanced_help, AccountInterface $current_user, Config $search_settings, array $configuration, $plugin_id, $plugin_definition) {
+    $this->database = $database;
+    $this->advancedHelp = $advanced_help;
+    $this->currentUser = $current_user;
+    $this->searchSettings = $search_settings;
+
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->addCacheTags(['user_list']);
+  }
+
+  public function access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE) {
+    $result = AccessResult::allowedIf(!empty($account) && $account->hasPermission('access user profiles'))->cachePerPermissions();
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
+  /**
+   * Gets search id for each topic.
+   *
+   * Get or create an sid (search id) that correlates to each topic for
+   * the search system.
+   * @param array $topics
+   * @return array
+   */
+  private function getSids($topics) {
+    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
+    $result = $this->database->select('advanced_help_index', 'ahi')
+      ->fields('ahi', ['sid', 'module', 'topic', 'langcode'])
+      ->condition('langcode', $language)
+      ->execute();
+    foreach ($result as $sid) {
+      if (empty($topics[$sid->module][$sid->topic])) {
+        $this->database->query("DELETE FROM {advanced_help_index} WHERE sid = :sid", [':sid' => $sid->sid]);
+      }
+      else {
+        $topics[$sid->module][$sid->topic]['sid'] = $sid->sid;
+      }
+    }
+    return $topics;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute() {
+    if ($this->isSearchExecutable()) {
+      $keys = $this->keywords;
+
+      // Build matching conditions.
+      $query = $this->database
+        ->select('search_index', 'i', ['target' => 'replica'])
+        ->extend('Drupal\search\SearchQuery')
+        ->extend('Drupal\Core\Database\Query\PagerSelectExtender');
+      $query->join('advanced_help_index', 'ahi', 'ahi.sid = i.sid');
+      $query->join('search_dataset', 'sd', "ahi.sid = sd.sid AND sd.type = '{$this->pluginId}'");
+      $query->searchExpression($keys, $this->getPluginId());
+
+      $find = $query
+        ->fields('i', ['langcode'])
+        ->fields('ahi', ['module', 'topic'])
+        ->fields('sd', ['data'])
+        ->groupBy('i.langcode, ahi.module, ahi.topic, sd.data')
+        ->limit(10)
+        ->execute();
+
+      $results = [];
+      foreach ($find as $key => $item) {
+        $result = [
+          'link' => '/help/ah/' . $item->module . '/' . $item->topic,
+          'title' => $item->topic,
+          'score' => $item->calculated_score,
+          'snippet' => search_excerpt($keys, $item->data, $item->langcode),
+          'langcode' => $item->langcode,
+        ];
+        $results[] = $result;
+      }
+
+      return $results;
+    }
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function updateIndex() {
+    // Interpret the cron limit setting as the maximum number of nodes to index
+    // per cron run.
+    $limit = (int)$this->searchSettings->get('index.cron_limit');
+    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
+    $topics = $this->getSids($this->advancedHelp->getTopics());
+
+    // If we got interrupted by limit, this will contain the last module
+    // and topic we looked at.
+    $last = \Drupal::state()->get($this->getPluginId() . '.last_cron', ['time' => 0]);
+    $count = 0;
+    foreach ($topics as $module => $module_topics) {
+      // Fast forward if necessary.
+      if (!empty($last['module']) && $last['module'] != $module) {
+        continue;
+      }
+
+      foreach ($module_topics as $topic => $info) {
+        // Fast forward if necessary.
+        if (!empty($last['topic']) && $last['topic'] != $topic) {
+          continue;
+        }
+
+        //If we've been looking to catch up, and we have, reset so we
+        // stop fast forwarding.
+        if (!empty($last['module'])) {
+          unset($last['topic']);
+          unset($last['module']);
+        }
+
+        $file = $this->advancedHelp->getTopicFileName($module, $topic);
+        if ($file && (empty($info['sid']) || filemtime($file) > $last['time'])) {
+          if (empty($info['sid'])) {
+            $info['sid'] = $this->database->insert('advanced_help_index')
+              ->fields([
+                'module' => $module,
+                'topic' => $topic,
+                'langcode' => $language
+              ])
+              ->execute();
+          }
+        }
+
+        // Update index, using search index "type" equal to the plugin ID.
+        search_index($this->getPluginId(), $info['sid'], $language, file_get_contents($file));
+        $count++;
+        if ($count >= $limit) {
+          $last['module'] = $module;
+          $last['topic'] = $topic;
+          \Drupal::state()->set($this->getPluginId() . '.last_cron', $last);
+          return;
+        }
+      }
+    }
+    \Drupal::state()->set($this->getPluginId() . '.last_cron', ['time' => time()]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function indexClear() {
+    search_index_clear($this->getPluginId());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function markForReindex() {
+    search_mark_for_reindex($this->getPluginId());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function indexStatus() {
+    $topics = $this->advancedHelp->getTopics();
+    $total = 0;
+    foreach ($topics as $module => $module_topics) {
+      foreach ($module_topics as $topic => $info) {
+        $file = $this->advancedHelp->getTopicFileName($module, $topic);
+        if ($file) {
+          $total++;
+        }
+      }
+    }
+    $last_cron = \Drupal::state()->get($this->getPluginId() . '.last_cron', ['time' => 0]);
+    $indexed = 0;
+    if ($last_cron['time'] != 0) {
+      $indexed = $this->database->select('search_dataset', 'sd')
+        ->fields('sd', ['sid'])
+        ->condition('type', $this->getPluginId())
+        ->condition('reindex', 0)
+        ->countQuery()
+        ->execute()
+        ->fetchField();
+    }
+    return ['remaining' => $total - $indexed, 'total' => $total];
+  }
+}
\ No newline at end of file
diff --git a/web/modules/contrib/advanced_help/templates/advanced-help-topic.html.twig b/web/modules/contrib/advanced_help/templates/advanced-help-topic.html.twig
new file mode 100644 (file)
index 0000000..29c4d34
--- /dev/null
@@ -0,0 +1,3 @@
+{% if topic_exists %}
+    <a href="{{ path('advanced_help.help', {'module': module, 'topic' : topic}) }}" {{ attributes }} >{{ text|raw }}</a>
+{% endif %}
diff --git a/web/modules/contrib/better_formats b/web/modules/contrib/better_formats
deleted file mode 160000 (submodule)
index 9b3b5fa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 9b3b5fa792c1dfe0d1121021a230086f3599b7e4
diff --git a/web/modules/contrib/better_formats/README.txt b/web/modules/contrib/better_formats/README.txt
new file mode 100644 (file)
index 0000000..3bd2bb9
--- /dev/null
@@ -0,0 +1,32 @@
+This very basic documentation for during development.
+Better docs will be generated closer to a full release.
+
+
+The only items currently implemented in the D8 version of Better Formats are:
+
+1. Display options: When BF is enabled you will have permissions at
+   admin/people/permissions to control per role display of:
+   1. format tips
+   2. format tips link
+   3. format selection for [entity]
+
+   #3 is actually several permissions. There is one for each entity in your site.
+
+2. Simple field level default format.
+   This allows you set a field level default format using the standard "Default Value"
+   setting of a field. This is only possibly normally if you enter something in the
+   text field for the field api to save the format too. BF gives you the ability
+   to set the format WITHOUT having to set a value in the field.
+
+   1. At admin/config/content/formats/settings enable "Use field default" option.
+   2. Create a field on one of your entities with one of the following types: Text, Long Text, Long text with summary.
+   3. Save the field.
+   4. Now go back and edit the field you just saved. This is required because of
+      how the field default value option works.
+   5. You will now see a "Text format" dropdown below your field in the
+      "Default Value" area. Set the default format in the dropdown.
+   6. Save the field. Default will now be used on all new content forms for that field.
+
+3. Allowed format selection for each text field.
+
+4. Ordering of formats in Formats select box for each text field.
diff --git a/web/modules/contrib/better_formats/better_formats.info.yml b/web/modules/contrib/better_formats/better_formats.info.yml
new file mode 100644 (file)
index 0000000..02abe2e
--- /dev/null
@@ -0,0 +1,5 @@
+name: Better Formats
+type: module
+description: 'Enhances the core input format system by managing input format defaults and settings.'
+core: 8.x
+configure: better_formats.settings
diff --git a/web/modules/contrib/better_formats/better_formats.install b/web/modules/contrib/better_formats/better_formats.install
new file mode 100644 (file)
index 0000000..36bfae6
--- /dev/null
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the better_formats module.
+ */
+
+/**
+ * Implements of hook_install().
+ */
+function better_formats_install() {
+  // Increase module weight to prevent compatibility issues.
+  module_set_weight('better_formats', 100);
+}
diff --git a/web/modules/contrib/better_formats/better_formats.links.task.yml b/web/modules/contrib/better_formats/better_formats.links.task.yml
new file mode 100644 (file)
index 0000000..1219f69
--- /dev/null
@@ -0,0 +1,4 @@
+better_formats.settings_tab:
+  route_name: better_formats.settings
+  title: Settings
+  base_route: filter.admin_overview
diff --git a/web/modules/contrib/better_formats/better_formats.module b/web/modules/contrib/better_formats/better_formats.module
new file mode 100644 (file)
index 0000000..5680144
--- /dev/null
@@ -0,0 +1,429 @@
+<?php
+
+/**
+ * @file
+ * Enhances the core input format system by managing input format defaults and settings.
+ */
+
+use Drupal\Core\Config\Entity\ThirdPartySettingsInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element;
+
+/**
+ * Implements hook_element_info_alter().
+ */
+function better_formats_element_info_alter(array &$types) {
+  // Our process callback must run immediately after
+  // TextFormat::processFormat().
+  if (isset($types['text_format']) && isset($types['text_format']['#process'])) {
+    $search_value = ['Drupal\filter\Element\TextFormat', 'processFormat'];
+    $key = array_search($search_value, $types['text_format']['#process']);
+
+    if ($key !== FALSE) {
+      $key++;
+      array_splice($types['text_format']['#process'], $key, 0, 'better_formats_filter_process_format');
+    }
+    else {
+      $types['text_format']['#process'][] = 'better_formats_filter_process_format';
+    }
+  }
+}
+
+/**
+ * Process callback for form elements that have a text format selector attached.
+ *
+ * This callback runs after filter_process_format() and performs additional
+ * modifications to the form element.
+ *
+ * @see \Drupal\filter\Element\TextFormat::processFormat()
+ */
+function better_formats_filter_process_format(array &$element, FormStateInterface $form_state, array $complete_form) {
+  // Before we make any modifications to the element, record whether or not
+  // TextFormat::processFormat() has determined that (for security reasons) the
+  // user is not allowed to make any changes to this field. This will happen if
+  // the user does not have permission to use the currently-assigned text
+  // format.
+  $access_denied_for_security = isset($element['format']['format']['#access']) && !$element['format']['format']['#access'];
+
+  $form_object = $form_state->getFormObject();
+
+  if ($form_object instanceof Drupal\Core\Entity\ContentEntityForm) {
+    $entity = $form_state->getFormObject()->getEntity();
+    $entity_type = $entity->getEntityTypeId();
+    $field_name = reset($element['#parents']);
+    $field_definition = $entity->getFieldDefinition($field_name);
+
+    if ($field_definition instanceof ThirdPartySettingsInterface) {
+      $bf = $field_definition->getThirdPartySettings('better_formats');
+
+      if (Drupal::config('better_formats.settings')->get('per_field_core')) {
+        $field_defaults = $field_definition->getDefaultValue($entity);
+        $default_value = array_shift($field_defaults);
+        better_formats_set_default_format($element, $default_value['format']);
+      }
+    }
+  }
+  elseif ($form_object instanceof Drupal\field_ui\Form\FieldConfigEditForm) {
+    $entity = $form_state->getFormObject()->getEntity();
+    $entity_type = $entity->getTargetEntityTypeId();
+    $bf = $entity->getThirdPartySettings('better_formats');
+  }
+  else {
+    return $element;
+  }
+
+  // Now hide several parts of the element for cosmetic reasons (depending on
+  // the permissions of the current user).
+  $user = \Drupal::currentUser();
+  $user_is_admin = $user->hasPermission('administer filters');
+
+  // The selection should be shown unless proven otherwise.
+  $hide_selection = FALSE;
+
+  // If an entity is available then allow Better Formats permission to control
+  // visibility.
+  if ($entity_type != NULL) {
+    $hide_selection = $user->hasPermission('hide format selection for ' . $entity_type);
+  }
+
+  // Privileged users should still be able to change the format selection.
+  if ($hide_selection && !$user_is_admin) {
+    $element['format']['format']['#access'] = FALSE;
+  }
+
+  // Allow formats tips to be hidden.
+  $hide_tips = $user->hasPermission('hide format tips');
+
+  if ($hide_tips && !$user_is_admin) {
+    $element['format']['guidelines']['#access'] = FALSE;
+  }
+
+  // Allow format tips link to be hidden.
+  $hide_tips_link = $user->hasPermission('hide more format tips link');
+
+  if ($hide_tips_link && !$user_is_admin) {
+    $element['format']['help']['#access'] = FALSE;
+  }
+
+  // If the element represents a field attached to an entity, we may need to
+  // adjust the allowed text format options. However, we don't want to touch
+  // this if TextFormat::processFormat() has determined that (for security
+  // reasons) the user is not allowed to make any changes; in that case, Drupal
+  // core will hide the format selector and force the field to be saved with its
+  // current values, and we should not do anything to alter that process.
+  if ($entity_type != NULL && !$access_denied_for_security) {
+    $eid = $entity->id();
+
+    // Need to only do this on create forms.
+    if (empty($eid) && isset($bf) && !empty($bf['default_order_toggle']) && !empty($bf['default_order_wrapper']['formats'])) {
+      $order = $bf['default_order_wrapper']['formats'];
+      uasort($order, 'better_formats_text_format_sort');
+
+      $options = [];
+
+      foreach ($order as $id => $weight) {
+        if (isset($element['format']['format']['#options'][$id])) {
+          $options[$id] = $element['format']['format']['#options'][$id];
+        }
+      }
+
+      $element['format']['format']['#options'] = $options;
+      $options_keys = array_keys($options);
+
+      if (!Drupal::config('better_formats.settings')->get('per_field_core')) {
+        better_formats_set_default_format($element, array_shift($options_keys));
+      }
+    }
+    if (isset($bf) && !empty($bf['allowed_formats_toggle']) && !empty($bf['allowed_formats'])) {
+      // Filter the list of available formats to those allowed on this field.
+      $allowed_fields = array_filter($bf['allowed_formats']);
+      $options = &$element['format']['format']['#options'];
+      $options = array_intersect_key($options, $allowed_fields);
+
+      // If there is only one allowed format, deny access to the text format
+      // selector for cosmetic reasons, just like filter_process_format() does.
+      if (count($options) == 1) {
+        $element['format']['format']['#access'] = FALSE;
+        $hide_selection = TRUE;
+      }
+
+      // If there are no allowed formats, we need to deny access to the entire
+      // field, since it doesn't make sense to add or edit content that does
+      // not have a text format.
+      if (empty($options)) {
+        $element['#access'] = FALSE;
+      }
+      // Otherwise, if the current default format is no longer one of the
+      // allowed options, a new default format must be assigned.
+      elseif (!isset($options[$element['format']['format']['#default_value']])) {
+        // If there is no text in the field, it is safe to automatically assign
+        // a new default format. We pick the first available option to be
+        // consistent with what filter_default_format() does.
+        if (!isset($element['value']['#default_value']) || $element['value']['#default_value'] === '') {
+          $formats = array_keys($options);
+          better_formats_set_default_format($element, reset($formats));
+        }
+        // Otherwise, it is unsafe to automatically assign a new default format
+        // (since this will display the content in a way that was not
+        // originally intended and might be dangerous, e.g. if the content
+        // contains an attempted XSS attack). A human must explicitly decide
+        // which new format to assign, so we force the field to be required but
+        // with no default value, similar to what filter_process_format() does.
+        // Although filter_process_format() limits this functionality to users
+        // with the 'administer filters' permission, we can allow it for any
+        // user here since we know that the user already has permission to use
+        // the current format; thus, there is no danger of exposing unformatted
+        // text (for example, raw PHP code) that they are otherwise not allowed
+        // to see.
+        else {
+          $element['format']['format']['#required'] = TRUE;
+          better_formats_set_default_format($element, NULL);
+          // Force access to the format selector (it may have been denied
+          // previously for cosmetic reasons).
+          $element['format']['#access'] = TRUE;
+          $element['format']['format']['#access'] = TRUE;
+        }
+      }
+    }
+  }
+
+  // If the user is not supposed to see the text format selector, hide all
+  // guidelines except those associated with the default format. We need to do
+  // this at the end, since the above code may have altered the default format.
+  if ($hide_selection && isset($element['format']['format']['#default_value'])) {
+    foreach (Element::children($element['format']['guidelines']) as $format) {
+      if ($format != $element['format']['format']['#default_value']) {
+        $element['format']['guidelines'][$format]['#access'] = FALSE;
+      }
+    }
+  }
+
+  // Keep the format for validation and submit processing but don't sent it to
+  // the browser if the user is not supposed to see anything inside of it.
+  if ($hide_selection && $hide_tips && $hide_tips_link) {
+    unset($element['format']['#type']);
+  }
+
+  return $element;
+}
+
+/**
+ * Determine if text field type uses text formatter.
+ *
+ * @param string $type
+ *   The field type to check.
+ *
+ * @return bool
+ *   TRUE if input field type uses text formatter, FALSE if it does not.
+ */
+function better_formats_is_text_format($type) {
+  if (in_array($type, ['text', 'text_long', 'text_with_summary'], TRUE)) {
+    return TRUE;
+  }
+  else {
+    return FALSE;
+  }
+}
+
+/**
+ * Set the default format for the element.
+ *
+ * @param array $element
+ *    The form element to set the default format on.
+ * @param string $default_value
+ *    The id for the format to set as default.
+ */
+function better_formats_set_default_format(array &$element, $default_value) {
+  $element['#format'] = $default_value;
+  $element['format']['format']['#default_value'] = $default_value;
+}
+
+/**
+ * Sort text formats by weight.
+ *
+ * @param array $a
+ *   Array containing weight value to compare.
+ * @param array $b
+ *   Array containing weight value to compare.
+ *
+ * @return bool
+ *   TRUE if the weight of $a is greater than $b, FALSE if weight of $b is
+ *   greater than $a or equal to $a.
+ */
+function better_formats_text_format_sort($a, $b) {
+  return $a['weight'] > $b['weight'];
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function better_formats_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  $entity = $form_state->getFormObject()->getEntity();
+
+  // Only alter fields with text processing and if admin has chosen.
+  $text_processing = better_formats_is_text_format($entity->getType());
+  $config = Drupal::config('better_formats.settings');
+
+  if ($text_processing && $config->get('per_field_core')) {
+    // Add a submit handler to save default values on empty fields.
+    $form['actions']['submit']['#submit'][] = 'better_formats_field_config_edit_form_submit';
+  }
+
+  // If the field is a format-using text field, allow the admin to configure
+  // which formats are allowed here.
+  if ($text_processing) {
+    // We have to set an explicit weight here so that we can put the allowed
+    // formats list after it.
+    $bf_settings = $entity->getThirdPartySettings('better_formats') != NULL ? $entity->getThirdPartySettings('better_formats') : [];
+
+    // Add in the better formats table.
+    $form['third_party_settings'] += better_formats_field_settings_form($bf_settings);
+    $form['third_party_settings']['#weight'] = -4;
+  }
+}
+
+/**
+ * Build the settings form for Field API fields.
+ *
+ * @param array $bf_form
+ *   The existing better formats settings form from the form element.
+ *
+ * @return array
+ *   The array of better formats form items.
+ */
+function better_formats_field_settings_form($bf_form = []) {
+  $formats = filter_formats();
+  // Plain Text Format should not be an option, that is a separate field type.
+  unset($formats['plain_text']);
+
+  $form = [];
+  $form['better_formats'] = [
+    '#tree' => TRUE,
+    '#type' => 'fieldset',
+    '#title' => t('Text Formats'),
+    '#weight' => 0,
+  ];
+
+  $allowed_options = [];
+
+  foreach ($formats as $format) {
+    $allowed_options[$format->id()] = $format->label();
+  }
+
+  $allowed_toggle_default = isset($bf_form['allowed_formats_toggle']) ? $bf_form['allowed_formats_toggle'] : FALSE;
+  $allowed_defaults = isset($bf_form['allowed_formats']) ? $bf_form['allowed_formats'] : [];
+
+  if (empty($allowed_defaults)) {
+    $allowed_defaults = array_keys($allowed_options);
+  }
+
+  $form['better_formats']['allowed_formats_toggle'] = [
+    '#type' => 'checkbox',
+    '#title' => t('Limit allowed text formats'),
+    '#description' => t('Check the allowed formats below. If checked available text formats can be chosen.'),
+    '#weight' => 1,
+    '#default_value' => $allowed_toggle_default,
+  ];
+  $form['better_formats']['allowed_formats'] = [
+    '#type' => 'checkboxes',
+    '#title' => t('Allowed formats'),
+    '#options' => $allowed_options,
+    '#description' => t('Select the text formats allowed for this field. Note that not all of these may appear on the form if a user does not have permission to use them. <strong>Warning:</strong> This affects existing content which may leave you unable to edit some fields. If that happens you must allow the format that field was saved in here.'),
+    '#weight' => 2,
+    '#default_value' => $allowed_defaults,
+    '#states' => [
+      'visible' => [
+        ':input[name="third_party_settings[better_formats][allowed_formats_toggle]"]' => ['checked' => TRUE],
+      ],
+    ],
+  ];
+
+  $order_toggle_default = isset($bf_form['default_order_toggle']) ? $bf_form['default_order_toggle'] : FALSE;
+
+  $form['better_formats']['default_order_toggle'] = [
+    '#type' => 'checkbox',
+    '#title' => t('Override default order'),
+    '#description' => t('Override the gloabl order that will determine the default text format a user will get <strong>only on entity creation</strong>.'),
+    '#weight' => 3,
+    '#default_value' => $order_toggle_default,
+  ];
+  $form['better_formats']['default_order_wrapper'] = [
+    '#tree' => TRUE,
+    '#type' => 'container',
+    '#weight' => 4,
+    '#states' => [
+      'visible' => [
+        ':input[name="third_party_settings[better_formats][default_order_toggle]"]' => ['checked' => TRUE],
+      ],
+    ],
+  ];
+
+  // Formats ordering table.
+  $form['better_formats']['default_order_wrapper']['formats'] = [
+    '#type' => 'table',
+    '#header' => [t('Format'), t('Weight')],
+    '#empty' => t('There are no items yet.'),
+    '#tabledrag' => [
+      [
+        'action' => 'order',
+        'relationship' => 'sibling',
+        'group' => 'format-order-weight',
+      ],
+    ],
+  ];
+
+  foreach ($formats as $id => $format) {
+    $default = isset($bf_form['default_order_wrapper']['formats'][$id]) ? $bf_form['default_order_wrapper']['formats'][$id] : NULL;
+    $weight = isset($default['weight']) ? $default['weight'] : $format->get('weight');
+
+    // TableDrag: Mark the table row as draggable.
+    $form['better_formats']['default_order_wrapper']['formats'][$id]['#attributes']['class'][] = 'draggable';
+    // TableDrag: Sort the table row according to its existing/configured weight.
+    $form['better_formats']['default_order_wrapper']['formats'][$id]['#weight'] = $weight;
+
+    // Some table columns containing raw markup.
+    $form['better_formats']['default_order_wrapper']['formats'][$id]['label'] = [
+      '#markup' => $format->label(),
+    ];
+
+    // TableDrag: Weight column element.
+    $form['better_formats']['default_order_wrapper']['formats'][$id]['weight'] = [
+      '#type' => 'weight',
+      '#title' => t('Weight for @title', ['@title' => $format->label()]),
+      '#title_display' => 'invisible',
+      '#default_value' => $weight,
+      // Classify the weight element for #tabledrag.
+      '#attributes' => ['class' => ['format-order-weight']],
+    ];
+  }
+
+  // Sort formats according to weight.
+  Element::children($form['better_formats']['default_order_wrapper']['formats'], TRUE);
+
+  return $form;
+}
+
+/**
+ * Submit handler for field instance edit form.
+ *
+ * Copied and slightly modifed from FieldConfigEditForm::submitForm().
+ *
+ * @see \Drupal\field_ui\Form\FieldConfigEditForm::submitForm()
+ */
+function better_formats_field_config_edit_form_submit(array &$form, FormStateInterface $form_state) {
+  $entity = $form_state->getFormObject()->getEntity();
+  $text_processing = better_formats_is_text_format($entity->getType());
+
+  // Only act on fields that have text processing enabled.
+  if ($text_processing) {
+    // Handle the default value.
+    $default_value = [];
+    $default_input_value = $form_state->getValue(['default_value_input', $entity->getName()]);
+
+    if ($default_input_value != NULL) {
+      $default_value = $default_input_value;
+    }
+
+    $entity->setDefaultValue($default_value)->save();
+  }
+}
diff --git a/web/modules/contrib/better_formats/better_formats.permissions.yml b/web/modules/contrib/better_formats/better_formats.permissions.yml
new file mode 100644 (file)
index 0000000..75c2dd5
--- /dev/null
@@ -0,0 +1,10 @@
+hide format tips:
+  title: 'Hide format tips'
+  description: 'Toggle display of format description help.'
+
+hide more format tips link:
+  title:  'Hide more format tips link'
+  description: 'Toggle display of the "More information about text formats" link.'
+
+permission_callbacks:
+  - \Drupal\better_formats\BetterFormatsPermissions::permissions
diff --git a/web/modules/contrib/better_formats/better_formats.routing.yml b/web/modules/contrib/better_formats/better_formats.routing.yml
new file mode 100644 (file)
index 0000000..d2a20eb
--- /dev/null
@@ -0,0 +1,7 @@
+better_formats.settings:
+  path: '/admin/config/content/formats/settings'
+  defaults:
+    _form: '\Drupal\better_formats\Form\SettingsForm'
+    _title: 'Settings'
+  requirements:
+    _permission: 'administer filters'
diff --git a/web/modules/contrib/better_formats/composer.json b/web/modules/contrib/better_formats/composer.json
new file mode 100644 (file)
index 0000000..27f828e
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "name": "drupal/better_formats",
+  "description": "Enhances the core input format system by managing input format defaults and settings.",
+  "type": "drupal-module",
+  "license": "GPL-2.0+",
+  "minimum-stability": "dev",
+  "require": { }
+}
diff --git a/web/modules/contrib/better_formats/config/install/better_formats.settings.yml b/web/modules/contrib/better_formats/config/install/better_formats.settings.yml
new file mode 100644 (file)
index 0000000..8fbd024
--- /dev/null
@@ -0,0 +1 @@
+per_field_core: FALSE
diff --git a/web/modules/contrib/better_formats/config/schema/better_formats.schema.yml b/web/modules/contrib/better_formats/config/schema/better_formats.schema.yml
new file mode 100644 (file)
index 0000000..a767614
--- /dev/null
@@ -0,0 +1,6 @@
+better_formats.settings:
+  type: config_object
+  mapping:
+    per_field_core:
+      type: boolean
+      label: 'Use field default'
diff --git a/web/modules/contrib/better_formats/src/BetterFormatsPermissions.php b/web/modules/contrib/better_formats/src/BetterFormatsPermissions.php
new file mode 100644 (file)
index 0000000..a023808
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\better_formats;
+
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides dynamic permissions of the better formats module.
+ */
+class BetterFormatsPermissions implements ContainerInjectionInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * Constructs a new BetterFormatsPermissions instance.
+   *
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(EntityManagerInterface $entity_manager) {
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static($container->get('entity.manager'));
+  }
+
+  /**
+   * Returns an array of better formats permissions.
+   *
+   * @return array
+   */
+  public function permissions() {
+    $permissions = [];
+
+    // Generate permissions for each entity type.
+    foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
+      if ($entity_type->get('field_ui_base_route')) {
+        $permissions['hide format selection for ' . $entity_type_id] = [
+          'title' => $this->t('Hide format selection for @label', ['@label' => $entity_type->getLabel()]),
+        ];
+      }
+    }
+
+    return $permissions;
+  }
+
+}
diff --git a/web/modules/contrib/better_formats/src/Form/SettingsForm.php b/web/modules/contrib/better_formats/src/Form/SettingsForm.php
new file mode 100644 (file)
index 0000000..7e28e53
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\better_formats\Form;
+
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Class SettingsForm.
+ *
+ * @package Drupal\better_formats\Form
+ */
+class SettingsForm extends ConfigFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'better_formats_settings_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEditableConfigNames() {
+    return ['better_formats.settings'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config('better_formats.settings');
+
+    $form['control'] = [
+      '#type' => 'fieldset',
+      '#title' => t('Control'),
+    ];
+
+    $form['control']['per_field_core'] = [
+      '#type'  => 'checkbox',
+      '#title' => t('Use field default'),
+      '#description' => t('Use the core field module default value to set the default format. This will force the default format even when the default field value is empty. To set a default format you must re-edit a text field after saving it with the "Filtered text" option turned on.'),
+      '#default_value' => $config->get('per_field_core'),
+    ];
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $config = $this->config('better_formats.settings');
+    $form_state->cleanValues();
+
+    foreach ($form_state->getValues() as $key => $value) {
+      $config->set($key, $value);
+    }
+    $config->save();
+
+    parent::submitForm($form, $form_state);
+  }
+
+}
diff --git a/web/modules/contrib/better_formats/src/Tests/BetterFormatsFilterFormatAccessTest.php b/web/modules/contrib/better_formats/src/Tests/BetterFormatsFilterFormatAccessTest.php
new file mode 100644 (file)
index 0000000..8504515
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\better_formats\Tests;
+
+use Drupal\filter\Tests\FilterFormatAccessTest;
+
+/**
+ * Copy of FilterFormatAccessTest.
+ *
+ * @group better_formats
+ */
+class BetterFormatsFilterFormatAccessTest extends FilterFormatAccessTest {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['better_formats'];
+
+  /**
+   * {@inheritdoc}
+   */
+  function setUp() {
+    parent::setUp();
+  }
+}
diff --git a/web/modules/contrib/better_formats/src/Tests/BetterFormatsTermTest.php b/web/modules/contrib/better_formats/src/Tests/BetterFormatsTermTest.php
new file mode 100644 (file)
index 0000000..c57ec0f
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\better_formats\Tests;
+
+use Drupal\taxonomy\Tests\TermTest;
+
+/**
+ * Copy of TermTest.
+ *
+ * @group better_formats
+ */
+class BetterFormatsTermTest extends TermTest {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['better_formats'];
+
+  /**
+   * {@inheritdoc}
+   */
+  function setUp() {
+    parent::setUp();
+  }
+}
diff --git a/web/modules/contrib/ckeditor_widgets b/web/modules/contrib/ckeditor_widgets
deleted file mode 160000 (submodule)
index 2d46263..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2d462637f8804b6d0b530604d0376e97a23a3b7f
diff --git a/web/modules/contrib/ckeditor_widgets/CHANGELOG.txt b/web/modules/contrib/ckeditor_widgets/CHANGELOG.txt
new file mode 100644 (file)
index 0000000..7dfc863
--- /dev/null
@@ -0,0 +1,7 @@
+2015-06-25: jlyon: Improved method that angular app is bound
+2015-06-25: jlyon: Moved angular app into main module code (rather than requiring a download to sites/all/libraries)
+2015-06-25: jlyon: Added CKEditor config steps to README
+2015-06-25: jlyon: Fixed issue where placeholder widget would flash at 2x height on page load
+2015-07-23: jlyon: Fixed issue with file status not getting changed to 1 after file upload, causing files to get deleted after 24 hrs
+2015-07-23: jlyon: Changed icons from glyphicons to fontawesome @todo: some way to choose icon set?
+2015-08-27: jlyon: Make ckeditor image browser work in content types other than Page
\ No newline at end of file
diff --git a/web/modules/contrib/ckeditor_widgets/README.md b/web/modules/contrib/ckeditor_widgets/README.md
new file mode 100644 (file)
index 0000000..060353f
--- /dev/null
@@ -0,0 +1,34 @@
+Angular Media
+=============
+
+Rethinking the media dialog interface with the help of Angular.
+
+###Highlights
+* A better user interface for selecting and editing files in Drupal
+* Easy multi-upload built-in to every selection method
+* Search for and easily add creative commons photos with proper attribution
+
+###Installation
+* Install the module dependencies (file_entity, media, views, features, views_data_export_json).
+* Download the Angular Media App from Github and copy it to sites/all/libraries (or similar): https://github.com/albatrossdigital/angular-media-app
+* Install the module in Drupal
+* Add a new File field and select the Angular Media Browser widget
+
+###CKEditor configuration steps
+In order to get the CKEditor integration to work, follow these steps:
+1. In CKEditor profile, under Editor Apperance, check Plugin for Angular Media Browser and add the insert image button.
+2. In CKEditor profile, under File Browser Settings, change File browser type to "CKFinder".
+3. In global CKEditor settings(`/admin/config/content/ckeditor/editg`), in Local path to CKFinder, enter any valid url (we use "modules" in Helm).
+4. On permissions (`admin/people/permissions`), give the appropriate role access to CKFinder access.
+
+###Status
+This module is currently in a MVP state and should not be used on production websites.  It is under active development and many features and improvements will be added in the coming weeks. If you are interested in helping, please post a note in the issue queue.
+
+###Roadmap
+* Make the Angular Media field work when there are multiple instances on one edit page
+* Remove the media dependency
+* Make the Angular Media field work when the form is loaded via the Drupal AJAX api (ctools modals)
+
+
+###Who?
+Conception and development to this point has been done by <a href="http://albatrossdigital.com">Albatross Digital</a>. We believe that every website should look beautiful, and having a user-friendly media experience is paramount to that vision.
\ No newline at end of file
diff --git a/web/modules/contrib/ckeditor_widgets/ckeditor_widgets.info.yml b/web/modules/contrib/ckeditor_widgets/ckeditor_widgets.info.yml
new file mode 100644 (file)
index 0000000..2edd26c
--- /dev/null
@@ -0,0 +1,10 @@
+name: CKEditor Widgets
+type: module
+description: Adds widgets and an Insert Template menu to CKEditor
+core: 8.x
+package: CKEditor
+version: 1.0
+dependencies:
+  - ckeditor
+  - editor
+
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/contents.css b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/contents.css
new file mode 100644 (file)
index 0000000..eeba9d3
--- /dev/null
@@ -0,0 +1,126 @@
+/* Bootstrap styles */
+.row {
+  margin-left: -15px;
+  margin-right: -15px;
+}
+.row:before, .row:after {
+  content: " ";
+  display: table;
+}
+.row:after {
+  clear: both;
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  float: left;
+  padding: 15px;
+  box-sizing: border-box;
+  -moz-box-sizing: border-box;
+}
+.col-md-6 {
+  width: 50%;
+}
+.col-md-3 {
+  width: 25%;
+}
+.col-md-9 {
+  width: 75%;
+}
+.col-md-4 {
+  width: 33.3%;
+}
+
+/* Custom styles */
+.col-md-6 img,
+.col-md-3 img,
+.col-md-4 img,
+.col-md-9 img {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+.two-col,
+.two-col-left,
+.two-col-right,
+.three-col,
+.accordion {
+       padding: 8px;
+       margin: 10px auto;
+       background: #eee;
+       border-radius: 8px;
+       border: 1px solid #ddd;
+       box-shadow: 0 1px 1px #fff inset, 0 -1px 0px #ccc inset;
+}
+.two-col .col-md-6,
+.two-col-left .col-md-3,
+.two-col-left .col-md-9,
+.two-col-right .col-md-3,
+.two-col-right .col-md-9,
+.three-col .col-md-4,
+.accordion dd .content,
+.accordion dd.accordion-navigation>a {
+       box-shadow: 0 1px 1px #ddd inset;
+       border: 1px solid #cccccc;
+       border-radius: 5px;
+       background: #fff;
+       min-height: 5em;
+}
+.two-col .col-md-6,
+.two-col-left .col-md-3,
+.two-col-left .col-md-9,
+.two-col-right .col-md-3,
+.two-col-right .col-md-9 {
+       margin: -3px;
+}
+.two-col-right .col-sidebar,
+.two-col-left .col-sidebar {
+       padding: 0;
+}
+.two-col .col-2 {
+  margin-left: 9px;
+}
+.three-col .col-1 {
+       margin-left: -3px;
+}
+.three-col .col-2 {
+       margin-left: 3px;
+}
+.three-col .col-3 {
+       margin-left: 3px;
+  margin-right: -3px;
+}
+.two-col-left .col-md-9{
+  margin-left: 8px;
+}
+.two-col-right .col-md-9{
+  margin-right: 8px;
+}
+
+.accordion {
+       padding-top: 2px;
+}
+.accordion:before {
+       content: 'Accordion';
+       text-transform: uppercase;
+       padding-bottom: 4px;
+       font-size: 10px;
+       color: #888;
+}
+.accordion dd.accordion-navigation > .content,
+.accordion dd > .content {
+       display: block !important;
+}
+.accordion dd.accordion-navigation {
+       margin-bottom: .7em !important;
+}
+.accordion dd.accordion-navigation>a {
+       padding: 5px;
+       background: #ddd;
+       min-height: 0;
+       margin-bottom: 1px;
+}
+.accordion dd.accordion-navigation>a p {
+       margin: 0;
+}
\ No newline at end of file
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetbootstrapAlert.js b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetbootstrapAlert.js
new file mode 100644 (file)
index 0000000..223d1c3
--- /dev/null
@@ -0,0 +1,67 @@
+CKEDITOR.dialog.add( 'widgetfoundationAlert', function( editor ) {
+    var clientHeight = document.documentElement.clientHeight,
+        alertTypes = CKEDITOR.config.widgetfoundationAlert_alertTypes,
+        alertTypesSelect = [],
+        alertName;
+
+    for ( alertName in alertTypes ) {
+        alertTypesSelect.push( [ alertTypes[ alertName ], alertName ] );
+    }
+
+
+    // Size adjustments.
+    /*var size = CKEDITOR.document.getWindow().getViewPaneSize(),
+        // Make it maximum 800px wide, but still fully visible in the viewport.
+        width = Math.min( size.width - 70, 800 ),
+        // Make it use 2/3 of the viewport height.
+        height = size.height / 1.5;
+        // Low resolution settings.
+        if ( clientHeight < 650 )
+            height = clientHeight - 220;*/
+
+    return {
+        title: 'Edit Alert Type',
+        minWidth: 200,
+        minHeight: 100,
+        contents: [
+            {
+                id: 'info',
+                elements: [
+                    {
+                        id: 'type',
+                        type: 'select',
+                        label: 'Alert Type',
+                        items: alertTypesSelect,
+                        required: true,
+                        validate: CKEDITOR.dialog.validate.notEmpty('Alert type required'),
+                        setup: function( widget ) {
+                            this.setValue( widget.data.type != undefined ? widget.data.type : 'alert');
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'type', this.getValue() );
+                        }
+                    }/*,
+                    {
+                        id: 'alertText',
+                        type: 'textarea',
+                        label: 'Alert Content',
+                        setup: function( widget ) {
+                            this.setValue( widget.data.alertText );
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'alertText', this.getValue() );
+                        },
+                        required: true,
+                        validate: CKEDITOR.dialog.validate.notEmpty('Content required'),
+                        inputStyle: 'cursor:auto;' +
+                            'width:' + width + 'px;' +
+                            'height:' + height + 'px;' +
+                            'tab-size:4;' +
+                            'text-align:left;',
+                            'class': 'cke_source'
+                    }*/
+                ]
+            }
+        ]
+    };
+} );
\ No newline at end of file
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetfoundationAccordion.js b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/dialogs/widgetfoundationAccordion.js
new file mode 100644 (file)
index 0000000..4ad7e2e
--- /dev/null
@@ -0,0 +1,61 @@
+CKEDITOR.dialog.add( 'widgetfoundationAccordion', function( editor ) {
+    return {
+        title: 'Edit Accordion Box',
+        minWidth: 200,
+        minHeight: 100,
+        contents: [
+            {
+                id: 'info',
+                elements: [
+                    {
+                        id: 'name',
+                        type: 'text',
+                        label: 'Accordion machine name',
+                        width: '200px',
+                        setup: function( widget ) {
+                            this.setValue( widget.data.name != undefined ? widget.data.name : 'accordion');
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'name', this.getValue() );
+                        }
+                    },
+                    {
+                        id: 'count',
+                        type: 'text',
+                        label: 'Number of panels',
+                        width: '50px',
+                        setup: function( widget ) {
+                            this.setValue( widget.data.count != undefined ? widget.data.count : 3);
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'count', this.getValue() );
+                        }
+                    },
+                    {
+                        id: 'activePanel',
+                        type: 'text',
+                        width: '50px',
+                        label: 'Active panel (leave blank for accordion to be initially collapsed, or enter the number of the panel you would like open, ex: 1)',
+                        setup: function( widget ) {
+                            this.setValue( widget.data.activePanel);
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'activePanel', this.getValue() );
+                        }
+                    },
+                    {
+                        id: 'multiExpand',
+                        type: 'checkbox',
+                        label: 'Allow multiple accordion panels to be expanded at the same time',
+                        setup: function( widget ) {
+                            this.setValue( widget.data.multiExpand );
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'multiExpand', this.getValue() );
+                        }
+                    }
+                ]
+            }
+        ]
+    };
+} );
\ No newline at end of file
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAccordion.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAccordion.png
new file mode 100644 (file)
index 0000000..6ae2f5b
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAccordion.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAlert.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAlert.png
new file mode 100644 (file)
index 0000000..26f29a2
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapAlert.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapLeftCol.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapLeftCol.png
new file mode 100644 (file)
index 0000000..d1cde64
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapLeftCol.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapRightCol.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapRightCol.png
new file mode 100644 (file)
index 0000000..432a142
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapRightCol.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapThreeCol.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapThreeCol.png
new file mode 100644 (file)
index 0000000..58a3d2e
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapThreeCol.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapTwoCol.png b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapTwoCol.png
new file mode 100644 (file)
index 0000000..9e8e9f1
Binary files /dev/null and b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/icons/widgetbootstrapTwoCol.png differ
diff --git a/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/plugin.js b/web/modules/contrib/ckeditor_widgets/js/plugins/widgetbootstrap/plugin.js
new file mode 100644 (file)
index 0000000..e670302
--- /dev/null
@@ -0,0 +1,326 @@
+// Init default alert classes
+
+CKEDITOR.config.widgetbootstrapAlert_alertTypes = {
+    'alert': 'Alert',
+    'info': 'Info',
+    'warning': 'Warning',
+    'success': 'Success'
+};
+
+
+CKEDITOR.plugins.add( 'widgetbootstrap', {
+    requires: 'widget',
+
+    icons: 'widgetbootstrapLeftCol,widgetbootstrapRightCol,widgetbootstrapTwoCol,widgetbootstrapThreeCol,widgetbootstrapAlert',
+
+    /*defaults : {
+        name: 'accordion',
+        count: 3,
+        activePanel: 1,
+        multiExpand: false
+    },*/
+
+    init: function( editor ) {
+        
+        // Configurable settings
+        //var allowedWidget = editor.config.widgetbootstrap_allowedWidget != undefined ? editor.config.widgetbootstrap_allowedFull :
+        //    'p h2 h3 h4 h5 h6 span br ul ol li strong em img[!src,alt,width,height]';
+        var allowedFull = editor.config.widgetbootstrap_allowedFull != undefined ? editor.config.widgetbootstrap_allowedFull :
+            'p a div span h2 h3 h4 h5 h6 section article iframe object embed strong b i em cite pre blockquote small sub sup code ul ol li dl dt dd table thead tbody th tr td img caption mediawrapper br[href,src,target,width,height,colspan,span,alt,name,title,class,id,data-options]{text-align,float,margin}(*);'
+        //var allowedText = editor.config.widgetbootstrap_allowedText != undefined ? editor.config.widgetbootstrap_allowedFull :
+        //    'p span br ul ol li strong em';
+
+
+        allowedWidget = allowedFull;
+        //allowedText = allowedWidget;
+
+        var showButtons = editor.config.widgetbootstrapShowButtons != undefined ? editor.config.widgetbootstrapShowButtons : true;
+
+        // Define the widgets
+        editor.widgets.add( 'widgetbootstrapLeftCol', {
+
+            button: showButtons ? 'Add left column box' : undefined,
+
+            template:
+                '<div class="row two-col-left">' +
+                    '<div class="col-md-3 col-sidebar"><p><img src="http://placehold.it/300x250&text=Image" /></p></div>' +
+                    '<div class="col-md-9 col-main"><p>Content</p></div>' +
+                '</div>',
+
+            editables: {
+                col1: {
+                    selector: '.col-sidebar',
+                    allowedContent: allowedWidget
+                },
+                col2: {
+                    selector: '.col-main',
+                    allowedContent: allowedWidget
+                }
+            },
+
+            allowedContent: allowedFull,
+
+            upcast: function( element ) {
+                return element.name == 'div' && element.hasClass( 'two-col-right-left' );
+            }
+            
+        } );
+
+        editor.widgets.add( 'widgetbootstrapRightCol', {
+
+            button: showButtons ? 'Add right column box' : undefined,
+
+            template:
+                '<div class="row two-col-right">' +
+                    '<div class="col-md-9 col-main"><p>Content</p></div>' +
+                    '<div class="col-md-3 col-sidebar"><p><img src="http://placehold.it/300x250&text=Image" /></p></div>' +
+                '</div>',
+
+            editables: {
+                col1: {
+                    selector: '.col-sidebar',
+                    allowedContent: allowedWidget
+                },
+                col2: {
+                    selector: '.col-main',
+                    allowedContent: allowedWidget
+                }
+            },
+
+            allowedContent: allowedFull,
+
+            upcast: function( element ) {
+                return element.name == 'div' && element.hasClass( 'two-col-right' );
+            }
+
+        } );
+
+        editor.widgets.add( 'widgetbootstrapTwoCol', {
+
+            button: showButtons ? 'Add two column box' : undefined,
+
+            template:
+                '<div class="row two-col">' +
+                    '<div class="col-md-6 col-1"><p><img src="http://placehold.it/500x280&text=Image" /></p><p>Content</p></div>' +
+                    '<div class="col-md-6 col-2"><p><img src="http://placehold.it/500x280&text=Image" /></p><p>Content</p></div>' +
+                '</div>',
+
+            editables: {
+                col1: {
+                    selector: '.col-1',
+                    allowedContent: allowedWidget
+                },
+                col2: {
+                    selector: '.col-2',
+                    allowedContent: allowedWidget
+                }
+            },
+
+            allowedContent: allowedFull,
+
+            upcast: function( element ) {
+                return element.name == 'div' && element.hasClass( 'two-col' );
+            }
+
+        } );
+
+        editor.widgets.add( 'widgetbootstrapThreeCol', {
+
+            button: showButtons ? 'Add three column box' : undefined,
+
+            template:
+                '<div class="row three-col">' +
+                    '<div class="col-md-4 col-1"><p><img src="http://placehold.it/400x225&text=Image" /></p><p>Text below</p></div>' +
+                    '<div class="col-md-4 col-2"><p><img src="http://placehold.it/400x225&text=Image" /></p><p>Text below</p></div>' +
+                    '<div class="col-md-4 col-3"><p><img src="http://placehold.it/400x225&text=Image" /></p><p>Text below</p></div>' +
+                '</div>',
+
+            editables: {
+                col1: {
+                    selector: '.col-1',
+                    allowedContent: allowedWidget
+                },
+                col2: {
+                    selector: '.col-2',
+                    allowedContent: allowedWidget
+                },
+                col3: {
+                    selector: '.col-3',
+                    allowedContent: allowedWidget
+                }
+            },
+
+            allowedContent: allowedFull,
+
+            upcast: function( element ) {
+                return element.name == 'div' && element.hasClass( 'three-col' );
+            }
+
+        } );
+
+        editor.addCommand( 'openwidgetbootstrapAlert', new CKEDITOR.dialogCommand( 'widgetbootstrapAlert' ) );
+        
+        // Add foundation alert button
+        // Textare decodes html entities
+        //var textarea = new CKEDITOR.dom.element( 'textarea' );
+
+        editor.widgets.add( 'widgetbootstrapAlert', {
+
+            button: showButtons ? 'Add alert box' : undefined,
+            dialog: 'widgetbootstrapAlert',
+
+            template: '<div class="alert-box"><div class="alert-text">Some Text</span></div>',
+
+            editables: {
+                alertBox: {
+                    selector: '.alert-text',
+                    allowedContent: allowedWidget
+                },