Overview

Classes

  • MvcCore\Application
  • MvcCore\Config
  • MvcCore\Controller
  • MvcCore\Controller\AutoInit
  • MvcCore\Debug
  • MvcCore\Environment
  • MvcCore\Ext\Auth
  • MvcCore\Ext\Auths\Basic
  • MvcCore\Ext\Auths\Basics\Controller
  • MvcCore\Ext\Auths\Basics\Role
  • MvcCore\Ext\Auths\Basics\SignInForm
  • MvcCore\Ext\Auths\Basics\SignOutForm
  • MvcCore\Ext\Auths\Basics\User
  • MvcCore\Ext\Auths\Basics\Users\Database
  • MvcCore\Ext\Auths\Basics\Users\SystemConfig
  • MvcCore\Ext\Auths\User
  • MvcCore\Ext\Auths\Users\Database
  • MvcCore\Ext\Auths\Users\SystemConfig
  • MvcCore\Ext\Cache
  • MvcCore\Ext\Caches\Redis
  • MvcCore\Ext\Configs\Cached
  • MvcCore\Ext\Configs\Yaml
  • MvcCore\Ext\Debugs\Tracy
  • MvcCore\Ext\Debugs\Tracys\AuthPanel
  • MvcCore\Ext\Debugs\Tracys\IncludePanel
  • MvcCore\Ext\Debugs\Tracys\MvcCorePanel
  • MvcCore\Ext\Debugs\Tracys\RoutingPanel
  • MvcCore\Ext\Debugs\Tracys\SessionPanel
  • MvcCore\Ext\Form
  • MvcCore\Ext\Forms\Field
  • MvcCore\Ext\Forms\Fields\Button
  • MvcCore\Ext\Forms\Fields\ButtonInput
  • MvcCore\Ext\Forms\Fields\Checkbox
  • MvcCore\Ext\Forms\Fields\CheckboxGroup
  • MvcCore\Ext\Forms\Fields\Color
  • MvcCore\Ext\Forms\Fields\CountrySelect
  • MvcCore\Ext\Forms\Fields\DataList
  • MvcCore\Ext\Forms\Fields\Date
  • MvcCore\Ext\Forms\Fields\DateTime
  • MvcCore\Ext\Forms\Fields\Email
  • MvcCore\Ext\Forms\Fields\File
  • MvcCore\Ext\Forms\Fields\Hidden
  • MvcCore\Ext\Forms\Fields\Image
  • MvcCore\Ext\Forms\Fields\LocalizationSelect
  • MvcCore\Ext\Forms\Fields\Month
  • MvcCore\Ext\Forms\Fields\Number
  • MvcCore\Ext\Forms\Fields\Password
  • MvcCore\Ext\Forms\Fields\RadioGroup
  • MvcCore\Ext\Forms\Fields\Range
  • MvcCore\Ext\Forms\Fields\ResetButton
  • MvcCore\Ext\Forms\Fields\ResetInput
  • MvcCore\Ext\Forms\Fields\Search
  • MvcCore\Ext\Forms\Fields\Select
  • MvcCore\Ext\Forms\Fields\SubmitButton
  • MvcCore\Ext\Forms\Fields\SubmitInput
  • MvcCore\Ext\Forms\Fields\Tel
  • MvcCore\Ext\Forms\Fields\Text
  • MvcCore\Ext\Forms\Fields\Textarea
  • MvcCore\Ext\Forms\Fields\Time
  • MvcCore\Ext\Forms\Fields\Url
  • MvcCore\Ext\Forms\Fields\Week
  • MvcCore\Ext\Forms\FieldsGroup
  • MvcCore\Ext\Forms\Validator
  • MvcCore\Ext\Forms\Validators\Color
  • MvcCore\Ext\Forms\Validators\CompanyIdEu
  • MvcCore\Ext\Forms\Validators\CompanyVatIdEu
  • MvcCore\Ext\Forms\Validators\CreditCard
  • MvcCore\Ext\Forms\Validators\Date
  • MvcCore\Ext\Forms\Validators\DateTime
  • MvcCore\Ext\Forms\Validators\Email
  • MvcCore\Ext\Forms\Validators\Files
  • MvcCore\Ext\Forms\Validators\Files\Validations\BombScanners\GzArchive
  • MvcCore\Ext\Forms\Validators\Files\Validations\BombScanners\PngImage
  • MvcCore\Ext\Forms\Validators\Files\Validations\BombScanners\RarArchive
  • MvcCore\Ext\Forms\Validators\Files\Validations\BombScanners\ZipArchive
  • MvcCore\Ext\Forms\Validators\FloatNumber
  • MvcCore\Ext\Forms\Validators\Hex
  • MvcCore\Ext\Forms\Validators\Iban
  • MvcCore\Ext\Forms\Validators\IntNumber
  • MvcCore\Ext\Forms\Validators\Ip
  • MvcCore\Ext\Forms\Validators\MinMaxLength
  • MvcCore\Ext\Forms\Validators\MinMaxOptions
  • MvcCore\Ext\Forms\Validators\Month
  • MvcCore\Ext\Forms\Validators\Number
  • MvcCore\Ext\Forms\Validators\Password
  • MvcCore\Ext\Forms\Validators\Pattern
  • MvcCore\Ext\Forms\Validators\Range
  • MvcCore\Ext\Forms\Validators\SafeString
  • MvcCore\Ext\Forms\Validators\Tel
  • MvcCore\Ext\Forms\Validators\Time
  • MvcCore\Ext\Forms\Validators\Url
  • MvcCore\Ext\Forms\Validators\ValueInOptions
  • MvcCore\Ext\Forms\Validators\Week
  • MvcCore\Ext\Forms\Validators\ZipCode
  • MvcCore\Ext\Forms\View
  • MvcCore\Ext\Models\Db\Attrs\Column
  • MvcCore\Ext\Models\Db\Attrs\Connection
  • MvcCore\Ext\Models\Db\Attrs\Format
  • MvcCore\Ext\Models\Db\Attrs\KeyPrimary
  • MvcCore\Ext\Models\Db\Attrs\KeyUnique
  • MvcCore\Ext\Models\Db\Attrs\Table
  • MvcCore\Ext\Models\Db\Connection
  • MvcCore\Ext\Models\Db\Models\MySql
  • MvcCore\Ext\Models\Db\Models\PgSql
  • MvcCore\Ext\Models\Db\Models\Resource
  • MvcCore\Ext\Models\Db\Models\SQLite
  • MvcCore\Ext\Models\Db\Models\SqlSrv
  • MvcCore\Ext\Models\Db\Providers\Connections\MySql
  • MvcCore\Ext\Models\Db\Providers\Connections\PgSql
  • MvcCore\Ext\Models\Db\Providers\Connections\SQLite
  • MvcCore\Ext\Models\Db\Providers\Connections\SqlSrv
  • MvcCore\Ext\Models\Db\Providers\Resource
  • MvcCore\Ext\Models\Db\Providers\Resources\MySql
  • MvcCore\Ext\Models\Db\Providers\Resources\PgSql
  • MvcCore\Ext\Models\Db\Providers\Resources\SQLite
  • MvcCore\Ext\Models\Db\Providers\Resources\SqlSrv
  • MvcCore\Ext\Models\Db\Reader
  • MvcCore\Ext\Models\Db\Readers\Execution
  • MvcCore\Ext\Models\Db\Readers\Multiple
  • MvcCore\Ext\Models\Db\Readers\Single
  • MvcCore\Ext\Models\Db\Readers\Stream
  • MvcCore\Ext\Models\Db\Readers\Streams\Iterator
  • MvcCore\Ext\Models\Db\Statement
  • MvcCore\Ext\Models\Model
  • MvcCore\Ext\Routers\Localization
  • MvcCore\Ext\Routers\Localizations\Route
  • MvcCore\Ext\Routers\Media
  • MvcCore\Ext\Routers\MediaAndLocalization
  • MvcCore\Ext\Routers\Module
  • MvcCore\Ext\Routers\ModuleLocalization
  • MvcCore\Ext\Routers\ModuleMedia
  • MvcCore\Ext\Routers\ModuleMediaAndLocalization
  • MvcCore\Ext\Routers\Modules\Route
  • MvcCore\Ext\Tools\Image
  • MvcCore\Ext\Tools\Images\Gd
  • MvcCore\Ext\Tools\Images\Gds\ApplyMask
  • MvcCore\Ext\Tools\Images\Gds\RoundCorners
  • MvcCore\Ext\Tools\Images\Gds\UnsharpMask
  • MvcCore\Ext\Tools\Images\Imagick
  • MvcCore\Ext\Tools\Locale
  • MvcCore\Ext\Tools\Locales\FloatParser
  • MvcCore\Ext\Tools\MimeTypesExtensions
  • MvcCore\Ext\Views\Helpers\AbstractHelper
  • MvcCore\Ext\Views\Helpers\Assets
  • MvcCore\Ext\Views\Helpers\CssHelper
  • MvcCore\Ext\Views\Helpers\DataUrlHelper
  • MvcCore\Ext\Views\Helpers\FormatDateHelper
  • MvcCore\Ext\Views\Helpers\FormatMoneyHelper
  • MvcCore\Ext\Views\Helpers\FormatNumberHelper
  • MvcCore\Ext\Views\Helpers\InternationalizedHelper
  • MvcCore\Ext\Views\Helpers\JsHelper
  • MvcCore\Ext\Views\Helpers\LineBreaksHelper
  • MvcCore\Ext\Views\Helpers\TruncateHelper
  • MvcCore\Ext\Views\Helpers\WriteByJsHelper
  • MvcCore\Model
  • MvcCore\Request
  • MvcCore\Response
  • MvcCore\Route
  • MvcCore\Router
  • MvcCore\Session
  • MvcCore\Tool
  • MvcCore\View

