LimeSurvey architecture: Difference between revisions
From LimeSurvey Manual
(→Layers) |
(→Layers) |
||
Line 108: | Line 108: | ||
[https://github.com/olleharstedt/diagrams.net/blob/main/LS%20Arch.drawio Source]. | [https://github.com/olleharstedt/diagrams.net/blob/main/LS%20Arch.drawio Source]. | ||
Overview of future refactoring efforts. | |||
[[File:ls_arch_refactor.png]] | [[File:ls_arch_refactor.png]] |
Revision as of 15:06, 25 August 2021
This is the main public document for LimeSurvey's architecture
Overview
todo, constraints
This is the architectural documentation for the LimeSurvey application. It does not document the ecosystem surrounding it.
Vision
todo
Technology stack
Programming languages:
- PHP 7.2+
- JavaScript ES6 (admin) and IE11 compatible (survey taking)
- CSS, HTML
- XML, JSON
Frameworks:
- Yii 1.1
- jQuery
- Vue 1
- PHPUnit
Tools:
- Git
- GitHub Actions
- Psalm
- CodeSniffer
- MessDetector
- Scrutinizer
- Selenium, geckodriver
Dependency management:
- Manually (should be refactored)
- Yarn
- Composer
Libraries:
- CKEditor
- kcfinder
- PDF?
- Sodium
- Twig
- PHPMailer
- pclzip
Risks
As defined in the code quality guide.
Risk identification, analysis, mitigation, monitor.
Product risk
These risks are considering the individual LimeSurvey user or admin.
- Data loss (known or unknown)
- Unauthorized data access
- Blocking bugs (that leads to data loss)
Project risk
todo
- Communication
- Regressions and lack of testing
Business risk
Internal
Quality attributes
Maintainability, easy to deploy, testability
Views
4+1 view model?
Domain
A simple domain diagram over LimeSurvey:
Layers
LimeSurvey uses a basic, monolithic MVC layered architecture.
- View layer, serving HTML, JSON or XML to the calling part (can be browser or local API machine)
- Controller layer, gluing parts together from the other layers
- Business logic layer, calculating business rules, should be fully unit-testable
- Database storage layer (also includes domain entity validation)
Refactoring should be focused on strengthening the separation between the layers.
Overview of future refactoring efforts.
Flow and state
automata between states
admin flow diagram? what makes sense to document? create survey process?
API design
todo
Security
todo