Classes

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 50 100 150 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\Setup\Migration\Versions\Migration420Alpha — Coverage: 34.2% | Lines: 819 | Complexity: 60 phpMyFAQ\Faq — Coverage: 96.6% | Lines: 565 | Complexity: 104 phpMyFAQ\Setup\Installation\DatabaseSchema — Coverage: 100.0% | Lines: 540 | Complexity: 56 phpMyFAQ\Controller\Administration\CategoryController — Coverage: 87.0% | Lines: 530 | Complexity: 60 phpMyFAQ\Controller\Administration\Api\FaqController — Coverage: 80.6% | Lines: 463 | Complexity: 79 phpMyFAQ\Controller\Administration\FaqController — Coverage: 98.7% | Lines: 446 | Complexity: 24 phpMyFAQ\Faq\FaqRepository — Coverage: 99.3% | Lines: 423 | Complexity: 74 phpMyFAQ\Setup\Installation\DefaultDataSeeder — Coverage: 99.3% | Lines: 418 | Complexity: 12 phpMyFAQ\User — Coverage: 89.8% | Lines: 383 | Complexity: 131 phpMyFAQ\Instance\Client — Coverage: 91.8% | Lines: 329 | Complexity: 91 phpMyFAQ\Controller\Administration\AbstractAdministrationController — Coverage: 99.4% | Lines: 322 | Complexity: 79 phpMyFAQ\Category\CategoryRepository — Coverage: 85.2% | Lines: 317 | Complexity: 91 phpMyFAQ\Controller\Frontend\FaqController — Coverage: 50.9% | Lines: 316 | Complexity: 53 phpMyFAQ\Export\Pdf\Wrapper — Coverage: 91.5% | Lines: 306 | Complexity: 116 phpMyFAQ\Controller\Administration\Api\UserController — Coverage: 86.6% | Lines: 305 | Complexity: 94 phpMyFAQ\Instance\Search\Elasticsearch — Coverage: 88.7% | Lines: 292 | Complexity: 64 phpMyFAQ\Setup\UpdateRunner — Coverage: 18.7% | Lines: 283 | Complexity: 69 phpMyFAQ\Command\SeedTestDataCommand — Coverage: 93.6% | Lines: 280 | Complexity: 61 phpMyFAQ\Controller\Administration\Api\PageController — Coverage: 92.9% | Lines: 280 | Complexity: 79 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController — Coverage: 87.8% | Lines: 255 | Complexity: 69 phpMyFAQ\Mail — Coverage: 95.3% | Lines: 254 | Complexity: 114 phpMyFAQ\Faq\Statistics — Coverage: 100.0% | Lines: 251 | Complexity: 38 phpMyFAQ\Controller\Api\FaqController — Coverage: 92.0% | Lines: 249 | Complexity: 47 phpMyFAQ\Controller\Administration\Api\GroupController — Coverage: 72.2% | Lines: 248 | Complexity: 69 phpMyFAQ\Setup\InstallationRunner — Coverage: 5.0% | Lines: 239 | Complexity: 72 phpMyFAQ\Auth\AuthWebAuthn — Coverage: 68.9% | Lines: 228 | Complexity: 82 phpMyFAQ\Chat — Coverage: 98.7% | Lines: 225 | Complexity: 41 phpMyFAQ\Instance\Search\OpenSearch — Coverage: 86.2% | Lines: 224 | Complexity: 35 phpMyFAQ\Permission\MediumPermissionRepository — Coverage: 98.6% | Lines: 221 | Complexity: 77 phpMyFAQ\Setup\Upgrade — Coverage: 34.4% | Lines: 221 | Complexity: 78 phpMyFAQ\Category — Coverage: 93.2% | Lines: 220 | Complexity: 93 phpMyFAQ\Tags — Coverage: 97.1% | Lines: 206 | Complexity: 57 phpMyFAQ\CustomPage\CustomPageRepository — Coverage: 99.5% | Lines: 204 | Complexity: 55 phpMyFAQ\Helper\SearchHelper — Coverage: 82.8% | Lines: 203 | Complexity: 39 phpMyFAQ\Administration\Backup — Coverage: 95.0% | Lines: 201 | Complexity: 61 phpMyFAQ\User\CurrentUser — Coverage: 88.5% | Lines: 200 | Complexity: 67 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController — Coverage: 72.7% | Lines: 198 | Complexity: 57 phpMyFAQ\Captcha\BuiltinCaptcha — Coverage: 93.2% | Lines: 191 | Complexity: 42 phpMyFAQ\Notification — Coverage: 98.9% | Lines: 185 | Complexity: 31 phpMyFAQ\Category\Relation — Coverage: 93.9% | Lines: 180 | Complexity: 47 phpMyFAQ\Administration\AdminMenuBuilder — Coverage: 53.4% | Lines: 176 | Complexity: 50 phpMyFAQ\Search — Coverage: 89.7% | Lines: 175 | Complexity: 65 phpMyFAQ\Search\SearchService — Coverage: 89.6% | Lines: 173 | Complexity: 40 phpMyFAQ\Utils — Coverage: 98.8% | Lines: 173 | Complexity: 27 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator — Coverage: 87.2% | Lines: 172 | Complexity: 96 phpMyFAQ\Controller\Frontend\AbstractFrontController — Coverage: 95.9% | Lines: 169 | Complexity: 33 phpMyFAQ\Administration\Faq — Coverage: 76.5% | Lines: 166 | Complexity: 46 phpMyFAQ\Translation\Provider\AmazonTranslationProvider — Coverage: 95.2% | Lines: 166 | Complexity: 19 phpMyFAQ\Database\Sqlsrv — Coverage: 80.2% | Lines: 162 | Complexity: 52 phpMyFAQ\Link — Coverage: 98.7% | Lines: 159 | Complexity: 72 phpMyFAQ\Setup\InstallationInputValidator — Coverage: 65.2% | Lines: 158 | Complexity: 60 phpMyFAQ\User\UserData — Coverage: 79.7% | Lines: 158 | Complexity: 54 phpMyFAQ\Controller\Administration\BackupController — Coverage: 95.5% | Lines: 157 | Complexity: 24 phpMyFAQ\Ldap — Coverage: 93.5% | Lines: 155 | Complexity: 56 phpMyFAQ\Translation — Coverage: 98.7% | Lines: 155 | Complexity: 63 phpMyFAQ\Auth\AuthKeycloak — Coverage: 92.2% | Lines: 154 | Complexity: 65 phpMyFAQ\Controller\Frontend\Api\UserController — Coverage: 95.5% | Lines: 154 | Complexity: 53 phpMyFAQ\Controller\Administration\PageController — Coverage: 100.0% | Lines: 153 | Complexity: 10 phpMyFAQ\Helper\CategoryHelper — Coverage: 80.4% | Lines: 148 | Complexity: 34 phpMyFAQ\Controller\AbstractController — Coverage: 90.4% | Lines: 146 | Complexity: 61 phpMyFAQ\Setup\Migration\AbstractMigration — Coverage: 52.4% | Lines: 145 | Complexity: 60 phpMyFAQ\Export\Pdf — Coverage: 93.8% | Lines: 144 | Complexity: 16 phpMyFAQ\Controller\Administration\Api\DashboardController — Coverage: 50.4% | Lines: 141 | Complexity: 58 phpMyFAQ\Controller\Frontend\AuthenticationController — Coverage: 98.6% | Lines: 141 | Complexity: 36 phpMyFAQ\Database\Pgsql — Coverage: 78.0% | Lines: 141 | Complexity: 45 phpMyFAQ\Controller\Administration\AuthenticationController — Coverage: 87.1% | Lines: 140 | Complexity: 32 phpMyFAQ\Database\Sqlite3 — Coverage: 86.4% | Lines: 140 | Complexity: 50 phpMyFAQ\Auth\AuthLdap — Coverage: 91.3% | Lines: 138 | Complexity: 50 phpMyFAQ\Controller\Frontend\UserController — Coverage: 79.7% | Lines: 138 | Complexity: 29 phpMyFAQ\Database\PdoSqlite — Coverage: 87.7% | Lines: 138 | Complexity: 55 phpMyFAQ\Controller\Administration\Api\UpdateController — Coverage: 60.6% | Lines: 137 | Complexity: 34 phpMyFAQ\ConfigurationMethodsTrait — Coverage: 90.5% | Lines: 137 | Complexity: 89 phpMyFAQ\Setup\Update — Coverage: 41.9% | Lines: 136 | Complexity: 55 phpMyFAQ\User\UserSession — Coverage: 95.5% | Lines: 134 | Complexity: 36 phpMyFAQ\Helper\StatisticsHelper — Coverage: 84.2% | Lines: 133 | Complexity: 53 phpMyFAQ\Setup\Migration\MigrationExecutor — Coverage: 89.5% | Lines: 133 | Complexity: 40 phpMyFAQ\Command\InstallCommand — Coverage: 67.4% | Lines: 132 | Complexity: 15 phpMyFAQ\Auth\OAuth2\AuthorizationServer — Coverage: 70.3% | Lines: 128 | Complexity: 33 phpMyFAQ\Language\Plurals — Coverage: 97.7% | Lines: 128 | Complexity: 92 phpMyFAQ\Controller\Api\CategoryController — Coverage: 83.5% | Lines: 127 | Complexity: 29 phpMyFAQ\News — Coverage: 100.0% | Lines: 126 | Complexity: 23 phpMyFAQ\Scheduler\TaskScheduler — Coverage: 88.1% | Lines: 126 | Complexity: 22 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder — Coverage: 97.6% | Lines: 124 | Complexity: 54 phpMyFAQ\Helper\FaqHelper — Coverage: 78.0% | Lines: 123 | Complexity: 16 phpMyFAQ\Database\PdoSqlsrv — Coverage: 79.5% | Lines: 122 | Complexity: 47 phpMyFAQ\Configuration\Storage\RedisConfigurationStore — Coverage: 66.9% | Lines: 121 | Complexity: 56 phpMyFAQ\Controller\Frontend\CategoryController — Coverage: 99.2% | Lines: 120 | Complexity: 27 phpMyFAQ\Database\PdoMysql — Coverage: 83.2% | Lines: 119 | Complexity: 44 phpMyFAQ\Database\PdoPgsql — Coverage: 82.4% | Lines: 119 | Complexity: 45 phpMyFAQ\Comment\CommentsRepository — Coverage: 98.3% | Lines: 118 | Complexity: 26 phpMyFAQ\Database\Mysqli — Coverage: 72.9% | Lines: 118 | Complexity: 47 phpMyFAQ\Controller\Frontend\Api\FaqController — Coverage: 91.5% | Lines: 117 | Complexity: 40 phpMyFAQ\Instance\Setup — Coverage: 90.6% | Lines: 117 | Complexity: 23 phpMyFAQ\Category\Order — Coverage: 98.3% | Lines: 116 | Complexity: 37 phpMyFAQ\Controller\Administration\Api\ExportController — Coverage: 74.1% | Lines: 116 | Complexity: 43 phpMyFAQ\News\NewsRepository — Coverage: 100.0% | Lines: 116 | Complexity: 37 phpMyFAQ\Controller\Administration\Api\ApiKeyController — Coverage: 100.0% | Lines: 115 | Complexity: 31 phpMyFAQ\Permission\MediumPermission — Coverage: 88.7% | Lines: 115 | Complexity: 67 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha — Coverage: 72.2% | Lines: 115 | Complexity: 16 phpMyFAQ\Controller\Administration\Api\ImageController — Coverage: 83.9% | Lines: 112 | Complexity: 19 phpMyFAQ\Controller\Administration\InstanceController — Coverage: 88.2% | Lines: 110 | Complexity: 17 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder — Coverage: 92.7% | Lines: 110 | Complexity: 41 phpMyFAQ\Push\PushSubscriptionRepository — Coverage: 98.2% | Lines: 109 | Complexity: 24 phpMyFAQ\Translation\ContentTranslationService — Coverage: 100.0% | Lines: 109 | Complexity: 45 phpMyFAQ\Helper\SvgSanitizer — Coverage: 97.2% | Lines: 107 | Complexity: 25 phpMyFAQ\System — Coverage: 91.6% | Lines: 107 | Complexity: 57 phpMyFAQ\Search\Search\Elasticsearch — Coverage: 96.2% | Lines: 106 | Complexity: 18 phpMyFAQ\Controller\Frontend\Api\WebAuthnController — Coverage: 93.3% | Lines: 105 | Complexity: 35 phpMyFAQ\Plugin\PluginManager — Coverage: 88.5% | Lines: 104 | Complexity: 48 phpMyFAQ\User\Tracking — Coverage: 95.2% | Lines: 104 | Complexity: 32 phpMyFAQ\Setup\Installer — Coverage: 24.3% | Lines: 103 | Complexity: 34 phpMyFAQ\Controller\Administration\Api\InstanceController — Coverage: 86.3% | Lines: 102 | Complexity: 30 phpMyFAQ\Permission\BasicPermissionRepository — Coverage: 99.0% | Lines: 101 | Complexity: 28 phpMyFAQ\Search\Search\OpenSearch — Coverage: 97.0% | Lines: 101 | Complexity: 14 phpMyFAQ\Controller\Frontend\WebAuthnController — Coverage: 41.0% | Lines: 100 | Complexity: 25 phpMyFAQ\Question\QuestionRepository — Coverage: 100.0% | Lines: 100 | Complexity: 18 phpMyFAQ\Service\McpServer\FaqSearchTool — Coverage: 99.0% | Lines: 100 | Complexity: 17 phpMyFAQ\Bootstrapper — Coverage: 93.9% | Lines: 99 | Complexity: 33 phpMyFAQ\Controller\Frontend\Api\CommentController — Coverage: 91.9% | Lines: 99 | Complexity: 35 phpMyFAQ\Permission\GroupCategoryPermissionRepository — Coverage: 92.9% | Lines: 98 | Complexity: 32 phpMyFAQ\Setup\Migration\Versions\Migration320Beta — Coverage: 62.9% | Lines: 97 | Complexity: 14 phpMyFAQ\Attachment\File — Coverage: 68.8% | Lines: 96 | Complexity: 45 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController — Coverage: 90.6% | Lines: 96 | Complexity: 31 phpMyFAQ\Sitemap — Coverage: 92.7% | Lines: 96 | Complexity: 18 phpMyFAQ\Controller\Frontend\Api\SetupController — Coverage: 92.6% | Lines: 95 | Complexity: 30 phpMyFAQ\Translation\Provider\GoogleTranslationProvider — Coverage: 93.7% | Lines: 95 | Complexity: 22 phpMyFAQ\Controller\Administration\Api\AttachmentController — Coverage: 66.0% | Lines: 94 | Complexity: 25 phpMyFAQ\Controller\Frontend\AzureAuthenticationController — Coverage: 100.0% | Lines: 92 | Complexity: 29 phpMyFAQ\StopWords — Coverage: 100.0% | Lines: 92 | Complexity: 32 phpMyFAQ\Controller\Administration\UserController — Coverage: 100.0% | Lines: 91 | Complexity: 9 phpMyFAQ\Controller\Frontend\SearchController — Coverage: 95.6% | Lines: 91 | Complexity: 10 phpMyFAQ\Kernel — Coverage: 75.8% | Lines: 91 | Complexity: 38 phpMyFAQ\Attachment\AbstractAttachment — Coverage: 100.0% | Lines: 90 | Complexity: 35 phpMyFAQ\Category\Permission — Coverage: 100.0% | Lines: 90 | Complexity: 31 phpMyFAQ\CustomPage — Coverage: 100.0% | Lines: 90 | Complexity: 29 phpMyFAQ\Controller\Administration\NewsController — Coverage: 100.0% | Lines: 89 | Complexity: 6 phpMyFAQ\Faq\Permission — Coverage: 83.1% | Lines: 89 | Complexity: 34 phpMyFAQ\Translation\Provider\DeepLTranslationProvider — Coverage: 91.0% | Lines: 89 | Complexity: 24 phpMyFAQ\Faq\FaqDisplayService — Coverage: 90.9% | Lines: 88 | Complexity: 34 phpMyFAQ\Form\FormsRepository — Coverage: 100.0% | Lines: 86 | Complexity: 14 phpMyFAQ\Queue\Transport\DatabaseTransport — Coverage: 96.5% | Lines: 86 | Complexity: 16 phpMyFAQ\Controller\Administration\Api\NewsController — Coverage: 94.1% | Lines: 85 | Complexity: 15 phpMyFAQ\Controller\Frontend\SetupController — Coverage: 84.7% | Lines: 85 | Complexity: 21 phpMyFAQ\Auth\AuthDatabase — Coverage: 89.3% | Lines: 84 | Complexity: 26 phpMyFAQ\Setup\HtaccessUpdater — Coverage: 64.3% | Lines: 84 | Complexity: 23 phpMyFAQ\Template\ThemeManager — Coverage: 91.6% | Lines: 83 | Complexity: 39 phpMyFAQ\Session\Token — Coverage: 100.0% | Lines: 82 | Complexity: 34 phpMyFAQ\Auth\EntraId\OAuth — Coverage: 95.1% | Lines: 81 | Complexity: 27 phpMyFAQ\Faq\QueryHelper — Coverage: 91.4% | Lines: 81 | Complexity: 34 phpMyFAQ\Routing\AttributeRouteLoader — Coverage: 92.6% | Lines: 81 | Complexity: 35 phpMyFAQ\Configuration\Storage\HybridConfigurationStore — Coverage: 60.0% | Lines: 80 | Complexity: 27 phpMyFAQ\Setup\Migration\MigrationTracker — Coverage: 76.2% | Lines: 80 | Complexity: 31 phpMyFAQ\Controller\Administration\Api\AdminLogController — Coverage: 78.2% | Lines: 78 | Complexity: 12 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine — Coverage: 87.2% | Lines: 78 | Complexity: 39 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore — Coverage: 96.1% | Lines: 77 | Complexity: 16 phpMyFAQ\Controller\Administration\DashboardController — Coverage: 68.8% | Lines: 77 | Complexity: 9 phpMyFAQ\Controller\Api\OAuth2Controller — Coverage: 98.7% | Lines: 77 | Complexity: 26 phpMyFAQ\Controller\Frontend\QuestionsController — Coverage: 98.7% | Lines: 77 | Complexity: 10 phpMyFAQ\Controller\Frontend\Api\QuestionController — Coverage: 97.4% | Lines: 76 | Complexity: 27 phpMyFAQ\Translation\Provider\AzureTranslationProvider — Coverage: 96.1% | Lines: 76 | Complexity: 11 phpMyFAQ\Administration\Category — Coverage: 92.0% | Lines: 75 | Complexity: 26 phpMyFAQ\Controller\Frontend\Api\ChatController — Coverage: 97.3% | Lines: 75 | Complexity: 17 phpMyFAQ\Controller\Frontend\Api\ChatSseController — Coverage: 84.0% | Lines: 75 | Complexity: 10 phpMyFAQ\Controller\Frontend\NewsController — Coverage: 94.6% | Lines: 74 | Complexity: 8 phpMyFAQ\EventListener\ApiExceptionListener — Coverage: 100.0% | Lines: 74 | Complexity: 31 phpMyFAQ\Administration\SessionRepository — Coverage: 98.6% | Lines: 73 | Complexity: 26 phpMyFAQ\Controller\Administration\StatisticsSessionsController — Coverage: 100.0% | Lines: 73 | Complexity: 7 phpMyFAQ\Faq\Import — Coverage: 97.3% | Lines: 73 | Complexity: 21 phpMyFAQ\Category\Navigation\CategoryTreeNavigator — Coverage: 54.2% | Lines: 72 | Complexity: 30 phpMyFAQ\EventListener\WebExceptionListener — Coverage: 80.6% | Lines: 72 | Complexity: 21 phpMyFAQ\Setup\Migration\Versions\Migration320Alpha — Coverage: 80.6% | Lines: 72 | Complexity: 6 phpMyFAQ\Glossary\GlossaryRepository — Coverage: 97.2% | Lines: 71 | Complexity: 15 phpMyFAQ\Search\Database\Pgsql — Coverage: 98.6% | Lines: 71 | Complexity: 23 phpMyFAQ\Search\SearchDatabase — Coverage: 97.2% | Lines: 71 | Complexity: 31 phpMyFAQ\Instance — Coverage: 100.0% | Lines: 70 | Complexity: 20 phpMyFAQ\Pagination — Coverage: 91.4% | Lines: 70 | Complexity: 25 phpMyFAQ\Queue\Handler\ExportHandler — Coverage: 51.4% | Lines: 70 | Complexity: 24 phpMyFAQ\Storage\S3Storage — Coverage: 97.1% | Lines: 69 | Complexity: 27 phpMyFAQ\Controller\Administration\Api\FormController — Coverage: 85.3% | Lines: 68 | Complexity: 15 phpMyFAQ\Helper\RegistrationHelper — Coverage: 23.5% | Lines: 68 | Complexity: 23 phpMyFAQ\Search\Database\PdoPgsql — Coverage: 98.5% | Lines: 67 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\LdapController — Coverage: 56.1% | Lines: 66 | Complexity: 9 phpMyFAQ\Helper\QuestionHelper — Coverage: 100.0% | Lines: 66 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\CategoryController — Coverage: 89.2% | Lines: 65 | Complexity: 14 phpMyFAQ\Api\Pagination\PaginationMetadata — Coverage: 100.0% | Lines: 64 | Complexity: 17 phpMyFAQ\Routing\RouteCacheManager — Coverage: 93.7% | Lines: 63 | Complexity: 21 phpMyFAQ\User\UserAuthentication — Coverage: 57.1% | Lines: 63 | Complexity: 30 phpMyFAQ\Administration\AdminLogRepository — Coverage: 100.0% | Lines: 62 | Complexity: 13 phpMyFAQ\Push\WebPushService — Coverage: 71.0% | Lines: 62 | Complexity: 26 phpMyFAQ\Auth\ApiKeyAuthenticator — Coverage: 90.2% | Lines: 61 | Complexity: 20 phpMyFAQ\Controller\Administration\GroupController — Coverage: 96.7% | Lines: 61 | Complexity: 11 phpMyFAQ\Visits\VisitsRepository — Coverage: 98.4% | Lines: 61 | Complexity: 13 phpMyFAQ\Setup\Migration\Versions\Migration405 — Coverage: 63.3% | Lines: 60 | Complexity: 8 phpMyFAQ\Auth\Oidc\OidcClient — Coverage: 100.0% | Lines: 59 | Complexity: 17 phpMyFAQ\Comments — Coverage: 96.6% | Lines: 59 | Complexity: 16 phpMyFAQ\Entity\FaqEntity — Coverage: 100.0% | Lines: 59 | Complexity: 39 phpMyFAQ\Seo\SeoRepository — Coverage: 100.0% | Lines: 59 | Complexity: 10 phpMyFAQ\Tenant\TenantQuotaEnforcer — Coverage: 89.8% | Lines: 59 | Complexity: 20 phpMyFAQ\Administration\RemoteApiClient — Coverage: 89.7% | Lines: 58 | Complexity: 13 phpMyFAQ\Attachment\AttachmentFactory — Coverage: 98.3% | Lines: 58 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\MediaBrowserController — Coverage: 89.7% | Lines: 58 | Complexity: 12 phpMyFAQ\Controller\Api\SearchController — Coverage: 89.7% | Lines: 58 | Complexity: 12 phpMyFAQ\Helper\LanguageHelper — Coverage: 63.8% | Lines: 58 | Complexity: 19 phpMyFAQ\Mail\Provider\SesProvider — Coverage: 79.3% | Lines: 58 | Complexity: 14 phpMyFAQ\Storage\FilesystemStorage — Coverage: 94.8% | Lines: 58 | Complexity: 31 phpMyFAQ\Storage\StorageFactory — Coverage: 84.5% | Lines: 58 | Complexity: 28 phpMyFAQ\Api\MetaService — Coverage: 80.7% | Lines: 57 | Complexity: 14 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter — Coverage: 56.1% | Lines: 57 | Complexity: 38 phpMyFAQ\Controller\Administration\PasswordChangeController — Coverage: 98.2% | Lines: 57 | Complexity: 13 phpMyFAQ\Administration\DashboardLayout — Coverage: 92.9% | Lines: 56 | Complexity: 15 phpMyFAQ\Helper\AttachmentHelper — Coverage: 100.0% | Lines: 56 | Complexity: 14 phpMyFAQ\Api\Filtering\FilterRequest — Coverage: 85.5% | Lines: 55 | Complexity: 36 phpMyFAQ\Auth\AuthEntraId — Coverage: 80.0% | Lines: 55 | Complexity: 14 phpMyFAQ\Controller\Administration\Api\TranslationController — Coverage: 80.0% | Lines: 55 | Complexity: 21 phpMyFAQ\Administration\Backup\BackupRepository — Coverage: 100.0% | Lines: 54 | Complexity: 18 phpMyFAQ\Controller\Administration\Api\GlossaryController — Coverage: 75.9% | Lines: 54 | Complexity: 13 phpMyFAQ\Controller\Administration\SystemInformationController — Coverage: 75.9% | Lines: 54 | Complexity: 11 phpMyFAQ\Plugin\PluginDiscovery — Coverage: 92.6% | Lines: 54 | Complexity: 30 phpMyFAQ\Search\Database\Mysqli — Coverage: 100.0% | Lines: 54 | Complexity: 11 phpMyFAQ\Search\Database\PdoMysql — Coverage: 100.0% | Lines: 54 | Complexity: 11 phpMyFAQ\Setup\Migration\Versions\Migration407 — Coverage: 100.0% | Lines: 54 | Complexity: 6 phpMyFAQ\Filter — Coverage: 100.0% | Lines: 53 | Complexity: 24 phpMyFAQ\News\NewsService — Coverage: 100.0% | Lines: 53 | Complexity: 17 phpMyFAQ\Command\McpServerCommand — Coverage: 98.1% | Lines: 52 | Complexity: 10 phpMyFAQ\Configuration\LdapSettings — Coverage: 100.0% | Lines: 52 | Complexity: 13 phpMyFAQ\Permission\BasicPermission — Coverage: 92.3% | Lines: 52 | Complexity: 31 phpMyFAQ\Search\Rating\RatingRepository — Coverage: 98.1% | Lines: 52 | Complexity: 13 phpMyFAQ\Setup\Migration\MigrationRegistry — Coverage: 96.2% | Lines: 52 | Complexity: 19 phpMyFAQ\Setup\Migration\Operations\OperationRecorder — Coverage: 67.3% | Lines: 52 | Complexity: 23 phpMyFAQ\Queue\Worker — Coverage: 90.2% | Lines: 51 | Complexity: 19 phpMyFAQ\Setup\Installation\SchemaInstaller — Coverage: 54.9% | Lines: 51 | Complexity: 24 phpMyFAQ\Administration\FileDownloader — Coverage: 80.0% | Lines: 50 | Complexity: 11 phpMyFAQ\Controller\Administration\Api\TagController — Coverage: 86.0% | Lines: 50 | Complexity: 13 phpMyFAQ\Date — Coverage: 100.0% | Lines: 50 | Complexity: 12 phpMyFAQ\Glossary — Coverage: 94.0% | Lines: 50 | Complexity: 22 phpMyFAQ\Language\LanguageDetector — Coverage: 90.0% | Lines: 50 | Complexity: 26 phpMyFAQ\Mail\Provider\SendGridProvider — Coverage: 100.0% | Lines: 50 | Complexity: 12 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3 — Coverage: 64.0% | Lines: 50 | Complexity: 8 phpMyFAQ\Bootstrap\ConfigDirectoryResolver — Coverage: 83.7% | Lines: 49 | Complexity: 29 phpMyFAQ\Controller\Administration\OpenQuestionsController — Coverage: 100.0% | Lines: 49 | Complexity: 6 phpMyFAQ\User\CurrentUserSessionLookupTrait — Coverage: 87.8% | Lines: 49 | Complexity: 19 phpMyFAQ\Controller\Administration\Api\ElasticsearchController — Coverage: 77.1% | Lines: 48 | Complexity: 14 phpMyFAQ\Administration\TranslationStatistics — Coverage: 91.5% | Lines: 47 | Complexity: 13 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository — Coverage: 100.0% | Lines: 47 | Complexity: 15 phpMyFAQ\Administration\AdminLog — Coverage: 95.7% | Lines: 46 | Complexity: 15 phpMyFAQ\Controller\Api\BackupController — Coverage: 82.6% | Lines: 46 | Complexity: 10 phpMyFAQ\Category\Image — Coverage: 97.8% | Lines: 45 | Complexity: 21 phpMyFAQ\Command\CreateHashesCommand — Coverage: 72.7% | Lines: 44 | Complexity: 15 phpMyFAQ\Controller\Frontend\Api\PushController — Coverage: 100.0% | Lines: 44 | Complexity: 15 phpMyFAQ\Controller\Frontend\StartpageController — Coverage: 100.0% | Lines: 44 | Complexity: 4 phpMyFAQ\Search\SearchResultSet — Coverage: 93.2% | Lines: 44 | Complexity: 26 phpMyFAQ\Setup\Migration\MigrationResult — Coverage: 100.0% | Lines: 44 | Complexity: 18 phpMyFAQ\Auth\OAuth2\ResourceServer — Coverage: 76.7% | Lines: 43 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\OpenSearchController — Coverage: 86.0% | Lines: 43 | Complexity: 12 phpMyFAQ\Filesystem\Filesystem — Coverage: 95.3% | Lines: 43 | Complexity: 27 phpMyFAQ\Mail\Provider\MailgunProvider — Coverage: 100.0% | Lines: 43 | Complexity: 14 phpMyFAQ\Administration\Session — Coverage: 73.8% | Lines: 42 | Complexity: 17 phpMyFAQ\Configuration\ConfigurationRepository — Coverage: 100.0% | Lines: 42 | Complexity: 11 phpMyFAQ\Entity\NewsMessage — Coverage: 100.0% | Lines: 42 | Complexity: 28 phpMyFAQ\Forms — Coverage: 95.2% | Lines: 42 | Complexity: 21 phpMyFAQ\Bootstrap\SearchClientFactory — Coverage: 90.2% | Lines: 41 | Complexity: 13 phpMyFAQ\Controller\Administration\FormsController — Coverage: 100.0% | Lines: 41 | Complexity: 6 phpMyFAQ\Controller\Api\RegistrationController — Coverage: 90.2% | Lines: 41 | Complexity: 14 phpMyFAQ\Controller\Frontend\Api\BookmarkController — Coverage: 90.2% | Lines: 41 | Complexity: 13 phpMyFAQ\Setup\UpdateToken — Coverage: 87.8% | Lines: 41 | Complexity: 24 phpMyFAQ\Attachment\Filesystem\AbstractFile — Coverage: 92.5% | Lines: 40 | Complexity: 25 phpMyFAQ\Auth\EntraId\JwksProvider — Coverage: 95.0% | Lines: 40 | Complexity: 18 phpMyFAQ\Category\Tree\TreePathResolver — Coverage: 90.0% | Lines: 40 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\ConfigurationController — Coverage: 87.5% | Lines: 40 | Complexity: 10 phpMyFAQ\Database\DatabaseHelper — Coverage: 85.0% | Lines: 40 | Complexity: 15 phpMyFAQ\Environment — Coverage: 95.0% | Lines: 40 | Complexity: 18 phpMyFAQ\Service\McpServer\McpSdkRuntime — Coverage: 90.0% | Lines: 40 | Complexity: 10 phpMyFAQ\Session\RedisSessionHandler — Coverage: 80.0% | Lines: 40 | Complexity: 15 phpMyFAQ\Twig\TwigWrapper — Coverage: 95.0% | Lines: 40 | Complexity: 19 phpMyFAQ\Attachment\AttachmentService — Coverage: 100.0% | Lines: 39 | Complexity: 22 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache — Coverage: 89.7% | Lines: 39 | Complexity: 18 phpMyFAQ\Controller\Administration\Api\QuestionController — Coverage: 92.3% | Lines: 39 | Complexity: 13 phpMyFAQ\Controller\Api\OpenQuestionController — Coverage: 97.4% | Lines: 39 | Complexity: 7 phpMyFAQ\Controller\Frontend\Api\ContactController — Coverage: 100.0% | Lines: 39 | Complexity: 14 phpMyFAQ\Entity\CustomPageEntity — Coverage: 100.0% | Lines: 39 | Complexity: 26 phpMyFAQ\Language — Coverage: 100.0% | Lines: 39 | Complexity: 19 phpMyFAQ\Administration\Revision — Coverage: 100.0% | Lines: 38 | Complexity: 11 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository — Coverage: 100.0% | Lines: 38 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository — Coverage: 97.4% | Lines: 38 | Complexity: 13 phpMyFAQ\Category\Startpage — Coverage: 100.0% | Lines: 38 | Complexity: 11 phpMyFAQ\Controller\Api\AttachmentController — Coverage: 94.7% | Lines: 38 | Complexity: 4 phpMyFAQ\Helper\TagsHelper — Coverage: 100.0% | Lines: 38 | Complexity: 7 phpMyFAQ\Setup\Migration\Operations\SqlOperation — Coverage: 100.0% | Lines: 38 | Complexity: 15 phpMyFAQ\Controller\Api\AbstractApiController — Coverage: 100.0% | Lines: 37 | Complexity: 11 phpMyFAQ\Controller\Frontend\Api\RegistrationController — Coverage: 97.3% | Lines: 37 | Complexity: 18 phpMyFAQ\Controller\Frontend\AttachmentController — Coverage: 100.0% | Lines: 37 | Complexity: 10 phpMyFAQ\Controller\Frontend\CustomPageController — Coverage: 91.9% | Lines: 37 | Complexity: 10 phpMyFAQ\Entity\Comment — Coverage: 73.0% | Lines: 37 | Complexity: 19 phpMyFAQ\Administration\Report — Coverage: 94.4% | Lines: 36 | Complexity: 16 phpMyFAQ\Auth\AuthSso — Coverage: 94.4% | Lines: 36 | Complexity: 18 phpMyFAQ\Bookmark\BookmarkFormatter — Coverage: 97.2% | Lines: 36 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\StopWordController — Coverage: 66.7% | Lines: 36 | Complexity: 13 phpMyFAQ\Controller\Administration\CommentsController — Coverage: 100.0% | Lines: 36 | Complexity: 4 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect — Coverage: 94.4% | Lines: 36 | Complexity: 26 phpMyFAQ\Setup\Migration\Versions\Migration323 — Coverage: 27.8% | Lines: 36 | Complexity: 8 phpMyFAQ\Api\Sorting\SortRequest — Coverage: 97.1% | Lines: 35 | Complexity: 21 phpMyFAQ\Bookmark — Coverage: 97.1% | Lines: 35 | Complexity: 18 phpMyFAQ\Container\ContainerCacheManager — Coverage: 97.1% | Lines: 35 | Complexity: 14 phpMyFAQ\Controller\Frontend\Api\VotingController — Coverage: 100.0% | Lines: 35 | Complexity: 14 phpMyFAQ\Queue\Handler\IndexFaqHandler — Coverage: 100.0% | Lines: 35 | Complexity: 13 phpMyFAQ\Administration\RatingStatistics — Coverage: 100.0% | Lines: 34 | Complexity: 8 phpMyFAQ\Controller\Api\QuestionController — Coverage: 76.5% | Lines: 34 | Complexity: 5 phpMyFAQ\Entity\AdminLog — Coverage: 100.0% | Lines: 34 | Complexity: 17 phpMyFAQ\Http\RateLimiter — Coverage: 100.0% | Lines: 34 | Complexity: 6 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory — Coverage: 93.9% | Lines: 33 | Complexity: 16 phpMyFAQ\Category\Language\CategoryLanguageService — Coverage: 100.0% | Lines: 33 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\StatisticsController — Coverage: 81.8% | Lines: 33 | Complexity: 13 phpMyFAQ\Controller\Api\CommentController — Coverage: 97.0% | Lines: 33 | Complexity: 4 phpMyFAQ\Database — Coverage: 100.0% | Lines: 33 | Complexity: 13 phpMyFAQ\Controller\Administration\ExportController — Coverage: 100.0% | Lines: 32 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation — Coverage: 65.6% | Lines: 32 | Complexity: 19 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect — Coverage: 100.0% | Lines: 32 | Complexity: 27 phpMyFAQ\User\TwoFactor — Coverage: 100.0% | Lines: 32 | Complexity: 12 phpMyFAQ\Administration\Changelog — Coverage: 100.0% | Lines: 31 | Complexity: 6 phpMyFAQ\Bookmark\BookmarkRepository — Coverage: 100.0% | Lines: 31 | Complexity: 8 phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper — Coverage: 96.8% | Lines: 31 | Complexity: 5 phpMyFAQ\Controller\Administration\AdminLogController — Coverage: 100.0% | Lines: 31 | Complexity: 1 phpMyFAQ\Faq\FaqCreationService — Coverage: 83.9% | Lines: 31 | Complexity: 10 phpMyFAQ\Instance\Database — Coverage: 96.8% | Lines: 31 | Complexity: 10 phpMyFAQ\Question — Coverage: 96.8% | Lines: 31 | Complexity: 10 phpMyFAQ\Api\Pagination\PaginationRequest — Coverage: 100.0% | Lines: 30 | Complexity: 6 phpMyFAQ\Bootstrap\PhpConfigurator — Coverage: 96.7% | Lines: 30 | Complexity: 11 phpMyFAQ\Controller\Administration\AttachmentsController — Coverage: 100.0% | Lines: 30 | Complexity: 3 phpMyFAQ\Controller\Api\TagController — Coverage: 83.3% | Lines: 30 | Complexity: 5 phpMyFAQ\Controller\Frontend\PdfController — Coverage: 83.3% | Lines: 30 | Complexity: 7 phpMyFAQ\Entity\CategoryEntity — Coverage: 100.0% | Lines: 30 | Complexity: 20 phpMyFAQ\Seo\SitemapXmlService — Coverage: 73.3% | Lines: 30 | Complexity: 8 phpMyFAQ\Category\Tree\TreeBuilder — Coverage: 89.7% | Lines: 29 | Complexity: 15 phpMyFAQ\Configuration\DatabaseConfiguration — Coverage: 96.6% | Lines: 29 | Complexity: 12 phpMyFAQ\Configuration\LdapConfiguration — Coverage: 100.0% | Lines: 29 | Complexity: 9 phpMyFAQ\Controller\Administration\StatisticsSearchController — Coverage: 100.0% | Lines: 29 | Complexity: 3 phpMyFAQ\Controller\Api\GlossaryController — Coverage: 100.0% | Lines: 29 | Complexity: 6 phpMyFAQ\Controller\Frontend\ErrorController — Coverage: 93.1% | Lines: 29 | Complexity: 4 phpMyFAQ\Controller\SitemapController — Coverage: 82.8% | Lines: 29 | Complexity: 9 phpMyFAQ\Setup\Migration\Versions\Migration409 — Coverage: 100.0% | Lines: 29 | Complexity: 5 phpMyFAQ\Translation\Provider\LibreTranslationProvider — Coverage: 96.6% | Lines: 29 | Complexity: 12 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository — Coverage: 100.0% | Lines: 28 | Complexity: 7 phpMyFAQ\Category\CategoryService — Coverage: 100.0% | Lines: 28 | Complexity: 18 phpMyFAQ\Controller\Administration\Api\PushController — Coverage: 71.4% | Lines: 28 | Complexity: 5 phpMyFAQ\Controller\Frontend\GlossaryController — Coverage: 100.0% | Lines: 28 | Complexity: 3 phpMyFAQ\EventListener\RouterListener — Coverage: 100.0% | Lines: 28 | Complexity: 12 phpMyFAQ\Export\Json — Coverage: 96.4% | Lines: 28 | Complexity: 4 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3 — Coverage: 100.0% | Lines: 28 | Complexity: 4 phpMyFAQ\Strings\Mbstring — Coverage: 100.0% | Lines: 28 | Complexity: 22 phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension — Coverage: 100.0% | Lines: 28 | Complexity: 2 phpMyFAQ\Cache\CacheSettingsResolver — Coverage: 100.0% | Lines: 27 | Complexity: 9 phpMyFAQ\Configuration\MultisiteConfigurationLocator — Coverage: 100.0% | Lines: 27 | Complexity: 12 phpMyFAQ\Controller\Frontend\OverviewController — Coverage: 100.0% | Lines: 27 | Complexity: 2 phpMyFAQ\Entity\QuestionEntity — Coverage: 100.0% | Lines: 27 | Complexity: 18 phpMyFAQ\EventListener\LanguageListener — Coverage: 100.0% | Lines: 27 | Complexity: 10 phpMyFAQ\Service\Gravatar — Coverage: 59.3% | Lines: 27 | Complexity: 17 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect — Coverage: 92.6% | Lines: 27 | Complexity: 26 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect — Coverage: 92.6% | Lines: 27 | Complexity: 26 phpMyFAQ\Api\Response\ApiResponse — Coverage: 100.0% | Lines: 26 | Complexity: 11 phpMyFAQ\Auth — Coverage: 84.6% | Lines: 26 | Complexity: 15 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument — Coverage: 100.0% | Lines: 26 | Complexity: 9 phpMyFAQ\Category\Navigation\BreadcrumbsBuilder — Coverage: 100.0% | Lines: 26 | Complexity: 5 phpMyFAQ\Controller\Api\PdfController — Coverage: 96.2% | Lines: 26 | Complexity: 10 phpMyFAQ\Core\Error — Coverage: 100.0% | Lines: 26 | Complexity: 9 phpMyFAQ\Glossary\GlossaryHelper — Coverage: 100.0% | Lines: 26 | Complexity: 9 phpMyFAQ\Relation — Coverage: 100.0% | Lines: 26 | Complexity: 2 phpMyFAQ\Routing\RouteCollectionBuilder — Coverage: 96.2% | Lines: 26 | Complexity: 11 phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer — Coverage: 46.2% | Lines: 26 | Complexity: 5 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation — Coverage: 88.5% | Lines: 26 | Complexity: 11 phpMyFAQ\Tenant\TenantContextResolver — Coverage: 96.2% | Lines: 26 | Complexity: 10 phpMyFAQ\Attachment\Filesystem\File\EncryptedFile — Coverage: 96.0% | Lines: 25 | Complexity: 12 phpMyFAQ\Category\CategoryCache — Coverage: 100.0% | Lines: 25 | Complexity: 21 phpMyFAQ\Command\UpdateCommand — Coverage: 68.0% | Lines: 25 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\SessionController — Coverage: 92.0% | Lines: 25 | Complexity: 6 phpMyFAQ\Controller\Administration\RatingController — Coverage: 100.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Controller\Api\LoginController — Coverage: 84.0% | Lines: 25 | Complexity: 5 phpMyFAQ\Setup\EnvironmentConfigurator — Coverage: 84.0% | Lines: 25 | Complexity: 14 phpMyFAQ\Administration\RecentUsers — Coverage: 100.0% | Lines: 24 | Complexity: 8 phpMyFAQ\Api\OAuthDiscoveryService — Coverage: 100.0% | Lines: 24 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\CommentController — Coverage: 95.8% | Lines: 24 | Complexity: 10 phpMyFAQ\Controller\Frontend\ContactController — Coverage: 100.0% | Lines: 24 | Complexity: 5 phpMyFAQ\Controller\Frontend\SitemapController — Coverage: 100.0% | Lines: 24 | Complexity: 8 phpMyFAQ\Entity\PushSubscriptionEntity — Coverage: 100.0% | Lines: 24 | Complexity: 16 phpMyFAQ\Entity\SeoEntity — Coverage: 100.0% | Lines: 24 | Complexity: 16 phpMyFAQ\Form\FormsHelper — Coverage: 95.8% | Lines: 24 | Complexity: 8 phpMyFAQ\Mail\Smtp — Coverage: 100.0% | Lines: 24 | Complexity: 11 phpMyFAQ\Queue\Handler\SendMailHandler — Coverage: 100.0% | Lines: 24 | Complexity: 14 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation — Coverage: 87.5% | Lines: 24 | Complexity: 15 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation — Coverage: 54.2% | Lines: 24 | Complexity: 10 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2 — Coverage: 12.5% | Lines: 24 | Complexity: 6 phpMyFAQ\User\TrackingDataRedactor — Coverage: 100.0% | Lines: 24 | Complexity: 9 phpMyFAQ\Auth\Oidc\OidcPkceGenerator — Coverage: 100.0% | Lines: 23 | Complexity: 8 phpMyFAQ\Captcha\GoogleRecaptcha — Coverage: 100.0% | Lines: 23 | Complexity: 10 phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter — Coverage: 30.4% | Lines: 23 | Complexity: 6 phpMyFAQ\Controller\Administration\GlossaryController — Coverage: 100.0% | Lines: 23 | Complexity: 2 phpMyFAQ\Controller\Api\NewsController — Coverage: 100.0% | Lines: 23 | Complexity: 1 phpMyFAQ\EventListener\ApiRateLimiterListener — Coverage: 95.7% | Lines: 23 | Complexity: 9 phpMyFAQ\Faq\MetaData — Coverage: 87.0% | Lines: 23 | Complexity: 6 phpMyFAQ\Services — Coverage: 100.0% | Lines: 23 | Complexity: 11 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation — Coverage: 73.9% | Lines: 23 | Complexity: 12 phpMyFAQ\Auth\OAuth2\Repository\UserRepository — Coverage: 18.2% | Lines: 22 | Complexity: 8 phpMyFAQ\Cache\CacheFactory — Coverage: 50.0% | Lines: 22 | Complexity: 7 phpMyFAQ\Controller\Api\GroupController — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\Instance\Database\PdoPgsql — Coverage: 95.5% | Lines: 22 | Complexity: 14 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation — Coverage: 77.3% | Lines: 22 | Complexity: 12 phpMyFAQ\Auth\AuthChain — Coverage: 100.0% | Lines: 21 | Complexity: 9 phpMyFAQ\Auth\EntraId\EntraIdSession — Coverage: 95.2% | Lines: 21 | Complexity: 11 phpMyFAQ\Auth\Oidc\OidcDiscoveryService — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Category\Navigation\BreadcrumbsHtmlRenderer — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Controller\Administration\StickyFaqsController — Coverage: 100.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Instance\Database\Pgsql — Coverage: 100.0% | Lines: 21 | Complexity: 13 phpMyFAQ\Link\Strategy\FaqStrategy — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Link\Strategy\SearchStrategy — Coverage: 100.0% | Lines: 21 | Complexity: 8 phpMyFAQ\Setup\AbstractSetup — Coverage: 81.0% | Lines: 21 | Complexity: 12 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder — Coverage: 100.0% | Lines: 21 | Complexity: 17 phpMyFAQ\Strings — Coverage: 95.2% | Lines: 21 | Complexity: 18 phpMyFAQ\Visits — Coverage: 90.5% | Lines: 21 | Complexity: 10 phpMyFAQ\Search\SearchFactory — Coverage: 80.0% | Lines: 20 | Complexity: 12 phpMyFAQ\Strings\StringBasic — Coverage: 95.0% | Lines: 20 | Complexity: 16 phpMyFAQ\Administration\ReportRepository — Coverage: 100.0% | Lines: 19 | Complexity: 6 phpMyFAQ\Category\CategoryPermissionContext — Coverage: 100.0% | Lines: 19 | Complexity: 13 phpMyFAQ\Link\Util\LinkQueryParser — Coverage: 89.5% | Lines: 19 | Complexity: 10 phpMyFAQ\User\PasswordResetTokenService — Coverage: 94.7% | Lines: 19 | Complexity: 11 phpMyFAQ\Auth\AuthHttp — Coverage: 100.0% | Lines: 18 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository — Coverage: 94.4% | Lines: 18 | Complexity: 5 phpMyFAQ\Controller\Administration\ImportController — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\AutoCompleteController — Coverage: 100.0% | Lines: 18 | Complexity: 5 phpMyFAQ\Entity\ChatMessage — Coverage: 100.0% | Lines: 18 | Complexity: 12 phpMyFAQ\Entity\Vote — Coverage: 100.0% | Lines: 18 | Complexity: 12 phpMyFAQ\Controller\Frontend\ChatController — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Faq\QuestionService — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Helper\MailHelper — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Instance\Database\PdoSqlsrv — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Instance\Database\Sqlsrv — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Queue\Message\SendMailMessage — Coverage: 100.0% | Lines: 17 | Complexity: 5 phpMyFAQ\Rating — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation — Coverage: 100.0% | Lines: 17 | Complexity: 6 phpMyFAQ\User\CurrentUserAccountStateTrait — Coverage: 100.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Controller\Administration\StopWordsController — Coverage: 100.0% | Lines: 16 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper — Coverage: 100.0% | Lines: 16 | Complexity: 10 phpMyFAQ\Instance\Database\Mysqli — Coverage: 100.0% | Lines: 16 | Complexity: 9 phpMyFAQ\Instance\Database\PdoMysql — Coverage: 100.0% | Lines: 16 | Complexity: 9 phpMyFAQ\Mail\Builtin — Coverage: 100.0% | Lines: 16 | Complexity: 7 phpMyFAQ\Storage\TenantScopedStorage — Coverage: 93.8% | Lines: 16 | Complexity: 10 phpMyFAQ\Api\ProblemDetails — Coverage: 80.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcSession — Coverage: 100.0% | Lines: 15 | Complexity: 7 phpMyFAQ\Configuration — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Controller\Administration\TagController — Coverage: 100.0% | Lines: 15 | Complexity: 2 phpMyFAQ\Helper\UserHelper — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Queue\Message\ExportMessage — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Search\Database\PdoSqlsrv — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Search\Database\Sqlite3 — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Category\Tree\CategoryValidator — Coverage: 85.7% | Lines: 14 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\MarkdownController — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Controller\Administration\UpdateController — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Search\Database\PdoSqlite — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Search\Database\Sqlsrv — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Setup\Migration\Versions\Migration400Beta2 — Coverage: 21.4% | Lines: 14 | Complexity: 6 phpMyFAQ\Translation\HtmlPreserver — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Controller\Administration\SessionKeepAliveController — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Faq\RecordVisibility — Coverage: 100.0% | Lines: 13 | Complexity: 11 phpMyFAQ\Form\FormsServiceProvider — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Link\Strategy\NewsStrategy — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Link\Util\TitleSlugifier — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Attachment\AttachmentCollection — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Attachment\Filesystem\File\VanillaFile — Coverage: 50.0% | Lines: 12 | Complexity: 8 phpMyFAQ\Encryption — Coverage: 91.7% | Lines: 12 | Complexity: 8 phpMyFAQ\EventListener\ControllerContainerListener — Coverage: 100.0% | Lines: 12 | Complexity: 7 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation — Coverage: 100.0% | Lines: 12 | Complexity: 7 phpMyFAQ\Auth\PasswordHasher — Coverage: 100.0% | Lines: 11 | Complexity: 8 phpMyFAQ\Configuration\MailSettings — Coverage: 100.0% | Lines: 11 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\SearchController — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Tenant\TenantEventDispatcher — Coverage: 100.0% | Lines: 11 | Complexity: 6 phpMyFAQ\Category\Permission\CategoryPermissionService — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Category\Tree\TreeVisualizer — Coverage: 90.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Controller\Administration\ConfigurationController — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Controller\Administration\PluginController — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Controller\ContainerControllerResolver — Coverage: 100.0% | Lines: 10 | Complexity: 7 phpMyFAQ\Controller\Frontend\Api\TranslationController — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Helper\PermissionHelper — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Seo — Coverage: 100.0% | Lines: 10 | Complexity: 10 phpMyFAQ\Session\SessionWrapper — Coverage: 100.0% | Lines: 10 | Complexity: 7 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation — Coverage: 100.0% | Lines: 10 | Complexity: 6 phpMyFAQ\Strings\AbstractString — Coverage: 20.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension — Coverage: 80.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\WebAuthn\WebAuthnUser — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Configuration\ElasticsearchConfiguration — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Configuration\OpenSearchConfiguration — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Administration\OrphanedFaqsController — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Controller\Frontend\PageNotFoundController — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Entity\InstanceEntity — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Language\LanguageCodes — Coverage: 100.0% | Lines: 9 | Complexity: 7 phpMyFAQ\Queue\MessageBusFactory — Coverage: 100.0% | Lines: 9 | Complexity: 5 phpMyFAQ\Attachment\Filename — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Controller\Api\MetaController — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\CaptchaController — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\PopularSearchesController — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Core\Exception — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Instance\Database\Stopwords — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Link\Strategy\ShowStrategy — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Link\Strategy\SitemapStrategy — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Translation\AbstractTranslationProvider — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Translation\TranslationProviderFactory — Coverage: 100.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Category\CategoryTreeFacade — Coverage: 100.0% | Lines: 7 | Complexity: 7 phpMyFAQ\Controller\Administration\ElasticsearchController — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\LdapController — Coverage: 42.9% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\OpenSearchController — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Exception\ForbiddenException — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Link\Strategy\StrategyRegistry — Coverage: 85.7% | Lines: 7 | Complexity: 7 phpMyFAQ\Queue\DatabaseMessageBus — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory — Coverage: 85.7% | Lines: 7 | Complexity: 7 phpMyFAQ\Tenant\TenantContext — Coverage: 100.0% | Lines: 7 | Complexity: 7 phpMyFAQ\Twig\TwigCacheResolver — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity — Coverage: 100.0% | Lines: 6 | Complexity: 5 phpMyFAQ\Controller\Administration\ReportController — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Entity\Tag — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Export — Coverage: 100.0% | Lines: 6 | Complexity: 6 phpMyFAQ\Export\Pdf\Engine\TcpdfDocument — Coverage: 100.0% | Lines: 6 | Complexity: 6 phpMyFAQ\Instance\Database\PdoSqlite — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Instance\Database\Sqlite3 — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Queue\Message\IndexFaqMessage — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha — Coverage: 50.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2 — Coverage: 50.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Tenant\TenantQuotas — Coverage: 100.0% | Lines: 6 | Complexity: 6 phpMyFAQ\Twig\Extensions\UserNameTwigExtension — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Captcha\Captcha — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Captcha\Helper\CaptchaHelper — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Configuration\UrlSettings — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\AbstractAdministrationApiController — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\LlmsController — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\RobotsController — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta2 — Coverage: 60.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Translation\DTO\TranslationRequest — Coverage: 80.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Attachment\Filesystem\AbstractEntry — Coverage: 100.0% | Lines: 4 | Complexity: 5 phpMyFAQ\Controller\Api\LanguageController — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Api\TitleController — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Api\VersionController — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Frontend\OAuthDiscoveryController — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Permission — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Plugin\PluginEvent — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Setup\InstallationInput — Coverage: 75.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Setup\Migration\Versions\Migration320RC — Coverage: 75.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Translation\DTO\TranslationResult — Coverage: 75.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Configuration\LayoutSettings — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Configuration\SecuritySettings — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Container\ContainerRegistry — Coverage: 0.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Network — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Session\AbstractSession — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Tenant\TenantLifecycleEvent — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Twig\Extensions\CategoryNameTwigExtension — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\Extensions\FormatDateTwigExtension — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\Extensions\PermissionTranslationTwigExtension — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Twig\Extensions\TitleSlugifierTwigExtension — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Attachment\AbstractMimeType — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcClientConfig — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Configuration\SearchSettings — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Instance\Main — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Link\Strategy\GenericPathStrategy — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Pagination\PaginationTemplates — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\InMemoryHtaccessFile — Coverage: 0.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Twig\Extensions\FaqTwigExtension — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Twig\Extensions\TagNameTwigExtension — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Twig\Extensions\TranslateTwigExtension — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Administration\Backup\BackupExecuteResult — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupExportResult — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupParseResult — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcProviderConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Cache\CacheSettings — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\ConfigurationStorageSettings — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\PaginatedResponseOptions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\AccessibilityController — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\CookiePolicyController — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\ImprintController — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\PrivacyController — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\TermsController — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EncryptionTypes\Bcrypt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EncryptionTypes\Hash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Form\FormsFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Pagination\UrlConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\AbstractSearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\McpToolDefinition — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\FormatBytesTwigExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\IsoDateTwigExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\LanguageCodeTwigExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\PluginTwigExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Class CRAP Coverage
phpMyFAQ\Setup\InstallationRunner4513.705.0%
phpMyFAQ\Setup\UpdateRunner2624.7718.7%
phpMyFAQ\Setup\Upgrade1796.3734.4%
phpMyFAQ\Setup\Migration\Versions\Migration420Alpha1086.1634.2%
phpMyFAQ\Setup\Update647.9141.9%
phpMyFAQ\Setup\Installer536.0324.3%
phpMyFAQ\Controller\Administration\Api\DashboardController469.6250.4%
phpMyFAQ\Setup\Migration\AbstractMigration447.9252.4%
phpMyFAQ\Controller\Frontend\FaqController384.5050.9%
phpMyFAQ\Administration\AdminMenuBuilder302.8453.4%
phpMyFAQ\Auth\AuthWebAuthn285.0568.9%
phpMyFAQ\Helper\RegistrationHelper259.5623.5%
phpMyFAQ\Setup\InstallationInputValidator211.8565.2%
phpMyFAQ\Controller\Administration\Api\GroupController171.5472.2%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore169.2966.9%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter159.8356.1%
phpMyFAQ\Controller\Frontend\WebAuthnController153.3641.0%
phpMyFAQ\User149.1289.8%
phpMyFAQ\Controller\Administration\Api\FaqController124.8480.6%
phpMyFAQ\Export\Pdf\Wrapper124.2591.5%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController122.9172.7%
phpMyFAQ\Category\CategoryRepository117.9985.2%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator116.6554.2%
phpMyFAQ\Controller\Administration\Api\UserController115.4686.6%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator115.2987.2%
phpMyFAQ\Mail11495.3%
phpMyFAQ\Attachment\File106.8068.8%
phpMyFAQ\Controller\Administration\Api\UpdateController104.7960.6%
phpMyFAQ\Faq10496.6%
phpMyFAQ\User\UserAuthentication100.8557.1%
phpMyFAQ\ConfigurationMethodsTrait95.7790.5%
phpMyFAQ\Category95.7493.2%
phpMyFAQ\Instance\Client95.5891.8%
phpMyFAQ\Language\Plurals9297.7%
phpMyFAQ\Database\Mysqli91.0672.9%
phpMyFAQ\Queue\Handler\ExportHandler90.0051.4%
phpMyFAQ\Controller\Administration\Api\PageController81.2792.9%
phpMyFAQ\Controller\Administration\AbstractAdministrationController7999.4%
phpMyFAQ\User\UserData78.2379.7%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController77.5587.8%
phpMyFAQ\Permission\MediumPermissionRepository7798.6%
phpMyFAQ\Setup\Installation\SchemaInstaller76.8354.9%
phpMyFAQ\Controller\Administration\Api\ExportController74.9874.1%
phpMyFAQ\Faq\FaqRepository7499.3%
phpMyFAQ\User\CurrentUser73.8388.5%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore73.6660.0%
phpMyFAQ\Permission\MediumPermission73.4888.7%
phpMyFAQ\Administration\Faq73.4476.5%
phpMyFAQ\Database\Sqlsrv72.8480.2%
phpMyFAQ\Link7298.7%
phpMyFAQ\Instance\Search\Elasticsearch69.9188.7%
phpMyFAQ\Search69.6089.7%
phpMyFAQ\Controller\Administration\CategoryController67.9487.0%
phpMyFAQ\Auth\AuthKeycloak67.0092.2%
phpMyFAQ\Database\Pgsql66.5278.0%
phpMyFAQ\Database\PdoSqlsrv66.0179.5%
phpMyFAQ\Controller\AbstractController64.2890.4%
phpMyFAQ\Helper\StatisticsHelper64.0684.2%
phpMyFAQ\Translation6398.7%
phpMyFAQ\Command\SeedTestDataCommand61.9993.6%
phpMyFAQ\Auth\OAuth2\AuthorizationServer61.4970.3%
phpMyFAQ\Administration\Backup6195.0%
phpMyFAQ\Database\PdoSqlite60.6687.7%
phpMyFAQ\System58.9391.6%
phpMyFAQ\Kernel58.4075.8%
phpMyFAQ\Tags5797.1%
phpMyFAQ\Ldap56.8493.5%
phpMyFAQ\Database\Sqlite356.2586.4%
phpMyFAQ\Database\PdoPgsql56.1382.4%
phpMyFAQ\Setup\Installation\DatabaseSchema56100.0%
phpMyFAQ\CustomPage\CustomPageRepository5599.5%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder5497.6%
phpMyFAQ\Database\PdoMysql53.1983.2%
phpMyFAQ\Controller\Frontend\Api\UserController5395.5%
phpMyFAQ\Auth\AuthLdap51.6491.3%
phpMyFAQ\Plugin\PluginManager51.5488.5%
phpMyFAQ\Controller\Administration\Api\AttachmentController49.6666.0%
phpMyFAQ\Controller\Api\FaqController48.1492.0%
phpMyFAQ\Category\Relation47.5093.9%
phpMyFAQ\Setup\HtaccessUpdater47.1064.3%
phpMyFAQ\Helper\SearchHelper46.8082.8%
phpMyFAQ\Translation\ContentTranslationService45100.0%
phpMyFAQ\Setup\Migration\MigrationTracker43.8776.2%
phpMyFAQ\Auth\OAuth2\Repository\UserRepository43.0518.2%
phpMyFAQ\Helper\CategoryHelper42.7080.4%
phpMyFAQ\Captcha\BuiltinCaptcha42.5693.2%
phpMyFAQ\Push\WebPushService42.5471.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine42.2187.2%
phpMyFAQ\Setup\Migration\MigrationExecutor41.8789.5%
phpMyFAQ\Search\SearchService41.8089.6%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder41.6592.7%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder41.4867.3%
phpMyFAQ\Chat4198.7%
phpMyFAQ\Controller\Frontend\Api\FaqController41.0091.5%
phpMyFAQ\Api\Filtering\FilterRequest39.9985.5%
phpMyFAQ\Template\ThemeManager39.9191.6%
phpMyFAQ\Faq\Permission39.5383.1%
phpMyFAQ\Entity\FaqEntity39100.0%
phpMyFAQ\Instance\Search\OpenSearch38.2586.2%
phpMyFAQ\Faq\Statistics38100.0%
phpMyFAQ\Category\Order3798.3%
phpMyFAQ\News\NewsRepository37100.0%
phpMyFAQ\Service\Gravatar36.5459.3%
phpMyFAQ\Helper\LanguageHelper36.1363.8%
phpMyFAQ\Controller\Frontend\UserController36.0279.7%
phpMyFAQ\Controller\Frontend\AuthenticationController3698.6%
phpMyFAQ\User\UserSession3695.5%
phpMyFAQ\Controller\Frontend\Api\CommentController35.6591.9%
phpMyFAQ\Routing\AttributeRouteLoader35.5092.6%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController35.3693.3%
phpMyFAQ\Attachment\AbstractAttachment35100.0%
phpMyFAQ\Faq\FaqDisplayService34.8790.9%
phpMyFAQ\Faq\QueryHelper34.7591.4%
phpMyFAQ\Controller\Administration\AuthenticationController34.1887.1%
phpMyFAQ\Session\Token34100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation33.6665.6%
phpMyFAQ\Bootstrapper33.2493.9%
phpMyFAQ\Controller\Frontend\AbstractFrontController3395.9%
phpMyFAQ\Controller\Api\CategoryController32.8083.5%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver32.6683.7%
phpMyFAQ\Permission\GroupCategoryPermissionRepository32.3792.9%
phpMyFAQ\Controller\Administration\Api\InstanceController32.3386.3%
phpMyFAQ\Setup\Migration\Versions\Migration32332.1127.8%
phpMyFAQ\StopWords32100.0%
phpMyFAQ\User\Tracking3295.2%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController31.7990.6%
phpMyFAQ\Permission\BasicPermission31.4492.3%
phpMyFAQ\Storage\FilesystemStorage31.1394.8%
phpMyFAQ\Category\Permission31100.0%
phpMyFAQ\Controller\Administration\Api\ApiKeyController31100.0%
phpMyFAQ\EventListener\ApiExceptionListener31100.0%
phpMyFAQ\Notification3198.9%
phpMyFAQ\Search\SearchDatabase3197.2%
phpMyFAQ\Storage\StorageFactory30.9384.5%
phpMyFAQ\Plugin\PluginDiscovery30.3792.6%
phpMyFAQ\Controller\Frontend\Api\SetupController30.3692.6%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha230.1212.5%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController29100.0%
phpMyFAQ\CustomPage29100.0%
phpMyFAQ\Entity\NewsMessage28100.0%
phpMyFAQ\Permission\BasicPermissionRepository2899.0%
phpMyFAQ\Auth\EntraId\OAuth2795.1%
phpMyFAQ\Controller\Frontend\Api\QuestionController2797.4%
phpMyFAQ\Controller\Frontend\CategoryController2799.2%
phpMyFAQ\Filesystem\Filesystem2795.3%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect27100.0%
phpMyFAQ\Storage\S3Storage2797.1%
phpMyFAQ\Utils2798.8%
phpMyFAQ\Auth\AuthDatabase26.8389.3%
phpMyFAQ\Language\LanguageDetector26.6890.0%
phpMyFAQ\Administration\Category26.3592.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect26.2792.6%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect26.2792.6%
phpMyFAQ\Search\SearchResultSet26.2193.2%
phpMyFAQ\Entity\Comment26.1373.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect26.1294.4%
phpMyFAQ\Administration\SessionRepository2698.6%
phpMyFAQ\Comment\CommentsRepository2698.3%
phpMyFAQ\Controller\Api\OAuth2Controller2698.7%
phpMyFAQ\Entity\CustomPageEntity26100.0%
phpMyFAQ\Pagination25.3991.4%
phpMyFAQ\Attachment\Filesystem\AbstractFile25.2692.5%
phpMyFAQ\Setup\UpdateToken25.0487.8%
phpMyFAQ\Auth\OAuth2\ResourceServer25.0376.7%
phpMyFAQ\Helper\SvgSanitizer2597.2%
phpMyFAQ\Controller\Administration\Api\TranslationController24.5380.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider24.4291.0%
phpMyFAQ\EventListener\WebExceptionListener24.2480.6%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta24.0262.9%
phpMyFAQ\Controller\Administration\BackupController2495.5%
phpMyFAQ\Controller\Administration\FaqController2498.7%
phpMyFAQ\Filter24100.0%
phpMyFAQ\Push\PushSubscriptionRepository2498.2%
phpMyFAQ\Setup\Migration\Versions\Migration400Beta223.4621.4%
phpMyFAQ\Instance\Setup23.4490.6%
phpMyFAQ\News23100.0%
phpMyFAQ\Search\Database\Pgsql2398.6%
phpMyFAQ\Scheduler\TaskScheduler22.8288.1%
phpMyFAQ\Command\InstallCommand22.7867.4%
phpMyFAQ\Controller\Frontend\SetupController22.5884.7%
phpMyFAQ\Administration\Session22.1973.8%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider22.1293.7%
phpMyFAQ\Glossary22.1094.0%
phpMyFAQ\Attachment\AttachmentService22100.0%
phpMyFAQ\Strings\Mbstring22100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha21.5272.2%
phpMyFAQ\Routing\RouteCacheManager21.1193.7%
phpMyFAQ\Api\Sorting\SortRequest2197.1%
phpMyFAQ\Category\CategoryCache21100.0%
phpMyFAQ\Category\Image2197.8%
phpMyFAQ\Faq\Import2197.3%
phpMyFAQ\Forms2195.2%
phpMyFAQ\Controller\Administration\Api\ImageController20.5083.9%
phpMyFAQ\Tenant\TenantQuotaEnforcer20.4289.8%
phpMyFAQ\Category\Tree\TreePathResolver20.4090.0%
phpMyFAQ\Auth\ApiKeyAuthenticator20.3890.2%
phpMyFAQ\Attachment\AttachmentFactory2098.3%
phpMyFAQ\Entity\CategoryEntity20100.0%
phpMyFAQ\Instance20100.0%
phpMyFAQ\Search\Database\PdoPgsql2098.5%
phpMyFAQ\User\CurrentUserSessionLookupTrait19.6687.8%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation19.6354.2%
phpMyFAQ\Command\CreateHashesCommand19.5672.7%
phpMyFAQ\Queue\Worker19.3490.2%
phpMyFAQ\Controller\Administration\Api\StopWordController19.2666.7%
phpMyFAQ\Language19100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry1996.2%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider1995.2%
phpMyFAQ\Twig\TwigWrapper1995.0%
phpMyFAQ\Helper\FaqHelper18.7178.0%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache18.3589.7%
phpMyFAQ\Sitemap18.1392.7%
phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter18.1230.4%
phpMyFAQ\Auth\AuthSso18.0694.4%
phpMyFAQ\Administration\Backup\BackupRepository18100.0%
phpMyFAQ\Auth\EntraId\JwksProvider1895.0%
phpMyFAQ\Bookmark1897.1%
phpMyFAQ\Category\CategoryService18100.0%
phpMyFAQ\Controller\Frontend\Api\RegistrationController1897.3%
phpMyFAQ\Entity\QuestionEntity18100.0%
phpMyFAQ\Environment1895.0%
phpMyFAQ\Question\QuestionRepository18100.0%
phpMyFAQ\Search\Search\Elasticsearch1896.2%
phpMyFAQ\Setup\Migration\MigrationResult18100.0%
phpMyFAQ\Strings1895.2%
phpMyFAQ\Controller\Administration\InstanceController17.4888.2%
phpMyFAQ\Api\Pagination\PaginationMetadata17100.0%
phpMyFAQ\Auth\Oidc\OidcClient17100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController1797.3%
phpMyFAQ\Entity\AdminLog17100.0%
phpMyFAQ\News\NewsService17100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool1799.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder17100.0%
phpMyFAQ\Session\RedisSessionHandler16.8080.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController16.3677.1%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory16.0693.9%
phpMyFAQ\Export\Pdf16.0693.8%
phpMyFAQ\Administration\Report16.0494.4%
phpMyFAQ\Attachment\Filesystem\File\VanillaFile16.0050.0%
phpMyFAQ\Comments1696.6%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore1696.1%
phpMyFAQ\Entity\PushSubscriptionEntity16100.0%
phpMyFAQ\Entity\SeoEntity16100.0%
phpMyFAQ\Queue\Transport\DatabaseTransport1696.5%
phpMyFAQ\Strings\StringBasic1695.0%
phpMyFAQ\Controller\Administration\Api\LdapController15.8756.1%
phpMyFAQ\Auth15.8284.6%
phpMyFAQ\Database\DatabaseHelper15.7685.0%
phpMyFAQ\Mail\Provider\SesProvider15.7479.3%
phpMyFAQ\Controller\Administration\Api\FormController15.7285.3%
phpMyFAQ\Auth\AuthEntraId15.5780.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation15.4487.5%
phpMyFAQ\Api\MetaService15.4180.7%
phpMyFAQ\Controller\Administration\Api\GlossaryController15.3675.9%
phpMyFAQ\Category\Tree\TreeBuilder15.2589.7%
phpMyFAQ\Administration\DashboardLayout15.0892.9%
phpMyFAQ\Controller\Administration\Api\NewsController15.0594.1%
phpMyFAQ\Administration\AdminLog1595.7%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository15100.0%
phpMyFAQ\Controller\Frontend\Api\PushController15100.0%
phpMyFAQ\Glossary\GlossaryRepository1597.2%
phpMyFAQ\Setup\Migration\Operations\SqlOperation15100.0%
phpMyFAQ\Setup\EnvironmentConfigurator14.8084.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation14.5673.9%
phpMyFAQ\Controller\Administration\Api\CategoryController14.2489.2%
phpMyFAQ\Controller\Api\RegistrationController14.1890.2%
phpMyFAQ\Controller\Administration\Api\StatisticsController14.0281.8%
phpMyFAQ\Container\ContainerCacheManager1497.1%
phpMyFAQ\Controller\Frontend\Api\ContactController14100.0%
phpMyFAQ\Controller\Frontend\Api\VotingController14100.0%
phpMyFAQ\Form\FormsRepository14100.0%
phpMyFAQ\Helper\AttachmentHelper14100.0%
phpMyFAQ\Instance\Database\PdoPgsql1495.5%
phpMyFAQ\Mail\Provider\MailgunProvider14100.0%
phpMyFAQ\Queue\Handler\SendMailHandler14100.0%
phpMyFAQ\Search\Search\OpenSearch1497.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation13.6977.3%
phpMyFAQ\Controller\Administration\Api\AdminLogController13.4978.2%
phpMyFAQ\Controller\Administration\Api\TagController13.4686.0%
phpMyFAQ\Administration\RemoteApiClient13.1989.7%
phpMyFAQ\Bootstrap\SearchClientFactory13.1690.2%
phpMyFAQ\Controller\Frontend\Api\BookmarkController13.1690.2%
phpMyFAQ\Search\SearchFactory13.1580.0%
phpMyFAQ\Cache\CacheFactory13.1250.0%
phpMyFAQ\Administration\TranslationStatistics13.1091.5%
phpMyFAQ\Controller\Administration\Api\QuestionController13.0892.3%
phpMyFAQ\Administration\AdminLogRepository13100.0%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository1397.4%
phpMyFAQ\Category\CategoryPermissionContext13100.0%
phpMyFAQ\Configuration\LdapSettings13100.0%
phpMyFAQ\Controller\Administration\PasswordChangeController1398.2%
phpMyFAQ\Database13100.0%
phpMyFAQ\Instance\Database\Pgsql13100.0%
phpMyFAQ\Queue\Handler\IndexFaqHandler13100.0%
phpMyFAQ\Search\Rating\RatingRepository1398.1%
phpMyFAQ\Setup\AbstractSetup13.0081.0%
phpMyFAQ\Visits\VisitsRepository1398.4%
phpMyFAQ\Controller\Administration\SystemInformationController12.6975.9%
phpMyFAQ\Controller\Administration\Api\OpenSearchController12.3986.0%
phpMyFAQ\Controller\Administration\Api\MediaBrowserController12.1689.7%
phpMyFAQ\Controller\Api\SearchController12.1689.7%
phpMyFAQ\Attachment\Filesystem\File\EncryptedFile1296.0%
phpMyFAQ\Configuration\DatabaseConfiguration1296.6%
phpMyFAQ\Configuration\MultisiteConfigurationLocator12100.0%
phpMyFAQ\Container\ContainerRegistry120.0%
phpMyFAQ\Date12100.0%
phpMyFAQ\Entity\ChatMessage12100.0%
phpMyFAQ\Entity\Vote12100.0%
phpMyFAQ\EventListener\RouterListener12100.0%
phpMyFAQ\Mail\Provider\SendGridProvider12100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder1299.3%
phpMyFAQ\Translation\Provider\LibreTranslationProvider1296.6%
phpMyFAQ\User\TwoFactor12100.0%
phpMyFAQ\Administration\FileDownloader11.9780.0%
phpMyFAQ\Controller\Administration\DashboardController11.4568.8%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation11.1988.5%
phpMyFAQ\Setup\Migration\Versions\Migration40511.1563.3%
phpMyFAQ\User\PasswordResetTokenService11.0294.7%
phpMyFAQ\Administration\Revision11100.0%
phpMyFAQ\Api\Response\ApiResponse11100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession1195.2%
phpMyFAQ\Bootstrap\PhpConfigurator1196.7%
phpMyFAQ\Category\Startpage11100.0%
phpMyFAQ\Configuration\ConfigurationRepository11100.0%
phpMyFAQ\Controller\Administration\GroupController1196.7%
phpMyFAQ\Controller\Api\AbstractApiController11100.0%
phpMyFAQ\Faq\RecordVisibility11100.0%
phpMyFAQ\Mail\Smtp11100.0%
phpMyFAQ\Routing\RouteCollectionBuilder1196.2%
phpMyFAQ\Search\Database\Mysqli11100.0%
phpMyFAQ\Search\Database\PdoMysql11100.0%
phpMyFAQ\Services11100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider1196.1%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha310.9964.0%
phpMyFAQ\Controller\Api\BackupController10.5382.6%
phpMyFAQ\Faq\FaqCreationService10.4283.9%
phpMyFAQ\Controller\Frontend\Api\ChatSseController10.4184.0%
phpMyFAQ\Category\Tree\CategoryValidator10.2985.7%
phpMyFAQ\Controller\Administration\Api\ConfigurationController10.2087.5%
phpMyFAQ\Link\Util\LinkQueryParser10.1289.5%
phpMyFAQ\Service\McpServer\McpSdkRuntime10.1090.0%
phpMyFAQ\Visits10.0990.5%
phpMyFAQ\Controller\Frontend\CustomPageController10.0591.9%
phpMyFAQ\Storage\TenantScopedStorage10.0293.8%
phpMyFAQ\Api\OAuthDiscoveryService10100.0%
phpMyFAQ\Auth\AuthHttp10100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository10100.0%
phpMyFAQ\Captcha\GoogleRecaptcha10100.0%
phpMyFAQ\Category\Language\CategoryLanguageService10100.0%
phpMyFAQ\Command\McpServerCommand1098.1%
phpMyFAQ\Controller\Administration\Api\CommentController1095.8%
phpMyFAQ\Controller\Administration\PageController10100.0%
phpMyFAQ\Controller\Api\PdfController1096.2%
phpMyFAQ\Controller\Frontend\AttachmentController10100.0%
phpMyFAQ\Controller\Frontend\QuestionsController1098.7%
phpMyFAQ\Controller\Frontend\SearchController1095.6%
phpMyFAQ\EventListener\LanguageListener10100.0%
phpMyFAQ\Helper\AbstractHelper10100.0%
phpMyFAQ\Instance\Database1096.8%
phpMyFAQ\Question1096.8%
phpMyFAQ\Seo10100.0%
phpMyFAQ\Seo\SeoRepository10100.0%
phpMyFAQ\Tenant\TenantContextResolver1096.2%
phpMyFAQ\Controller\SitemapController9.4282.8%
phpMyFAQ\Seo\SitemapXmlService9.2173.3%
phpMyFAQ\Auth\AuthChain9100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument9100.0%
phpMyFAQ\Cache\CacheSettingsResolver9100.0%
phpMyFAQ\Configuration\LdapConfiguration9100.0%
phpMyFAQ\Controller\Administration\UserController9100.0%
phpMyFAQ\Core\Error9100.0%
phpMyFAQ\EventListener\ApiRateLimiterListener995.7%
phpMyFAQ\Glossary\GlossaryHelper9100.0%
phpMyFAQ\Instance\Database\Mysqli9100.0%
phpMyFAQ\Instance\Database\PdoMysql9100.0%
phpMyFAQ\User\TrackingDataRedactor9100.0%
phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer8.9046.2%
phpMyFAQ\Encryption8.0491.7%
phpMyFAQ\Controller\Frontend\NewsController8.0194.6%
phpMyFAQ\Administration\RatingStatistics8100.0%
phpMyFAQ\Administration\RecentUsers8100.0%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator8100.0%
phpMyFAQ\Auth\PasswordHasher8100.0%
phpMyFAQ\Bookmark\BookmarkRepository8100.0%
phpMyFAQ\Controller\Frontend\SitemapController8100.0%
phpMyFAQ\Faq\QuestionService8100.0%
phpMyFAQ\Form\FormsHelper895.8%
phpMyFAQ\Helper\QuestionHelper8100.0%
phpMyFAQ\Instance\Database\PdoSqlsrv8100.0%
phpMyFAQ\Instance\Database\Sqlsrv8100.0%
phpMyFAQ\Link\Strategy\SearchStrategy8100.0%
phpMyFAQ\Rating8100.0%
phpMyFAQ\Controller\Frontend\PdfController7.2383.3%
phpMyFAQ\Link\Strategy\StrategyRegistry7.1485.7%
phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory7.1485.7%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository7100.0%
phpMyFAQ\Auth\Oidc\OidcSession7100.0%
phpMyFAQ\Category\CategoryTreeFacade7100.0%
phpMyFAQ\Controller\Administration\StatisticsSessionsController7100.0%
phpMyFAQ\Controller\Api\OpenQuestionController797.4%
phpMyFAQ\Controller\ContainerControllerResolver7100.0%
phpMyFAQ\EventListener\ControllerContainerListener7100.0%
phpMyFAQ\Helper\TagsHelper7100.0%
phpMyFAQ\Language\LanguageCodes7100.0%
phpMyFAQ\Mail\Builtin7100.0%
phpMyFAQ\Session\SessionWrapper7100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation7100.0%
phpMyFAQ\Tenant\TenantContext7100.0%
phpMyFAQ\Translation\TranslationProviderFactory7100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Alpha6.2680.6%
phpMyFAQ\Faq\MetaData6.0887.0%
phpMyFAQ\Controller\Administration\Api\SessionController6.0292.0%
phpMyFAQ\Administration\Changelog6100.0%
phpMyFAQ\Administration\ReportRepository6100.0%
phpMyFAQ\Api\Pagination\PaginationRequest6100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService6100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser6100.0%
phpMyFAQ\Bookmark\BookmarkFormatter697.2%
phpMyFAQ\Category\Navigation\BreadcrumbsHtmlRenderer6100.0%
phpMyFAQ\Configuration\MailSettings6100.0%
phpMyFAQ\Controller\Administration\FormsController6100.0%
phpMyFAQ\Controller\Administration\NewsController6100.0%
phpMyFAQ\Controller\Administration\OpenQuestionsController6100.0%
phpMyFAQ\Controller\Api\GlossaryController6100.0%
phpMyFAQ\Entity\InstanceEntity6100.0%
phpMyFAQ\Export6100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfDocument6100.0%
phpMyFAQ\Http\RateLimiter6100.0%
phpMyFAQ\Setup\InMemoryHtaccessFile60.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation6100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation6100.0%
phpMyFAQ\Setup\Migration\Versions\Migration4076100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha6.0050.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha26.0050.0%
phpMyFAQ\Tenant\TenantEventDispatcher6100.0%
phpMyFAQ\Tenant\TenantQuotas6100.0%
phpMyFAQ\Command\UpdateCommand5.8268.0%
phpMyFAQ\Controller\Administration\Api\PushController5.5871.4%
phpMyFAQ\Controller\Api\QuestionController5.3376.5%
phpMyFAQ\Api\ProblemDetails5.2080.0%
phpMyFAQ\Translation\DTO\TranslationRequest5.2080.0%
phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension5.2080.0%
phpMyFAQ\Controller\Api\TagController5.1283.3%
phpMyFAQ\Controller\Api\LoginController5.1084.0%
phpMyFAQ\Category\Tree\TreeVisualizer5.0390.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta25.0260.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry5100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity5100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository5.0094.4%
phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper596.8%
phpMyFAQ\Category\Navigation\BreadcrumbsBuilder5100.0%
phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver5100.0%
phpMyFAQ\Configuration\UrlSettings5100.0%
phpMyFAQ\Controller\Frontend\Api\AutoCompleteController5100.0%
phpMyFAQ\Controller\Frontend\ContactController5100.0%
phpMyFAQ\Link\Strategy\FaqStrategy5100.0%
phpMyFAQ\Queue\Message\ExportMessage5100.0%
phpMyFAQ\Queue\Message\SendMailMessage5100.0%
phpMyFAQ\Queue\MessageBusFactory5100.0%
phpMyFAQ\Setup\Migration\Versions\Migration4095100.0%
phpMyFAQ\Twig\TwigCacheResolver5100.0%
phpMyFAQ\Setup\InstallationInput4.2575.0%
phpMyFAQ\Setup\Migration\Versions\Migration320RC4.2575.0%
phpMyFAQ\Translation\DTO\TranslationResult4.2575.0%
phpMyFAQ\Strings\AbstractString4.0520.0%
phpMyFAQ\Controller\Administration\Api\SearchController4.0190.9%
phpMyFAQ\Controller\Frontend\ErrorController4.0193.1%
phpMyFAQ\Attachment\Filename4100.0%
phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper4100.0%
phpMyFAQ\Category\Permission\CategoryPermissionService4100.0%
phpMyFAQ\Configuration4100.0%
phpMyFAQ\Controller\Administration\CommentsController4100.0%
phpMyFAQ\Controller\Api\AttachmentController4.0094.7%
phpMyFAQ\Controller\Api\CommentController497.0%
phpMyFAQ\Controller\Frontend\Api\PopularSearchesController4100.0%
phpMyFAQ\Controller\Frontend\Api\TranslationController4100.0%
phpMyFAQ\Controller\Frontend\StartpageController4100.0%
phpMyFAQ\Entity\Tag4100.0%
phpMyFAQ\Export\Json496.4%
phpMyFAQ\Form\FormsServiceProvider4100.0%
phpMyFAQ\Helper\MailHelper4100.0%
phpMyFAQ\Helper\UserHelper4100.0%
phpMyFAQ\Instance\Database\PdoSqlite4100.0%
phpMyFAQ\Instance\Database\Sqlite34100.0%
phpMyFAQ\Instance\Database\Stopwords4100.0%
phpMyFAQ\Link\Strategy\ShowStrategy4100.0%
phpMyFAQ\Permission4100.0%
phpMyFAQ\Plugin\PluginEvent4100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha34100.0%
phpMyFAQ\Translation\AbstractTranslationProvider4100.0%
phpMyFAQ\Attachment\AttachmentCollection3100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository3100.0%
phpMyFAQ\Configuration\ElasticsearchConfiguration3100.0%
phpMyFAQ\Configuration\LayoutSettings3100.0%
phpMyFAQ\Configuration\OpenSearchConfiguration3100.0%
phpMyFAQ\Configuration\SecuritySettings3100.0%
phpMyFAQ\Controller\Administration\Api\MarkdownController3100.0%
phpMyFAQ\Controller\Administration\AttachmentsController3100.0%
phpMyFAQ\Controller\Administration\RatingController3100.0%
phpMyFAQ\Controller\Administration\StatisticsSearchController3100.0%
phpMyFAQ\Controller\Administration\StickyFaqsController3100.0%
phpMyFAQ\Controller\Api\GroupController3100.0%
phpMyFAQ\Controller\Api\LanguageController3100.0%
phpMyFAQ\Controller\Api\MetaController3100.0%
phpMyFAQ\Controller\Api\TitleController3100.0%
phpMyFAQ\Controller\Api\VersionController3100.0%
phpMyFAQ\Controller\Frontend\Api\CaptchaController3100.0%
phpMyFAQ\Controller\Frontend\ChatController3100.0%
phpMyFAQ\Controller\Frontend\GlossaryController3100.0%
phpMyFAQ\Controller\Frontend\OAuthDiscoveryController3100.0%
phpMyFAQ\Helper\PermissionHelper3100.0%
phpMyFAQ\Link\Strategy\NewsStrategy3100.0%
phpMyFAQ\Link\Util\TitleSlugifier3100.0%
phpMyFAQ\Queue\DatabaseMessageBus3100.0%
phpMyFAQ\Queue\Message\IndexFaqMessage3100.0%
phpMyFAQ\Search\Database\PdoSqlite3100.0%
phpMyFAQ\Search\Database\PdoSqlsrv3100.0%
phpMyFAQ\Search\Database\Sqlite33100.0%
phpMyFAQ\Search\Database\Sqlsrv3100.0%
phpMyFAQ\Session\AbstractSession3100.0%
phpMyFAQ\Tenant\TenantLifecycleEvent3100.0%
phpMyFAQ\Twig\Extensions\PermissionTranslationTwigExtension3100.0%
phpMyFAQ\Twig\Extensions\TitleSlugifierTwigExtension3100.0%
phpMyFAQ\Controller\Administration\LdapController2.7542.9%
phpMyFAQ\Controller\Administration\Api\AbstractAdministrationApiController2.0380.0%
phpMyFAQ\Controller\Administration\ElasticsearchController2.0185.7%
phpMyFAQ\Controller\Administration\OpenSearchController2.0185.7%
phpMyFAQ\Attachment\AbstractMimeType2100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig2100.0%
phpMyFAQ\Captcha\Captcha2100.0%
phpMyFAQ\Captcha\Helper\CaptchaHelper2100.0%
phpMyFAQ\Configuration\SearchSettings2100.0%
phpMyFAQ\Controller\Administration\ExportController2100.0%
phpMyFAQ\Controller\Administration\GlossaryController2100.0%
phpMyFAQ\Controller\Administration\OrphanedFaqsController2100.0%
phpMyFAQ\Controller\Administration\PluginController2100.0%
phpMyFAQ\Controller\Administration\TagController2100.0%
phpMyFAQ\Controller\Frontend\OverviewController2100.0%
phpMyFAQ\Controller\Frontend\PageNotFoundController2100.0%
phpMyFAQ\Link\Strategy\GenericPathStrategy2100.0%
phpMyFAQ\Network2100.0%
phpMyFAQ\Pagination\PaginationTemplates2100.0%
phpMyFAQ\Relation2100.0%
phpMyFAQ\Translation\HtmlPreserver2100.0%
phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension2100.0%
phpMyFAQ\Twig\Extensions\TranslateTwigExtension2100.0%
phpMyFAQ\Twig\Extensions\UserNameTwigExtension2100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait2100.0%
phpMyFAQ\Administration\Backup\BackupExecuteResult1100.0%
phpMyFAQ\Administration\Backup\BackupExportResult1100.0%
phpMyFAQ\Administration\Backup\BackupParseResult1100.0%
phpMyFAQ\Auth\Oidc\OidcProviderConfig1100.0%
phpMyFAQ\Cache\CacheSettings1100.0%
phpMyFAQ\Configuration\Storage\ConfigurationStorageSettings1100.0%
phpMyFAQ\Controller\Administration\AdminLogController1100.0%
phpMyFAQ\Controller\Administration\ConfigurationController1100.0%
phpMyFAQ\Controller\Administration\ImportController1100.0%
phpMyFAQ\Controller\Administration\ReportController1100.0%
phpMyFAQ\Controller\Administration\SessionKeepAliveController1100.0%
phpMyFAQ\Controller\Administration\StopWordsController1100.0%
phpMyFAQ\Controller\Administration\UpdateController1100.0%
phpMyFAQ\Controller\Api\NewsController1100.0%
phpMyFAQ\Controller\Api\PaginatedResponseOptions1100.0%
phpMyFAQ\Controller\Exception\ForbiddenException1100.0%
phpMyFAQ\Controller\Frontend\AccessibilityController1100.0%
phpMyFAQ\Controller\Frontend\CookiePolicyController1100.0%
phpMyFAQ\Controller\Frontend\ImprintController1100.0%
phpMyFAQ\Controller\Frontend\PrivacyController1100.0%
phpMyFAQ\Controller\Frontend\TermsController1100.0%
phpMyFAQ\Controller\LlmsController1100.0%
phpMyFAQ\Controller\RobotsController1100.0%
phpMyFAQ\Core\Exception1100.0%
phpMyFAQ\EncryptionTypes\Bcrypt1100.0%
phpMyFAQ\EncryptionTypes\Hash1100.0%
phpMyFAQ\Form\FormsFactory1100.0%
phpMyFAQ\Instance\Main1100.0%
phpMyFAQ\Link\Strategy\SitemapStrategy1100.0%
phpMyFAQ\Pagination\UrlConfig1100.0%
phpMyFAQ\Search\AbstractSearch1100.0%
phpMyFAQ\Service\McpServer\McpToolDefinition1100.0%
phpMyFAQ\Twig\Extensions\CategoryNameTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\FaqTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\FormatBytesTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\FormatDateTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\IsoDateTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\LanguageCodeTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\PluginTwigExtension1100.0%
phpMyFAQ\Twig\Extensions\TagNameTwigExtension1100.0%
phpMyFAQ\Attachment\AttachmentException0100.0%
phpMyFAQ\Attachment\Filesystem\File\FileException0100.0%
phpMyFAQ\Auth\AuthException0100.0%
phpMyFAQ\Auth\OAuth2\Entity\AccessTokenEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\AuthCodeEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\RefreshTokenEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\ScopeEntity0100.0%
phpMyFAQ\Auth\OAuth2\Entity\UserEntity0100.0%
phpMyFAQ\Core\Exception\DatabaseConnectionException0100.0%
phpMyFAQ\Entity\CommentType0100.0%
phpMyFAQ\Enums\AdminLogType0100.0%
phpMyFAQ\Enums\AttachmentStorageType0100.0%
phpMyFAQ\Enums\AuthenticationSourceType0100.0%
phpMyFAQ\Enums\BackupType0100.0%
phpMyFAQ\Enums\DownloadHostType0100.0%
phpMyFAQ\Enums\Forms\AddNewFaqInputIds0100.0%
phpMyFAQ\Enums\Forms\AskQuestionInputIds0100.0%
phpMyFAQ\Enums\Forms\FormIds0100.0%
phpMyFAQ\Enums\PermissionType0100.0%
phpMyFAQ\Enums\ReleaseType0100.0%
phpMyFAQ\Enums\SeoType0100.0%
phpMyFAQ\Enums\SessionActionType0100.0%
phpMyFAQ\Enums\TenantIsolationMode0100.0%
phpMyFAQ\Plugin\PluginException0100.0%
phpMyFAQ\Search\Exception0100.0%
phpMyFAQ\Storage\StorageException0100.0%
phpMyFAQ\Tenant\QuotaExceededException0100.0%
phpMyFAQ\Translation\Exception\ApiException0100.0%
phpMyFAQ\Translation\Exception\RateLimitException0100.0%
phpMyFAQ\Translation\Exception\TranslationException0100.0%
phpMyFAQ\Translation\Exception\UnsupportedLanguageException0100.0%
phpMyFAQ\Twig\TemplateException0100.0%
phpMyFAQ\User\UserException0100.0%

Methods

Bubble size = executable lines. Hover for details, click to navigate.

0% 20% 40% 60% 80% 100% 0 20 40 60 80 100 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::up — Coverage: 34.1% | Lines: 816 | Complexity: 57 phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultConfig — Coverage: 99.5% | Lines: 214 | Complexity: 3 phpMyFAQ\Controller\Frontend\FaqController::show — Coverage: 19.5% | Lines: 190 | Complexity: 33 phpMyFAQ\Controller\Administration\CategoryController::update — Coverage: 80.6% | Lines: 180 | Complexity: 24 phpMyFAQ\Controller\Administration\AbstractAdministrationController::getSecondLevelEntries — Coverage: 100.0% | Lines: 156 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\FaqController::create — Coverage: 68.6% | Lines: 153 | Complexity: 18 phpMyFAQ\Controller\Administration\Api\FaqController::update — Coverage: 78.6% | Lines: 140 | Complexity: 23 phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultFormInputs — Coverage: 100.0% | Lines: 137 | Complexity: 1 phpMyFAQ\Controller\Administration\BackupController::restore — Coverage: 94.4% | Lines: 126 | Complexity: 18 phpMyFAQ\Controller\Administration\CategoryController::create — Coverage: 75.9% | Lines: 116 | Complexity: 14 phpMyFAQ\Controller\Administration\Api\ImageController::upload — Coverage: 83.9% | Lines: 112 | Complexity: 19 phpMyFAQ\Controller\Frontend\Api\FaqController::create — Coverage: 91.1% | Lines: 112 | Complexity: 37 phpMyFAQ\Language\Plurals::plural — Coverage: 100.0% | Lines: 112 | Complexity: 83 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::up — Coverage: 71.4% | Lines: 112 | Complexity: 13 phpMyFAQ\Utils::setHighlightedString — Coverage: 100.0% | Lines: 106 | Complexity: 2 phpMyFAQ\Helper\SearchHelper::getSearchResult — Coverage: 63.9% | Lines: 97 | Complexity: 17 phpMyFAQ\Setup\UpdateRunner::displayDryRunReport — Coverage: 0.0% | Lines: 95 | Complexity: 26 phpMyFAQ\Command\SeedTestDataCommand::purge — Coverage: 95.7% | Lines: 94 | Complexity: 16 phpMyFAQ\Controller\Administration\FaqController::edit — Coverage: 98.9% | Lines: 94 | Complexity: 8 phpMyFAQ\Controller\Frontend\Api\CommentController::create — Coverage: 91.5% | Lines: 94 | Complexity: 32 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::callback — Coverage: 80.4% | Lines: 92 | Complexity: 17 phpMyFAQ\Faq::getFaqsDataByCategoryId — Coverage: 98.9% | Lines: 92 | Complexity: 7 phpMyFAQ\Controller\Administration\AbstractAdministrationController::getPageFlags — Coverage: 100.0% | Lines: 87 | Complexity: 61 phpMyFAQ\Controller\Frontend\SearchController::index — Coverage: 95.3% | Lines: 85 | Complexity: 7 phpMyFAQ\User\UserSession::userTracking — Coverage: 94.1% | Lines: 85 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\InstanceController::add — Coverage: 83.3% | Lines: 84 | Complexity: 21 phpMyFAQ\Controller\Administration\Api\PageController::create — Coverage: 90.2% | Lines: 82 | Complexity: 23 phpMyFAQ\Controller\Api\CategoryController::create — Coverage: 75.6% | Lines: 78 | Complexity: 15 phpMyFAQ\Controller\Frontend\AbstractFrontController::getHeader — Coverage: 100.0% | Lines: 78 | Complexity: 9 phpMyFAQ\Controller\Administration\DashboardController::index — Coverage: 68.4% | Lines: 76 | Complexity: 8 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getSupportedLanguages — Coverage: 100.0% | Lines: 76 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\ChatSseController::stream — Coverage: 83.8% | Lines: 74 | Complexity: 9 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::logSecurityConfigChanges — Coverage: 93.2% | Lines: 73 | Complexity: 11 phpMyFAQ\Command\InstallCommand::configure — Coverage: 100.0% | Lines: 71 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::save — Coverage: 82.9% | Lines: 70 | Complexity: 27 phpMyFAQ\Controller\Frontend\FaqController::add — Coverage: 98.6% | Lines: 70 | Complexity: 7 phpMyFAQ\Export\Pdf::generate — Coverage: 91.4% | Lines: 70 | Complexity: 7 phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::up — Coverage: 80.0% | Lines: 70 | Complexity: 4 phpMyFAQ\Queue\Handler\ExportHandler::__invoke — Coverage: 50.7% | Lines: 69 | Complexity: 23 phpMyFAQ\Auth\AuthWebAuthn::register — Coverage: 16.2% | Lines: 68 | Complexity: 31 phpMyFAQ\Search\SearchService::processSearch — Coverage: 98.5% | Lines: 68 | Complexity: 13 phpMyFAQ\Controller\Frontend\Api\QuestionController::create — Coverage: 98.5% | Lines: 67 | Complexity: 23 phpMyFAQ\Setup\InstallationRunner::stepValidateConnectivity — Coverage: 0.0% | Lines: 67 | Complexity: 24 phpMyFAQ\Controller\Administration\CategoryController::edit — Coverage: 100.0% | Lines: 66 | Complexity: 8 phpMyFAQ\Controller\Api\FaqController::create — Coverage: 90.9% | Lines: 66 | Complexity: 7 phpMyFAQ\Controller\Frontend\UserController::ucp — Coverage: 86.2% | Lines: 65 | Complexity: 10 phpMyFAQ\Chat::getConversationList — Coverage: 98.4% | Lines: 64 | Complexity: 11 phpMyFAQ\Controller\Administration\Api\PageController::update — Coverage: 92.1% | Lines: 63 | Complexity: 15 phpMyFAQ\Controller\Administration\FaqController::answer — Coverage: 98.4% | Lines: 63 | Complexity: 3 phpMyFAQ\Auth\AuthWebAuthn::authenticate — Coverage: 80.6% | Lines: 62 | Complexity: 27 phpMyFAQ\Export\Pdf::generateFile — Coverage: 95.2% | Lines: 62 | Complexity: 8 phpMyFAQ\Faq::getAllAvailableFaqsByCategoryId — Coverage: 100.0% | Lines: 61 | Complexity: 5 phpMyFAQ\Controller\Administration\InstanceController::update — Coverage: 78.0% | Lines: 59 | Complexity: 12 phpMyFAQ\Setup\Migration\Versions\Migration320Beta::up — Coverage: 47.5% | Lines: 59 | Complexity: 7 phpMyFAQ\Command\InstallCommand::execute — Coverage: 25.9% | Lines: 58 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\AttachmentController::upload — Coverage: 63.8% | Lines: 58 | Complexity: 15 phpMyFAQ\Controller\Administration\Api\MediaBrowserController::index — Coverage: 89.7% | Lines: 58 | Complexity: 12 phpMyFAQ\Controller\Administration\FaqController::addInCategory — Coverage: 98.3% | Lines: 58 | Complexity: 3 phpMyFAQ\Instance\Client::createClientTablesWithDatabase — Coverage: 91.4% | Lines: 58 | Complexity: 10 phpMyFAQ\Instance\Client::copyBaseDataToSchema — Coverage: 96.6% | Lines: 58 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\ExportController::buildReportResponse — Coverage: 63.2% | Lines: 57 | Complexity: 20 phpMyFAQ\Controller\Administration\Api\UserController::editUser — Coverage: 91.2% | Lines: 57 | Complexity: 21 phpMyFAQ\Faq::getFaqsDataByIds — Coverage: 98.2% | Lines: 57 | Complexity: 10 phpMyFAQ\Setup\Migration\Versions\Migration405::up — Coverage: 61.4% | Lines: 57 | Complexity: 5 phpMyFAQ\Controller\Api\OAuth2Controller::authorize — Coverage: 98.2% | Lines: 55 | Complexity: 17 phpMyFAQ\Setup\Installation\DatabaseSchema::getAllTables — Coverage: 100.0% | Lines: 55 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultRights — Coverage: 100.0% | Lines: 55 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\TranslationController::translate — Coverage: 79.6% | Lines: 54 | Complexity: 20 phpMyFAQ\Faq::getFaq — Coverage: 100.0% | Lines: 54 | Complexity: 6 phpMyFAQ\Controller\Administration\FaqController::add — Coverage: 98.1% | Lines: 53 | Complexity: 3 phpMyFAQ\Controller\Administration\FaqController::copy — Coverage: 98.1% | Lines: 53 | Complexity: 2 phpMyFAQ\Controller\Administration\FaqController::translate — Coverage: 98.1% | Lines: 53 | Complexity: 2 phpMyFAQ\Controller\Administration\PageController::getBaseTemplateVars — Coverage: 100.0% | Lines: 53 | Complexity: 1 phpMyFAQ\Controller\Administration\SystemInformationController::index — Coverage: 75.5% | Lines: 53 | Complexity: 10 phpMyFAQ\Controller\Api\SearchController::search — Coverage: 88.7% | Lines: 53 | Complexity: 8 phpMyFAQ\Sitemap::getFaqsFromLetter — Coverage: 86.8% | Lines: 53 | Complexity: 6 phpMyFAQ\Controller\Frontend\Api\UserController::updateData — Coverage: 100.0% | Lines: 52 | Complexity: 22 phpMyFAQ\Notification::sendFaqCommentNotification — Coverage: 98.1% | Lines: 52 | Complexity: 7 phpMyFAQ\Setup\Migration\MigrationExecutor::formatDryRunReport — Coverage: 98.1% | Lines: 52 | Complexity: 15 phpMyFAQ\User\CurrentUser::login — Coverage: 80.8% | Lines: 52 | Complexity: 27 phpMyFAQ\Controller\Administration\Api\GroupController::updateMembers — Coverage: 86.3% | Lines: 51 | Complexity: 14 phpMyFAQ\Controller\Administration\FaqController::getBaseTemplateVars — Coverage: 100.0% | Lines: 51 | Complexity: 1 phpMyFAQ\Controller\Administration\NewsController::getBaseTemplateVars — Coverage: 100.0% | Lines: 51 | Complexity: 1 phpMyFAQ\Controller\Frontend\NewsController::index — Coverage: 92.2% | Lines: 51 | Complexity: 5 phpMyFAQ\Setup\Migration\Versions\Migration407::up — Coverage: 100.0% | Lines: 51 | Complexity: 3 phpMyFAQ\Controller\Api\FaqController::update — Coverage: 90.0% | Lines: 50 | Complexity: 3 phpMyFAQ\Setup\InstallationInputValidator::validateDatabaseInput — Coverage: 82.0% | Lines: 50 | Complexity: 29 phpMyFAQ\Administration\Backup::parseBackupFile — Coverage: 93.9% | Lines: 49 | Complexity: 14 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::fromCoseToPkcs — Coverage: 49.0% | Lines: 49 | Complexity: 35 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::createRedisClient — Coverage: 40.8% | Lines: 49 | Complexity: 22 phpMyFAQ\Helper\AttachmentHelper::mapMimeTypeToIcon — Coverage: 100.0% | Lines: 49 | Complexity: 12 phpMyFAQ\Helper\FaqHelper::cleanUpContent — Coverage: 100.0% | Lines: 49 | Complexity: 3 phpMyFAQ\Helper\FaqHelper::convertOldInternalLinks — Coverage: 51.0% | Lines: 49 | Complexity: 7 phpMyFAQ\Ldap::getLdapData — Coverage: 98.0% | Lines: 49 | Complexity: 17 phpMyFAQ\Auth\AuthWebAuthn::prepareChallengeForRegistration — Coverage: 100.0% | Lines: 48 | Complexity: 2 phpMyFAQ\Controller\Administration\AbstractAdministrationController::getHeader — Coverage: 97.9% | Lines: 48 | Complexity: 3 phpMyFAQ\Controller\Administration\OpenQuestionsController::index — Coverage: 100.0% | Lines: 48 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\UserController::requestUserRemoval — Coverage: 93.8% | Lines: 48 | Complexity: 16 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::callback — Coverage: 100.0% | Lines: 48 | Complexity: 10 phpMyFAQ\Faq\FaqRepository::deleteByIdAndLanguage — Coverage: 100.0% | Lines: 47 | Complexity: 2 phpMyFAQ\Search\Database\Mysqli::search — Coverage: 100.0% | Lines: 47 | Complexity: 9 phpMyFAQ\Search\Database\PdoMysql::search — Coverage: 100.0% | Lines: 47 | Complexity: 9 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::up — Coverage: 61.7% | Lines: 47 | Complexity: 5 phpMyFAQ\Controller\Administration\UserController::list — Coverage: 100.0% | Lines: 46 | Complexity: 5 phpMyFAQ\Export\Pdf\Wrapper::renderFooter — Coverage: 100.0% | Lines: 46 | Complexity: 7 phpMyFAQ\Search::searchDatabase — Coverage: 95.7% | Lines: 46 | Complexity: 10 phpMyFAQ\Service\McpServer\FaqSearchTool::getDefinition — Coverage: 100.0% | Lines: 46 | Complexity: 1 phpMyFAQ\Administration\Category::loadCategories — Coverage: 97.8% | Lines: 45 | Complexity: 9 phpMyFAQ\Auth\AuthLdap::checkCredentials — Coverage: 84.4% | Lines: 45 | Complexity: 19 phpMyFAQ\Category\Relation::getCategoryWithFaqs — Coverage: 100.0% | Lines: 45 | Complexity: 8 phpMyFAQ\Controller\Administration\AuthenticationController::authenticate — Coverage: 64.4% | Lines: 45 | Complexity: 10 phpMyFAQ\Controller\Frontend\QuestionsController::ask — Coverage: 97.8% | Lines: 45 | Complexity: 7 phpMyFAQ\Database\Mysqli::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\PdoMysql::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\Pgsql::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\Sqlite3::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::getTableNames — Coverage: 100.0% | Lines: 45 | Complexity: 1 phpMyFAQ\Api\Pagination\PaginationMetadata::generateLinks — Coverage: 100.0% | Lines: 44 | Complexity: 13 phpMyFAQ\Controller\Administration\Api\ApiKeyController::update — Coverage: 100.0% | Lines: 44 | Complexity: 12 phpMyFAQ\Controller\Administration\Api\UserController::addUser — Coverage: 70.5% | Lines: 44 | Complexity: 15 phpMyFAQ\Helper\RegistrationHelper::createUser — Coverage: 0.0% | Lines: 44 | Complexity: 13 phpMyFAQ\Helper\SearchHelper::createAutoCompleteResult — Coverage: 100.0% | Lines: 44 | Complexity: 5 phpMyFAQ\Instance\Client::createClientTables — Coverage: 84.1% | Lines: 44 | Complexity: 2 phpMyFAQ\Instance\Setup::createDatabaseFile — Coverage: 100.0% | Lines: 44 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\AdminLogController::export — Coverage: 60.5% | Lines: 43 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\FaqController::import — Coverage: 81.4% | Lines: 43 | Complexity: 11 phpMyFAQ\Controller\Administration\Api\GroupController::updateGroup — Coverage: 76.7% | Lines: 43 | Complexity: 12 phpMyFAQ\Controller\Administration\Api\LdapController::healthcheck — Coverage: 37.2% | Lines: 43 | Complexity: 8 phpMyFAQ\Controller\Api\BackupController::download — Coverage: 81.4% | Lines: 43 | Complexity: 8 phpMyFAQ\Controller\Frontend\StartpageController::index — Coverage: 100.0% | Lines: 43 | Complexity: 3 phpMyFAQ\Faq\Import::import — Coverage: 97.7% | Lines: 43 | Complexity: 4 phpMyFAQ\Mail::createBody — Coverage: 97.7% | Lines: 43 | Complexity: 11 phpMyFAQ\Notification::sendQuestionSuccessMail — Coverage: 100.0% | Lines: 43 | Complexity: 8 phpMyFAQ\Translation\Provider\AzureTranslationProvider::getSupportedLanguages — Coverage: 100.0% | Lines: 43 | Complexity: 1 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::getSupportedLanguages — Coverage: 100.0% | Lines: 43 | Complexity: 1 phpMyFAQ\Command\SeedTestDataCommand::seedFaqs — Coverage: 92.9% | Lines: 42 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\GroupController::updatePermissions — Coverage: 83.3% | Lines: 42 | Complexity: 13 phpMyFAQ\Controller\Administration\PasswordChangeController::update — Coverage: 97.6% | Lines: 42 | Complexity: 10 phpMyFAQ\Controller\Api\FaqController::list — Coverage: 83.3% | Lines: 42 | Complexity: 7 phpMyFAQ\Faq::getAllFaqs — Coverage: 90.5% | Lines: 42 | Complexity: 9 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::build — Coverage: 97.6% | Lines: 42 | Complexity: 18 phpMyFAQ\Tags::create — Coverage: 100.0% | Lines: 42 | Complexity: 8 phpMyFAQ\Command\SeedTestDataCommand::execute — Coverage: 87.8% | Lines: 41 | Complexity: 8 phpMyFAQ\Export\Pdf\Wrapper::convertExternalImagesToBase64 — Coverage: 82.9% | Lines: 41 | Complexity: 17 phpMyFAQ\Faq::getFaqByIdAndCategoryId — Coverage: 100.0% | Lines: 41 | Complexity: 2 phpMyFAQ\Mail::createHeaders — Coverage: 85.4% | Lines: 41 | Complexity: 26 phpMyFAQ\Search\Search\OpenSearch::search — Coverage: 100.0% | Lines: 41 | Complexity: 1 phpMyFAQ\Search\SearchService::handleTagSearch — Coverage: 92.7% | Lines: 41 | Complexity: 8 phpMyFAQ\Setup\Upgrade::createTemporaryBackup — Coverage: 0.0% | Lines: 41 | Complexity: 9 phpMyFAQ\Auth\AuthKeycloak::create — Coverage: 100.0% | Lines: 40 | Complexity: 6 phpMyFAQ\Auth\OAuth2\AuthorizationServer::completeAuthorization — Coverage: 40.0% | Lines: 40 | Complexity: 7 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateClaims — Coverage: 97.5% | Lines: 40 | Complexity: 31 phpMyFAQ\Controller\Administration\CategoryController::hierarchy — Coverage: 85.0% | Lines: 40 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\WebAuthnController::prepare — Coverage: 92.5% | Lines: 40 | Complexity: 14 phpMyFAQ\Faq\Statistics::getTopVotedData — Coverage: 100.0% | Lines: 40 | Complexity: 6 phpMyFAQ\Helper\QuestionHelper::getOpenQuestions — Coverage: 100.0% | Lines: 40 | Complexity: 6 phpMyFAQ\Scheduler\TaskScheduler::optimizeSearchIndex — Coverage: 62.5% | Lines: 40 | Complexity: 8 phpMyFAQ\Search\Search\Elasticsearch::search — Coverage: 100.0% | Lines: 40 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\UserController::csvExport — Coverage: 100.0% | Lines: 39 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UserController::updateUserRights — Coverage: 94.9% | Lines: 39 | Complexity: 14 phpMyFAQ\EventListener\ApiExceptionListener::createProblemDetailsResponse — Coverage: 100.0% | Lines: 39 | Complexity: 21 phpMyFAQ\Mail\Provider\SendGridProvider::send — Coverage: 100.0% | Lines: 39 | Complexity: 6 phpMyFAQ\Administration\Faq::getAllFaqsByCategory — Coverage: 89.5% | Lines: 38 | Complexity: 9 phpMyFAQ\Administration\FileDownloader::setHttpHeaders — Coverage: 78.9% | Lines: 38 | Complexity: 5 phpMyFAQ\Auth\ApiKeyAuthenticator::authenticate — Coverage: 94.7% | Lines: 38 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\ApiKeyController::create — Coverage: 100.0% | Lines: 38 | Complexity: 9 phpMyFAQ\Controller\Administration\Api\ExportController::exportReport — Coverage: 92.1% | Lines: 38 | Complexity: 16 phpMyFAQ\Controller\Api\AttachmentController::list — Coverage: 94.7% | Lines: 38 | Complexity: 4 phpMyFAQ\Controller\Api\OpenQuestionController::list — Coverage: 97.4% | Lines: 38 | Complexity: 6 phpMyFAQ\Controller\Frontend\Api\ContactController::create — Coverage: 100.0% | Lines: 38 | Complexity: 13 phpMyFAQ\Faq\Statistics::getTopTenData — Coverage: 100.0% | Lines: 38 | Complexity: 4 phpMyFAQ\System::createHashes — Coverage: 92.1% | Lines: 38 | Complexity: 12 phpMyFAQ\Category\CategoryRepository::findCategoriesPaginated — Coverage: 94.6% | Lines: 37 | Complexity: 11 phpMyFAQ\Command\SeedTestDataCommand::seedCategories — Coverage: 97.3% | Lines: 37 | Complexity: 11 phpMyFAQ\Controller\Administration\StatisticsSessionsController::index — Coverage: 100.0% | Lines: 37 | Complexity: 2 phpMyFAQ\Controller\Api\RegistrationController::create — Coverage: 89.2% | Lines: 37 | Complexity: 11 phpMyFAQ\Controller\Frontend\Api\RegistrationController::create — Coverage: 97.3% | Lines: 37 | Complexity: 18 phpMyFAQ\Faq::getFaqsByIds — Coverage: 100.0% | Lines: 37 | Complexity: 2 phpMyFAQ\Helper\SvgSanitizer::removeDangerousContent — Coverage: 100.0% | Lines: 37 | Complexity: 3 phpMyFAQ\Instance\Search\Elasticsearch::bulkIndexCustomPages — Coverage: 86.5% | Lines: 37 | Complexity: 9 phpMyFAQ\Plugin\PluginManager::loadPlugins — Coverage: 78.4% | Lines: 37 | Complexity: 11 phpMyFAQ\Sitemap::getAllFirstLetters — Coverage: 100.0% | Lines: 37 | Complexity: 6 phpMyFAQ\User::createUser — Coverage: 89.2% | Lines: 37 | Complexity: 13 phpMyFAQ\User\UserData::save — Coverage: 59.5% | Lines: 37 | Complexity: 7 phpMyFAQ\Auth\AuthKeycloak::assignUserToGroups — Coverage: 86.1% | Lines: 36 | Complexity: 12 phpMyFAQ\Auth\OAuth2\AuthorizationServer::issueToken — Coverage: 61.1% | Lines: 36 | Complexity: 8 phpMyFAQ\Controller\Administration\CategoryController::index — Coverage: 100.0% | Lines: 36 | Complexity: 3 phpMyFAQ\Controller\Administration\CategoryController::translate — Coverage: 100.0% | Lines: 36 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UserController::exportUserData — Coverage: 88.9% | Lines: 36 | Complexity: 8 phpMyFAQ\Controller\Frontend\CustomPageController::show — Coverage: 91.7% | Lines: 36 | Complexity: 9 phpMyFAQ\Export\Pdf\Wrapper::inlineLocalImages — Coverage: 97.2% | Lines: 36 | Complexity: 12 phpMyFAQ\Faq\Permission::createPermissionArray — Coverage: 58.3% | Lines: 36 | Complexity: 16 phpMyFAQ\Helper\CategoryHelper::buildCategoryList — Coverage: 100.0% | Lines: 36 | Complexity: 6 phpMyFAQ\Notification::sendNewFaqAdded — Coverage: 97.2% | Lines: 36 | Complexity: 5 phpMyFAQ\Setup\Upgrade::installPackage — Coverage: 0.0% | Lines: 36 | Complexity: 10 phpMyFAQ\User\Tracking::writeTrackingData — Coverage: 97.2% | Lines: 36 | Complexity: 3 phpMyFAQ\Administration\AdminLog::verifyChainIntegrity — Coverage: 94.3% | Lines: 35 | Complexity: 8 phpMyFAQ\Bookmark\BookmarkFormatter::format — Coverage: 97.1% | Lines: 35 | Complexity: 5 phpMyFAQ\Controller\Administration\CommentsController::index — Coverage: 100.0% | Lines: 35 | Complexity: 3 phpMyFAQ\Controller\Frontend\AuthenticationController::authenticate — Coverage: 94.3% | Lines: 35 | Complexity: 10 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::defineTcpdfConstants — Coverage: 100.0% | Lines: 35 | Complexity: 3 phpMyFAQ\Faq\QueryHelper::getQuery — Coverage: 80.0% | Lines: 35 | Complexity: 16 phpMyFAQ\Faq\Statistics::getLatestData — Coverage: 100.0% | Lines: 35 | Complexity: 4 phpMyFAQ\Faq\Statistics::getTrendingData — Coverage: 100.0% | Lines: 35 | Complexity: 4 phpMyFAQ\Ldap::getGroupMemberships — Coverage: 97.1% | Lines: 35 | Complexity: 11 phpMyFAQ\Push\PushSubscriptionRepository::save — Coverage: 100.0% | Lines: 35 | Complexity: 4 phpMyFAQ\Queue\Transport\DatabaseTransport::reserve — Coverage: 94.3% | Lines: 35 | Complexity: 6 phpMyFAQ\Setup\HtaccessUpdater::updateRewriteBase — Coverage: 85.7% | Lines: 35 | Complexity: 10 phpMyFAQ\Setup\InstallationInputValidator::validate — Coverage: 91.4% | Lines: 35 | Complexity: 4 phpMyFAQ\Setup\Migration\Versions\Migration320Beta::rebuildTableWithoutColumns — Coverage: 85.7% | Lines: 35 | Complexity: 4 phpMyFAQ\Setup\Update::createConfigBackup — Coverage: 88.6% | Lines: 35 | Complexity: 14 phpMyFAQ\Translation\ContentTranslationService::translateCustomPage — Coverage: 100.0% | Lines: 35 | Complexity: 14 phpMyFAQ\User\UserData::get — Coverage: 71.4% | Lines: 35 | Complexity: 16 phpMyFAQ\Category\Relation::getNumberOfFaqsPerCategory — Coverage: 100.0% | Lines: 34 | Complexity: 9 phpMyFAQ\Controller\Frontend\Api\VotingController::create — Coverage: 100.0% | Lines: 34 | Complexity: 13 phpMyFAQ\Controller\Frontend\WebAuthnController::prepare — Coverage: 5.9% | Lines: 34 | Complexity: 7 phpMyFAQ\EventListener\ApiExceptionListener::onKernelException — Coverage: 100.0% | Lines: 34 | Complexity: 9 phpMyFAQ\Helper\CategoryHelper::buildCategoryNodes — Coverage: 100.0% | Lines: 34 | Complexity: 5 phpMyFAQ\Instance\Search\Elasticsearch::getParams — Coverage: 100.0% | Lines: 34 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::buildMappings — Coverage: 100.0% | Lines: 34 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::bulkIndex — Coverage: 82.4% | Lines: 34 | Complexity: 7 phpMyFAQ\News::getLatestDataPaginated — Coverage: 100.0% | Lines: 34 | Complexity: 2 phpMyFAQ\Queue\Handler\IndexFaqHandler::__invoke — Coverage: 100.0% | Lines: 34 | Complexity: 12 phpMyFAQ\Setup\HtaccessUpdater::addRewriteBase — Coverage: 35.3% | Lines: 34 | Complexity: 5 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getAwsSignedHeaders — Coverage: 100.0% | Lines: 34 | Complexity: 1 phpMyFAQ\User\UserAuthentication::authenticate — Coverage: 50.0% | Lines: 34 | Complexity: 10 phpMyFAQ\Controller\Api\QuestionController::create — Coverage: 75.8% | Lines: 33 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::requestReset — Coverage: 87.9% | Lines: 33 | Complexity: 10 phpMyFAQ\Instance\Search\OpenSearch::getParams — Coverage: 100.0% | Lines: 33 | Complexity: 1 phpMyFAQ\Notification::sendNewsCommentNotification — Coverage: 100.0% | Lines: 33 | Complexity: 2 phpMyFAQ\Setup\Installer::checkNoncriticalSettings — Coverage: 0.0% | Lines: 33 | Complexity: 8 phpMyFAQ\Setup\Migration\Versions\Migration323::up — Coverage: 21.2% | Lines: 33 | Complexity: 5 phpMyFAQ\Template\ThemeManager::uploadTheme — Coverage: 81.8% | Lines: 33 | Complexity: 13 phpMyFAQ\Administration\AdminMenuBuilder::searchRelevanceOptions — Coverage: 100.0% | Lines: 32 | Complexity: 1 phpMyFAQ\Auth\AuthLdap::create — Coverage: 100.0% | Lines: 32 | Complexity: 8 phpMyFAQ\Auth\AuthWebAuthn::prepareForLogin — Coverage: 96.9% | Lines: 32 | Complexity: 8 phpMyFAQ\Bootstrapper::run — Coverage: 87.5% | Lines: 32 | Complexity: 10 phpMyFAQ\Captcha\BuiltinCaptcha::drawLines — Coverage: 96.9% | Lines: 32 | Complexity: 7 phpMyFAQ\Category\Order::getOrderedFlatList — Coverage: 100.0% | Lines: 32 | Complexity: 8 phpMyFAQ\Command\CreateHashesCommand::execute — Coverage: 62.5% | Lines: 32 | Complexity: 13 phpMyFAQ\Controller\Api\CommentController::list — Coverage: 96.9% | Lines: 32 | Complexity: 3 phpMyFAQ\Controller\Frontend\AuthenticationController::login — Coverage: 100.0% | Lines: 32 | Complexity: 4 phpMyFAQ\Faq::getFaqBySolutionId — Coverage: 100.0% | Lines: 32 | Complexity: 4 phpMyFAQ\Instance\Search\OpenSearch::bulkIndexCustomPages — Coverage: 90.6% | Lines: 32 | Complexity: 6 phpMyFAQ\Ldap::connect — Coverage: 75.0% | Lines: 32 | Complexity: 10 phpMyFAQ\Mail\Provider\MailgunProvider::send — Coverage: 100.0% | Lines: 32 | Complexity: 8 phpMyFAQ\Push\WebPushService::sendToSubscriptions — Coverage: 43.8% | Lines: 32 | Complexity: 8 phpMyFAQ\Service\McpServer\FaqSearchTool::execute — Coverage: 96.9% | Lines: 32 | Complexity: 7 phpMyFAQ\Setup\Migration\AbstractMigration::indexExists — Coverage: 40.6% | Lines: 32 | Complexity: 5 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::buildCombined — Coverage: 75.0% | Lines: 32 | Complexity: 14 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getSupportedLanguages — Coverage: 100.0% | Lines: 32 | Complexity: 1 phpMyFAQ\User::deleteUser — Coverage: 87.5% | Lines: 32 | Complexity: 10 phpMyFAQ\Captcha\BuiltinCaptcha::drawText — Coverage: 74.2% | Lines: 31 | Complexity: 6 phpMyFAQ\Category\Startpage::getCategories — Coverage: 100.0% | Lines: 31 | Complexity: 7 phpMyFAQ\Controller\Administration\AdminLogController::index — Coverage: 100.0% | Lines: 31 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\UserController::overwritePassword — Coverage: 83.9% | Lines: 31 | Complexity: 15 phpMyFAQ\Controller\Administration\ExportController::index — Coverage: 100.0% | Lines: 31 | Complexity: 1 phpMyFAQ\Controller\Administration\GroupController::create — Coverage: 93.5% | Lines: 31 | Complexity: 7 phpMyFAQ\Controller\Administration\PageController::index — Coverage: 100.0% | Lines: 31 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::reset — Coverage: 87.1% | Lines: 31 | Complexity: 15 phpMyFAQ\Controller\Frontend\QuestionsController::index — Coverage: 100.0% | Lines: 31 | Complexity: 2 phpMyFAQ\Faq::get — Coverage: 100.0% | Lines: 31 | Complexity: 4 phpMyFAQ\Faq\FaqRepository::fetchRowBySolutionId — Coverage: 100.0% | Lines: 31 | Complexity: 7 phpMyFAQ\Helper\SvgSanitizer::decodeAllEntities — Coverage: 100.0% | Lines: 31 | Complexity: 3 phpMyFAQ\Link::ensureDefaultStrategies — Coverage: 100.0% | Lines: 31 | Complexity: 3 phpMyFAQ\Mail::enqueueForDelivery — Coverage: 100.0% | Lines: 31 | Complexity: 7 phpMyFAQ\Mail\Provider\SesProvider::send — Coverage: 93.5% | Lines: 31 | Complexity: 4 phpMyFAQ\News::getLatestData — Coverage: 100.0% | Lines: 31 | Complexity: 4 phpMyFAQ\Search\SearchResultSet::reviewResultSet — Coverage: 90.3% | Lines: 31 | Complexity: 14 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::build — Coverage: 100.0% | Lines: 31 | Complexity: 11 phpMyFAQ\Tags::getAllTags — Coverage: 93.5% | Lines: 31 | Complexity: 10 phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper::renderCaptcha — Coverage: 96.7% | Lines: 30 | Complexity: 4 phpMyFAQ\Category\Permission::getAll — Coverage: 100.0% | Lines: 30 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\PageController::activate — Coverage: 90.0% | Lines: 30 | Complexity: 10 phpMyFAQ\Controller\Administration\AuthenticationController::login — Coverage: 100.0% | Lines: 30 | Complexity: 5 phpMyFAQ\Controller\Administration\PageController::edit — Coverage: 100.0% | Lines: 30 | Complexity: 3 phpMyFAQ\Controller\Api\CategoryController::list — Coverage: 100.0% | Lines: 30 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::renderHeader — Coverage: 100.0% | Lines: 30 | Complexity: 3 phpMyFAQ\Faq::getStickyFaqsData — Coverage: 100.0% | Lines: 30 | Complexity: 4 phpMyFAQ\Scheduler\TaskScheduler::run — Coverage: 100.0% | Lines: 30 | Complexity: 5 phpMyFAQ\Search\SearchService::handleFulltextSearch — Coverage: 76.7% | Lines: 30 | Complexity: 6 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::doTranslate — Coverage: 93.3% | Lines: 30 | Complexity: 9 phpMyFAQ\Administration\TranslationStatistics::getStatistics — Coverage: 93.1% | Lines: 29 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\GroupController::saveCategoryRestrictions — Coverage: 0.0% | Lines: 29 | Complexity: 8 phpMyFAQ\Controller\Administration\AttachmentsController::index — Coverage: 100.0% | Lines: 29 | Complexity: 2 phpMyFAQ\Controller\Administration\AuthenticationController::check — Coverage: 96.6% | Lines: 29 | Complexity: 8 phpMyFAQ\Controller\Api\TagController::list — Coverage: 82.8% | Lines: 29 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\WebAuthnController::login — Coverage: 96.6% | Lines: 29 | Complexity: 8 phpMyFAQ\Controller\Frontend\PdfController::index — Coverage: 82.8% | Lines: 29 | Complexity: 6 phpMyFAQ\Database\DatabaseHelper::buildInsertQueries — Coverage: 79.3% | Lines: 29 | Complexity: 11 phpMyFAQ\Faq\Statistics::getTopTen — Coverage: 100.0% | Lines: 29 | Complexity: 4 phpMyFAQ\Faq\Statistics::buildStatisticsQuery — Coverage: 100.0% | Lines: 29 | Complexity: 5 phpMyFAQ\Instance\Search\OpenSearch::bulkIndex — Coverage: 86.2% | Lines: 29 | Complexity: 5 phpMyFAQ\Permission\GroupCategoryPermissionRepository::setCategoryRestrictions — Coverage: 82.8% | Lines: 29 | Complexity: 7 phpMyFAQ\Search\Search\Elasticsearch::mapHits — Coverage: 86.2% | Lines: 29 | Complexity: 11 phpMyFAQ\Search\Search\Elasticsearch::autoComplete — Coverage: 100.0% | Lines: 29 | Complexity: 1 phpMyFAQ\Search\Search\OpenSearch::autoComplete — Coverage: 100.0% | Lines: 29 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::executeMigration — Coverage: 69.0% | Lines: 29 | Complexity: 9 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::create — Coverage: 96.4% | Lines: 28 | Complexity: 8 phpMyFAQ\Category\CategoryRepository::findOrderedCategories — Coverage: 96.4% | Lines: 28 | Complexity: 11 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::transformRecursive — Coverage: 7.1% | Lines: 28 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\PushController::generateVapidKeys — Coverage: 71.4% | Lines: 28 | Complexity: 5 phpMyFAQ\Controller\Administration\PageController::translate — Coverage: 100.0% | Lines: 28 | Complexity: 3 phpMyFAQ\Controller\Administration\StatisticsSearchController::index — Coverage: 100.0% | Lines: 28 | Complexity: 2 phpMyFAQ\Controller\Api\GlossaryController::list — Coverage: 100.0% | Lines: 28 | Complexity: 5 phpMyFAQ\Controller\Frontend\AuthenticationController::check — Coverage: 100.0% | Lines: 28 | Complexity: 9 phpMyFAQ\Controller\Frontend\SetupController::update — Coverage: 85.7% | Lines: 28 | Complexity: 7 phpMyFAQ\Faq\Permission::add — Coverage: 100.0% | Lines: 28 | Complexity: 7 phpMyFAQ\Helper\CategoryHelper::getModerators — Coverage: 0.0% | Lines: 28 | Complexity: 12 phpMyFAQ\Helper\SearchHelper::renderRelatedFaqs — Coverage: 100.0% | Lines: 28 | Complexity: 5 phpMyFAQ\Question\QuestionRepository::getAll — Coverage: 100.0% | Lines: 28 | Complexity: 6 phpMyFAQ\Search::searchCustomPages — Coverage: 100.0% | Lines: 28 | Complexity: 8 phpMyFAQ\User\CurrentUser::updateSessionId — Coverage: 85.7% | Lines: 28 | Complexity: 7 phpMyFAQ\Administration\Backup::getLastBackupInfo — Coverage: 92.6% | Lines: 27 | Complexity: 7 phpMyFAQ\Attachment\File::save — Coverage: 66.7% | Lines: 27 | Complexity: 11 phpMyFAQ\Auth\EntraId\OAuth::getOAuthToken — Coverage: 92.6% | Lines: 27 | Complexity: 5 phpMyFAQ\Auth\EntraId\OAuth::setToken — Coverage: 100.0% | Lines: 27 | Complexity: 9 phpMyFAQ\Command\McpServerCommand::showServerInfo — Coverage: 96.3% | Lines: 27 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\CategoryController::delete — Coverage: 74.1% | Lines: 27 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\DashboardController::news — Coverage: 11.1% | Lines: 27 | Complexity: 10 phpMyFAQ\Controller\Administration\Api\TagController::search — Coverage: 88.9% | Lines: 27 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UpdateController::updateCheck — Coverage: 92.6% | Lines: 27 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UserController::list — Coverage: 100.0% | Lines: 27 | Complexity: 5 phpMyFAQ\Controller\Administration\CategoryController::addChild — Coverage: 100.0% | Lines: 27 | Complexity: 2 phpMyFAQ\Controller\Administration\FormsController::translate — Coverage: 100.0% | Lines: 27 | Complexity: 4 phpMyFAQ\Controller\Administration\InstanceController::getBaseTemplateVars — Coverage: 100.0% | Lines: 27 | Complexity: 2 phpMyFAQ\Controller\Frontend\GlossaryController::index — Coverage: 100.0% | Lines: 27 | Complexity: 2 phpMyFAQ\Controller\Frontend\WebAuthnController::login — Coverage: 85.2% | Lines: 27 | Complexity: 6 phpMyFAQ\Helper\StatisticsHelper::getTrackingFilesStatistics — Coverage: 81.5% | Lines: 27 | Complexity: 9 phpMyFAQ\Routing\AttributeRouteLoader::createRouteFromAttribute — Coverage: 88.9% | Lines: 27 | Complexity: 3 phpMyFAQ\Setup\Installer::checkFilesystemPermissions — Coverage: 0.0% | Lines: 27 | Complexity: 6 phpMyFAQ\Storage\StorageFactory::createS3Storage — Coverage: 74.1% | Lines: 27 | Complexity: 8 phpMyFAQ\ConfigurationMethodsTrait::update — Coverage: 96.3% | Lines: 27 | Complexity: 7 phpMyFAQ\Administration\DashboardLayout::get — Coverage: 88.5% | Lines: 26 | Complexity: 9 phpMyFAQ\Bootstrapper::connectDatabase — Coverage: 100.0% | Lines: 26 | Complexity: 3 phpMyFAQ\Category\Order::setCategoryTree — Coverage: 96.2% | Lines: 26 | Complexity: 9 phpMyFAQ\Chat::sendMessage — Coverage: 100.0% | Lines: 26 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\AdminLogController::verify — Coverage: 100.0% | Lines: 26 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UserController::deleteUser — Coverage: 61.5% | Lines: 26 | Complexity: 7 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::authorize — Coverage: 57.7% | Lines: 26 | Complexity: 4 phpMyFAQ\Controller\Frontend\OverviewController::index — Coverage: 100.0% | Lines: 26 | Complexity: 1 phpMyFAQ\Controller\Frontend\SetupController::index — Coverage: 84.6% | Lines: 26 | Complexity: 4 phpMyFAQ\CustomPage\CustomPageRepository::insert — Coverage: 100.0% | Lines: 26 | Complexity: 6 phpMyFAQ\CustomPage\CustomPageRepository::insertTranslation — Coverage: 100.0% | Lines: 26 | Complexity: 7 phpMyFAQ\Faq\FaqRepository::update — Coverage: 100.0% | Lines: 26 | Complexity: 5 phpMyFAQ\Helper\QuestionHelper::generateSmartAnswer — Coverage: 100.0% | Lines: 26 | Complexity: 2 phpMyFAQ\Mail::send — Coverage: 96.2% | Lines: 26 | Complexity: 17 phpMyFAQ\Setup\InstallationInputValidator::validateUserCredentials — Coverage: 100.0% | Lines: 26 | Complexity: 13 phpMyFAQ\Setup\InstallationRunner::stepCreateAdminUser — Coverage: 0.0% | Lines: 26 | Complexity: 5 phpMyFAQ\Setup\Migration\Operations\SqlOperation::getDescription — Coverage: 100.0% | Lines: 26 | Complexity: 9 phpMyFAQ\Setup\Migration\Versions\Migration409::up — Coverage: 100.0% | Lines: 26 | Complexity: 2 phpMyFAQ\Translation\ContentTranslationService::translateFaq — Coverage: 100.0% | Lines: 26 | Complexity: 11 phpMyFAQ\Translation\ContentTranslationService::translateNews — Coverage: 100.0% | Lines: 26 | Complexity: 11 phpMyFAQ\Auth\OAuth2\AuthorizationServer::buildLeagueAuthorizationServer — Coverage: 100.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::fromArray — Coverage: 100.0% | Lines: 25 | Complexity: 8 phpMyFAQ\Captcha\BuiltinCaptcha::saveCaptcha — Coverage: 92.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Category\CategoryRepository::findMissingCategories — Coverage: 100.0% | Lines: 25 | Complexity: 8 phpMyFAQ\Container\ContainerCacheManager::getContainer — Coverage: 100.0% | Lines: 25 | Complexity: 9 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::list — Coverage: 92.0% | Lines: 25 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\DashboardController::versions — Coverage: 60.0% | Lines: 25 | Complexity: 8 phpMyFAQ\Controller\Api\AbstractApiController::paginatedResponse — Coverage: 100.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::sendResetLinkEmail — Coverage: 100.0% | Lines: 25 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::renderSpecificCategory — Coverage: 100.0% | Lines: 25 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::resolveLocalLogin — Coverage: 40.0% | Lines: 25 | Complexity: 11 phpMyFAQ\EventListener\WebExceptionListener::onKernelException — Coverage: 100.0% | Lines: 25 | Complexity: 9 phpMyFAQ\EventListener\WebExceptionListener::handleNotFound — Coverage: 44.0% | Lines: 25 | Complexity: 7 phpMyFAQ\Export\Json::generate — Coverage: 96.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Export\Pdf\Wrapper::resolveImage — Coverage: 84.0% | Lines: 25 | Complexity: 17 phpMyFAQ\Http\RateLimiter::check — Coverage: 100.0% | Lines: 25 | Complexity: 2 phpMyFAQ\Instance\Client::insertRows — Coverage: 92.0% | Lines: 25 | Complexity: 6 phpMyFAQ\Instance\Search\Elasticsearch::updateCustomPage — Coverage: 100.0% | Lines: 25 | Complexity: 5 phpMyFAQ\Relation::getAllRelatedByQuestion — Coverage: 100.0% | Lines: 25 | Complexity: 1 phpMyFAQ\Search\Database\PdoPgsql::search — Coverage: 100.0% | Lines: 25 | Complexity: 6 phpMyFAQ\Setup\Migration\MigrationExecutor::generateDryRunReport — Coverage: 92.0% | Lines: 25 | Complexity: 3 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::up — Coverage: 100.0% | Lines: 25 | Complexity: 1 phpMyFAQ\Translation::get — Coverage: 100.0% | Lines: 25 | Complexity: 7 phpMyFAQ\Translation\Provider\AzureTranslationProvider::doTranslateBatch — Coverage: 92.0% | Lines: 25 | Complexity: 4 phpMyFAQ\User::createPassword — Coverage: 100.0% | Lines: 25 | Complexity: 11 phpMyFAQ\User::getUserById — Coverage: 100.0% | Lines: 25 | Complexity: 5 phpMyFAQ\Administration\Backup::executeBackupQueries — Coverage: 100.0% | Lines: 24 | Complexity: 3 phpMyFAQ\Administration\Faq::getOrphanedFaqs — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Attachment\AttachmentFactory::fetchByRecordIdPaginated — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Auth\AuthDatabase::checkCredentials — Coverage: 91.7% | Lines: 24 | Complexity: 10 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::getClientEntity — Coverage: 95.8% | Lines: 24 | Complexity: 5 phpMyFAQ\Auth\OAuth2\ResourceServer::authenticate — Coverage: 58.3% | Lines: 24 | Complexity: 9 phpMyFAQ\Cache\CacheSettingsResolver::resolve — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Category\CategoryRepository::findCategoriesFromFaq — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Category\Permission::add — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Category\Relation::add — Coverage: 95.8% | Lines: 24 | Complexity: 3 phpMyFAQ\Command\SeedTestDataCommand::seedNews — Coverage: 95.8% | Lines: 24 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\NewsController::newsMessageFromPayload — Coverage: 100.0% | Lines: 24 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\SessionController::export — Coverage: 91.7% | Lines: 24 | Complexity: 5 phpMyFAQ\Controller\Administration\RatingController::index — Coverage: 100.0% | Lines: 24 | Complexity: 2 phpMyFAQ\Controller\Administration\UserController::getBaseTemplateVars — Coverage: 100.0% | Lines: 24 | Complexity: 1 phpMyFAQ\Controller\Frontend\FaqController::prepareCommentsData — Coverage: 95.8% | Lines: 24 | Complexity: 3 phpMyFAQ\Faq\FaqRepository::buildConditionWhereClause — Coverage: 87.5% | Lines: 24 | Complexity: 13 phpMyFAQ\Form\FormsHelper::filterAndSortFormData — Coverage: 95.8% | Lines: 24 | Complexity: 8 phpMyFAQ\Helper\SearchHelper::renderAdminSuggestionResult — Coverage: 100.0% | Lines: 24 | Complexity: 5 phpMyFAQ\Instance\Database::createTenantDatabase — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Instance\Search\OpenSearch::__construct — Coverage: 0.0% | Lines: 24 | Complexity: 1 phpMyFAQ\Instance\Search\OpenSearch::updateCustomPage — Coverage: 100.0% | Lines: 24 | Complexity: 4 phpMyFAQ\Ldap::getLdapDn — Coverage: 100.0% | Lines: 24 | Complexity: 7 phpMyFAQ\Search::getMostPopularSearches — Coverage: 100.0% | Lines: 24 | Complexity: 12 phpMyFAQ\Search\Database\Pgsql::search — Coverage: 100.0% | Lines: 24 | Complexity: 6 phpMyFAQ\Search\Search\OpenSearch::mapHits — Coverage: 87.5% | Lines: 24 | Complexity: 7 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::doTranslateBatch — Coverage: 87.5% | Lines: 24 | Complexity: 5 phpMyFAQ\Administration\AdminLogRepository::getAll — Coverage: 100.0% | Lines: 23 | Complexity: 5 phpMyFAQ\Administration\AdminLogRepository::add — Coverage: 100.0% | Lines: 23 | Complexity: 2 phpMyFAQ\Administration\RecentUsers::getList — Coverage: 100.0% | Lines: 23 | Complexity: 7 phpMyFAQ\Administration\Report::getReportingData — Coverage: 100.0% | Lines: 23 | Complexity: 8 phpMyFAQ\Bootstrap\PhpConfigurator::configureSession — Coverage: 95.7% | Lines: 23 | Complexity: 7 phpMyFAQ\Bootstrapper::switchToTenantSchema — Coverage: 100.0% | Lines: 23 | Complexity: 9 phpMyFAQ\Configuration\LdapConfiguration::__construct — Coverage: 100.0% | Lines: 23 | Complexity: 3 phpMyFAQ\Controller\AbstractController::isPublicAuthenticationPath — Coverage: 100.0% | Lines: 23 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\CommentController::delete — Coverage: 95.7% | Lines: 23 | Complexity: 9 phpMyFAQ\Controller\Administration\Api\FaqController::activate — Coverage: 100.0% | Lines: 23 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\LdapController::configuration — Coverage: 91.3% | Lines: 23 | Complexity: 1 phpMyFAQ\Controller\Api\NewsController::list — Coverage: 100.0% | Lines: 23 | Complexity: 1 phpMyFAQ\Controller\Frontend\AbstractFrontController::getTopNavigation — Coverage: 100.0% | Lines: 23 | Complexity: 5 phpMyFAQ\Controller\Frontend\AbstractFrontController::getFooterNavigation — Coverage: 100.0% | Lines: 23 | Complexity: 5 phpMyFAQ\Controller\Frontend\AttachmentController::index — Coverage: 100.0% | Lines: 23 | Complexity: 7 phpMyFAQ\Controller\Frontend\CategoryController::renderAllCategories — Coverage: 100.0% | Lines: 23 | Complexity: 2 phpMyFAQ\Controller\Frontend\ContactController::index — Coverage: 100.0% | Lines: 23 | Complexity: 4 phpMyFAQ\Controller\Frontend\SitemapController::index — Coverage: 100.0% | Lines: 23 | Complexity: 7 phpMyFAQ\CustomPage\CustomPageRepository::getAllPaginated — Coverage: 95.7% | Lines: 23 | Complexity: 6 phpMyFAQ\Faq\FaqCreationService::prepareAddFaqData — Coverage: 78.3% | Lines: 23 | Complexity: 3 phpMyFAQ\Faq\FaqRepository::insert — Coverage: 100.0% | Lines: 23 | Complexity: 4 phpMyFAQ\Kernel::registerEventListeners — Coverage: 100.0% | Lines: 23 | Complexity: 8 phpMyFAQ\Pagination::addNavigationButtons — Coverage: 100.0% | Lines: 23 | Complexity: 3 phpMyFAQ\Queue\Handler\SendMailHandler::__invoke — Coverage: 100.0% | Lines: 23 | Complexity: 13 phpMyFAQ\Service\McpServer\McpSdkRuntime::buildServer — Coverage: 87.0% | Lines: 23 | Complexity: 3 phpMyFAQ\Translation::has — Coverage: 100.0% | Lines: 23 | Complexity: 7 phpMyFAQ\Translation::getConfigurationItems — Coverage: 100.0% | Lines: 23 | Complexity: 5 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::doTranslateBatch — Coverage: 87.0% | Lines: 23 | Complexity: 6 phpMyFAQ\Twig\TwigWrapper::__construct — Coverage: 100.0% | Lines: 23 | Complexity: 6 phpMyFAQ\Administration\Faq::getInactiveFaqsData — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Api\Pagination\PaginationRequest::fromRequest — Coverage: 100.0% | Lines: 22 | Complexity: 4 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::persistNewAccessToken — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Auth\OAuth2\Repository\UserRepository::getUserEntityByUserCredentials — Coverage: 18.2% | Lines: 22 | Complexity: 8 phpMyFAQ\Captcha\BuiltinCaptcha::validateCaptchaCode — Coverage: 100.0% | Lines: 22 | Complexity: 7 phpMyFAQ\Category\CategoryRepository::findByIdAndLanguage — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\Category\CategoryRepository::create — Coverage: 81.8% | Lines: 22 | Complexity: 2 phpMyFAQ\Chat::searchUsers — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\Comment\CommentsRepository::fetchAllWithCategories — Coverage: 100.0% | Lines: 22 | Complexity: 4 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::fetchAll — Coverage: 86.4% | Lines: 22 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\FaqController::sticky — Coverage: 100.0% | Lines: 22 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\PageController::checkSlug — Coverage: 90.9% | Lines: 22 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\QuestionController::delete — Coverage: 90.9% | Lines: 22 | Complexity: 7 phpMyFAQ\Controller\Administration\GlossaryController::index — Coverage: 100.0% | Lines: 22 | Complexity: 1 phpMyFAQ\Controller\Api\GroupController::list — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\Controller\Api\LoginController::login — Coverage: 81.8% | Lines: 22 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\PushController::subscribe — Coverage: 100.0% | Lines: 22 | Complexity: 7 phpMyFAQ\Controller\Frontend\NewsController::prepareCommentsData — Coverage: 100.0% | Lines: 22 | Complexity: 2 phpMyFAQ\Controller\Frontend\WebAuthnController::register — Coverage: 9.1% | Lines: 22 | Complexity: 7 phpMyFAQ\CustomPage\CustomPageRepository::getAllLanguagesPaginated — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\CustomPage\CustomPageRepository::update — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Environment::setupDebugMode — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\EventListener\ApiRateLimiterListener::onKernelRequest — Coverage: 95.5% | Lines: 22 | Complexity: 8 phpMyFAQ\EventListener\RouterListener::onKernelRequest — Coverage: 100.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Faq\FaqRepository::getIdFromSolutionId — Coverage: 100.0% | Lines: 22 | Complexity: 2 phpMyFAQ\Faq\Import::validateCSV — Coverage: 95.5% | Lines: 22 | Complexity: 13 phpMyFAQ\News::get — Coverage: 100.0% | Lines: 22 | Complexity: 4 phpMyFAQ\Routing\AttributeRouteLoader::load — Coverage: 86.4% | Lines: 22 | Complexity: 12 phpMyFAQ\Scheduler\TaskScheduler::cleanupSessions — Coverage: 100.0% | Lines: 22 | Complexity: 4 phpMyFAQ\Setup\Installation\DatabaseSchema::faqdata — Coverage: 100.0% | Lines: 22 | Complexity: 1 phpMyFAQ\Setup\Update::migrateAdminLogHashes — Coverage: 0.0% | Lines: 22 | Complexity: 6 phpMyFAQ\Setup\UpdateRunner::taskUpdateDatabase — Coverage: 0.0% | Lines: 22 | Complexity: 3 phpMyFAQ\Setup\Upgrade::checkFilesystem — Coverage: 63.6% | Lines: 22 | Complexity: 15 phpMyFAQ\Tags::getPopularTags — Coverage: 100.0% | Lines: 22 | Complexity: 5 phpMyFAQ\User\UserSession::checkSessionId — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromSession — Coverage: 77.3% | Lines: 22 | Complexity: 9 phpMyFAQ\Administration\Backup::createContentFolderBackup — Coverage: 81.0% | Lines: 21 | Complexity: 7 phpMyFAQ\Administration\RemoteApiClient::getVersions — Coverage: 71.4% | Lines: 21 | Complexity: 3 phpMyFAQ\Auth\EntraId\JwksProvider::loadJwks — Coverage: 100.0% | Lines: 21 | Complexity: 11 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::persistNewAuthCode — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Category::getOrderedCategories — Coverage: 100.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Category\Navigation\BreadcrumbsHtmlRenderer::render — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Configuration\ConfigurationRepository::__construct — Coverage: 100.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Configuration\DatabaseConfiguration::__construct — Coverage: 95.2% | Lines: 21 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\ApiKeyController::delete — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\FaqController::search — Coverage: 95.2% | Lines: 21 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\PageController::list — Coverage: 100.0% | Lines: 21 | Complexity: 1 phpMyFAQ\Controller\Api\PdfController::getById — Coverage: 95.2% | Lines: 21 | Complexity: 6 phpMyFAQ\Controller\Frontend\AbstractFrontController::getUserDropdown — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\SetupController::check — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Controller\Frontend\Api\SetupController::backup — Coverage: 81.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Controller\Frontend\UserController::register — Coverage: 100.0% | Lines: 21 | Complexity: 2 phpMyFAQ\Helper\LanguageHelper::renderSelectLanguage — Coverage: 0.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Instance\Database\PdoPgsql::createTables — Coverage: 95.2% | Lines: 21 | Complexity: 13 phpMyFAQ\Instance\Search\Elasticsearch::indexCustomPage — Coverage: 100.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Link::__construct — Coverage: 100.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Link\Strategy\FaqStrategy::build — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Link\Strategy\SearchStrategy::build — Coverage: 100.0% | Lines: 21 | Complexity: 8 phpMyFAQ\News\NewsRepository::getLatestPaginated — Coverage: 100.0% | Lines: 21 | Complexity: 8 phpMyFAQ\Search\Database\PdoPgsql::getMatchingColumnsAsResult — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Search\Database\Pgsql::getMatchingColumnsAsResult — Coverage: 100.0% | Lines: 21 | Complexity: 5 phpMyFAQ\Search\SearchDatabase::getMatchClause — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Seo\SeoRepository::get — Coverage: 100.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataRevisions — Coverage: 100.0% | Lines: 21 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faquser — Coverage: 100.0% | Lines: 21 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::createUniqueIndex — Coverage: 28.6% | Lines: 21 | Complexity: 3 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::up — Coverage: 0.0% | Lines: 21 | Complexity: 3 phpMyFAQ\Setup\Upgrade::extractPackage — Coverage: 0.0% | Lines: 21 | Complexity: 6 phpMyFAQ\Tags::getFaqsByIntersectionTags — Coverage: 100.0% | Lines: 21 | Complexity: 4 phpMyFAQ\Translation\ContentTranslationService::translateCategory — Coverage: 100.0% | Lines: 21 | Complexity: 8 phpMyFAQ\User\Tracking::handleSession — Coverage: 81.0% | Lines: 21 | Complexity: 4 phpMyFAQ\Administration\Backup::getBackupTableNames — Coverage: 100.0% | Lines: 20 | Complexity: 10 phpMyFAQ\Administration\Revision::get — Coverage: 100.0% | Lines: 20 | Complexity: 8 phpMyFAQ\Attachment\AbstractAttachment::saveMeta — Coverage: 100.0% | Lines: 20 | Complexity: 3 phpMyFAQ\Auth\AuthEntraId::authorize — Coverage: 100.0% | Lines: 20 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryService::discover — Coverage: 100.0% | Lines: 20 | Complexity: 5 phpMyFAQ\Captcha\BuiltinCaptcha::garbageCollector — Coverage: 100.0% | Lines: 20 | Complexity: 1 phpMyFAQ\Category\CategoryRepository::getCategoryLanguagesTranslated — Coverage: 0.0% | Lines: 20 | Complexity: 7 phpMyFAQ\Configuration\LdapSettings::buildServers — Coverage: 100.0% | Lines: 20 | Complexity: 5 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchValues — Coverage: 85.0% | Lines: 20 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\AttachmentController::refresh — Coverage: 70.0% | Lines: 20 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UserController::activate — Coverage: 70.0% | Lines: 20 | Complexity: 8 phpMyFAQ\Controller\Administration\FaqController::index — Coverage: 100.0% | Lines: 20 | Complexity: 1 phpMyFAQ\Controller\Administration\StickyFaqsController::index — Coverage: 100.0% | Lines: 20 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\SetupController::updateDatabase — Coverage: 100.0% | Lines: 20 | Complexity: 6 phpMyFAQ\Controller\Frontend\AuthenticationController::logout — Coverage: 100.0% | Lines: 20 | Complexity: 9 phpMyFAQ\Faq\FaqRepository::fetchFaqByIdAndCategoryId — Coverage: 100.0% | Lines: 20 | Complexity: 3 phpMyFAQ\Faq\Permission::get — Coverage: 100.0% | Lines: 20 | Complexity: 7 phpMyFAQ\Helper\StatisticsHelper::deleteTrackingFiles — Coverage: 60.0% | Lines: 20 | Complexity: 11 phpMyFAQ\Helper\StatisticsHelper::renderDaySelector — Coverage: 100.0% | Lines: 20 | Complexity: 4 phpMyFAQ\Instance\Database\Pgsql::createTables — Coverage: 100.0% | Lines: 20 | Complexity: 12 phpMyFAQ\Instance\Search\OpenSearch::indexCustomPage — Coverage: 100.0% | Lines: 20 | Complexity: 3 phpMyFAQ\Instance\Setup::createLdapFile — Coverage: 100.0% | Lines: 20 | Complexity: 1 phpMyFAQ\Link::toHtmlAnchor — Coverage: 100.0% | Lines: 20 | Complexity: 12 phpMyFAQ\Mail::addEmailTo — Coverage: 80.0% | Lines: 20 | Complexity: 7 phpMyFAQ\Mail\Smtp::send — Coverage: 100.0% | Lines: 20 | Complexity: 9 phpMyFAQ\News::getAll — Coverage: 100.0% | Lines: 20 | Complexity: 4 phpMyFAQ\Permission\MediumPermissionRepository::getUserGroupRights — Coverage: 100.0% | Lines: 20 | Complexity: 6 phpMyFAQ\Queue\Worker::runOnce — Coverage: 100.0% | Lines: 20 | Complexity: 5 phpMyFAQ\Setup\InstallationRunner::stepCreateConfigFiles — Coverage: 0.0% | Lines: 20 | Complexity: 11 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::doTranslate — Coverage: 90.0% | Lines: 20 | Complexity: 5 phpMyFAQ\User::__construct — Coverage: 90.0% | Lines: 20 | Complexity: 4 phpMyFAQ\User::getUserByCookie — Coverage: 95.0% | Lines: 20 | Complexity: 4 phpMyFAQ\Administration\Backup::isCompleteStatement — Coverage: 94.7% | Lines: 19 | Complexity: 9 phpMyFAQ\Administration\Faq::getContentHealthStatistics — Coverage: 0.0% | Lines: 19 | Complexity: 1 phpMyFAQ\Api\MetaService::buildThemeColors — Coverage: 47.4% | Lines: 19 | Complexity: 3 phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolveDatabaseFile — Coverage: 84.2% | Lines: 19 | Complexity: 11 phpMyFAQ\Category::getCategoriesPaginated — Coverage: 94.7% | Lines: 19 | Complexity: 3 phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter::transform — Coverage: 36.8% | Lines: 19 | Complexity: 4 phpMyFAQ\Chat::getConversation — Coverage: 94.7% | Lines: 19 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\CategoryController::updateOrder — Coverage: 100.0% | Lines: 19 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\DashboardController::sanitizeLayout — Coverage: 0.0% | Lines: 19 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\ExportController::exportFile — Coverage: 68.4% | Lines: 19 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\NewsController::activate — Coverage: 94.7% | Lines: 19 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\PageController::delete — Coverage: 89.5% | Lines: 19 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\UpdateController::downloadPackage — Coverage: 94.7% | Lines: 19 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\WebAuthnController::register — Coverage: 84.2% | Lines: 19 | Complexity: 7 phpMyFAQ\Controller\Frontend\UserController::resetPassword — Coverage: 0.0% | Lines: 19 | Complexity: 9 phpMyFAQ\CustomPage::mapRowToEntity — Coverage: 100.0% | Lines: 19 | Complexity: 5 phpMyFAQ\Database\Sqlite3::queryPrepared — Coverage: 57.9% | Lines: 19 | Complexity: 7 phpMyFAQ\Faq\FaqRepository::fetchAllFaqs — Coverage: 100.0% | Lines: 19 | Complexity: 1 phpMyFAQ\Glossary\GlossaryHelper::extractMatchParts — Coverage: 100.0% | Lines: 19 | Complexity: 8 phpMyFAQ\Helper\LanguageHelper::getAvailableLanguages — Coverage: 100.0% | Lines: 19 | Complexity: 5 phpMyFAQ\Link\Util\LinkQueryParser::parse — Coverage: 89.5% | Lines: 19 | Complexity: 10 phpMyFAQ\Question\QuestionRepository::getById — Coverage: 100.0% | Lines: 19 | Complexity: 3 phpMyFAQ\Queue\Transport\DatabaseTransport::enqueue — Coverage: 100.0% | Lines: 19 | Complexity: 2 phpMyFAQ\Routing\RouteCacheManager::generateRouteCode — Coverage: 100.0% | Lines: 19 | Complexity: 1 phpMyFAQ\Scheduler\TaskScheduler::aggregateStatistics — Coverage: 100.0% | Lines: 19 | Complexity: 2 phpMyFAQ\Session\RedisSessionHandler::validateConnection — Coverage: 68.4% | Lines: 19 | Complexity: 4 phpMyFAQ\Setup\InstallationRunner::stepEstablishDbConnection — Coverage: 0.0% | Lines: 19 | Complexity: 5 phpMyFAQ\Setup\InstallationRunner::stepInitializeSearchEngine — Coverage: 0.0% | Lines: 19 | Complexity: 5 phpMyFAQ\Setup\Migration\MigrationTracker::getAppliedMigrations — Coverage: 100.0% | Lines: 19 | Complexity: 7 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::formatValue — Coverage: 42.1% | Lines: 19 | Complexity: 12 phpMyFAQ\Setup\UpdateRunner::taskUpdateCheck — Coverage: 0.0% | Lines: 19 | Complexity: 3 phpMyFAQ\Setup\Upgrade::downloadPackage — Coverage: 73.7% | Lines: 19 | Complexity: 5 phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCountWithinLimit — Coverage: 100.0% | Lines: 19 | Complexity: 4 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::doTranslate — Coverage: 100.0% | Lines: 19 | Complexity: 6 phpMyFAQ\Administration\Backup\BackupRepository::add — Coverage: 100.0% | Lines: 18 | Complexity: 5 phpMyFAQ\Administration\DashboardLayout::save — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Administration\RatingStatistics::mapRowToRating — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Administration\ReportRepository::fetchAllReportData — Coverage: 100.0% | Lines: 18 | Complexity: 5 phpMyFAQ\Administration\Session::getVisitsForDays — Coverage: 94.4% | Lines: 18 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::createPemFromJwk — Coverage: 94.4% | Lines: 18 | Complexity: 4 phpMyFAQ\Captcha\BuiltinCaptcha::createBackground — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Category\Permission::get — Coverage: 100.0% | Lines: 18 | Complexity: 6 phpMyFAQ\Comment\CommentsRepository::fetchPaginated — Coverage: 100.0% | Lines: 18 | Complexity: 4 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::warmFromRows — Coverage: 94.4% | Lines: 18 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\FaqController::listByCategory — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\FaqController::saveOrderOfStickyFaqs — Coverage: 94.4% | Lines: 18 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\GroupController::deleteGroup — Coverage: 66.7% | Lines: 18 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\StopWordController::save — Coverage: 44.4% | Lines: 18 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\UpdateController::healthCheck — Coverage: 72.2% | Lines: 18 | Complexity: 3 phpMyFAQ\Controller\Administration\AuthenticationController::logout — Coverage: 94.4% | Lines: 18 | Complexity: 6 phpMyFAQ\Controller\Administration\ImportController::index — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Controller\Administration\StatisticsSessionsController::viewSession — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\ChatController::send — Coverage: 94.4% | Lines: 18 | Complexity: 5 phpMyFAQ\Core\Error::exceptionHandler — Coverage: 100.0% | Lines: 18 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::numRows — Coverage: 77.8% | Lines: 18 | Complexity: 10 phpMyFAQ\Export\Pdf\Wrapper::fetchExternalImage — Coverage: 83.3% | Lines: 18 | Complexity: 4 phpMyFAQ\Faq\FaqRepository::fetchAvailableFaqsByCategoryId — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Faq\FaqRepository::fetchFaqsByIds — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::countRenderableFaqsByCategoryId — Coverage: 100.0% | Lines: 18 | Complexity: 3 phpMyFAQ\Glossary\GlossaryRepository::fetchAll — Coverage: 100.0% | Lines: 18 | Complexity: 3 phpMyFAQ\Helper\LanguageHelper::renderLanguageOptions — Coverage: 100.0% | Lines: 18 | Complexity: 8 phpMyFAQ\Helper\TagsHelper::renderSearchTag — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::update — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\News\NewsRepository::insert — Coverage: 100.0% | Lines: 18 | Complexity: 3 phpMyFAQ\Permission\GroupCategoryPermissionRepository::getCategoryRestrictions — Coverage: 94.4% | Lines: 18 | Complexity: 8 phpMyFAQ\Permission\GroupCategoryPermissionRepository::getAllCategoryRestrictions — Coverage: 94.4% | Lines: 18 | Complexity: 7 phpMyFAQ\Permission\MediumPermissionRepository::getGroupRights — Coverage: 100.0% | Lines: 18 | Complexity: 6 phpMyFAQ\Permission\MediumPermissionRepository::getGroupMembers — Coverage: 100.0% | Lines: 18 | Complexity: 6 phpMyFAQ\Permission\MediumPermissionRepository::getUserGroups — Coverage: 100.0% | Lines: 18 | Complexity: 6 phpMyFAQ\Queue\Transport\DatabaseTransport::release — Coverage: 100.0% | Lines: 18 | Complexity: 2 phpMyFAQ\Seo\SitemapXmlService::collectUrls — Coverage: 100.0% | Lines: 18 | Complexity: 4 phpMyFAQ\Setup\Installation\SchemaInstaller::createTables — Coverage: 88.9% | Lines: 18 | Complexity: 10 phpMyFAQ\Setup\Installation\SchemaInstaller::createAndUseSchema — Coverage: 27.8% | Lines: 18 | Complexity: 6 phpMyFAQ\Setup\Migration\MigrationRegistry::registerDefaultMigrations — Coverage: 100.0% | Lines: 18 | Complexity: 1 phpMyFAQ\Setup\Upgrade::isPathSafe — Coverage: 100.0% | Lines: 18 | Complexity: 7 phpMyFAQ\User::getAllUsers — Coverage: 100.0% | Lines: 18 | Complexity: 9 phpMyFAQ\User\UserData::load — Coverage: 72.2% | Lines: 18 | Complexity: 7 phpMyFAQ\Administration\AdminMenuBuilder::renderTranslationProviderOptions — Coverage: 0.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Administration\Faq::setStickyFaqOrder — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Administration\RemoteApiClient::getVerificationIssues — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Attachment\AbstractAttachment::getMeta — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Auth\AuthChain::authenticate — Coverage: 100.0% | Lines: 17 | Complexity: 5 phpMyFAQ\Auth\AuthLdap::assignUserToGroups — Coverage: 100.0% | Lines: 17 | Complexity: 6 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::getScopeEntityByIdentifier — Coverage: 94.1% | Lines: 17 | Complexity: 4 phpMyFAQ\Bootstrap\SearchClientFactory::waitForHealthy — Coverage: 88.2% | Lines: 17 | Complexity: 8 phpMyFAQ\Category\CategoryRepository::findAllCategories — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Category\CategoryRepository::countCategories — Coverage: 0.0% | Lines: 17 | Complexity: 5 phpMyFAQ\Comment\CommentsRepository::insert — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\ConfigurationController::testRedisConnection — Coverage: 70.6% | Lines: 17 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\FaqController::delete — Coverage: 88.2% | Lines: 17 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\GlossaryController::update — Coverage: 76.5% | Lines: 17 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\InstanceController::delete — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Controller\Administration\AuthenticationController::token — Coverage: 100.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Controller\Administration\InstanceController::edit — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Controller\Administration\StatisticsSessionsController::viewDay — Coverage: 100.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Controller\Api\OAuth2Controller::token — Coverage: 100.0% | Lines: 17 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\AutoCompleteController::search — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\ChatController::getMessages — Coverage: 100.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\UserController::removeTwofactorConfig — Coverage: 100.0% | Lines: 17 | Complexity: 6 phpMyFAQ\Controller\Frontend\AuthenticationController::token — Coverage: 100.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Database\Pgsql::connect — Coverage: 0.0% | Lines: 17 | Complexity: 4 phpMyFAQ\Export\Pdf\Wrapper::addFaqToc — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::getImageMimeType — Coverage: 88.2% | Lines: 17 | Complexity: 10 phpMyFAQ\Faq\FaqDisplayService::__construct — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Faq\FaqRepository::queryRenderableFaqsByIds — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Filesystem\Filesystem::recursiveCopy — Coverage: 88.2% | Lines: 17 | Complexity: 6 phpMyFAQ\Helper\StatisticsHelper::getLastTrackingDate — Coverage: 94.1% | Lines: 17 | Complexity: 8 phpMyFAQ\Instance\Client::getDatabaseCredentials — Coverage: 94.1% | Lines: 17 | Complexity: 7 phpMyFAQ\Instance\Client::insertSeedRows — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::index — Coverage: 100.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Mail::__construct — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\News\NewsRepository::update — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Permission\BasicPermissionRepository::getAllRightsData — Coverage: 100.0% | Lines: 17 | Complexity: 8 phpMyFAQ\Permission\MediumPermissionRepository::getAllGroups — Coverage: 100.0% | Lines: 17 | Complexity: 6 phpMyFAQ\Question::getAll — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Session\Token::setSession — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Setup\AbstractSetup::checkPreUpgrade — Coverage: 76.5% | Lines: 17 | Complexity: 8 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcustompages — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::toArray — Coverage: 100.0% | Lines: 17 | Complexity: 1 phpMyFAQ\Setup\UpdateRunner::runDryRun — Coverage: 0.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Setup\UpdateRunner::taskCreateTemporaryBackup — Coverage: 0.0% | Lines: 17 | Complexity: 2 phpMyFAQ\Setup\UpdateRunner::taskInstallPackage — Coverage: 0.0% | Lines: 17 | Complexity: 3 phpMyFAQ\Translation::ensureLanguageLoaded — Coverage: 94.1% | Lines: 17 | Complexity: 8 phpMyFAQ\Translation\Provider\LibreTranslationProvider::doTranslate — Coverage: 100.0% | Lines: 17 | Complexity: 3 phpMyFAQ\User::getEncryptedPassword — Coverage: 0.0% | Lines: 17 | Complexity: 7 phpMyFAQ\Administration\AdminMenuBuilder::renderMailProviderOptions — Coverage: 0.0% | Lines: 16 | Complexity: 3 phpMyFAQ\Administration\Changelog::getByFaqId — Coverage: 100.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Administration\Faq::updateRecordFlag — Coverage: 100.0% | Lines: 16 | Complexity: 7 phpMyFAQ\Administration\RemoteApiClient::isVerified — Coverage: 100.0% | Lines: 16 | Complexity: 3 phpMyFAQ\Attachment\Filesystem\AbstractFile::deleteDir — Coverage: 93.8% | Lines: 16 | Complexity: 9 phpMyFAQ\Auth\AuthDatabase::create — Coverage: 87.5% | Lines: 16 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::extractRoleNames — Coverage: 87.5% | Lines: 16 | Complexity: 10 phpMyFAQ\Auth\Oidc\OidcClient::exchangeAuthorizationCode — Coverage: 100.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Category\Order::getAllCategories — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Category\Relation::getAggregatedFaqNumbers — Coverage: 81.2% | Lines: 16 | Complexity: 6 phpMyFAQ\Chat::getBatchUserInfo — Coverage: 93.8% | Lines: 16 | Complexity: 4 phpMyFAQ\Comments::getAllComments — Coverage: 93.8% | Lines: 16 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\AttachmentController::delete — Coverage: 68.8% | Lines: 16 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\NewsController::update — Coverage: 87.5% | Lines: 16 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\QuestionController::toggle — Coverage: 93.8% | Lines: 16 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\UserController::userData — Coverage: 100.0% | Lines: 16 | Complexity: 2 phpMyFAQ\Controller\Administration\NewsController::edit — Coverage: 100.0% | Lines: 16 | Complexity: 2 phpMyFAQ\Controller\Administration\StopWordsController::index — Coverage: 100.0% | Lines: 16 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\BookmarkController::create — Coverage: 93.8% | Lines: 16 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\BookmarkController::delete — Coverage: 87.5% | Lines: 16 | Complexity: 5 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::buildAuthContext — Coverage: 100.0% | Lines: 16 | Complexity: 9 phpMyFAQ\Controller\Frontend\ChatController::index — Coverage: 100.0% | Lines: 16 | Complexity: 2 phpMyFAQ\Controller\Frontend\FaqController::contentRedirect — Coverage: 100.0% | Lines: 16 | Complexity: 6 phpMyFAQ\Controller\Frontend\UserController::requestRemoval — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Controller\Frontend\UserController::bookmarks — Coverage: 100.0% | Lines: 16 | Complexity: 2 phpMyFAQ\Database\Mysqli::connect — Coverage: 18.8% | Lines: 16 | Complexity: 7 phpMyFAQ\Faq\FaqDisplayService::processAnswer — Coverage: 93.8% | Lines: 16 | Complexity: 5 phpMyFAQ\Faq\FaqRepository::isFaqVisibleForUser — Coverage: 100.0% | Lines: 16 | Complexity: 1 phpMyFAQ\Faq\FaqRepository::isActive — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Faq\FaqRepository::fetchQuestion — Coverage: 100.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Faq\FaqRepository::queryRenderableFaqsByCategoryId — Coverage: 100.0% | Lines: 16 | Complexity: 1 phpMyFAQ\Faq\MetaData::save — Coverage: 81.2% | Lines: 16 | Complexity: 2 phpMyFAQ\Glossary::insertItemsIntoContent — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Glossary\GlossaryRepository::fetch — Coverage: 100.0% | Lines: 16 | Complexity: 3 phpMyFAQ\Helper\MailHelper::sendMailToNewUser — Coverage: 100.0% | Lines: 16 | Complexity: 3 phpMyFAQ\Helper\RegistrationHelper::isDomainAllowed — Coverage: 93.8% | Lines: 16 | Complexity: 8 phpMyFAQ\Instance\Database\PdoSqlsrv::createTables — Coverage: 100.0% | Lines: 16 | Complexity: 7 phpMyFAQ\Instance\Database\Sqlsrv::createTables — Coverage: 100.0% | Lines: 16 | Complexity: 7 phpMyFAQ\Instance\Search\OpenSearch::update — Coverage: 100.0% | Lines: 16 | Complexity: 1 phpMyFAQ\Link::toString — Coverage: 93.8% | Lines: 16 | Complexity: 6 phpMyFAQ\Mail\Provider\SesProvider::getSesClient — Coverage: 37.5% | Lines: 16 | Complexity: 4 phpMyFAQ\Permission\BasicPermissionRepository::getUserRights — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Routing\RouteCollectionBuilder::getControllerDirectories — Coverage: 100.0% | Lines: 16 | Complexity: 6 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::execute — Coverage: 81.2% | Lines: 16 | Complexity: 7 phpMyFAQ\Setup\Update::applyUpdates — Coverage: 50.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Setup\UpdateRunner::taskExtractPackage — Coverage: 0.0% | Lines: 16 | Complexity: 2 phpMyFAQ\Setup\UpdateToken::read — Coverage: 87.5% | Lines: 16 | Complexity: 9 phpMyFAQ\Setup\Upgrade::secureExtractZip — Coverage: 87.5% | Lines: 16 | Complexity: 6 phpMyFAQ\Setup\Upgrade::cleanUp — Coverage: 0.0% | Lines: 16 | Complexity: 5 phpMyFAQ\StopWords::getByLang — Coverage: 100.0% | Lines: 16 | Complexity: 5 phpMyFAQ\Tags::getAllTagsById — Coverage: 100.0% | Lines: 16 | Complexity: 4 phpMyFAQ\Tenant\TenantContextResolver::resolve — Coverage: 100.0% | Lines: 16 | Complexity: 3 phpMyFAQ\User\CurrentUser::deleteFromSession — Coverage: 81.2% | Lines: 16 | Complexity: 4 phpMyFAQ\Administration\AdminMenuBuilder::renderLayoutModeOptions — Coverage: 0.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Api\MetaService::extractThemeVariables — Coverage: 93.3% | Lines: 15 | Complexity: 3 phpMyFAQ\Auth\AuthDatabase::update — Coverage: 86.7% | Lines: 15 | Complexity: 4 phpMyFAQ\Auth\Oidc\OidcClient::decodeJsonResponse — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::expandTo — Coverage: 93.3% | Lines: 15 | Complexity: 6 phpMyFAQ\Category\Relation::getCategoryFaqsMatrix — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Category\Relation::getCategories — Coverage: 73.3% | Lines: 15 | Complexity: 4 phpMyFAQ\Comment\CommentsRepository::isCommentAllowed — Coverage: 93.3% | Lines: 15 | Complexity: 3 phpMyFAQ\Configuration\MultisiteConfigurationLocator::locateConfigurationDirectory — Coverage: 100.0% | Lines: 15 | Complexity: 6 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::read — Coverage: 86.7% | Lines: 15 | Complexity: 8 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::uploadTheme — Coverage: 93.3% | Lines: 15 | Complexity: 6 phpMyFAQ\Controller\Administration\Api\FormController::editTranslation — Coverage: 86.7% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\FormController::addTranslation — Coverage: 86.7% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\GlossaryController::delete — Coverage: 46.7% | Lines: 15 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\UpdateController::extractPackage — Coverage: 6.7% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\UpdateController::createTemporaryBackup — Coverage: 6.7% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\UpdateController::installPackage — Coverage: 6.7% | Lines: 15 | Complexity: 4 phpMyFAQ\Controller\Administration\BackupController::index — Coverage: 100.0% | Lines: 15 | Complexity: 1 phpMyFAQ\Controller\Administration\BackupController::export — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Controller\Api\FaqController::getById — Coverage: 100.0% | Lines: 15 | Complexity: 6 phpMyFAQ\Controller\Frontend\FaqController::solution — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\Frontend\SetupController::install — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Controller\SitemapController::generateGzippedSitemap — Coverage: 66.7% | Lines: 15 | Complexity: 4 phpMyFAQ\CustomPage::mapRowToArray — Coverage: 100.0% | Lines: 15 | Complexity: 1 phpMyFAQ\EventListener\LanguageListener::detectLanguage — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Export\Pdf\Wrapper::validateImageData — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Faq\Statistics::getTrending — Coverage: 100.0% | Lines: 15 | Complexity: 2 phpMyFAQ\Filter::sanitizerConfig — Coverage: 100.0% | Lines: 15 | Complexity: 1 phpMyFAQ\Forms::addTranslation — Coverage: 93.3% | Lines: 15 | Complexity: 3 phpMyFAQ\Helper\StatisticsHelper::getFirstTrackingDate — Coverage: 93.3% | Lines: 15 | Complexity: 6 phpMyFAQ\Helper\SvgSanitizer::isSafe — Coverage: 93.3% | Lines: 15 | Complexity: 8 phpMyFAQ\Instance::create — Coverage: 100.0% | Lines: 15 | Complexity: 2 phpMyFAQ\Instance\Database\Mysqli::createTables — Coverage: 100.0% | Lines: 15 | Complexity: 8 phpMyFAQ\Instance\Database\PdoMysql::createTables — Coverage: 100.0% | Lines: 15 | Complexity: 8 phpMyFAQ\Language::isLanguageAvailable — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Mail\Builtin::send — Coverage: 100.0% | Lines: 15 | Complexity: 6 phpMyFAQ\News\NewsRepository::getLatest — Coverage: 100.0% | Lines: 15 | Complexity: 7 phpMyFAQ\Permission\BasicPermissionRepository::getRightData — Coverage: 93.3% | Lines: 15 | Complexity: 4 phpMyFAQ\Permission\GroupCategoryPermissionRepository::checkUserGroupRightForCategory — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\Permission\MediumPermissionRepository::checkUserGroupRight — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::changeGroup — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\Plugin\PluginManager::registerPlugin — Coverage: 93.3% | Lines: 15 | Complexity: 4 phpMyFAQ\Push\PushSubscriptionRepository::mapRowToEntity — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Question\QuestionRepository::add — Coverage: 100.0% | Lines: 15 | Complexity: 2 phpMyFAQ\Queue\Worker::decodeMessage — Coverage: 66.7% | Lines: 15 | Complexity: 7 phpMyFAQ\Search\Database\PdoSqlsrv::search — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Search\Database\Sqlite3::search — Coverage: 100.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Session\Token::verifyToken — Coverage: 100.0% | Lines: 15 | Complexity: 9 phpMyFAQ\Setup\Installation\DatabaseSchema::faqnews — Coverage: 100.0% | Lines: 15 | Complexity: 1 phpMyFAQ\Setup\InstallationInputValidator::validateElasticsearchInput — Coverage: 0.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Setup\InstallationInputValidator::validateOpenSearchInput — Coverage: 0.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Setup\InstallationRunner::stepCreateDatabaseTables — Coverage: 0.0% | Lines: 15 | Complexity: 3 phpMyFAQ\Setup\Installer::checkBasicStuff — Coverage: 86.7% | Lines: 15 | Complexity: 6 phpMyFAQ\Setup\Migration\AbstractMigration::createIndex — Coverage: 33.3% | Lines: 15 | Complexity: 4 phpMyFAQ\Setup\UpdateRunner::run — Coverage: 93.3% | Lines: 15 | Complexity: 3 phpMyFAQ\Setup\Upgrade::verifyPackage — Coverage: 0.0% | Lines: 15 | Complexity: 4 phpMyFAQ\StopWords::clean — Coverage: 100.0% | Lines: 15 | Complexity: 6 phpMyFAQ\Storage\FilesystemStorage::putStream — Coverage: 86.7% | Lines: 15 | Complexity: 7 phpMyFAQ\Translation::registerPluginTranslations — Coverage: 93.3% | Lines: 15 | Complexity: 6 phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension::faqLink — Coverage: 100.0% | Lines: 15 | Complexity: 1 phpMyFAQ\User::searchUsers — Coverage: 100.0% | Lines: 15 | Complexity: 5 phpMyFAQ\User::activateUser — Coverage: 100.0% | Lines: 15 | Complexity: 4 phpMyFAQ\User\UserData::fetchAll — Coverage: 86.7% | Lines: 15 | Complexity: 5 phpMyFAQ\Administration\Backup\BackupRepository::findByFilename — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Administration\Changelog::add — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Administration\SessionRepository::getSessionsByDateRange — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Administration\SessionRepository::getSessionTimestamps — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Api\Filtering\FilterRequest::fromRequest — Coverage: 100.0% | Lines: 14 | Complexity: 7 phpMyFAQ\Api\ProblemDetails::toArray — Coverage: 78.6% | Lines: 14 | Complexity: 4 phpMyFAQ\Auth\AuthDatabase::delete — Coverage: 85.7% | Lines: 14 | Complexity: 4 phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::validateClient — Coverage: 100.0% | Lines: 14 | Complexity: 8 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateSignature — Coverage: 85.7% | Lines: 14 | Complexity: 6 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::findKey — Coverage: 57.1% | Lines: 14 | Complexity: 9 phpMyFAQ\Bootstrap\SearchClientFactory::configureElasticsearch — Coverage: 85.7% | Lines: 14 | Complexity: 4 phpMyFAQ\Captcha\GoogleRecaptcha::checkCaptchaCode — Coverage: 100.0% | Lines: 14 | Complexity: 6 phpMyFAQ\Category::__construct — Coverage: 92.9% | Lines: 14 | Complexity: 5 phpMyFAQ\Category::expandTo — Coverage: 100.0% | Lines: 14 | Complexity: 5 phpMyFAQ\Category\CategoryRepository::update — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Category\Image::upload — Coverage: 92.9% | Lines: 14 | Complexity: 9 phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildFromIdsWithStartPage — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Category\Order::getParentId — Coverage: 92.9% | Lines: 14 | Complexity: 7 phpMyFAQ\Command\UpdateCommand::execute — Coverage: 42.9% | Lines: 14 | Complexity: 3 phpMyFAQ\Comments::getCommentsData — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Comments::getCommentsDataPaginated — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Configuration::__construct — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver::resolve — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::renameKey — Coverage: 0.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Controller\AbstractController::initializeFromContainer — Coverage: 78.6% | Lines: 14 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::translations — Coverage: 92.9% | Lines: 14 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\FormController::deleteTranslation — Coverage: 85.7% | Lines: 14 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\MarkdownController::renderMarkdown — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\PageController::indexCustomPage — Coverage: 100.0% | Lines: 14 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\PageController::updateCustomPageIndex — Coverage: 100.0% | Lines: 14 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\PageController::deleteCustomPageFromIndex — Coverage: 100.0% | Lines: 14 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\TagController::update — Coverage: 85.7% | Lines: 14 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\UpdateController::updateDatabase — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Controller\Administration\CategoryController::add — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Controller\Administration\CategoryController::getBaseTemplateVars — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Controller\Administration\TagController::index — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Controller\Administration\UpdateController::index — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::getSubCategoryContent — Coverage: 100.0% | Lines: 14 | Complexity: 8 phpMyFAQ\Controller\Frontend\CategoryController::buildParentNavigationLink — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::logout — Coverage: 71.4% | Lines: 14 | Complexity: 4 phpMyFAQ\Date::createIsoDate — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::getFaqResult — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Glossary\GlossaryRepository::create — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Helper\CategoryHelper::renderCategoryTree — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Helper\UserHelper::getAllUsersForTemplate — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Instance\Client::extractClientHostnameFromUrl — Coverage: 100.0% | Lines: 14 | Complexity: 12 phpMyFAQ\Instance\Search\OpenSearch::index — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Instance\Setup::checkDirs — Coverage: 78.6% | Lines: 14 | Complexity: 9 phpMyFAQ\Instance\Setup::createElasticsearchFile — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Instance\Setup::createOpenSearchFile — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Permission\BasicPermission::checkRightData — Coverage: 100.0% | Lines: 14 | Complexity: 6 phpMyFAQ\Push\PushSubscriptionRepository::getByUserIds — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Queue\Worker::run — Coverage: 100.0% | Lines: 14 | Complexity: 5 phpMyFAQ\Routing\RouteCacheManager::getRoutes — Coverage: 71.4% | Lines: 14 | Complexity: 6 phpMyFAQ\Scheduler\TaskScheduler::createBackup — Coverage: 100.0% | Lines: 14 | Complexity: 2 phpMyFAQ\Search\Database\PdoSqlite::search — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Search\Database\Sqlsrv::search — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Seo\SeoRepository::create — Coverage: 100.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Service\Gravatar::getImage — Coverage: 100.0% | Lines: 14 | Complexity: 8 phpMyFAQ\Service\McpServer\McpSdkRuntime::faqSearch — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::createServerInfo — Coverage: 0.0% | Lines: 14 | Complexity: 1 phpMyFAQ\Session\RedisSessionHandler::buildSocketTarget — Coverage: 100.0% | Lines: 14 | Complexity: 7 phpMyFAQ\Setup\Migration\MigrationTracker::ensureTableExists — Coverage: 0.0% | Lines: 14 | Complexity: 6 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::buildIndexStatements — Coverage: 92.9% | Lines: 14 | Complexity: 4 phpMyFAQ\Setup\UpdateRunner::displayMigrationResults — Coverage: 100.0% | Lines: 14 | Complexity: 4 phpMyFAQ\Template\ThemeManager::normalizeArchivePath — Coverage: 92.9% | Lines: 14 | Complexity: 5 phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanStoreAttachment — Coverage: 92.9% | Lines: 14 | Complexity: 4 phpMyFAQ\User\Tracking::log — Coverage: 100.0% | Lines: 14 | Complexity: 6 phpMyFAQ\Visits\VisitsRepository::getAll — Coverage: 100.0% | Lines: 14 | Complexity: 3 phpMyFAQ\Administration\AdminMenuBuilder::renderCacheAdapterOptions — Coverage: 0.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Attachment\File::isStorageOk — Coverage: 92.3% | Lines: 13 | Complexity: 6 phpMyFAQ\Auth\AuthEntraId::createOAuthChallenge — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::toPsr7Request — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Auth\OAuth2\ResourceServer::toPsr7Request — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validate — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::fetchJwks — Coverage: 69.2% | Lines: 13 | Complexity: 5 phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper::renderCaptcha — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Category::getPathWithStartPage — Coverage: 92.3% | Lines: 13 | Complexity: 3 phpMyFAQ\Category\CategoryRepository::countByNameLangParent — Coverage: 92.3% | Lines: 13 | Complexity: 6 phpMyFAQ\Category\Order::getCategoryTree — Coverage: 100.0% | Lines: 13 | Complexity: 5 phpMyFAQ\Chat::messagesToArray — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Command\McpServerCommand::execute — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Comment\CommentsRepository::countByReferenceIdAndType — Coverage: 92.3% | Lines: 13 | Complexity: 4 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::warm — Coverage: 84.6% | Lines: 13 | Complexity: 5 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::updateConfigValue — Coverage: 92.3% | Lines: 13 | Complexity: 4 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::insert — Coverage: 46.2% | Lines: 13 | Complexity: 4 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::delete — Coverage: 46.2% | Lines: 13 | Complexity: 4 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::fetchAll — Coverage: 92.3% | Lines: 13 | Complexity: 5 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::renameKey — Coverage: 76.9% | Lines: 13 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\CategoryController::permissions — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\DashboardController::saveLayout — Coverage: 53.8% | Lines: 13 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\GroupController::listMembers — Coverage: 92.3% | Lines: 13 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\NewsController::create — Coverage: 92.3% | Lines: 13 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\NewsController::delete — Coverage: 92.3% | Lines: 13 | Complexity: 3 phpMyFAQ\Controller\Administration\FormsController::index — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Controller\Administration\SessionKeepAliveController::index — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Controller\Frontend\AbstractFrontController::handleStaticPageRedirect — Coverage: 53.8% | Lines: 13 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\ChatController::markAsRead — Coverage: 92.3% | Lines: 13 | Complexity: 4 phpMyFAQ\Controller\Frontend\Api\ChatController::searchUsers — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\PushController::unsubscribe — Coverage: 100.0% | Lines: 13 | Complexity: 5 phpMyFAQ\Controller\Frontend\Api\WebAuthnController::prepareLogin — Coverage: 100.0% | Lines: 13 | Complexity: 5 phpMyFAQ\Controller\Frontend\AttachmentController::createDownloadResponse — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::authorize — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Controller\Frontend\ErrorController::internalServerError — Coverage: 84.6% | Lines: 13 | Complexity: 2 phpMyFAQ\Controller\Frontend\WebAuthnController::prepareLogin — Coverage: 76.9% | Lines: 13 | Complexity: 4 phpMyFAQ\CustomPage\CustomPageRepository::getAll — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\CustomPage\CustomPageRepository::getExistingLanguages — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Date::getTrackingFileDateStart — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Date::getTrackingFileDateEnd — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::fetchStickyFaqs — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Form\FormsRepository::insertTranslationRow — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Form\FormsServiceProvider::register — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Helper\StatisticsHelper::renderMonthSelector — Coverage: 92.3% | Lines: 13 | Complexity: 3 phpMyFAQ\Instance\Client::createClientTablesWithSchema — Coverage: 84.6% | Lines: 13 | Complexity: 4 phpMyFAQ\Link\Strategy\NewsStrategy::build — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Pagination::renderPageNumbers — Coverage: 53.8% | Lines: 13 | Complexity: 4 phpMyFAQ\Permission\BasicPermissionRepository::checkUserRight — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Permission\BasicPermissionRepository::addRight — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::hasPermissionForCategory — Coverage: 76.9% | Lines: 13 | Complexity: 7 phpMyFAQ\Plugin\PluginDiscovery::readManifest — Coverage: 84.6% | Lines: 13 | Complexity: 9 phpMyFAQ\Routing\AttributeRouteLoader::getClassFromFile — Coverage: 100.0% | Lines: 13 | Complexity: 6 phpMyFAQ\Search::autoComplete — Coverage: 61.5% | Lines: 13 | Complexity: 3 phpMyFAQ\Search::logSearchTerm — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\Search\Database\Pgsql::getMatchingColumns — Coverage: 100.0% | Lines: 13 | Complexity: 6 phpMyFAQ\Seo\SeoRepository::update — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Service\McpServer\FaqSearchTool::formatResultsAsJson — Coverage: 100.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Setup\Installation\DatabaseSchema::attachment — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategories — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqapiKeys — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthAuthCodes — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Setup\InstallationInputValidator::validateLdapInput — Coverage: 0.0% | Lines: 13 | Complexity: 4 phpMyFAQ\Setup\InstallationRunner::run — Coverage: 0.0% | Lines: 13 | Complexity: 1 phpMyFAQ\StopWords::checkBannedWord — Coverage: 100.0% | Lines: 13 | Complexity: 7 phpMyFAQ\Translation\HtmlPreserver::replaceTags — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension::categoryLink — Coverage: 100.0% | Lines: 13 | Complexity: 1 phpMyFAQ\User::setStatus — Coverage: 100.0% | Lines: 13 | Complexity: 2 phpMyFAQ\User\UserSession::setCookie — Coverage: 100.0% | Lines: 13 | Complexity: 3 phpMyFAQ\Administration\AdminMenuBuilder::evaluatePermission — Coverage: 50.0% | Lines: 12 | Complexity: 8 phpMyFAQ\Api\OAuthDiscoveryService::getMetaDiscovery — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\Attachment\AbstractAttachment::linkedRecords — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\Attachment\AttachmentFactory::fetchByRecordId — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\Attachment\AttachmentService::checkGroupPermission — Coverage: 100.0% | Lines: 12 | Complexity: 6 phpMyFAQ\Attachment\AttachmentService::getUserRights — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\Auth\AuthEntraId::create — Coverage: 16.7% | Lines: 12 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::getGroupMapping — Coverage: 75.0% | Lines: 12 | Complexity: 6 phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateChallenge — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\Category\CategoryRepository::mapRow — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Category\CategoryRepository::findAllCategoryIds — Coverage: 100.0% | Lines: 12 | Complexity: 8 phpMyFAQ\Category\CategoryRepository::hasLinkToFaq — Coverage: 91.7% | Lines: 12 | Complexity: 6 phpMyFAQ\Category\Tree\TreeBuilder::buildLinearTree — Coverage: 91.7% | Lines: 12 | Complexity: 4 phpMyFAQ\Command\SeedTestDataCommand::configure — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Configuration\MultisiteConfigurationLocator::extractTenantFromSubdomain — Coverage: 100.0% | Lines: 12 | Complexity: 6 phpMyFAQ\Controller\Administration\AbstractAdministrationController::getFooter — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ApiKeyController::list — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\ConfigurationController::sendTestMail — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::import — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::statistics — Coverage: 8.3% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\FormController::activateInput — Coverage: 83.3% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\FormController::setInputAsRequired — Coverage: 83.3% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\GlossaryController::create — Coverage: 91.7% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\GroupController::listGroups — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\OpenSearchController::import — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Controller\Administration\GroupController::getBaseTemplateVars — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::resolveLogoutIdToken — Coverage: 66.7% | Lines: 12 | Complexity: 5 phpMyFAQ\CustomPage::getPagesPaginated — Coverage: 100.0% | Lines: 12 | Complexity: 2 phpMyFAQ\Database\PdoSqlite::queryPrepared — Coverage: 66.7% | Lines: 12 | Complexity: 4 phpMyFAQ\Database\Pgsql::numberPlaceholders — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\EventListener\WebExceptionListener::handleServerError — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Export\Pdf::__construct — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Faq\Statistics::totalFaqs — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Filesystem\Filesystem::deleteDirectory — Coverage: 100.0% | Lines: 12 | Complexity: 8 phpMyFAQ\Form\FormsRepository::buildInsertQuery — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Helper\FaqHelper::renderAnswerPreview — Coverage: 100.0% | Lines: 12 | Complexity: 2 phpMyFAQ\Helper\SvgSanitizer::detectIssues — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\Instance\Search\Elasticsearch::putMapping — Coverage: 91.7% | Lines: 12 | Complexity: 5 phpMyFAQ\Kernel::createContainerBuilder — Coverage: 50.0% | Lines: 12 | Complexity: 2 phpMyFAQ\Kernel::loadRoutes — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\Language::getLanguage — Coverage: 100.0% | Lines: 12 | Complexity: 8 phpMyFAQ\Language\LanguageDetector::initUserAgentLanguage — Coverage: 66.7% | Lines: 12 | Complexity: 6 phpMyFAQ\Mail::sendViaSmtpAgent — Coverage: 100.0% | Lines: 12 | Complexity: 4 phpMyFAQ\News\NewsService::getProcessedNews — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Permission\MediumPermission::hasPermission — Coverage: 75.0% | Lines: 12 | Complexity: 6 phpMyFAQ\Permission\MediumPermission::getAllGroupsOptions — Coverage: 91.7% | Lines: 12 | Complexity: 5 phpMyFAQ\Permission\MediumPermissionRepository::getGroupData — Coverage: 91.7% | Lines: 12 | Complexity: 4 phpMyFAQ\Question\QuestionRepository::getVisibility — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Routing\RouteCacheManager::writeCache — Coverage: 100.0% | Lines: 12 | Complexity: 2 phpMyFAQ\Search\Rating\RatingRepository::create — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::search — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Setup\EnvironmentConfigurator::adjustRewriteBaseHtaccess — Coverage: 83.3% | Lines: 12 | Complexity: 4 phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthAccessTokens — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqquestions — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqchatMessages — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqpushSubscriptions — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::getMigrations — Coverage: 83.3% | Lines: 12 | Complexity: 5 phpMyFAQ\Setup\UpdateToken::create — Coverage: 75.0% | Lines: 12 | Complexity: 5 phpMyFAQ\System::getAvailableTemplates — Coverage: 91.7% | Lines: 12 | Complexity: 5 phpMyFAQ\User::getUserByLogin — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\User::extractUserFromResult — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\User\CurrentUser::setTokenData — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\User\TrackingDataRedactor::redactQueryString — Coverage: 100.0% | Lines: 12 | Complexity: 5 phpMyFAQ\User\UserData::fetch — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\User\UserData::add — Coverage: 100.0% | Lines: 12 | Complexity: 3 phpMyFAQ\Utils::parseUrl — Coverage: 100.0% | Lines: 12 | Complexity: 1 phpMyFAQ\Administration\AdminMenuBuilder::setUser — Coverage: 72.7% | Lines: 11 | Complexity: 6 phpMyFAQ\Administration\AdminMenuBuilder::renderReleaseTypeOptions — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Administration\AdminMenuBuilder::canAccessContent — Coverage: 0.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Administration\Backup::getBackupHeader — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Administration\Category::getLevelOf — Coverage: 54.5% | Lines: 11 | Complexity: 5 phpMyFAQ\Administration\SessionRepository::countOnlineUsersFromSessions — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Administration\SessionRepository::countOnlineUsersFromFaqUser — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Api\Filtering\FilterRequest::parseBoolValue — Coverage: 63.6% | Lines: 11 | Complexity: 7 phpMyFAQ\Api\Pagination\PaginationMetadata::toArray — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::mkVirtualHash — Coverage: 100.0% | Lines: 11 | Complexity: 7 phpMyFAQ\Attachment\AttachmentCollection::getBreadcrumbs — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::copyTo — Coverage: 90.9% | Lines: 11 | Complexity: 5 phpMyFAQ\Auth\AuthLdap::connect — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::isAccessTokenRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::isAuthCodeRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::persistNewRefreshToken — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::isRefreshTokenRevoked — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcClient::buildAuthorizationUrl — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateVerifier — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Bootstrap\ConfigDirectoryResolver::computeAttachmentsPath — Coverage: 100.0% | Lines: 11 | Complexity: 7 phpMyFAQ\Cache\CacheFactory::createRedisAdapter — Coverage: 0.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildCategorySegments — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Category\Tree\TreePathResolver::getNodes — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Category\Tree\TreePathResolver::computeLevel — Coverage: 90.9% | Lines: 11 | Complexity: 5 phpMyFAQ\Chat::getUserInfo — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Command\CreateHashesCommand::configure — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Command\McpServerCommand::configure — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Command\SeedTestDataCommand::seedGlossary — Coverage: 90.9% | Lines: 11 | Complexity: 5 phpMyFAQ\Comment\CommentsRepository::fetchByReferenceIdAndType — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchValue — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\DashboardController::getFreshCache — Coverage: 81.8% | Lines: 11 | Complexity: 7 phpMyFAQ\Controller\Administration\Api\DashboardController::resetLayout — Coverage: 54.5% | Lines: 11 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\GroupController::listCategories — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\SearchController::deleteTerm — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\StopWordController::delete — Coverage: 81.8% | Lines: 11 | Complexity: 4 phpMyFAQ\Controller\Administration\NewsController::index — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Controller\Administration\UserController::edit — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Controller\Api\FaqController::getByTagId — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Controller\Frontend\AbstractFrontController::initializeFromContainer — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Controller\SitemapController::index — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\CustomPage\CustomPageRepository::slugExists — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Database\PdoMysql::queryPrepared — Coverage: 0.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Database\PdoPgsql::queryPrepared — Coverage: 0.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Database\PdoSqlsrv::queryPrepared — Coverage: 0.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Database\Pgsql::query — Coverage: 90.9% | Lines: 11 | Complexity: 4 phpMyFAQ\Database\Sqlsrv::query — Coverage: 81.8% | Lines: 11 | Complexity: 4 phpMyFAQ\Faq::isFaqAccessibleForUser — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::getSolutionIdFromId — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::fetchKeywords — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Faq\QueryHelper::queryPermissionExistsAny — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Faq\Statistics::getLatest — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\Filter::getFilteredQueryString — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Helper\StatisticsHelper::getAllTrackingDates — Coverage: 90.9% | Lines: 11 | Complexity: 7 phpMyFAQ\Helper\SvgSanitizer::sanitize — Coverage: 81.8% | Lines: 11 | Complexity: 5 phpMyFAQ\Instance::delete — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Link\Util\TitleSlugifier::slug — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\News::getHeader — Coverage: 100.0% | Lines: 11 | Complexity: 2 phpMyFAQ\News\NewsRepository::getHeaders — Coverage: 100.0% | Lines: 11 | Complexity: 5 phpMyFAQ\Pagination::renderUrl — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Permission\BasicPermissionRepository::getRightId — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::getAutoJoinGroups — Coverage: 90.9% | Lines: 11 | Complexity: 6 phpMyFAQ\Push\PushSubscriptionRepository::getByUserId — Coverage: 90.9% | Lines: 11 | Complexity: 3 phpMyFAQ\Push\PushSubscriptionRepository::getAll — Coverage: 90.9% | Lines: 11 | Complexity: 3 phpMyFAQ\Search\Database\Pgsql::getMatchingOrder — Coverage: 90.9% | Lines: 11 | Complexity: 5 phpMyFAQ\Search\Rating\RatingRepository::update — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Service\Gravatar::getImageUrl — Coverage: 0.0% | Lines: 11 | Complexity: 7 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcomments — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthClients — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqjobs — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqseo — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::buildOpenSearchClientOptions — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Setup\Migration\AbstractMigration::updateLanguageCode — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationTracker::recordMigration — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::createUser — Coverage: 0.0% | Lines: 11 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::execute — Coverage: 0.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::up — Coverage: 0.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Storage\StorageFactory::resolveFilesystemRoot — Coverage: 81.8% | Lines: 11 | Complexity: 9 phpMyFAQ\Tags::getAllLinkTagsById — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Tags::getFaqsByTagId — Coverage: 100.0% | Lines: 11 | Complexity: 4 phpMyFAQ\Tags::buildPermissionCheck — Coverage: 81.8% | Lines: 11 | Complexity: 5 phpMyFAQ\User::changePassword — Coverage: 90.9% | Lines: 11 | Complexity: 5 phpMyFAQ\User::getSuperAdminIds — Coverage: 100.0% | Lines: 11 | Complexity: 6 phpMyFAQ\User::getWebAuthnKeys — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\User\CurrentUser::setSuccess — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\User\CurrentUser::hasExceededLoginAttempts — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\User\TrackingDataRedactor::redactUrl — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\User\TwoFactor::getQrCode — Coverage: 100.0% | Lines: 11 | Complexity: 1 phpMyFAQ\User\UserAuthentication::authenticateLdap — Coverage: 27.3% | Lines: 11 | Complexity: 6 phpMyFAQ\Visits\VisitsRepository::getVisitCount — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\Visits\VisitsRepository::exists — Coverage: 90.9% | Lines: 11 | Complexity: 3 phpMyFAQ\ConfigurationMethodsTrait::replaceMainReferenceUrl — Coverage: 100.0% | Lines: 11 | Complexity: 3 phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromCookie — Coverage: 90.9% | Lines: 11 | Complexity: 3 phpMyFAQ\Administration\AdminMenuBuilder::renderMetaRobotsDropdown — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Administration\Revision::create — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Administration\Session::getNumberOfOnlineUsers — Coverage: 0.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Api\MetaService::getPublicMetadata — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Api\MetaService::buildEnabledFeatures — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Api\Response\ApiResponse::error — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Attachment\File::delete — Coverage: 70.0% | Lines: 10 | Complexity: 7 phpMyFAQ\Auth::selectAuth — Coverage: 80.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::checkCredentials — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\AuthLdap::__construct — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Auth\AuthSso::checkCredentials — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\EntraId\EntraIdSession::setCookie — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Auth\EntraId\JwksProvider::writeCache — Coverage: 90.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Auth\EntraId\OAuth::refreshToken — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClient::buildLogoutUrl — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::decodeSegment — Coverage: 90.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Bookmark::isFaqBookmark — Coverage: 90.0% | Lines: 10 | Complexity: 6 phpMyFAQ\Bootstrap\SearchClientFactory::configureOpenSearch — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Category::getMissingCategories — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Category\Language\CategoryLanguageService::getAllExistingTranslations — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Chat::getNewMessages — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Chat::messageToArray — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Command\SeedTestDataCommand::loadFixture — Coverage: 70.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Configuration\ConfigurationRepository::updateFaqDataContentById — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Configuration\LdapSettings::buildConfig — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::updateConfigValue — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::insert — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::renameKey — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getInstalledRedisVersion — Coverage: 80.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Controller\AbstractController::getTwigWrapper — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Controller\AbstractController::isSecured — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Controller\AbstractController::userHasAnyPermission — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Controller\AbstractController::verifySessionCsrfToken — Coverage: 70.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\ConfigurationController::activateMaintenanceMode — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\GroupController::listUsers — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\StatisticsController::truncateSearchTerms — Coverage: 90.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Controller\Administration\ConfigurationController::index — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Controller\Administration\NewsController::add — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Controller\Administration\PageController::add — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Controller\Api\FaqController::getByCategoryId — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\SetupController::isAuthenticatedAdministrator — Coverage: 70.0% | Lines: 10 | Complexity: 4 phpMyFAQ\CustomPage::getAllLanguagesPaginated — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\CustomPage\CustomPageRepository::countAll — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Database::errorPage — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Database\PdoMysql::query — Coverage: 80.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Database\PdoPgsql::query — Coverage: 70.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Database\PdoSqlite::query — Coverage: 60.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Database\PdoSqlsrv::query — Coverage: 60.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Database\Pgsql::getTableStatus — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Database\Sqlite3::getTableStatus — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::getTableStatus — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::formatErrors — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Entity\Comment::jsonSerialize — Coverage: 0.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Faq::delete — Coverage: 60.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Faq\FaqRepository::getNextSolutionId — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Faq\QuestionService::prepareAskQuestionData — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Form\FormsRepository::fetchDefaultInputData — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Glossary\GlossaryRepository::update — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Helper\CategoryHelper::normalizeCategoryTree — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Helper\PermissionHelper::permOptions — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Instance::update — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Instance\Client::collectSeedRows — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Instance\Client::moveClientFolder — Coverage: 90.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Instance\Search\OpenSearch::putMapping — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Mail::fixEOL — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\News\NewsRepository::countLatest — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\News\NewsService::getEditLink — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Notification::sendOpenQuestionAnswered — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Permission\BasicPermission::addRight — Coverage: 90.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Permission\MediumPermissionRepository::getGroupId — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Queue\Message\SendMailMessage::fromArray — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Rating::get — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Routing\AttributeRouteLoader::findControllerFiles — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Search::searchElasticsearch — Coverage: 0.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Search::searchOpenSearch — Coverage: 100.0% | Lines: 10 | Complexity: 4 phpMyFAQ\Search\Database\PdoPgsql::getMatchingOrder — Coverage: 90.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Search\Rating\RatingRepository::getNumberOfVotings — Coverage: 90.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Seo\SeoRepository::delete — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Seo\SitemapXmlService::generateXml — Coverage: 20.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::__construct — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Setup\Installation\DatabaseSchema::adminLog — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqchanges — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqsearches — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faquserdata — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::stepCreateInstance — Coverage: 0.0% | Lines: 10 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::timestampType — Coverage: 40.0% | Lines: 10 | Complexity: 8 phpMyFAQ\Setup\Migration\MigrationTracker::tableExists — Coverage: 60.0% | Lines: 10 | Complexity: 6 phpMyFAQ\Setup\UpdateRunner::taskDownloadPackage — Coverage: 0.0% | Lines: 10 | Complexity: 3 phpMyFAQ\StopWords::add — Coverage: 100.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Storage\FilesystemStorage::put — Coverage: 90.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Storage\S3Storage::buildKey — Coverage: 100.0% | Lines: 10 | Complexity: 6 phpMyFAQ\Strings\AbstractString::isUTF8 — Coverage: 20.0% | Lines: 10 | Complexity: 2 phpMyFAQ\Tags::getTagNameById — Coverage: 100.0% | Lines: 10 | Complexity: 3 phpMyFAQ\Tenant\TenantQuotaEnforcer::readAttachmentSizeBytes — Coverage: 70.0% | Lines: 10 | Complexity: 2 phpMyFAQ\User\CurrentUser::setLoginAttempt — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\User\UserData::set — Coverage: 100.0% | Lines: 10 | Complexity: 5 phpMyFAQ\Utils::isForbiddenElement — Coverage: 90.0% | Lines: 10 | Complexity: 3 phpMyFAQ\ConfigurationMethodsTrait::initializeTranslationProvider — Coverage: 30.0% | Lines: 10 | Complexity: 6 phpMyFAQ\Administration\Backup::generateBackupQueries — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Administration\DashboardLayout::hasRow — Coverage: 88.9% | Lines: 9 | Complexity: 2 phpMyFAQ\Administration\RatingStatistics::getAll — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Administration\Report::convertEncoding — Coverage: 77.8% | Lines: 9 | Complexity: 5 phpMyFAQ\Api\OAuthDiscoveryService::getDiscoveryDocument — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Api\Pagination\PaginationMetadata::__construct — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Api\Sorting\SortRequest::fromRequest — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Attachment\AttachmentFactory::countByRecordId — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Attachment\File::get — Coverage: 22.2% | Lines: 9 | Complexity: 4 phpMyFAQ\Attachment\Filesystem\File\VanillaFile::copyTo — Coverage: 33.3% | Lines: 9 | Complexity: 5 phpMyFAQ\Auth\AuthSso::create — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::getNewToken — Coverage: 100.0% | Lines: 9 | Complexity: 5 phpMyFAQ\Bootstrap\ConfigDirectoryResolver::loadConfigConstants — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Category::getAllCategories — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Category::transform — Coverage: 88.9% | Lines: 9 | Complexity: 2 phpMyFAQ\Category\CategoryRepository::findCategoryIdByName — Coverage: 88.9% | Lines: 9 | Complexity: 2 phpMyFAQ\Category\Relation::aggregateRecursively — Coverage: 66.7% | Lines: 9 | Complexity: 4 phpMyFAQ\Category\Relation::delete — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Category\Tree\TreeVisualizer::buildTree — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Chat::mapRowToEntity — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Command\SeedTestDataCommand::linkFaqToCategory — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Comment\CommentsRepository::deleteByTypeAndId — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::delete — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\AdminLogController::delete — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::convertToString — Coverage: 33.3% | Lines: 9 | Complexity: 5 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::healthcheck — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\GlossaryController::fetch — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\OpenSearchController::healthcheck — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Administration\GroupController::index — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Controller\Administration\PluginController::index — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Controller\Administration\UserController::index — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Controller\Api\FaqController::getPopular — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Api\FaqController::getLatest — Coverage: 88.9% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Api\FaqController::getTrending — Coverage: 88.9% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Api\FaqController::getSticky — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\ContainerControllerResolver::getController — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Controller\Frontend\Api\BookmarkController::deleteAll — Coverage: 88.9% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\SetupController::denyUnauthorizedRequest — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\TranslationController::translations — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::synchronizeKeycloakSubject — Coverage: 88.9% | Lines: 9 | Complexity: 5 phpMyFAQ\CustomPage\CustomPageRepository::getById — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\CustomPage\CustomPageRepository::getBySlug — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Database::factory — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Mysqli::fetchAll — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Mysqli::query — Coverage: 66.7% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Pgsql::queryPrepared — Coverage: 0.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Database\Pgsql::fetchAll — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Sqlite3::fetchAll — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Sqlite3::query — Coverage: 66.7% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Sqlite3::numRows — Coverage: 77.8% | Lines: 9 | Complexity: 5 phpMyFAQ\Database\Sqlsrv::fetchAll — Coverage: 0.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Database\Sqlsrv::nextId — Coverage: 88.9% | Lines: 9 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::lastInsertId — Coverage: 77.8% | Lines: 9 | Complexity: 3 phpMyFAQ\Faq::getFaqResult — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Faq::create — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Faq\FaqDisplayService::processQuestion — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Faq\FaqDisplayService::getRelatedFaqs — Coverage: 77.8% | Lines: 9 | Complexity: 2 phpMyFAQ\Faq\FaqRepository::hasTranslation — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Faq\QueryHelper::getCategoryIdWhereSequence — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Form\FormsRepository::fetchTranslationsByFormAndInput — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Form\FormsRepository::updateTranslation — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Helper\CategoryHelper::buildAvailableCategoryTranslationsList — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Helper\StatisticsHelper::clearAllVisits — Coverage: 55.6% | Lines: 9 | Complexity: 4 phpMyFAQ\Instance::addConfig — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Instance\Client::executeSchemaQuery — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Kernel::boot — Coverage: 0.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Kernel::resolveContainer — Coverage: 44.4% | Lines: 9 | Complexity: 7 phpMyFAQ\News\NewsRepository::getById — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Permission\BasicPermission::hasPermission — Coverage: 100.0% | Lines: 9 | Complexity: 5 phpMyFAQ\Permission\GroupCategoryPermissionRepository::deleteCategoryRestrictions — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Permission\MediumPermission::findOrCreateGroupByName — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::grantGroupRight — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::addGroup — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Permission\MediumPermissionRepository::getGroupName — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Permission\MediumPermissionRepository::addToGroup — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::removeFromGroup — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Plugin\PluginDiscovery::getClassMap — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Plugin\PluginManager::registerPluginStylesheets — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Plugin\PluginManager::registerPluginScripts — Coverage: 100.0% | Lines: 9 | Complexity: 6 phpMyFAQ\Question\QuestionRepository::setVisibility — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Queue\Message\ExportMessage::fromArray — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Queue\Transport\DatabaseTransport::decodeHeaders — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\Routing\AttributeRouteLoader::matchesContext — Coverage: 100.0% | Lines: 9 | Complexity: 9 phpMyFAQ\Search::search — Coverage: 88.9% | Lines: 9 | Complexity: 6 phpMyFAQ\Search\Database\PdoPgsql::getMatchingColumns — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Search\SearchDatabase::getConditions — Coverage: 88.9% | Lines: 9 | Complexity: 6 phpMyFAQ\Search\SearchFactory::create — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Search\SearchService::__construct — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\HtaccessUpdater::validateHtaccessStructure — Coverage: 77.8% | Lines: 9 | Complexity: 5 phpMyFAQ\Setup\Installation\DatabaseSchema::faqforms — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqinstances — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthRefreshTokens — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqright — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqvoting — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::stepSeedConfiguration — Coverage: 0.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Setup\Installer::startInstall — Coverage: 55.6% | Lines: 9 | Complexity: 2 phpMyFAQ\Setup\Migration\MigrationExecutor::collectOperations — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Setup\Migration\MigrationTracker::isApplied — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::formatValue — Coverage: 66.7% | Lines: 9 | Complexity: 6 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::modifyColumn — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::dropColumn — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addColumn — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::autoIncrement — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Setup\Update::optimizeTables — Coverage: 0.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Setup\UpdateRunner::formatValue — Coverage: 88.9% | Lines: 9 | Complexity: 6 phpMyFAQ\Setup\UpdateRunner::taskHealthCheck — Coverage: 77.8% | Lines: 9 | Complexity: 3 phpMyFAQ\Setup\UpdateRunner::withProgress — Coverage: 0.0% | Lines: 9 | Complexity: 1 phpMyFAQ\StopWords::update — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\StopWords::getBannedWords — Coverage: 100.0% | Lines: 9 | Complexity: 5 phpMyFAQ\Storage\S3Storage::putStream — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Storage\StorageFactory::create — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Tags::getPopularTagsAsArray — Coverage: 100.0% | Lines: 9 | Complexity: 2 phpMyFAQ\Template\ThemeManager::assertAllowedTwigTemplate — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension::versionedPath — Coverage: 88.9% | Lines: 9 | Complexity: 4 phpMyFAQ\User::setSuperAdmin — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\User\PasswordResetTokenService::issue — Coverage: 88.9% | Lines: 9 | Complexity: 3 phpMyFAQ\User\PasswordResetTokenService::verify — Coverage: 100.0% | Lines: 9 | Complexity: 7 phpMyFAQ\User\UserData::delete — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\User\UserData::emailExists — Coverage: 100.0% | Lines: 9 | Complexity: 3 phpMyFAQ\Visits\VisitsRepository::insert — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\User\CurrentUserAccountStateTrait::isBlocked — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUserGroupId — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\Administration\Backup::verifyBackup — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Administration\Category::buildAdminCategoryTree — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Administration\Session::getSessionsByDate — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Api\Filtering\FilterRequest::parseFilterValue — Coverage: 100.0% | Lines: 8 | Complexity: 8 phpMyFAQ\Api\Filtering\FilterRequest::parseDateValue — Coverage: 87.5% | Lines: 8 | Complexity: 4 phpMyFAQ\Api\Response\ApiResponse::success — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Api\Response\ApiResponse::buildMetadata — Coverage: 100.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Attachment\AbstractAttachment::postUpdateMeta — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Attachment\File::buildStoragePath — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Attachment\Filename::compose — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::getChunk — Coverage: 100.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Auth\AuthDatabase::isValidLogin — Coverage: 87.5% | Lines: 8 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::isValidAudience — Coverage: 75.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::audienceMatches — Coverage: 75.0% | Lines: 8 | Complexity: 6 phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::publicKeyToPem — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Bookmark\BookmarkRepository::add — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Bookmark\BookmarkRepository::getAll — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Bookmark\BookmarkRepository::remove — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolve — Coverage: 50.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Captcha\BuiltinCaptcha::getCaptchaImage — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Captcha\BuiltinCaptcha::removeCaptcha — Coverage: 87.5% | Lines: 8 | Complexity: 2 phpMyFAQ\Category::getPath — Coverage: 87.5% | Lines: 8 | Complexity: 3 phpMyFAQ\Category\CategoryRepository::hasLanguage — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Category\Image::getFileName — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Category\Language\CategoryLanguageService::getLanguagesToTranslate — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Category\Language\CategoryLanguageService::getExistingTranslations — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Category\Order::add — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Category\Permission::isRestricted — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Category\Permission\CategoryPermissionService::buildPermissionWhereClause — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Category\Relation::deleteByFAQ — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Category\Tree\TreeBuilder::buildAdminCategoryTree — Coverage: 87.5% | Lines: 8 | Complexity: 4 phpMyFAQ\Category\Tree\TreePathResolver::getValidParentId — Coverage: 75.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Chat::markAsRead — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Chat::markConversationAsRead — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Chat::getUnreadCount — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Command\UpdateCommand::configure — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Configuration\LdapSettings::getLdapGroupConfig — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\AbstractController::userHasGroupPermission — Coverage: 100.0% | Lines: 8 | Complexity: 6 phpMyFAQ\Controller\Administration\AbstractAdministrationController::getGravatarImage — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::templates — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\DashboardController::visits — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\StatisticsController::truncateSessions — Coverage: 75.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\TagController::delete — Coverage: 75.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Administration\GroupController::add — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Administration\OrphanedFaqsController::index — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Administration\PasswordChangeController::getBaseTemplateVars — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\QuestionController::isAddingQuestionsAllowed — Coverage: 87.5% | Lines: 8 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\SetupController::createUpdate — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\AuthenticationController::forgotPassword — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::show — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::getFaqRecords — Coverage: 87.5% | Lines: 8 | Complexity: 2 phpMyFAQ\Controller\Frontend\ErrorController::renderBootstrapError — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\ErrorController::renderMinimalError — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Controller\Frontend\PageNotFoundController::index — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Core\Error::errorHandler — Coverage: 100.0% | Lines: 8 | Complexity: 6 phpMyFAQ\Core\Exception::__toString — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Database::checkOnEmptyTable — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Database\DatabaseHelper::alignTablePrefixByPattern — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Database\Sqlsrv::queryPrepared — Coverage: 0.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Entity\AdminLog::calculateHash — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\EventListener\ControllerContainerListener::onKernelController — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Export\Pdf\Wrapper::__construct — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Faq::normalizeCategoryOrder — Coverage: 37.5% | Lines: 8 | Complexity: 8 phpMyFAQ\Faq\FaqDisplayService::getRenderedCategoryPath — Coverage: 100.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Faq\QueryHelper::queryPermission — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Form\FormsRepository::updateInputActive — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Form\FormsRepository::updateInputRequired — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Form\FormsRepository::deleteTranslation — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Helper\FaqHelper::createFaqUrl — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Helper\SearchHelper::renderScore — Coverage: 100.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Helper\TagsHelper::renderRelatedTag — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::getStemmingLanguage — Coverage: 25.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Instance\Setup::createAnonymousUser — Coverage: 0.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Kernel::createHttpKernel — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Language\LanguageDetector::aggregateWithBrowser — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::aggregateWithoutBrowser — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Link::getQuery — Coverage: 100.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Link\Strategy\ShowStrategy::build — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Link\Strategy\SitemapStrategy::build — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Mail::setEmailTo — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\News\NewsService::getCommentMessage — Coverage: 100.0% | Lines: 8 | Complexity: 5 phpMyFAQ\News\NewsService::formatNewsDate — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Permission\GroupCategoryPermissionRepository::deleteAllForGroup — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Plugin\PluginDiscovery::writeManifest — Coverage: 87.5% | Lines: 8 | Complexity: 3 phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpointHashAndUserId — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Question\QuestionRepository::delete — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Question\QuestionRepository::updateQuestionAnswer — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Queue\MessageBusFactory::create — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Routing\RouteCollectionBuilder::loadAttributeRoutes — Coverage: 87.5% | Lines: 8 | Complexity: 3 phpMyFAQ\Search\Rating\RatingRepository::fetchByRecordId — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Search\SearchFactory::resolveDatabaseType — Coverage: 62.5% | Lines: 8 | Complexity: 6 phpMyFAQ\Search\SearchResultSet::getScore — Coverage: 100.0% | Lines: 8 | Complexity: 7 phpMyFAQ\Search\SearchService::calculateRelatedTags — Coverage: 100.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Setup\Installation\DatabaseSchema::backup — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcaptcha — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryrelations — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroup — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqsessions — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Installation\SchemaInstaller::dropTables — Coverage: 0.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Setup\Migration\AbstractMigration::addColumn — Coverage: 62.5% | Lines: 8 | Complexity: 4 phpMyFAQ\Setup\Migration\MigrationResult::addOperationResult — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Setup\Migration\MigrationTracker::getLastAppliedVersion — Coverage: 87.5% | Lines: 8 | Complexity: 4 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addInteger — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createIndex — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Setup\Update::__construct — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Setup\Update::executeQueries — Coverage: 0.0% | Lines: 8 | Complexity: 5 phpMyFAQ\StopWords::match — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::normalizePathForUrl — Coverage: 100.0% | Lines: 8 | Complexity: 5 phpMyFAQ\Storage\S3Storage::get — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Storage\S3Storage::size — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Storage\TenantScopedStorage::prefixPath — Coverage: 87.5% | Lines: 8 | Complexity: 2 phpMyFAQ\System::getSupportedSafeDatabases — Coverage: 75.0% | Lines: 8 | Complexity: 4 phpMyFAQ\Template\ThemeManager::activateTheme — Coverage: 100.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::translateBatch — Coverage: 25.0% | Lines: 8 | Complexity: 2 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::mapLanguageCode — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Translation\TranslationProviderFactory::create — Coverage: 100.0% | Lines: 8 | Complexity: 7 phpMyFAQ\User::mailUser — Coverage: 0.0% | Lines: 8 | Complexity: 2 phpMyFAQ\User\CurrentUser::sortAuthContainer — Coverage: 37.5% | Lines: 8 | Complexity: 3 phpMyFAQ\User\TwoFactor::__construct — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Utils::chopString — Coverage: 100.0% | Lines: 8 | Complexity: 3 phpMyFAQ\Visits\VisitsRepository::update — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::get — Coverage: 100.0% | Lines: 8 | Complexity: 8 phpMyFAQ\User\CurrentUserAccountStateTrait::isLocalUser — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\Administration\AdminLogRepository::getLastHash — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Administration\AdminMenuBuilder::addMenuEntry — Coverage: 85.7% | Lines: 7 | Complexity: 4 phpMyFAQ\Administration\Backup::createBackup — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Administration\Revision::delete — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Administration\SessionRepository::getTimeBySessionId — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Administration\SessionRepository::deleteSessionsByTimeRange — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Administration\TranslationStatistics::getTranslationKeys — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Api\Filtering\FilterRequest::parseDateTimeValue — Coverage: 57.1% | Lines: 7 | Complexity: 3 phpMyFAQ\Api\Sorting\SortRequest::validateOrder — Coverage: 85.7% | Lines: 7 | Complexity: 5 phpMyFAQ\Attachment\AttachmentFactory::create — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Auth\ApiKeyAuthenticator::hasRequiredScopes — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Auth\AuthHttp::checkCredentials — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Auth\AuthKeycloak::getDisplayName — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::isValidLogin — Coverage: 42.9% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\OAuth2\AuthorizationServer::parseInterval — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Length — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Bookmark::getBookmarkList — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Category::getCategoryIdsFromFaq — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Category\CategoryRepository::moveOwnership — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Category\CategoryRepository::updateParentCategory — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Category\CategoryRepository::delete — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Category\Image::getFileExtension — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Category\Image::delete — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Category\Language\CategoryLanguageService::getLanguagesInUse — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Category\Permission::delete — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Category\Tree\TreePathResolver::getChildNodes — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Configuration\ElasticsearchConfiguration::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Configuration\OpenSearchConfiguration::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\AbstractController::hasValidToken — Coverage: 85.7% | Lines: 7 | Complexity: 5 phpMyFAQ\Controller\AbstractController::userHasUserPermission — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Controller\AbstractController::captchaCodeIsValid — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\AbstractController::createFallbackContainer — Coverage: 71.4% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::create — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::drop — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\FaqController::listPermissions — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\GroupController::listCategoryRestrictions — Coverage: 0.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\OpenSearchController::create — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\OpenSearchController::drop — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\OpenSearchController::statistics — Coverage: 14.3% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\StatisticsController::clearRatings — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\StatisticsController::clearVisits — Coverage: 71.4% | Lines: 7 | Complexity: 3 phpMyFAQ\Controller\Administration\Api\StopWordController::list — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\ElasticsearchController::index — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\LdapController::index — Coverage: 42.9% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Administration\OpenSearchController::index — Coverage: 85.7% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Api\FaqController::resolveRequestLanguage — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Controller\Api\FaqController::withRequestLanguage — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Api\MetaController::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Exception\ForbiddenException::__construct — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\CaptchaController::renderImage — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\ChatController::getConversations — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\ChatController::getUnreadCount — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\PopularSearchesController::popular — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Controller\Frontend\SetupController::hasAdministratorSession — Coverage: 42.9% | Lines: 7 | Complexity: 4 phpMyFAQ\CustomPage::generateUniqueSlug — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\CustomPage\CustomPageRepository::delete — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\CustomPage\CustomPageRepository::activate — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Database\PdoMysql::nextId — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Database\PdoPgsql::nextId — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::nextId — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Database\PdoSqlsrv::nextId — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Database\Pgsql::lastInsertId — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::setConnectionOptions — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Encryption::getInstance — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Export\Pdf\Wrapper::checkBase64Image — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Export\Pdf\Wrapper::concatenatePaths — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Faq\FaqDisplayService::processHighlight — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Faq\FaqRepository::fetchAllRows — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Glossary\GlossaryHelper::formatTooltip — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Glossary\GlossaryRepository::delete — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Helper\AttachmentHelper::getAttachmentList — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Helper\CategoryHelper::gatherCategoryData — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Helper\RegistrationHelper::buildRegistrationResponse — Coverage: 0.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Helper\TagsHelper::setTaggingIds — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Http\RateLimiter::peek — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Instance::getInstanceConfig — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Instance\Client::createClientDatabase — Coverage: 85.7% | Lines: 7 | Complexity: 6 phpMyFAQ\Instance\Database\Stopwords::executeInsertQueries — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Instance\Search\Elasticsearch::dropIndex — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::delete — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::deleteCustomPage — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Instance\Search\OpenSearch::deleteCustomPage — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Kernel::handle — Coverage: 85.7% | Lines: 7 | Complexity: 5 phpMyFAQ\Mail::sendPreparedEnvelope — Coverage: 100.0% | Lines: 7 | Complexity: 6 phpMyFAQ\Mail::wrapLines — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\News\NewsRepository::delete — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\News\NewsRepository::activate — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\News\NewsService::buildInformationLink — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Permission\BasicPermissionRepository::grantUserRight — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::addGroup — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\Permission\MediumPermission::checkGroupData — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Plugin\PluginDiscovery::scan — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Plugin\PluginManager::areDependenciesMet — Coverage: 71.4% | Lines: 7 | Complexity: 4 phpMyFAQ\Routing\RouteCacheManager::clear — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\Search::resolveSearchDatabaseType — Coverage: 100.0% | Lines: 7 | Complexity: 6 phpMyFAQ\Search\SearchService::getFormattedSearchResults — Coverage: 0.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Services::getPdfLink — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Services::getPdfApiLink — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Session\RedisSessionHandler::configure — Coverage: 71.4% | Lines: 7 | Complexity: 4 phpMyFAQ\Session\Token::getTokenInput — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Session\Token::getSession — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Setup\Installation\DatabaseSchema::faqglossary — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqvisits — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::executeMigrations — Coverage: 85.7% | Lines: 7 | Complexity: 4 phpMyFAQ\Setup\Migration\MigrationTracker::removeMigration — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::toArray — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::toArray — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::toArray — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::toArray — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createIndex — Coverage: 100.0% | Lines: 7 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::addColumn — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Setup\Update::collectDryRunQueries — Coverage: 28.6% | Lines: 7 | Complexity: 6 phpMyFAQ\StopWords::remove — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::delete — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Storage\S3Storage::put — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Strings\StringBasic::getStringBasic — Coverage: 85.7% | Lines: 7 | Complexity: 3 phpMyFAQ\System::isUpdateExemptRequest — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Tags::update — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\Translation\AbstractTranslationProvider::translate — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Twig\TwigCacheResolver::resolve — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Twig\TwigWrapper::resolveTemplateSetName — Coverage: 100.0% | Lines: 7 | Complexity: 4 phpMyFAQ\User::setAuthSource — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\User::setWebAuthnKeys — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\User\CurrentUser::getSessionInfo — Coverage: 85.7% | Lines: 7 | Complexity: 4 phpMyFAQ\User\CurrentUser::setAuthSource — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\User\CurrentUser::issueRememberMeCookie — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\User\CurrentUser::setRememberMe — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\User\TwoFactor::validateToken — Coverage: 100.0% | Lines: 7 | Complexity: 5 phpMyFAQ\Visits\VisitsRepository::resetAll — Coverage: 100.0% | Lines: 7 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getTranslationProvider — Coverage: 85.7% | Lines: 7 | Complexity: 5 phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUser — Coverage: 100.0% | Lines: 7 | Complexity: 3 phpMyFAQ\Administration\AdminLogRepository::deleteOlderThan — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Administration\AdminMenuBuilder::generateOption — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Administration\Backup\BackupRepository::deleteByFilename — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Administration\Faq::countQuery — Coverage: 0.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Administration\Faq::userCanEditFaq — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Administration\Faq::sanitizePermissionIds — Coverage: 0.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Administration\RatingStatistics::buildQuery — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Administration\SessionRepository::countTotalSessions — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Api\Pagination\PaginationRequest::__construct — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::toArray — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Attachment\AttachmentFactory::init — Coverage: 83.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Attachment\AttachmentService::canDownloadAttachment — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Attachment\File::rawOut — Coverage: 50.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Attachment\File::getFile — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Attachment\Filesystem\AbstractFile::delete — Coverage: 83.3% | Lines: 6 | Complexity: 5 phpMyFAQ\Attachment\Filesystem\AbstractFile::setMode — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Auth\ApiKeyAuthenticator::isNotExpired — Coverage: 83.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Auth\ApiKeyAuthenticator::parseScopes — Coverage: 66.7% | Lines: 6 | Complexity: 4 phpMyFAQ\Auth\AuthHttp::create — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::redactIdentifier — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Auth\EntraId\JwksProvider::__construct — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcClient::fetchUserInfo — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::base64UrlDecode — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Bookmark\BookmarkRepository::removeAll — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Bootstrapper::fixProxyHeaders — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Captcha\BuiltinCaptcha::renderCaptchaImage — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::generateCaptchaCode — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Category::countCategories — Coverage: 0.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Category::getLineCategory — Coverage: 83.3% | Lines: 6 | Complexity: 5 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::getLineCategory — Coverage: 83.3% | Lines: 6 | Complexity: 5 phpMyFAQ\Category\Order::remove — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Category\Tree\CategoryValidator::collectDirectChildren — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Comment\CommentsRepository::countByTypeGroupedByRecordId — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Comment\CommentsRepository::countByCategoryForFaq — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Configuration\ConfigurationRepository::getFaqDataContents — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Configuration\LdapSettings::getLdapMapping — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Configuration\LdapSettings::getLdapOptions — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Configuration\MailSettings::getProvider — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchAll — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\GroupController::groupData — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\GroupController::listPermissions — Coverage: 83.3% | Lines: 6 | Complexity: 2 phpMyFAQ\Controller\Administration\InstanceController::index — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Controller\Administration\PasswordChangeController::index — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Controller\Administration\ReportController::index — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::loadAzureConfiguration — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Controller\Frontend\CategoryController::index — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Database\Mysqli::queryPrepared — Coverage: 0.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\PdoMysql::connect — Coverage: 66.7% | Lines: 6 | Complexity: 2 phpMyFAQ\Database\PdoMysql::getOne — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\PdoPgsql::connect — Coverage: 66.7% | Lines: 6 | Complexity: 2 phpMyFAQ\Database\PdoPgsql::getOne — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::connect — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Database\PdoSqlite::getOne — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\PdoSqlsrv::connect — Coverage: 66.7% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\PdoSqlsrv::getOne — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Database\Sqlite3::nextId — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::connect — Coverage: 66.7% | Lines: 6 | Complexity: 2 phpMyFAQ\Database\Sqlsrv::clientVersion — Coverage: 66.7% | Lines: 6 | Complexity: 3 phpMyFAQ\Environment::init — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\EventListener\LanguageListener::initializeTranslation — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Faq::normalizeFaqOrderBy — Coverage: 33.3% | Lines: 6 | Complexity: 6 phpMyFAQ\Faq\FaqDisplayService::getAttachmentList — Coverage: 33.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Faq\QueryHelper::userGrantExists — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Faq\RecordVisibility::isWithinPublicationWindow — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Filesystem\Filesystem::copy — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Form\FormsRepository::fetchFormDataByFormId — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Forms::updateInputFlags — Coverage: 100.0% | Lines: 6 | Complexity: 5 phpMyFAQ\Forms::getTranslations — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Glossary::setTooltip — Coverage: 66.7% | Lines: 6 | Complexity: 3 phpMyFAQ\Glossary::fetchAll — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Helper\CategoryHelper::renderAvailableTranslationsOptions — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Instance::getConfig — Coverage: 100.0% | Lines: 6 | Complexity: 5 phpMyFAQ\Instance\Client::quoteIdentifier — Coverage: 66.7% | Lines: 6 | Complexity: 6 phpMyFAQ\Instance\Client::copyTemplateFolder — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Instance\Client::deleteClientFolder — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Language\LanguageDetector::selectLanguage — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Language\Plurals::getPlural — Coverage: 66.7% | Lines: 6 | Complexity: 3 phpMyFAQ\Ldap::bind — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Link::hasScheme — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Mail::validateEmail — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Mail\Provider\MailgunProvider::parseRecipients — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Mail\Provider\SendGridProvider::parseRecipients — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Mail\Provider\SesProvider::parseRecipients — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Pagination::getCurrentPageFromUrl — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Permission\MediumPermission::deleteGroup — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Permission\MediumPermission::autoJoin — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Plugin\PluginDiscovery::computeSignature — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Plugin\PluginManager::getMissingDependencies — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Push\PushSubscriptionRepository::hasSubscription — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Push\WebPushService::sendToAll — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Push\WebPushService::sendToUser — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Push\WebPushService::sendToUsers — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Queue\DatabaseMessageBus::dispatch — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Queue\Message\SendMailMessage::toArray — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Search\Rating\RatingRepository::isVoteAllowed — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Search\SearchService::shouldRedirectToSolutionId — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Session\SessionWrapper::__construct — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Session\Token::__serialize — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Session\Token::__unserialize — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\HtaccessUpdater::createBackup — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryOrder — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroupRightCategory — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqinstancesConfig — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqstopwords — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faquserlogin — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Installer::cleanFailedInstallationFiles — Coverage: 0.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\Installer::checkInitialRewriteBasePath — Coverage: 0.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Migration\AbstractMigration::dropColumns — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::autoIncrementColumn — Coverage: 0.0% | Lines: 6 | Complexity: 6 phpMyFAQ\Setup\Migration\AbstractMigration::getChecksum — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::getPendingMigrations — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\Migration\MigrationRegistry::getUnappliedMigrations — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::toArray — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::toArray — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::toArray — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::execute — Coverage: 0.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::getDescription — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createTablePrefix — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory::createForType — Coverage: 100.0% | Lines: 6 | Complexity: 6 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::integer — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::bigInteger — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::smallInteger — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Update::checkInitialRewriteBasePath — Coverage: 0.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Setup\Update::insertFormInputs — Coverage: 0.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Storage\S3Storage::delete — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Strings::init — Coverage: 83.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Strings\Mbstring::preg_replace_callback — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Strings\Mbstring::preg_replace — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\System::getSystemUri — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\Tenant\TenantContextResolver::readIntEnv — Coverage: 83.3% | Lines: 6 | Complexity: 4 phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateCategory — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotaEnforcer::extractFirstInt — Coverage: 66.7% | Lines: 6 | Complexity: 5 phpMyFAQ\Translation::setMultiByteLanguage — Coverage: 100.0% | Lines: 6 | Complexity: 4 phpMyFAQ\User::terminateSessionId — Coverage: 100.0% | Lines: 6 | Complexity: 1 phpMyFAQ\User\Tracking::initializeSessionId — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\User\Tracking::countBots — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\User\Tracking::getRemoteAddress — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Utils::isLikeOnPMFDate — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Utils::makeShorterText — Coverage: 100.0% | Lines: 6 | Complexity: 3 phpMyFAQ\Utils::highlightNoLinks — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Utils::formatBytes — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Visits::logViews — Coverage: 100.0% | Lines: 6 | Complexity: 2 phpMyFAQ\Visits::add — Coverage: 66.7% | Lines: 6 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::getAll — Coverage: 83.3% | Lines: 6 | Complexity: 3 phpMyFAQ\Administration\AdminLog::log — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\AdminMenuBuilder::sortingKeyOptions — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\AdminMenuBuilder::sortingOrderOptions — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\AdminMenuBuilder::sortingPopularFaqsOptions — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\Backup\BackupRepository::getAll — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\Backup\BackupRepository::deleteById — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\FileDownloader::send — Coverage: 60.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Administration\FileDownloader::getResponse — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Administration\TranslationStatistics::getMissingKeys — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Attachment\File::buildFilePath — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Attachment\File::getStorage — Coverage: 40.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::createUser — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthKeycloak::createMediumPermission — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::createUser — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthLdap::createMediumPermission — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthSso::createLdapAuth — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\AuthSso::createUser — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::revokeAccessToken — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::revokeAuthCode — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::revokeRefreshToken — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Integer — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Auth\Oidc\OidcSession::getAuthorizationState — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Bootstrapper::config — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Cache\CacheFactory::create — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Cache\CacheFactory::createFilesystemAdapter — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::__construct — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::checkCaptchaCode — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Captcha\Captcha::getInstance — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Captcha\GoogleRecaptcha::fetchUrl — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Captcha\Helper\CaptchaHelper::getInstance — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Category::buildCategoryTree — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Category::collapseAll — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Category::checkIfCategoryExists — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Category\CategoryCache::clear — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Category\CategoryService::checkIfCategoryExists — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::buildTree — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::getSymbol — Coverage: 0.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::collapseAll — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Category\Tree\CategoryValidator::isDirectChild — Coverage: 80.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Comments::getNumberOfComments — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Comments::getNumberOfCommentsByCategory — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::__construct — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::createIfEnabled — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::delete — Coverage: 60.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Container\ContainerCacheManager::writeCache — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\AbstractController::render — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\AbstractController::userHasPermission — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Administration\AbstractAdministrationController::initializeFromContainer — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\AbstractAdministrationApiController::initializeFromContainer — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\CategoryController::translations — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::topTen — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\UpdateController::versions — Coverage: 20.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\UpdateController::cleanUp — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\UserController::userPermissions — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\Api\CategoryController::createCategory — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Api\CategoryController::createCategoryPermission — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Api\CategoryController::createOrder — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::getCurrentUserService — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Frontend\CategoryController::initializeCategory — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::prepareSubCategoryHelper — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::maskLogin — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::getCurrentUserService — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::createUser — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Controller\Frontend\SetupController::render — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\LlmsController::index — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Controller\RobotsController::index — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\CustomPage::getAllPages — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\CustomPage\CustomPageRepository::countAllLanguages — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Database\Mysqli::nextId — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Database\Sqlite3::close — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Database\Sqlsrv::error — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Date::format — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Entity\AdminLog::verifyIntegrity — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Environment::loadEnvironment — Coverage: 60.0% | Lines: 5 | Complexity: 2 phpMyFAQ\EventListener\LanguageListener::onKernelRequest — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\EventListener\RouterListener::normalizePath — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\EventListener\WebExceptionListener::formatExceptionMessage — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::__construct — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setCustomHeader — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::isWithinRoot — Coverage: 100.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Faq\FaqDisplayService::loadFaq — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Faq\QueryHelper::groupGrantExists — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Forms::getTranslatedLanguages — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Glossary\GlossaryRepository::prepareItem — Coverage: 60.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Instance::getById — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Instance\Client::filesystem — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Instance\Client::isValidClientHostname — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Instance\Database::factory — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Instance\Database\PdoSqlite::createTables — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Instance\Database\Sqlite3::createTables — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Instance\Search\Elasticsearch::getSearchAnalyzer — Coverage: 40.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Instance\Search\OpenSearch::delete — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Kernel::getContainer — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Language\Plurals::getMsgTemplate — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Link::getSystemUri — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Link::getSystemRelativeUri — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Link::isInternalReference — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Mail::createProvider — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Notification::sendWebPushToUsers — Coverage: 100.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Permission\MediumPermission::getAllGroups — Coverage: 80.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Permission\MediumPermission::getAllUserRights — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Permission\MediumPermission::addToGroup — Coverage: 80.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Plugin\PluginDiscovery::getNamespaceFromFile — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Push\WebPushService::isEnabled — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Push\WebPushService::generateVapidKeys — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Question::setVisibility — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Queue\Message\ExportMessage::toArray — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Search\Database\Mysqli::setRelevanceRanking — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Search\Database\PdoMysql::setRelevanceRanking — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Seo::getMetaRobots — Coverage: 100.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Service\McpServer\FaqSearchTool::createResult — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\EnvironmentConfigurator::getRewriteBase — Coverage: 80.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Setup\Installation\DatabaseSchema::attachmentFile — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryNews — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryGroup — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryUser — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqconfig — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataGroup — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataTags — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataUser — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroupRight — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthScopes — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqtags — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faquserGroup — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faquserRight — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::faqadmindashboard — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::configuration — Coverage: 0.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::db — Coverage: 0.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::stepGrantPermissions — Coverage: 0.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::toArray — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::execute — Coverage: 0.0% | Lines: 5 | Complexity: 4 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::toArray — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperationCounts — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\SqlOperation::toArray — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::index — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::uniqueIndex — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Setup\UpdateRunner::shortenPath — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Storage\FilesystemStorage::get — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Storage\FilesystemStorage::size — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Storage\S3Storage::url — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Storage\S3Storage::hasResultField — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Storage\S3Storage::getResultField — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Strings\Mbstring::getInstance — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\System::checkDatabase — Coverage: 60.0% | Lines: 5 | Complexity: 3 phpMyFAQ\System::checkRequiredExtensions — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\Template\ThemeManager::themeStoragePath — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Translation::fetchTranslationFile — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::supportsLanguagePair — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::mapLanguageCode — Coverage: 60.0% | Lines: 5 | Complexity: 5 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::mapLanguageCode — Coverage: 60.0% | Lines: 5 | Complexity: 5 phpMyFAQ\User::getUserId — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\User::error — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\User::getStatus — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\User\CurrentUser::twoFactorSuccess — Coverage: 100.0% | Lines: 5 | Complexity: 1 phpMyFAQ\User\CurrentUser::sessionAge — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\User\Tracking::createNetwork — Coverage: 100.0% | Lines: 5 | Complexity: 3 phpMyFAQ\User\UserSession::createNetwork — Coverage: 80.0% | Lines: 5 | Complexity: 3 phpMyFAQ\ConfigurationMethodsTrait::setLogger — Coverage: 100.0% | Lines: 5 | Complexity: 2 phpMyFAQ\Administration\Backup::export — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Administration\TranslationStatistics::extractLanguageCode — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Api\Sorting\SortRequest::toSqlOrderBy — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Attachment\AbstractAttachment::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Attachment\AttachmentService::checkUserPermission — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Attachment\File::usesCloudStorage — Coverage: 50.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\AbstractFile::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Auth\AuthDatabase::rehash — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::shouldAssignGroups — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::shouldSynchronizeGroupsOnLogin — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthLdap::extractGroupNameFromDn — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\AuthSso::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::decodeSignedClientData — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\EntraId\EntraIdSession::setCurrentSessionKey — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::splitToken — Coverage: 100.0% | Lines: 4 | Complexity: 5 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::normalizeKey — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Bookmark::add — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Bookmark::getAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Bookmark::remove — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Bookmark::removeAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Bootstrapper::configureLdap — Coverage: 50.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Category::setGroups — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Category::getCategoryData — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Category::getCategoriesFromFaq — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Category\CategoryPermissionContext::setGroups — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Category\CategoryPermissionContext::clear — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Category\Image::setUploadedFile — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::transform — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter::getSymbol — Coverage: 0.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Configuration\MailSettings::getNoReplyEmail — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::resolveRedisStore — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::updateConfigValue — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::insert — Coverage: 50.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Container\ContainerCacheManager::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Controller\AbstractController::getJsonObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Controller\AbstractController::getRateLimiter — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Administration\AbstractAdministrationController::render — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingPopular — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::releaseEnvironment — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::searchRelevance — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::seoMetaTags — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::translationProvider — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::mailProvider — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::cacheAdapter — Coverage: 0.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::layoutMode — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::getStaleCache — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Controller\Administration\Api\DashboardController::storeCache — Coverage: 0.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::verify — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Api\FaqController::applyRequestLanguage — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Api\SearchController::popular — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Frontend\Api\CommentController::isCommentAllowed — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\FaqController::isAddingFaqsAllowed — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\PushController::getVapidPublicKey — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\PushController::status — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\WebAuthnController::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::initializeFaq — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::getCategoryImageUrl — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Controller\Frontend\SetupController::getRelativeTokenFilePath — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Controller\Frontend\WebAuthnController::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Database\Mysqli::getTableStatus — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoMysql::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoMysql::fetchRow — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoMysql::fetchAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoMysql::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoMysql::getTableStatus — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoPgsql::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoPgsql::fetchRow — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoPgsql::fetchAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoPgsql::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoPgsql::getTableStatus — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlite::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::fetchRow — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::fetchAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlite::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoSqlite::getTableStatus — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlsrv::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoSqlsrv::fetchRow — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\PdoSqlsrv::fetchAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlsrv::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlsrv::getTableStatus — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\PdoSqlsrv::clientVersion — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\Sqlite3::connect — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Database\Sqlite3::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\Sqlite3::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\Sqlite3::fetchAssoc — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::fetchArray — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::fetchObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Database\Sqlsrv::numRows — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Database\Sqlsrv::affectedRows — Coverage: 75.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Database\Sqlsrv::serverVersion — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Date::createIsoDateFromUnixTimestamp — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\EventListener\WebExceptionListener::handleErrorResponse — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Export::create — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::open — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Faq::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Faq::getQuestion — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Faq::getKeywords — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Faq\FaqDisplayService::shouldApplyHighlighting — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Faq\Import::parseCSV — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Faq\Permission::delete — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Faq\QueryHelper::queryPermissionExistsAll — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Faq\RecordVisibility::isPermitted — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Filter::filterInput — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Filter::filterVar — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Filter::filterEmail — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Filter::filterHtml — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Glossary::create — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Glossary::update — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Glossary::delete — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Helper\CategoryHelper::getCategoryTreeData — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Helper\TagsHelper::renderTagList — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Instance::getAll — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Instance\Client::setClientTemplateSet — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Instance\Client::copyConstantsFile — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::createIndex — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::isAvailable — Coverage: 25.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Instance\Search\OpenSearch::createIndex — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Instance\Search\OpenSearch::isAvailable — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Language::setLanguageWithDetection — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Language::setLanguageFromConfiguration — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Language\Plurals::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Ldap::error — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Link::getSystemScheme — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Link::buildActionUrl — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Link::isRelativeSystemLink — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Link::appendSessionId — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Mail::getMUA — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Mail::isQueueDeliveryEnabled — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Mail\Provider\MailgunProvider::extractEmailAddress — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Mail\Provider\SendGridProvider::extractEmailAddress — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Mail\Provider\SesProvider::extractEmailAddress — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Mail\Smtp::setAuthConfig — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Notification::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Pagination::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Pagination::render — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Permission::create — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Permission\BasicPermission::grantUserRight — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Permission\BasicPermission::renameRight — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Permission\BasicPermissionRepository::renameRight — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::grantGroupRight — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Permission\MediumPermissionRepository::deleteGroup — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Permission\MediumPermissionRepository::removeFromAllGroups — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Permission\MediumPermissionRepository::refuseAllGroupRights — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Permission\MediumPermissionRepository::removeAllUsersFromGroup — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Plugin\PluginDiscovery::modificationTime — Coverage: 75.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Plugin\PluginManager::getAllPluginStylesheets — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Plugin\PluginManager::getAllPluginScripts — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Question::getVisibility — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Queue\Message\IndexFaqMessage::toArray — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Queue\Transport\DatabaseTransport::acknowledge — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Routing\RouteCacheManager::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Search::getSearchesCount — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Search\Rating\RatingRepository::deleteAll — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Search\Search\Elasticsearch::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::getJoinedColumns — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Search\SearchDatabase::buildInClause — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\EnvironmentConfigurator::readHtaccess — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Installation\DatabaseSchema::faqbookmarks — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::applyPersonalSettings — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Setup\Installation\SchemaInstaller::executeSql — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\InstallationRunner::stepInsertFormInputs — Coverage: 0.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\InstallationRunner::stepAdjustHtaccess — Coverage: 0.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Migration\AbstractMigration::booleanType — Coverage: 0.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Setup\Migration\MigrationExecutor::truncateQuery — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::execute — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addSqlForDbType — Coverage: 0.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\SqlOperation::execute — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addBoolean — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::boolean — Coverage: 75.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Setup\Update::runPostMigrationTasks — Coverage: 0.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Setup\Update::getBackupFilename — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\UpdateRunner::truncateString — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\UpdateRunner::taskCleanup — Coverage: 0.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Setup\UpdateToken::getOrCreate — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Setup\UpdateToken::isValid — Coverage: 100.0% | Lines: 4 | Complexity: 4 phpMyFAQ\Setup\Upgrade::__construct — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::url — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Storage\StorageFactory::readRequiredConfig — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Storage\StorageFactory::readStringConfig — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\System::isUpdateNecessary — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\System::getPoweredByString — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Tags::delete — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Template\ThemeManager::activateDefaultTheme — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Tenant\TenantContextResolver::readStringEnv — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantPlanChanged — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Translation::getAll — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Translation::setDefaultLanguage — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Translation::setCurrentLanguage — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Translation::getInstance — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::doTranslateBatch — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Translation\Provider\LibreTranslationProvider::getApiUrl — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\User::isValidLogin — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\User::getUserIdByKeycloakSub — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\User\UserAuthentication::hasExhaustedFailedLoginBudget — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\User\UserAuthentication::recordFailedLogin — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\Utils::resolveMarkers — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Utils::getHostFromUrl — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\Utils::moveToTop — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::runtimeObject — Coverage: 75.0% | Lines: 4 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::set — Coverage: 100.0% | Lines: 4 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::setPluginManager — Coverage: 100.0% | Lines: 4 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupRepository::deleteAll — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Administration\Faq::buildGroupAwareFaqAccessQuery — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Administration\Faq::sanitizeFaqIds — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Administration\Report::sanitize — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Api\Sorting\SortRequest::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::readMimeType — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Attachment\File::createSubDirs — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Attachment\Filesystem\AbstractFile::copyToSimple — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth::enableReadOnly — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth::disableReadOnly — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth::encrypt — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\AuthDatabase::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::isValidLogin — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::getUserFromSession — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::idList — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::buildDiscoveryUrl — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::supportsGrantType — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::getCurrentTimestamp — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\Oidc\OidcSession::setAuthorizationState — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::clearAuthorizationState — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::verify — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Auth\PasswordHasher::needsRehash — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Bootstrap\PhpConfigurator::fixIncludePath — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getCategoryRepository — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getTreeBuilder — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getBreadcrumbsBuilder — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getBreadcrumbsHtmlRenderer — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getAdminCategoryTreePresenter — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getCategoryService — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::getTreeFacade — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category::updateParentCategory — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Category\CategoryPermissionContext::getOwner — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category\CategoryRepository::getTenantQuotaEnforcer — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoryIdFromFaq — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Category\CategoryService::updateParentCategory — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::expand — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Category\Tree\CategoryValidator::isValidCategory — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Category\Tree\TreeBuilder::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Command\UpdateCommand::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getRedisClient — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\AbstractController::renderView — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::searches — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::contentHealth — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::getLayout — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\UpdateController::isValidUpdatePackageToken — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\AbstractApiController::initializeFromContainer — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\BackupController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\LanguageController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\LoginController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\OAuth2Controller::getAuthorizationServer — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\PdfController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\RegistrationController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\TitleController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Api\VersionController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\SetupController::isAuthorizedForUpdate — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::logout — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::createCategoryHelper — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Controller\Frontend\OAuthDiscoveryController::index — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Controller\Frontend\SearchController::tagsPaginated — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\CustomPage::getById — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\CustomPage::getBySlug — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\CustomPage::update — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Database::getInstance — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Database\Mysqli::numRows — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Database\Mysqli::getOne — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Database\Mysqli::close — Coverage: 33.3% | Lines: 3 | Complexity: 2 phpMyFAQ\Database\Pgsql::affectedRows — Coverage: 0.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Database\Sqlite3::error — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Entity\FaqEntity::getValidFrom — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Entity\FaqEntity::getValidTo — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Entity\FaqEntity::getCreatedDate — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\EventListener\ControllerContainerListener::requiresAdminAuthentication — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Export\Json::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::config — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setCustomFooter — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Faq::getCurrentLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Faq::getTenantQuotaEnforcer — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Faq\FaqCreationService::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Faq\FaqCreationService::canUserAddFaq — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Faq\Import::isCSVFile — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Faq\QuestionService::canUserAskQuestion — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Faq\Statistics::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Filesystem\Filesystem::createDirectory — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Filter::sanitizeQueryValue — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Filter::filterSanitizeString — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Filter::removeAttributes — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Glossary::setLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Glossary::currentLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Helper\FaqHelper::createOverview — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Instance\Client::createClientFolder — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Instance\Search\Elasticsearch::__construct — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Instance\Search\Elasticsearch::getTokenizer — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::getNumberOfShards — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::getNumberOfReplicas — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::getMapping — Coverage: 33.3% | Lines: 3 | Complexity: 2 phpMyFAQ\Instance\Search\Elasticsearch::unwrapResponse — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Kernel::buildContainer — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Language\LanguageCodes::getAllSorted — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::fetchFilteredLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Language\LanguageDetector::getSessionLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Language\LanguageDetector::getDetectionLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link::toStringWithoutSession — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link::toUri — Coverage: 100.0% | Lines: 3 | Complexity: 5 phpMyFAQ\Link::getDefaultScheme — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link::isSystemLink — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link::isHomeIndex — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link::getSEOTitle — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Link\Strategy\StrategyRegistry::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Mail::getServerName — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Mail::safeEmail — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\News\NewsService::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\News\NewsService::getAuthorInfo — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Pagination::renderPageLink — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Pagination::renderLink — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Permission\BasicPermissionRepository::refuseAllUserRights — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::removeFromGroup — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Plugin\PluginManager::triggerEvent — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpointHash — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Push\PushSubscriptionRepository::deleteByUserId — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Routing\RouteCacheManager::clearContext — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Search\Search\OpenSearch::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::getJoinedTable — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Search\SearchFactory::instantiate — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Search\SearchService::renderTagList — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Session\Token::getInstance — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Session\Token::removeToken — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::stepInsertStopwords — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::stepCreateAnonymousUser — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::integerType — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Setup\Migration\AbstractMigration::textType — Coverage: 66.7% | Lines: 3 | Complexity: 3 phpMyFAQ\Setup\Migration\AbstractMigration::varcharType — Coverage: 0.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Setup\Migration\MigrationRegistry::register — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::execute — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getDescription — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::shortenPath — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getDescription — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::shortenPath — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::copyFile — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::copyDirectory — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getSqlQueries — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createIndex — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createIndex — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::up — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::up — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Update::isConfigTableNotAvailable — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\Update::getFormattedDryRunReport — Coverage: 0.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Setup\UpdateToken::delete — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Upgrade::getDownloadHost — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Upgrade::getPath — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Setup\Upgrade::getFilename — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Storage\S3Storage::run — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Tenant\TenantEventDispatcher::dispatch — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Translation::create — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\Translation::setTranslationsDir — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Translation::performInit — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Translation\Provider\AzureTranslationProvider::translateBatch — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::translateBatch — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::translateBatch — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Translation\Provider\LibreTranslationProvider::translateBatch — Coverage: 66.7% | Lines: 3 | Complexity: 2 phpMyFAQ\Twig\Extensions\CategoryNameTwigExtension::getCategoryName — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\Extensions\FormatDateTwigExtension::formatDate — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\Extensions\PermissionTranslationTwigExtension::getPermissionTranslation — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Twig\Extensions\TitleSlugifierTwigExtension::slugify — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Twig\Extensions\UserNameTwigExtension::getUserName — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\Extensions\UserNameTwigExtension::getRealName — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::loadTemplate — Coverage: 33.3% | Lines: 3 | Complexity: 2 phpMyFAQ\User::userData — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\User::getTenantQuotaEnforcer — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\User::setUserData — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\User\CurrentUser::__construct — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\User\Tracking::getInstance — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\User\TwoFactor::saveSecret — Coverage: 100.0% | Lines: 3 | Complexity: 2 phpMyFAQ\User\UserAuthentication::authenticateSso — Coverage: 33.3% | Lines: 3 | Complexity: 2 phpMyFAQ\Visits::update — Coverage: 100.0% | Lines: 3 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getDefaultLanguage — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\ConfigurationMethodsTrait::add — Coverage: 100.0% | Lines: 3 | Complexity: 3 phpMyFAQ\Administration\AdminLog::delete — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\AdminLogRepository::getNumberOfEntries — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupRepository::getNumberOfEntries — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Category::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Category::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Category::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\DashboardLayout::reset — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Faq::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\Faq::buildBasicFaqAccessQuery — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\RemoteApiClient::setRemoteHashes — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\SessionRepository::deleteAllSessions — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\TranslationStatistics::getLanguageStatistics — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Api\OAuthDiscoveryService::isEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Api\Pagination\PaginationRequest::validateLimit — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::escapeIdentifier — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::setKey — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::deleteMeta — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Attachment\AbstractMimeType::guessByExt — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Attachment\AttachmentService::getGenericErrorMessage — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\AbstractFile::__destruct — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::putChunk — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\File\VanillaFile::getChunk — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth::getEncryptionContainer — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth::getErrors — Coverage: 100.0% | Lines: 2 | Complexity: 3 phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedUserId — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\AuthEntraId::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::checkCredentials — Coverage: 50.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::findUser — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::storeUserInSession — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::getCurrentSessionKey — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\EntraId\EntraIdSession::getCookie — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\JwksProvider::getKeys — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setJwksProvider — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::clearToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setRefreshToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::setAccessToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::isEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::getConfigString — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\OAuth2\ResourceServer::isEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Auth\OAuth2\ResourceServer::getConfigString — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Auth\PasswordHasher::legacyHash — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setWebAuthnKeys — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Bookmark::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolveAttachmentsDir — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Bootstrap\PhpConfigurator::configurePcre — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Bootstrap\PhpConfigurator::registerErrorHandlers — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Cache\CacheSettingsResolver::normalizeRedisPrefix — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Captcha\BuiltinCaptcha::setUserIsLoggedIn — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Captcha\GoogleRecaptcha::setUserIsLoggedIn — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::expand — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::getCategoryIdFromFaq — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::getCategoryIdFromName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::getCategoryName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category::getCategoryDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\CategoryCache::updateTreeTabEntry — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Category\CategoryPermissionContext::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoryIdsFromFaq — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoryIdFromName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoryData — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Image::setFileName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Image::isValidMimeType — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Permission::normalizeCategoryIds — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Category\Relation::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Relation::normalizeIdList — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Category\Startpage::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Startpage::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Startpage::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Category\Tree\TreePathResolver::getBrothers — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Command\InstallCommand::env — Coverage: 100.0% | Lines: 2 | Complexity: 3 phpMyFAQ\Configuration\UrlSettings::getDefaultUrl — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Configuration\UrlSettings::getAllowedMediaHosts — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Controller\AbstractController::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\AbstractController::setContainer — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\AbstractController::userIsAuthenticated — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Controller\AbstractController::userIsSuperAdmin — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Controller\Administration\AbstractAdministrationController::userHasPermission — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingKey — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingOrder — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::permLevel — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::hasValidThemeCsrfToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::getPaginationRequest — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::apiResponse — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::errorResponse — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::setCurrentUserFactory — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::setUserFactory — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Controller\Frontend\SearchController::tags — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\CustomPage::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\CustomPage::countPages — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\CustomPage::delete — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\CustomPage::slugExists — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\DatabaseHelper::alignTablePrefix — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\Mysqli::fetchObject — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Database\Mysqli::affectedRows — Coverage: 0.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Database\Pgsql::fetchObject — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\Pgsql::fetchArray — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Database\Pgsql::getOne — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Database\Pgsql::clientVersion — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\Pgsql::serverVersion — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::fetchRow — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::close — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Encryption::setSalt — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setTime — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setUserId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setText — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setIp — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setHash — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\AdminLog::setPreviousHash — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setActive — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setGroupId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setLang — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setParentId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setUserId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setImage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::setShowHome — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setSenderId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setRecipientId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setMessage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setIsRead — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::setCreatedAt — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setRecordId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setCategoryId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setType — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setUsername — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setComment — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setDate — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Comment::setHelped — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setPageTitle — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setSlug — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setContent — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setAuthorName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setAuthorEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setActive — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setCreated — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setUpdated — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setSeoTitle — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setSeoDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::setSeoRobots — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setSolutionId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setRevisionId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setActive — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setSticky — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setKeywords — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setQuestion — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setAnswer — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setAuthor — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setComment — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setNotes — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setValidFrom — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setValidTo — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setCreatedDate — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::setUpdatedDate — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getJson — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Entity\InstanceEntity::setUrl — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\InstanceEntity::setInstance — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\InstanceEntity::setComment — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setHeader — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setMessage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setCreated — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setAuthor — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setActive — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setComment — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setDateStart — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setDateEnd — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setLink — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setLinkTitle — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::setLinkTarget — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setUserId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setEndpoint — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setEndpointHash — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setPublicKey — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setAuthToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setContentEncoding — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::setCreatedAt — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setUsername — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setCategoryId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setQuestion — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setCreated — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setAnswerId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::setIsVisible — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setSeoType — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setReferenceId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setReferenceLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setTitle — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setSlug — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::setCreated — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Tag::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Tag::setName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setFaqId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setVote — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setUsers — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setCreatedAt — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Entity\Vote::setIp — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Export::getExportTimestamp — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::Header — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::Footer — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::defineIfMissing — Coverage: 50.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Export\Pdf\Wrapper::WriteHTML — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq::update — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq::normalizeFaqIds — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Faq\MetaData::setFaqId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq\MetaData::setFaqLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq\MetaData::setCategories — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq\QueryHelper::normalizeIdList — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Faq\QuestionService::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq\Statistics::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Faq\Statistics::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Form\FormsRepository::insertInput — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Forms::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Forms::getFormData — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Glossary::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setCategory — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setCategoryRelation — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setTags — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setPlurals — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setSessionId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::setConfiguration — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Instance\Client::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Instance\Main::createMain — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Language::setLanguageByAcceptLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Language\LanguageCodes::getSupported — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Language\LanguageDetector::detectAllWithBrowser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::getConfigLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Link::setTitle — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Link\Util\TitleSlugifier::replacePattern — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Network::isBanned — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\News::countLatestData — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\News\NewsService::processContent — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getUserRightsCount — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Permission\MediumPermission::changeGroup — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getUserRightsCount — Coverage: 0.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Permission\MediumPermissionRepository::deleteGroupMemberships — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Permission\MediumPermissionRepository::deleteGroupRights — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpoint — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Rating::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Routing\RouteCacheManager::readCache — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Search::getDatabaseDriverClassName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search::deleteSearchTermById — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search::deleteAllSearchTerms — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\Database\Mysqli::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\Database\PdoMysql::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\Database\PdoPgsql::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\Database\Pgsql::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setResultColumns — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setTable — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setJoinedTable — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setJoinedColumns — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setMatchingColumns — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::setConditions — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::escapeLikeWildcards — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Session\Token::setPage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Session\Token::setExpiry — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Session\Token::setSessionToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Session\Token::setCookieToken — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Session\Token::getTokenString — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\EnvironmentConfigurator::getServerPath — Coverage: 100.0% | Lines: 2 | Complexity: 4 phpMyFAQ\Setup\Installation\DefaultDataSeeder::seedConfig — Coverage: 0.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Installation\SchemaInstaller::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\InstallationInputValidator::isLdapEnabled — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Installer::getFormInputs — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isDbType — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::dropColumn — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::setDryRun — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::clearResults — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::getMigration — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::getLatestVersion — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\MigrationResult::setSuccess — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::setErrorMessage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::setExecutionTimeMs — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::setDryRun — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getDescription — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addSql — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addConfig — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::deleteConfig — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::renameConfig — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::updateConfig — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::grantPermission — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::insertFormInput — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addOperation — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::clear — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::table — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addVarchar — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addTimestamp — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createTablePrefix — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::addColumn — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createTablePrefix — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createTablePrefix — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createTable — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createTableIfNotExists — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::alterTable — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropTable — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropTableIfExists — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createIndex — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createIndexIfNotExists — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropIndex — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::table — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::ifNotExists — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::varchar — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::timestamp — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::date — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::char — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::primaryKey — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::fullTextIndex — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::up — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Update::getDryRunResults — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Setup\Update::updateVersion — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Sitemap::__construct — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Sitemap::normalizeIdList — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\StopWords::setLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Storage\S3Storage::exists — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Storage\StorageFactory::tenantPrefix — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Strings::instance — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Strings\Mbstring::substr — Coverage: 100.0% | Lines: 2 | Complexity: 3 phpMyFAQ\Strings\StringBasic::substr — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\System::getVersion — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\System::setDatabase — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Tags::setUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Tags::setGroups — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Tags::setBypassPermissionCheck — Coverage: 0.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Tags::deleteByRecordId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Tags::normalizePermissionGroups — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Template\ThemeManager::assertValidThemeName — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Template\ThemeManager::assertArchiveIsReadable — Coverage: 100.0% | Lines: 2 | Complexity: 3 phpMyFAQ\Template\ThemeManager::assertAllowedFileExtension — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation::getString — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation::checkTranslationsDirectory — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation::checkDefaultLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation::checkInit — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation::checkCurrentLanguage — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Translation\Provider\AzureTranslationProvider::doTranslate — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getApiUrl — Coverage: 100.0% | Lines: 2 | Complexity: 3 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::supportsLanguagePair — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\Twig\Extensions\FaqTwigExtension::getFaqQuestion — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Twig\Extensions\TagNameTwigExtension::getTagName — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Twig\Extensions\TranslateTwigExtension::translate — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\User::addPerm — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\User::addAuth — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\User::getUserIdByEmail — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\User::getUserVisibilityByEmail — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\User::fetchRowArray — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\User\Tracking::isBanned — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\User\TwoFactor::getSecret — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\User\UserAuthentication::failedLoginKey — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\User\UserSession::setCurrentSessionId — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\User\UserSession::setCurrentUser — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Visits::resetAll — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Visits::getRequestTimestamp — Coverage: 100.0% | Lines: 2 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::getServiceContainer — Coverage: 0.0% | Lines: 2 | Complexity: 2 phpMyFAQ\ConfigurationMethodsTrait::setLdapConfig — Coverage: 100.0% | Lines: 2 | Complexity: 1 phpMyFAQ\Administration\AdminLog::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\AdminLog::getNumberOfEntries — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\AdminLog::getAll — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\AdminLog::calculateHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\AdminLogRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup::getRepository — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupExecuteResult::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupExportResult::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupParseResult::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Backup\BackupRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Category::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Category::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Category::getUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Category::getGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Category::getOwner — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Administration\Changelog::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\DashboardLayout::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Faq::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Faq::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\FileDownloader::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\FileDownloader::streamContent — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\RatingStatistics::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\RecentUsers::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\RemoteApiClient::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\RemoteApiClient::setHttpClient — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Report::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\ReportRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Revision::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::getTimeFromSessionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::getNumberOfSessions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::deleteSessions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::deleteAllSessions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\Session::getLast30DaysVisits — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Administration\SessionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::has — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::getFilters — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::hasFilters — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Filtering\FilterRequest::toArray — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Api\MetaService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\MetaService::buildPublicLogoUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\MetaService::toBool — Coverage: 100.0% | Lines: 1 | Complexity: 4 phpMyFAQ\Api\OAuthDiscoveryService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\ProblemDetails::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::getField — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::getOrder — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::getOrderSql — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Api\Sorting\SortRequest::hasSort — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::buildUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::setRecordLang — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::setId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getRecordId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::setRecordId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getTenantQuotaEnforcer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getFilename — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getMimeType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getFilesize — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AbstractAttachment::getRealHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AttachmentCollection::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AttachmentService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AttachmentService::getAttachment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\AttachmentService::getAttachmentErrorMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractEntry::moveTo — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Attachment\Filesystem\AbstractEntry::isEncrypted — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractEntry::getPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractEntry::__toString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractFile::eof — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractFile::getMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\AbstractFile::isOk — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Attachment\Filesystem\File\VanillaFile::putChunk — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth::addError — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth::isReadOnly — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\ApiKeyAuthenticator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedApiKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::setOAuth2Authenticator — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::getAuthenticatedUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthChain::getAuthSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthEntraId::logout — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthHttp::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthKeycloak::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::getSubject — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthKeycloak::toBool — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthLdap::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthLdap::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthSso::isValidLogin — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::setAppId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::byteString — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Auth\AuthWebAuthn::arrayToString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\AuthWebAuthn::stringToArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\EntraIdSession::createCurrentSessionKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\JwksProvider::cacheFile — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::errorMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getEntraIdSession — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getRefreshToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getAccessToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\EntraId\OAuth::getMail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::toBool — Coverage: 100.0% | Lines: 1 | Complexity: 4 phpMyFAQ\Auth\OAuth2\AuthorizationServer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::setTokenIssuer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\AuthorizationServer::setAuthorizationCompleter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setRedirectUri — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setConfidential — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::db — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::table — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::getNewAuthCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::getNewRefreshToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::finalizeScopes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\ResourceServer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\OAuth2\ResourceServer::setTokenValidator — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClient::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClientConfig::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcClientConfig::getScopesAsString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcDiscoveryService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Sequence — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1ObjectIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Null — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1BitString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcProviderConfig::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::setIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::getIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\Oidc\OidcSession::clearIdToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::hash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\PasswordHasher::isLegacyHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getWebAuthnKeys — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Bookmark\BookmarkFormatter::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Bookmark\BookmarkRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Bootstrapper::getFaqConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Bootstrapper::getDb — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Bootstrapper::getRequest — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Cache\CacheFactory::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Cache\CacheSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Cache\CacheSettingsResolver::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::getFont — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::isUserIsLoggedIn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\BuiltinCaptcha::escapeQueryValue — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\GoogleRecaptcha::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\GoogleRecaptcha::isUserIsLoggedIn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getLevelOf — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getAllCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::buildAdminCategoryTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getChildren — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getChildNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::moveOwnership — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::hasLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getCategoryLanguagesTranslated — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getOwner — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getModeratorGroupId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getCategoryTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::categoryHasLinkToFaq — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category::getCategoryNames — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::setCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::addCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getCategoryNames — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::setCategoryNames — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::addCategoryName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getCategoryName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getTreeTab — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::setTreeTab — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::addTreeTabEntry — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getTreeTabEntry — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::countTreeTab — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getCatTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::setCatTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getChildren — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::setChildren — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::addChild — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryCache::getChildrenOfParent — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::getUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::setUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::getGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::setOwner — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::setModerator — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryPermissionContext::getModeratorGroupId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::getAllCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::getAllCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoriesFromFaq — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::moveOwnership — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::hasLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::getCategoryLanguagesTranslated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryService::getMissingCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::buildLinearTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::buildAdminCategoryTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::getChildren — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::getChildNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::getLevelOf — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\CategoryTreeFacade::getNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Image::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildFromIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Navigation\CategoryTreeNavigator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Order::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Permission::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Permission\CategoryPermissionService::buildWhereClause — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Permission\CategoryPermissionService::buildWhereClauseWithInactive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Relation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Startpage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::getNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::getChildren — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::getChildNodes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::getBrothers — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::buildTree — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreeBuilder::computeLevel — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Category\Tree\TreePathResolver::getChildren — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Category\Tree\TreeVisualizer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Chat::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Command\CreateHashesCommand::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Command\InstallCommand::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Command\McpServerCommand::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comment\CommentsRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comments::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comments::countComments — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comments::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comments::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Comments::isCommentAllowed — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration::getConfigurationInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ConfigurationRepository::updateConfigValue — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ConfigurationRepository::fetchAll — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ConfigurationRepository::insert — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ConfigurationRepository::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ConfigurationRepository::renameKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getServer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getPort — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getDatabase — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getPrefix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\DatabaseConfiguration::getSchema — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ElasticsearchConfiguration::getHosts — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\ElasticsearchConfiguration::getIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LayoutSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LayoutSettings::getTemplateSet — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LayoutSettings::getCustomCss — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getMainServer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getMainPort — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getMainUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getMainPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getMainBase — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapConfiguration::getServers — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\LdapSettings::isActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\MailSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\OpenSearchConfiguration::getHosts — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\OpenSearchConfiguration::getIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\SearchSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\SearchSettings::isElasticsearchActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\SecuritySettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\SecuritySettings::isSignInWithMicrosoftActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\SecuritySettings::isSignInWithKeycloakActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\ConfigurationStorageSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::clear — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\HybridConfigurationStore::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getHashKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Configuration\UrlSettings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Container\ContainerCacheManager::containerClass — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Container\ContainerRegistry::set — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Container\ContainerRegistry::get — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Container\ContainerRegistry::reset — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\AbstractController::json — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\AbstractController::isApiEnabled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\AbstractController::addExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\AbstractController::addFilter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\CategoryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\CommentController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\DashboardController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ElasticsearchController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ExportController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\ExportController::hasDataField — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Controller\Administration\Api\FaqController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\GlossaryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\InstanceController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\OpenSearchController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\PageController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\QuestionController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\SessionController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\StatisticsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\TagController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\TranslationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\UpdateController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\Api\UserController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\AttachmentsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\AuthenticationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\BackupController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\CategoryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\CommentsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\DashboardController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\ExportController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\FaqController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\FormsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\GlossaryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\GroupController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\InstanceController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\NewsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\OpenQuestionsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\OrphanedFaqsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\PageController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\PasswordChangeController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\PluginController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\RatingController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\StatisticsSearchController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\StatisticsSessionsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\StickyFaqsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\SystemInformationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\TagController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Administration\UserController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::getSortRequest — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::getFilterRequest — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\AbstractApiController::createResponseEtag — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\CategoryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\CategoryController::setCategoryFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\CategoryController::setCategoryPermissionFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\CategoryController::setOrderFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\CommentController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\FaqController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\GlossaryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\LanguageController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\MetaController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\OAuth2Controller::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\OAuth2Controller::setAuthorizationServer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\OpenQuestionController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\PaginatedResponseOptions::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\PdfController::setFaqFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\PdfController::setServicesFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\QuestionController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\RegistrationController::setRegistrationHelperFactory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\SearchController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\TagController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\TitleController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Api\VersionController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\ContainerControllerResolver::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\AccessibilityController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\AutoCompleteController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\CaptchaController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\ChatSseController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\CommentController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\ContactController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\FaqController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\PopularSearchesController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\PushController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\QuestionController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\SetupController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\SetupController::isSecured — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\SetupController::getUpdateToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\TranslationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::json — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::genericIssuanceResponse — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::tooManyRequests — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::clientIp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\UserController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\Api\VotingController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\AttachmentController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\AuthenticationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\AzureAuthenticationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\CategoryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\ChatController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\ContactController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\CookiePolicyController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\CustomPageController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\FaqController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\GlossaryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\ImprintController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\NewsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\OAuthDiscoveryController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\OverviewController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\PageNotFoundController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\PdfController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\PrivacyController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\QuestionsController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\SearchController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\SitemapController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\StartpageController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\TermsController::index — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\Frontend\UserController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\SitemapController::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\SitemapController::sitemapGz — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Controller\SitemapController::sitemapXmlGz — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage::countAllLanguages — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage::getExistingLanguages — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage::createTranslation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage::activate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\CustomPage\CustomPageRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database::setTablePrefix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database::getTablePrefix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\DatabaseHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::connection — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::error — Coverage: 0.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\Mysqli::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::fetchArray — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\Mysqli::fetchRow — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\Mysqli::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::clientVersion — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::serverVersion — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::__destruct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::lastInsertId — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Mysqli::now — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::pdo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::error — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::numRows — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\PdoMysql::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::affectedRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::prepare — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::clientVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::serverVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::close — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::__destruct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::lastInsertId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoMysql::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::pdo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::error — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::numRows — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\PdoPgsql::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::affectedRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::prepare — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::clientVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::serverVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::close — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::__destruct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::lastInsertId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoPgsql::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::pdo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::error — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::affectedRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::prepare — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::clientVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::serverVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::close — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::__destruct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::lastInsertId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlite::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::pdo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::error — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::escape — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::numRows — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\PdoSqlsrv::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::affectedRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::prepare — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::serverVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::close — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::__destruct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::lastInsertId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\PdoSqlsrv::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::error — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::fetchRow — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::numRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::nextId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::close — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Pgsql::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::connection — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::fetchRow — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Database\Sqlite3::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::affectedRows — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::serverVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::clientVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::lastInsertId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlite3::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::escape — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::log — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Database\Sqlsrv::now — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Date::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Encryption::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Encryption::encrypt — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Encryption::error — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\EncryptionTypes\Bcrypt::encrypt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EncryptionTypes\Hash::encrypt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getTime — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getIp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\AdminLog::getPreviousHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getGroupId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getLang — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getParentId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getImage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CategoryEntity::getShowHome — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::getSenderId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::getRecipientId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::getMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::isRead — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\ChatMessage::getCreatedAt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getRecordId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getUsername — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getComment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::getDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Comment::hasHelped — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getPageTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getSlug — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getContent — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getAuthorName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getAuthorEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::isActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getCreated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getUpdated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getSeoTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getSeoDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\CustomPageEntity::getSeoRobots — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getSolutionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getRevisionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::isActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::isSticky — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getKeywords — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getQuestion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getAnswer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getAuthor — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::isComment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getNotes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\FaqEntity::getUpdatedDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\InstanceEntity::getUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\InstanceEntity::getInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\InstanceEntity::getComment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getHeader — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getCreated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getAuthor — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::isActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::isComment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getDateStart — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getDateEnd — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getLink — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getLinkTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\NewsMessage::getLinkTarget — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getEndpoint — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getEndpointHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getPublicKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getAuthToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getContentEncoding — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\PushSubscriptionEntity::getCreatedAt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getUsername — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getQuestion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getCreated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::getAnswerId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\QuestionEntity::isVisible — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getSeoType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getReferenceId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getReferenceLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getSlug — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\SeoEntity::getCreated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Tag::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Tag::getName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getFaqId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getVote — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getUsers — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getCreatedAt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Entity\Vote::getIp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::enableTestMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::isDebugMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::shouldLogQueries — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::getEnvironment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::isProduction — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Environment::isDevelopment — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\ApiExceptionListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\ApiRateLimiterListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\ControllerContainerListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\LanguageListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\RouterListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\EventListener\WebExceptionListener::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::setHeaderRenderer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::setFooterRenderer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::output — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setPrintHeader — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setDisplayMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setTitle — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setAuthor — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setCreator — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::bookmark — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setMargins — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setHeaderMargin — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFooterMargin — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFont — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFontSubsetting — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setImageScale — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setDefaultMonospacedFont — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setRtl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::write — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::ln — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::writeHtml — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::writeHtmlCell — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::multiCell — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::cell — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setY — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setTextColor — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getLastH — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addTocPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addToc — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::endTocPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getAliasNumPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getAliasNbPages — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::onHeader — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::onFooter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::Open — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::Output — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::AddPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setPrintHeader — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetDisplayMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetMargins — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetHeaderMargin — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetFooterMargin — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetCreator — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetTitle — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetAuthor — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::SetFont — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::Ln — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::Write — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::Bookmark — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setQuestion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::getCurrentFont — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Export\Pdf\Wrapper::setFaq — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::isFaqRecordVisible — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::getNextSolutionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::getSolutionIdFromId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::hasTranslation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::isActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::getIdFromSolutionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::sortStickyArrayByOrder — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq::normalizeSortDirection — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Faq::hasTitleAHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqCreationService::getDefaultUserEmail — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Faq\FaqCreationService::getDefaultUserName — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Faq\FaqDisplayService::isExpired — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getNumberOfComments — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getCommentsData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getAvailableLanguages — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getTagsHtml — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getRating — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqDisplayService::getFaqHelper — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\FaqRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\Import::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\MetaData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\Permission::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\QueryHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\QuestionService::getDefaultUserEmail — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Faq\QuestionService::getDefaultUserName — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Faq\RecordVisibility::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Faq\RecordVisibility::isVisible — Coverage: 100.0% | Lines: 1 | Complexity: 3 phpMyFAQ\Faq\RecordVisibility::isActivated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filesystem\Filesystem::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 3 phpMyFAQ\Filesystem\Filesystem::getRootPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filesystem\Filesystem::getPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filesystem\Filesystem::setPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filesystem\Filesystem::moveDirectory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filter::filterInputArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Filter::filterArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Form\FormsFactory::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Form\FormsRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::editTranslation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::deleteTranslation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::insertInputIntoDatabase — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::getInsertQueries — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::saveActivateInputStatus — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Forms::saveRequiredInputStatus — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Glossary::fetch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Glossary::getLanguage — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Glossary\GlossaryRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::getCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::category — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::plurals — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\AbstractHelper::getConfiguration — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\FaqHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\FaqHelper::rewriteUrlFragments — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\MailHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\RegistrationHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\SearchHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\SearchHelper::setSearchTerm — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\StatisticsHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\SvgSanitizer::shouldReject — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\TagsHelper::getTaggingIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Helper\UserHelper::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Http\RateLimiter::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Http\RateLimiter::getHeaders — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance::getId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance::setId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::setClientUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::setFileSystem — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::createClient — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::isValidClientUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::isMultiSiteWriteable — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Client::buildClientFolderPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database::__construct — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database::getInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\Mysqli::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\PdoMysql::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\PdoPgsql::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\PdoSqlite::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\PdoSqlsrv::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\Pgsql::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\Sqlite3::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\Sqlsrv::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Database\Stopwords::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Search\OpenSearch::getMapping — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Search\OpenSearch::dropIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Setup::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Setup::setRootDir — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Instance\Setup::escapeForSingleQuotedPhpString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Kernel::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Kernel::getRoutingContext — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Kernel::isDebug — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language::isASupportedLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Language\LanguageCodes::getAll — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageCodes::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageCodes::getKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageCodes::getAllSupported — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::detectAllFromConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\LanguageDetector::getAcceptLanguage — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Language\Plurals::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Ldap::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Ldap::getMail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Ldap::quote — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Ldap::getDn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Ldap::getCompleteName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::setRelation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::escapeAttr — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::escapeUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::getHttpGetParameters — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::getStrategyRegistry — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link::registerStrategy — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\GenericPathStrategy::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\GenericPathStrategy::build — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\StrategyRegistry::register — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\StrategyRegistry::has — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\StrategyRegistry::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Link\Strategy\StrategyRegistry::list — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::createBoundary — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::setFrom — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::addCc — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::addTo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::getDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::getTime — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail::setReplyTo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail\Builtin::stripNewlines — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail\Provider\MailgunProvider::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail\Provider\SendGridProvider::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Mail\Provider\SesProvider::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Network::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::activate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News::deactivate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\News\NewsRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Notification::createCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Notification::createUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Pagination::shouldSkipBeforeCurrentPage — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Pagination::shouldSkipAfterCurrentPage — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Pagination::renderLayout — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Pagination\PaginationTemplates::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Pagination\PaginationTemplates::default — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Pagination\UrlConfig::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getRightData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getRightId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::checkUserRight — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getAllUserRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getUserRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getAllRightsData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::refuseAllUserRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermission::getUserGroups — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermissionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\BasicPermissionRepository::nextRightId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\GroupCategoryPermissionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getGroupRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::checkUserGroupRight — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getGroupId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getGroupMembers — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getUserGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getGroupName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getUserGroupRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getGroupData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::removeFromAllGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::refuseAllGroupRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::removeAllUsersFromGroup — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getCategoryRestrictions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::getAllCategoryRestrictions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermission::setCategoryRestrictions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermissionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Permission\MediumPermissionRepository::nextGroupId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginDiscovery::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginDiscovery::normalizedPluginDir — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginEvent::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginEvent::getData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginEvent::setOutput — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginEvent::getOutput — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::loadPluginConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getPluginConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getPlugins — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::isCompatible — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getPluginDirectory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getPluginStylesheets — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getPluginScripts — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Plugin\PluginManager::getIncompatiblePlugins — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Push\PushSubscriptionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Push\WebPushService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Push\WebPushService::getVapidPublicKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question::add — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question::updateQuestionAnswer — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Question\QuestionRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\DatabaseMessageBus::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Handler\ExportHandler::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Handler\IndexFaqHandler::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Handler\SendMailHandler::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Message\ExportMessage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Message\IndexFaqMessage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Message\IndexFaqMessage::fromArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Message\SendMailMessage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\MessageBusFactory::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Transport\DatabaseTransport::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Worker::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Queue\Worker::registerHandler — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Rating::check — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Rating::getNumberOfVotings — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Rating::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Rating::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Rating::deleteAll — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Relation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Routing\RouteCacheManager::hasCache — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Routing\RouteCacheManager::getCacheFile — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Routing\RouteCollectionBuilder::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Routing\RouteCollectionBuilder::build — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Scheduler\TaskScheduler::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search::setCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search::getCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search::setCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search::getCategory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\AbstractSearch::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Rating\RatingRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\Elasticsearch::getCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\Elasticsearch::setCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\Elasticsearch::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\Elasticsearch::setLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\OpenSearch::getCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\OpenSearch::setCategoryIds — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\OpenSearch::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\Search\OpenSearch::setLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::getResultColumns — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::getTable — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::getMatchingColumns — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchDatabase::disableRelevance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchResultSet::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchResultSet::setResultSet — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchResultSet::getResultSet — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchResultSet::getNumberOfResults — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchResultSet::setNumberOfResults — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Search\SearchService::getSolutionIdRedirectUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo::create — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo::update — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo\SeoRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo\SitemapXmlService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Seo\SitemapXmlService::isEnabled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\Gravatar::getUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\Gravatar::getHash — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\FaqSearchTool::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\FaqSearchTool::getSearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\FaqSearchTool::getFaq — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\FaqSearchTool::buildFaqUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\McpSdkRuntime::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\McpSdkRuntime::runConsole — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\McpSdkRuntime::getServerInfo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\McpToolDefinition::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::runConsole — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::getServerInfo — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::getCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::setCategoryId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::getFaqId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::setFaqId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::setLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::getQuestion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Services::setQuestion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\AbstractSession::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\AbstractSession::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\AbstractSession::set — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\SessionWrapper::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\SessionWrapper::set — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\SessionWrapper::has — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\SessionWrapper::remove — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getPage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getExpiry — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getSessionToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getCookieToken — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getCookie — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::getCookieName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Session\Token::resetInstanceForTests — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\AbstractSetup::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\AbstractSetup::checkMinimumPhpVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\AbstractSetup::checkMinimumUpdateVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\AbstractSetup::checkMaintenanceMode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\EnvironmentConfigurator::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\EnvironmentConfigurator::getHtaccessPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InMemoryHtaccessFile::valid — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InMemoryHtaccessFile::isReadable — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\DatabaseSchema::getTableNames — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::getMainConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::getMainRights — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\DefaultDataSeeder::getFormInputs — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installation\SchemaInstaller::getSchema — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInput::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInput::getLoginName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInput::getPassword — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInput::getEmail — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInputValidator::isElasticsearchEnabled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationInputValidator::isOpenSearchEnabled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\InstallationRunner::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installer::checkMinimumPhpVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installer::hasLdapSupport — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Installer::hasElasticsearchSupport — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Setup\Installer::isAlreadyInstalled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isReversible — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::down — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::table — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isMySql — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isPostgreSql — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isSqlite — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::isSqlServer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::dropTable — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::dropTableIfExists — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\AbstractMigration::getConfig — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::isDryRun — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationExecutor::getResults — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::getVersions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationRegistry::hasMigration — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::isSuccess — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getErrorMessage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getExecutionTimeMs — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::isDryRun — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getOperationResults — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getSuccessCount — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getFailureCount — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationResult::getOperationCount — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationTracker::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\MigrationTracker::getAppliedVersions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getValue — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getOldKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getNewKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::execute — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getKey — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getValue — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getDestination — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getDestination — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperations — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperationsByType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::toArray — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\OperationRecorder::count — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getPermissionName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getPermissionDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getUserId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\SqlOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\SqlOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\SqlOperation::getQuery — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::integer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::bigInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::smallInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::varchar — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::text — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::longText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::blob — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::boolean — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::timestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::date — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::char — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::currentTimestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::currentDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::autoIncrement — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createTableSuffix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::modifyColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::dropIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::supportsColumnPositioning — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::supportsCombinedAlter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::quoteIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::integer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::bigInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::smallInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::varchar — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::text — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::longText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::blob — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::boolean — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::timestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::date — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::char — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::currentTimestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::currentDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::autoIncrement — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createTableSuffix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::addColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::modifyColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::dropIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::supportsColumnPositioning — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::supportsCombinedAlter — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::quoteIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::integer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::bigInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::smallInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::varchar — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::text — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::longText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::blob — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::boolean — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::timestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::date — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::char — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::currentTimestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::currentDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::autoIncrement — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createTableSuffix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::addColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::modifyColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::dropIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::supportsColumnPositioning — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::supportsCombinedAlter — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::quoteIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::getType — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::integer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::bigInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::smallInteger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::varchar — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::text — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::longText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::blob — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::boolean — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::timestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::date — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::char — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::currentTimestamp — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::currentDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::autoIncrement — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createTableSuffix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::addColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::modifyColumn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::dropIndex — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::supportsColumnPositioning — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::supportsCombinedAlter — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::quoteIdentifier — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory::create — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::getDialect — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::getTablePrefix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::table — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::text — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::longText — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::blob — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320RC::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320RC::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320RC::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration320RC::up — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration323::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration323::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration323::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration405::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration405::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration405::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration407::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration407::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration407::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration409::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration409::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration409::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getDescription — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getDependencies — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getDescription — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Update::allMigrationsSucceeded — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\UpdateRunner::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\UpdateToken::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\UpdateToken::getTokenFilePath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Upgrade::setUpgradeDirectory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Upgrade::isNightly — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Upgrade::setIsNightly — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Setup\Upgrade::isMaintenanceEnabled — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Sitemap::setUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Sitemap::setGroups — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\StopWords::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\StopWords::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\StopWords::getTableName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::exists — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::buildFullPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\FilesystemStorage::normalizePath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\S3Storage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\StorageFactory::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::put — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::putStream — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::get — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::exists — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::url — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Storage\TenantScopedStorage::size — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::strlen — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::substr — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::strtolower — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::strtoupper — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::strstr — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::preg_match — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::preg_match_all — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::preg_split — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::preg_replace_callback — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::preg_replace — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::htmlspecialchars — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings::htmlentities — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::strlen — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::strtolower — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::strtoupper — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::strstr — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::preg_match — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::preg_match_all — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::preg_split — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\Mbstring::appendU — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\Strings\StringBasic::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::strlen — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::strpos — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::strtolower — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::strtoupper — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::strstr — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::preg_match — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::preg_match_all — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::preg_split — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::preg_replace_callback — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Strings\StringBasic::preg_replace — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getMajorVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getApiVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getPluginVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getMcpServerVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getPoweredByPlainString — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getDocumentationUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getGitHubIssuesUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::isSqlite — Coverage: 100.0% | Lines: 1 | Complexity: 2 phpMyFAQ\System::isDevelopmentVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getDatabase — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getSupportedDatabases — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getHttpsStatus — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::checkInstallation — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\System::getMissingExtensions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tags::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Template\ThemeManager::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Template\ThemeManager::getThemeRootPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Template\ThemeManager::isAllowedFileExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Template\ThemeManager::isTwigTemplate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getTenantId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getHostname — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getTablePrefix — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getConfigDir — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getPlan — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantContext::getQuotas — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantEventDispatcher::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantCreated — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantSuspended — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantDeleted — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantLifecycleEvent::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantLifecycleEvent::getTenantId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantLifecycleEvent::getContext — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotaEnforcer::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotaEnforcer::createFromDatabaseDriver — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateFaq — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateUser — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::getMaxFaqs — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::getMaxAttachmentSize — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::getMaxUsers — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::getMaxApiRequests — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Tenant\TenantQuotas::getMaxCategories — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::resetInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::getDefaultLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::getCurrentLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::checkDefaultLanguageLoaded — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::checkLanguageLoaded — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation::filename — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\AbstractTranslationProvider::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\ContentTranslationService::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationRequest::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationRequest::getContentType — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationRequest::getSourceLang — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationRequest::getTargetLang — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationRequest::getFields — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationResult::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationResult::getTranslatedFields — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationResult::isSuccess — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\DTO\TranslationResult::getError — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\HtmlPreserver::restoreTags — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getProviderName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\AzureTranslationProvider::getProviderName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\AzureTranslationProvider::supportsLanguagePair — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\AzureTranslationProvider::mapLanguageCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getProviderName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::getProviderName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\GoogleTranslationProvider::supportsLanguagePair — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\LibreTranslationProvider::getProviderName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\LibreTranslationProvider::doTranslateBatch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\LibreTranslationProvider::supportsLanguagePair — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\LibreTranslationProvider::getSupportedLanguages — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Translation\Provider\LibreTranslationProvider::mapLanguageCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension::asset — Coverage: 0.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\FormatBytesTwigExtension::formatBytes — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\IsoDateTwigExtension::createIsoDate — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\LanguageCodeTwigExtension::getFromLanguageCode — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\Extensions\PluginTwigExtension::triggerPluginEvent — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::setSetup — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::addExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::addFunction — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::getExtension — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::addFilter — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::getTemplateSetName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Twig\TwigWrapper::setTemplateSetName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getAuthSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getUserAuthSource — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getAuthData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::checkDisplayName — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::checkMailAddress — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getAuthContainer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getUserData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::getLogin — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::isSuperAdmin — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User::isEmailAddress — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::accountStateConfiguration — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::isLoggedIn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::twoFactorFailure — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::isTwoFactorLockedOut — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::setLoggedIn — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::sessionIsTimedOut — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::sessionIdIsTimedOut — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::saveToSession — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::setSessionTimeout — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::enableRememberMe — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\CurrentUser::isFailedLastLoginAttempt — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\PasswordResetTokenService::sign — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\Tracking::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\Tracking::getCookieId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\Tracking::getBotIgnoreList — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\Tracking::getRequestHeaders — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\Tracking::getTrackingDirectory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\TrackingDataRedactor::isSensitive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\TwoFactor::generateSecret — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserAuthentication::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserAuthentication::isRememberMe — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserAuthentication::setRememberMe — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserAuthentication::hasTwoFactorAuthentication — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserAuthentication::setTwoFactorAuth — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserData::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserSession::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserSession::getCurrentSessionId — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserSession::getBotIgnoreList — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserSession::getRequest — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\User\UserSession::getTrackingDirectory — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Utils::isLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Visits::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Visits::getAllData — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\Visits\VisitsRepository::__construct — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setDatabase — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLogger — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getDb — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getInstance — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLanguage — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setContainer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getVersion — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getTitle — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getAdminEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getTemplateSet — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getNoReplyEmail — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getMailProvider — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getDefaultUrl — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getRootPath — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLdapMapping — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLdapOptions — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLdapGroupConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLdapConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getLdapServer — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::isLdapActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::isElasticsearchActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::isSignInWithMicrosoftActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::isSignInWithKeycloakActive — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setElasticsearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getElasticsearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setOpenSearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getOpenSearch — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setElasticsearchConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getElasticsearchConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setOpenSearchConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getOpenSearchConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::setTranslationProvider — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::delete — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::rename — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getAllowedMediaHosts — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getCustomCss — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getPluginManager — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::triggerEvent — Coverage: 100.0% | Lines: 1 | Complexity: 1 phpMyFAQ\ConfigurationMethodsTrait::getPluginConfig — Coverage: 100.0% | Lines: 1 | Complexity: 1

 

Sorted by descending CRAP (Change Risk Anti-Patterns) index.

Method CRAP Coverage
phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::up988.1634.1%
phpMyFAQ\Setup\UpdateRunner::displayDryRunReport7020.0%
phpMyFAQ\Controller\Frontend\FaqController::show601.6519.5%
phpMyFAQ\Setup\InstallationRunner::stepValidateConnectivity6000.0%
phpMyFAQ\Auth\AuthWebAuthn::register597.0116.2%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::fromCoseToPkcs197.6949.0%
phpMyFAQ\Helper\RegistrationHelper::createUser1820.0%
phpMyFAQ\Helper\CategoryHelper::getModerators1560.0%
phpMyFAQ\Setup\InstallationRunner::stepCreateConfigFiles1320.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::createRedisClient122.3340.8%
phpMyFAQ\Setup\Upgrade::installPackage1100.0%
phpMyFAQ\Controller\Frontend\UserController::resetPassword900.0%
phpMyFAQ\Setup\Upgrade::createTemporaryBackup900.0%
phpMyFAQ\Queue\Handler\ExportHandler::__invoke86.2950.7%
phpMyFAQ\Language\Plurals::plural83100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::news80.2311.1%
phpMyFAQ\Controller\Administration\Api\DashboardController::sanitizeLayout720.0%
phpMyFAQ\Controller\Administration\Api\GroupController::saveCategoryRestrictions720.0%
phpMyFAQ\Setup\Installer::checkNoncriticalSettings720.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::getPageFlags61100.0%
phpMyFAQ\Category\CategoryRepository::getCategoryLanguagesTranslated560.0%
phpMyFAQ\Service\Gravatar::getImageUrl560.0%
phpMyFAQ\User::getEncryptedPassword560.0%
phpMyFAQ\Command\InstallCommand::execute50.7525.9%
phpMyFAQ\Controller\Frontend\WebAuthnController::prepare47.855.9%
phpMyFAQ\Controller\Frontend\WebAuthnController::register43.819.1%
phpMyFAQ\Auth\OAuth2\Repository\UserRepository::getUserEntityByUserCredentials43.0518.2%
phpMyFAQ\Helper\LanguageHelper::renderSelectLanguage420.0%
phpMyFAQ\Setup\Installer::checkFilesystemPermissions420.0%
phpMyFAQ\Setup\Migration\AbstractMigration::autoIncrementColumn420.0%
phpMyFAQ\Setup\Migration\MigrationTracker::ensureTableExists420.0%
phpMyFAQ\Setup\Update::migrateAdminLogHashes420.0%
phpMyFAQ\Setup\Upgrade::extractPackage420.0%
phpMyFAQ\Controller\Administration\Api\ExportController::buildReportResponse40.0063.2%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::formatValue39.9442.1%
phpMyFAQ\Controller\Frontend\Api\FaqController::create37.9791.1%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::resolveLocalLogin37.1440.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::transformRecursive34.827.1%
phpMyFAQ\Faq\Permission::createPermissionArray34.5258.3%
phpMyFAQ\Setup\InstallationInputValidator::validateDatabaseInput33.9082.0%
phpMyFAQ\Database\Mysqli::connect33.2818.8%
phpMyFAQ\Controller\Frontend\Api\CommentController::create32.6391.5%
phpMyFAQ\Auth\AuthWebAuthn::authenticate32.2980.6%
phpMyFAQ\User\CurrentUser::login32.1880.8%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateClaims3197.5%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::save30.6782.9%
phpMyFAQ\Helper\SearchHelper::getSearchResult30.5863.9%
phpMyFAQ\Category\CategoryRepository::countCategories300.0%
phpMyFAQ\Setup\InstallationRunner::stepEstablishDbConnection300.0%
phpMyFAQ\Setup\InstallationRunner::stepCreateAdminUser300.0%
phpMyFAQ\Setup\InstallationRunner::stepInitializeSearchEngine300.0%
phpMyFAQ\Setup\Update::executeQueries300.0%
phpMyFAQ\Setup\Upgrade::cleanUp300.0%
phpMyFAQ\Controller\Administration\CategoryController::update28.2380.6%
phpMyFAQ\Controller\Administration\Api\FaqController::update28.2178.6%
phpMyFAQ\Mail::createHeaders28.1285.4%
phpMyFAQ\Controller\Administration\Api\FaqController::create28.0068.6%
phpMyFAQ\Setup\Upgrade::checkFilesystem25.8263.6%
phpMyFAQ\Controller\Administration\Api\AttachmentController::upload25.6863.8%
phpMyFAQ\Controller\Administration\Api\LdapController::healthcheck23.8437.2%
phpMyFAQ\Faq::normalizeCategoryOrder23.6237.5%
phpMyFAQ\Controller\Administration\Api\PageController::create23.4990.2%
phpMyFAQ\Controller\Administration\Api\TranslationController::translate23.3879.6%
phpMyFAQ\Controller\Administration\Api\InstanceController::add23.0483.3%
phpMyFAQ\Controller\Frontend\Api\QuestionController::create2398.5%
phpMyFAQ\User\UserAuthentication::authenticate22.5050.0%
phpMyFAQ\Controller\Frontend\Api\UserController::updateData22100.0%
phpMyFAQ\User\UserData::get21.9771.4%
phpMyFAQ\Command\CreateHashesCommand::execute21.9162.5%
phpMyFAQ\Setup\Migration\AbstractMigration::timestampType21.8240.0%
phpMyFAQ\Controller\Administration\Api\UserController::editUser21.3091.2%
phpMyFAQ\EventListener\ApiExceptionListener::createProblemDetailsResponse21100.0%
phpMyFAQ\Controller\Administration\Api\UserController::addUser20.8070.5%
phpMyFAQ\Controller\Administration\Api\ImageController::upload20.5083.9%
phpMyFAQ\Auth\AuthLdap::checkCredentials20.3684.4%
phpMyFAQ\User\UserSession::userTracking20.0894.1%
phpMyFAQ\Administration\AdminMenuBuilder::renderLayoutModeOptions200.0%
phpMyFAQ\Administration\AdminMenuBuilder::canAccessContent200.0%
phpMyFAQ\Administration\Session::getNumberOfOnlineUsers200.0%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::renameKey200.0%
phpMyFAQ\Database\PdoMysql::queryPrepared200.0%
phpMyFAQ\Database\PdoPgsql::queryPrepared200.0%
phpMyFAQ\Database\PdoSqlsrv::queryPrepared200.0%
phpMyFAQ\Database\Pgsql::connect200.0%
phpMyFAQ\Database\Sqlsrv::fetchAll200.0%
phpMyFAQ\Search::searchElasticsearch200.0%
phpMyFAQ\Setup\Installation\SchemaInstaller::dropTables200.0%
phpMyFAQ\Setup\InstallationInputValidator::validateLdapInput200.0%
phpMyFAQ\Setup\Migration\AbstractMigration::booleanType200.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::execute200.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::execute200.0%
phpMyFAQ\Setup\Update::optimizeTables200.0%
phpMyFAQ\Setup\Upgrade::verifyPackage200.0%
phpMyFAQ\User\UserAuthentication::authenticateLdap19.8527.3%
phpMyFAQ\Setup\Installation\SchemaInstaller::createAndUseSchema19.5627.8%
phpMyFAQ\Push\WebPushService::sendToSubscriptions19.3943.8%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::callback19.1680.4%
phpMyFAQ\Setup\Update::collectDryRunQueries19.1228.6%
phpMyFAQ\Helper\StatisticsHelper::deleteTrackingFiles18.7460.0%
phpMyFAQ\Export\Pdf\Wrapper::convertExternalImagesToBase6418.4482.9%
phpMyFAQ\ConfigurationMethodsTrait::initializeTranslationProvider18.3530.0%
phpMyFAQ\Controller\Api\CategoryController::create18.2575.6%
phpMyFAQ\Export\Pdf\Wrapper::resolveImage18.1884.0%
phpMyFAQ\Controller\Administration\BackupController::restore18.0694.4%
phpMyFAQ\Faq\QueryHelper::getQuery18.0580.0%
phpMyFAQ\Controller\Frontend\Api\RegistrationController::create1897.3%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::build1897.6%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::completeAuthorization17.5840.0%
phpMyFAQ\Setup\Migration\Versions\Migration323::up17.2321.2%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::buildCombined17.0675.0%
phpMyFAQ\Controller\Administration\Api\UpdateController::installPackage17.016.7%
phpMyFAQ\Controller\Api\OAuth2Controller::authorize1798.2%
phpMyFAQ\Ldap::getLdapData1798.0%
phpMyFAQ\Mail::send1796.2%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::up16.9471.4%
phpMyFAQ\Controller\Administration\CategoryController::create16.7675.9%
phpMyFAQ\Faq::normalizeFaqOrderBy16.6733.3%
phpMyFAQ\Controller\Administration\Api\ExportController::exportReport16.1392.1%
phpMyFAQ\Controller\Frontend\Api\UserController::requestUserRemoval16.0693.8%
phpMyFAQ\Administration\AdminMenuBuilder::evaluatePermission16.0050.0%
phpMyFAQ\Command\SeedTestDataCommand::purge1695.7%
phpMyFAQ\Controller\Administration\Api\UserController::overwritePassword15.9483.9%
phpMyFAQ\EventListener\WebExceptionListener::handleNotFound15.6144.0%
phpMyFAQ\Attachment\File::save15.4866.7%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::reset15.4887.1%
phpMyFAQ\Controller\Administration\Api\StopWordController::save15.4044.4%
phpMyFAQ\Kernel::resolveContainer15.4044.4%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::findKey15.3857.1%
phpMyFAQ\Controller\Administration\Api\PageController::update15.1192.1%
phpMyFAQ\Setup\Migration\MigrationExecutor::formatDryRunReport1598.1%
phpMyFAQ\Auth\OAuth2\ResourceServer::authenticate14.8658.3%
phpMyFAQ\Controller\Administration\Api\GroupController::updateMembers14.5186.3%
phpMyFAQ\Controller\Administration\AuthenticationController::authenticate14.4964.4%
phpMyFAQ\Setup\Update::createConfigBackup14.2988.6%
phpMyFAQ\Search\SearchResultSet::reviewResultSet14.1890.3%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta::up14.1147.5%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController::prepare14.0892.5%
phpMyFAQ\Administration\Backup::parseBackupFile14.0493.9%
phpMyFAQ\Controller\Administration\Api\UserController::updateUserRights14.0394.9%
phpMyFAQ\Template\ThemeManager::uploadTheme14.0281.8%
phpMyFAQ\Translation\ContentTranslationService::translateCustomPage14100.0%
phpMyFAQ\Controller\Administration\Api\GroupController::updateGroup13.8176.7%
phpMyFAQ\Controller\Administration\Api\GroupController::updatePermissions13.7883.3%
phpMyFAQ\Controller\Administration\InstanceController::update13.5478.0%
phpMyFAQ\Faq\FaqRepository::buildConditionWhereClause13.3387.5%
phpMyFAQ\User::createUser13.2189.2%
phpMyFAQ\Api\Pagination\PaginationMetadata::generateLinks13100.0%
phpMyFAQ\Controller\Frontend\Api\ContactController::create13100.0%
phpMyFAQ\Controller\Frontend\Api\VotingController::create13100.0%
phpMyFAQ\Faq\Import::validateCSV1395.5%
phpMyFAQ\Instance\Database\PdoPgsql::createTables1395.2%
phpMyFAQ\Queue\Handler\SendMailHandler::__invoke13100.0%
phpMyFAQ\Search\SearchService::processSearch1398.5%
phpMyFAQ\Setup\InstallationInputValidator::validateUserCredentials13100.0%
phpMyFAQ\Helper\FaqHelper::convertOldInternalLinks12.7651.0%
phpMyFAQ\Attachment\Filesystem\File\VanillaFile::copyTo12.4133.3%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::convertToString12.4133.3%
phpMyFAQ\Auth\AuthKeycloak::assignUserToGroups12.3986.1%
phpMyFAQ\Routing\AttributeRouteLoader::load12.3786.4%
phpMyFAQ\Plugin\PluginManager::loadPlugins12.2278.4%
phpMyFAQ\Controller\Administration\Api\MediaBrowserController::index12.1689.7%
phpMyFAQ\Controller\Administration\Api\DashboardController::versions12.1060.0%
phpMyFAQ\Database\DatabaseHelper::buildInsertQueries12.0779.3%
phpMyFAQ\System::createHashes12.0792.1%
phpMyFAQ\Administration\AdminMenuBuilder::renderTranslationProviderOptions120.0%
phpMyFAQ\Administration\AdminMenuBuilder::renderMailProviderOptions120.0%
phpMyFAQ\Administration\AdminMenuBuilder::renderCacheAdapterOptions120.0%
phpMyFAQ\Administration\Faq::countQuery120.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::getSymbol120.0%
phpMyFAQ\Controller\Administration\Api\ApiKeyController::update12100.0%
phpMyFAQ\Controller\Administration\Api\GroupController::listCategoryRestrictions120.0%
phpMyFAQ\Database\Mysqli::queryPrepared120.0%
phpMyFAQ\Database\Pgsql::queryPrepared120.0%
phpMyFAQ\Database\Sqlsrv::queryPrepared120.0%
phpMyFAQ\Export\Pdf\Wrapper::inlineLocalImages1297.2%
phpMyFAQ\Helper\AttachmentHelper::mapMimeTypeToIcon12100.0%
phpMyFAQ\Instance\Client::extractClientHostnameFromUrl12100.0%
phpMyFAQ\Instance\Database\Pgsql::createTables12100.0%
phpMyFAQ\Link::toHtmlAnchor12100.0%
phpMyFAQ\Queue\Handler\IndexFaqHandler::__invoke12100.0%
phpMyFAQ\Search::getMostPopularSearches12100.0%
phpMyFAQ\Setup\InstallationInputValidator::validateElasticsearchInput120.0%
phpMyFAQ\Setup\InstallationInputValidator::validateOpenSearchInput120.0%
phpMyFAQ\Setup\InstallationRunner::stepCreateDatabaseTables120.0%
phpMyFAQ\Setup\Installer::cleanFailedInstallationFiles120.0%
phpMyFAQ\Setup\Migration\AbstractMigration::varcharType120.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::execute120.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::up120.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::up120.0%
phpMyFAQ\Setup\Update::runPostMigrationTasks120.0%
phpMyFAQ\Setup\Update::insertFormInputs120.0%
phpMyFAQ\Setup\UpdateRunner::runDryRun120.0%
phpMyFAQ\Setup\UpdateRunner::taskUpdateCheck120.0%
phpMyFAQ\Setup\UpdateRunner::taskDownloadPackage120.0%
phpMyFAQ\Setup\UpdateRunner::taskInstallPackage120.0%
phpMyFAQ\Setup\UpdateRunner::taskUpdateDatabase120.0%
phpMyFAQ\Controller\Administration\Api\FaqController::import11.7881.4%
phpMyFAQ\Setup\HtaccessUpdater::addRewriteBase11.7735.3%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::issueToken11.7661.1%
phpMyFAQ\Ldap::connect11.5675.0%
phpMyFAQ\Attachment\File::get11.5322.2%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolveDatabaseFile11.4884.2%
phpMyFAQ\Controller\Administration\SystemInformationController::index11.4875.5%
phpMyFAQ\Setup\Migration\MigrationExecutor::executeMigration11.4269.0%
phpMyFAQ\Scheduler\TaskScheduler::optimizeSearchIndex11.3862.5%
phpMyFAQ\Search\Search\Elasticsearch::mapHits11.3286.2%
phpMyFAQ\Controller\Api\RegistrationController::create11.1589.2%
phpMyFAQ\Database\PdoSqlite::numRows11.1077.8%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::logSecurityConfigChanges11.0493.2%
phpMyFAQ\Category\CategoryRepository::findCategoriesPaginated11.0294.6%
phpMyFAQ\Auth\EntraId\JwksProvider::loadJwks11100.0%
phpMyFAQ\Category\CategoryRepository::findOrderedCategories1196.4%
phpMyFAQ\Chat::getConversationList1198.4%
phpMyFAQ\Command\SeedTestDataCommand::seedCategories1197.3%
phpMyFAQ\Ldap::getGroupMemberships1197.1%
phpMyFAQ\Mail::createBody1197.7%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::build11100.0%
phpMyFAQ\Translation\ContentTranslationService::translateFaq11100.0%
phpMyFAQ\Translation\ContentTranslationService::translateNews11100.0%
phpMyFAQ\User::createPassword11100.0%
phpMyFAQ\Instance\Search\Elasticsearch::getStemmingLanguage10.7525.0%
phpMyFAQ\Database\Sqlite3::queryPrepared10.6657.9%
phpMyFAQ\Controller\Administration\Api\UpdateController::extractPackage10.326.7%
phpMyFAQ\Controller\Administration\Api\UpdateController::createTemporaryBackup10.326.7%
phpMyFAQ\Setup\HtaccessUpdater::updateRewriteBase10.2985.7%
phpMyFAQ\Controller\Frontend\UserController::ucp10.2786.2%
phpMyFAQ\User\UserData::save10.2659.5%
phpMyFAQ\Setup\Migration\AbstractMigration::indexExists10.2340.6%
phpMyFAQ\Auth\AuthKeycloak::extractRoleNames10.2087.5%
phpMyFAQ\Bootstrapper::run10.2087.5%
phpMyFAQ\User::deleteUser10.2087.5%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::requestReset10.1887.9%
phpMyFAQ\Export\Pdf\Wrapper::getImageMimeType10.1688.2%
phpMyFAQ\Setup\Installation\SchemaInstaller::createTables10.1488.9%
phpMyFAQ\Link\Util\LinkQueryParser::parse10.1289.5%
phpMyFAQ\Controller\Administration\Api\PageController::activate10.1090.0%
phpMyFAQ\Auth\AuthDatabase::checkCredentials10.0691.7%
phpMyFAQ\Instance\Client::createClientTablesWithDatabase10.0691.4%
phpMyFAQ\Command\SeedTestDataCommand::seedFaqs10.0492.9%
phpMyFAQ\Tags::getAllTags10.0393.5%
phpMyFAQ\Controller\Administration\DashboardController::index10.0268.4%
phpMyFAQ\Controller\Frontend\AuthenticationController::authenticate10.0294.3%
phpMyFAQ\Administration\Backup::getBackupTableNames10100.0%
phpMyFAQ\Controller\Administration\PasswordChangeController::update1097.6%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::callback10100.0%
phpMyFAQ\Faq::getFaqsDataByIds1098.2%
phpMyFAQ\Search::searchDatabase1095.7%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromSession9.9577.3%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::statistics9.938.3%
phpMyFAQ\Instance\Setup::checkDirs9.8078.6%
phpMyFAQ\Controller\Administration\Api\UserController::deleteUser9.7961.5%
phpMyFAQ\Controller\Administration\Api\UserController::activate9.7370.0%
phpMyFAQ\Helper\StatisticsHelper::getTrackingFilesStatistics9.5181.5%
phpMyFAQ\Storage\StorageFactory::resolveFilesystemRoot9.4981.8%
phpMyFAQ\Api\Filtering\FilterRequest::parseBoolValue9.3663.6%
phpMyFAQ\Controller\Frontend\Api\ChatSseController::stream9.3583.8%
phpMyFAQ\Plugin\PluginDiscovery::readManifest9.2984.6%
phpMyFAQ\Instance\Search\Elasticsearch::bulkIndexCustomPages9.2086.5%
phpMyFAQ\Setup\UpdateToken::read9.1687.5%
phpMyFAQ\Administration\DashboardLayout::get9.1288.5%
phpMyFAQ\Storage\StorageFactory::createS3Storage9.1274.1%
phpMyFAQ\Administration\Faq::getAllFaqsByCategory9.0989.5%
phpMyFAQ\Faq::getAllFaqs9.0790.5%
phpMyFAQ\Controller\Frontend\CustomPageController::show9.0591.7%
phpMyFAQ\Category\Image::upload9.0392.9%
phpMyFAQ\Attachment\Filesystem\AbstractFile::deleteDir9.0293.8%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::doTranslate9.0293.3%
phpMyFAQ\Administration\Backup::isCompleteStatement9.0194.7%
phpMyFAQ\Administration\Category::loadCategories997.8%
phpMyFAQ\Auth\EntraId\OAuth::setToken9100.0%
phpMyFAQ\Bootstrapper::switchToTenantSchema9100.0%
phpMyFAQ\Category\Order::setCategoryTree996.2%
phpMyFAQ\Category\Relation::getNumberOfFaqsPerCategory9100.0%
phpMyFAQ\Container\ContainerCacheManager::getContainer9100.0%
phpMyFAQ\Controller\Administration\Api\ApiKeyController::create9100.0%
phpMyFAQ\Controller\Administration\Api\CommentController::delete995.7%
phpMyFAQ\Controller\Frontend\AbstractFrontController::getHeader9100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::logout9100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::check9100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::buildAuthContext9100.0%
phpMyFAQ\EventListener\ApiExceptionListener::onKernelException9100.0%
phpMyFAQ\EventListener\WebExceptionListener::onKernelException9100.0%
phpMyFAQ\Mail\Smtp::send9100.0%
phpMyFAQ\Routing\AttributeRouteLoader::matchesContext9100.0%
phpMyFAQ\Search\Database\Mysqli::search9100.0%
phpMyFAQ\Search\Database\PdoMysql::search9100.0%
phpMyFAQ\Session\Token::verifyToken9100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::getDescription9100.0%
phpMyFAQ\User::getAllUsers9100.0%
phpMyFAQ\Setup\AbstractSetup::checkPreUpgrade8.8376.5%
phpMyFAQ\Queue\Worker::decodeMessage8.8166.7%
phpMyFAQ\Faq\FaqDisplayService::getAttachmentList8.7433.3%
phpMyFAQ\Setup\Migration\AbstractMigration::createIndex8.7433.3%
phpMyFAQ\Controller\Api\BackupController::download8.4181.4%
phpMyFAQ\Attachment\File::delete8.3270.0%
phpMyFAQ\Setup\Migration\MigrationTracker::tableExists8.3060.0%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::fetchAll8.1686.4%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::read8.1586.7%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolve8.1250.0%
phpMyFAQ\Command\SeedTestDataCommand::execute8.1287.8%
phpMyFAQ\Bootstrap\SearchClientFactory::waitForHealthy8.1088.2%
phpMyFAQ\Controller\Api\SearchController::search8.0988.7%
phpMyFAQ\Controller\Frontend\Api\UserController::exportUserData8.0988.9%
phpMyFAQ\User\UserData::load8.0572.2%
phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter::transform8.0336.8%
phpMyFAQ\Search\SearchService::handleTagSearch8.0392.7%
phpMyFAQ\Helper\RegistrationHelper::isDomainAllowed8.0293.8%
phpMyFAQ\Helper\SvgSanitizer::isSafe8.0293.3%
phpMyFAQ\Administration\AdminLog::verifyChainIntegrity8.0194.3%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::warmFromRows8.0194.4%
phpMyFAQ\Helper\StatisticsHelper::getLastTrackingDate8.0194.1%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::getCategoryRestrictions8.0194.4%
phpMyFAQ\Translation::ensureLanguageLoaded8.0194.1%
phpMyFAQ\Administration\Report::getReportingData8100.0%
phpMyFAQ\Administration\Revision::get8100.0%
phpMyFAQ\Api\Filtering\FilterRequest::parseFilterValue8100.0%
phpMyFAQ\Auth\AuthLdap::create8100.0%
phpMyFAQ\Auth\AuthWebAuthn::prepareForLogin896.9%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::create896.4%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::validateClient8100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::fromArray8100.0%
phpMyFAQ\Category\CategoryRepository::findAllCategories8100.0%
phpMyFAQ\Category\CategoryRepository::findAllCategoryIds8100.0%
phpMyFAQ\Category\CategoryRepository::findMissingCategories8100.0%
phpMyFAQ\Category\Order::getOrderedFlatList8100.0%
phpMyFAQ\Category\Permission::getAll8100.0%
phpMyFAQ\Category\Relation::getCategoryWithFaqs8100.0%
phpMyFAQ\Controller\Administration\Api\InstanceController::delete8100.0%
phpMyFAQ\Controller\Administration\AuthenticationController::check896.6%
phpMyFAQ\Controller\Administration\CategoryController::edit8100.0%
phpMyFAQ\Controller\Administration\FaqController::edit898.9%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController::login896.6%
phpMyFAQ\Controller\Frontend\CategoryController::getSubCategoryContent8100.0%
phpMyFAQ\EventListener\ApiRateLimiterListener::onKernelRequest895.5%
phpMyFAQ\Export\Pdf::generateFile895.2%
phpMyFAQ\Filesystem\Filesystem::deleteDirectory8100.0%
phpMyFAQ\Form\FormsHelper::filterAndSortFormData895.8%
phpMyFAQ\Glossary\GlossaryHelper::extractMatchParts8100.0%
phpMyFAQ\Helper\LanguageHelper::renderLanguageOptions8100.0%
phpMyFAQ\Instance\Database\Mysqli::createTables8100.0%
phpMyFAQ\Instance\Database\PdoMysql::createTables8100.0%
phpMyFAQ\Kernel::registerEventListeners8100.0%
phpMyFAQ\Language::getLanguage8100.0%
phpMyFAQ\Link\Strategy\SearchStrategy::build8100.0%
phpMyFAQ\Mail\Provider\MailgunProvider::send8100.0%
phpMyFAQ\News\NewsRepository::getLatestPaginated8100.0%
phpMyFAQ\Notification::sendQuestionSuccessMail8100.0%
phpMyFAQ\Permission\BasicPermissionRepository::getAllRightsData8100.0%
phpMyFAQ\Search::searchCustomPages8100.0%
phpMyFAQ\Service\Gravatar::getImage8100.0%
phpMyFAQ\Tags::create8100.0%
phpMyFAQ\Translation\ContentTranslationService::translateCategory8100.0%
phpMyFAQ\ConfigurationMethodsTrait::get8100.0%
phpMyFAQ\Mail\Provider\SesProvider::getSesClient7.9137.5%
phpMyFAQ\Search\SearchFactory::resolveDatabaseType7.9062.5%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::isValidAudience7.7775.0%
phpMyFAQ\Permission\MediumPermission::hasPermissionForCategory7.6076.9%
phpMyFAQ\Controller\Administration\Api\DashboardController::saveLayout7.4653.8%
phpMyFAQ\Controller\Frontend\AbstractFrontController::handleStaticPageRedirect7.4653.8%
phpMyFAQ\Instance\Search\Elasticsearch::getSearchAnalyzer7.4640.0%
phpMyFAQ\Mail::addEmailTo7.3980.0%
phpMyFAQ\Administration\Category::getLevelOf7.3554.5%
phpMyFAQ\Controller\Administration\Api\DashboardController::resetLayout7.3554.5%
phpMyFAQ\Administration\Backup::createContentFolderBackup7.3481.0%
phpMyFAQ\Controller\Administration\Api\GroupController::deleteGroup7.3366.7%
phpMyFAQ\Instance\Client::quoteIdentifier7.3366.7%
phpMyFAQ\Language\LanguageDetector::initUserAgentLanguage7.3366.7%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::formatValue7.3366.7%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::execute7.3281.2%
phpMyFAQ\Controller\Administration\Api\DashboardController::getFreshCache7.2981.8%
phpMyFAQ\Instance\Search\Elasticsearch::bulkIndex7.2782.4%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::setCategoryRestrictions7.2582.8%
phpMyFAQ\Controller\Api\FaqController::list7.2383.3%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController::register7.1984.2%
phpMyFAQ\Controller\Frontend\SetupController::update7.1485.7%
phpMyFAQ\User\CurrentUser::updateSessionId7.1485.7%
phpMyFAQ\Storage\FilesystemStorage::putStream7.1286.7%
phpMyFAQ\Search\Search\OpenSearch::mapHits7.1087.5%
phpMyFAQ\Controller\Administration\Api\PageController::delete7.0689.5%
phpMyFAQ\Controller\Administration\Api\PageController::checkSlug7.0490.9%
phpMyFAQ\Controller\Administration\Api\QuestionController::delete7.0490.9%
phpMyFAQ\Controller\Api\FaqController::create7.0490.9%
phpMyFAQ\Helper\StatisticsHelper::getAllTrackingDates7.0490.9%
phpMyFAQ\Export\Pdf::generate7.0391.4%
phpMyFAQ\Administration\Backup::getLastBackupInfo7.0292.6%
phpMyFAQ\Category\Order::getParentId7.0292.9%
phpMyFAQ\Controller\Administration\GroupController::create7.0193.5%
phpMyFAQ\Instance\Client::getDatabaseCredentials7.0194.1%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::getAllCategoryRestrictions7.0194.4%
phpMyFAQ\Administration\Faq::updateRecordFlag7100.0%
phpMyFAQ\Administration\RecentUsers::getList7100.0%
phpMyFAQ\Api\Filtering\FilterRequest::fromRequest7100.0%
phpMyFAQ\Api\Response\ApiResponse::buildMetadata7100.0%
phpMyFAQ\Attachment\AbstractAttachment::mkVirtualHash7100.0%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver::computeAttachmentsPath7100.0%
phpMyFAQ\Bootstrap\PhpConfigurator::configureSession795.7%
phpMyFAQ\Captcha\BuiltinCaptcha::drawLines796.9%
phpMyFAQ\Captcha\BuiltinCaptcha::validateCaptchaCode7100.0%
phpMyFAQ\Category\Startpage::getCategories7100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::activate7100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::sticky7100.0%
phpMyFAQ\Controller\Frontend\Api\PushController::subscribe7100.0%
phpMyFAQ\Controller\Frontend\AttachmentController::index7100.0%
phpMyFAQ\Controller\Frontend\FaqController::add798.6%
phpMyFAQ\Controller\Frontend\QuestionsController::ask797.8%
phpMyFAQ\Controller\Frontend\SearchController::index795.3%
phpMyFAQ\Controller\Frontend\SitemapController::index7100.0%
phpMyFAQ\CustomPage\CustomPageRepository::insertTranslation7100.0%
phpMyFAQ\Export\Pdf\Wrapper::renderFooter7100.0%
phpMyFAQ\Faq::getFaqsDataByCategoryId798.9%
phpMyFAQ\Faq\FaqRepository::fetchRowBySolutionId7100.0%
phpMyFAQ\Faq\Permission::add7100.0%
phpMyFAQ\Faq\Permission::get7100.0%
phpMyFAQ\Instance\Database\PdoSqlsrv::createTables7100.0%
phpMyFAQ\Instance\Database\Sqlsrv::createTables7100.0%
phpMyFAQ\Ldap::getLdapDn7100.0%
phpMyFAQ\Link::getQuery7100.0%
phpMyFAQ\Mail::enqueueForDelivery7100.0%
phpMyFAQ\News\NewsRepository::getLatest7100.0%
phpMyFAQ\Notification::sendFaqCommentNotification798.1%
phpMyFAQ\Search\SearchResultSet::getScore7100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::execute796.9%
phpMyFAQ\Session\RedisSessionHandler::buildSocketTarget7100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::getAppliedMigrations7100.0%
phpMyFAQ\Setup\Upgrade::isPathSafe7100.0%
phpMyFAQ\StopWords::checkBannedWord7100.0%
phpMyFAQ\Translation::get7100.0%
phpMyFAQ\Translation::has7100.0%
phpMyFAQ\Translation\TranslationProviderFactory::create7100.0%
phpMyFAQ\User\PasswordResetTokenService::verify7100.0%
phpMyFAQ\ConfigurationMethodsTrait::update796.3%
phpMyFAQ\Controller\Frontend\SetupController::hasAdministratorSession6.9942.9%
phpMyFAQ\Routing\RouteCacheManager::getRoutes6.8471.4%
phpMyFAQ\Administration\AdminMenuBuilder::setUser6.7372.7%
phpMyFAQ\Captcha\BuiltinCaptcha::drawText6.6274.2%
phpMyFAQ\Database\PdoSqlite::query6.6060.0%
phpMyFAQ\Database\PdoSqlsrv::query6.6060.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::mapLanguageCode6.6060.0%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::mapLanguageCode6.6060.0%
phpMyFAQ\Auth\AuthKeycloak::getGroupMapping6.5675.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::audienceMatches6.5675.0%
phpMyFAQ\Permission\MediumPermission::hasPermission6.5675.0%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::insert6.5046.2%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::delete6.5046.2%
phpMyFAQ\Search\SearchService::handleFulltextSearch6.4676.7%
phpMyFAQ\Setup\Migration\Versions\Migration405::up6.4461.4%
phpMyFAQ\Controller\Administration\Api\GlossaryController::delete6.4346.7%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::up6.4061.7%
phpMyFAQ\Setup\Migration\AbstractMigration::createUniqueIndex6.2828.6%
phpMyFAQ\Controller\Frontend\Api\SetupController::backup6.2581.0%
phpMyFAQ\Category\Relation::getAggregatedFaqNumbers6.2481.2%
phpMyFAQ\Controller\Frontend\PdfController::index6.1882.8%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchValues6.1285.0%
phpMyFAQ\Controller\Frontend\WebAuthnController::login6.1285.2%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validateSignature6.1085.7%
phpMyFAQ\Instance\Client::createClientDatabase6.1085.7%
phpMyFAQ\Setup\Installer::checkBasicStuff6.0986.7%
phpMyFAQ\Sitemap::getFaqsFromLetter6.0886.8%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::doTranslateBatch6.0887.0%
phpMyFAQ\Setup\Upgrade::secureExtractZip6.0787.5%
phpMyFAQ\Filesystem\Filesystem::recursiveCopy6.0688.2%
phpMyFAQ\Search::search6.0588.9%
phpMyFAQ\Search\SearchDatabase::getConditions6.0588.9%
phpMyFAQ\Setup\UpdateRunner::formatValue6.0588.9%
phpMyFAQ\Bookmark::isFaqBookmark6.0490.0%
phpMyFAQ\Instance\Search\OpenSearch::bulkIndexCustomPages6.0390.6%
phpMyFAQ\Permission\MediumPermissionRepository::getAutoJoinGroups6.0390.9%
phpMyFAQ\Attachment\File::isStorageOk6.0292.3%
phpMyFAQ\Category\CategoryRepository::countByNameLangParent6.0292.3%
phpMyFAQ\Category\CategoryRepository::hasLinkToFaq6.0291.7%
phpMyFAQ\Instance\Client::insertRows6.0292.0%
phpMyFAQ\Administration\TranslationStatistics::getStatistics6.0193.1%
phpMyFAQ\Auth\ApiKeyAuthenticator::authenticate6.0194.7%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::expandTo6.0193.3%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::uploadTheme6.0193.3%
phpMyFAQ\Controller\Administration\AuthenticationController::logout6.0194.4%
phpMyFAQ\Helper\StatisticsHelper::getFirstTrackingDate6.0193.3%
phpMyFAQ\Link::toString6.0193.8%
phpMyFAQ\Queue\Transport\DatabaseTransport::reserve6.0194.3%
phpMyFAQ\Translation::registerPluginTranslations6.0193.3%
phpMyFAQ\Administration\Faq::getInactiveFaqsData6100.0%
phpMyFAQ\Administration\Faq::getOrphanedFaqs6100.0%
phpMyFAQ\Administration\Faq::sanitizePermissionIds60.0%
phpMyFAQ\Api\Sorting\SortRequest::fromRequest6100.0%
phpMyFAQ\Attachment\AttachmentFactory::fetchByRecordIdPaginated6100.0%
phpMyFAQ\Attachment\AttachmentService::checkGroupPermission6100.0%
phpMyFAQ\Auth\AuthKeycloak::create6100.0%
phpMyFAQ\Auth\AuthLdap::assignUserToGroups6100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::persistNewAccessToken6100.0%
phpMyFAQ\Bootstrapper::configureLdap6.0050.0%
phpMyFAQ\Cache\CacheFactory::createRedisAdapter60.0%
phpMyFAQ\Cache\CacheSettingsResolver::resolve6100.0%
phpMyFAQ\Captcha\GoogleRecaptcha::checkCaptchaCode6100.0%
phpMyFAQ\Category\CategoryRepository::findCategoriesFromFaq6100.0%
phpMyFAQ\Category\Navigation\BreadcrumbsHtmlRenderer::render6100.0%
phpMyFAQ\Category\Permission::add6100.0%
phpMyFAQ\Category\Permission::get6100.0%
phpMyFAQ\Category\Presentation\AdminCategoryTreePresenter::getSymbol60.0%
phpMyFAQ\Configuration\MultisiteConfigurationLocator::locateConfigurationDirectory6100.0%
phpMyFAQ\Configuration\MultisiteConfigurationLocator::extractTenantFromSubdomain6100.0%
phpMyFAQ\Controller\AbstractController::userHasGroupPermission6100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::getSecondLevelEntries6100.0%
phpMyFAQ\Controller\Api\FaqController::getById6100.0%
phpMyFAQ\Controller\Api\OpenQuestionController::list697.4%
phpMyFAQ\Controller\Api\PdfController::getById695.2%
phpMyFAQ\Controller\ContainerControllerResolver::getController6100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::check6100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::updateDatabase6100.0%
phpMyFAQ\Controller\Frontend\Api\UserController::removeTwofactorConfig6100.0%
phpMyFAQ\Controller\Frontend\FaqController::contentRedirect6100.0%
phpMyFAQ\Core\Error::errorHandler6100.0%
phpMyFAQ\CustomPage\CustomPageRepository::getAllPaginated695.7%
phpMyFAQ\CustomPage\CustomPageRepository::getAllLanguagesPaginated6100.0%
phpMyFAQ\CustomPage\CustomPageRepository::insert6100.0%
phpMyFAQ\CustomPage\CustomPageRepository::update6100.0%
phpMyFAQ\Database\Mysqli::error60.0%
phpMyFAQ\Database\Mysqli::affectedRows60.0%
phpMyFAQ\Database\Pgsql::affectedRows60.0%
phpMyFAQ\Environment::setupDebugMode6100.0%
phpMyFAQ\EventListener\RouterListener::onKernelRequest6100.0%
phpMyFAQ\Faq::getFaq6100.0%
phpMyFAQ\Faq\Statistics::getTopVotedData6100.0%
phpMyFAQ\Helper\CategoryHelper::buildCategoryList6100.0%
phpMyFAQ\Helper\QuestionHelper::getOpenQuestions6100.0%
phpMyFAQ\Instance\Client::copyBaseDataToSchema696.6%
phpMyFAQ\Instance\Database::createTenantDatabase6100.0%
phpMyFAQ\Kernel::boot60.0%
phpMyFAQ\Mail::sendPreparedEnvelope6100.0%
phpMyFAQ\Mail\Builtin::send6100.0%
phpMyFAQ\Mail\Provider\SendGridProvider::send6100.0%
phpMyFAQ\Permission\BasicPermission::checkRightData6100.0%
phpMyFAQ\Permission\MediumPermission::getUserRightsCount60.0%
phpMyFAQ\Permission\MediumPermissionRepository::getGroupRights6100.0%
phpMyFAQ\Permission\MediumPermissionRepository::getGroupMembers6100.0%
phpMyFAQ\Permission\MediumPermissionRepository::getUserGroups6100.0%
phpMyFAQ\Permission\MediumPermissionRepository::getAllGroups6100.0%
phpMyFAQ\Permission\MediumPermissionRepository::getUserGroupRights6100.0%
phpMyFAQ\Plugin\PluginManager::registerPluginStylesheets6100.0%
phpMyFAQ\Plugin\PluginManager::registerPluginScripts6100.0%
phpMyFAQ\Question\QuestionRepository::getAll6100.0%
phpMyFAQ\Routing\AttributeRouteLoader::getClassFromFile6100.0%
phpMyFAQ\Routing\RouteCollectionBuilder::getControllerDirectories6100.0%
phpMyFAQ\Search::resolveSearchDatabaseType6100.0%
phpMyFAQ\Search\Database\PdoPgsql::search6100.0%
phpMyFAQ\Search\Database\Pgsql::search6100.0%
phpMyFAQ\Search\Database\Pgsql::getMatchingColumns6100.0%
phpMyFAQ\Search\SearchDatabase::getMatchClause6100.0%
phpMyFAQ\Search\SearchService::getFormattedSearchResults60.0%
phpMyFAQ\Seo\SeoRepository::get6100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::seedConfig60.0%
phpMyFAQ\Setup\InstallationRunner::stepSeedConfiguration60.0%
phpMyFAQ\Setup\InstallationRunner::stepGrantPermissions60.0%
phpMyFAQ\Setup\InstallationRunner::stepInsertFormInputs60.0%
phpMyFAQ\Setup\InstallationRunner::stepAdjustHtaccess60.0%
phpMyFAQ\Setup\Installer::checkInitialRewriteBasePath60.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addSqlForDbType60.0%
phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory::createForType6100.0%
phpMyFAQ\Setup\Update::checkInitialRewriteBasePath60.0%
phpMyFAQ\Setup\Update::applyUpdates6.0050.0%
phpMyFAQ\Setup\UpdateRunner::taskExtractPackage60.0%
phpMyFAQ\Setup\UpdateRunner::taskCreateTemporaryBackup60.0%
phpMyFAQ\Sitemap::getAllFirstLetters6100.0%
phpMyFAQ\StopWords::clean6100.0%
phpMyFAQ\Storage\S3Storage::buildKey6100.0%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::doTranslate6100.0%
phpMyFAQ\Twig\TwigWrapper::__construct6100.0%
phpMyFAQ\User::mailUser60.0%
phpMyFAQ\User::getSuperAdminIds6100.0%
phpMyFAQ\User\Tracking::log6100.0%
phpMyFAQ\ConfigurationMethodsTrait::getServiceContainer60.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::resolveLogoutIdToken5.9366.7%
phpMyFAQ\Tenant\TenantQuotaEnforcer::extractFirstInt5.9366.7%
phpMyFAQ\Controller\Administration\Api\AttachmentController::delete5.7668.8%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::fetchJwks5.7369.2%
phpMyFAQ\Controller\Administration\Api\AttachmentController::refresh5.6870.0%
phpMyFAQ\Database\PdoPgsql::query5.6870.0%
phpMyFAQ\Controller\Administration\Api\PushController::generateVapidKeys5.5871.4%
phpMyFAQ\Pagination::renderPageNumbers5.5753.8%
phpMyFAQ\Setup\Upgrade::downloadPackage5.4673.7%
phpMyFAQ\Controller\Administration\Api\CategoryController::delete5.4474.1%
phpMyFAQ\Helper\StatisticsHelper::clearAllVisits5.4055.6%
phpMyFAQ\Category\Tree\TreePathResolver::getValidParentId5.3975.0%
phpMyFAQ\Setup\UpdateToken::create5.3975.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::renameKey5.3176.9%
phpMyFAQ\Administration\Report::convertEncoding5.2777.8%
phpMyFAQ\Database\Sqlite3::numRows5.2777.8%
phpMyFAQ\Setup\HtaccessUpdater::validateHtaccessStructure5.2777.8%
phpMyFAQ\Administration\FileDownloader::setHttpHeaders5.2378.9%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::authorize5.2157.7%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getInstalledRedisVersion5.2080.0%
phpMyFAQ\Database\PdoMysql::query5.2080.0%
phpMyFAQ\User\CurrentUser::sortAuthContainer5.2037.5%
phpMyFAQ\Helper\SvgSanitizer::sanitize5.1581.8%
phpMyFAQ\Tags::buildPermissionCheck5.1581.8%
phpMyFAQ\Attachment\Filesystem\AbstractFile::delete5.1283.3%
phpMyFAQ\Category::getLineCategory5.1283.3%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::getLineCategory5.1283.3%
phpMyFAQ\Setup\Migration\MigrationRegistry::getMigrations5.1283.3%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::warm5.0984.6%
phpMyFAQ\Api\Sorting\SortRequest::validateOrder5.0785.7%
phpMyFAQ\Controller\AbstractController::hasValidToken5.0785.7%
phpMyFAQ\Instance\Search\OpenSearch::bulkIndex5.0786.2%
phpMyFAQ\Kernel::handle5.0785.7%
phpMyFAQ\ConfigurationMethodsTrait::getTranslationProvider5.0785.7%
phpMyFAQ\User\UserData::fetchAll5.0686.7%
phpMyFAQ\Controller\Frontend\Api\BookmarkController::delete5.0587.5%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::doTranslateBatch5.0587.5%
phpMyFAQ\Controller\Administration\Api\TagController::search5.0388.9%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::synchronizeKeycloakSubject5.0388.9%
phpMyFAQ\Permission\BasicPermission::addRight5.0390.0%
phpMyFAQ\Search\Database\PdoPgsql::getMatchingOrder5.0390.0%
phpMyFAQ\Search\Rating\RatingRepository::getNumberOfVotings5.0390.0%
phpMyFAQ\Storage\FilesystemStorage::put5.0390.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::doTranslate5.0390.0%
phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::copyTo5.0290.9%
phpMyFAQ\Category\Tree\TreePathResolver::computeLevel5.0290.9%
phpMyFAQ\Command\SeedTestDataCommand::seedGlossary5.0290.9%
phpMyFAQ\Search\Database\Pgsql::getMatchingOrder5.0290.9%
phpMyFAQ\User::changePassword5.0290.9%
phpMyFAQ\Auth\EntraId\OAuth::getOAuthToken5.0192.6%
phpMyFAQ\Category::__construct5.0192.9%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::fetchAll5.0192.3%
phpMyFAQ\Controller\Administration\Api\QuestionController::toggle5.0193.8%
phpMyFAQ\Controller\Administration\Api\SessionController::export5.0191.7%
phpMyFAQ\Controller\Administration\Api\UpdateController::updateCheck5.0192.6%
phpMyFAQ\Controller\Frontend\Api\BookmarkController::create5.0193.8%
phpMyFAQ\Controller\Frontend\NewsController::index5.0192.2%
phpMyFAQ\Faq\FaqDisplayService::processAnswer5.0193.8%
phpMyFAQ\Instance\Search\Elasticsearch::putMapping5.0191.7%
phpMyFAQ\Permission\MediumPermission::getAllGroupsOptions5.0191.7%
phpMyFAQ\System::getAvailableTemplates5.0191.7%
phpMyFAQ\Template\ThemeManager::normalizeArchivePath5.0192.9%
phpMyFAQ\Administration\AdminLogRepository::getAll5100.0%
phpMyFAQ\Administration\Backup\BackupRepository::add5100.0%
phpMyFAQ\Administration\ReportRepository::fetchAllReportData5100.0%
phpMyFAQ\Administration\Session::getVisitsForDays5.0094.4%
phpMyFAQ\Attachment\AttachmentService::getUserRights5100.0%
phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::getChunk5100.0%
phpMyFAQ\Auth\AuthChain::authenticate5100.0%
phpMyFAQ\Auth\AuthKeycloak::checkCredentials5100.0%
phpMyFAQ\Auth\AuthSso::checkCredentials5100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::getNewToken5100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::persistNewAuthCode5100.0%
phpMyFAQ\Auth\OAuth2\Repository\ClientRepository::getClientEntity595.8%
phpMyFAQ\Auth\Oidc\OidcClient::buildLogoutUrl5100.0%
phpMyFAQ\Auth\Oidc\OidcClient::decodeJsonResponse5100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService::discover5100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::splitToken5100.0%
phpMyFAQ\Bookmark\BookmarkFormatter::format597.1%
phpMyFAQ\Category::expandTo5100.0%
phpMyFAQ\Category::collapseAll5100.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::collapseAll5100.0%
phpMyFAQ\Category\Order::getCategoryTree5100.0%
phpMyFAQ\Category\Order::getAllCategories5100.0%
phpMyFAQ\Command\McpServerCommand::showServerInfo596.3%
phpMyFAQ\Command\SeedTestDataCommand::seedNews595.8%
phpMyFAQ\Configuration\LdapSettings::buildServers5100.0%
phpMyFAQ\Controller\AbstractController::isSecured5100.0%
phpMyFAQ\Controller\AbstractController::userHasUserPermission5100.0%
phpMyFAQ\Controller\Administration\Api\AdminLogController::verify5100.0%
phpMyFAQ\Controller\Administration\Api\ApiKeyController::list5100.0%
phpMyFAQ\Controller\Administration\Api\ApiKeyController::delete5100.0%
phpMyFAQ\Controller\Administration\Api\PageController::indexCustomPage5100.0%
phpMyFAQ\Controller\Administration\Api\PageController::updateCustomPageIndex5100.0%
phpMyFAQ\Controller\Administration\Api\PageController::deleteCustomPageFromIndex5100.0%
phpMyFAQ\Controller\Administration\Api\UpdateController::downloadPackage5.0094.7%
phpMyFAQ\Controller\Administration\Api\UserController::list5100.0%
phpMyFAQ\Controller\Administration\Api\UserController::csvExport5100.0%
phpMyFAQ\Controller\Administration\AuthenticationController::login5100.0%
phpMyFAQ\Controller\Administration\OpenQuestionsController::index5100.0%
phpMyFAQ\Controller\Administration\UserController::list5100.0%
phpMyFAQ\Controller\Api\GlossaryController::list5100.0%
phpMyFAQ\Controller\Api\OAuth2Controller::token5100.0%
phpMyFAQ\Controller\Frontend\AbstractFrontController::getTopNavigation5100.0%
phpMyFAQ\Controller\Frontend\AbstractFrontController::getUserDropdown5100.0%
phpMyFAQ\Controller\Frontend\AbstractFrontController::getFooterNavigation5100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController::send5.0094.4%
phpMyFAQ\Controller\Frontend\Api\PushController::unsubscribe5100.0%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController::prepareLogin5100.0%
phpMyFAQ\Controller\Frontend\UserController::requestRemoval5100.0%
phpMyFAQ\CustomPage::mapRowToEntity5100.0%
phpMyFAQ\Database\Pgsql::numberPlaceholders5100.0%
phpMyFAQ\EventListener\LanguageListener::detectLanguage5100.0%
phpMyFAQ\EventListener\RouterListener::normalizePath5100.0%
phpMyFAQ\Export\Pdf\Wrapper::checkBase64Image5100.0%
phpMyFAQ\Export\Pdf\Wrapper::validateImageData5100.0%
phpMyFAQ\Faq::getAllAvailableFaqsByCategoryId5100.0%
phpMyFAQ\Faq\FaqDisplayService::getRenderedCategoryPath5100.0%
phpMyFAQ\Faq\FaqRepository::isActive5100.0%
phpMyFAQ\Faq\FaqRepository::update5100.0%
phpMyFAQ\Faq\Statistics::buildStatisticsQuery5100.0%
phpMyFAQ\Forms::updateInputFlags5100.0%
phpMyFAQ\Glossary::insertItemsIntoContent5100.0%
phpMyFAQ\Helper\CategoryHelper::buildCategoryNodes5100.0%
phpMyFAQ\Helper\LanguageHelper::getAvailableLanguages5100.0%
phpMyFAQ\Helper\SearchHelper::createAutoCompleteResult5100.0%
phpMyFAQ\Helper\SearchHelper::renderAdminSuggestionResult5100.0%
phpMyFAQ\Helper\SearchHelper::renderScore5100.0%
phpMyFAQ\Helper\SearchHelper::renderRelatedFaqs5100.0%
phpMyFAQ\Helper\SvgSanitizer::detectIssues5100.0%
phpMyFAQ\Instance::getConfig5100.0%
phpMyFAQ\Instance\Search\Elasticsearch::updateCustomPage5100.0%
phpMyFAQ\Instance\Setup::createDatabaseFile5100.0%
phpMyFAQ\Kernel::loadRoutes5100.0%
phpMyFAQ\Language::isLanguageAvailable5100.0%
phpMyFAQ\Link::toUri5100.0%
phpMyFAQ\Link\Strategy\FaqStrategy::build5100.0%
phpMyFAQ\Mail::createProvider5100.0%
phpMyFAQ\News\NewsRepository::getHeaders5100.0%
phpMyFAQ\News\NewsService::getCommentMessage5100.0%
phpMyFAQ\Notification::sendNewFaqAdded597.2%
phpMyFAQ\Permission\BasicPermission::hasPermission5100.0%
phpMyFAQ\Permission\BasicPermissionRepository::getUserRights5100.0%
phpMyFAQ\Permission\MediumPermissionRepository::changeGroup5100.0%
phpMyFAQ\Push\WebPushService::isEnabled5100.0%
phpMyFAQ\Queue\Worker::runOnce5100.0%
phpMyFAQ\Queue\Worker::run5100.0%
phpMyFAQ\Routing\AttributeRouteLoader::findControllerFiles5100.0%
phpMyFAQ\Scheduler\TaskScheduler::run5100.0%
phpMyFAQ\Search\Database\PdoPgsql::getMatchingColumnsAsResult5100.0%
phpMyFAQ\Search\Database\Pgsql::getMatchingColumnsAsResult5100.0%
phpMyFAQ\Seo::getMetaRobots5100.0%
phpMyFAQ\StopWords::getByLang5100.0%
phpMyFAQ\StopWords::getBannedWords5100.0%
phpMyFAQ\Storage\FilesystemStorage::normalizePathForUrl5100.0%
phpMyFAQ\System::isUpdateExemptRequest5100.0%
phpMyFAQ\Tags::getPopularTags5100.0%
phpMyFAQ\Translation::getConfigurationItems5100.0%
phpMyFAQ\Twig\TwigCacheResolver::resolve5100.0%
phpMyFAQ\User::searchUsers5100.0%
phpMyFAQ\User::getUserById5100.0%
phpMyFAQ\User\TrackingDataRedactor::redactQueryString5100.0%
phpMyFAQ\User\TwoFactor::validateToken5100.0%
phpMyFAQ\User\UserData::set5100.0%
phpMyFAQ\Controller\Administration\Api\AdminLogController::export4.9960.5%
phpMyFAQ\Setup\Migration\AbstractMigration::addColumn4.8462.5%
phpMyFAQ\Auth\AuthLdap::isValidLogin4.6842.9%
phpMyFAQ\Command\UpdateCommand::execute4.6842.9%
phpMyFAQ\Auth\ApiKeyAuthenticator::parseScopes4.5966.7%
phpMyFAQ\Category\Relation::aggregateRecursively4.5966.7%
phpMyFAQ\Controller\SitemapController::generateGzippedSitemap4.5966.7%
phpMyFAQ\Database\Mysqli::query4.5966.7%
phpMyFAQ\Database\PdoSqlite::queryPrepared4.5966.7%
phpMyFAQ\Database\Sqlite3::query4.5966.7%
phpMyFAQ\Controller\Administration\Api\ExportController::exportFile4.5068.4%
phpMyFAQ\Session\RedisSessionHandler::validateConnection4.5068.4%
phpMyFAQ\Command\SeedTestDataCommand::loadFixture4.4370.0%
phpMyFAQ\Controller\AbstractController::verifySessionCsrfToken4.4370.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::isAuthenticatedAdministrator4.4370.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationController::testRedisConnection4.4170.6%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::logout4.3771.4%
phpMyFAQ\Plugin\PluginManager::areDependenciesMet4.3771.4%
phpMyFAQ\Session\RedisSessionHandler::configure4.3771.4%
phpMyFAQ\Api\MetaService::buildThemeColors4.3147.4%
phpMyFAQ\Auth\AuthEntraId::create4.3116.7%
phpMyFAQ\Category\Relation::getCategories4.3073.3%
phpMyFAQ\Database\Sqlsrv::affectedRows4.2575.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::boolean4.2575.0%
phpMyFAQ\System::getSupportedSafeDatabases4.2575.0%
phpMyFAQ\Controller\Api\QuestionController::create4.2375.8%
phpMyFAQ\Controller\Administration\Api\GlossaryController::update4.2176.5%
phpMyFAQ\Controller\Frontend\WebAuthnController::prepareLogin4.2076.9%
phpMyFAQ\Api\ProblemDetails::toArray4.1678.6%
phpMyFAQ\Controller\AbstractController::initializeFromContainer4.1678.6%
phpMyFAQ\Auth::selectAuth4.1380.0%
phpMyFAQ\Category\Tree\CategoryValidator::isDirectChild4.1380.0%
phpMyFAQ\Permission\MediumPermission::getAllGroups4.1380.0%
phpMyFAQ\Permission\MediumPermission::addToGroup4.1380.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::up4.1380.0%
phpMyFAQ\Attachment\File::rawOut4.1250.0%
phpMyFAQ\User\CurrentUser::deleteFromSession4.1181.2%
phpMyFAQ\User\Tracking::handleSession4.1181.0%
phpMyFAQ\Controller\Administration\Api\StopWordController::delete4.1081.8%
phpMyFAQ\Database\Sqlsrv::query4.1081.8%
phpMyFAQ\Controller\Api\TagController::list4.0882.8%
phpMyFAQ\Attachment\AttachmentFactory::init4.0783.3%
phpMyFAQ\Auth\ApiKeyAuthenticator::isNotExpired4.0783.3%
phpMyFAQ\Export\Pdf\Wrapper::fetchExternalImage4.0783.3%
phpMyFAQ\Setup\EnvironmentConfigurator::adjustRewriteBaseHtaccess4.0783.3%
phpMyFAQ\Strings::init4.0783.3%
phpMyFAQ\Tenant\TenantContextResolver::readIntEnv4.0783.3%
phpMyFAQ\Controller\Frontend\SetupController::index4.0684.6%
phpMyFAQ\Instance\Client::createClientTablesWithSchema4.0684.6%
phpMyFAQ\Administration\AdminMenuBuilder::addMenuEntry4.0585.7%
phpMyFAQ\Auth\AuthDatabase::delete4.0585.7%
phpMyFAQ\Bootstrap\SearchClientFactory::configureElasticsearch4.0585.7%
phpMyFAQ\Controller\Administration\Api\TagController::update4.0585.7%
phpMyFAQ\Controller\Administration\Api\UpdateController::versions4.0520.0%
phpMyFAQ\Controller\Administration\CategoryController::hierarchy4.0585.0%
phpMyFAQ\Seo\SitemapXmlService::generateXml4.0520.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::executeMigrations4.0585.7%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta::rebuildTableWithoutColumns4.0585.7%
phpMyFAQ\Strings\AbstractString::isUTF84.0520.0%
phpMyFAQ\User\CurrentUser::getSessionInfo4.0585.7%
phpMyFAQ\Auth\AuthDatabase::update4.0486.7%
phpMyFAQ\Api\Filtering\FilterRequest::parseDateValue4.0387.5%
phpMyFAQ\Auth\AuthDatabase::create4.0387.5%
phpMyFAQ\Category\Tree\TreeBuilder::buildAdminCategoryTree4.0387.5%
phpMyFAQ\Controller\Administration\Api\NewsController::update4.0387.5%
phpMyFAQ\Setup\Migration\MigrationTracker::getLastAppliedVersion4.0387.5%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::decodeSegment4.0290.0%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver::loadConfigConstants4.0288.9%
phpMyFAQ\Category\Tree\TreeVisualizer::buildTree4.0288.9%
phpMyFAQ\Database\Sqlite3::fetchAll4.0288.9%
phpMyFAQ\Faq\FaqDisplayService::processQuestion4.0288.9%
phpMyFAQ\Instance\Client::moveClientFolder4.0290.0%
phpMyFAQ\Permission\MediumPermissionRepository::getGroupName4.0288.9%
phpMyFAQ\Queue\Transport\DatabaseTransport::decodeHeaders4.0288.9%
phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension::versionedPath4.0288.9%
phpMyFAQ\User::__construct4.0290.0%
phpMyFAQ\Administration\SessionRepository::countOnlineUsersFromFaqUser4.0190.9%
phpMyFAQ\Category\Tree\TreeBuilder::buildLinearTree4.0191.7%
phpMyFAQ\Category\Tree\TreePathResolver::getNodes4.0190.9%
phpMyFAQ\Comment\CommentsRepository::countByReferenceIdAndType4.0192.3%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::updateConfigValue4.0192.3%
phpMyFAQ\Controller\Administration\Api\SearchController::deleteTerm4.0190.9%
phpMyFAQ\Controller\Frontend\AbstractFrontController::initializeFromContainer4.0190.9%
phpMyFAQ\Controller\Frontend\Api\ChatController::markAsRead4.0192.3%
phpMyFAQ\Database\Pgsql::query4.0190.9%
phpMyFAQ\Permission\MediumPermissionRepository::getGroupData4.0191.7%
phpMyFAQ\Setup\InstallationInputValidator::validate4.0191.4%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::buildIndexStatements4.0192.9%
phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanStoreAttachment4.0192.9%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::doTranslateBatch4.0192.0%
phpMyFAQ\Administration\Backup\BackupRepository::findByFilename4100.0%
phpMyFAQ\Administration\Changelog::getByFaqId4100.0%
phpMyFAQ\Administration\Faq::setStickyFaqOrder4100.0%
phpMyFAQ\Administration\RemoteApiClient::getVerificationIssues4100.0%
phpMyFAQ\Administration\SessionRepository::countOnlineUsersFromSessions4100.0%
phpMyFAQ\Administration\SessionRepository::getTimeBySessionId4100.0%
phpMyFAQ\Administration\SessionRepository::getSessionsByDateRange4100.0%
phpMyFAQ\Administration\SessionRepository::getSessionTimestamps4100.0%
phpMyFAQ\Api\MetaService::toBool4100.0%
phpMyFAQ\Api\OAuthDiscoveryService::getMetaDiscovery4100.0%
phpMyFAQ\Api\OAuthDiscoveryService::isEnabled4100.0%
phpMyFAQ\Api\Pagination\PaginationRequest::fromRequest4100.0%
phpMyFAQ\Attachment\AbstractAttachment::getMeta4100.0%
phpMyFAQ\Attachment\AbstractAttachment::linkedRecords4100.0%
phpMyFAQ\Attachment\AttachmentFactory::create4100.0%
phpMyFAQ\Attachment\AttachmentFactory::fetchByRecordId4100.0%
phpMyFAQ\Attachment\AttachmentService::canDownloadAttachment4100.0%
phpMyFAQ\Attachment\Filename::compose4100.0%
phpMyFAQ\Auth\AuthEntraId::createOAuthChallenge4100.0%
phpMyFAQ\Auth\AuthHttp::checkCredentials4100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::setCookie4100.0%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::toBool4100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::isEnabled4100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::getScopeEntityByIdentifier4.0094.1%
phpMyFAQ\Auth\OAuth2\ResourceServer::isEnabled4100.0%
phpMyFAQ\Auth\Oidc\OidcClient::exchangeAuthorizationCode4100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::createPemFromJwk4.0094.4%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateVerifier4100.0%
phpMyFAQ\Auth\Oidc\OidcPkceGenerator::generateChallenge4100.0%
phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper::renderCaptcha496.7%
phpMyFAQ\Category\Image::delete4100.0%
phpMyFAQ\Category\Permission::delete4100.0%
phpMyFAQ\Category\Permission::isRestricted4100.0%
phpMyFAQ\Category\Relation::getCategoryFaqsMatrix4100.0%
phpMyFAQ\Chat::getBatchUserInfo4.0093.8%
phpMyFAQ\Comment\CommentsRepository::fetchPaginated4100.0%
phpMyFAQ\Comment\CommentsRepository::fetchAllWithCategories4100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::__construct495.2%
phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver::resolve4100.0%
phpMyFAQ\Controller\AbstractController::userHasAnyPermission4100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::getGravatarImage4100.0%
phpMyFAQ\Controller\Administration\Api\CategoryController::permissions4100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::getStaleCache4100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::saveOrderOfStickyFaqs4.0094.4%
phpMyFAQ\Controller\Administration\Api\NewsController::activate4.0094.7%
phpMyFAQ\Controller\Administration\Api\UpdateController::updateDatabase4100.0%
phpMyFAQ\Controller\Administration\BackupController::export4100.0%
phpMyFAQ\Controller\Administration\FormsController::translate4100.0%
phpMyFAQ\Controller\Api\AttachmentController::list4.0094.7%
phpMyFAQ\Controller\Api\FaqController::resolveRequestLanguage4100.0%
phpMyFAQ\Controller\Frontend\Api\AutoCompleteController::search4100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController::getMessages4100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::login4100.0%
phpMyFAQ\Controller\Frontend\CategoryController::buildParentNavigationLink4100.0%
phpMyFAQ\Controller\Frontend\ContactController::index4100.0%
phpMyFAQ\CustomPage\CustomPageRepository::getAll4100.0%
phpMyFAQ\Database::factory4100.0%
phpMyFAQ\Database\Mysqli::fetchAll4100.0%
phpMyFAQ\Database\Pgsql::fetchAll4100.0%
phpMyFAQ\Database\Pgsql::getTableStatus4100.0%
phpMyFAQ\EventListener\ControllerContainerListener::onKernelController4100.0%
phpMyFAQ\Export::create4100.0%
phpMyFAQ\Export\Pdf\Wrapper::__construct4100.0%
phpMyFAQ\Export\Pdf\Wrapper::isWithinRoot4100.0%
phpMyFAQ\Faq::create4100.0%
phpMyFAQ\Faq::getFaqBySolutionId4100.0%
phpMyFAQ\Faq::getKeywords4100.0%
phpMyFAQ\Faq::get4100.0%
phpMyFAQ\Faq::getStickyFaqsData4100.0%
phpMyFAQ\Faq\FaqRepository::getNextSolutionId4100.0%
phpMyFAQ\Faq\FaqRepository::fetchQuestion4100.0%
phpMyFAQ\Faq\FaqRepository::getFaqResult4100.0%
phpMyFAQ\Faq\FaqRepository::insert4100.0%
phpMyFAQ\Faq\Import::import497.7%
phpMyFAQ\Faq\QueryHelper::queryPermission4100.0%
phpMyFAQ\Faq\RecordVisibility::isWithinPublicationWindow4100.0%
phpMyFAQ\Faq\Statistics::getTopTen4100.0%
phpMyFAQ\Faq\Statistics::getLatestData4100.0%
phpMyFAQ\Faq\Statistics::getTrendingData4100.0%
phpMyFAQ\Faq\Statistics::getTopTenData4100.0%
phpMyFAQ\Filesystem\Filesystem::copy4100.0%
phpMyFAQ\Filter::filterInput4100.0%
phpMyFAQ\Filter::filterVar4100.0%
phpMyFAQ\Filter::filterEmail4100.0%
phpMyFAQ\Form\FormsServiceProvider::register4100.0%
phpMyFAQ\Helper\StatisticsHelper::renderDaySelector4100.0%
phpMyFAQ\Instance\Search\OpenSearch::putMapping4100.0%
phpMyFAQ\Instance\Search\OpenSearch::updateCustomPage4100.0%
phpMyFAQ\Language\LanguageDetector::selectLanguage4100.0%
phpMyFAQ\Ldap::bind4100.0%
phpMyFAQ\Link::hasScheme4100.0%
phpMyFAQ\Link\Strategy\ShowStrategy::build4100.0%
phpMyFAQ\Mail::validateEmail4100.0%
phpMyFAQ\Mail::wrapLines4100.0%
phpMyFAQ\Mail::getMUA4100.0%
phpMyFAQ\Mail::sendViaSmtpAgent4100.0%
phpMyFAQ\Mail\Provider\SesProvider::send4.0093.5%
phpMyFAQ\News::getAll4100.0%
phpMyFAQ\News::getLatestData4100.0%
phpMyFAQ\News::get4100.0%
phpMyFAQ\News\NewsRepository::getById4100.0%
phpMyFAQ\Notification::sendWebPushToUsers4100.0%
phpMyFAQ\Pagination::getCurrentPageFromUrl4100.0%
phpMyFAQ\Pagination::renderUrl4100.0%
phpMyFAQ\Permission::create4100.0%
phpMyFAQ\Permission\BasicPermissionRepository::getRightData4.0093.3%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::checkUserGroupRightForCategory4100.0%
phpMyFAQ\Plugin\PluginDiscovery::getClassMap4100.0%
phpMyFAQ\Plugin\PluginManager::registerPlugin4.0093.3%
phpMyFAQ\Push\PushSubscriptionRepository::save4100.0%
phpMyFAQ\Push\PushSubscriptionRepository::getByUserIds4100.0%
phpMyFAQ\Push\WebPushService::sendToUsers4100.0%
phpMyFAQ\Queue\MessageBusFactory::create4100.0%
phpMyFAQ\Routing\RouteCacheManager::clear4100.0%
phpMyFAQ\Scheduler\TaskScheduler::cleanupSessions4100.0%
phpMyFAQ\Search::searchOpenSearch4100.0%
phpMyFAQ\Search\SearchService::calculateRelatedTags4100.0%
phpMyFAQ\Search\SearchService::shouldRedirectToSolutionId4100.0%
phpMyFAQ\Seo\SitemapXmlService::collectUrls4100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::formatResultsAsJson4100.0%
phpMyFAQ\Service\McpServer\McpSdkRuntime::faqSearch4100.0%
phpMyFAQ\Setup\EnvironmentConfigurator::getServerPath4100.0%
phpMyFAQ\Setup\InstallationRunner::buildOpenSearchClientOptions4100.0%
phpMyFAQ\Setup\UpdateRunner::displayMigrationResults4100.0%
phpMyFAQ\Setup\UpdateToken::isValid4100.0%
phpMyFAQ\Storage\StorageFactory::create4100.0%
phpMyFAQ\System::getSystemUri4100.0%
phpMyFAQ\Tags::getAllTagsById4100.0%
phpMyFAQ\Tags::getFaqsByIntersectionTags4100.0%
phpMyFAQ\Tags::getFaqsByTagId4100.0%
phpMyFAQ\Template\ThemeManager::assertAllowedTwigTemplate4100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCountWithinLimit4100.0%
phpMyFAQ\Translation::setMultiByteLanguage4100.0%
phpMyFAQ\Twig\TwigWrapper::resolveTemplateSetName4100.0%
phpMyFAQ\User::getUserByCookie495.0%
phpMyFAQ\User::activateUser4100.0%
phpMyFAQ\User\UserData::delete4100.0%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUserGroupId4100.0%
phpMyFAQ\Api\Filtering\FilterRequest::parseDateTimeValue3.7157.1%
phpMyFAQ\Instance\Search\Elasticsearch::isAvailable3.6925.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::translateBatch3.6925.0%
phpMyFAQ\Administration\FileDownloader::send3.5860.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::delete3.5860.0%
phpMyFAQ\Faq::delete3.5860.0%
phpMyFAQ\System::checkDatabase3.5860.0%
phpMyFAQ\Search::autoComplete3.5161.5%
phpMyFAQ\Auth\AuthWebAuthn::idList3.3366.7%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::buildDiscoveryUrl3.3366.7%
phpMyFAQ\Category\Tree\CategoryValidator::isValidCategory3.3366.7%
phpMyFAQ\Database\PdoSqlsrv::connect3.3366.7%
phpMyFAQ\Database\Sqlite3::error3.3366.7%
phpMyFAQ\Database\Sqlsrv::clientVersion3.3366.7%
phpMyFAQ\Glossary::setTooltip3.3366.7%
phpMyFAQ\Language\Plurals::getPlural3.3366.7%
phpMyFAQ\Search\SearchFactory::instantiate3.3366.7%
phpMyFAQ\Setup\Migration\AbstractMigration::integerType3.3366.7%
phpMyFAQ\Setup\Migration\AbstractMigration::textType3.3366.7%
phpMyFAQ\Administration\RemoteApiClient::getVersions3.2171.4%
phpMyFAQ\Controller\Administration\Api\StatisticsController::clearVisits3.2171.4%
phpMyFAQ\Controller\Administration\Api\UpdateController::healthCheck3.1972.2%
phpMyFAQ\Database\Mysqli::close3.1933.3%
phpMyFAQ\Instance\Search\Elasticsearch::getMapping3.1933.3%
phpMyFAQ\Twig\TwigWrapper::loadTemplate3.1933.3%
phpMyFAQ\User\UserAuthentication::authenticateSso3.1933.3%
phpMyFAQ\Controller\Administration\Api\StatisticsController::truncateSessions3.1475.0%
phpMyFAQ\Controller\Administration\Api\TagController::delete3.1475.0%
phpMyFAQ\Database\PdoMysql::fetchRow3.1475.0%
phpMyFAQ\Database\PdoPgsql::fetchArray3.1475.0%
phpMyFAQ\Database\PdoPgsql::fetchRow3.1475.0%
phpMyFAQ\Database\PdoSqlite::fetchArray3.1475.0%
phpMyFAQ\Database\PdoSqlite::fetchRow3.1475.0%
phpMyFAQ\Database\PdoSqlite::fetchObject3.1475.0%
phpMyFAQ\Database\PdoSqlsrv::fetchArray3.1475.0%
phpMyFAQ\Database\PdoSqlsrv::fetchRow3.1475.0%
phpMyFAQ\Database\Sqlite3::fetchObject3.1475.0%
phpMyFAQ\Database\Sqlite3::fetchArray3.1475.0%
phpMyFAQ\Database\Sqlite3::fetchAssoc3.1475.0%
phpMyFAQ\Database\Sqlsrv::fetchArray3.1475.0%
phpMyFAQ\Database\Sqlsrv::numRows3.1475.0%
phpMyFAQ\Link::getSystemScheme3.1475.0%
phpMyFAQ\Plugin\PluginDiscovery::modificationTime3.1475.0%
phpMyFAQ\Database\Sqlsrv::lastInsertId3.1077.8%
phpMyFAQ\Setup\UpdateRunner::taskHealthCheck3.1077.8%
phpMyFAQ\Faq\FaqCreationService::prepareAddFaqData3.0978.3%
phpMyFAQ\Auth\AuthKeycloak::createUser3.0780.0%
phpMyFAQ\Auth\AuthKeycloak::createMediumPermission3.0780.0%
phpMyFAQ\Auth\AuthLdap::createMediumPermission3.0780.0%
phpMyFAQ\Auth\AuthSso::createLdapAuth3.0780.0%
phpMyFAQ\Auth\AuthSso::createUser3.0780.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Integer3.0780.0%
phpMyFAQ\Controller\Api\CategoryController::createCategoryPermission3.0780.0%
phpMyFAQ\Controller\Api\CategoryController::createOrder3.0780.0%
phpMyFAQ\Kernel::getContainer3.0780.0%
phpMyFAQ\Language\Plurals::getMsgTemplate3.0780.0%
phpMyFAQ\Storage\S3Storage::hasResultField3.0780.0%
phpMyFAQ\Storage\S3Storage::getResultField3.0780.0%
phpMyFAQ\System::checkRequiredExtensions3.0780.0%
phpMyFAQ\User::getStatus3.0780.0%
phpMyFAQ\User\UserSession::createNetwork3.0780.0%
phpMyFAQ\Controller\Api\LoginController::login3.0581.8%
phpMyFAQ\Attachment\File::getFile3.0483.3%
phpMyFAQ\Captcha\BuiltinCaptcha::generateCaptchaCode3.0483.3%
phpMyFAQ\Controller\Administration\Api\FormController::activateInput3.0483.3%
phpMyFAQ\Controller\Administration\Api\FormController::setInputAsRequired3.0483.3%
phpMyFAQ\Database\PdoMysql::getOne3.0483.3%
phpMyFAQ\Database\PdoPgsql::getOne3.0483.3%
phpMyFAQ\Database\PdoSqlite::getOne3.0483.3%
phpMyFAQ\Database\PdoSqlsrv::getOne3.0483.3%
phpMyFAQ\Forms::getTranslations3.0483.3%
phpMyFAQ\Instance\Client::deleteClientFolder3.0483.3%
phpMyFAQ\Permission\MediumPermission::deleteGroup3.0483.3%
phpMyFAQ\Plugin\PluginManager::getMissingDependencies3.0483.3%
phpMyFAQ\Setup\HtaccessUpdater::createBackup3.0483.3%
phpMyFAQ\Utils::highlightNoLinks3.0483.3%
phpMyFAQ\ConfigurationMethodsTrait::getAll3.0483.3%
phpMyFAQ\Category::getCategoryIdsFromFaq3.0385.7%
phpMyFAQ\Controller\Administration\Api\FormController::deleteTranslation3.0385.7%
phpMyFAQ\Controller\Administration\Api\StatisticsController::clearRatings3.0385.7%
phpMyFAQ\Database\PdoMysql::nextId3.0385.7%
phpMyFAQ\Database\PdoPgsql::nextId3.0385.7%
phpMyFAQ\Database\PdoSqlite::nextId3.0385.7%
phpMyFAQ\Database\PdoSqlsrv::nextId3.0385.7%
phpMyFAQ\Database\Pgsql::lastInsertId3.0385.7%
phpMyFAQ\Permission\MediumPermission::addGroup3.0385.7%
phpMyFAQ\Strings\StringBasic::getStringBasic3.0385.7%
phpMyFAQ\Category::getPath3.0287.5%
phpMyFAQ\Controller\Administration\Api\FormController::editTranslation3.0286.7%
phpMyFAQ\Controller\Administration\Api\FormController::addTranslation3.0286.7%
phpMyFAQ\Controller\Frontend\Api\QuestionController::isAddingQuestionsAllowed3.0287.5%
phpMyFAQ\Plugin\PluginDiscovery::writeManifest3.0287.5%
phpMyFAQ\Routing\RouteCollectionBuilder::loadAttributeRoutes3.0287.5%
phpMyFAQ\Service\McpServer\McpSdkRuntime::buildServer3.0287.0%
phpMyFAQ\Auth\EntraId\JwksProvider::writeCache3.0190.0%
phpMyFAQ\Controller\Administration\Api\FaqController::delete3.0188.2%
phpMyFAQ\Controller\Administration\Api\GlossaryController::create3.0191.7%
phpMyFAQ\Controller\Administration\Api\StatisticsController::truncateSearchTerms3.0190.0%
phpMyFAQ\Controller\Api\FaqController::getLatest3.0188.9%
phpMyFAQ\Controller\Api\FaqController::getTrending3.0188.9%
phpMyFAQ\Controller\Api\FaqController::update3.0190.0%
phpMyFAQ\Controller\Frontend\Api\BookmarkController::deleteAll3.0188.9%
phpMyFAQ\Database\Sqlsrv::nextId3.0188.9%
phpMyFAQ\Push\PushSubscriptionRepository::getByUserId3.0190.9%
phpMyFAQ\Push\PushSubscriptionRepository::getAll3.0190.9%
phpMyFAQ\Routing\AttributeRouteLoader::createRouteFromAttribute3.0188.9%
phpMyFAQ\User\PasswordResetTokenService::issue3.0188.9%
phpMyFAQ\Utils::isForbiddenElement3.0190.0%
phpMyFAQ\Visits\VisitsRepository::exists3.0190.9%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromCookie3.0190.9%
phpMyFAQ\Administration\AdminLogRepository::getLastHash3100.0%
phpMyFAQ\Administration\AdminMenuBuilder::renderMetaRobotsDropdown3100.0%
phpMyFAQ\Administration\AdminMenuBuilder::renderReleaseTypeOptions3100.0%
phpMyFAQ\Administration\Backup::generateBackupQueries3100.0%
phpMyFAQ\Administration\Backup::executeBackupQueries3100.0%
phpMyFAQ\Administration\Category::buildAdminCategoryTree3100.0%
phpMyFAQ\Administration\RatingStatistics::getAll3100.0%
phpMyFAQ\Administration\RatingStatistics::buildQuery3100.0%
phpMyFAQ\Administration\RemoteApiClient::isVerified3100.0%
phpMyFAQ\Administration\SessionRepository::countTotalSessions3100.0%
phpMyFAQ\Api\MetaService::extractThemeVariables3.0093.3%
phpMyFAQ\Api\Pagination\PaginationMetadata::__construct3100.0%
phpMyFAQ\Attachment\AbstractAttachment::saveMeta3100.0%
phpMyFAQ\Attachment\File::createSubDirs3100.0%
phpMyFAQ\Auth::getErrors3100.0%
phpMyFAQ\Auth\AuthKeycloak::getDisplayName3100.0%
phpMyFAQ\Auth\AuthKeycloak::redactIdentifier3100.0%
phpMyFAQ\Auth\AuthLdap::createUser3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::buildLeagueAuthorizationServer3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::parseInterval3100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::toPsr7Request3100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::isAccessTokenRevoked3100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::isAuthCodeRevoked3100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::isRefreshTokenRevoked3100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::toPsr7Request3100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Length3100.0%
phpMyFAQ\Auth\WebAuthn\PublicKeyConverter::publicKeyToPem3100.0%
phpMyFAQ\Bookmark::getBookmarkList3100.0%
phpMyFAQ\Bootstrapper::connectDatabase3100.0%
phpMyFAQ\Bootstrapper::fixProxyHeaders3100.0%
phpMyFAQ\Cache\CacheFactory::create3100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::saveCaptcha3.0092.0%
phpMyFAQ\Captcha\BuiltinCaptcha::checkCaptchaCode3100.0%
phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper::renderCaptcha3100.0%
phpMyFAQ\Category::getOrderedCategories3100.0%
phpMyFAQ\Category::getCategoriesPaginated3.0094.7%
phpMyFAQ\Category::getPathWithStartPage3.0092.3%
phpMyFAQ\Category::getMissingCategories3100.0%
phpMyFAQ\Category\CategoryPermissionContext::setGroups3100.0%
phpMyFAQ\Category\CategoryRepository::findByIdAndLanguage3100.0%
phpMyFAQ\Category\Language\CategoryLanguageService::getLanguagesToTranslate3100.0%
phpMyFAQ\Category\Language\CategoryLanguageService::getAllExistingTranslations3100.0%
phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildCategorySegments3100.0%
phpMyFAQ\Category\Relation::add395.8%
phpMyFAQ\Category\Relation::delete3100.0%
phpMyFAQ\Category\Tree\CategoryValidator::collectDirectChildren3100.0%
phpMyFAQ\Category\Tree\TreePathResolver::getChildNodes3100.0%
phpMyFAQ\Chat::sendMessage3100.0%
phpMyFAQ\Chat::getConversation3.0094.7%
phpMyFAQ\Chat::getNewMessages3100.0%
phpMyFAQ\Chat::searchUsers3100.0%
phpMyFAQ\Chat::getUserInfo3100.0%
phpMyFAQ\Command\InstallCommand::env3100.0%
phpMyFAQ\Command\McpServerCommand::execute3100.0%
phpMyFAQ\Comment\CommentsRepository::insert3100.0%
phpMyFAQ\Comment\CommentsRepository::isCommentAllowed3.0093.3%
phpMyFAQ\Comments::getAllComments3.0093.8%
phpMyFAQ\Configuration::__construct3100.0%
phpMyFAQ\Configuration\ConfigurationRepository::__construct3100.0%
phpMyFAQ\Configuration\LdapConfiguration::__construct3100.0%
phpMyFAQ\Configuration\LdapSettings::getLdapGroupConfig3100.0%
phpMyFAQ\Configuration\MailSettings::getNoReplyEmail3100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchValue3100.0%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::createIfEnabled3100.0%
phpMyFAQ\Controller\AbstractController::getTwigWrapper3100.0%
phpMyFAQ\Controller\AbstractController::userHasPermission3100.0%
phpMyFAQ\Controller\AbstractController::getRateLimiter3100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::getHeader397.9%
phpMyFAQ\Controller\Administration\Api\AdminLogController::delete3100.0%
phpMyFAQ\Controller\Administration\Api\CategoryController::updateOrder3100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationController::sendTestMail3100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::templates3100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::visits3100.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::import3100.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::healthcheck3100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::search395.2%
phpMyFAQ\Controller\Administration\Api\GroupController::listGroups3100.0%
phpMyFAQ\Controller\Administration\Api\GroupController::listMembers3.0092.3%
phpMyFAQ\Controller\Administration\Api\MarkdownController::renderMarkdown3100.0%
phpMyFAQ\Controller\Administration\Api\NewsController::create3.0092.3%
phpMyFAQ\Controller\Administration\Api\NewsController::delete3.0092.3%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::import3100.0%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::healthcheck3100.0%
phpMyFAQ\Controller\Administration\CategoryController::index3100.0%
phpMyFAQ\Controller\Administration\CommentsController::index3100.0%
phpMyFAQ\Controller\Administration\FaqController::add398.1%
phpMyFAQ\Controller\Administration\FaqController::addInCategory398.3%
phpMyFAQ\Controller\Administration\FaqController::answer398.4%
phpMyFAQ\Controller\Administration\PageController::translate3100.0%
phpMyFAQ\Controller\Administration\PageController::edit3100.0%
phpMyFAQ\Controller\Api\AbstractApiController::paginatedResponse3100.0%
phpMyFAQ\Controller\Api\CategoryController::createCategory3100.0%
phpMyFAQ\Controller\Api\CommentController::list396.9%
phpMyFAQ\Controller\Api\FaqController::getPopular3100.0%
phpMyFAQ\Controller\Api\FaqController::getSticky3100.0%
phpMyFAQ\Controller\Api\GroupController::list3100.0%
phpMyFAQ\Controller\Api\SearchController::popular3100.0%
phpMyFAQ\Controller\Frontend\Api\PopularSearchesController::popular3100.0%
phpMyFAQ\Controller\Frontend\Api\TranslationController::translations3100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::getCurrentUserService3100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::loadAzureConfiguration3100.0%
phpMyFAQ\Controller\Frontend\CategoryController::getCategoryImageUrl3100.0%
phpMyFAQ\Controller\Frontend\FaqController::solution3100.0%
phpMyFAQ\Controller\Frontend\FaqController::prepareCommentsData395.8%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::getCurrentUserService3100.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::createUser3100.0%
phpMyFAQ\Controller\Frontend\SetupController::install3100.0%
phpMyFAQ\Controller\Frontend\StartpageController::index3100.0%
phpMyFAQ\Core\Error::exceptionHandler3100.0%
phpMyFAQ\CustomPage\CustomPageRepository::countAll3100.0%
phpMyFAQ\CustomPage\CustomPageRepository::countAllLanguages3100.0%
phpMyFAQ\CustomPage\CustomPageRepository::getExistingLanguages3100.0%
phpMyFAQ\CustomPage\CustomPageRepository::slugExists3100.0%
phpMyFAQ\Database::getInstance3100.0%
phpMyFAQ\Database\Sqlite3::getTableStatus3100.0%
phpMyFAQ\Database\Sqlsrv::getTableStatus3100.0%
phpMyFAQ\Database\Sqlsrv::formatErrors3100.0%
phpMyFAQ\Date::createIsoDateFromUnixTimestamp3100.0%
phpMyFAQ\Encryption::getInstance3100.0%
phpMyFAQ\Environment::init3100.0%
phpMyFAQ\EventListener\LanguageListener::onKernelRequest3100.0%
phpMyFAQ\Export\Json::generate396.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::defineTcpdfConstants3100.0%
phpMyFAQ\Export\Pdf\Wrapper::renderHeader3100.0%
phpMyFAQ\Faq::getQuestion3100.0%
phpMyFAQ\Faq\FaqDisplayService::loadFaq3100.0%
phpMyFAQ\Faq\FaqRepository::fetchKeywords3100.0%
phpMyFAQ\Faq\FaqRepository::fetchFaqByIdAndCategoryId3100.0%
phpMyFAQ\Faq\FaqRepository::countRenderableFaqsByCategoryId3100.0%
phpMyFAQ\Faq\FaqRepository::fetchAllRows3100.0%
phpMyFAQ\Faq\Permission::delete3100.0%
phpMyFAQ\Faq\QueryHelper::queryPermissionExistsAny3100.0%
phpMyFAQ\Faq\QueryHelper::getCategoryIdWhereSequence3100.0%
phpMyFAQ\Faq\RecordVisibility::isVisible3100.0%
phpMyFAQ\Faq\Statistics::totalFaqs3100.0%
phpMyFAQ\Filesystem\Filesystem::__construct3100.0%
phpMyFAQ\Filter::getFilteredQueryString3100.0%
phpMyFAQ\Forms::addTranslation3.0093.3%
phpMyFAQ\Glossary\GlossaryRepository::fetchAll3100.0%
phpMyFAQ\Glossary\GlossaryRepository::fetch3100.0%
phpMyFAQ\Helper\FaqHelper::cleanUpContent3100.0%
phpMyFAQ\Helper\MailHelper::sendMailToNewUser3100.0%
phpMyFAQ\Helper\PermissionHelper::permOptions3100.0%
phpMyFAQ\Helper\StatisticsHelper::renderMonthSelector3.0092.3%
phpMyFAQ\Helper\SvgSanitizer::decodeAllEntities3100.0%
phpMyFAQ\Helper\SvgSanitizer::removeDangerousContent3100.0%
phpMyFAQ\Helper\UserHelper::getAllUsersForTemplate3100.0%
phpMyFAQ\Instance::delete3100.0%
phpMyFAQ\Instance\Client::createClientFolder3100.0%
phpMyFAQ\Instance\Client::collectSeedRows3100.0%
phpMyFAQ\Instance\Client::isValidClientHostname3100.0%
phpMyFAQ\Instance\Database\PdoSqlite::createTables3100.0%
phpMyFAQ\Instance\Database\Sqlite3::createTables3100.0%
phpMyFAQ\Instance\Database\Stopwords::executeInsertQueries3100.0%
phpMyFAQ\Instance\Search\Elasticsearch::indexCustomPage3100.0%
phpMyFAQ\Instance\Search\OpenSearch::indexCustomPage3100.0%
phpMyFAQ\Language\LanguageDetector::fetchFilteredLanguage3100.0%
phpMyFAQ\Language\LanguageDetector::getSessionLanguage3100.0%
phpMyFAQ\Link::__construct3100.0%
phpMyFAQ\Link::isInternalReference3100.0%
phpMyFAQ\Link::ensureDefaultStrategies3100.0%
phpMyFAQ\Link\Strategy\NewsStrategy::build3100.0%
phpMyFAQ\Link\Strategy\StrategyRegistry::__construct3100.0%
phpMyFAQ\Mail::__construct3100.0%
phpMyFAQ\Mail\Provider\MailgunProvider::parseRecipients3100.0%
phpMyFAQ\Mail\Provider\SendGridProvider::parseRecipients3100.0%
phpMyFAQ\Mail\Provider\SesProvider::parseRecipients3100.0%
phpMyFAQ\News\NewsRepository::countLatest3100.0%
phpMyFAQ\News\NewsRepository::insert3100.0%
phpMyFAQ\News\NewsRepository::update3100.0%
phpMyFAQ\News\NewsService::getProcessedNews3100.0%
phpMyFAQ\Pagination::addNavigationButtons3100.0%
phpMyFAQ\Permission\BasicPermissionRepository::getRightId3100.0%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::deleteCategoryRestrictions3100.0%
phpMyFAQ\Permission\MediumPermission::grantGroupRight3100.0%
phpMyFAQ\Permission\MediumPermission::checkGroupData3100.0%
phpMyFAQ\Permission\MediumPermission::autoJoin3100.0%
phpMyFAQ\Permission\MediumPermission::removeFromGroup3100.0%
phpMyFAQ\Permission\MediumPermission::findOrCreateGroupByName3100.0%
phpMyFAQ\Permission\MediumPermissionRepository::checkUserGroupRight3100.0%
phpMyFAQ\Permission\MediumPermissionRepository::grantGroupRight3100.0%
phpMyFAQ\Permission\MediumPermissionRepository::getGroupId3100.0%
phpMyFAQ\Permission\MediumPermissionRepository::addToGroup3100.0%
phpMyFAQ\Permission\MediumPermissionRepository::removeFromGroup3100.0%
phpMyFAQ\Plugin\PluginDiscovery::scan3100.0%
phpMyFAQ\Plugin\PluginDiscovery::computeSignature3100.0%
phpMyFAQ\Plugin\PluginDiscovery::getNamespaceFromFile3100.0%
phpMyFAQ\Push\PushSubscriptionRepository::mapRowToEntity3100.0%
phpMyFAQ\Push\WebPushService::sendToAll3100.0%
phpMyFAQ\Push\WebPushService::sendToUser3100.0%
phpMyFAQ\Question::getAll3100.0%
phpMyFAQ\Question\QuestionRepository::getById3100.0%
phpMyFAQ\Question\QuestionRepository::getVisibility3100.0%
phpMyFAQ\Queue\Message\ExportMessage::fromArray3100.0%
phpMyFAQ\Queue\Message\SendMailMessage::fromArray3100.0%
phpMyFAQ\Search\Database\PdoPgsql::getMatchingColumns3100.0%
phpMyFAQ\Search\Database\PdoSqlite::search3100.0%
phpMyFAQ\Search\Database\PdoSqlsrv::search3100.0%
phpMyFAQ\Search\Database\Sqlite3::search3100.0%
phpMyFAQ\Search\Database\Sqlsrv::search3100.0%
phpMyFAQ\Search\Rating\RatingRepository::fetchByRecordId3100.0%
phpMyFAQ\Search\SearchDatabase::getJoinedTable3100.0%
phpMyFAQ\Search\SearchFactory::create3100.0%
phpMyFAQ\Session\SessionWrapper::__construct3100.0%
phpMyFAQ\Session\Token::__unserialize3100.0%
phpMyFAQ\Session\Token::getSession3100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultConfig399.5%
phpMyFAQ\Setup\Migration\MigrationExecutor::generateDryRunReport3.0092.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::getPendingMigrations3100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::getUnappliedMigrations3100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::recordMigration3100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::execute3100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addBoolean3100.0%
phpMyFAQ\Setup\Migration\Versions\Migration407::up3100.0%
phpMyFAQ\Setup\UpdateRunner::run3.0093.3%
phpMyFAQ\Setup\UpdateRunner::shortenPath3100.0%
phpMyFAQ\Storage\FilesystemStorage::delete3100.0%
phpMyFAQ\Storage\FilesystemStorage::url3100.0%
phpMyFAQ\Storage\S3Storage::url3100.0%
phpMyFAQ\Storage\StorageFactory::readRequiredConfig3100.0%
phpMyFAQ\Strings\Mbstring::getInstance3100.0%
phpMyFAQ\Strings\Mbstring::substr3100.0%
phpMyFAQ\Strings\Mbstring::preg_replace_callback3100.0%
phpMyFAQ\Strings\Mbstring::preg_replace3100.0%
phpMyFAQ\Tags::getAllLinkTagsById3100.0%
phpMyFAQ\Tags::getTagNameById3100.0%
phpMyFAQ\Template\ThemeManager::assertArchiveIsReadable3100.0%
phpMyFAQ\Tenant\TenantContextResolver::resolve3100.0%
phpMyFAQ\Tenant\TenantContextResolver::readStringEnv3100.0%
phpMyFAQ\Translation\AbstractTranslationProvider::translate3100.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getApiUrl3100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::doTranslate3100.0%
phpMyFAQ\Twig\Extensions\PermissionTranslationTwigExtension::getPermissionTranslation3100.0%
phpMyFAQ\Twig\Extensions\TitleSlugifierTwigExtension::slugify3100.0%
phpMyFAQ\User::isValidLogin3100.0%
phpMyFAQ\User::getUserByLogin3100.0%
phpMyFAQ\User::getWebAuthnKeys3100.0%
phpMyFAQ\User\Tracking::countBots3100.0%
phpMyFAQ\User\Tracking::getRemoteAddress3100.0%
phpMyFAQ\User\Tracking::writeTrackingData397.2%
phpMyFAQ\User\Tracking::createNetwork3100.0%
phpMyFAQ\User\TrackingDataRedactor::redactUrl3100.0%
phpMyFAQ\User\UserAuthentication::hasExhaustedFailedLoginBudget3100.0%
phpMyFAQ\User\UserData::fetch3100.0%
phpMyFAQ\User\UserData::add3100.0%
phpMyFAQ\User\UserData::emailExists3100.0%
phpMyFAQ\User\UserSession::checkSessionId3100.0%
phpMyFAQ\User\UserSession::setCookie3100.0%
phpMyFAQ\Utils::isLikeOnPMFDate3100.0%
phpMyFAQ\Utils::makeShorterText3100.0%
phpMyFAQ\Utils::chopString3100.0%
phpMyFAQ\Utils::getHostFromUrl3100.0%
phpMyFAQ\Visits\VisitsRepository::getVisitCount3100.0%
phpMyFAQ\Visits\VisitsRepository::getAll3100.0%
phpMyFAQ\ConfigurationMethodsTrait::getDefaultLanguage3100.0%
phpMyFAQ\ConfigurationMethodsTrait::add3100.0%
phpMyFAQ\ConfigurationMethodsTrait::replaceMainReferenceUrl3100.0%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUser3100.0%
phpMyFAQ\Attachment\File::getStorage2.8640.0%
phpMyFAQ\Controller\Administration\LdapController::index2.7542.9%
phpMyFAQ\Attachment\File::usesCloudStorage2.5050.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::insert2.5050.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::defineIfMissing2.5050.0%
phpMyFAQ\Kernel::createContainerBuilder2.5050.0%
phpMyFAQ\Setup\Installer::startInstall2.3555.6%
phpMyFAQ\Environment::loadEnvironment2.2660.0%
phpMyFAQ\Glossary\GlossaryRepository::prepareItem2.2660.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::copyToSimple2.1566.7%
phpMyFAQ\Auth::encrypt2.1566.7%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::getCurrentTimestamp2.1566.7%
phpMyFAQ\Category::updateParentCategory2.1566.7%
phpMyFAQ\Database\Mysqli::numRows2.1566.7%
phpMyFAQ\Database\PdoMysql::connect2.1566.7%
phpMyFAQ\Database\PdoPgsql::connect2.1566.7%
phpMyFAQ\Database\Sqlsrv::connect2.1566.7%
phpMyFAQ\Instance\Search\Elasticsearch::getTokenizer2.1566.7%
phpMyFAQ\Instance\Search\Elasticsearch::getNumberOfShards2.1566.7%
phpMyFAQ\Instance\Search\Elasticsearch::getNumberOfReplicas2.1566.7%
phpMyFAQ\Instance\Search\Elasticsearch::unwrapResponse2.1566.7%
phpMyFAQ\Setup\Upgrade::getFilename2.1566.7%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::translateBatch2.1566.7%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::translateBatch2.1566.7%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::translateBatch2.1566.7%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::translateBatch2.1566.7%
phpMyFAQ\Visits::add2.1566.7%
phpMyFAQ\Tenant\TenantQuotaEnforcer::readAttachmentSizeBytes2.1170.0%
phpMyFAQ\Controller\AbstractController::createFallbackContainer2.0971.4%
phpMyFAQ\Administration\TranslationStatistics::extractLanguageCode2.0675.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::setCurrentSessionKey2.0675.0%
phpMyFAQ\Controller\AbstractController::getJsonObject2.0675.0%
phpMyFAQ\Controller\Frontend\SetupController::getRelativeTokenFilePath2.0675.0%
phpMyFAQ\Database\PdoMysql::fetchArray2.0675.0%
phpMyFAQ\Database\PdoMysql::fetchObject2.0675.0%
phpMyFAQ\Database\PdoPgsql::fetchObject2.0675.0%
phpMyFAQ\Database\PdoSqlsrv::fetchObject2.0675.0%
phpMyFAQ\Database\PdoSqlsrv::clientVersion2.0675.0%
phpMyFAQ\Database\Sqlsrv::fetchObject2.0675.0%
phpMyFAQ\Database\Sqlsrv::serverVersion2.0675.0%
phpMyFAQ\Helper\CategoryHelper::getCategoryTreeData2.0675.0%
phpMyFAQ\Instance\Client::setClientTemplateSet2.0675.0%
phpMyFAQ\Permission\BasicPermission::grantUserRight2.0675.0%
phpMyFAQ\Permission\BasicPermission::renameRight2.0675.0%
phpMyFAQ\Search\SearchDatabase::buildInClause2.0675.0%
phpMyFAQ\Setup\EnvironmentConfigurator::readHtaccess2.0675.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::truncateQuery2.0675.0%
phpMyFAQ\User::getUserIdByKeycloakSub2.0675.0%
phpMyFAQ\ConfigurationMethodsTrait::runtimeObject2.0675.0%
phpMyFAQ\Faq\FaqDisplayService::getRelatedFaqs2.0477.8%
phpMyFAQ\Attachment\File::buildFilePath2.0380.0%
phpMyFAQ\Container\ContainerCacheManager::writeCache2.0380.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::initializeFromContainer2.0380.0%
phpMyFAQ\Controller\Administration\Api\AbstractAdministrationApiController::initializeFromContainer2.0380.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::maskLogin2.0380.0%
phpMyFAQ\Database\Sqlite3::close2.0380.0%
phpMyFAQ\Database\Sqlsrv::error2.0380.0%
phpMyFAQ\Faq\MetaData::save2.0381.2%
phpMyFAQ\Setup\EnvironmentConfigurator::getRewriteBase2.0380.0%
phpMyFAQ\Administration\Faq::userCanEditFaq2.0283.3%
phpMyFAQ\Auth\EntraId\JwksProvider::__construct2.0283.3%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::base64UrlDecode2.0283.3%
phpMyFAQ\Category\CategoryRepository::create2.0281.8%
phpMyFAQ\Controller\Administration\Api\GroupController::groupData2.0283.3%
phpMyFAQ\Controller\Administration\Api\GroupController::listPermissions2.0283.3%
phpMyFAQ\Instance\Client::createClientTables2.0284.1%
phpMyFAQ\Administration\DashboardLayout::hasRow2.0188.9%
phpMyFAQ\Administration\TranslationStatistics::getTranslationKeys2.0185.7%
phpMyFAQ\Auth\ApiKeyAuthenticator::hasRequiredScopes2.0185.7%
phpMyFAQ\Auth\AuthDatabase::isValidLogin2.0187.5%
phpMyFAQ\Captcha\BuiltinCaptcha::removeCaptcha2.0187.5%
phpMyFAQ\Category::transform2.0188.9%
phpMyFAQ\Category\CategoryRepository::findCategoryIdByName2.0188.9%
phpMyFAQ\Controller\AbstractController::captchaCodeIsValid2.0185.7%
phpMyFAQ\Controller\Administration\ElasticsearchController::index2.0185.7%
phpMyFAQ\Controller\Administration\OpenSearchController::index2.0185.7%
phpMyFAQ\Controller\Frontend\CategoryController::getFaqRecords2.0187.5%
phpMyFAQ\Controller\Frontend\ErrorController::internalServerError2.0184.6%
phpMyFAQ\Storage\TenantScopedStorage::prefixPath2.0187.5%
phpMyFAQ\Administration\AdminLog::log2100.0%
phpMyFAQ\Administration\AdminLogRepository::add2100.0%
phpMyFAQ\Administration\AdminMenuBuilder::sortingKeyOptions2100.0%
phpMyFAQ\Administration\AdminMenuBuilder::sortingOrderOptions2100.0%
phpMyFAQ\Administration\AdminMenuBuilder::sortingPopularFaqsOptions2100.0%
phpMyFAQ\Administration\AdminMenuBuilder::generateOption2100.0%
phpMyFAQ\Administration\Backup::createBackup2100.0%
phpMyFAQ\Administration\Backup::verifyBackup2100.0%
phpMyFAQ\Administration\Backup\BackupRepository::getAll2100.0%
phpMyFAQ\Administration\Backup\BackupRepository::deleteById2100.0%
phpMyFAQ\Administration\Backup\BackupRepository::deleteByFilename2100.0%
phpMyFAQ\Administration\Category::getOwner2100.0%
phpMyFAQ\Administration\DashboardLayout::save2100.0%
phpMyFAQ\Administration\Faq::getContentHealthStatistics20.0%
phpMyFAQ\Administration\Faq::buildGroupAwareFaqAccessQuery20.0%
phpMyFAQ\Administration\Report::sanitize2100.0%
phpMyFAQ\Administration\Session::getSessionsByDate2100.0%
phpMyFAQ\Administration\TranslationStatistics::getMissingKeys2100.0%
phpMyFAQ\Api\Filtering\FilterRequest::toArray2100.0%
phpMyFAQ\Api\Response\ApiResponse::success2100.0%
phpMyFAQ\Api\Response\ApiResponse::error2100.0%
phpMyFAQ\Api\Sorting\SortRequest::toSqlOrderBy2100.0%
phpMyFAQ\Api\Sorting\SortRequest::toArray2100.0%
phpMyFAQ\Attachment\AbstractAttachment::__construct2100.0%
phpMyFAQ\Attachment\AbstractMimeType::guessByExt2100.0%
phpMyFAQ\Attachment\AttachmentCollection::getBreadcrumbs2100.0%
phpMyFAQ\Attachment\AttachmentFactory::countByRecordId2100.0%
phpMyFAQ\Attachment\AttachmentService::checkUserPermission2100.0%
phpMyFAQ\Attachment\AttachmentService::getGenericErrorMessage2100.0%
phpMyFAQ\Attachment\File::buildStoragePath2100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::moveTo2100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::__construct2100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::__destruct2100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::setMode2100.0%
phpMyFAQ\Attachment\Filesystem\File\VanillaFile::getChunk2100.0%
phpMyFAQ\Auth::addError20.0%
phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedUserId2100.0%
phpMyFAQ\Auth\AuthEntraId::isValidLogin2100.0%
phpMyFAQ\Auth\AuthHttp::isValidLogin2100.0%
phpMyFAQ\Auth\AuthKeycloak::isValidLogin2100.0%
phpMyFAQ\Auth\AuthKeycloak::findUser2100.0%
phpMyFAQ\Auth\AuthKeycloak::shouldAssignGroups2100.0%
phpMyFAQ\Auth\AuthKeycloak::shouldSynchronizeGroupsOnLogin2100.0%
phpMyFAQ\Auth\AuthLdap::__construct2100.0%
phpMyFAQ\Auth\AuthLdap::extractGroupNameFromDn2100.0%
phpMyFAQ\Auth\AuthLdap::connect2100.0%
phpMyFAQ\Auth\AuthSso::create2100.0%
phpMyFAQ\Auth\AuthSso::isValidLogin2100.0%
phpMyFAQ\Auth\AuthWebAuthn::prepareChallengeForRegistration2100.0%
phpMyFAQ\Auth\AuthWebAuthn::getUserFromSession2100.0%
phpMyFAQ\Auth\AuthWebAuthn::decodeSignedClientData2100.0%
phpMyFAQ\Auth\AuthWebAuthn::byteString2100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::getCurrentSessionKey2100.0%
phpMyFAQ\Auth\EntraId\OAuth::setJwksProvider20.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::getConfigString2100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::supportsGrantType2100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::persistNewRefreshToken2100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::getConfigString2100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::validate2100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::normalizeKey2100.0%
phpMyFAQ\Auth\PasswordHasher::verify2100.0%
phpMyFAQ\Auth\PasswordHasher::needsRehash2100.0%
phpMyFAQ\Bookmark::add2100.0%
phpMyFAQ\Bookmark::getAll2100.0%
phpMyFAQ\Bookmark::remove2100.0%
phpMyFAQ\Bookmark::removeAll2100.0%
phpMyFAQ\Bookmark\BookmarkRepository::add2100.0%
phpMyFAQ\Bookmark\BookmarkRepository::getAll2100.0%
phpMyFAQ\Bookmark\BookmarkRepository::remove2100.0%
phpMyFAQ\Bootstrap\ConfigDirectoryResolver::resolveAttachmentsDir2100.0%
phpMyFAQ\Bootstrap\PhpConfigurator::fixIncludePath2100.0%
phpMyFAQ\Cache\CacheSettingsResolver::normalizeRedisPrefix2100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::getCaptchaImage2100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::createBackground2100.0%
phpMyFAQ\Captcha\Captcha::getInstance2100.0%
phpMyFAQ\Captcha\Helper\CaptchaHelper::getInstance2100.0%
phpMyFAQ\Category::getCategoryRepository2100.0%
phpMyFAQ\Category::getTreeBuilder2100.0%
phpMyFAQ\Category::getBreadcrumbsBuilder2100.0%
phpMyFAQ\Category::getBreadcrumbsHtmlRenderer2100.0%
phpMyFAQ\Category::getAdminCategoryTreePresenter2100.0%
phpMyFAQ\Category::getCategoryService2100.0%
phpMyFAQ\Category::getTreeFacade2100.0%
phpMyFAQ\Category::setGroups2100.0%
phpMyFAQ\Category::getAllCategories2100.0%
phpMyFAQ\Category::countCategories20.0%
phpMyFAQ\Category::getCategoryData2100.0%
phpMyFAQ\Category::getCategoriesFromFaq2100.0%
phpMyFAQ\Category::getCategoryLanguagesTranslated20.0%
phpMyFAQ\Category\CategoryCache::updateTreeTabEntry2100.0%
phpMyFAQ\Category\CategoryPermissionContext::getOwner2100.0%
phpMyFAQ\Category\CategoryService::updateParentCategory2100.0%
phpMyFAQ\Category\Image::setUploadedFile2100.0%
phpMyFAQ\Category\Image::getFileName2100.0%
phpMyFAQ\Category\Language\CategoryLanguageService::getExistingTranslations2100.0%
phpMyFAQ\Category\Language\CategoryLanguageService::getLanguagesInUse2100.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::expand2100.0%
phpMyFAQ\Category\Permission::normalizeCategoryIds2100.0%
phpMyFAQ\Category\Permission\CategoryPermissionService::buildPermissionWhereClause2100.0%
phpMyFAQ\Category\Relation::normalizeIdList2100.0%
phpMyFAQ\Category\Relation::deleteByFAQ2100.0%
phpMyFAQ\Category\Tree\TreeBuilder::getBrothers20.0%
phpMyFAQ\Category\Tree\TreePathResolver::getChildren2100.0%
phpMyFAQ\Chat::markAsRead2100.0%
phpMyFAQ\Chat::markConversationAsRead2100.0%
phpMyFAQ\Chat::getUnreadCount2100.0%
phpMyFAQ\Chat::messagesToArray2100.0%
phpMyFAQ\Comment\CommentsRepository::fetchByReferenceIdAndType2100.0%
phpMyFAQ\Comment\CommentsRepository::countByTypeGroupedByRecordId2100.0%
phpMyFAQ\Comment\CommentsRepository::countByCategoryForFaq2100.0%
phpMyFAQ\Comments::getCommentsData2100.0%
phpMyFAQ\Comments::getCommentsDataPaginated2100.0%
phpMyFAQ\Comments::getNumberOfComments2100.0%
phpMyFAQ\Comments::getNumberOfCommentsByCategory2100.0%
phpMyFAQ\Comments::isCommentAllowed20.0%
phpMyFAQ\Configuration\ConfigurationRepository::getFaqDataContents2100.0%
phpMyFAQ\Configuration\MailSettings::getProvider2100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::fetchAll2100.0%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::resolveRedisStore2100.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::updateConfigValue2100.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getRedisClient2100.0%
phpMyFAQ\Configuration\UrlSettings::getDefaultUrl2100.0%
phpMyFAQ\Configuration\UrlSettings::getAllowedMediaHosts2100.0%
phpMyFAQ\Container\ContainerCacheManager::__construct2100.0%
phpMyFAQ\Container\ContainerRegistry::set20.0%
phpMyFAQ\Container\ContainerRegistry::get20.0%
phpMyFAQ\Container\ContainerRegistry::reset20.0%
phpMyFAQ\Controller\AbstractController::renderView20.0%
phpMyFAQ\Controller\AbstractController::userIsAuthenticated2100.0%
phpMyFAQ\Controller\AbstractController::userIsSuperAdmin2100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationController::activateMaintenanceMode2100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::list2.0092.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::translations2.0092.9%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::cacheAdapter20.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::storeCache20.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::topTen2100.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::create2100.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::drop2100.0%
phpMyFAQ\Controller\Administration\Api\ExportController::hasDataField2100.0%
phpMyFAQ\Controller\Administration\Api\GroupController::listUsers2100.0%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::create2100.0%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::drop2100.0%
phpMyFAQ\Controller\Administration\Api\StopWordController::list2100.0%
phpMyFAQ\Controller\Administration\Api\UpdateController::cleanUp2100.0%
phpMyFAQ\Controller\Administration\Api\UpdateController::isValidUpdatePackageToken2100.0%
phpMyFAQ\Controller\Administration\Api\UserController::userData2100.0%
phpMyFAQ\Controller\Administration\AttachmentsController::index2100.0%
phpMyFAQ\Controller\Administration\AuthenticationController::token2100.0%
phpMyFAQ\Controller\Administration\CategoryController::addChild2100.0%
phpMyFAQ\Controller\Administration\CategoryController::getBaseTemplateVars2100.0%
phpMyFAQ\Controller\Administration\FaqController::copy298.1%
phpMyFAQ\Controller\Administration\FaqController::translate298.1%
phpMyFAQ\Controller\Administration\InstanceController::getBaseTemplateVars2100.0%
phpMyFAQ\Controller\Administration\NewsController::edit2100.0%
phpMyFAQ\Controller\Administration\RatingController::index2100.0%
phpMyFAQ\Controller\Administration\StatisticsSearchController::index2100.0%
phpMyFAQ\Controller\Administration\StatisticsSessionsController::index2100.0%
phpMyFAQ\Controller\Administration\StatisticsSessionsController::viewDay2100.0%
phpMyFAQ\Controller\Administration\StatisticsSessionsController::viewSession2100.0%
phpMyFAQ\Controller\Administration\StickyFaqsController::index2100.0%
phpMyFAQ\Controller\Api\AbstractApiController::initializeFromContainer2100.0%
phpMyFAQ\Controller\Api\BackupController::__construct2100.0%
phpMyFAQ\Controller\Api\FaqController::getByCategoryId2100.0%
phpMyFAQ\Controller\Api\FaqController::getByTagId2100.0%
phpMyFAQ\Controller\Api\FaqController::withRequestLanguage2100.0%
phpMyFAQ\Controller\Api\LanguageController::__construct2100.0%
phpMyFAQ\Controller\Api\LoginController::__construct2100.0%
phpMyFAQ\Controller\Api\MetaController::__construct2100.0%
phpMyFAQ\Controller\Api\OAuth2Controller::getAuthorizationServer2100.0%
phpMyFAQ\Controller\Api\PdfController::__construct2100.0%
phpMyFAQ\Controller\Api\RegistrationController::__construct2100.0%
phpMyFAQ\Controller\Api\TitleController::__construct2100.0%
phpMyFAQ\Controller\Api\VersionController::__construct2100.0%
phpMyFAQ\Controller\Frontend\Api\CaptchaController::renderImage2100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController::searchUsers2100.0%
phpMyFAQ\Controller\Frontend\Api\CommentController::isCommentAllowed2100.0%
phpMyFAQ\Controller\Frontend\Api\FaqController::isAddingFaqsAllowed2100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::denyUnauthorizedRequest2100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::isAuthorizedForUpdate2100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::tooManyRequests20.0%
phpMyFAQ\Controller\Frontend\AttachmentController::createDownloadResponse2100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::token2100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::authorize2100.0%
phpMyFAQ\Controller\Frontend\CategoryController::renderAllCategories2100.0%
phpMyFAQ\Controller\Frontend\ChatController::index2100.0%
phpMyFAQ\Controller\Frontend\GlossaryController::index2100.0%
phpMyFAQ\Controller\Frontend\NewsController::prepareCommentsData2100.0%
phpMyFAQ\Controller\Frontend\OAuthDiscoveryController::index2100.0%
phpMyFAQ\Controller\Frontend\QuestionsController::index2100.0%
phpMyFAQ\Controller\Frontend\UserController::bookmarks2100.0%
phpMyFAQ\Controller\Frontend\UserController::register2100.0%
phpMyFAQ\Controller\SitemapController::index2100.0%
phpMyFAQ\CustomPage::getAllPages2100.0%
phpMyFAQ\CustomPage::getPagesPaginated2100.0%
phpMyFAQ\CustomPage::getAllLanguagesPaginated2100.0%
phpMyFAQ\CustomPage::getById2100.0%
phpMyFAQ\CustomPage::getBySlug2100.0%
phpMyFAQ\CustomPage::update2100.0%
phpMyFAQ\CustomPage::generateUniqueSlug2100.0%
phpMyFAQ\CustomPage\CustomPageRepository::getById2100.0%
phpMyFAQ\CustomPage\CustomPageRepository::getBySlug2100.0%
phpMyFAQ\CustomPage\CustomPageRepository::activate2100.0%
phpMyFAQ\Database::errorPage2100.0%
phpMyFAQ\Database\DatabaseHelper::alignTablePrefixByPattern2100.0%
phpMyFAQ\Database\Mysqli::fetchArray2100.0%
phpMyFAQ\Database\Mysqli::fetchRow2100.0%
phpMyFAQ\Database\Mysqli::fetchObject2100.0%
phpMyFAQ\Database\Mysqli::getTableStatus2100.0%
phpMyFAQ\Database\Mysqli::getOne2100.0%
phpMyFAQ\Database\Mysqli::nextId2100.0%
phpMyFAQ\Database\Mysqli::clientVersion20.0%
phpMyFAQ\Database\Mysqli::serverVersion20.0%
phpMyFAQ\Database\Mysqli::lastInsertId20.0%
phpMyFAQ\Database\Mysqli::now20.0%
phpMyFAQ\Database\PdoMysql::fetchAll2100.0%
phpMyFAQ\Database\PdoMysql::numRows2100.0%
phpMyFAQ\Database\PdoMysql::getTableStatus2100.0%
phpMyFAQ\Database\PdoPgsql::fetchAll2100.0%
phpMyFAQ\Database\PdoPgsql::numRows2100.0%
phpMyFAQ\Database\PdoPgsql::getTableStatus2100.0%
phpMyFAQ\Database\PdoSqlite::connect2100.0%
phpMyFAQ\Database\PdoSqlite::fetchAll2100.0%
phpMyFAQ\Database\PdoSqlite::getTableStatus2100.0%
phpMyFAQ\Database\PdoSqlsrv::error20.0%
phpMyFAQ\Database\PdoSqlsrv::escape20.0%
phpMyFAQ\Database\PdoSqlsrv::fetchAll2100.0%
phpMyFAQ\Database\PdoSqlsrv::numRows2100.0%
phpMyFAQ\Database\PdoSqlsrv::getTableStatus2100.0%
phpMyFAQ\Database\Pgsql::fetchArray2100.0%
phpMyFAQ\Database\Pgsql::getOne2100.0%
phpMyFAQ\Database\Sqlite3::fetchRow2100.0%
phpMyFAQ\Database\Sqlsrv::close2100.0%
phpMyFAQ\Date::createIsoDate2100.0%
phpMyFAQ\Date::getTrackingFileDateStart2100.0%
phpMyFAQ\Date::getTrackingFileDateEnd2100.0%
phpMyFAQ\Date::format2100.0%
phpMyFAQ\Encryption::encrypt20.0%
phpMyFAQ\Encryption::error2100.0%
phpMyFAQ\Entity\AdminLog::verifyIntegrity2100.0%
phpMyFAQ\Entity\Comment::jsonSerialize20.0%
phpMyFAQ\Entity\FaqEntity::getValidFrom2100.0%
phpMyFAQ\Entity\FaqEntity::getValidTo2100.0%
phpMyFAQ\Entity\FaqEntity::getCreatedDate2100.0%
phpMyFAQ\Entity\FaqEntity::getJson2100.0%
phpMyFAQ\EventListener\ControllerContainerListener::requiresAdminAuthentication2100.0%
phpMyFAQ\EventListener\WebExceptionListener::handleErrorResponse2100.0%
phpMyFAQ\Export::getExportTimestamp2100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::Header2100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::Footer2100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setTitle20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setAuthor20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setCreator20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setHeaderMargin20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFooterMargin20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFontSubsetting20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setImageScale20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setDefaultMonospacedFont20.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::write20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetMargins20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetHeaderMargin20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetFooterMargin20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetCreator20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetTitle20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetAuthor20.0%
phpMyFAQ\Export\Pdf\Wrapper::SetFont20.0%
phpMyFAQ\Export\Pdf\Wrapper::Ln20.0%
phpMyFAQ\Export\Pdf\Wrapper::Write20.0%
phpMyFAQ\Export\Pdf\Wrapper::concatenatePaths2100.0%
phpMyFAQ\Faq::__construct2100.0%
phpMyFAQ\Faq::getFaqsByIds2100.0%
phpMyFAQ\Faq::isFaqAccessibleForUser2100.0%
phpMyFAQ\Faq::getCurrentLanguage2100.0%
phpMyFAQ\Faq::getFaqByIdAndCategoryId2100.0%
phpMyFAQ\Faq::normalizeSortDirection2100.0%
phpMyFAQ\Faq::normalizeFaqIds2100.0%
phpMyFAQ\Faq\FaqCreationService::canUserAddFaq2100.0%
phpMyFAQ\Faq\FaqCreationService::getDefaultUserEmail2100.0%
phpMyFAQ\Faq\FaqCreationService::getDefaultUserName2100.0%
phpMyFAQ\Faq\FaqDisplayService::shouldApplyHighlighting2100.0%
phpMyFAQ\Faq\FaqRepository::getSolutionIdFromId2100.0%
phpMyFAQ\Faq\FaqRepository::getIdFromSolutionId2100.0%
phpMyFAQ\Faq\FaqRepository::fetchFaqsByIds2100.0%
phpMyFAQ\Faq\FaqRepository::deleteByIdAndLanguage2100.0%
phpMyFAQ\Faq\Import::parseCSV2100.0%
phpMyFAQ\Faq\QueryHelper::queryPermissionExistsAll2100.0%
phpMyFAQ\Faq\QueryHelper::userGrantExists2100.0%
phpMyFAQ\Faq\QueryHelper::normalizeIdList2100.0%
phpMyFAQ\Faq\QuestionService::canUserAskQuestion2100.0%
phpMyFAQ\Faq\QuestionService::getDefaultUserEmail2100.0%
phpMyFAQ\Faq\QuestionService::getDefaultUserName2100.0%
phpMyFAQ\Faq\RecordVisibility::isPermitted2100.0%
phpMyFAQ\Faq\Statistics::__construct2100.0%
phpMyFAQ\Faq\Statistics::getLatest2100.0%
phpMyFAQ\Faq\Statistics::getTrending2100.0%
phpMyFAQ\Filesystem\Filesystem::createDirectory2100.0%
phpMyFAQ\Filter::sanitizeQueryValue2100.0%
phpMyFAQ\Filter::filterHtml2100.0%
phpMyFAQ\Form\FormsRepository::fetchFormDataByFormId2100.0%
phpMyFAQ\Form\FormsRepository::fetchTranslationsByFormAndInput2100.0%
phpMyFAQ\Form\FormsRepository::fetchDefaultInputData2100.0%
phpMyFAQ\Forms::getTranslatedLanguages2100.0%
phpMyFAQ\Glossary::fetchAll2100.0%
phpMyFAQ\Glossary::create2100.0%
phpMyFAQ\Glossary::update2100.0%
phpMyFAQ\Glossary::delete2100.0%
phpMyFAQ\Glossary::getLanguage20.0%
phpMyFAQ\Glossary::currentLanguage2100.0%
phpMyFAQ\Glossary\GlossaryRepository::create2100.0%
phpMyFAQ\Glossary\GlossaryRepository::update2100.0%
phpMyFAQ\Glossary\GlossaryRepository::delete2100.0%
phpMyFAQ\Helper\AttachmentHelper::getAttachmentList2100.0%
phpMyFAQ\Helper\CategoryHelper::renderCategoryTree2100.0%
phpMyFAQ\Helper\CategoryHelper::buildAvailableCategoryTranslationsList2100.0%
phpMyFAQ\Helper\CategoryHelper::normalizeCategoryTree2100.0%
phpMyFAQ\Helper\CategoryHelper::renderAvailableTranslationsOptions2100.0%
phpMyFAQ\Helper\FaqHelper::renderAnswerPreview2100.0%
phpMyFAQ\Helper\FaqHelper::createOverview20.0%
phpMyFAQ\Helper\QuestionHelper::generateSmartAnswer2100.0%
phpMyFAQ\Helper\RegistrationHelper::buildRegistrationResponse20.0%
phpMyFAQ\Helper\TagsHelper::renderTagList2100.0%
phpMyFAQ\Helper\TagsHelper::renderSearchTag2100.0%
phpMyFAQ\Http\RateLimiter::__construct2100.0%
phpMyFAQ\Http\RateLimiter::check2100.0%
phpMyFAQ\Instance::create2100.0%
phpMyFAQ\Instance::getById2100.0%
phpMyFAQ\Instance::getInstanceConfig2100.0%
phpMyFAQ\Instance\Client::createClient20.0%
phpMyFAQ\Instance\Client::executeSchemaQuery2100.0%
phpMyFAQ\Instance\Client::copyTemplateFolder2100.0%
phpMyFAQ\Instance\Client::isMultiSiteWriteable20.0%
phpMyFAQ\Instance\Database::__construct20.0%
phpMyFAQ\Instance\Database::factory2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::__construct20.0%
phpMyFAQ\Instance\Search\Elasticsearch::createIndex2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::dropIndex2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::index2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::update2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::delete2100.0%
phpMyFAQ\Instance\Search\Elasticsearch::deleteCustomPage2100.0%
phpMyFAQ\Instance\Search\OpenSearch::__construct20.0%
phpMyFAQ\Instance\Search\OpenSearch::createIndex2100.0%
phpMyFAQ\Instance\Search\OpenSearch::isAvailable2100.0%
phpMyFAQ\Instance\Search\OpenSearch::deleteCustomPage2100.0%
phpMyFAQ\Instance\Setup::createAnonymousUser20.0%
phpMyFAQ\Instance\Setup::createElasticsearchFile2100.0%
phpMyFAQ\Instance\Setup::createOpenSearchFile2100.0%
phpMyFAQ\Kernel::createHttpKernel2100.0%
phpMyFAQ\Language::isASupportedLanguage2100.0%
phpMyFAQ\Language\LanguageCodes::getSupported2100.0%
phpMyFAQ\Language\LanguageDetector::getAcceptLanguage20.0%
phpMyFAQ\Language\LanguageDetector::getConfigLanguage2100.0%
phpMyFAQ\Language\LanguageDetector::getDetectionLanguage2100.0%
phpMyFAQ\Language\Plurals::__construct2100.0%
phpMyFAQ\Ldap::error2100.0%
phpMyFAQ\Link::getSystemRelativeUri2100.0%
phpMyFAQ\Link::toStringWithoutSession2100.0%
phpMyFAQ\Link::buildActionUrl2100.0%
phpMyFAQ\Link::isRelativeSystemLink2100.0%
phpMyFAQ\Link::getDefaultScheme2100.0%
phpMyFAQ\Link::isSystemLink2100.0%
phpMyFAQ\Link::isHomeIndex2100.0%
phpMyFAQ\Link::getSEOTitle2100.0%
phpMyFAQ\Link::appendSessionId2100.0%
phpMyFAQ\Link\Strategy\StrategyRegistry::list20.0%
phpMyFAQ\Link\Util\TitleSlugifier::replacePattern2100.0%
phpMyFAQ\Mail::getServerName2100.0%
phpMyFAQ\Mail::setEmailTo2100.0%
phpMyFAQ\Mail::isQueueDeliveryEnabled2100.0%
phpMyFAQ\Mail::safeEmail2100.0%
phpMyFAQ\Mail\Provider\MailgunProvider::extractEmailAddress2100.0%
phpMyFAQ\Mail\Provider\SendGridProvider::extractEmailAddress2100.0%
phpMyFAQ\Mail\Provider\SesProvider::extractEmailAddress2100.0%
phpMyFAQ\Mail\Smtp::setAuthConfig2100.0%
phpMyFAQ\News::getLatestDataPaginated2100.0%
phpMyFAQ\News::getHeader2100.0%
phpMyFAQ\News\NewsRepository::activate2100.0%
phpMyFAQ\News\NewsService::getEditLink2100.0%
phpMyFAQ\News\NewsService::formatNewsDate2100.0%
phpMyFAQ\News\NewsService::getAuthorInfo2100.0%
phpMyFAQ\Notification::sendOpenQuestionAnswered2100.0%
phpMyFAQ\Notification::sendNewsCommentNotification2100.0%
phpMyFAQ\Pagination::shouldSkipBeforeCurrentPage2100.0%
phpMyFAQ\Pagination::shouldSkipAfterCurrentPage2100.0%
phpMyFAQ\Pagination::renderPageLink2100.0%
phpMyFAQ\Permission\BasicPermission::getUserRightsCount2100.0%
phpMyFAQ\Permission\BasicPermission::getUserGroups20.0%
phpMyFAQ\Permission\BasicPermissionRepository::checkUserRight2100.0%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::deleteAllForGroup2100.0%
phpMyFAQ\Permission\MediumPermission::getAllUserRights2100.0%
phpMyFAQ\Permission\MediumPermissionRepository::deleteGroup2100.0%
phpMyFAQ\Permission\MediumPermissionRepository::removeFromAllGroups2100.0%
phpMyFAQ\Permission\MediumPermissionRepository::refuseAllGroupRights2100.0%
phpMyFAQ\Permission\MediumPermissionRepository::removeAllUsersFromGroup2100.0%
phpMyFAQ\Plugin\PluginManager::getAllPluginStylesheets2100.0%
phpMyFAQ\Plugin\PluginManager::getAllPluginScripts2100.0%
phpMyFAQ\Push\PushSubscriptionRepository::hasSubscription2100.0%
phpMyFAQ\Question::updateQuestionAnswer20.0%
phpMyFAQ\Question\QuestionRepository::add2100.0%
phpMyFAQ\Queue\DatabaseMessageBus::dispatch2100.0%
phpMyFAQ\Queue\Transport\DatabaseTransport::enqueue2100.0%
phpMyFAQ\Queue\Transport\DatabaseTransport::release2100.0%
phpMyFAQ\Rating::get2100.0%
phpMyFAQ\Routing\RouteCacheManager::__construct2100.0%
phpMyFAQ\Routing\RouteCacheManager::clearContext2100.0%
phpMyFAQ\Routing\RouteCacheManager::writeCache2100.0%
phpMyFAQ\Routing\RouteCacheManager::readCache2100.0%
phpMyFAQ\Scheduler\TaskScheduler::aggregateStatistics2100.0%
phpMyFAQ\Scheduler\TaskScheduler::createBackup2100.0%
phpMyFAQ\Search::logSearchTerm2100.0%
phpMyFAQ\Search::getSearchesCount2100.0%
phpMyFAQ\Search\SearchDatabase::getJoinedColumns2100.0%
phpMyFAQ\Service\McpServer\McpSdkRuntime::runConsole20.0%
phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::__construct2100.0%
phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::createServerInfo20.0%
phpMyFAQ\Session\Token::getInstance2100.0%
phpMyFAQ\Setup\InMemoryHtaccessFile::valid20.0%
phpMyFAQ\Setup\InMemoryHtaccessFile::isReadable20.0%
phpMyFAQ\Setup\Installation\SchemaInstaller::executeSql2100.0%
phpMyFAQ\Setup\InstallationInput::getEmail20.0%
phpMyFAQ\Setup\InstallationInputValidator::isLdapEnabled2100.0%
phpMyFAQ\Setup\InstallationRunner::configuration20.0%
phpMyFAQ\Setup\InstallationRunner::db20.0%
phpMyFAQ\Setup\InstallationRunner::run20.0%
phpMyFAQ\Setup\InstallationRunner::stepInsertStopwords20.0%
phpMyFAQ\Setup\InstallationRunner::stepCreateAnonymousUser20.0%
phpMyFAQ\Setup\InstallationRunner::stepCreateInstance20.0%
phpMyFAQ\Setup\Installer::hasElasticsearchSupport2100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::getConfig20.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::collectOperations2100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::getLatestVersion2100.0%
phpMyFAQ\Setup\Migration\MigrationResult::addOperationResult2100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::isApplied2100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::shortenPath2100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::shortenPath2100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::execute2100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::createUser20.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::insertFormInput20.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getSqlQueries2100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperationCounts2100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::execute2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::table2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addInteger2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addVarchar2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addTimestamp2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createTablePrefix2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::addColumn2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::date20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createTablePrefix2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::supportsCombinedAlter20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::date20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createTablePrefix2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::supportsCombinedAlter20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::date20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createTablePrefix2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::supportsCombinedAlter20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\DialectFactory::create20.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropTable2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropTableIfExists2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createIndexIfNotExists2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::dropIndex2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::table2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::integer2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::bigInteger2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::smallInteger2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::varchar2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::timestamp2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::date2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::char2100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::autoIncrement2100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::up20.0%
phpMyFAQ\Setup\Migration\Versions\Migration320RC::up20.0%
phpMyFAQ\Setup\Migration\Versions\Migration409::up2100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::up20.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::up20.0%
phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getDescription20.0%
phpMyFAQ\Setup\Update::getDryRunResults20.0%
phpMyFAQ\Setup\Update::getFormattedDryRunReport20.0%
phpMyFAQ\Setup\Update::updateVersion20.0%
phpMyFAQ\Setup\Update::getBackupFilename2100.0%
phpMyFAQ\Setup\UpdateRunner::truncateString2100.0%
phpMyFAQ\Setup\UpdateRunner::taskCleanup20.0%
phpMyFAQ\Setup\UpdateRunner::withProgress20.0%
phpMyFAQ\Setup\UpdateToken::getOrCreate2100.0%
phpMyFAQ\Setup\UpdateToken::delete2100.0%
phpMyFAQ\Setup\Upgrade::getDownloadHost2100.0%
phpMyFAQ\Setup\Upgrade::getPath2100.0%
phpMyFAQ\Sitemap::__construct2100.0%
phpMyFAQ\Sitemap::normalizeIdList2100.0%
phpMyFAQ\StopWords::add2100.0%
phpMyFAQ\Storage\FilesystemStorage::get2100.0%
phpMyFAQ\Storage\FilesystemStorage::size2100.0%
phpMyFAQ\Storage\S3Storage::putStream2100.0%
phpMyFAQ\Storage\S3Storage::get2100.0%
phpMyFAQ\Storage\S3Storage::size2100.0%
phpMyFAQ\Storage\S3Storage::run2100.0%
phpMyFAQ\Storage\StorageFactory::readStringConfig2100.0%
phpMyFAQ\Strings\Mbstring::appendU2100.0%
phpMyFAQ\Strings\StringBasic::substr2100.0%
phpMyFAQ\System::getVersion2100.0%
phpMyFAQ\System::isUpdateNecessary2100.0%
phpMyFAQ\System::isSqlite2100.0%
phpMyFAQ\Tags::setBypassPermissionCheck20.0%
phpMyFAQ\Tags::getPopularTagsAsArray2100.0%
phpMyFAQ\Tags::normalizePermissionGroups2100.0%
phpMyFAQ\Template\ThemeManager::activateTheme2100.0%
phpMyFAQ\Template\ThemeManager::activateDefaultTheme2100.0%
phpMyFAQ\Template\ThemeManager::themeStoragePath2100.0%
phpMyFAQ\Template\ThemeManager::assertValidThemeName2100.0%
phpMyFAQ\Template\ThemeManager::assertAllowedFileExtension2100.0%
phpMyFAQ\Translation::create2100.0%
phpMyFAQ\Translation::getString2100.0%
phpMyFAQ\Translation::getInstance2100.0%
phpMyFAQ\Translation::checkTranslationsDirectory2100.0%
phpMyFAQ\Translation::checkDefaultLanguage2100.0%
phpMyFAQ\Translation::checkInit2100.0%
phpMyFAQ\Translation::checkCurrentLanguage2100.0%
phpMyFAQ\Translation\DTO\TranslationRequest::getContentType20.0%
phpMyFAQ\Translation\DTO\TranslationResult::getError20.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::doTranslateBatch2100.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::supportsLanguagePair2100.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::supportsLanguagePair2100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::getApiUrl2100.0%
phpMyFAQ\Twig\Extensions\AssetVersionTwigExtension::asset20.0%
phpMyFAQ\Twig\Extensions\TranslateTwigExtension::translate2100.0%
phpMyFAQ\User::userData2100.0%
phpMyFAQ\User::getUserId2100.0%
phpMyFAQ\User::error2100.0%
phpMyFAQ\User::getUserVisibilityByEmail2100.0%
phpMyFAQ\User::setStatus2100.0%
phpMyFAQ\User::fetchRowArray2100.0%
phpMyFAQ\User\CurrentUser::sessionAge2100.0%
phpMyFAQ\User\Tracking::getInstance2100.0%
phpMyFAQ\User\Tracking::initializeSessionId2100.0%
phpMyFAQ\User\TwoFactor::saveSecret2100.0%
phpMyFAQ\User\TwoFactor::getSecret2100.0%
phpMyFAQ\User\UserAuthentication::recordFailedLogin2100.0%
phpMyFAQ\User\UserAuthentication::failedLoginKey2100.0%
phpMyFAQ\Utils::setHighlightedString2100.0%
phpMyFAQ\Utils::moveToTop2100.0%
phpMyFAQ\Utils::formatBytes2100.0%
phpMyFAQ\Visits::logViews2100.0%
phpMyFAQ\Visits::getRequestTimestamp2100.0%
phpMyFAQ\ConfigurationMethodsTrait::setLogger2100.0%
phpMyFAQ\ConfigurationMethodsTrait::set2100.0%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::statistics1.6314.3%
phpMyFAQ\Auth\AuthEntraId::checkCredentials1.1250.0%
phpMyFAQ\Administration\AdminLog::__construct1100.0%
phpMyFAQ\Administration\AdminLog::getNumberOfEntries1100.0%
phpMyFAQ\Administration\AdminLog::getAll1100.0%
phpMyFAQ\Administration\AdminLog::delete1100.0%
phpMyFAQ\Administration\AdminLog::calculateHash1100.0%
phpMyFAQ\Administration\AdminLogRepository::__construct1100.0%
phpMyFAQ\Administration\AdminLogRepository::getNumberOfEntries1100.0%
phpMyFAQ\Administration\AdminLogRepository::deleteOlderThan1100.0%
phpMyFAQ\Administration\AdminMenuBuilder::searchRelevanceOptions1100.0%
phpMyFAQ\Administration\Backup::__construct1100.0%
phpMyFAQ\Administration\Backup::getBackupHeader1100.0%
phpMyFAQ\Administration\Backup::export1100.0%
phpMyFAQ\Administration\Backup::getRepository1100.0%
phpMyFAQ\Administration\Backup\BackupExecuteResult::__construct1100.0%
phpMyFAQ\Administration\Backup\BackupExportResult::__construct1100.0%
phpMyFAQ\Administration\Backup\BackupParseResult::__construct1100.0%
phpMyFAQ\Administration\Backup\BackupRepository::__construct1100.0%
phpMyFAQ\Administration\Backup\BackupRepository::getNumberOfEntries1100.0%
phpMyFAQ\Administration\Backup\BackupRepository::deleteAll1100.0%
phpMyFAQ\Administration\Category::__construct1100.0%
phpMyFAQ\Administration\Category::getLanguage1100.0%
phpMyFAQ\Administration\Category::setLanguage1100.0%
phpMyFAQ\Administration\Category::getUser1100.0%
phpMyFAQ\Administration\Category::setUser1100.0%
phpMyFAQ\Administration\Category::getGroups1100.0%
phpMyFAQ\Administration\Category::setGroups1100.0%
phpMyFAQ\Administration\Changelog::__construct1100.0%
phpMyFAQ\Administration\Changelog::add1100.0%
phpMyFAQ\Administration\DashboardLayout::__construct1100.0%
phpMyFAQ\Administration\DashboardLayout::reset1100.0%
phpMyFAQ\Administration\Faq::__construct1100.0%
phpMyFAQ\Administration\Faq::setLanguage1100.0%
phpMyFAQ\Administration\Faq::getLanguage1100.0%
phpMyFAQ\Administration\Faq::buildBasicFaqAccessQuery1100.0%
phpMyFAQ\Administration\Faq::sanitizeFaqIds1100.0%
phpMyFAQ\Administration\FileDownloader::__construct1100.0%
phpMyFAQ\Administration\FileDownloader::getResponse1100.0%
phpMyFAQ\Administration\FileDownloader::streamContent1100.0%
phpMyFAQ\Administration\RatingStatistics::__construct1100.0%
phpMyFAQ\Administration\RatingStatistics::mapRowToRating1100.0%
phpMyFAQ\Administration\RecentUsers::__construct1100.0%
phpMyFAQ\Administration\RemoteApiClient::__construct1100.0%
phpMyFAQ\Administration\RemoteApiClient::setHttpClient1100.0%
phpMyFAQ\Administration\RemoteApiClient::setRemoteHashes1100.0%
phpMyFAQ\Administration\Report::__construct1100.0%
phpMyFAQ\Administration\ReportRepository::__construct1100.0%
phpMyFAQ\Administration\Revision::__construct1100.0%
phpMyFAQ\Administration\Revision::create1100.0%
phpMyFAQ\Administration\Revision::delete1100.0%
phpMyFAQ\Administration\Session::__construct1100.0%
phpMyFAQ\Administration\Session::getTimeFromSessionId1100.0%
phpMyFAQ\Administration\Session::getNumberOfSessions1100.0%
phpMyFAQ\Administration\Session::deleteSessions1100.0%
phpMyFAQ\Administration\Session::deleteAllSessions1100.0%
phpMyFAQ\Administration\Session::getLast30DaysVisits1100.0%
phpMyFAQ\Administration\SessionRepository::__construct1100.0%
phpMyFAQ\Administration\SessionRepository::deleteSessionsByTimeRange1100.0%
phpMyFAQ\Administration\SessionRepository::deleteAllSessions1100.0%
phpMyFAQ\Administration\TranslationStatistics::getLanguageStatistics1100.0%
phpMyFAQ\Api\Filtering\FilterRequest::__construct1100.0%
phpMyFAQ\Api\Filtering\FilterRequest::has1100.0%
phpMyFAQ\Api\Filtering\FilterRequest::get1100.0%
phpMyFAQ\Api\Filtering\FilterRequest::getFilters1100.0%
phpMyFAQ\Api\Filtering\FilterRequest::hasFilters1100.0%
phpMyFAQ\Api\MetaService::__construct1100.0%
phpMyFAQ\Api\MetaService::getPublicMetadata1100.0%
phpMyFAQ\Api\MetaService::buildEnabledFeatures1100.0%
phpMyFAQ\Api\MetaService::buildPublicLogoUrl1100.0%
phpMyFAQ\Api\OAuthDiscoveryService::__construct1100.0%
phpMyFAQ\Api\OAuthDiscoveryService::getDiscoveryDocument1100.0%
phpMyFAQ\Api\Pagination\PaginationMetadata::toArray1100.0%
phpMyFAQ\Api\Pagination\PaginationRequest::__construct1100.0%
phpMyFAQ\Api\Pagination\PaginationRequest::validateLimit1100.0%
phpMyFAQ\Api\ProblemDetails::__construct1100.0%
phpMyFAQ\Api\Sorting\SortRequest::__construct1100.0%
phpMyFAQ\Api\Sorting\SortRequest::getField1100.0%
phpMyFAQ\Api\Sorting\SortRequest::getOrder1100.0%
phpMyFAQ\Api\Sorting\SortRequest::getOrderSql1100.0%
phpMyFAQ\Api\Sorting\SortRequest::hasSort1100.0%
phpMyFAQ\Api\Sorting\SortRequest::escapeIdentifier1100.0%
phpMyFAQ\Attachment\AbstractAttachment::buildUrl1100.0%
phpMyFAQ\Attachment\AbstractAttachment::setKey1100.0%
phpMyFAQ\Attachment\AbstractAttachment::setRecordLang1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getId1100.0%
phpMyFAQ\Attachment\AbstractAttachment::setId1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getRecordId1100.0%
phpMyFAQ\Attachment\AbstractAttachment::setRecordId1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getTenantQuotaEnforcer1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getFilename1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getMimeType1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getFilesize1100.0%
phpMyFAQ\Attachment\AbstractAttachment::getRealHash1100.0%
phpMyFAQ\Attachment\AbstractAttachment::postUpdateMeta1100.0%
phpMyFAQ\Attachment\AbstractAttachment::readMimeType1100.0%
phpMyFAQ\Attachment\AbstractAttachment::deleteMeta1100.0%
phpMyFAQ\Attachment\AttachmentCollection::__construct1100.0%
phpMyFAQ\Attachment\AttachmentService::__construct1100.0%
phpMyFAQ\Attachment\AttachmentService::getAttachment1100.0%
phpMyFAQ\Attachment\AttachmentService::getAttachmentErrorMessage1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::isEncrypted1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::getPath1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::__toString1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::eof1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::getMode1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::isOk1100.0%
phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::__construct1100.0%
phpMyFAQ\Attachment\Filesystem\File\EncryptedFile::putChunk1100.0%
phpMyFAQ\Attachment\Filesystem\File\VanillaFile::putChunk1100.0%
phpMyFAQ\Auth::__construct1100.0%
phpMyFAQ\Auth::getEncryptionContainer1100.0%
phpMyFAQ\Auth::enableReadOnly1100.0%
phpMyFAQ\Auth::disableReadOnly1100.0%
phpMyFAQ\Auth::isReadOnly1100.0%
phpMyFAQ\Auth\ApiKeyAuthenticator::__construct1100.0%
phpMyFAQ\Auth\ApiKeyAuthenticator::getAuthenticatedApiKey1100.0%
phpMyFAQ\Auth\AuthChain::__construct1100.0%
phpMyFAQ\Auth\AuthChain::setOAuth2Authenticator1100.0%
phpMyFAQ\Auth\AuthChain::getAuthenticatedUserId1100.0%
phpMyFAQ\Auth\AuthChain::getAuthSource1100.0%
phpMyFAQ\Auth\AuthDatabase::__construct1100.0%
phpMyFAQ\Auth\AuthDatabase::rehash1100.0%
phpMyFAQ\Auth\AuthEntraId::__construct1100.0%
phpMyFAQ\Auth\AuthEntraId::update1100.0%
phpMyFAQ\Auth\AuthEntraId::delete1100.0%
phpMyFAQ\Auth\AuthEntraId::authorize1100.0%
phpMyFAQ\Auth\AuthEntraId::logout1100.0%
phpMyFAQ\Auth\AuthHttp::__construct1100.0%
phpMyFAQ\Auth\AuthHttp::create1100.0%
phpMyFAQ\Auth\AuthHttp::update1100.0%
phpMyFAQ\Auth\AuthHttp::delete1100.0%
phpMyFAQ\Auth\AuthKeycloak::__construct1100.0%
phpMyFAQ\Auth\AuthKeycloak::update1100.0%
phpMyFAQ\Auth\AuthKeycloak::delete1100.0%
phpMyFAQ\Auth\AuthKeycloak::getEmail1100.0%
phpMyFAQ\Auth\AuthKeycloak::getSubject1100.0%
phpMyFAQ\Auth\AuthKeycloak::toBool1100.0%
phpMyFAQ\Auth\AuthLdap::update1100.0%
phpMyFAQ\Auth\AuthLdap::delete1100.0%
phpMyFAQ\Auth\AuthSso::__construct1100.0%
phpMyFAQ\Auth\AuthSso::update1100.0%
phpMyFAQ\Auth\AuthSso::delete1100.0%
phpMyFAQ\Auth\AuthWebAuthn::__construct1100.0%
phpMyFAQ\Auth\AuthWebAuthn::storeUserInSession1100.0%
phpMyFAQ\Auth\AuthWebAuthn::setAppId1100.0%
phpMyFAQ\Auth\AuthWebAuthn::arrayToString1100.0%
phpMyFAQ\Auth\AuthWebAuthn::stringToArray1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::__construct1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::createCurrentSessionKey1100.0%
phpMyFAQ\Auth\EntraId\EntraIdSession::getCookie1100.0%
phpMyFAQ\Auth\EntraId\JwksProvider::getKeys1100.0%
phpMyFAQ\Auth\EntraId\JwksProvider::cacheFile1100.0%
phpMyFAQ\Auth\EntraId\OAuth::__construct1100.0%
phpMyFAQ\Auth\EntraId\OAuth::errorMessage1100.0%
phpMyFAQ\Auth\EntraId\OAuth::refreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::clearToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getEntraIdSession1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getRefreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::setRefreshToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getAccessToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::setAccessToken1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getName1100.0%
phpMyFAQ\Auth\EntraId\OAuth::getMail1100.0%
phpMyFAQ\Auth\Keycloak\KeycloakProviderConfigFactory::__construct1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::__construct1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::setTokenIssuer1100.0%
phpMyFAQ\Auth\OAuth2\AuthorizationServer::setAuthorizationCompleter1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setName1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setRedirectUri1100.0%
phpMyFAQ\Auth\OAuth2\Entity\ClientEntity::setConfidential1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::__construct1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::db1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AbstractRepository::table1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AccessTokenRepository::revokeAccessToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::getNewAuthCode1100.0%
phpMyFAQ\Auth\OAuth2\Repository\AuthCodeRepository::revokeAuthCode1100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::getNewRefreshToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\RefreshTokenRepository::revokeRefreshToken1100.0%
phpMyFAQ\Auth\OAuth2\Repository\ScopeRepository::finalizeScopes1100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::__construct1100.0%
phpMyFAQ\Auth\OAuth2\ResourceServer::setTokenValidator1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::buildAuthorizationUrl1100.0%
phpMyFAQ\Auth\Oidc\OidcClient::fetchUserInfo1100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcClientConfig::getScopesAsString1100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryDocument::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcDiscoveryService::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Sequence1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1ObjectIdentifier1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1Null1100.0%
phpMyFAQ\Auth\Oidc\OidcIdTokenValidator::asn1BitString1100.0%
phpMyFAQ\Auth\Oidc\OidcProviderConfig::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::__construct1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::setAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::getAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::clearAuthorizationState1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::setIdToken1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::getIdToken1100.0%
phpMyFAQ\Auth\Oidc\OidcSession::clearIdToken1100.0%
phpMyFAQ\Auth\PasswordHasher::__construct1100.0%
phpMyFAQ\Auth\PasswordHasher::hash1100.0%
phpMyFAQ\Auth\PasswordHasher::isLegacyHash1100.0%
phpMyFAQ\Auth\PasswordHasher::legacyHash1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getId1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setId1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getName1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setName1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::getWebAuthnKeys1100.0%
phpMyFAQ\Auth\WebAuthn\WebAuthnUser::setWebAuthnKeys1100.0%
phpMyFAQ\Bookmark::__construct1100.0%
phpMyFAQ\Bookmark\BookmarkFormatter::__construct1100.0%
phpMyFAQ\Bookmark\BookmarkRepository::__construct1100.0%
phpMyFAQ\Bookmark\BookmarkRepository::removeAll1100.0%
phpMyFAQ\Bootstrap\PhpConfigurator::configurePcre1100.0%
phpMyFAQ\Bootstrap\PhpConfigurator::registerErrorHandlers1100.0%
phpMyFAQ\Bootstrap\SearchClientFactory::configureOpenSearch1100.0%
phpMyFAQ\Bootstrapper::config1100.0%
phpMyFAQ\Bootstrapper::getFaqConfig1100.0%
phpMyFAQ\Bootstrapper::getDb1100.0%
phpMyFAQ\Bootstrapper::getRequest1100.0%
phpMyFAQ\Cache\CacheFactory::__construct1100.0%
phpMyFAQ\Cache\CacheFactory::createFilesystemAdapter1100.0%
phpMyFAQ\Cache\CacheSettings::__construct1100.0%
phpMyFAQ\Cache\CacheSettingsResolver::__construct1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::__construct1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::getFont1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::isUserIsLoggedIn1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::setUserIsLoggedIn1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::renderCaptchaImage1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::garbageCollector1100.0%
phpMyFAQ\Captcha\BuiltinCaptcha::escapeQueryValue1100.0%
phpMyFAQ\Captcha\GoogleRecaptcha::__construct1100.0%
phpMyFAQ\Captcha\GoogleRecaptcha::fetchUrl1100.0%
phpMyFAQ\Captcha\GoogleRecaptcha::isUserIsLoggedIn1100.0%
phpMyFAQ\Captcha\GoogleRecaptcha::setUserIsLoggedIn1100.0%
phpMyFAQ\Captcha\Helper\BuiltinCaptchaAbstractHelper::__construct1100.0%
phpMyFAQ\Captcha\Helper\GoogleRecaptchaAbstractHelper::__construct1100.0%
phpMyFAQ\Category::setLanguage1100.0%
phpMyFAQ\Category::getUser1100.0%
phpMyFAQ\Category::getGroups1100.0%
phpMyFAQ\Category::getLevelOf1100.0%
phpMyFAQ\Category::setUser1100.0%
phpMyFAQ\Category::getAllCategoryIds1100.0%
phpMyFAQ\Category::buildCategoryTree1100.0%
phpMyFAQ\Category::buildAdminCategoryTree1100.0%
phpMyFAQ\Category::getNodes1100.0%
phpMyFAQ\Category::getChildren1100.0%
phpMyFAQ\Category::getChildNodes1100.0%
phpMyFAQ\Category::expand1100.0%
phpMyFAQ\Category::getCategoryIdFromFaq1100.0%
phpMyFAQ\Category::getCategoryIdFromName1100.0%
phpMyFAQ\Category::create1100.0%
phpMyFAQ\Category::checkIfCategoryExists1100.0%
phpMyFAQ\Category::update1100.0%
phpMyFAQ\Category::moveOwnership1100.0%
phpMyFAQ\Category::hasLanguage1100.0%
phpMyFAQ\Category::delete1100.0%
phpMyFAQ\Category::getOwner1100.0%
phpMyFAQ\Category::getModeratorGroupId1100.0%
phpMyFAQ\Category::getCategoryTree1100.0%
phpMyFAQ\Category::getCategoryName1100.0%
phpMyFAQ\Category::getCategoryDescription1100.0%
phpMyFAQ\Category::categoryHasLinkToFaq1100.0%
phpMyFAQ\Category::getCategoryNames1100.0%
phpMyFAQ\Category\CategoryCache::getCategories1100.0%
phpMyFAQ\Category\CategoryCache::setCategories1100.0%
phpMyFAQ\Category\CategoryCache::addCategory1100.0%
phpMyFAQ\Category\CategoryCache::getCategoryNames1100.0%
phpMyFAQ\Category\CategoryCache::setCategoryNames1100.0%
phpMyFAQ\Category\CategoryCache::addCategoryName1100.0%
phpMyFAQ\Category\CategoryCache::getCategoryName1100.0%
phpMyFAQ\Category\CategoryCache::getTreeTab1100.0%
phpMyFAQ\Category\CategoryCache::setTreeTab1100.0%
phpMyFAQ\Category\CategoryCache::addTreeTabEntry1100.0%
phpMyFAQ\Category\CategoryCache::getTreeTabEntry1100.0%
phpMyFAQ\Category\CategoryCache::countTreeTab1100.0%
phpMyFAQ\Category\CategoryCache::getCatTree1100.0%
phpMyFAQ\Category\CategoryCache::setCatTree1100.0%
phpMyFAQ\Category\CategoryCache::getChildren1100.0%
phpMyFAQ\Category\CategoryCache::setChildren1100.0%
phpMyFAQ\Category\CategoryCache::addChild1100.0%
phpMyFAQ\Category\CategoryCache::getChildrenOfParent1100.0%
phpMyFAQ\Category\CategoryCache::clear1100.0%
phpMyFAQ\Category\CategoryPermissionContext::__construct1100.0%
phpMyFAQ\Category\CategoryPermissionContext::getUser1100.0%
phpMyFAQ\Category\CategoryPermissionContext::setUser1100.0%
phpMyFAQ\Category\CategoryPermissionContext::getGroups1100.0%
phpMyFAQ\Category\CategoryPermissionContext::setOwner1100.0%
phpMyFAQ\Category\CategoryPermissionContext::setModerator1100.0%
phpMyFAQ\Category\CategoryPermissionContext::getModeratorGroupId1100.0%
phpMyFAQ\Category\CategoryPermissionContext::clear1100.0%
phpMyFAQ\Category\CategoryRepository::__construct1100.0%
phpMyFAQ\Category\CategoryRepository::mapRow1100.0%
phpMyFAQ\Category\CategoryRepository::getTenantQuotaEnforcer1100.0%
phpMyFAQ\Category\CategoryRepository::update1100.0%
phpMyFAQ\Category\CategoryRepository::moveOwnership1100.0%
phpMyFAQ\Category\CategoryRepository::hasLanguage1100.0%
phpMyFAQ\Category\CategoryRepository::updateParentCategory1100.0%
phpMyFAQ\Category\CategoryRepository::delete1100.0%
phpMyFAQ\Category\CategoryService::__construct1100.0%
phpMyFAQ\Category\CategoryService::getAllCategories1100.0%
phpMyFAQ\Category\CategoryService::getAllCategoryIds1100.0%
phpMyFAQ\Category\CategoryService::getCategoriesFromFaq1100.0%
phpMyFAQ\Category\CategoryService::getCategoryIdFromFaq1100.0%
phpMyFAQ\Category\CategoryService::getCategoryIdsFromFaq1100.0%
phpMyFAQ\Category\CategoryService::getCategoryIdFromName1100.0%
phpMyFAQ\Category\CategoryService::getCategoryData1100.0%
phpMyFAQ\Category\CategoryService::create1100.0%
phpMyFAQ\Category\CategoryService::update1100.0%
phpMyFAQ\Category\CategoryService::delete1100.0%
phpMyFAQ\Category\CategoryService::moveOwnership1100.0%
phpMyFAQ\Category\CategoryService::hasLanguage1100.0%
phpMyFAQ\Category\CategoryService::checkIfCategoryExists1100.0%
phpMyFAQ\Category\CategoryService::getCategoryLanguagesTranslated1100.0%
phpMyFAQ\Category\CategoryService::getMissingCategories1100.0%
phpMyFAQ\Category\CategoryTreeFacade::__construct1100.0%
phpMyFAQ\Category\CategoryTreeFacade::buildLinearTree1100.0%
phpMyFAQ\Category\CategoryTreeFacade::buildAdminCategoryTree1100.0%
phpMyFAQ\Category\CategoryTreeFacade::getChildren1100.0%
phpMyFAQ\Category\CategoryTreeFacade::getChildNodes1100.0%
phpMyFAQ\Category\CategoryTreeFacade::getLevelOf1100.0%
phpMyFAQ\Category\CategoryTreeFacade::getNodes1100.0%
phpMyFAQ\Category\Image::__construct1100.0%
phpMyFAQ\Category\Image::setFileName1100.0%
phpMyFAQ\Category\Image::getFileExtension1100.0%
phpMyFAQ\Category\Image::isValidMimeType1100.0%
phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildFromIds1100.0%
phpMyFAQ\Category\Navigation\BreadcrumbsBuilder::buildFromIdsWithStartPage1100.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::__construct1100.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::transform1100.0%
phpMyFAQ\Category\Navigation\CategoryTreeNavigator::buildTree1100.0%
phpMyFAQ\Category\Order::__construct1100.0%
phpMyFAQ\Category\Order::add1100.0%
phpMyFAQ\Category\Order::remove1100.0%
phpMyFAQ\Category\Permission::__construct1100.0%
phpMyFAQ\Category\Permission\CategoryPermissionService::buildWhereClause1100.0%
phpMyFAQ\Category\Permission\CategoryPermissionService::buildWhereClauseWithInactive1100.0%
phpMyFAQ\Category\Relation::__construct1100.0%
phpMyFAQ\Category\Relation::setGroups1100.0%
phpMyFAQ\Category\Startpage::__construct1100.0%
phpMyFAQ\Category\Startpage::setUser1100.0%
phpMyFAQ\Category\Startpage::setGroups1100.0%
phpMyFAQ\Category\Startpage::setLanguage1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::__construct1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::getNodes1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::getChildren1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::getChildNodes1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::buildTree1100.0%
phpMyFAQ\Category\Tree\TreeBuilder::computeLevel1100.0%
phpMyFAQ\Category\Tree\TreePathResolver::getBrothers1100.0%
phpMyFAQ\Category\Tree\TreeVisualizer::__construct1100.0%
phpMyFAQ\Chat::__construct1100.0%
phpMyFAQ\Chat::messageToArray1100.0%
phpMyFAQ\Chat::mapRowToEntity1100.0%
phpMyFAQ\Command\CreateHashesCommand::__construct1100.0%
phpMyFAQ\Command\CreateHashesCommand::configure1100.0%
phpMyFAQ\Command\InstallCommand::__construct1100.0%
phpMyFAQ\Command\InstallCommand::configure1100.0%
phpMyFAQ\Command\McpServerCommand::__construct1100.0%
phpMyFAQ\Command\McpServerCommand::configure1100.0%
phpMyFAQ\Command\SeedTestDataCommand::configure1100.0%
phpMyFAQ\Command\SeedTestDataCommand::linkFaqToCategory1100.0%
phpMyFAQ\Command\UpdateCommand::__construct1100.0%
phpMyFAQ\Command\UpdateCommand::configure1100.0%
phpMyFAQ\Comment\CommentsRepository::__construct1100.0%
phpMyFAQ\Comment\CommentsRepository::deleteByTypeAndId1100.0%
phpMyFAQ\Comments::__construct1100.0%
phpMyFAQ\Comments::countComments1100.0%
phpMyFAQ\Comments::create1100.0%
phpMyFAQ\Comments::delete1100.0%
phpMyFAQ\Configuration::getConfigurationInstance1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::updateConfigValue1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::fetchAll1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::insert1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::delete1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::renameKey1100.0%
phpMyFAQ\Configuration\ConfigurationRepository::updateFaqDataContentById1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getServer1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getPort1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getUser1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getPassword1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getDatabase1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getPrefix1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getType1100.0%
phpMyFAQ\Configuration\DatabaseConfiguration::getSchema1100.0%
phpMyFAQ\Configuration\ElasticsearchConfiguration::__construct1100.0%
phpMyFAQ\Configuration\ElasticsearchConfiguration::getHosts1100.0%
phpMyFAQ\Configuration\ElasticsearchConfiguration::getIndex1100.0%
phpMyFAQ\Configuration\LayoutSettings::__construct1100.0%
phpMyFAQ\Configuration\LayoutSettings::getTemplateSet1100.0%
phpMyFAQ\Configuration\LayoutSettings::getCustomCss1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getMainServer1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getMainPort1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getMainUser1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getMainPassword1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getMainBase1100.0%
phpMyFAQ\Configuration\LdapConfiguration::getServers1100.0%
phpMyFAQ\Configuration\LdapSettings::__construct1100.0%
phpMyFAQ\Configuration\LdapSettings::buildConfig1100.0%
phpMyFAQ\Configuration\LdapSettings::getLdapMapping1100.0%
phpMyFAQ\Configuration\LdapSettings::getLdapOptions1100.0%
phpMyFAQ\Configuration\LdapSettings::isActive1100.0%
phpMyFAQ\Configuration\MailSettings::__construct1100.0%
phpMyFAQ\Configuration\OpenSearchConfiguration::__construct1100.0%
phpMyFAQ\Configuration\OpenSearchConfiguration::getHosts1100.0%
phpMyFAQ\Configuration\OpenSearchConfiguration::getIndex1100.0%
phpMyFAQ\Configuration\SearchSettings::__construct1100.0%
phpMyFAQ\Configuration\SearchSettings::isElasticsearchActive1100.0%
phpMyFAQ\Configuration\SecuritySettings::__construct1100.0%
phpMyFAQ\Configuration\SecuritySettings::isSignInWithMicrosoftActive1100.0%
phpMyFAQ\Configuration\SecuritySettings::isSignInWithKeycloakActive1100.0%
phpMyFAQ\Configuration\Storage\ConfigurationStorageSettings::__construct1100.0%
phpMyFAQ\Configuration\Storage\ConfigurationStorageSettingsResolver::__construct1100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::__construct1100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::updateConfigValue1100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::insert1100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::delete1100.0%
phpMyFAQ\Configuration\Storage\DatabaseConfigurationStore::renameKey1100.0%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::__construct1100.0%
phpMyFAQ\Configuration\Storage\FilesystemConfigurationCache::clear1100.0%
phpMyFAQ\Configuration\Storage\HybridConfigurationStore::__construct1100.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::__construct1100.0%
phpMyFAQ\Configuration\Storage\RedisConfigurationStore::getHashKey1100.0%
phpMyFAQ\Configuration\UrlSettings::__construct1100.0%
phpMyFAQ\Container\ContainerCacheManager::containerClass1100.0%
phpMyFAQ\Controller\AbstractController::__construct1100.0%
phpMyFAQ\Controller\AbstractController::setContainer1100.0%
phpMyFAQ\Controller\AbstractController::render1100.0%
phpMyFAQ\Controller\AbstractController::json1100.0%
phpMyFAQ\Controller\AbstractController::isPublicAuthenticationPath1100.0%
phpMyFAQ\Controller\AbstractController::isApiEnabled1100.0%
phpMyFAQ\Controller\AbstractController::addExtension1100.0%
phpMyFAQ\Controller\AbstractController::addFilter1100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::render1100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::userHasPermission1100.0%
phpMyFAQ\Controller\Administration\AbstractAdministrationController::getFooter1100.0%
phpMyFAQ\Controller\Administration\AdminLogController::index1100.0%
phpMyFAQ\Controller\Administration\Api\CategoryController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\CategoryController::translations1100.0%
phpMyFAQ\Controller\Administration\Api\CommentController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingKey1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingOrder1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::faqsSortingPopular1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::permLevel1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::releaseEnvironment1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::searchRelevance1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::seoMetaTags1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::translationProvider1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::mailProvider1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::layoutMode1100.0%
phpMyFAQ\Controller\Administration\Api\ConfigurationTabController::hasValidThemeCsrfToken1100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::verify1100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::searches1100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::contentHealth1100.0%
phpMyFAQ\Controller\Administration\Api\DashboardController::getLayout1100.0%
phpMyFAQ\Controller\Administration\Api\ElasticsearchController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\ExportController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::listPermissions1100.0%
phpMyFAQ\Controller\Administration\Api\FaqController::listByCategory1100.0%
phpMyFAQ\Controller\Administration\Api\GlossaryController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\GlossaryController::fetch1100.0%
phpMyFAQ\Controller\Administration\Api\GroupController::listCategories1100.0%
phpMyFAQ\Controller\Administration\Api\InstanceController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\LdapController::configuration1.0091.3%
phpMyFAQ\Controller\Administration\Api\NewsController::newsMessageFromPayload1100.0%
phpMyFAQ\Controller\Administration\Api\OpenSearchController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\PageController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\PageController::list1100.0%
phpMyFAQ\Controller\Administration\Api\QuestionController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\SessionController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\StatisticsController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\TagController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\TranslationController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\UpdateController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\UserController::__construct1100.0%
phpMyFAQ\Controller\Administration\Api\UserController::userPermissions1100.0%
phpMyFAQ\Controller\Administration\AttachmentsController::__construct1100.0%
phpMyFAQ\Controller\Administration\AuthenticationController::__construct1100.0%
phpMyFAQ\Controller\Administration\BackupController::__construct1100.0%
phpMyFAQ\Controller\Administration\BackupController::index1100.0%
phpMyFAQ\Controller\Administration\CategoryController::__construct1100.0%
phpMyFAQ\Controller\Administration\CategoryController::add1100.0%
phpMyFAQ\Controller\Administration\CategoryController::translate1100.0%
phpMyFAQ\Controller\Administration\CommentsController::__construct1100.0%
phpMyFAQ\Controller\Administration\ConfigurationController::index1100.0%
phpMyFAQ\Controller\Administration\DashboardController::__construct1100.0%
phpMyFAQ\Controller\Administration\ExportController::__construct1100.0%
phpMyFAQ\Controller\Administration\ExportController::index1100.0%
phpMyFAQ\Controller\Administration\FaqController::__construct1100.0%
phpMyFAQ\Controller\Administration\FaqController::index1100.0%
phpMyFAQ\Controller\Administration\FaqController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Administration\FormsController::__construct1100.0%
phpMyFAQ\Controller\Administration\FormsController::index1100.0%
phpMyFAQ\Controller\Administration\GlossaryController::__construct1100.0%
phpMyFAQ\Controller\Administration\GlossaryController::index1100.0%
phpMyFAQ\Controller\Administration\GroupController::__construct1100.0%
phpMyFAQ\Controller\Administration\GroupController::index1100.0%
phpMyFAQ\Controller\Administration\GroupController::add1100.0%
phpMyFAQ\Controller\Administration\GroupController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Administration\ImportController::index1100.0%
phpMyFAQ\Controller\Administration\InstanceController::__construct1100.0%
phpMyFAQ\Controller\Administration\InstanceController::index1100.0%
phpMyFAQ\Controller\Administration\InstanceController::edit1100.0%
phpMyFAQ\Controller\Administration\NewsController::__construct1100.0%
phpMyFAQ\Controller\Administration\NewsController::index1100.0%
phpMyFAQ\Controller\Administration\NewsController::add1100.0%
phpMyFAQ\Controller\Administration\NewsController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Administration\OpenQuestionsController::__construct1100.0%
phpMyFAQ\Controller\Administration\OrphanedFaqsController::__construct1100.0%
phpMyFAQ\Controller\Administration\OrphanedFaqsController::index1100.0%
phpMyFAQ\Controller\Administration\PageController::__construct1100.0%
phpMyFAQ\Controller\Administration\PageController::index1100.0%
phpMyFAQ\Controller\Administration\PageController::add1100.0%
phpMyFAQ\Controller\Administration\PageController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Administration\PasswordChangeController::__construct1100.0%
phpMyFAQ\Controller\Administration\PasswordChangeController::index1100.0%
phpMyFAQ\Controller\Administration\PasswordChangeController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Administration\PluginController::__construct1100.0%
phpMyFAQ\Controller\Administration\PluginController::index1100.0%
phpMyFAQ\Controller\Administration\RatingController::__construct1100.0%
phpMyFAQ\Controller\Administration\ReportController::index1100.0%
phpMyFAQ\Controller\Administration\SessionKeepAliveController::index1100.0%
phpMyFAQ\Controller\Administration\StatisticsSearchController::__construct1100.0%
phpMyFAQ\Controller\Administration\StatisticsSessionsController::__construct1100.0%
phpMyFAQ\Controller\Administration\StickyFaqsController::__construct1100.0%
phpMyFAQ\Controller\Administration\StopWordsController::index1100.0%
phpMyFAQ\Controller\Administration\SystemInformationController::__construct1100.0%
phpMyFAQ\Controller\Administration\TagController::__construct1100.0%
phpMyFAQ\Controller\Administration\TagController::index1100.0%
phpMyFAQ\Controller\Administration\UpdateController::index1100.0%
phpMyFAQ\Controller\Administration\UserController::__construct1100.0%
phpMyFAQ\Controller\Administration\UserController::index1100.0%
phpMyFAQ\Controller\Administration\UserController::edit1100.0%
phpMyFAQ\Controller\Administration\UserController::getBaseTemplateVars1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::getPaginationRequest1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::getSortRequest1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::getFilterRequest1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::apiResponse1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::errorResponse1100.0%
phpMyFAQ\Controller\Api\AbstractApiController::createResponseEtag1100.0%
phpMyFAQ\Controller\Api\CategoryController::__construct1100.0%
phpMyFAQ\Controller\Api\CategoryController::setCategoryFactory1100.0%
phpMyFAQ\Controller\Api\CategoryController::setCategoryPermissionFactory1100.0%
phpMyFAQ\Controller\Api\CategoryController::setOrderFactory1100.0%
phpMyFAQ\Controller\Api\CategoryController::list1100.0%
phpMyFAQ\Controller\Api\CommentController::__construct1100.0%
phpMyFAQ\Controller\Api\FaqController::__construct1100.0%
phpMyFAQ\Controller\Api\FaqController::applyRequestLanguage1100.0%
phpMyFAQ\Controller\Api\GlossaryController::__construct1100.0%
phpMyFAQ\Controller\Api\LanguageController::index1100.0%
phpMyFAQ\Controller\Api\MetaController::index1100.0%
phpMyFAQ\Controller\Api\NewsController::list1100.0%
phpMyFAQ\Controller\Api\OAuth2Controller::__construct1100.0%
phpMyFAQ\Controller\Api\OAuth2Controller::setAuthorizationServer1100.0%
phpMyFAQ\Controller\Api\OpenQuestionController::__construct1100.0%
phpMyFAQ\Controller\Api\PaginatedResponseOptions::__construct1100.0%
phpMyFAQ\Controller\Api\PdfController::setFaqFactory1100.0%
phpMyFAQ\Controller\Api\PdfController::setServicesFactory1100.0%
phpMyFAQ\Controller\Api\QuestionController::__construct1100.0%
phpMyFAQ\Controller\Api\RegistrationController::setRegistrationHelperFactory1100.0%
phpMyFAQ\Controller\Api\SearchController::__construct1100.0%
phpMyFAQ\Controller\Api\TagController::__construct1100.0%
phpMyFAQ\Controller\Api\TitleController::index1100.0%
phpMyFAQ\Controller\Api\VersionController::index1100.0%
phpMyFAQ\Controller\ContainerControllerResolver::__construct1100.0%
phpMyFAQ\Controller\Exception\ForbiddenException::__construct1100.0%
phpMyFAQ\Controller\Frontend\AccessibilityController::index1100.0%
phpMyFAQ\Controller\Frontend\Api\AutoCompleteController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\CaptchaController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController::getConversations1100.0%
phpMyFAQ\Controller\Frontend\Api\ChatController::getUnreadCount1100.0%
phpMyFAQ\Controller\Frontend\Api\ChatSseController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\CommentController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\ContactController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\FaqController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\PopularSearchesController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\PushController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\PushController::getVapidPublicKey1100.0%
phpMyFAQ\Controller\Frontend\Api\PushController::status1100.0%
phpMyFAQ\Controller\Frontend\Api\QuestionController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::isSecured1100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::createUpdate1100.0%
phpMyFAQ\Controller\Frontend\Api\SetupController::getUpdateToken1100.0%
phpMyFAQ\Controller\Frontend\Api\TranslationController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::json1100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::sendResetLinkEmail1100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::genericIssuanceResponse1100.0%
phpMyFAQ\Controller\Frontend\Api\UnauthorizedUserController::clientIp1100.0%
phpMyFAQ\Controller\Frontend\Api\UserController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\VotingController::__construct1100.0%
phpMyFAQ\Controller\Frontend\Api\WebAuthnController::__construct1100.0%
phpMyFAQ\Controller\Frontend\AttachmentController::__construct1100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::__construct1100.0%
phpMyFAQ\Controller\Frontend\AuthenticationController::forgotPassword1100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::__construct1100.0%
phpMyFAQ\Controller\Frontend\AzureAuthenticationController::logout1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::__construct1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::show1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::index1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::initializeCategory1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::initializeFaq1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::createCategoryHelper1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::renderSpecificCategory1100.0%
phpMyFAQ\Controller\Frontend\CategoryController::prepareSubCategoryHelper1100.0%
phpMyFAQ\Controller\Frontend\ChatController::__construct1100.0%
phpMyFAQ\Controller\Frontend\ContactController::__construct1100.0%
phpMyFAQ\Controller\Frontend\CookiePolicyController::index1100.0%
phpMyFAQ\Controller\Frontend\CustomPageController::__construct1100.0%
phpMyFAQ\Controller\Frontend\ErrorController::renderBootstrapError1100.0%
phpMyFAQ\Controller\Frontend\ErrorController::renderMinimalError1100.0%
phpMyFAQ\Controller\Frontend\FaqController::__construct1100.0%
phpMyFAQ\Controller\Frontend\GlossaryController::__construct1100.0%
phpMyFAQ\Controller\Frontend\ImprintController::index1100.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::__construct1100.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::setCurrentUserFactory1100.0%
phpMyFAQ\Controller\Frontend\KeycloakAuthenticationController::setUserFactory1100.0%
phpMyFAQ\Controller\Frontend\NewsController::__construct1100.0%
phpMyFAQ\Controller\Frontend\OAuthDiscoveryController::__construct1100.0%
phpMyFAQ\Controller\Frontend\OverviewController::__construct1100.0%
phpMyFAQ\Controller\Frontend\OverviewController::index1100.0%
phpMyFAQ\Controller\Frontend\PageNotFoundController::__construct1100.0%
phpMyFAQ\Controller\Frontend\PageNotFoundController::index1100.0%
phpMyFAQ\Controller\Frontend\PdfController::__construct1100.0%
phpMyFAQ\Controller\Frontend\PrivacyController::index1100.0%
phpMyFAQ\Controller\Frontend\QuestionsController::__construct1100.0%
phpMyFAQ\Controller\Frontend\SearchController::__construct1100.0%
phpMyFAQ\Controller\Frontend\SearchController::tagsPaginated1100.0%
phpMyFAQ\Controller\Frontend\SearchController::tags1100.0%
phpMyFAQ\Controller\Frontend\SetupController::render1100.0%
phpMyFAQ\Controller\Frontend\SitemapController::__construct1100.0%
phpMyFAQ\Controller\Frontend\StartpageController::__construct1100.0%
phpMyFAQ\Controller\Frontend\TermsController::index1100.0%
phpMyFAQ\Controller\Frontend\UserController::__construct1100.0%
phpMyFAQ\Controller\Frontend\WebAuthnController::__construct1100.0%
phpMyFAQ\Controller\LlmsController::index1100.0%
phpMyFAQ\Controller\RobotsController::index1100.0%
phpMyFAQ\Controller\SitemapController::__construct1100.0%
phpMyFAQ\Controller\SitemapController::sitemapGz1100.0%
phpMyFAQ\Controller\SitemapController::sitemapXmlGz1100.0%
phpMyFAQ\Core\Exception::__toString1100.0%
phpMyFAQ\CustomPage::__construct1100.0%
phpMyFAQ\CustomPage::countPages1100.0%
phpMyFAQ\CustomPage::countAllLanguages1100.0%
phpMyFAQ\CustomPage::getExistingLanguages1100.0%
phpMyFAQ\CustomPage::create1100.0%
phpMyFAQ\CustomPage::createTranslation1100.0%
phpMyFAQ\CustomPage::delete1100.0%
phpMyFAQ\CustomPage::activate1100.0%
phpMyFAQ\CustomPage::slugExists1100.0%
phpMyFAQ\CustomPage::mapRowToArray1100.0%
phpMyFAQ\CustomPage\CustomPageRepository::__construct1100.0%
phpMyFAQ\CustomPage\CustomPageRepository::delete1100.0%
phpMyFAQ\Database::getType1100.0%
phpMyFAQ\Database::checkOnEmptyTable1100.0%
phpMyFAQ\Database::setTablePrefix1100.0%
phpMyFAQ\Database::getTablePrefix1100.0%
phpMyFAQ\Database\DatabaseHelper::__construct1100.0%
phpMyFAQ\Database\DatabaseHelper::alignTablePrefix1100.0%
phpMyFAQ\Database\Mysqli::connection1100.0%
phpMyFAQ\Database\Mysqli::escape1100.0%
phpMyFAQ\Database\Mysqli::log1100.0%
phpMyFAQ\Database\Mysqli::getTableNames1100.0%
phpMyFAQ\Database\Mysqli::__destruct1100.0%
phpMyFAQ\Database\PdoMysql::pdo1100.0%
phpMyFAQ\Database\PdoMysql::error1100.0%
phpMyFAQ\Database\PdoMysql::escape1100.0%
phpMyFAQ\Database\PdoMysql::log1100.0%
phpMyFAQ\Database\PdoMysql::getTableNames1100.0%
phpMyFAQ\Database\PdoMysql::affectedRows1100.0%
phpMyFAQ\Database\PdoMysql::prepare1100.0%
phpMyFAQ\Database\PdoMysql::execute1100.0%
phpMyFAQ\Database\PdoMysql::clientVersion1100.0%
phpMyFAQ\Database\PdoMysql::serverVersion1100.0%
phpMyFAQ\Database\PdoMysql::close1100.0%
phpMyFAQ\Database\PdoMysql::__destruct1100.0%
phpMyFAQ\Database\PdoMysql::lastInsertId1100.0%
phpMyFAQ\Database\PdoMysql::now1100.0%
phpMyFAQ\Database\PdoPgsql::pdo1100.0%
phpMyFAQ\Database\PdoPgsql::error1100.0%
phpMyFAQ\Database\PdoPgsql::escape1100.0%
phpMyFAQ\Database\PdoPgsql::log1100.0%
phpMyFAQ\Database\PdoPgsql::getTableNames1100.0%
phpMyFAQ\Database\PdoPgsql::affectedRows1100.0%
phpMyFAQ\Database\PdoPgsql::prepare1100.0%
phpMyFAQ\Database\PdoPgsql::execute1100.0%
phpMyFAQ\Database\PdoPgsql::clientVersion1100.0%
phpMyFAQ\Database\PdoPgsql::serverVersion1100.0%
phpMyFAQ\Database\PdoPgsql::close1100.0%
phpMyFAQ\Database\PdoPgsql::__destruct1100.0%
phpMyFAQ\Database\PdoPgsql::lastInsertId1100.0%
phpMyFAQ\Database\PdoPgsql::now1100.0%
phpMyFAQ\Database\PdoSqlite::pdo1100.0%
phpMyFAQ\Database\PdoSqlite::__construct1100.0%
phpMyFAQ\Database\PdoSqlite::error1100.0%
phpMyFAQ\Database\PdoSqlite::escape1100.0%
phpMyFAQ\Database\PdoSqlite::log1100.0%
phpMyFAQ\Database\PdoSqlite::getTableNames1100.0%
phpMyFAQ\Database\PdoSqlite::affectedRows1100.0%
phpMyFAQ\Database\PdoSqlite::prepare1100.0%
phpMyFAQ\Database\PdoSqlite::execute1100.0%
phpMyFAQ\Database\PdoSqlite::clientVersion1100.0%
phpMyFAQ\Database\PdoSqlite::serverVersion1100.0%
phpMyFAQ\Database\PdoSqlite::close1100.0%
phpMyFAQ\Database\PdoSqlite::__destruct1100.0%
phpMyFAQ\Database\PdoSqlite::lastInsertId1100.0%
phpMyFAQ\Database\PdoSqlite::now1100.0%
phpMyFAQ\Database\PdoSqlsrv::pdo1100.0%
phpMyFAQ\Database\PdoSqlsrv::log1100.0%
phpMyFAQ\Database\PdoSqlsrv::getTableNames1100.0%
phpMyFAQ\Database\PdoSqlsrv::affectedRows1100.0%
phpMyFAQ\Database\PdoSqlsrv::prepare1100.0%
phpMyFAQ\Database\PdoSqlsrv::execute1100.0%
phpMyFAQ\Database\PdoSqlsrv::serverVersion1100.0%
phpMyFAQ\Database\PdoSqlsrv::close1100.0%
phpMyFAQ\Database\PdoSqlsrv::__destruct1100.0%
phpMyFAQ\Database\PdoSqlsrv::lastInsertId1100.0%
phpMyFAQ\Database\PdoSqlsrv::now1100.0%
phpMyFAQ\Database\Pgsql::error1100.0%
phpMyFAQ\Database\Pgsql::escape1100.0%
phpMyFAQ\Database\Pgsql::fetchObject1100.0%
phpMyFAQ\Database\Pgsql::fetchRow1100.0%
phpMyFAQ\Database\Pgsql::numRows1100.0%
phpMyFAQ\Database\Pgsql::log1100.0%
phpMyFAQ\Database\Pgsql::nextId1100.0%
phpMyFAQ\Database\Pgsql::clientVersion1100.0%
phpMyFAQ\Database\Pgsql::serverVersion1100.0%
phpMyFAQ\Database\Pgsql::getTableNames1100.0%
phpMyFAQ\Database\Pgsql::close1100.0%
phpMyFAQ\Database\Pgsql::now1100.0%
phpMyFAQ\Database\Sqlite3::connection1100.0%
phpMyFAQ\Database\Sqlite3::connect1100.0%
phpMyFAQ\Database\Sqlite3::escape1100.0%
phpMyFAQ\Database\Sqlite3::log1100.0%
phpMyFAQ\Database\Sqlite3::getTableNames1100.0%
phpMyFAQ\Database\Sqlite3::nextId1100.0%
phpMyFAQ\Database\Sqlite3::affectedRows1100.0%
phpMyFAQ\Database\Sqlite3::serverVersion1100.0%
phpMyFAQ\Database\Sqlite3::clientVersion1100.0%
phpMyFAQ\Database\Sqlite3::lastInsertId1100.0%
phpMyFAQ\Database\Sqlite3::now1100.0%
phpMyFAQ\Database\Sqlsrv::escape1100.0%
phpMyFAQ\Database\Sqlsrv::fetchRow1100.0%
phpMyFAQ\Database\Sqlsrv::log1100.0%
phpMyFAQ\Database\Sqlsrv::getTableNames1100.0%
phpMyFAQ\Database\Sqlsrv::now1100.0%
phpMyFAQ\Database\Sqlsrv::setConnectionOptions1100.0%
phpMyFAQ\Date::__construct1100.0%
phpMyFAQ\Encryption::__construct1100.0%
phpMyFAQ\Encryption::setSalt1100.0%
phpMyFAQ\EncryptionTypes\Bcrypt::encrypt1100.0%
phpMyFAQ\EncryptionTypes\Hash::encrypt1100.0%
phpMyFAQ\Entity\AdminLog::getId1100.0%
phpMyFAQ\Entity\AdminLog::setId1100.0%
phpMyFAQ\Entity\AdminLog::getTime1100.0%
phpMyFAQ\Entity\AdminLog::setTime1100.0%
phpMyFAQ\Entity\AdminLog::getUserId1100.0%
phpMyFAQ\Entity\AdminLog::setUserId1100.0%
phpMyFAQ\Entity\AdminLog::getText1100.0%
phpMyFAQ\Entity\AdminLog::setText1100.0%
phpMyFAQ\Entity\AdminLog::getIp1100.0%
phpMyFAQ\Entity\AdminLog::setIp1100.0%
phpMyFAQ\Entity\AdminLog::getHash1100.0%
phpMyFAQ\Entity\AdminLog::setHash1100.0%
phpMyFAQ\Entity\AdminLog::getPreviousHash1100.0%
phpMyFAQ\Entity\AdminLog::setPreviousHash1100.0%
phpMyFAQ\Entity\AdminLog::calculateHash1100.0%
phpMyFAQ\Entity\CategoryEntity::getActive1100.0%
phpMyFAQ\Entity\CategoryEntity::setActive1100.0%
phpMyFAQ\Entity\CategoryEntity::getDescription1100.0%
phpMyFAQ\Entity\CategoryEntity::setDescription1100.0%
phpMyFAQ\Entity\CategoryEntity::getGroupId1100.0%
phpMyFAQ\Entity\CategoryEntity::setGroupId1100.0%
phpMyFAQ\Entity\CategoryEntity::getId1100.0%
phpMyFAQ\Entity\CategoryEntity::setId1100.0%
phpMyFAQ\Entity\CategoryEntity::getLang1100.0%
phpMyFAQ\Entity\CategoryEntity::setLang1100.0%
phpMyFAQ\Entity\CategoryEntity::getName1100.0%
phpMyFAQ\Entity\CategoryEntity::setName1100.0%
phpMyFAQ\Entity\CategoryEntity::getParentId1100.0%
phpMyFAQ\Entity\CategoryEntity::setParentId1100.0%
phpMyFAQ\Entity\CategoryEntity::getUserId1100.0%
phpMyFAQ\Entity\CategoryEntity::setUserId1100.0%
phpMyFAQ\Entity\CategoryEntity::getImage1100.0%
phpMyFAQ\Entity\CategoryEntity::setImage1100.0%
phpMyFAQ\Entity\CategoryEntity::getShowHome1100.0%
phpMyFAQ\Entity\CategoryEntity::setShowHome1100.0%
phpMyFAQ\Entity\ChatMessage::getId1100.0%
phpMyFAQ\Entity\ChatMessage::setId1100.0%
phpMyFAQ\Entity\ChatMessage::getSenderId1100.0%
phpMyFAQ\Entity\ChatMessage::setSenderId1100.0%
phpMyFAQ\Entity\ChatMessage::getRecipientId1100.0%
phpMyFAQ\Entity\ChatMessage::setRecipientId1100.0%
phpMyFAQ\Entity\ChatMessage::getMessage1100.0%
phpMyFAQ\Entity\ChatMessage::setMessage1100.0%
phpMyFAQ\Entity\ChatMessage::isRead1100.0%
phpMyFAQ\Entity\ChatMessage::setIsRead1100.0%
phpMyFAQ\Entity\ChatMessage::getCreatedAt1100.0%
phpMyFAQ\Entity\ChatMessage::setCreatedAt1100.0%
phpMyFAQ\Entity\Comment::getId1100.0%
phpMyFAQ\Entity\Comment::setId1100.0%
phpMyFAQ\Entity\Comment::getRecordId1100.0%
phpMyFAQ\Entity\Comment::setRecordId1100.0%
phpMyFAQ\Entity\Comment::getCategoryId1100.0%
phpMyFAQ\Entity\Comment::setCategoryId1100.0%
phpMyFAQ\Entity\Comment::getType1100.0%
phpMyFAQ\Entity\Comment::setType1100.0%
phpMyFAQ\Entity\Comment::getUsername1100.0%
phpMyFAQ\Entity\Comment::setUsername1100.0%
phpMyFAQ\Entity\Comment::getEmail1100.0%
phpMyFAQ\Entity\Comment::setEmail1100.0%
phpMyFAQ\Entity\Comment::getComment1100.0%
phpMyFAQ\Entity\Comment::setComment1100.0%
phpMyFAQ\Entity\Comment::getDate1100.0%
phpMyFAQ\Entity\Comment::setDate1100.0%
phpMyFAQ\Entity\Comment::hasHelped1100.0%
phpMyFAQ\Entity\Comment::setHelped1100.0%
phpMyFAQ\Entity\CustomPageEntity::getId1100.0%
phpMyFAQ\Entity\CustomPageEntity::setId1100.0%
phpMyFAQ\Entity\CustomPageEntity::getLanguage1100.0%
phpMyFAQ\Entity\CustomPageEntity::setLanguage1100.0%
phpMyFAQ\Entity\CustomPageEntity::getPageTitle1100.0%
phpMyFAQ\Entity\CustomPageEntity::setPageTitle1100.0%
phpMyFAQ\Entity\CustomPageEntity::getSlug1100.0%
phpMyFAQ\Entity\CustomPageEntity::setSlug1100.0%
phpMyFAQ\Entity\CustomPageEntity::getContent1100.0%
phpMyFAQ\Entity\CustomPageEntity::setContent1100.0%
phpMyFAQ\Entity\CustomPageEntity::getAuthorName1100.0%
phpMyFAQ\Entity\CustomPageEntity::setAuthorName1100.0%
phpMyFAQ\Entity\CustomPageEntity::getAuthorEmail1100.0%
phpMyFAQ\Entity\CustomPageEntity::setAuthorEmail1100.0%
phpMyFAQ\Entity\CustomPageEntity::isActive1100.0%
phpMyFAQ\Entity\CustomPageEntity::setActive1100.0%
phpMyFAQ\Entity\CustomPageEntity::getCreated1100.0%
phpMyFAQ\Entity\CustomPageEntity::setCreated1100.0%
phpMyFAQ\Entity\CustomPageEntity::getUpdated1100.0%
phpMyFAQ\Entity\CustomPageEntity::setUpdated1100.0%
phpMyFAQ\Entity\CustomPageEntity::getSeoTitle1100.0%
phpMyFAQ\Entity\CustomPageEntity::setSeoTitle1100.0%
phpMyFAQ\Entity\CustomPageEntity::getSeoDescription1100.0%
phpMyFAQ\Entity\CustomPageEntity::setSeoDescription1100.0%
phpMyFAQ\Entity\CustomPageEntity::getSeoRobots1100.0%
phpMyFAQ\Entity\CustomPageEntity::setSeoRobots1100.0%
phpMyFAQ\Entity\FaqEntity::getId1100.0%
phpMyFAQ\Entity\FaqEntity::setId1100.0%
phpMyFAQ\Entity\FaqEntity::getLanguage1100.0%
phpMyFAQ\Entity\FaqEntity::setLanguage1100.0%
phpMyFAQ\Entity\FaqEntity::getSolutionId1100.0%
phpMyFAQ\Entity\FaqEntity::setSolutionId1100.0%
phpMyFAQ\Entity\FaqEntity::getRevisionId1100.0%
phpMyFAQ\Entity\FaqEntity::setRevisionId1100.0%
phpMyFAQ\Entity\FaqEntity::isActive1100.0%
phpMyFAQ\Entity\FaqEntity::setActive1100.0%
phpMyFAQ\Entity\FaqEntity::isSticky1100.0%
phpMyFAQ\Entity\FaqEntity::setSticky1100.0%
phpMyFAQ\Entity\FaqEntity::getKeywords1100.0%
phpMyFAQ\Entity\FaqEntity::setKeywords1100.0%
phpMyFAQ\Entity\FaqEntity::getQuestion1100.0%
phpMyFAQ\Entity\FaqEntity::setQuestion1100.0%
phpMyFAQ\Entity\FaqEntity::getAnswer1100.0%
phpMyFAQ\Entity\FaqEntity::setAnswer1100.0%
phpMyFAQ\Entity\FaqEntity::getAuthor1100.0%
phpMyFAQ\Entity\FaqEntity::setAuthor1100.0%
phpMyFAQ\Entity\FaqEntity::getEmail1100.0%
phpMyFAQ\Entity\FaqEntity::setEmail1100.0%
phpMyFAQ\Entity\FaqEntity::isComment1100.0%
phpMyFAQ\Entity\FaqEntity::setComment1100.0%
phpMyFAQ\Entity\FaqEntity::getNotes1100.0%
phpMyFAQ\Entity\FaqEntity::setNotes1100.0%
phpMyFAQ\Entity\FaqEntity::setValidFrom1100.0%
phpMyFAQ\Entity\FaqEntity::setValidTo1100.0%
phpMyFAQ\Entity\FaqEntity::setCreatedDate1100.0%
phpMyFAQ\Entity\FaqEntity::getUpdatedDate1100.0%
phpMyFAQ\Entity\FaqEntity::setUpdatedDate1100.0%
phpMyFAQ\Entity\InstanceEntity::getUrl1100.0%
phpMyFAQ\Entity\InstanceEntity::setUrl1100.0%
phpMyFAQ\Entity\InstanceEntity::getInstance1100.0%
phpMyFAQ\Entity\InstanceEntity::setInstance1100.0%
phpMyFAQ\Entity\InstanceEntity::getComment1100.0%
phpMyFAQ\Entity\InstanceEntity::setComment1100.0%
phpMyFAQ\Entity\NewsMessage::getId1100.0%
phpMyFAQ\Entity\NewsMessage::setId1100.0%
phpMyFAQ\Entity\NewsMessage::getLanguage1100.0%
phpMyFAQ\Entity\NewsMessage::setLanguage1100.0%
phpMyFAQ\Entity\NewsMessage::getHeader1100.0%
phpMyFAQ\Entity\NewsMessage::setHeader1100.0%
phpMyFAQ\Entity\NewsMessage::getMessage1100.0%
phpMyFAQ\Entity\NewsMessage::setMessage1100.0%
phpMyFAQ\Entity\NewsMessage::getCreated1100.0%
phpMyFAQ\Entity\NewsMessage::setCreated1100.0%
phpMyFAQ\Entity\NewsMessage::getAuthor1100.0%
phpMyFAQ\Entity\NewsMessage::setAuthor1100.0%
phpMyFAQ\Entity\NewsMessage::getEmail1100.0%
phpMyFAQ\Entity\NewsMessage::setEmail1100.0%
phpMyFAQ\Entity\NewsMessage::isActive1100.0%
phpMyFAQ\Entity\NewsMessage::setActive1100.0%
phpMyFAQ\Entity\NewsMessage::isComment1100.0%
phpMyFAQ\Entity\NewsMessage::setComment1100.0%
phpMyFAQ\Entity\NewsMessage::getDateStart1100.0%
phpMyFAQ\Entity\NewsMessage::setDateStart1100.0%
phpMyFAQ\Entity\NewsMessage::getDateEnd1100.0%
phpMyFAQ\Entity\NewsMessage::setDateEnd1100.0%
phpMyFAQ\Entity\NewsMessage::getLink1100.0%
phpMyFAQ\Entity\NewsMessage::setLink1100.0%
phpMyFAQ\Entity\NewsMessage::getLinkTitle1100.0%
phpMyFAQ\Entity\NewsMessage::setLinkTitle1100.0%
phpMyFAQ\Entity\NewsMessage::getLinkTarget1100.0%
phpMyFAQ\Entity\NewsMessage::setLinkTarget1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getId1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setId1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getUserId1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setUserId1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getEndpoint1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setEndpoint1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getEndpointHash1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setEndpointHash1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getPublicKey1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setPublicKey1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getAuthToken1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setAuthToken1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getContentEncoding1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setContentEncoding1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::getCreatedAt1100.0%
phpMyFAQ\Entity\PushSubscriptionEntity::setCreatedAt1100.0%
phpMyFAQ\Entity\QuestionEntity::getId1100.0%
phpMyFAQ\Entity\QuestionEntity::setId1100.0%
phpMyFAQ\Entity\QuestionEntity::getLanguage1100.0%
phpMyFAQ\Entity\QuestionEntity::setLanguage1100.0%
phpMyFAQ\Entity\QuestionEntity::getUsername1100.0%
phpMyFAQ\Entity\QuestionEntity::setUsername1100.0%
phpMyFAQ\Entity\QuestionEntity::getEmail1100.0%
phpMyFAQ\Entity\QuestionEntity::setEmail1100.0%
phpMyFAQ\Entity\QuestionEntity::getCategoryId1100.0%
phpMyFAQ\Entity\QuestionEntity::setCategoryId1100.0%
phpMyFAQ\Entity\QuestionEntity::getQuestion1100.0%
phpMyFAQ\Entity\QuestionEntity::setQuestion1100.0%
phpMyFAQ\Entity\QuestionEntity::getCreated1100.0%
phpMyFAQ\Entity\QuestionEntity::setCreated1100.0%
phpMyFAQ\Entity\QuestionEntity::getAnswerId1100.0%
phpMyFAQ\Entity\QuestionEntity::setAnswerId1100.0%
phpMyFAQ\Entity\QuestionEntity::isVisible1100.0%
phpMyFAQ\Entity\QuestionEntity::setIsVisible1100.0%
phpMyFAQ\Entity\SeoEntity::getId1100.0%
phpMyFAQ\Entity\SeoEntity::setId1100.0%
phpMyFAQ\Entity\SeoEntity::getSeoType1100.0%
phpMyFAQ\Entity\SeoEntity::setSeoType1100.0%
phpMyFAQ\Entity\SeoEntity::getReferenceId1100.0%
phpMyFAQ\Entity\SeoEntity::setReferenceId1100.0%
phpMyFAQ\Entity\SeoEntity::getReferenceLanguage1100.0%
phpMyFAQ\Entity\SeoEntity::setReferenceLanguage1100.0%
phpMyFAQ\Entity\SeoEntity::getTitle1100.0%
phpMyFAQ\Entity\SeoEntity::setTitle1100.0%
phpMyFAQ\Entity\SeoEntity::getDescription1100.0%
phpMyFAQ\Entity\SeoEntity::setDescription1100.0%
phpMyFAQ\Entity\SeoEntity::getSlug1100.0%
phpMyFAQ\Entity\SeoEntity::setSlug1100.0%
phpMyFAQ\Entity\SeoEntity::getCreated1100.0%
phpMyFAQ\Entity\SeoEntity::setCreated1100.0%
phpMyFAQ\Entity\Tag::getId1100.0%
phpMyFAQ\Entity\Tag::setId1100.0%
phpMyFAQ\Entity\Tag::getName1100.0%
phpMyFAQ\Entity\Tag::setName1100.0%
phpMyFAQ\Entity\Vote::getId1100.0%
phpMyFAQ\Entity\Vote::setId1100.0%
phpMyFAQ\Entity\Vote::getFaqId1100.0%
phpMyFAQ\Entity\Vote::setFaqId1100.0%
phpMyFAQ\Entity\Vote::getVote1100.0%
phpMyFAQ\Entity\Vote::setVote1100.0%
phpMyFAQ\Entity\Vote::getUsers1100.0%
phpMyFAQ\Entity\Vote::setUsers1100.0%
phpMyFAQ\Entity\Vote::getCreatedAt1100.0%
phpMyFAQ\Entity\Vote::setCreatedAt1100.0%
phpMyFAQ\Entity\Vote::getIp1100.0%
phpMyFAQ\Entity\Vote::setIp1100.0%
phpMyFAQ\Environment::enableTestMode1100.0%
phpMyFAQ\Environment::isDebugMode1100.0%
phpMyFAQ\Environment::shouldLogQueries1100.0%
phpMyFAQ\Environment::get1100.0%
phpMyFAQ\Environment::getEnvironment1100.0%
phpMyFAQ\Environment::isProduction1100.0%
phpMyFAQ\Environment::isDevelopment1100.0%
phpMyFAQ\EventListener\ApiExceptionListener::__construct1100.0%
phpMyFAQ\EventListener\ApiRateLimiterListener::__construct1100.0%
phpMyFAQ\EventListener\ControllerContainerListener::__construct1100.0%
phpMyFAQ\EventListener\LanguageListener::__construct1100.0%
phpMyFAQ\EventListener\LanguageListener::initializeTranslation1100.0%
phpMyFAQ\EventListener\RouterListener::__construct1100.0%
phpMyFAQ\EventListener\WebExceptionListener::__construct1100.0%
phpMyFAQ\EventListener\WebExceptionListener::handleServerError1100.0%
phpMyFAQ\EventListener\WebExceptionListener::formatExceptionMessage1100.0%
phpMyFAQ\Export\Json::__construct1100.0%
phpMyFAQ\Export\Pdf::__construct1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::setHeaderRenderer1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfDocument::setFooterRenderer1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::__construct1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::open1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::output1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addPage1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setPrintHeader1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setDisplayMode1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::bookmark1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setMargins1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setFont1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setRtl1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::ln1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::writeHtml1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::writeHtmlCell1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::multiCell1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::cell1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setY1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::setTextColor1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getLastH1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addTocPage1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::addToc1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::endTocPage1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getAliasNumPage1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::getAliasNbPages1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::onHeader1100.0%
phpMyFAQ\Export\Pdf\Engine\TcpdfEngine::onFooter1100.0%
phpMyFAQ\Export\Pdf\Wrapper::config1100.0%
phpMyFAQ\Export\Pdf\Wrapper::Open1100.0%
phpMyFAQ\Export\Pdf\Wrapper::Output1100.0%
phpMyFAQ\Export\Pdf\Wrapper::AddPage1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setPrintHeader1100.0%
phpMyFAQ\Export\Pdf\Wrapper::SetDisplayMode1100.0%
phpMyFAQ\Export\Pdf\Wrapper::Bookmark1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setCategory1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setQuestion1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setCategories1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setConfig1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setCustomHeader1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setCustomFooter1100.0%
phpMyFAQ\Export\Pdf\Wrapper::addFaqToc1100.0%
phpMyFAQ\Export\Pdf\Wrapper::getCurrentFont1100.0%
phpMyFAQ\Export\Pdf\Wrapper::setFaq1100.0%
phpMyFAQ\Export\Pdf\Wrapper::WriteHTML1100.0%
phpMyFAQ\Faq::setUser1100.0%
phpMyFAQ\Faq::setGroups1100.0%
phpMyFAQ\Faq::isFaqRecordVisible1100.0%
phpMyFAQ\Faq::getFaqResult1100.0%
phpMyFAQ\Faq::getTenantQuotaEnforcer1100.0%
phpMyFAQ\Faq::getNextSolutionId1100.0%
phpMyFAQ\Faq::update1100.0%
phpMyFAQ\Faq::getSolutionIdFromId1100.0%
phpMyFAQ\Faq::hasTranslation1100.0%
phpMyFAQ\Faq::isActive1100.0%
phpMyFAQ\Faq::getIdFromSolutionId1100.0%
phpMyFAQ\Faq::sortStickyArrayByOrder1100.0%
phpMyFAQ\Faq::hasTitleAHash1100.0%
phpMyFAQ\Faq\FaqCreationService::__construct1100.0%
phpMyFAQ\Faq\FaqDisplayService::__construct1100.0%
phpMyFAQ\Faq\FaqDisplayService::isExpired1100.0%
phpMyFAQ\Faq\FaqDisplayService::getNumberOfComments1100.0%
phpMyFAQ\Faq\FaqDisplayService::getCommentsData1100.0%
phpMyFAQ\Faq\FaqDisplayService::getAvailableLanguages1100.0%
phpMyFAQ\Faq\FaqDisplayService::getTagsHtml1100.0%
phpMyFAQ\Faq\FaqDisplayService::getRating1100.0%
phpMyFAQ\Faq\FaqDisplayService::getFaqHelper1100.0%
phpMyFAQ\Faq\FaqDisplayService::processHighlight1100.0%
phpMyFAQ\Faq\FaqRepository::__construct1100.0%
phpMyFAQ\Faq\FaqRepository::hasTranslation1100.0%
phpMyFAQ\Faq\FaqRepository::isFaqVisibleForUser1100.0%
phpMyFAQ\Faq\FaqRepository::fetchAvailableFaqsByCategoryId1100.0%
phpMyFAQ\Faq\FaqRepository::fetchStickyFaqs1100.0%
phpMyFAQ\Faq\FaqRepository::fetchAllFaqs1100.0%
phpMyFAQ\Faq\FaqRepository::queryRenderableFaqsByCategoryId1100.0%
phpMyFAQ\Faq\FaqRepository::queryRenderableFaqsByIds1100.0%
phpMyFAQ\Faq\Import::__construct1100.0%
phpMyFAQ\Faq\Import::isCSVFile1100.0%
phpMyFAQ\Faq\MetaData::__construct1100.0%
phpMyFAQ\Faq\MetaData::setFaqId1100.0%
phpMyFAQ\Faq\MetaData::setFaqLanguage1100.0%
phpMyFAQ\Faq\MetaData::setCategories1100.0%
phpMyFAQ\Faq\Permission::__construct1100.0%
phpMyFAQ\Faq\QueryHelper::__construct1100.0%
phpMyFAQ\Faq\QueryHelper::groupGrantExists1100.0%
phpMyFAQ\Faq\QuestionService::__construct1100.0%
phpMyFAQ\Faq\QuestionService::prepareAskQuestionData1100.0%
phpMyFAQ\Faq\RecordVisibility::__construct1100.0%
phpMyFAQ\Faq\RecordVisibility::isActivated1100.0%
phpMyFAQ\Faq\Statistics::setUser1100.0%
phpMyFAQ\Faq\Statistics::setGroups1100.0%
phpMyFAQ\Filesystem\Filesystem::getRootPath1100.0%
phpMyFAQ\Filesystem\Filesystem::getPath1100.0%
phpMyFAQ\Filesystem\Filesystem::setPath1100.0%
phpMyFAQ\Filesystem\Filesystem::moveDirectory1100.0%
phpMyFAQ\Filter::filterInputArray1100.0%
phpMyFAQ\Filter::filterArray1100.0%
phpMyFAQ\Filter::filterSanitizeString1100.0%
phpMyFAQ\Filter::removeAttributes1100.0%
phpMyFAQ\Filter::sanitizerConfig1100.0%
phpMyFAQ\Form\FormsFactory::create1100.0%
phpMyFAQ\Form\FormsRepository::__construct1100.0%
phpMyFAQ\Form\FormsRepository::updateInputActive1100.0%
phpMyFAQ\Form\FormsRepository::updateInputRequired1100.0%
phpMyFAQ\Form\FormsRepository::updateTranslation1100.0%
phpMyFAQ\Form\FormsRepository::deleteTranslation1100.0%
phpMyFAQ\Form\FormsRepository::insertTranslationRow1100.0%
phpMyFAQ\Form\FormsRepository::insertInput1100.0%
phpMyFAQ\Form\FormsRepository::buildInsertQuery1100.0%
phpMyFAQ\Forms::__construct1100.0%
phpMyFAQ\Forms::getFormData1100.0%
phpMyFAQ\Forms::editTranslation1100.0%
phpMyFAQ\Forms::deleteTranslation1100.0%
phpMyFAQ\Forms::insertInputIntoDatabase1100.0%
phpMyFAQ\Forms::getInsertQueries1100.0%
phpMyFAQ\Forms::saveActivateInputStatus1100.0%
phpMyFAQ\Forms::saveRequiredInputStatus1100.0%
phpMyFAQ\Glossary::__construct1100.0%
phpMyFAQ\Glossary::fetch1100.0%
phpMyFAQ\Glossary::setLanguage1100.0%
phpMyFAQ\Glossary\GlossaryHelper::formatTooltip1100.0%
phpMyFAQ\Glossary\GlossaryRepository::__construct1100.0%
phpMyFAQ\Helper\AbstractHelper::setCategory1100.0%
phpMyFAQ\Helper\AbstractHelper::getCategory1100.0%
phpMyFAQ\Helper\AbstractHelper::category1100.0%
phpMyFAQ\Helper\AbstractHelper::plurals1100.0%
phpMyFAQ\Helper\AbstractHelper::setCategoryRelation1100.0%
phpMyFAQ\Helper\AbstractHelper::setTags1100.0%
phpMyFAQ\Helper\AbstractHelper::setPlurals1100.0%
phpMyFAQ\Helper\AbstractHelper::setSessionId1100.0%
phpMyFAQ\Helper\AbstractHelper::setConfiguration1100.0%
phpMyFAQ\Helper\AbstractHelper::getConfiguration1100.0%
phpMyFAQ\Helper\CategoryHelper::gatherCategoryData1100.0%
phpMyFAQ\Helper\FaqHelper::__construct1100.0%
phpMyFAQ\Helper\FaqHelper::rewriteUrlFragments1100.0%
phpMyFAQ\Helper\FaqHelper::createFaqUrl1100.0%
phpMyFAQ\Helper\MailHelper::__construct1100.0%
phpMyFAQ\Helper\RegistrationHelper::__construct1100.0%
phpMyFAQ\Helper\SearchHelper::__construct1100.0%
phpMyFAQ\Helper\SearchHelper::setSearchTerm1100.0%
phpMyFAQ\Helper\StatisticsHelper::__construct1100.0%
phpMyFAQ\Helper\SvgSanitizer::shouldReject1100.0%
phpMyFAQ\Helper\TagsHelper::getTaggingIds1100.0%
phpMyFAQ\Helper\TagsHelper::setTaggingIds1100.0%
phpMyFAQ\Helper\TagsHelper::renderRelatedTag1100.0%
phpMyFAQ\Helper\UserHelper::__construct1100.0%
phpMyFAQ\Http\RateLimiter::peek1100.0%
phpMyFAQ\Http\RateLimiter::getHeaders1100.0%
phpMyFAQ\Instance::__construct1100.0%
phpMyFAQ\Instance::getId1100.0%
phpMyFAQ\Instance::setId1100.0%
phpMyFAQ\Instance::getAll1100.0%
phpMyFAQ\Instance::update1100.0%
phpMyFAQ\Instance::addConfig1100.0%
phpMyFAQ\Instance\Client::__construct1100.0%
phpMyFAQ\Instance\Client::setClientUrl1100.0%
phpMyFAQ\Instance\Client::setFileSystem1100.0%
phpMyFAQ\Instance\Client::filesystem1100.0%
phpMyFAQ\Instance\Client::insertSeedRows1100.0%
phpMyFAQ\Instance\Client::copyConstantsFile1100.0%
phpMyFAQ\Instance\Client::isValidClientUrl1100.0%
phpMyFAQ\Instance\Client::buildClientFolderPath1100.0%
phpMyFAQ\Instance\Database::getInstance1100.0%
phpMyFAQ\Instance\Database\Mysqli::__construct1100.0%
phpMyFAQ\Instance\Database\PdoMysql::__construct1100.0%
phpMyFAQ\Instance\Database\PdoPgsql::__construct1100.0%
phpMyFAQ\Instance\Database\PdoSqlite::__construct1100.0%
phpMyFAQ\Instance\Database\PdoSqlsrv::__construct1100.0%
phpMyFAQ\Instance\Database\Pgsql::__construct1100.0%
phpMyFAQ\Instance\Database\Sqlite3::__construct1100.0%
phpMyFAQ\Instance\Database\Sqlsrv::__construct1100.0%
phpMyFAQ\Instance\Database\Stopwords::__construct1100.0%
phpMyFAQ\Instance\Main::createMain1100.0%
phpMyFAQ\Instance\Search\Elasticsearch::getParams1100.0%
phpMyFAQ\Instance\Search\Elasticsearch::buildMappings1100.0%
phpMyFAQ\Instance\Search\OpenSearch::getParams1100.0%
phpMyFAQ\Instance\Search\OpenSearch::getMapping1100.0%
phpMyFAQ\Instance\Search\OpenSearch::dropIndex1100.0%
phpMyFAQ\Instance\Search\OpenSearch::index1100.0%
phpMyFAQ\Instance\Search\OpenSearch::update1100.0%
phpMyFAQ\Instance\Search\OpenSearch::delete1100.0%
phpMyFAQ\Instance\Setup::__construct1100.0%
phpMyFAQ\Instance\Setup::setRootDir1100.0%
phpMyFAQ\Instance\Setup::escapeForSingleQuotedPhpString1100.0%
phpMyFAQ\Instance\Setup::createLdapFile1100.0%
phpMyFAQ\Kernel::__construct1100.0%
phpMyFAQ\Kernel::getRoutingContext1100.0%
phpMyFAQ\Kernel::isDebug1100.0%
phpMyFAQ\Kernel::buildContainer1100.0%
phpMyFAQ\Language::__construct1100.0%
phpMyFAQ\Language::setLanguageWithDetection1100.0%
phpMyFAQ\Language::setLanguageFromConfiguration1100.0%
phpMyFAQ\Language::setLanguageByAcceptLanguage1100.0%
phpMyFAQ\Language\LanguageCodes::getAll1100.0%
phpMyFAQ\Language\LanguageCodes::getAllSorted1100.0%
phpMyFAQ\Language\LanguageCodes::get1100.0%
phpMyFAQ\Language\LanguageCodes::getKey1100.0%
phpMyFAQ\Language\LanguageCodes::getAllSupported1100.0%
phpMyFAQ\Language\LanguageDetector::__construct1100.0%
phpMyFAQ\Language\LanguageDetector::detectAllWithBrowser1100.0%
phpMyFAQ\Language\LanguageDetector::detectAllFromConfig1100.0%
phpMyFAQ\Language\LanguageDetector::aggregateWithBrowser1100.0%
phpMyFAQ\Language\LanguageDetector::aggregateWithoutBrowser1100.0%
phpMyFAQ\Language\Plurals::get1100.0%
phpMyFAQ\Ldap::__construct1100.0%
phpMyFAQ\Ldap::getMail1100.0%
phpMyFAQ\Ldap::quote1100.0%
phpMyFAQ\Ldap::getDn1100.0%
phpMyFAQ\Ldap::getCompleteName1100.0%
phpMyFAQ\Link::setRelation1100.0%
phpMyFAQ\Link::getSystemUri1100.0%
phpMyFAQ\Link::escapeAttr1100.0%
phpMyFAQ\Link::escapeUrl1100.0%
phpMyFAQ\Link::getHttpGetParameters1100.0%
phpMyFAQ\Link::setTitle1100.0%
phpMyFAQ\Link::getStrategyRegistry1100.0%
phpMyFAQ\Link::registerStrategy1100.0%
phpMyFAQ\Link\Strategy\GenericPathStrategy::__construct1100.0%
phpMyFAQ\Link\Strategy\GenericPathStrategy::build1100.0%
phpMyFAQ\Link\Strategy\SitemapStrategy::build1100.0%
phpMyFAQ\Link\Strategy\StrategyRegistry::register1100.0%
phpMyFAQ\Link\Strategy\StrategyRegistry::has1100.0%
phpMyFAQ\Link\Strategy\StrategyRegistry::get1100.0%
phpMyFAQ\Link\Util\TitleSlugifier::slug1100.0%
phpMyFAQ\Mail::createBoundary1100.0%
phpMyFAQ\Mail::setFrom1100.0%
phpMyFAQ\Mail::addCc1100.0%
phpMyFAQ\Mail::addTo1100.0%
phpMyFAQ\Mail::getDate1100.0%
phpMyFAQ\Mail::getTime1100.0%
phpMyFAQ\Mail::fixEOL1100.0%
phpMyFAQ\Mail::setReplyTo1100.0%
phpMyFAQ\Mail\Builtin::stripNewlines1100.0%
phpMyFAQ\Mail\Provider\MailgunProvider::__construct1100.0%
phpMyFAQ\Mail\Provider\SendGridProvider::__construct1100.0%
phpMyFAQ\Mail\Provider\SesProvider::__construct1100.0%
phpMyFAQ\Network::__construct1100.0%
phpMyFAQ\Network::isBanned1100.0%
phpMyFAQ\News::__construct1100.0%
phpMyFAQ\News::countLatestData1100.0%
phpMyFAQ\News::create1100.0%
phpMyFAQ\News::update1100.0%
phpMyFAQ\News::delete1100.0%
phpMyFAQ\News::activate1100.0%
phpMyFAQ\News::deactivate1100.0%
phpMyFAQ\News\NewsRepository::__construct1100.0%
phpMyFAQ\News\NewsRepository::delete1100.0%
phpMyFAQ\News\NewsService::__construct1100.0%
phpMyFAQ\News\NewsService::processContent1100.0%
phpMyFAQ\News\NewsService::buildInformationLink1100.0%
phpMyFAQ\Notification::__construct1100.0%
phpMyFAQ\Notification::createCategory1100.0%
phpMyFAQ\Notification::createUser1100.0%
phpMyFAQ\Pagination::__construct1100.0%
phpMyFAQ\Pagination::render1100.0%
phpMyFAQ\Pagination::renderLink1100.0%
phpMyFAQ\Pagination::renderLayout1100.0%
phpMyFAQ\Pagination\PaginationTemplates::__construct1100.0%
phpMyFAQ\Pagination\PaginationTemplates::default1100.0%
phpMyFAQ\Pagination\UrlConfig::__construct1100.0%
phpMyFAQ\Permission\BasicPermission::__construct1100.0%
phpMyFAQ\Permission\BasicPermission::getRightData1100.0%
phpMyFAQ\Permission\BasicPermission::getRightId1100.0%
phpMyFAQ\Permission\BasicPermission::checkUserRight1100.0%
phpMyFAQ\Permission\BasicPermission::getAllUserRights1100.0%
phpMyFAQ\Permission\BasicPermission::getUserRights1100.0%
phpMyFAQ\Permission\BasicPermission::getAllRightsData1100.0%
phpMyFAQ\Permission\BasicPermission::refuseAllUserRights1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::__construct1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::grantUserRight1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::addRight1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::renameRight1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::refuseAllUserRights1100.0%
phpMyFAQ\Permission\BasicPermissionRepository::nextRightId1100.0%
phpMyFAQ\Permission\GroupCategoryPermissionRepository::__construct1100.0%
phpMyFAQ\Permission\MediumPermission::__construct1100.0%
phpMyFAQ\Permission\MediumPermission::getGroupRights1100.0%
phpMyFAQ\Permission\MediumPermission::checkUserGroupRight1100.0%
phpMyFAQ\Permission\MediumPermission::getGroupId1100.0%
phpMyFAQ\Permission\MediumPermission::changeGroup1100.0%
phpMyFAQ\Permission\MediumPermission::getGroupMembers1100.0%
phpMyFAQ\Permission\MediumPermission::getUserGroups1100.0%
phpMyFAQ\Permission\MediumPermission::getGroupName1100.0%
phpMyFAQ\Permission\MediumPermission::getUserGroupRights1100.0%
phpMyFAQ\Permission\MediumPermission::getGroupData1100.0%
phpMyFAQ\Permission\MediumPermission::removeFromAllGroups1100.0%
phpMyFAQ\Permission\MediumPermission::refuseAllGroupRights1100.0%
phpMyFAQ\Permission\MediumPermission::removeAllUsersFromGroup1100.0%
phpMyFAQ\Permission\MediumPermission::getCategoryRestrictions1100.0%
phpMyFAQ\Permission\MediumPermission::getAllCategoryRestrictions1100.0%
phpMyFAQ\Permission\MediumPermission::setCategoryRestrictions1100.0%
phpMyFAQ\Permission\MediumPermissionRepository::__construct1100.0%
phpMyFAQ\Permission\MediumPermissionRepository::addGroup1100.0%
phpMyFAQ\Permission\MediumPermissionRepository::deleteGroupMemberships1100.0%
phpMyFAQ\Permission\MediumPermissionRepository::deleteGroupRights1100.0%
phpMyFAQ\Permission\MediumPermissionRepository::nextGroupId1100.0%
phpMyFAQ\Plugin\PluginDiscovery::__construct1100.0%
phpMyFAQ\Plugin\PluginDiscovery::normalizedPluginDir1100.0%
phpMyFAQ\Plugin\PluginEvent::__construct1100.0%
phpMyFAQ\Plugin\PluginEvent::getData1100.0%
phpMyFAQ\Plugin\PluginEvent::setOutput1100.0%
phpMyFAQ\Plugin\PluginEvent::getOutput1100.0%
phpMyFAQ\Plugin\PluginManager::__construct1100.0%
phpMyFAQ\Plugin\PluginManager::triggerEvent1100.0%
phpMyFAQ\Plugin\PluginManager::loadPluginConfig1100.0%
phpMyFAQ\Plugin\PluginManager::getPluginConfig1100.0%
phpMyFAQ\Plugin\PluginManager::getPlugins1100.0%
phpMyFAQ\Plugin\PluginManager::isCompatible1100.0%
phpMyFAQ\Plugin\PluginManager::getPluginDirectory1100.0%
phpMyFAQ\Plugin\PluginManager::getPluginStylesheets1100.0%
phpMyFAQ\Plugin\PluginManager::getPluginScripts1100.0%
phpMyFAQ\Plugin\PluginManager::getIncompatiblePlugins1100.0%
phpMyFAQ\Push\PushSubscriptionRepository::__construct1100.0%
phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpointHash1100.0%
phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpointHashAndUserId1100.0%
phpMyFAQ\Push\PushSubscriptionRepository::deleteByUserId1100.0%
phpMyFAQ\Push\PushSubscriptionRepository::deleteByEndpoint1100.0%
phpMyFAQ\Push\WebPushService::__construct1100.0%
phpMyFAQ\Push\WebPushService::getVapidPublicKey1100.0%
phpMyFAQ\Push\WebPushService::generateVapidKeys1100.0%
phpMyFAQ\Question::__construct1100.0%
phpMyFAQ\Question::add1100.0%
phpMyFAQ\Question::delete1100.0%
phpMyFAQ\Question::get1100.0%
phpMyFAQ\Question::getVisibility1100.0%
phpMyFAQ\Question::setVisibility1100.0%
phpMyFAQ\Question\QuestionRepository::__construct1100.0%
phpMyFAQ\Question\QuestionRepository::delete1100.0%
phpMyFAQ\Question\QuestionRepository::setVisibility1100.0%
phpMyFAQ\Question\QuestionRepository::updateQuestionAnswer1100.0%
phpMyFAQ\Queue\DatabaseMessageBus::__construct1100.0%
phpMyFAQ\Queue\Handler\ExportHandler::__construct1100.0%
phpMyFAQ\Queue\Handler\IndexFaqHandler::__construct1100.0%
phpMyFAQ\Queue\Handler\SendMailHandler::__construct1100.0%
phpMyFAQ\Queue\Message\ExportMessage::__construct1100.0%
phpMyFAQ\Queue\Message\ExportMessage::toArray1100.0%
phpMyFAQ\Queue\Message\IndexFaqMessage::__construct1100.0%
phpMyFAQ\Queue\Message\IndexFaqMessage::toArray1100.0%
phpMyFAQ\Queue\Message\IndexFaqMessage::fromArray1100.0%
phpMyFAQ\Queue\Message\SendMailMessage::__construct1100.0%
phpMyFAQ\Queue\Message\SendMailMessage::toArray1100.0%
phpMyFAQ\Queue\MessageBusFactory::__construct1100.0%
phpMyFAQ\Queue\Transport\DatabaseTransport::__construct1100.0%
phpMyFAQ\Queue\Transport\DatabaseTransport::acknowledge1100.0%
phpMyFAQ\Queue\Worker::__construct1100.0%
phpMyFAQ\Queue\Worker::registerHandler1100.0%
phpMyFAQ\Rating::__construct1100.0%
phpMyFAQ\Rating::check1100.0%
phpMyFAQ\Rating::getNumberOfVotings1100.0%
phpMyFAQ\Rating::create1100.0%
phpMyFAQ\Rating::update1100.0%
phpMyFAQ\Rating::deleteAll1100.0%
phpMyFAQ\Relation::__construct1100.0%
phpMyFAQ\Relation::getAllRelatedByQuestion1100.0%
phpMyFAQ\Routing\RouteCacheManager::hasCache1100.0%
phpMyFAQ\Routing\RouteCacheManager::getCacheFile1100.0%
phpMyFAQ\Routing\RouteCacheManager::generateRouteCode1100.0%
phpMyFAQ\Routing\RouteCollectionBuilder::__construct1100.0%
phpMyFAQ\Routing\RouteCollectionBuilder::build1100.0%
phpMyFAQ\Scheduler\TaskScheduler::__construct1100.0%
phpMyFAQ\Search::__construct1100.0%
phpMyFAQ\Search::setCategoryId1100.0%
phpMyFAQ\Search::getCategoryId1100.0%
phpMyFAQ\Search::getDatabaseDriverClassName1100.0%
phpMyFAQ\Search::deleteSearchTermById1100.0%
phpMyFAQ\Search::deleteAllSearchTerms1100.0%
phpMyFAQ\Search::setCategory1100.0%
phpMyFAQ\Search::getCategory1100.0%
phpMyFAQ\Search\AbstractSearch::__construct1100.0%
phpMyFAQ\Search\Database\Mysqli::__construct1100.0%
phpMyFAQ\Search\Database\Mysqli::setRelevanceRanking1100.0%
phpMyFAQ\Search\Database\PdoMysql::__construct1100.0%
phpMyFAQ\Search\Database\PdoMysql::setRelevanceRanking1100.0%
phpMyFAQ\Search\Database\PdoPgsql::__construct1100.0%
phpMyFAQ\Search\Database\Pgsql::__construct1100.0%
phpMyFAQ\Search\Rating\RatingRepository::__construct1100.0%
phpMyFAQ\Search\Rating\RatingRepository::isVoteAllowed1100.0%
phpMyFAQ\Search\Rating\RatingRepository::create1100.0%
phpMyFAQ\Search\Rating\RatingRepository::update1100.0%
phpMyFAQ\Search\Rating\RatingRepository::deleteAll1100.0%
phpMyFAQ\Search\Search\Elasticsearch::__construct1100.0%
phpMyFAQ\Search\Search\Elasticsearch::search1100.0%
phpMyFAQ\Search\Search\Elasticsearch::getCategoryIds1100.0%
phpMyFAQ\Search\Search\Elasticsearch::setCategoryIds1100.0%
phpMyFAQ\Search\Search\Elasticsearch::autoComplete1100.0%
phpMyFAQ\Search\Search\Elasticsearch::getLanguage1100.0%
phpMyFAQ\Search\Search\Elasticsearch::setLanguage1100.0%
phpMyFAQ\Search\Search\OpenSearch::__construct1100.0%
phpMyFAQ\Search\Search\OpenSearch::search1100.0%
phpMyFAQ\Search\Search\OpenSearch::getCategoryIds1100.0%
phpMyFAQ\Search\Search\OpenSearch::setCategoryIds1100.0%
phpMyFAQ\Search\Search\OpenSearch::autoComplete1100.0%
phpMyFAQ\Search\Search\OpenSearch::getLanguage1100.0%
phpMyFAQ\Search\Search\OpenSearch::setLanguage1100.0%
phpMyFAQ\Search\SearchDatabase::search1100.0%
phpMyFAQ\Search\SearchDatabase::getResultColumns1100.0%
phpMyFAQ\Search\SearchDatabase::setResultColumns1100.0%
phpMyFAQ\Search\SearchDatabase::getTable1100.0%
phpMyFAQ\Search\SearchDatabase::setTable1100.0%
phpMyFAQ\Search\SearchDatabase::setJoinedTable1100.0%
phpMyFAQ\Search\SearchDatabase::setJoinedColumns1100.0%
phpMyFAQ\Search\SearchDatabase::getMatchingColumns1100.0%
phpMyFAQ\Search\SearchDatabase::setMatchingColumns1100.0%
phpMyFAQ\Search\SearchDatabase::setConditions1100.0%
phpMyFAQ\Search\SearchDatabase::disableRelevance1100.0%
phpMyFAQ\Search\SearchDatabase::escapeLikeWildcards1100.0%
phpMyFAQ\Search\SearchResultSet::__construct1100.0%
phpMyFAQ\Search\SearchResultSet::setResultSet1100.0%
phpMyFAQ\Search\SearchResultSet::getResultSet1100.0%
phpMyFAQ\Search\SearchResultSet::getNumberOfResults1100.0%
phpMyFAQ\Search\SearchResultSet::setNumberOfResults1100.0%
phpMyFAQ\Search\SearchService::__construct1100.0%
phpMyFAQ\Search\SearchService::renderTagList1100.0%
phpMyFAQ\Search\SearchService::getSolutionIdRedirectUrl1100.0%
phpMyFAQ\Seo::__construct1100.0%
phpMyFAQ\Seo::create1100.0%
phpMyFAQ\Seo::get1100.0%
phpMyFAQ\Seo::update1100.0%
phpMyFAQ\Seo::delete1100.0%
phpMyFAQ\Seo\SeoRepository::__construct1100.0%
phpMyFAQ\Seo\SeoRepository::create1100.0%
phpMyFAQ\Seo\SeoRepository::update1100.0%
phpMyFAQ\Seo\SeoRepository::delete1100.0%
phpMyFAQ\Seo\SitemapXmlService::__construct1100.0%
phpMyFAQ\Seo\SitemapXmlService::isEnabled1100.0%
phpMyFAQ\Service\Gravatar::getUrl1100.0%
phpMyFAQ\Service\Gravatar::getHash1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::__construct1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::getDefinition1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::getSearch1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::getFaq1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::buildFaqUrl1100.0%
phpMyFAQ\Service\McpServer\FaqSearchTool::createResult1100.0%
phpMyFAQ\Service\McpServer\McpSdkRuntime::__construct1100.0%
phpMyFAQ\Service\McpServer\McpSdkRuntime::getServerInfo1100.0%
phpMyFAQ\Service\McpServer\McpToolDefinition::__construct1100.0%
phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::runConsole1100.0%
phpMyFAQ\Service\McpServer\PhpMyFaqMcpServer::getServerInfo1100.0%
phpMyFAQ\Services::__construct1100.0%
phpMyFAQ\Services::getCategoryId1100.0%
phpMyFAQ\Services::setCategoryId1100.0%
phpMyFAQ\Services::getFaqId1100.0%
phpMyFAQ\Services::setFaqId1100.0%
phpMyFAQ\Services::getLanguage1100.0%
phpMyFAQ\Services::setLanguage1100.0%
phpMyFAQ\Services::getQuestion1100.0%
phpMyFAQ\Services::setQuestion1100.0%
phpMyFAQ\Services::getPdfLink1100.0%
phpMyFAQ\Services::getPdfApiLink1100.0%
phpMyFAQ\Session\AbstractSession::__construct1100.0%
phpMyFAQ\Session\AbstractSession::get1100.0%
phpMyFAQ\Session\AbstractSession::set1100.0%
phpMyFAQ\Session\SessionWrapper::get1100.0%
phpMyFAQ\Session\SessionWrapper::set1100.0%
phpMyFAQ\Session\SessionWrapper::has1100.0%
phpMyFAQ\Session\SessionWrapper::remove1100.0%
phpMyFAQ\Session\Token::__construct1100.0%
phpMyFAQ\Session\Token::__serialize1100.0%
phpMyFAQ\Session\Token::getPage1100.0%
phpMyFAQ\Session\Token::setPage1100.0%
phpMyFAQ\Session\Token::getExpiry1100.0%
phpMyFAQ\Session\Token::setExpiry1100.0%
phpMyFAQ\Session\Token::getSessionToken1100.0%
phpMyFAQ\Session\Token::setSessionToken1100.0%
phpMyFAQ\Session\Token::getCookieToken1100.0%
phpMyFAQ\Session\Token::setCookieToken1100.0%
phpMyFAQ\Session\Token::getTokenInput1100.0%
phpMyFAQ\Session\Token::getTokenString1100.0%
phpMyFAQ\Session\Token::removeToken1100.0%
phpMyFAQ\Session\Token::getCookie1100.0%
phpMyFAQ\Session\Token::setSession1100.0%
phpMyFAQ\Session\Token::getCookieName1100.0%
phpMyFAQ\Session\Token::resetInstanceForTests1100.0%
phpMyFAQ\Setup\AbstractSetup::__construct1100.0%
phpMyFAQ\Setup\AbstractSetup::checkMinimumPhpVersion1100.0%
phpMyFAQ\Setup\AbstractSetup::checkMinimumUpdateVersion1100.0%
phpMyFAQ\Setup\AbstractSetup::checkMaintenanceMode1100.0%
phpMyFAQ\Setup\EnvironmentConfigurator::__construct1100.0%
phpMyFAQ\Setup\EnvironmentConfigurator::getHtaccessPath1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::__construct1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::getAllTables1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::getTableNames1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::adminLog1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::attachment1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::attachmentFile1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::backup1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqbookmarks1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcaptcha1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategories1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryNews1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryrelations1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryGroup1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryUser1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcategoryOrder1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqchanges1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcomments1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqconfig1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqdata1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataRevisions1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataGroup1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataTags1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqdataUser1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqforms1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqglossary1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroup1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroupRight1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqgroupRightCategory1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqinstances1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqinstancesConfig1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqapiKeys1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthClients1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthScopes1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthAccessTokens1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthRefreshTokens1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqoauthAuthCodes1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqnews1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqcustompages1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqjobs1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqquestions1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqright1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqsearches1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqseo1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqsessions1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqstopwords1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqtags1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faquser1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faquserdata1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faquserlogin1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faquserGroup1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faquserRight1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqvisits1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqvoting1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqchatMessages1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqpushSubscriptions1100.0%
phpMyFAQ\Setup\Installation\DatabaseSchema::faqadmindashboard1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::__construct1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::getMainConfig1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::applyPersonalSettings1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::getMainRights1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::getFormInputs1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultRights1100.0%
phpMyFAQ\Setup\Installation\DefaultDataSeeder::buildDefaultFormInputs1100.0%
phpMyFAQ\Setup\Installation\SchemaInstaller::__construct1100.0%
phpMyFAQ\Setup\Installation\SchemaInstaller::getSchema1100.0%
phpMyFAQ\Setup\InstallationInput::__construct1100.0%
phpMyFAQ\Setup\InstallationInput::getLoginName1100.0%
phpMyFAQ\Setup\InstallationInput::getPassword1100.0%
phpMyFAQ\Setup\InstallationInputValidator::isElasticsearchEnabled1100.0%
phpMyFAQ\Setup\InstallationInputValidator::isOpenSearchEnabled1100.0%
phpMyFAQ\Setup\InstallationRunner::__construct1100.0%
phpMyFAQ\Setup\Installer::__construct1100.0%
phpMyFAQ\Setup\Installer::checkMinimumPhpVersion1100.0%
phpMyFAQ\Setup\Installer::hasLdapSupport1100.0%
phpMyFAQ\Setup\Installer::getFormInputs1100.0%
phpMyFAQ\Setup\Installer::isAlreadyInstalled1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::__construct1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::getDependencies1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isReversible1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::down1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::table1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isDbType1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isMySql1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isPostgreSql1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isSqlite1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::isSqlServer1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::dropColumn1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::dropColumns1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::dropTable1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::dropTableIfExists1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::updateLanguageCode1100.0%
phpMyFAQ\Setup\Migration\AbstractMigration::getChecksum1100.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::__construct1100.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::setDryRun1100.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::isDryRun1100.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::getResults1100.0%
phpMyFAQ\Setup\Migration\MigrationExecutor::clearResults1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::__construct1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::register1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::registerDefaultMigrations1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::getMigration1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::getVersions1100.0%
phpMyFAQ\Setup\Migration\MigrationRegistry::hasMigration1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::__construct1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getVersion1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getDescription1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::isSuccess1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::setSuccess1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getErrorMessage1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::setErrorMessage1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getExecutionTimeMs1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::setExecutionTimeMs1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::isDryRun1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::setDryRun1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getOperationResults1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getSuccessCount1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getFailureCount1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::getOperationCount1100.0%
phpMyFAQ\Setup\Migration\MigrationResult::toArray1100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::__construct1100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::removeMigration1100.0%
phpMyFAQ\Setup\Migration\MigrationTracker::getAppliedVersions1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getKey1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::getValue1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::execute1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigAddOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::getKey1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::execute1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigDeleteOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getOldKey1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::getNewKey1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::execute1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigRenameOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getKey1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::getValue1100.0%
phpMyFAQ\Setup\Migration\Operations\ConfigUpdateOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getSource1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::getDestination1100.0%
phpMyFAQ\Setup\Migration\Operations\DirectoryCopyOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getSource1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::getDestination1100.0%
phpMyFAQ\Setup\Migration\Operations\FileCopyOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\FormInputInsertOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addSql1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addConfig1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::deleteConfig1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::renameConfig1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::updateConfig1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::copyFile1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::copyDirectory1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::grantPermission1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::addOperation1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperations1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::getOperationsByType1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::clear1100.0%
phpMyFAQ\Setup\Migration\Operations\OperationRecorder::count1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getPermissionName1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getPermissionDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::getUserId1100.0%
phpMyFAQ\Setup\Migration\Operations\PermissionGrantOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::getQuery1100.0%
phpMyFAQ\Setup\Migration\Operations\SqlOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::__construct1100.0%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::getType1100.0%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::getDescription1100.0%
phpMyFAQ\Setup\Migration\Operations\UserCreateOperation::toArray1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::__construct1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::modifyColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::dropColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\AlterTableBuilder::addColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::getType1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::integer1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::bigInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::smallInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::varchar1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::text1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::longText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::blob1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::boolean1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::timestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::date1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::char1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::currentTimestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::currentDate1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::autoIncrement1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::createTableSuffix1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::modifyColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::dropIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::supportsColumnPositioning1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::supportsCombinedAlter1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\MysqlDialect::quoteIdentifier1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::getType1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::integer1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::bigInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::smallInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::varchar1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::text1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::longText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::blob1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::boolean1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::timestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::char1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::currentTimestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::currentDate1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::autoIncrement1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::createTableSuffix1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::addColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::modifyColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::dropIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::supportsColumnPositioning1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\PostgresDialect::quoteIdentifier1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::getType1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::integer1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::bigInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::smallInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::varchar1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::text1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::longText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::blob1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::boolean1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::timestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::char1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::currentTimestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::currentDate1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::autoIncrement1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::createTableSuffix1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::addColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::modifyColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::dropIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::supportsColumnPositioning1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqlServerDialect::quoteIdentifier1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::getType1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::integer1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::bigInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::smallInteger1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::varchar1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::text1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::longText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::blob1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::boolean1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::timestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::char1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::currentTimestamp1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::currentDate1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::autoIncrement1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::createTableSuffix1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::addColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::modifyColumn1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::dropIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::supportsColumnPositioning1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\Dialect\SqliteDialect::quoteIdentifier1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::__construct1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createTable1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::createTableIfNotExists1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::alterTable1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::getDialect1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::getTablePrefix1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\QueryBuilder::table1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::__construct1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::ifNotExists1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::text1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::longText1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::blob1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::primaryKey1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::index1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::fullTextIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::uniqueIndex1100.0%
phpMyFAQ\Setup\Migration\QueryBuilder\TableBuilder::addColumn1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Alpha::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320Beta2::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320RC::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320RC::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration320RC::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration323::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration323::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration323::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha2::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Alpha3::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration400Beta2::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration405::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration405::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration405::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration407::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration407::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration407::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration409::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration409::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration409::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha2::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getDependencies1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::getDescription1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration410Alpha3::up1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getVersion1100.0%
phpMyFAQ\Setup\Migration\Versions\Migration420Alpha::getDependencies1100.0%
phpMyFAQ\Setup\Update::__construct1100.0%
phpMyFAQ\Setup\Update::isConfigTableNotAvailable1100.0%
phpMyFAQ\Setup\Update::allMigrationsSucceeded1100.0%
phpMyFAQ\Setup\UpdateRunner::__construct1100.0%
phpMyFAQ\Setup\UpdateToken::__construct1100.0%
phpMyFAQ\Setup\UpdateToken::getTokenFilePath1100.0%
phpMyFAQ\Setup\Upgrade::__construct1100.0%
phpMyFAQ\Setup\Upgrade::setUpgradeDirectory1100.0%
phpMyFAQ\Setup\Upgrade::isNightly1100.0%
phpMyFAQ\Setup\Upgrade::setIsNightly1100.0%
phpMyFAQ\Setup\Upgrade::isMaintenanceEnabled1100.0%
phpMyFAQ\Sitemap::setUser1100.0%
phpMyFAQ\Sitemap::setGroups1100.0%
phpMyFAQ\StopWords::__construct1100.0%
phpMyFAQ\StopWords::getLanguage1100.0%
phpMyFAQ\StopWords::getTableName1100.0%
phpMyFAQ\StopWords::setLanguage1100.0%
phpMyFAQ\StopWords::update1100.0%
phpMyFAQ\StopWords::remove1100.0%
phpMyFAQ\StopWords::match1100.0%
phpMyFAQ\Storage\FilesystemStorage::__construct1100.0%
phpMyFAQ\Storage\FilesystemStorage::exists1100.0%
phpMyFAQ\Storage\FilesystemStorage::buildFullPath1100.0%
phpMyFAQ\Storage\FilesystemStorage::normalizePath1100.0%
phpMyFAQ\Storage\S3Storage::__construct1100.0%
phpMyFAQ\Storage\S3Storage::put1100.0%
phpMyFAQ\Storage\S3Storage::delete1100.0%
phpMyFAQ\Storage\S3Storage::exists1100.0%
phpMyFAQ\Storage\StorageFactory::__construct1100.0%
phpMyFAQ\Storage\StorageFactory::tenantPrefix1100.0%
phpMyFAQ\Storage\TenantScopedStorage::__construct1100.0%
phpMyFAQ\Storage\TenantScopedStorage::put1100.0%
phpMyFAQ\Storage\TenantScopedStorage::putStream1100.0%
phpMyFAQ\Storage\TenantScopedStorage::get1100.0%
phpMyFAQ\Storage\TenantScopedStorage::delete1100.0%
phpMyFAQ\Storage\TenantScopedStorage::exists1100.0%
phpMyFAQ\Storage\TenantScopedStorage::url1100.0%
phpMyFAQ\Storage\TenantScopedStorage::size1100.0%
phpMyFAQ\Strings::__construct1100.0%
phpMyFAQ\Strings::instance1100.0%
phpMyFAQ\Strings::strlen1100.0%
phpMyFAQ\Strings::substr1100.0%
phpMyFAQ\Strings::strtolower1100.0%
phpMyFAQ\Strings::strtoupper1100.0%
phpMyFAQ\Strings::strstr1100.0%
phpMyFAQ\Strings::preg_match1100.0%
phpMyFAQ\Strings::preg_match_all1100.0%
phpMyFAQ\Strings::preg_split1100.0%
phpMyFAQ\Strings::preg_replace_callback1100.0%
phpMyFAQ\Strings::preg_replace1100.0%
phpMyFAQ\Strings::htmlspecialchars1100.0%
phpMyFAQ\Strings::htmlentities1100.0%
phpMyFAQ\Strings\Mbstring::__construct1100.0%
phpMyFAQ\Strings\Mbstring::strlen1100.0%
phpMyFAQ\Strings\Mbstring::strtolower1100.0%
phpMyFAQ\Strings\Mbstring::strtoupper1100.0%
phpMyFAQ\Strings\Mbstring::strstr1100.0%
phpMyFAQ\Strings\Mbstring::preg_match1100.0%
phpMyFAQ\Strings\Mbstring::preg_match_all1100.0%
phpMyFAQ\Strings\Mbstring::preg_split1100.0%
phpMyFAQ\Strings\StringBasic::__construct1100.0%
phpMyFAQ\Strings\StringBasic::strlen1100.0%
phpMyFAQ\Strings\StringBasic::strpos1100.0%
phpMyFAQ\Strings\StringBasic::strtolower1100.0%
phpMyFAQ\Strings\StringBasic::strtoupper1100.0%
phpMyFAQ\Strings\StringBasic::strstr1100.0%
phpMyFAQ\Strings\StringBasic::preg_match1100.0%
phpMyFAQ\Strings\StringBasic::preg_match_all1100.0%
phpMyFAQ\Strings\StringBasic::preg_split1100.0%
phpMyFAQ\Strings\StringBasic::preg_replace_callback1100.0%
phpMyFAQ\Strings\StringBasic::preg_replace1100.0%
phpMyFAQ\System::getMajorVersion1100.0%
phpMyFAQ\System::getApiVersion1100.0%
phpMyFAQ\System::getPluginVersion1100.0%
phpMyFAQ\System::getMcpServerVersion1100.0%
phpMyFAQ\System::getPoweredByString1100.0%
phpMyFAQ\System::getPoweredByPlainString1100.0%
phpMyFAQ\System::getDocumentationUrl1100.0%
phpMyFAQ\System::getGitHubIssuesUrl1100.0%
phpMyFAQ\System::isDevelopmentVersion1100.0%
phpMyFAQ\System::getDatabase1100.0%
phpMyFAQ\System::setDatabase1100.0%
phpMyFAQ\System::getSupportedDatabases1100.0%
phpMyFAQ\System::getHttpsStatus1100.0%
phpMyFAQ\System::checkInstallation1100.0%
phpMyFAQ\System::getMissingExtensions1100.0%
phpMyFAQ\Tags::__construct1100.0%
phpMyFAQ\Tags::setUser1100.0%
phpMyFAQ\Tags::setGroups1100.0%
phpMyFAQ\Tags::deleteByRecordId1100.0%
phpMyFAQ\Tags::update1100.0%
phpMyFAQ\Tags::delete1100.0%
phpMyFAQ\Template\ThemeManager::__construct1100.0%
phpMyFAQ\Template\ThemeManager::getThemeRootPath1100.0%
phpMyFAQ\Template\ThemeManager::isAllowedFileExtension1100.0%
phpMyFAQ\Template\ThemeManager::isTwigTemplate1100.0%
phpMyFAQ\Tenant\TenantContext::__construct1100.0%
phpMyFAQ\Tenant\TenantContext::getTenantId1100.0%
phpMyFAQ\Tenant\TenantContext::getHostname1100.0%
phpMyFAQ\Tenant\TenantContext::getTablePrefix1100.0%
phpMyFAQ\Tenant\TenantContext::getConfigDir1100.0%
phpMyFAQ\Tenant\TenantContext::getPlan1100.0%
phpMyFAQ\Tenant\TenantContext::getQuotas1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::__construct1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantCreated1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantSuspended1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantDeleted1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::dispatchTenantPlanChanged1100.0%
phpMyFAQ\Tenant\TenantEventDispatcher::dispatch1100.0%
phpMyFAQ\Tenant\TenantLifecycleEvent::__construct1100.0%
phpMyFAQ\Tenant\TenantLifecycleEvent::getTenantId1100.0%
phpMyFAQ\Tenant\TenantLifecycleEvent::getContext1100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::__construct1100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::createFromDatabaseDriver1100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateFaq1100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateCategory1100.0%
phpMyFAQ\Tenant\TenantQuotaEnforcer::assertCanCreateUser1100.0%
phpMyFAQ\Tenant\TenantQuotas::__construct1100.0%
phpMyFAQ\Tenant\TenantQuotas::getMaxFaqs1100.0%
phpMyFAQ\Tenant\TenantQuotas::getMaxAttachmentSize1100.0%
phpMyFAQ\Tenant\TenantQuotas::getMaxUsers1100.0%
phpMyFAQ\Tenant\TenantQuotas::getMaxApiRequests1100.0%
phpMyFAQ\Tenant\TenantQuotas::getMaxCategories1100.0%
phpMyFAQ\Translation::resetInstance1100.0%
phpMyFAQ\Translation::getAll1100.0%
phpMyFAQ\Translation::setTranslationsDir1100.0%
phpMyFAQ\Translation::setDefaultLanguage1100.0%
phpMyFAQ\Translation::getDefaultLanguage1100.0%
phpMyFAQ\Translation::setCurrentLanguage1100.0%
phpMyFAQ\Translation::getCurrentLanguage1100.0%
phpMyFAQ\Translation::checkDefaultLanguageLoaded1100.0%
phpMyFAQ\Translation::checkLanguageLoaded1100.0%
phpMyFAQ\Translation::performInit1100.0%
phpMyFAQ\Translation::filename1100.0%
phpMyFAQ\Translation::fetchTranslationFile1100.0%
phpMyFAQ\Translation\AbstractTranslationProvider::__construct1100.0%
phpMyFAQ\Translation\ContentTranslationService::__construct1100.0%
phpMyFAQ\Translation\DTO\TranslationRequest::__construct1100.0%
phpMyFAQ\Translation\DTO\TranslationRequest::getSourceLang1100.0%
phpMyFAQ\Translation\DTO\TranslationRequest::getTargetLang1100.0%
phpMyFAQ\Translation\DTO\TranslationRequest::getFields1100.0%
phpMyFAQ\Translation\DTO\TranslationResult::__construct1100.0%
phpMyFAQ\Translation\DTO\TranslationResult::getTranslatedFields1100.0%
phpMyFAQ\Translation\DTO\TranslationResult::isSuccess1100.0%
phpMyFAQ\Translation\HtmlPreserver::replaceTags1100.0%
phpMyFAQ\Translation\HtmlPreserver::restoreTags1100.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::mapLanguageCode1100.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getSupportedLanguages1100.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getProviderName1100.0%
phpMyFAQ\Translation\Provider\AmazonTranslationProvider::getAwsSignedHeaders1100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::getProviderName1100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::doTranslate1100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::supportsLanguagePair1100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::getSupportedLanguages1100.0%
phpMyFAQ\Translation\Provider\AzureTranslationProvider::mapLanguageCode1100.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getProviderName1100.0%
phpMyFAQ\Translation\Provider\DeepLTranslationProvider::getSupportedLanguages1100.0%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::getProviderName1100.0%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::supportsLanguagePair1100.0%
phpMyFAQ\Translation\Provider\GoogleTranslationProvider::getSupportedLanguages1100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::getProviderName1100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::doTranslateBatch1100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::supportsLanguagePair1100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::getSupportedLanguages1100.0%
phpMyFAQ\Translation\Provider\LibreTranslationProvider::mapLanguageCode1100.0%
phpMyFAQ\Twig\Extensions\CategoryNameTwigExtension::getCategoryName1100.0%
phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension::categoryLink1100.0%
phpMyFAQ\Twig\Extensions\CreateLinkTwigExtension::faqLink1100.0%
phpMyFAQ\Twig\Extensions\FaqTwigExtension::getFaqQuestion1100.0%
phpMyFAQ\Twig\Extensions\FormatBytesTwigExtension::formatBytes1100.0%
phpMyFAQ\Twig\Extensions\FormatDateTwigExtension::formatDate1100.0%
phpMyFAQ\Twig\Extensions\IsoDateTwigExtension::createIsoDate1100.0%
phpMyFAQ\Twig\Extensions\LanguageCodeTwigExtension::getFromLanguageCode1100.0%
phpMyFAQ\Twig\Extensions\PluginTwigExtension::triggerPluginEvent1100.0%
phpMyFAQ\Twig\Extensions\TagNameTwigExtension::getTagName1100.0%
phpMyFAQ\Twig\Extensions\UserNameTwigExtension::getUserName1100.0%
phpMyFAQ\Twig\Extensions\UserNameTwigExtension::getRealName1100.0%
phpMyFAQ\Twig\TwigWrapper::setSetup1100.0%
phpMyFAQ\Twig\TwigWrapper::addExtension1100.0%
phpMyFAQ\Twig\TwigWrapper::addFunction1100.0%
phpMyFAQ\Twig\TwigWrapper::getExtension1100.0%
phpMyFAQ\Twig\TwigWrapper::addFilter1100.0%
phpMyFAQ\Twig\TwigWrapper::getTemplateSetName1100.0%
phpMyFAQ\Twig\TwigWrapper::setTemplateSetName1100.0%
phpMyFAQ\User::addPerm1100.0%
phpMyFAQ\User::getAuthSource1100.0%
phpMyFAQ\User::getUserAuthSource1100.0%
phpMyFAQ\User::getAuthData1100.0%
phpMyFAQ\User::addAuth1100.0%
phpMyFAQ\User::checkDisplayName1100.0%
phpMyFAQ\User::checkMailAddress1100.0%
phpMyFAQ\User::getTenantQuotaEnforcer1100.0%
phpMyFAQ\User::getAuthContainer1100.0%
phpMyFAQ\User::getUserData1100.0%
phpMyFAQ\User::setUserData1100.0%
phpMyFAQ\User::getLogin1100.0%
phpMyFAQ\User::getUserIdByEmail1100.0%
phpMyFAQ\User::setAuthSource1100.0%
phpMyFAQ\User::isSuperAdmin1100.0%
phpMyFAQ\User::setSuperAdmin1100.0%
phpMyFAQ\User::terminateSessionId1100.0%
phpMyFAQ\User::extractUserFromResult1100.0%
phpMyFAQ\User::setWebAuthnKeys1100.0%
phpMyFAQ\User::isEmailAddress1100.0%
phpMyFAQ\User\CurrentUser::accountStateConfiguration1100.0%
phpMyFAQ\User\CurrentUser::__construct1100.0%
phpMyFAQ\User\CurrentUser::isLoggedIn1100.0%
phpMyFAQ\User\CurrentUser::twoFactorFailure1100.0%
phpMyFAQ\User\CurrentUser::isTwoFactorLockedOut1100.0%
phpMyFAQ\User\CurrentUser::twoFactorSuccess1100.0%
phpMyFAQ\User\CurrentUser::setLoggedIn1100.0%
phpMyFAQ\User\CurrentUser::sessionIsTimedOut1100.0%
phpMyFAQ\User\CurrentUser::sessionIdIsTimedOut1100.0%
phpMyFAQ\User\CurrentUser::saveToSession1100.0%
phpMyFAQ\User\CurrentUser::setSessionTimeout1100.0%
phpMyFAQ\User\CurrentUser::enableRememberMe1100.0%
phpMyFAQ\User\CurrentUser::setAuthSource1100.0%
phpMyFAQ\User\CurrentUser::issueRememberMeCookie1100.0%
phpMyFAQ\User\CurrentUser::setRememberMe1100.0%
phpMyFAQ\User\CurrentUser::setSuccess1100.0%
phpMyFAQ\User\CurrentUser::setTokenData1100.0%
phpMyFAQ\User\CurrentUser::setLoginAttempt1100.0%
phpMyFAQ\User\CurrentUser::isFailedLastLoginAttempt1100.0%
phpMyFAQ\User\CurrentUser::hasExceededLoginAttempts1100.0%
phpMyFAQ\User\PasswordResetTokenService::sign1100.0%
phpMyFAQ\User\Tracking::__construct1100.0%
phpMyFAQ\User\Tracking::getCookieId1100.0%
phpMyFAQ\User\Tracking::isBanned1100.0%
phpMyFAQ\User\Tracking::getBotIgnoreList1100.0%
phpMyFAQ\User\Tracking::getRequestHeaders1100.0%
phpMyFAQ\User\Tracking::getTrackingDirectory1100.0%
phpMyFAQ\User\TrackingDataRedactor::isSensitive1100.0%
phpMyFAQ\User\TwoFactor::__construct1100.0%
phpMyFAQ\User\TwoFactor::generateSecret1100.0%
phpMyFAQ\User\TwoFactor::getQrCode1100.0%
phpMyFAQ\User\UserAuthentication::__construct1100.0%
phpMyFAQ\User\UserAuthentication::isRememberMe1100.0%
phpMyFAQ\User\UserAuthentication::setRememberMe1100.0%
phpMyFAQ\User\UserAuthentication::hasTwoFactorAuthentication1100.0%
phpMyFAQ\User\UserAuthentication::setTwoFactorAuth1100.0%
phpMyFAQ\User\UserData::__construct1100.0%
phpMyFAQ\User\UserSession::__construct1100.0%
phpMyFAQ\User\UserSession::getCurrentSessionId1100.0%
phpMyFAQ\User\UserSession::setCurrentSessionId1100.0%
phpMyFAQ\User\UserSession::setCurrentUser1100.0%
phpMyFAQ\User\UserSession::getBotIgnoreList1100.0%
phpMyFAQ\User\UserSession::getRequest1100.0%
phpMyFAQ\User\UserSession::getTrackingDirectory1100.0%
phpMyFAQ\Utils::isLanguage1100.0%
phpMyFAQ\Utils::resolveMarkers1100.0%
phpMyFAQ\Utils::parseUrl1100.0%
phpMyFAQ\Visits::__construct1100.0%
phpMyFAQ\Visits::update1100.0%
phpMyFAQ\Visits::getAllData1100.0%
phpMyFAQ\Visits::resetAll1100.0%
phpMyFAQ\Visits\VisitsRepository::__construct1100.0%
phpMyFAQ\Visits\VisitsRepository::insert1100.0%
phpMyFAQ\Visits\VisitsRepository::update1100.0%
phpMyFAQ\Visits\VisitsRepository::resetAll1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setDatabase1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLogger1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getDb1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setInstance1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getInstance1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setLanguage1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLanguage1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setContainer1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getVersion1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getTitle1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getAdminEmail1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getTemplateSet1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getNoReplyEmail1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getMailProvider1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getDefaultUrl1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getRootPath1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setLdapConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLdapMapping1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLdapOptions1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLdapGroupConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLdapConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getLdapServer1100.0%
phpMyFAQ\ConfigurationMethodsTrait::isLdapActive1100.0%
phpMyFAQ\ConfigurationMethodsTrait::isElasticsearchActive1100.0%
phpMyFAQ\ConfigurationMethodsTrait::isSignInWithMicrosoftActive1100.0%
phpMyFAQ\ConfigurationMethodsTrait::isSignInWithKeycloakActive1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setElasticsearch1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getElasticsearch1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setOpenSearch1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getOpenSearch1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setElasticsearchConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getElasticsearchConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setOpenSearchConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getOpenSearchConfig1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setTranslationProvider1100.0%
phpMyFAQ\ConfigurationMethodsTrait::delete1100.0%
phpMyFAQ\ConfigurationMethodsTrait::rename1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getAllowedMediaHosts1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getCustomCss1100.0%
phpMyFAQ\ConfigurationMethodsTrait::setPluginManager1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getPluginManager1100.0%
phpMyFAQ\ConfigurationMethodsTrait::triggerEvent1100.0%
phpMyFAQ\ConfigurationMethodsTrait::getPluginConfig1100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::isLocalUser1100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::isBlocked1100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::copyTo0100.0%
phpMyFAQ\Attachment\Filesystem\AbstractEntry::delete0100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::getChunk0100.0%
phpMyFAQ\Attachment\Filesystem\AbstractFile::putChunk0100.0%
phpMyFAQ\Translation\AbstractTranslationProvider::doTranslate0100.0%
phpMyFAQ\Translation\AbstractTranslationProvider::doTranslateBatch0100.0%
phpMyFAQ\Translation\AbstractTranslationProvider::mapLanguageCode0100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::getUserId0100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::accountStateConfiguration0100.0%