Interfaces

  • MvcCore\Application\IConstants
  • MvcCore\Controller\IConstants
  • MvcCore\Debug\IConstants
  • MvcCore\Environment\IConstants
  • MvcCore\Ext\Auths\Basics\IController
  • MvcCore\Ext\Auths\Basics\IDatabaseUser
  • MvcCore\Ext\Auths\Basics\IForm
  • MvcCore\Ext\Auths\Basics\IRole
  • MvcCore\Ext\Auths\Basics\IUser
  • MvcCore\Ext\Auths\IBasic
  • MvcCore\Ext\Form\IConstants
  • MvcCore\Ext\Forms\Fields\IAlwaysValidate
  • MvcCore\Ext\Forms\Fields\IChecked
  • MvcCore\Ext\Forms\Fields\IDataList
  • MvcCore\Ext\Forms\Fields\IFile
  • MvcCore\Ext\Forms\Fields\IFormat
  • MvcCore\Ext\Forms\Fields\ILabel
  • MvcCore\Ext\Forms\Fields\IMinMaxLength
  • MvcCore\Ext\Forms\Fields\IMinMaxOptions
  • MvcCore\Ext\Forms\Fields\IMinMaxStepDates
  • MvcCore\Ext\Forms\Fields\IMinMaxStepNumbers
  • MvcCore\Ext\Forms\Fields\IMultiple
  • MvcCore\Ext\Forms\Fields\IOptions
  • MvcCore\Ext\Forms\Fields\IPattern
  • MvcCore\Ext\Forms\Fields\ISubmit
  • MvcCore\Ext\Forms\Fields\IVisibleField
  • MvcCore\Ext\Forms\IError
  • MvcCore\Ext\Forms\IField
  • MvcCore\Ext\Forms\IFieldsGroup
  • MvcCore\Ext\Forms\IValidator
  • MvcCore\Ext\Forms\IView
  • MvcCore\Ext\Forms\Validators\Files\Validations\IBombScanner
  • MvcCore\Ext\Forms\Validators\IFiles
  • MvcCore\Ext\ICache
  • MvcCore\Ext\IForm
  • MvcCore\Ext\Models\Db\IConnection
  • MvcCore\Ext\Models\Db\IModel
  • MvcCore\Ext\Models\Db\IReader
  • MvcCore\Ext\Models\Db\IStatement
  • MvcCore\Ext\Models\Db\Model\IConstants
  • MvcCore\Ext\Models\Db\Models\MySqls\IConstants
  • MvcCore\Ext\Models\Db\Models\PgSqls\IConstants
  • MvcCore\Ext\Models\Db\Models\SqlSrvs\IConstants
  • MvcCore\Ext\Models\Db\Readers\IExecution
  • MvcCore\Ext\Models\Db\Readers\IMultiple
  • MvcCore\Ext\Models\Db\Readers\ISingle
  • MvcCore\Ext\Models\Db\Readers\IStream
  • MvcCore\Ext\Models\Db\Readers\Streams\IIterator
  • MvcCore\Ext\Routers\IExtended
  • MvcCore\Ext\Routers\ILocalization
  • MvcCore\Ext\Routers\IMedia
  • MvcCore\Ext\Routers\IModule
  • MvcCore\Ext\Routers\Modules\IRoute
  • MvcCore\Ext\Tools\Images\IAdapter
  • MvcCore\Ext\Tools\Images\IComposite
  • MvcCore\Ext\Tools\Images\IFormat
  • MvcCore\Ext\Tools\Images\IImage
  • MvcCore\Ext\Tools\Images\Imagicks\IComposite
  • MvcCore\Ext\Tools\Images\IOrientation
  • MvcCore\Ext\Views\Helpers\IHelper
  • MvcCore\IApplication
  • MvcCore\IConfig
  • MvcCore\IController
  • MvcCore\IDebug
  • MvcCore\IEnvironment
  • MvcCore\IModel
  • MvcCore\IRequest
  • MvcCore\IResponse
  • MvcCore\IRoute
  • MvcCore\IRouter
  • MvcCore\ISession
  • MvcCore\ITool
  • MvcCore\IView
  • MvcCore\Model\IConstants
  • MvcCore\Request\IConstants
  • MvcCore\Response\IConstants
  • MvcCore\Route\IConstants
  • MvcCore\Router\IConstants
  • MvcCore\Session\IConstants
  • MvcCore\View\IConstants

