Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e9828f8
Datetime format settings
ksroga Feb 17, 2026
e7f2381
Added translations for date settings
ksroga Feb 17, 2026
f5ea42d
Configurable minimum topup amount settings
ksroga Feb 17, 2026
ee5e254
Added translations for minimum topup balance
ksroga Feb 17, 2026
0735cbf
Added head scripts option in settings
ksroga Feb 17, 2026
1d89f88
Added code editor and code type in setting fields
ksroga Feb 17, 2026
53373c9
Added translations for new settings
ksroga Feb 17, 2026
995865c
Updated help link in product cruds
ksroga Feb 17, 2026
e6280ff
Improvements in product description
ksroga Feb 17, 2026
a77c097
Added translations
ksroga Feb 17, 2026
09e8b72
Merge feature/head-scripts-settings into develop
ksroga Feb 17, 2026
0598acb
Merge branch 'fix/product-crud-help-link' into develop
ksroga Feb 17, 2026
4bda32b
Merge feature/improvements-in-product-description into develop
ksroga Feb 17, 2026
764c7f2
Merge feature/configurable-minimum-topup-amount into develop
ksroga Feb 17, 2026
6d6ad11
Fix invalid YAML escaping in messages.it.yaml
ksroga Feb 17, 2026
7f13aa7
Price format settings
ksroga Feb 22, 2026
42026a9
Added missing translations
ksroga Feb 22, 2026
686725a
Server health status
ksroga Feb 22, 2026
385100b
Added missing translations
ksroga Feb 22, 2026
da82439
Server crud list view improvements
ksroga Feb 22, 2026
a80ce37
Product egg variable rules support
ksroga Feb 23, 2026
533f285
Manager server button on server management page
ksroga Feb 23, 2026
36cc52c
Merge branch 'feature/product-egg-variable-rules-support' into develop
ksroga Feb 23, 2026
45ede82
Set unknown in placeholders if couldnt check server state & fix doubl…
ksroga Feb 23, 2026
6bbad26
Added missing translations
ksroga Feb 23, 2026
640a8c8
Required user server variables support
ksroga Feb 25, 2026
20b3709
Marketplace integration
ksroga Feb 28, 2026
11063fb
Improvements in contribution notes
ksroga Feb 28, 2026
e7ca084
Permission precheck during plugin upload
ksroga Feb 28, 2026
d79bfc6
Permission precheck during theme upload
ksroga Feb 28, 2026
3cf51f0
Added AbstractFilesystemCheckService
ksroga Feb 28, 2026
69c03f3
Translations for permission precheck
ksroga Feb 28, 2026
9a106be
Added mailhog for dev environment
ksroga Mar 1, 2026
d421d88
Email when admin creates server
ksroga Mar 1, 2026
d60aa36
Translations for admin server creation email
ksroga Mar 1, 2026
0f62897
Price preview in pricing tab
ksroga Mar 1, 2026
02e36fe
Updated version files
ksroga Mar 1, 2026
99359d6
Updated CHANGELOG.md
ksroga Mar 2, 2026
1c01ec4
Merge branch 'main' into develop
ksroga Mar 2, 2026
7128ff1
Updated CHANGELOG.md
ksroga Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .github/ISSUE_TEMPLATE/custom.md

This file was deleted.

19 changes: 19 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## Description
<!-- What does this PR do? Reference related issues: Closes #123 -->

## Type of change
- [ ] Bug fix
- [ ] New feature
- [ ] Refactoring / code improvement
- [ ] Documentation update
- [ ] Translation update

## Checklist
- [ ] CI pipeline passes (PHPStan, migrations, translations check)
- [ ] Branch targets `main`
- [ ] Code follows PSR-12 (PHP) / project conventions
- [ ] If adding/editing translations: all language files in `src/Core/Resources/translations/` were updated
- [ ] If introducing behavior changes: CHANGELOG entry added

## Testing
<!-- How was this change tested? (manual steps, screenshots, etc.) -->
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,42 @@
# Changelog

## [0.6.4] - 2026-03-02

### Added
- Added price preview widget in the product pricing tab showing formatted prices for each billing period.
- Added email notification sent to the user when an admin creates a server on their behalf.
- Added filesystem permission precheck before plugin upload to verify write access and show clear error messages.
- Added filesystem permission precheck before theme upload to verify write access and show clear error messages.
- Added Marketplace integration in the admin panel - browse, search, and install plugins directly from marketplace.pteroca.com.
- Added support for required user-provided server variables during the server purchase flow.
- Added product egg variable validation rules support - rules defined in egg configuration are now enforced on user input.
- Added server health status badge in the admin server CRUD list view.
- Added configurable "Manage in Pterodactyl" button on the user server management page (can be enabled/disabled in settings).
- Added configurable price format settings - customizable decimal and thousands separators for price display.
- Added configurable datetime format settings - date format, timezone, and timezone visibility can be set per installation.
- Added configurable minimum top-up amount setting for wallet balance.
- Added custom head scripts setting - arbitrary scripts can be injected into the `<head>` of the landing page and panel.
- Added code editor field type for settings with syntax highlighting support.
- Added short description field to products for use in SEO metadata and store listing previews.

