LimeSurvey architecture: Difference between revisions
From LimeSurvey Manual
Line 72: | Line 72: | ||
* Communication | * Communication | ||
* Regressions | * Regressions and lack of testing | ||
=== Business risk === | === Business risk === |
Revision as of 14:39, 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
Technology stack
Dependency management, packaging, plugin
todo
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.
Flow and state
automata between states
admin flow diagram? what makes sense to document? create survey process?
API design
todo
Security
todo