Traits

  • MvcCore\Application\Dispatching
  • MvcCore\Application\GettersSetters
  • MvcCore\Application\Helpers
  • MvcCore\Application\Props
  • MvcCore\Config\Environment
  • MvcCore\Config\IniDump
  • MvcCore\Config\IniProps
  • MvcCore\Config\IniRead
  • MvcCore\Config\MagicMethods
  • MvcCore\Config\PropsGettersSetters
  • MvcCore\Config\ReadWrite
  • MvcCore\Controller\Dispatching
  • MvcCore\Controller\GettersSetters
  • MvcCore\Controller\Props
  • MvcCore\Controller\Rendering
  • MvcCore\Debug\Handlers
  • MvcCore\Debug\Initializations
  • MvcCore\Debug\Props
  • MvcCore\Environment\Detection
  • MvcCore\Environment\Instancing
  • MvcCore\Environment\PropsGettersSetters
  • MvcCore\Ext\Auths\Basic\Handling
  • MvcCore\Ext\Auths\Basic\PropsGettersSetters
  • MvcCore\Ext\Auths\Basics\Controller\Base
  • MvcCore\Ext\Auths\Basics\Form\Base
  • MvcCore\Ext\Auths\Basics\Form\SignIn
  • MvcCore\Ext\Auths\Basics\Form\SignOut
  • MvcCore\Ext\Auths\Basics\Role\Base
  • MvcCore\Ext\Auths\Basics\Role\Features
  • MvcCore\Ext\Auths\Basics\User\Auth
  • MvcCore\Ext\Auths\Basics\User\Base
  • MvcCore\Ext\Auths\Basics\User\Features
  • MvcCore\Ext\Auths\Basics\User\Roles
  • MvcCore\Ext\Auths\Basics\UserAndRole\Base
  • MvcCore\Ext\Auths\Basics\UserAndRole\Permissions
  • MvcCore\Ext\Configs\Yamls\YamlDump
  • MvcCore\Ext\Configs\Yamls\YamlProps
  • MvcCore\Ext\Configs\Yamls\YamlRead
  • MvcCore\Ext\Form\AddMethods
  • MvcCore\Ext\Form\Assets
  • MvcCore\Ext\Form\ConfigProps
  • MvcCore\Ext\Form\Csrf
  • MvcCore\Ext\Form\FieldMethods
  • MvcCore\Ext\Form\GetMethods
  • MvcCore\Ext\Form\InternalProps
  • MvcCore\Ext\Form\Rendering
  • MvcCore\Ext\Form\Session
  • MvcCore\Ext\Form\SetMethods
  • MvcCore\Ext\Form\Submitting
  • MvcCore\Ext\Forms\Field\Getters
  • MvcCore\Ext\Forms\Field\Props
  • MvcCore\Ext\Forms\Field\Props\AccessKey
  • MvcCore\Ext\Forms\Field\Props\AutoComplete
  • MvcCore\Ext\Forms\Field\Props\AutoFocus
  • MvcCore\Ext\Forms\Field\Props\Checked
  • MvcCore\Ext\Forms\Field\Props\DataList
  • MvcCore\Ext\Forms\Field\Props\Disabled
  • MvcCore\Ext\Forms\Field\Props\Files
  • MvcCore\Ext\Forms\Field\Props\Format
  • MvcCore\Ext\Forms\Field\Props\FormAttrs
  • MvcCore\Ext\Forms\Field\Props\GroupLabelAttrs
  • MvcCore\Ext\Forms\Field\Props\GroupLabelCssClasses
  • MvcCore\Ext\Forms\Field\Props\InputMode
  • MvcCore\Ext\Forms\Field\Props\Label
  • MvcCore\Ext\Forms\Field\Props\MinMaxLength
  • MvcCore\Ext\Forms\Field\Props\MinMaxOptions
  • MvcCore\Ext\Forms\Field\Props\MinMaxStepDates
  • MvcCore\Ext\Forms\Field\Props\MinMaxStepNumbers
  • MvcCore\Ext\Forms\Field\Props\Multiple
  • MvcCore\Ext\Forms\Field\Props\NullOptionText
  • MvcCore\Ext\Forms\Field\Props\Options
  • MvcCore\Ext\Forms\Field\Props\Pattern
  • MvcCore\Ext\Forms\Field\Props\PlaceHolder
  • MvcCore\Ext\Forms\Field\Props\ReadOnly
  • MvcCore\Ext\Forms\Field\Props\Required
  • MvcCore\Ext\Forms\Field\Props\RowsColsWrap
  • MvcCore\Ext\Forms\Field\Props\Size
  • MvcCore\Ext\Forms\Field\Props\SpellCheck
  • MvcCore\Ext\Forms\Field\Props\Submit
  • MvcCore\Ext\Forms\Field\Props\TabIndex
  • MvcCore\Ext\Forms\Field\Props\VisibleField
  • MvcCore\Ext\Forms\Field\Props\WidthHeight
  • MvcCore\Ext\Forms\Field\Props\Wrapper
  • MvcCore\Ext\Forms\Field\Rendering
  • MvcCore\Ext\Forms\Field\Setters
  • MvcCore\Ext\Forms\Validators\Files\CheckRequirements
  • MvcCore\Ext\Forms\Validators\Files\CompleteFiles
  • MvcCore\Ext\Forms\Validators\Files\ReadAccept
  • MvcCore\Ext\Forms\Validators\Files\Validations\Bomb
  • MvcCore\Ext\Forms\Validators\Files\Validations\FileAndSize
  • MvcCore\Ext\Forms\Validators\Files\Validations\MimeTypeAndExtension
  • MvcCore\Ext\Forms\Validators\Files\Validations\NameAndExtension
  • MvcCore\Ext\Models\Db\Model\Connection
  • MvcCore\Ext\Models\Db\Model\DataMethods
  • MvcCore\Ext\Models\Db\Model\Features
  • MvcCore\Ext\Models\Db\Model\Manipulation
  • MvcCore\Ext\Models\Db\Model\MetaData
  • MvcCore\Ext\Models\Db\Model\Parsers
  • MvcCore\Ext\Models\Db\Model\Props
  • MvcCore\Ext\Models\Db\Model\ProviderResource
  • MvcCore\Ext\Models\Db\Models\MySqls\Features
  • MvcCore\Ext\Models\Db\Models\MySqls\ProviderResource
  • MvcCore\Ext\Models\Db\Models\PgSqls\Features
  • MvcCore\Ext\Models\Db\Models\PgSqls\ProviderResource
  • MvcCore\Ext\Models\Db\Models\Resources\Features
  • MvcCore\Ext\Models\Db\Models\SQLites\Features
  • MvcCore\Ext\Models\Db\Models\SQLites\ProviderResource
  • MvcCore\Ext\Models\Db\Models\SqlSrvs\Features
  • MvcCore\Ext\Models\Db\Models\SqlSrvs\ProviderResource
  • MvcCore\Ext\Models\Db\Providers\Resources\Manipulation
  • MvcCore\Ext\Models\Db\Providers\Resources\PgSqls\Manipulation
  • MvcCore\Ext\Routers\Extended
  • MvcCore\Ext\Routers\Extendeds\Preparing
  • MvcCore\Ext\Routers\Extendeds\PropsGettersSetters
  • MvcCore\Ext\Routers\Extendeds\Redirect
  • MvcCore\Ext\Routers\Extendeds\RedirectHelpers
  • MvcCore\Ext\Routers\Extendeds\Url
  • MvcCore\Ext\Routers\Localization\Preparing
  • MvcCore\Ext\Routers\Localization\PreRouting
  • MvcCore\Ext\Routers\Localization\PropsGettersSetters
  • MvcCore\Ext\Routers\Localization\RedirectSections
  • MvcCore\Ext\Routers\Localization\RewriteRouting
  • MvcCore\Ext\Routers\Localization\RewriteRoutingChecks
  • MvcCore\Ext\Routers\Localization\Routing
  • MvcCore\Ext\Routers\Localization\UrlByRoute
  • MvcCore\Ext\Routers\Localization\UrlByRouteSections
  • MvcCore\Ext\Routers\Localization\UrlByRouteSectionsLocalization
  • MvcCore\Ext\Routers\Localizations\Route\Instancing
  • MvcCore\Ext\Routers\Localizations\Route\InternalInits
  • MvcCore\Ext\Routers\Localizations\Route\Matching
  • MvcCore\Ext\Routers\Localizations\Route\PropsGettersSetters
  • MvcCore\Ext\Routers\Localizations\Route\UrlBuilding
  • MvcCore\Ext\Routers\Media\Preparing
  • MvcCore\Ext\Routers\Media\PreRouting
  • MvcCore\Ext\Routers\Media\PropsGettersSetters
  • MvcCore\Ext\Routers\Media\RedirectSections
  • MvcCore\Ext\Routers\Media\Routing
  • MvcCore\Ext\Routers\Media\UrlByRoute
  • MvcCore\Ext\Routers\Media\UrlByRouteSections
  • MvcCore\Ext\Routers\Media\UrlByRouteSectionsMedia
  • MvcCore\Ext\Routers\MediaAndLocalization\RedirectSections
  • MvcCore\Ext\Routers\MediaAndLocalization\Routing
  • MvcCore\Ext\Routers\MediaAndLocalization\UrlByRoute
  • MvcCore\Ext\Routers\MediaAndLocalization\UrlByRouteSections
  • MvcCore\Ext\Routers\Module\Canonical
  • MvcCore\Ext\Routers\Module\DomainRouteSetUp
  • MvcCore\Ext\Routers\Module\DomainRouting
  • MvcCore\Ext\Routers\Module\PreAndPostRouting
  • MvcCore\Ext\Routers\Module\Props
  • MvcCore\Ext\Routers\Module\Redirect
  • MvcCore\Ext\Routers\Module\RewriteRoutingChecks
  • MvcCore\Ext\Routers\Module\RouteMethods
  • MvcCore\Ext\Routers\Module\UrlByQuery
  • MvcCore\Ext\Routers\Module\UrlByRoute
  • MvcCore\Ext\Routers\Module\UrlByRouteSections
  • MvcCore\Ext\Routers\Module\UrlDomain
  • MvcCore\Ext\Routers\ModuleLocalization\DomainRouteSetUp
  • MvcCore\Ext\Routers\ModuleLocalization\Redirect
  • MvcCore\Ext\Routers\ModuleLocalization\RewriteRoutingChecks
  • MvcCore\Ext\Routers\ModuleLocalization\UrlByRoute
  • MvcCore\Ext\Routers\ModuleMedia\DomainRouteSetUp
  • MvcCore\Ext\Routers\ModuleMedia\Redirect
  • MvcCore\Ext\Routers\ModuleMediaAndLocalization\DomainRouteSetUp
  • MvcCore\Ext\Routers\ModuleMediaAndLocalization\Redirect
  • MvcCore\Ext\Routers\Modules\Route\Instancing
  • MvcCore\Ext\Routers\Modules\Route\Matching
  • MvcCore\Ext\Routers\Modules\Route\PropsGettersSetters
  • MvcCore\Ext\Routers\Modules\Route\UrlBuilding
  • MvcCore\Model\Comparers
  • MvcCore\Model\Config
  • MvcCore\Model\Connection
  • MvcCore\Model\Converters
  • MvcCore\Model\DataMethods
  • MvcCore\Model\MagicMethods
  • MvcCore\Model\MetaData
  • MvcCore\Model\Parsers
  • MvcCore\Model\Props
  • MvcCore\Model\Resource
  • MvcCore\Request\CollectionsMethods
  • MvcCore\Request\GettersSetters
  • MvcCore\Request\Instancing
  • MvcCore\Request\InternalInits
  • MvcCore\Request\Props
  • MvcCore\Response\Content
  • MvcCore\Response\Cookies
  • MvcCore\Response\Headers
  • MvcCore\Response\Instancing
  • MvcCore\Response\PropsGettersSetters
  • MvcCore\Route\GettersSetters
  • MvcCore\Route\Instancing
  • MvcCore\Route\InternalInits
  • MvcCore\Route\Matching
  • MvcCore\Route\Props
  • MvcCore\Route\UrlBuilding
  • MvcCore\Router\Canonical
  • MvcCore\Router\GettersSetters
  • MvcCore\Router\Instancing
  • MvcCore\Router\Props
  • MvcCore\Router\Redirecting
  • MvcCore\Router\RewriteRouting
  • MvcCore\Router\RouteMethods
  • MvcCore\Router\Routing
  • MvcCore\Router\UrlBuilding
  • MvcCore\Router\UrlByQuery
  • MvcCore\Router\UrlByRoutes
  • MvcCore\Session\Closing
  • MvcCore\Session\MagicMethods
  • MvcCore\Session\MetaData
  • MvcCore\Session\NamespaceMethods
  • MvcCore\Session\Props
  • MvcCore\Session\Starting
  • MvcCore\Tool\Helpers
  • MvcCore\Tool\Json
  • MvcCore\Tool\Reflection
  • MvcCore\Tool\StringConversions
  • MvcCore\View\DirectoryMethods
  • MvcCore\View\Escaping
  • MvcCore\View\GettersSetters
  • MvcCore\View\LocalMethods
  • MvcCore\View\MagicMethods
  • MvcCore\View\Props
  • MvcCore\View\Rendering
  • MvcCore\View\UrlHelpers
  • MvcCore\View\ViewHelpers