### Changed
- Improved admin server CRUD list view - Pterodactyl server identifier is now shown in a shortened form on the index page.
- Updated contribution documentation - improved CONTRIBUTING.md, PR template, issue templates, and code of conduct.
- Updated help link in product CRUD controllers.
- Added Mailhog to the development Docker environment for local email testing.

### Fixed
- Fixed server state in the servers list showing as unknown when the status check cannot be performed.
- Fixed doubled server ID appearing in the server name after migration from Pterodactyl.
- Fixed invalid YAML escaping in the Italian translation file.
- Fixed theme export functionality that was producing invalid archives.
- Fixed plugin migration not wrapping schema changes in a database transaction.
- Fixed saving the default theme context in theme settings.
- Fixed EasyAdmin CRUD controllers not calling the parent `configureFields` method, causing plugin-registered fields to be dropped.
- Fixed node selection not respecting Pterodactyl maintenance mode - nodes in maintenance are now skipped during automatic selection and rejected when chosen manually.

---

## [0.6.3] - 2026-02-03

### Added
Expand Down
3 changes: 3 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

This includes our GitHub repository, Discord server (discord.gg/Gz5phhuZym),
and any other official community spaces.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
Expand Down
107 changes: 87 additions & 20 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing to PteroCA

Thank you for your interest in contributing to **PteroCA**! We welcome contributions from everyone. Heres how you can help:
Thank you for your interest in contributing to **PteroCA**! We welcome contributions from everyone. Here's how you can help:

## How to Contribute

Expand All @@ -23,57 +23,124 @@ We love new ideas! If you have a feature request, follow these steps:
### Submitting Pull Requests

