phpList is an open source newsletter manager.
This module will contain the web frontend for phpList 4. It will not have any SQL queries but use functionality from the phpList 4 core for DB access.
This module is optional, i.e., it will be possible to run phpList 4 without a web frontend.
Please install this package via Composer from within the phpList base distribution, which also has more detailed installation instructions in the README.
When this module is installed as a dependency, publish bundle assets to the host application's public/ directory:
php bin/console assets:install public --symlink --relativeThis module serves its frontend files from /.
Please read the contribution guide on how to contribute and how to run the unit tests and style checks locally.
This project adheres to a Contributor Code of Conduct. By participating in this project and its community, you are expected to uphold this code.
# Start the Symfony local server
symfony local:server:start# Compile and watch assets (including Vue.js components)
yarn encore dev --watchThis project uses Vue.js for interactive UI components. Vue components are located in the assets/vue/ directory and are mounted to specific DOM elements:
App.vueis mounted to the element with IDvue-app
To add new Vue components:
- Create the component in the
assets/vue/directory - Import and mount it in
assets/app.js - Add a mount point in the appropriate template
The rich text editor lives in assets/editor/ and is exposed to the existing forms through assets/vue/components/base/CkEditorField.vue.
assets/editor/CkEditor.vueis the reusable Vue 3 editor component.assets/editor/uploadAdapter.tsprovides CKEditor upload support against a Symfony endpoint.assets/editor/assetBrowserPlugin.jsadds a toolbar button that opens the native asset browser.assets/editor/EditorAssetPicker.vueshows existing uploaded files and inserts them as images or links.assets/editor/plugins.tsandassets/editor/toolbar.tskeep the editor configuration isolated and reusable.src/Service/EditorUploadService.phpstores uploads in the public filesystem and returns a browser URL.src/Controller/EditorUploadController.phpaccepts authenticated uploads and lists existing assets.
- upload path conventions
- image validation rules
- public-file URL generation strategy
- file storage separation for editor content
- asset browsing behavior, expressed as a native Vue modal instead of a popup window
- Vue component with
v-model - configurable toolbar and CKEditor options
- upload adapter with progress support
- cleanup on unmount
- read-only mode support
- existing file browser for reusing uploaded content
yarn encore dev
yarn test:vue
vendor/bin/phpunitThe backend uses the existing phpList upload directory parameters:
phplist.upload_images_dir
Uploads are stored below public/<phplist.upload_images_dir>/ckeditor5/.
- This integration only covers image uploads from CKEditor.
- elFinder is not embedded in the frontend UI; the frontend now provides a native asset browser instead.
- Existing legacy HTML content is preserved as-is, but custom HTML support still depends on CKEditor 5 output rules.