Exceptions

  • MvcCore\Ext\Models\Db\Exception
  • Throwable

Functions

  • MvcCore\Ext\Models\Db\FuncHelpers\Columns
  • MvcCore\Ext\Models\Db\FuncHelpers\Table
  • Overview
  • Class
  • Tree
  • Todo
  • Deprecated
  • Download
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: 649: 650: 651: 652: 653: 654: 655: 656: 657: 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: 675: 676: 677: 678: 679: 680: 681: 682: 683: 684: 685: 686: 687: 688: 689: 690: 691: 692: 693: 694: 695: 696: 697: 698: 699: 700: 701: 702: 703: 704: 705: 706: 707: 708: 709: 710: 711: 712: 713: 714: 715: 716: 717: 718: 719: 720: 721: 722: 723: 724: 725: 726: 727: 728: 729: 730: 731: 732: 733: 734: 735: 736: 737: 738: 739: 740: 741: 742: 743: 744: 745: 746: 747: 748: 749: 750: 751: 752: 753: 754: 755: 756: 757: 758: 759: 760: 761: 762: 763: 764: 765: 766: 767: 768: 769: 770: 771: 772: 773: 774: 775: 776: 777: 778: 779: 780: 781: 782: 783: 784: 785: 786: 787: 788: 789: 790: 791: 792: 793: 794: 795: 796: 797: 798: 799: 800: 801: 802: 803: 804: 805: 806: 807: 808: 809: 810: 811: 812: 813: 814: 815: 816: 817: 818: 819: 820: 821: 822: 823: 824: 825: 826: 827: 828: 829: 830: 831: 832: 833: 834: 835: 836: 837: 838: 839: 840: 841: 842: 843: 844: 845: 846: 847: 848: 849: 850: 851: 852: 853: 854: 855: 856: 857: 858: 859: 860: 861: 862: 863: 864: 865: 866: 867: 868: 869: 870: 871: 872: 873: 874: 875: 876: 877: 878: 879: 880: 881: 882: 883: 884: 885: 886: 887: 888: 889: 890: 891: 892: 893: 894: 895: 896: 897: 898: 899: 900: 901: 902: 903: 904: 905: 906: 907: 908: 909: 910: 911: 912: 913: 914: 915: 916: 917: 918: 919: 920: 921: 922: 923: 924: 925: 926: 927: 928: 929: 930: 931: 932: 933: 934: 935: 936: 937: 938: 
<?php