1. **Fork the repository**: Create your own fork of the repository by clicking the "Fork" button in the top right of our [GitHub repository](https://github.com/pteroca-com/panel).
2. **Create a new branch**: Use a descriptive name for your branch. For example: `feature/add-payment-integration` or `bugfix/fix-user-auth`.
2. **Create a new branch**: Use a descriptive name for your branch. See [Branch Naming](#branch-naming) below.
3. **Make changes**: Add your code, following our coding standards:
- Follow PSR-12 for PHP.
- Write clear, concise code with comments where necessary.
- Write tests for your code whenever possible.
4. **Commit your changes**: Write meaningful and descriptive commit messages.
4. **Commit your changes**: Write meaningful and descriptive commit messages. See [Commit Messages](#commit-messages) below.
5. **Push to your fork**: Push the changes from your local repository to your fork on GitHub.
6. **Submit a pull request**: From your forked repository, click the New Pull Request button. Ensure that your pull request is well-documented and references any issues it resolves.
6. **Submit a pull request**: From your forked repository, click the "New Pull Request" button. Make sure your PR targets the `main` branch.

### Code Review and Feedback
## Branch Naming

- **Be patient**: Our maintainers will review your pull request as soon as possible. We may ask you to make additional changes.
- **Tests**: Ensure your pull request passes all tests before submission. Use PHPUnit for testing the PHP code.
- **Constructive Feedback**: If your pull request is rejected, don’t be discouraged. We will provide constructive feedback to help you improve.
Use the following naming conventions for your branches:

## Community Guidelines
- `feature/<name>` — new functionality (e.g. `feature/add-payment-integration`)
- `bugfix/<name>` — bug fixes (e.g. `bugfix/fix-user-auth`)
- `hotfix/<name>` — urgent fixes for production issues
- `task-<id>-<name>` — tasks tracked in the issue tracker (e.g. `task-42-improve-logging`)

- **Be respectful**: We value a welcoming, respectful, and inclusive community. Disrespectful or inappropriate behavior will not be tolerated.
- **Collaboration**: Help fellow contributors by reviewing pull requests and participating in discussions.
- **Support**: For usage or configuration questions, please refer to our [Documentation](https://pteroca.gitbook.io) and the [Discord Support Server](https://discord.gg/Gz5phhuZym).
## Commit Messages

Write clear, descriptive commit messages in English. Focus on what the change does and why:

**Good examples:**
- `Add user balance notification on low funds`
- `Fix server suspension not triggered on expired subscription`
- `Refactor payment gateway to support multiple providers`

Avoid vague messages like `fix`, `update`, or `WIP`.

## Pull Request Process

1. **Target `main`** — all PRs should target the `main` branch.
2. **CI pipeline must pass** — the GitHub Actions CI pipeline runs automatically on every PR. A PR with a failing pipeline will not be reviewed. See [CI Pipeline](#ci-pipeline) for details.
3. **Code review** — a maintainer will review your pull request. Be patient; we will provide feedback as soon as possible.
4. **Address all comments** — all review comments must be addressed before the PR can be merged.
5. **Resolve all threads** — all discussion threads must be marked as resolved before merge.
6. **Merge** — once approved and all checks pass, a maintainer will merge the PR.

## CI Pipeline

Every pull request to `main` or `develop` automatically triggers the GitHub Actions CI pipeline (`symfony.yml`). The pipeline must pass before a PR will be reviewed or merged.

The pipeline checks:

- **PHPStan** (static analysis, level 1) — ensures no type errors or undefined references
- **Doctrine Migrations** — all migrations must execute without errors
- **Translation completeness** — no translation keys may be missing from any language file

### Running checks locally

Before pushing, you can run the checks inside the Docker development container:

```bash
# Static analysis
docker exec -it pteroca_web_dev vendor/bin/phpstan analyse

# Database migrations
docker exec -it pteroca_web_dev bin/console doctrine:migrations:migrate --no-interaction

# Translation check (replace messages.pl.yaml with any non-English file)
docker exec -it pteroca_web_dev bin/console app:show-missing-translations \
src/Core/Resources/translations/messages.en.yaml \
src/Core/Resources/translations/messages.pl.yaml
```

> **Note:** A PR with a failing CI pipeline will not be reviewed. Fix all issues before requesting a review.

## Setting Up Your Development Environment

PteroCA uses Docker for local development. Make sure you have [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) installed.

1. **Clone the repository**:
```bash
git clone https://github.com/pteroca-com/panel.git
cd panel
```

2. **Install dependencies**:
Make sure you have [Composer](https://getcomposer.org/) installed. Run:
2. **Configure environment**:
```bash
composer install
cp .env.SAMPLE .env
# Edit .env with your local settings
```

3. **Set up the environment**:
Create a `.env.local` file from `.env.example` and configure your database and environment variables:
3. **Start the containers**:
```bash
cp .env.example .env.local
docker-compose up -d
```

4. **Run migrations**:
```bash
php bin/console doctrine:migrations:migrate
docker exec -it pteroca_web_dev bin/console doctrine:migrations:migrate
```

5. **Start developing!**

> All Symfony and Composer commands must be executed inside the `pteroca_web_dev` container:
> ```bash
> docker exec -it pteroca_web_dev bin/console [symfony-command]
> docker exec -it pteroca_web_dev composer [composer-command]
> ```

For more details, see our [Documentation](https://docs.pteroca.com).

## Helping with Translations
We want PteroCA to be accessible to users all over the world. If you're interested in helping translate PteroCA into more languages, you can contribute via our [Crowdin page](https://crowdin.com/project/pteroca). No coding skills are required—just your language expertise!

We want PteroCA to be accessible to users all over the world. If you're interested in helping translate PteroCA into more languages, you can contribute directly via a pull request.

**Important rules for translations:**

- When **adding new translation keys or editing existing ones**, update all language files located in `src/Core/Resources/translations/`.
- The English file (`messages.en.yaml`) is the reference — make sure the key exists there first, then add the translated value to each other language file.
- The CI pipeline checks for missing translation keys — your PR will fail if any language file is incomplete.

## Community Guidelines

- **Be respectful**: We value a welcoming, respectful, and inclusive community. Disrespectful or inappropriate behavior will not be tolerated.
- **Collaboration**: Help fellow contributors by reviewing pull requests and participating in discussions.
- **Support**: For usage or configuration questions, please refer to our [Documentation](https://docs.pteroca.com) and the [Discord Support Server](https://discord.gg/Gz5phhuZym).

## License

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,8 @@ We welcome contributions from developers of all skill levels!

[Read the Contributing Guide →](CONTRIBUTING.md)

> **Before submitting a PR:** Make sure the CI pipeline passes (PHPStan, migrations, translations) and that your branch is up to date with `main`. All review threads must be resolved before merge.

---

## 📄 License
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "pteroca/panel",
"description": "PteroCA.com is a free, open-source client area and management panel designed specifically for Pterodactyl server users and hosting providers. The platform simplifies and automates server management with a user-friendly interface and robust billing features.",
"version": "0.6.3",
"version": "0.6.4",
"type": "project",
"license": "MIT",
"minimum-stability": "stable",
Expand Down Expand Up @@ -33,6 +33,7 @@
"symfony/dotenv": "^7.0",
"symfony/flex": "^2",
"symfony/framework-bundle": "^7.0",
"symfony/html-sanitizer": "^7.0",
"symfony/http-client": "^7.0",
"symfony/http-foundation": "^7.0",
"symfony/mailer": "^7.0",
Expand Down
Loading