Classes

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

0% 20% 40% 60% 80% 100% 0 20 40 60 80 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\User\CurrentUser — Coverage: 88.5% | Lines: 200 | Complexity: 67 phpMyFAQ\User\UserData — Coverage: 79.7% | Lines: 158 | Complexity: 54 phpMyFAQ\User\UserSession — Coverage: 95.5% | Lines: 134 | Complexity: 36 phpMyFAQ\User\Tracking — Coverage: 95.2% | Lines: 104 | Complexity: 32 phpMyFAQ\User\UserAuthentication — Coverage: 57.1% | Lines: 63 | Complexity: 30 phpMyFAQ\User\CurrentUserSessionLookupTrait — Coverage: 87.8% | Lines: 49 | Complexity: 19 phpMyFAQ\User\TwoFactor — Coverage: 100.0% | Lines: 32 | Complexity: 12 phpMyFAQ\User\TrackingDataRedactor — Coverage: 100.0% | Lines: 24 | Complexity: 9 phpMyFAQ\User\PasswordResetTokenService — Coverage: 94.7% | Lines: 19 | Complexity: 11 phpMyFAQ\User\CurrentUserAccountStateTrait — Coverage: 100.0% | Lines: 17 | Complexity: 2

Methods

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

0% 20% 40% 60% 80% 100% 0 10 20 30 Line Coverage (%) Cyclomatic Complexity phpMyFAQ\User\UserSession::userTracking — Coverage: 94.1% | Lines: 85 | Complexity: 20 phpMyFAQ\User\CurrentUser::login — Coverage: 80.8% | Lines: 52 | Complexity: 27 phpMyFAQ\User\UserData::save — Coverage: 59.5% | Lines: 37 | Complexity: 7 phpMyFAQ\User\Tracking::writeTrackingData — Coverage: 97.2% | Lines: 36 | Complexity: 3 phpMyFAQ\User\UserData::get — Coverage: 71.4% | Lines: 35 | Complexity: 16 phpMyFAQ\User\UserAuthentication::authenticate — Coverage: 50.0% | Lines: 34 | Complexity: 10 phpMyFAQ\User\CurrentUser::updateSessionId — Coverage: 85.7% | Lines: 28 | Complexity: 7 phpMyFAQ\User\UserSession::checkSessionId — Coverage: 100.0% | Lines: 22 | Complexity: 3 phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromSession — Coverage: 77.3% | Lines: 22 | Complexity: 9 phpMyFAQ\User\Tracking::handleSession — Coverage: 81.0% | Lines: 21 | Complexity: 4 phpMyFAQ\User\UserData::load — Coverage: 72.2% | Lines: 18 | Complexity: 7 phpMyFAQ\User\CurrentUser::deleteFromSession — Coverage: 81.2% | Lines: 16 | Complexity: 4 phpMyFAQ\User\UserData::fetchAll — Coverage: 86.7% | Lines: 15 | Complexity: 5 phpMyFAQ\User\Tracking::log — Coverage: 100.0% | Lines: 14 | Complexity: 6 phpMyFAQ\User\UserSession::setCookie — Coverage: 100.0% | Lines: 13 | Complexity: 3 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\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\User\CurrentUserSessionLookupTrait::getFromCookie — Coverage: 90.9% | Lines: 11 | Complexity: 3 phpMyFAQ\User\CurrentUser::setLoginAttempt — Coverage: 100.0% | Lines: 10 | Complexity: 1 phpMyFAQ\User\UserData::set — Coverage: 100.0% | Lines: 10 | Complexity: 5 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\User\CurrentUserAccountStateTrait::isBlocked — Coverage: 100.0% | Lines: 9 | Complexity: 1 phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUserGroupId — Coverage: 100.0% | Lines: 9 | Complexity: 4 phpMyFAQ\User\CurrentUser::sortAuthContainer — Coverage: 37.5% | Lines: 8 | Complexity: 3 phpMyFAQ\User\TwoFactor::__construct — Coverage: 100.0% | Lines: 8 | Complexity: 1 phpMyFAQ\User\CurrentUserAccountStateTrait::isLocalUser — Coverage: 100.0% | Lines: 8 | 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\User\CurrentUserSessionLookupTrait::getCurrentUser — Coverage: 100.0% | Lines: 7 | Complexity: 3 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\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\User\UserAuthentication::hasExhaustedFailedLoginBudget — Coverage: 100.0% | Lines: 4 | Complexity: 3 phpMyFAQ\User\UserAuthentication::recordFailedLogin — Coverage: 100.0% | Lines: 4 | Complexity: 2 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\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\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

 

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

Method CRAP Coverage
phpMyFAQ\User\CurrentUser::login32.1880.8%
phpMyFAQ\User\UserAuthentication::authenticate22.5050.0%
phpMyFAQ\User\UserData::get21.9771.4%
phpMyFAQ\User\UserSession::userTracking20.0894.1%
phpMyFAQ\User\UserAuthentication::authenticateLdap19.8527.3%
phpMyFAQ\User\UserData::save10.2659.5%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromSession9.9577.3%
phpMyFAQ\User\UserData::load8.0572.2%
phpMyFAQ\User\CurrentUser::updateSessionId7.1485.7%
phpMyFAQ\User\PasswordResetTokenService::verify7100.0%
phpMyFAQ\User\Tracking::log6100.0%
phpMyFAQ\User\CurrentUser::sortAuthContainer5.2037.5%
phpMyFAQ\User\UserData::fetchAll5.0686.7%
phpMyFAQ\User\TrackingDataRedactor::redactQueryString5100.0%
phpMyFAQ\User\TwoFactor::validateToken5100.0%
phpMyFAQ\User\UserData::set5100.0%
phpMyFAQ\User\CurrentUser::deleteFromSession4.1181.2%
phpMyFAQ\User\Tracking::handleSession4.1181.0%
phpMyFAQ\User\CurrentUser::getSessionInfo4.0585.7%
phpMyFAQ\User\UserData::delete4100.0%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getCurrentUserGroupId4100.0%
phpMyFAQ\User\UserAuthentication::authenticateSso3.1933.3%
phpMyFAQ\User\UserSession::createNetwork3.0780.0%
phpMyFAQ\User\PasswordResetTokenService::issue3.0188.9%
phpMyFAQ\User\CurrentUserSessionLookupTrait::getFromCookie3.0190.9%
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\User\CurrentUserSessionLookupTrait::getCurrentUser3100.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\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\User\CurrentUserAccountStateTrait::isLocalUser1100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::isBlocked1100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::getUserId0100.0%
phpMyFAQ\User\CurrentUserAccountStateTrait::accountStateConfiguration0100.0%