/**
 * MvcCore
 *
 * This source file is subject to the BSD 3 License
 * For the full copyright and license information, please view
 * the LICENSE.md file that are distributed with this source code.
 *
 * @copyright   Copyright (c) 2016 Tom Flidr (https://github.com/mvccore)
 * @license     https://mvccore.github.io/docs/mvccore/5.0.0/LICENCE.md
 */

namespace MvcCore\Ext\Auths\Basic;

/**
 * Trait for `\MvcCore\Ext\Auths\Basic` class. Trait contains:
 * - All static properties.
 * - All instance configurable properties except `protected $autoInit` property from `\MvcCore\Model`.
 * - All instance non-configurable properties for internal use.
 * - Getters for non-configurable and configurable instance properties.
 * - Setters for configurable properties with interface implementation checking for class name properties.
 * - Setters for non-configurable instance properties.
 */
trait PropsGettersSetters {

    /***********************************************************************************
     *                              Static Properties                               *
     ***********************************************************************************/

    /**
     * Singleton instance of authentication extension module.
     * @var \MvcCore\Ext\Auths\Basic|NULL
     */
    protected static $instance = NULL;

    /**
     * Shortcut for configured core tool class value
     * from `\MvcCore\Application::GetInstance()->GetToolClass();`.
     * @var string|NULL
     */
    protected static $toolClass = NULL;

    /**
     * Properties names which are internal properties
     * or internal instances for authentication module,
     * which are not configuration properties, instance properties only.
     * This array is used only in `\MvcCore\Ext\Auth::GetConfiguration();`.
     * @var array
     */
    protected static $nonConfigurationProperties = [
        'userInitialized', 'application', 'user', 'form',
    ];


    /***********************************************************************************
     *                          Configuration Properties                             *
     ***********************************************************************************/

    /**
     * Expiration time (in seconds) how long to remember the user name in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 1 month (30 days, 2592000 seconds).
     * @var int
     */
    protected $expirationIdentity = 2592000;

    /**
     * Expiration time (in seconds) how long to remember the authorization in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 10 minutes (600 seconds).
     * @var int
     */
    protected $expirationAuthorization = 600;

    /**
     * Full class name to use for user instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IUser`.
     * @var string
     */
    protected $userClass = 'MvcCore\\Ext\\Auths\\Basics\\User';

    /**
     * Full class name to use for user role class.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IRole`.
     * @var string
     */
    protected $roleClass = 'MvcCore\\Ext\\Auths\\Basics\\Role';

    /**
     * Full class name to use for controller instance
     * to submit authentication form(s). Class name has to implement interfaces:
     * - `\MvcCore\Ext\Auths\Basics\IController`
     * - `\MvcCore\IController`
     * @var string
     */
    protected $controllerClass = '//MvcCore\\Ext\\Auths\\Basics\\Controller';

    /**
     * Full class name to use for sign in form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * @var string
     */
    protected $signInFormClass = 'MvcCore\\Ext\\Auths\\Basics\\SignInForm';

    /**
     * Full class name to use for sign out form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * @var string
     */
    protected $signOutFormClass = 'MvcCore\\Ext\\Auths\\Basics\\SignOutForm';

    /**
     * Full URL to redirect user, after sign in
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in form rendered.
     * @var string|NULL
     */
    protected $signedInUrl = NULL;

    /**
     * Full URL to redirect user, after sign out
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign out form rendered.
     * @var string|NULL
     */
    protected $signedOutUrl = NULL;

    /**
     * Full URL to redirect user, after sign in POST
     * request or sign out POST request was not successful,
     * for example wrong credentials.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in/out form rendered.
     * @var string|NULL
     */
    protected $signErrorUrl = NULL;

    /**
     * Route to submit sign in form to.
     * It could be defined only as a string (route pattern),
     * or as route configuration array or as route instance.
     * Default match/reverse pattern for route sign request is
     * `/signin` by POST.
     * @var string|array|\MvcCore\Route
     */
    protected $signInRoute = [
        'name'      => 'auth_signin',
        'match'     => '#^/signin/?$#',
        'reverse'   => '/signin',
        'method'    => \MvcCore\IRequest::METHOD_POST
    ];

    /**
     * Route to submit sign out form into.
     * It could be defined only as a string (route pattern),
     * or as route configuration array or as route instance.
     * Default match/reverse pattern for route sign request is
     * `/signout` by POST.
     * @var string|array|\MvcCore\Route
     */
    protected $signOutRoute = [
        'name'      => 'auth_signout',
        'match'     => '#^/signout/?$#',
        'reverse'   => '/signout',
        'method'    => \MvcCore\IRequest::METHOD_POST
    ];

    /**
     * Salt for `passord_hash();` to generate password by `PASSWORD_BCRYPT`.
     * `NULL` by default. This option is the only one option required
     * to configure authentication module to use it properly.
     * @var string
     */
    protected $passwordHashSalt = NULL;

    /**
     * Timeout to `sleep();` PHP script before sending response to user,
     * when user submitted invalid username or password.
     * Default value is `3` (3 seconds).
     * @var int
     */
    protected $invalidCredentialsTimeout = 3;

    /**
     * Callable translator to set it into authentication form
     * to translate form labels, placeholders, buttons or error messages.
     * Default value is `NULL` (forms without translations).
     * @var callable|NULL
     */
    protected $translator = NULL;

    /**
     * Pre-route and pre-dispatch application callable handlers priority index.
     * This property has no setter and getter. It's possible to configure only throw constructor.
     * @var int
     */
    protected $preHandlersPriority = 100;


    /***********************************************************************************
     *                             Internal Properties                             *
     ***********************************************************************************/

    /**
     * MvcCore application instance reference from
     * `\MvcCore\Application::GetInstance()`, because
     * it's used many times in authentication class.
     * @var \MvcCore\Application
     */
    protected $application = NULL;

    /**
     * User model instance or `NULL` if user has no username record in session namespace.
     * @var \MvcCore\Ext\Auths\Basics\User|NULL
     */
    protected $user = NULL;

    /**
     * Sign in form instance, sign out form instance or any
     * other authentication form instance in extended classes.
     * If user is authenticated by username record in session namespace,
     * there is completed sign out form, if not authenticated, sign in form otherwise etc...
     * @var \MvcCore\Ext\Auths\Basics\SignInForm|\MvcCore\Ext\Auths\Basics\SignOutForm
     */
    protected $form = NULL;

    /**
     * This is only internal semaphore to call
     * `\MvcCore\Ext\Auths\Basics\User::SetUpUserBySession()`
     * only once (if result is `NULL`) in request pre-dispatch state.
     * `TRUE`if method `\MvcCore\Ext\Auth::GetInstance()->GetUser()`
     * has been called already with any result and also `TRUE` if
     * method `\MvcCore\Ext\Auth::GetInstance()->SetUser($user)` has been
     * already called with any first argument `$user` value.
     * @var bool
     */
    protected $userInitialized = FALSE;

    /**
     * This is only internal semaphore to define when to add
     * sign in or sign out route into router in pre route request state.
     * If any configured route is for different http method than `POST`,
     * than this property is set to `TRUE`. If both configured routes
     * use only `POST` method, this property is automatically `FALSE` to
     * not add routes for all requests, only for `POST` requests.
     * Default value is `FALSE` because both default routes use `POST` methods.
     * @var bool
     */
    protected $addRoutesForAnyRequestMethod = FALSE;


    /***********************************************************************************
     *                                   Getters                                     *
     ***********************************************************************************/

    /**
     * Get expiration time (in seconds) how long to remember the user name in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 1 month (30 days, 2592000 seconds).
     * @return int
     */
    public function GetExpirationIdentity () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->expirationIdentity;
    }

    /**
     * Get expiration time (in seconds) how long to remember the authorization in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 10 minutes (600 seconds).
     * @return int
     */
    public function GetExpirationAuthorization () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->expirationAuthorization;
    }

    /**
     * Get full class name to use for user instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IUser`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\User`.
     * @return string
     */
    public function GetUserClass () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->userClass;
    }

    /**
     * Get full class name to use for user role class.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IRole`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\Role`.
     * @return string
     */
    public function GetRoleClass () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->roleClass;
    }

    /**
     * Get full class name to use for controller instance
     * to submit authentication form(s). Class name has to implement interfaces:
     * - `\MvcCore\Ext\Auths\Basics\IController`
     * - `\MvcCore\IController`
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\Controller`.
     * @return string
     */
    public function GetControllerClass () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->controllerClass;
    }

    /**
     * Get full class name to use for sign in form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\SignInForm`.
     * @return string
     */
    public function GetSignInFormClass () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->signInFormClass;
    }

    /**
     * Full class name to use for sign out form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\SignOutForm`.
     * @return string
     */
    public function GetSignOutFormClass () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->signOutFormClass;
    }

    /**
     * Get full URL to redirect user, after sign in
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in form rendered.
     * @return string|NULL
     */
    public function GetSignedInUrl () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->signedInUrl;
    }

    /**
     * Get full URL to redirect user, after sign out
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign out form rendered.
     * @return string|NULL
     */
    public function GetSignedOutUrl () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->signedOutUrl;
    }

    /**
     * Get full URL to redirect user, after sign in POST
     * request or sign out POST request was not successful,
     * for example wrong credentials.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in/out form rendered.
     * @param string $signErrorUrl
     * @return string|NULL
     */
    public function GetSignErrorUrl () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->signErrorUrl;
    }

    /**
     * Get route instance to submit sign in form into.
     * Default configured route for sign in request is `/signin` by POST.
     * @return \MvcCore\Route
     */
    public function GetSignInRoute () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->getInitializedRoute('SignIn');
    }

    /**
     * Get route to submit sign out form into.
     * Default configured route for sign in request is `/signout` by POST.
     * @return \MvcCore\Route
     */
    public function GetSignOutRoute () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->getInitializedRoute('SignOut');
    }

    /**
     * Get configured salt for `passord_hash();` to generate password by `PASSWORD_BCRYPT`.
     * `NULL` by default. This option is the only one option required
     * to configure authentication module to use it properly.
     * @return string|NULL
     */
    public function GetPasswordHashSalt () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->passwordHashSalt;
    }

    /**
     * Get timeout to `sleep();` PHP script before sending response to user,
     * when user submitted invalid username or password.
     * Default value is `3` (3 seconds).
     * @return int
     */
    public function GetInvalidCredentialsTimeout () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->invalidCredentialsTimeout;
    }

    /**
     * Get configured callable translator to set it into authentication form
     * to translate form labels, placeholders, buttons or error messages.
     * Default value is `NULL` (forms without translations).
     * @return callable|NULL
     */
    public function GetTranslator () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->translator;
    }

    /**
     * Get authenticated user model instance reference
     * or `NULL` if user has no username record in session namespace.
     * If user has not yet been initialized, load the user internally by
     * `{$configuredUserClass}::SetUpUserBySession();` to try to load
     * user by username record in session namespace.
     * @return \MvcCore\Ext\Auths\Basics\User|NULL
     */
    public function GetUser () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        if (!$this->userInitialized && $this->user === NULL) {
            $configuredUserClass = $this->userClass;
            $this->user = $configuredUserClass::SetUpUserBySession();
            if ($this->user !== NULL) $this->user->SetPasswordHash(NULL);
            $this->userInitialized = TRUE;
        }
        return $this->user;
    }

    /**
     * Return `TRUE` if user is authenticated/signed in,
     * `TRUE` if user has any username record in session namespace.
     * If user has not yet been initialized, load the user internally by
     * `$auth->GetUser();` to try to load user by username record in session namespace.
     * @return bool
     */
    public function IsAuthenticated () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        return $this->GetUser() !== NULL;
    }

    /**
     * Return completed sign in or sign out form instance.
     * Form instance completion is processed only once,
     * any created form instance is stored in `$auth->form` property.
     * This method is always called by you, your application
     * to set form into you custom template to render it for user.
     * If user is not authenticated, sign in form is returned and
     * if user is authenticated, opposite sign out form is returned.
     * This method is only alias to call two other methods:
     * - `\MvcCore\Ext\Auths\Basic::GetInstance()->GetSignInForm();` for not authenticated users.
     * - `\MvcCore\Ext\Auths\Basic::GetInstance()->GetSignOutForm();` for authenticated users.
     * @var \MvcCore\Ext\Auths\Basics\SignInForm|\MvcCore\Ext\Auths\Basics\SignOutForm
     */
    public function GetForm () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        if ($this->IsAuthenticated()) {
            $form = $this->GetSignOutForm();
        } else {
            $form = $this->GetSignInForm();
        }
        return $form;
    }

    /**
     * Return completed sign in form instance.
     * Form instance completion is processed only once,
     * created form instance is stored in `$auth->form` property.
     * @return \MvcCore\Ext\Auths\Basics\SignInForm
     */
    public function GetSignInForm () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        if ($this->form !== NULL) return $this->form;
        $routerClass = $this->application->GetRouterClass();
        $router = $routerClass::GetInstance();
        $route = $this->getInitializedRoute('SignIn')->SetRouter($router);
        $method = $route->GetMethod();
        $appCtrl = $this->application->GetController();
        $formClassType = new \ReflectionClass($this->signInFormClass);
        $this->form = $formClassType->newInstanceArgs([$appCtrl]);
        $this->form
            ->AddCssClasses(str_replace('_', ' ', $this->form->GetId()))
            ->SetMethod($method !== NULL ? $method : \MvcCore\IRequest::METHOD_POST)
            ->SetAction($router->UrlByRoute($route))
            ->SetSuccessUrl($this->signedInUrl)
            ->SetErrorUrl($this->signErrorUrl);
        if ($this->translator)
            $this->form->SetTranslator($this->translator);
        $this->form->Init();
        return $this->form;
    }

    /**
     * Return completed sign out form instance.
     * Form instance completion is processed only once,
     * created form instance is stored in `$auth->form` property.
     * @return \MvcCore\Ext\Auths\Basics\SignOutForm
     */
    public function GetSignOutForm () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        if ($this->form !== NULL) return $this->form;
        $routerClass = $this->application->GetRouterClass();
        $router = $routerClass::GetInstance();
        $route = $this->getInitializedRoute('SignOut')->SetRouter($router);
        $method = $route->GetMethod();
        $appCtrl =  $this->application->GetController();
        $formClassType = new \ReflectionClass($this->signOutFormClass);
        $this->form = $formClassType->newInstanceArgs([$appCtrl]);
        $this->form
            ->AddCssClasses(str_replace('_', ' ', $this->form->GetId()))
            ->SetMethod($method !== NULL ? $method : \MvcCore\IRequest::METHOD_POST)
            ->SetAction($router->UrlByRoute($route))
            ->SetSuccessUrl($this->signedOutUrl)
            ->SetErrorUrl($this->signErrorUrl);
        if ($this->translator)
            $this->form->SetTranslator($this->translator);
        $this->form->Init();
        return $this->form;
    }

    /**
     * Return `array` with all protected configuration properties.
     * @return array
     */
    public function GetConfiguration () {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $result = [];
        $type = new \ReflectionClass($this);
        /** @var $props \ReflectionProperty[] */
        $props = $type->getProperties(
            \ReflectionProperty::IS_PUBLIC |
            \ReflectionProperty::IS_PROTECTED
        );
        foreach ($props as $prop) {
            if ($prop->isStatic()) continue;
            $name = $prop->getName();
            if (!in_array($name, static::$nonConfigurationProperties, TRUE))
                $result[$name] = $prop->getValue($this);
        }
        return $result;
    }


    /***********************************************************************************
     *                                   Setters                                     *
     ***********************************************************************************/

    /**
     * Set expiration time (in seconds) how long to remember the user name in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 1 month (30 days, 2592000 seconds).
     * @param int $expirationIdentity
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetExpirationIdentity ($identityExpirationSeconds = 2592000) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->expirationIdentity = $identityExpirationSeconds;
        return $this;
    }

    /**
     * Set expiration time (in seconds) how long to remember the authorization in session.
     * You can use zero (`0`) to browser close moment, but some browsers can
     * restore previous session after next browser application start. Or anybody
     * else in your project could use session for storing any information
     * for some longer time in your application and session cookie could then
     * exists much longer then browser close moment only.
     * So better is not to use a zero value.
     * Default value is 10 minutes (600 seconds).
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetExpirationAuthorization ($authorizationExpirationSeconds = 600) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->expirationAuthorization = $authorizationExpirationSeconds;
        return $this;
    }

    /**
     * Set full class name to use for user instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IUser`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\User`.
     * @param string $userClass User full class name implementing `\MvcCore\Ext\Auths\Basics\IUser`.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetUserClass ($userClass = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->userClass = $this->checkClassImplementation(
            $userClass, 'MvcCore\\Ext\\Auths\\Basics\\IUser', TRUE
        );
        return $this;
    }

    /**
     * Set full class name to use for user role class.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IRole`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\Role`.
     * @param string $roleClass Role full class name implementing `\MvcCore\Ext\Auths\Basics\IRole`.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetRoleClass ($roleClass = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->userClass = $this->checkClassImplementation(
            $roleClass, 'MvcCore\\Ext\\Auths\\Basics\\IRole', TRUE
        );
        return $this;
    }

    /**
     * Set full class name to use for controller instance
     * to submit authentication form(s). Class name has to implement interfaces:
     * - `\MvcCore\Ext\Auths\Basics\IController`
     * - `\MvcCore\IController`
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\Controller`.
     * @param string $controllerClass Controller full class name implementing `\MvcCore\Ext\Auths\Basics\IController`.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetControllerClass ($controllerClass = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        if (substr($controllerClass, 0, 2) == '//') {
            $controllerClassToCheck = substr($controllerClass, 2);
        } else {
            $controllerClassToCheck = $controllerClass;
        }
        $controllerClassToCheck = $this->checkClassImplementation(
            $controllerClassToCheck, 'MvcCore\\Ext\\Auths\\Basics\\IController', FALSE
        );
        $controllerClassToCheck = $this->checkClassImplementation(
            $controllerClassToCheck, 'MvcCore\\IController', TRUE
        );
        if ($controllerClassToCheck)
            $this->controllerClass = $controllerClass;
        return $this;
    }

    /**
     * Set full class name to use for sign in form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\SignInForm`.
     * @param string $signInFormClass Form full class name implementing `\MvcCore\Ext\Auths\Basics\IForm`.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignInFormClass ($signInFormClass = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signInFormClass = $this->checkClassImplementation(
            $signInFormClass, 'MvcCore\\Ext\\Auths\\Basics\\IForm', FALSE
        );
        return $this;
    }

    /**
     * Set full class name to use for sign out form instance.
     * Class name has to implement interface
     * `\MvcCore\Ext\Auths\Basics\IForm`.
     * Default value after authentication module init is
     * configured to `\MvcCore\Ext\Auths\Basics\SignOutForm`.
     * @param string $signInFormClass Form full class name implementing `\MvcCore\Ext\Auths\Basics\IForm`.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignOutFormClass ($signOutFormClass = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signOutFormClass = $this->checkClassImplementation(
            $signOutFormClass, 'MvcCore\\Ext\\Auths\\Basics\\IForm', FALSE
        );
        return $this;
    }

    /**
     * Set full URL to redirect user, after sign in
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in form rendered.
     * @param string|NULL $signedInUrl
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignedInUrl ($signedInUrl = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signedInUrl = $signedInUrl;
        return $this;
    }

    /**
     * Set full URL to redirect user, after sign out
     * POST request was successful.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign out form rendered.
     * @param string|NULL $signedOutUrl
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignedOutUrl ($signedOutUrl = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signedOutUrl = $signedOutUrl;
        return $this;
    }

    /**
     * Set full URL to redirect user, after sign in POST
     * request or sign out POST request was not successful,
     * for example wrong credentials.
     * If `NULL` (by default), user will be redirected
     * to the same url, where was sign in/out form rendered.
     * @param string|NULL $signErrorUrl
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignErrorUrl ($signErrorUrl = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signErrorUrl = $signErrorUrl;
        return $this;
    }

    /**
     * Set route instance to submit sign in form into.
     * Default configured route for sign in request is `/signin` by POST.
     * @param string|array|\MvcCore\Route $signInRoute
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignInRoute ($signInRoute = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signInRoute = $signInRoute;
        $method = NULL;
        if (gettype($signInRoute) == 'array' && isset($signInRoute['method']))
            $method = strtoupper($signInRoute['method']);
        if ($signInRoute instanceof \MvcCore\IRoute)
            $method = $signInRoute->GetMethod();
        if ($method !== \MvcCore\IRequest::METHOD_POST)
            $this->addRoutesForAnyRequestMethod = TRUE;
        return $this;
    }

    /**
     * Set route to submit sign out form into.
     * Default configured route for sign in request is `/signout` by POST.
     * @param string|array|\MvcCore\Route $signOutRoute
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetSignOutRoute ($signOutRoute = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->signOutRoute = $signOutRoute;
        $method = NULL;
        if (gettype($signOutRoute) == 'array' && isset($signOutRoute['method']))
            $method = strtoupper($signOutRoute['method']);
        if ($signOutRoute instanceof \MvcCore\IRoute)
            $method = $signOutRoute->GetMethod();
        if ($method !== \MvcCore\IRequest::METHOD_POST)
            $this->addRoutesForAnyRequestMethod = TRUE;
        return $this;
    }

    /**
     * Set configured salt for `passord_hash();` to generate password by `PASSWORD_BCRYPT`.
     * `NULL` by default. This option is the only one option required
     * to configure authentication module to use it properly.
     * @param string $passwordHashSalt
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetPasswordHashSalt ($passwordHashSalt = '') {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->passwordHashSalt = $passwordHashSalt;
        return $this;
    }

    /**
     * Set timeout to `sleep();` PHP script before sending response to user,
     * when user submitted invalid username or password.
     * Default value is `3` (3 seconds).
     * @param int $seconds
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetInvalidCredentialsTimeout ($seconds = 3) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->invalidCredentialsTimeout = $seconds;
        return $this;
    }

    /**
     * Set callable translator to set it into authentication form
     * to translate form labels, placeholders or buttons.
     * Default value is `NULL` (forms without translations).
     * @param callable $translator
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetTranslator (callable $translator = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->translator = $translator;
        return $this;
    }

    /**
     * Set user instance manually. If you use this method
     * no authentication by `{$configuredUserClass}::SetUpUserBySession();`
     * is used and authentication state is always positive.
     * @param \MvcCore\Ext\Auths\Basics\User|NULL $user
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetUser (\MvcCore\Ext\Auths\Basics\IUser $user = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->user = $user;
        if ($this->user !== NULL) $this->user->SetPasswordHash(NULL);
        $this->userInitialized = TRUE;
        return $this;
    }

    /**
     * Set sign in, sign out or any authentication form instance.
     * Use this method only if you need sometimes to complete different form to render.
     * @param \MvcCore\Ext\Auths\Basics\SignInForm|\MvcCore\Ext\Auths\Basics\SignOutForm $form
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetForm (\MvcCore\Ext\Auths\Basics\IForm $form) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $this->form = $form;
        return $this;
    }

    /**
     * Set up authorization module configuration.
     * Each array key has to be key by protected configuration property in this class.
     * All properties are one by one configured by it's setter method.
     * @param array $configuration Keys by protected properties names in camel case.
     * @param bool $throwExceptionIfPropertyIsMissing
     * @throws \InvalidArgumentException
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetConfiguration ($configuration = [], $throwExceptionIfPropertyIsMissing = TRUE) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        foreach ($configuration as $key => $value) {
            $setter = 'Set' . ucfirst($key);
            if (method_exists($this, $setter)) {
                $this->{$setter}($value);
            } else if ($throwExceptionIfPropertyIsMissing) {
                throw new \InvalidArgumentException (
                    '['.get_class().'] Property `'.$key.'` has no setter method `'.$setter.'` in class `'.get_class($this).'`.'
                );
            }
        }
        return $this;
    }

    /**
     * Optional alias method if you have user class configured
     * to database user: `\MvcCore\Ext\Auths\Basics\Users\Database`.
     * Alias for `\MvcCore\Ext\Auths\Basics\Users\Database::SetUsersTableStructure($tableName, $columnNames);`.
     * @param string|NULL   $tableName Database table name.
     * @param string[]|NULL $columnNames Keys are user class protected properties names in camel case, values are database columns names.
     * @return \MvcCore\Ext\Auths\Basic
     */
    public function SetTableStructureForDbUsers ($tableName = NULL, $columnNames = NULL) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $userClass = $this->userClass;
        $toolClass = static::$toolClass;
        if ($toolClass::CheckClassInterface($userClass, 'MvcCore\\Ext\\Auths\\Basics\\IDatabaseUser', TRUE, TRUE)) {
            $userClass::SetUsersTableStructure($tableName, $columnNames);
        };
        return $this;
    }

    /**
     * Check if given class name implements given interface
     * and optionally if test class implements static interface methods.
     * If not, thrown an `\InvalidArgumentException` every time.
     * @param string $testClassName Full test class name.
     * @param string $interfaceName Full interface class name.
     * @param bool $checkStaticMethods `FALSE` by default.
     * @throws \InvalidArgumentException
     * @return string
     */
    protected function checkClassImplementation ($testClassName, $interfaceName, $checkStaticMethods = FALSE) {
        /** @var $this \MvcCore\Ext\Auths\Basic */
        $toolClass = static::$toolClass;
        if ($toolClass::CheckClassInterface($testClassName, $interfaceName, $checkStaticMethods, TRUE)) {
            return $testClassName;
        }
        return '';
    }
}
MvcCore API Documentation API documentation generated by ApiGen