mirror of
https://github.com/torrentpier/torrentpier
synced 2025-08-22 14:23:57 -07:00
Compare commits
32 commits
Author | SHA1 | Date | |
---|---|---|---|
|
144aa0558d |
||
|
6e7e3dd9ef |
||
|
423fb65dbf |
||
|
51f2c70d81 |
||
|
fd46d3d04a |
||
|
d4d82101dd |
||
|
9e3f3588f2 |
||
|
915e1d817c |
||
|
7ac335974b |
||
|
c2e3a13a04 |
||
|
f1d6e74e5d |
||
|
7f4cc9d3b9 |
||
|
a0fc2a9da9 |
||
|
c6076c2c27 |
||
|
714dd6255e |
||
|
9b322c7093 |
||
|
423424e947 |
||
|
27b5815aee | ||
|
bccbad0c57 |
||
|
728116d6dc |
||
|
a33574c28f |
||
|
e9a9e09576 |
||
|
e8cba5dd3f |
||
|
4f9cc9fe0f |
||
|
cc9d412522 |
||
|
7aed6bc7d8 |
||
|
7e723d6ad8 | ||
|
fbde8cd421 |
||
|
0d4c869f30 | ||
|
49717d3a68 |
||
|
2fd306704f |
||
|
6c0219d53c |
213 changed files with 15690 additions and 4087 deletions
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -1,7 +1,7 @@
|
|||
name: Bug Report
|
||||
description: File a bug report
|
||||
title: "[Bug]"
|
||||
labels: Bug
|
||||
labels: [Bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
@ -21,7 +21,7 @@ body:
|
|||
attributes:
|
||||
label: PHP & Platform
|
||||
description: Exact PHP and Platform (OS) versions your using.
|
||||
placeholder: 8.1.2 - Ubuntu 22.04 x64
|
||||
placeholder: 8.2.2 - Ubuntu 22.04 x64
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
name: Feature / Enhancement request
|
||||
about: Suggest an idea for TorrentPier
|
||||
title: "[Feature]"
|
||||
labels: Feature, Enhancement
|
||||
labels: [Feature, Enhancement]
|
||||
assignees: ''
|
||||
---
|
||||
|
|
7
.github/workflows/cd.yml
vendored
7
.github/workflows/cd.yml
vendored
|
@ -41,13 +41,10 @@ jobs:
|
|||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
|
||||
- name: Update composer.lock file
|
||||
run: composer update --no-install
|
||||
php-version: '8.2'
|
||||
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-dev --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Cleanup
|
||||
run: php _cleanup.php && rm _cleanup.php
|
||||
|
|
39
.github/workflows/ci.yml
vendored
39
.github/workflows/ci.yml
vendored
|
@ -17,13 +17,10 @@ jobs:
|
|||
- name: Setup PHP 🔩
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
|
||||
- name: Update composer.lock file
|
||||
run: composer update --no-install
|
||||
php-version: '8.2'
|
||||
|
||||
- name: Install Composer dependencies 🪚
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-dev --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Get commit hash 🔗
|
||||
id: get-commit-hash
|
||||
|
@ -46,35 +43,3 @@ jobs:
|
|||
with:
|
||||
name: TorrentPier-master
|
||||
path: ${{ steps.create-zip.outputs.ZIP_NAME }}
|
||||
|
||||
deploy:
|
||||
name: 🎉 Deploy
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: 🚚 Get latest code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 🔩 Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
|
||||
- name: Update composer.lock file
|
||||
run: composer update --no-install
|
||||
|
||||
- name: 🖇 Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: 📂 Sync files
|
||||
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
|
||||
with:
|
||||
server: ${{ secrets.FTP_SERVER }}
|
||||
username: ${{ secrets.FTP_USERNAME }}
|
||||
password: ${{ secrets.FTP_PASSWORD }}
|
||||
server-dir: ${{ secrets.FTP_DIR }}
|
||||
protocol: ${{ secrets.FTP_PROTOCOL }}
|
||||
port: ${{ secrets.FTP_PORT }}
|
||||
exclude: |
|
||||
**/.git*
|
||||
**/.git*/**
|
||||
.env
|
||||
|
|
2
.github/workflows/schedule.yml
vendored
2
.github/workflows/schedule.yml
vendored
|
@ -22,7 +22,7 @@ jobs:
|
|||
id: git-cliff
|
||||
with:
|
||||
config: cliff.toml
|
||||
args: v2.4.5-rc.2.. --verbose
|
||||
args: v2.4.6-alpha.4.. --verbose
|
||||
env:
|
||||
OUTPUT: CHANGELOG.md
|
||||
GITHUB_REPO: ${{ github.repository }}
|
||||
|
|
382
CHANGELOG.md
382
CHANGELOG.md
|
@ -2,6 +2,72 @@
|
|||
|
||||
# 📖 Change Log
|
||||
|
||||
## [v2.8.3](https://github.com/torrentpier/torrentpier/compare/v2.8.2..v2.8.3) (2025-07-03)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(lang)* Added `RTL` languages support ([#2031](https://github.com/torrentpier/torrentpier/pull/2031)) - ([fd46d3d](https://github.com/torrentpier/torrentpier/commit/fd46d3d04ad3ab1453256b2ab620508e2ba33586))
|
||||
- *(updater)* Added exceptions logging ([#2026](https://github.com/torrentpier/torrentpier/pull/2026)) - ([51f2c70](https://github.com/torrentpier/torrentpier/commit/51f2c70d81b910012cdecd111b5b92c1dfd0d6f6))
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- *(TorrentFileList)* Reduce duplication in root directory unset logic ([#2027](https://github.com/torrentpier/torrentpier/pull/2027)) - ([d4d8210](https://github.com/torrentpier/torrentpier/commit/d4d82101dd67c9f4cd86e0f6f909495696974354))
|
||||
|
||||
|
||||
## [v2.8.2](https://github.com/torrentpier/torrentpier/compare/v2.8.1..v2.8.2) (2025-06-30)
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(TorrentFileList)* Avoid `array_merge` reindexing for numeric folder names ([#2014](https://github.com/torrentpier/torrentpier/pull/2014)) - ([915e1d8](https://github.com/torrentpier/torrentpier/commit/915e1d817c61d2a4f0691b24ec1bc6577a9cd44b))
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- Use `DEFAULT_CHARSET` constant instead of hardcoded string ([#2011](https://github.com/torrentpier/torrentpier/pull/2011)) - ([7ac3359](https://github.com/torrentpier/torrentpier/commit/7ac335974baa44a8575bebb71ae2fbc0902d10e7))
|
||||
|
||||
|
||||
## [v2.8.1](https://github.com/torrentpier/torrentpier/compare/v2.8.0..v2.8.1) (2025-06-24)
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(filelist)* `Undefined property: FileTree::$length` when v2 torrent only ([#2004](https://github.com/torrentpier/torrentpier/pull/2004)) - ([7f4cc9d](https://github.com/torrentpier/torrentpier/commit/7f4cc9d3b9a5b87100f710cc60f636d6e7d5a34e))
|
||||
- *(ip-api)* Add error handling and logging for freeipapi.com requests ([#2006](https://github.com/torrentpier/torrentpier/pull/2006)) - ([f1d6e74](https://github.com/torrentpier/torrentpier/commit/f1d6e74e5d4c74b6e12e9e742f60f62e71783d11))
|
||||
|
||||
|
||||
## [v2.8.0](https://github.com/torrentpier/torrentpier/compare/v2.7.0..v2.8.0) (2025-06-21)
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(template)* Handle L_ variables in template vars when not found in lang vars ([#1998](https://github.com/torrentpier/torrentpier/pull/1998)) - ([c6076c2](https://github.com/torrentpier/torrentpier/commit/c6076c2c278e9a423f3862670236b75bddeadd87))
|
||||
|
||||
|
||||
## [v2.7.0](https://github.com/torrentpier/torrentpier/compare/v2.6.0..v2.7.0) (2025-06-21)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(database)* Add visual markers for Nette Explorer queries in debug panel ([#1965](https://github.com/torrentpier/torrentpier/pull/1965)) - ([2fd3067](https://github.com/torrentpier/torrentpier/commit/2fd306704f21febee7d53f4b4531601ce0cb81ce))
|
||||
- *(language)* Add new language variable for migration file and enhance template fallback logic ([#1984](https://github.com/torrentpier/torrentpier/pull/1984)) - ([a33574c](https://github.com/torrentpier/torrentpier/commit/a33574c28f2eb6267a74fa6c9d97fea86527157a))
|
||||
- *(migrations)* Implement Phinx database migration system ([#1976](https://github.com/torrentpier/torrentpier/pull/1976)) - ([fbde8cd](https://github.com/torrentpier/torrentpier/commit/fbde8cd421c9048afe70ddb41d0a9ed26d3fbef5))
|
||||
- *(test)* [**breaking**] Add comprehensive testing infrastructure with Pest PHP ([#1979](https://github.com/torrentpier/torrentpier/pull/1979)) - ([cc9d412](https://github.com/torrentpier/torrentpier/commit/cc9d412522938a023bd2b8eb880c4d2dd307c82a))
|
||||
- [**breaking**] Implement Language singleton with shorthand functions ([#1966](https://github.com/torrentpier/torrentpier/pull/1966)) - ([49717d3](https://github.com/torrentpier/torrentpier/commit/49717d3a687b95885fe9773f2597354aed4b2b60))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(database)* Update affected rows tracking in Database class ([#1980](https://github.com/torrentpier/torrentpier/pull/1980)) - ([4f9cc9f](https://github.com/torrentpier/torrentpier/commit/4f9cc9fe0f7f4a85c90001a3f5514efdf04836da))
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- *(database)* Enhance error logging and various fixes ([#1978](https://github.com/torrentpier/torrentpier/pull/1978)) - ([7aed6bc](https://github.com/torrentpier/torrentpier/commit/7aed6bc7d89f4ed31e7ed6c6eeecc6e08d348c24))
|
||||
- *(database)* Rename DB to Database and extract debug functionality ([#1964](https://github.com/torrentpier/torrentpier/pull/1964)) - ([6c0219d](https://github.com/torrentpier/torrentpier/commit/6c0219d53c7544b7d8a6374c0d0848945d32ae17))
|
||||
- *(stats)* Improve database row fetching in tr_stats.php ([#1985](https://github.com/torrentpier/torrentpier/pull/1985)) - ([728116d](https://github.com/torrentpier/torrentpier/commit/728116d6dc9cf4476cce572ced5e8a7ef529ead8))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- Update minimum `PHP` requirement to `8.2` ([#1987](https://github.com/torrentpier/torrentpier/pull/1987)) - ([9b322c7](https://github.com/torrentpier/torrentpier/commit/9b322c7093a634669e9f17a32ac42500f44f2496))
|
||||
- Removed useless `composer update` from workflows & installer ([#1986](https://github.com/torrentpier/torrentpier/pull/1986)) - ([423424e](https://github.com/torrentpier/torrentpier/commit/423424e9478e0772957014fb30f5e84158067af7))
|
||||
- Added --no-dev composer flag for some workflows ([#1982](https://github.com/torrentpier/torrentpier/pull/1982)) - ([e9a9e09](https://github.com/torrentpier/torrentpier/commit/e9a9e095768ba68aa5d5058a3e152ffaec916117))
|
||||
- Added `--no-dev` composer flag for some workflows ([#1981](https://github.com/torrentpier/torrentpier/pull/1981)) - ([e8cba5d](https://github.com/torrentpier/torrentpier/commit/e8cba5dd3fc83b616f83c24991f79dc7258c5df3))
|
||||
|
||||
|
||||
## [v2.6.0](https://github.com/torrentpier/torrentpier/compare/v2.5.0..v2.6.0) (2025-06-18)
|
||||
|
||||
### 🚀 Features
|
||||
|
@ -44,320 +110,4 @@
|
|||
- *(cliff)* Add conventional commit prefix to changelog message ([#1957](https://github.com/torrentpier/torrentpier/pull/1957)) - ([b1b2618](https://github.com/torrentpier/torrentpier/commit/b1b26187579f6981165d85c316a3c5b7199ce2ee))
|
||||
|
||||
|
||||
## [v2.4.6-alpha.4](https://github.com/torrentpier/torrentpier/compare/v2.4.6-alpha.3..v2.4.6-alpha.4) (2025-06-13)
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(_release.php)* Use `GPG` sign for tags by default ([#1946](https://github.com/torrentpier/torrentpier/pull/1946)) - ([0271b21](https://github.com/torrentpier/torrentpier/commit/0271b21a5e8c9dce918da9954547d81dae2a1d4b))
|
||||
|
||||
|
||||
## [v2.4.6-alpha.3](https://github.com/torrentpier/torrentpier/compare/v2.4.6-alpha.2..v2.4.6-alpha.3) (2025-06-13)
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(_release.php)* Minor improvements ([#1945](https://github.com/torrentpier/torrentpier/pull/1945)) - ([e5811f9](https://github.com/torrentpier/torrentpier/commit/e5811f9c66eef7f228b51fb82ffda3bcddeb915d))
|
||||
|
||||
|
||||
## [v2.4.6-alpha.2](https://github.com/torrentpier/torrentpier/compare/v2.4.6-alpha.1..v2.4.6-alpha.2) (2025-06-12)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(ajax)* Log full ajax request/response data to console in explain mode ([#1942](https://github.com/torrentpier/torrentpier/pull/1942)) - ([bcf4eb4](https://github.com/torrentpier/torrentpier/commit/bcf4eb4e9baacf27e23a2b7c7135918ec3356c1a))
|
||||
- Improved ajax debug ([#1941](https://github.com/torrentpier/torrentpier/pull/1941)) - ([6f03f75](https://github.com/torrentpier/torrentpier/commit/6f03f750bab400f5e8a74bd05c9ee167343959ab))
|
||||
- Add console log for ajax actions when explain cookie is set ([#1940](https://github.com/torrentpier/torrentpier/pull/1940)) - ([345dd1b](https://github.com/torrentpier/torrentpier/commit/345dd1bc20928e25dc72befb705502156e47f1d7))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- Set `$datastore->enqueue` before `$datastore->get` ([#1937](https://github.com/torrentpier/torrentpier/pull/1937)) - ([bf328dd](https://github.com/torrentpier/torrentpier/commit/bf328dd69ec42e417275f037dc59a15a2867d7f4))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump filp/whoops from 2.18.1 to 2.18.2 ([#1943](https://github.com/torrentpier/torrentpier/pull/1943)) - ([9a52955](https://github.com/torrentpier/torrentpier/commit/9a529558b41f620e8347cc1091f59b1f2d864ca9))
|
||||
|
||||
### 🗑️ Removed
|
||||
|
||||
- `'cat_forums'` from enqueue list in `get_forum_mods` ajax ([#1939](https://github.com/torrentpier/torrentpier/pull/1939)) - ([28e38aa](https://github.com/torrentpier/torrentpier/commit/28e38aa78103c8233e15439ecd886187a55d5e12))
|
||||
- Extra `CFG_DIR` constant ([#1936](https://github.com/torrentpier/torrentpier/pull/1936)) - ([4b16b84](https://github.com/torrentpier/torrentpier/commit/4b16b847f542e3608c8bb4d97d1f27f7fd6c97b7))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(_release.php)* Minor improvements ([#1938](https://github.com/torrentpier/torrentpier/pull/1938)) - ([f9db78d](https://github.com/torrentpier/torrentpier/commit/f9db78d266ff3707e96b1b9d3d2330a507181012))
|
||||
- *(_release.php)* Temporary removed automatic `push origin` ([#1935](https://github.com/torrentpier/torrentpier/pull/1935)) - ([dcd7002](https://github.com/torrentpier/torrentpier/commit/dcd7002c2aa09ec187f3afd91fb7e3f5e03630e0))
|
||||
- *(_release.php)* Added ability to set version emoji ([#1934](https://github.com/torrentpier/torrentpier/pull/1934)) - ([75ef574](https://github.com/torrentpier/torrentpier/commit/75ef57474c3a32e86ecc98a5ff2fab39a9a66282))
|
||||
- *(_release.php)* Added automatic `CHANGELOG.md` update ([#1933](https://github.com/torrentpier/torrentpier/pull/1933)) - ([867359a](https://github.com/torrentpier/torrentpier/commit/867359a89e480071cfd927e2cb6ef4fd761c0172))
|
||||
- *(_release.php)* Added `push origin` command ([#1932](https://github.com/torrentpier/torrentpier/pull/1932)) - ([5561e00](https://github.com/torrentpier/torrentpier/commit/5561e0022ca6a0a668f2dc5aee541609bb6c4d1e))
|
||||
- *(cliff.toml)* Use correct nightly link ([#1944](https://github.com/torrentpier/torrentpier/pull/1944)) - ([5e6fb3e](https://github.com/torrentpier/torrentpier/commit/5e6fb3ef424cbc84bb5e25625dcd22fd73ec98fa))
|
||||
|
||||
|
||||
## [v2.4.6-alpha.1](https://github.com/torrentpier/torrentpier/compare/v2.4.5..v2.4.6-alpha.1) (2025-06-09)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(ACP)* Added `robots.txt` editor ([#1913](https://github.com/torrentpier/torrentpier/pull/1913)) - ([79bb13e](https://github.com/torrentpier/torrentpier/commit/79bb13e17d07505be4d3a3c67223b4f591b66bfb))
|
||||
- *(bbcode)* Added `[nfo]` and `[pre]` tags ([#1923](https://github.com/torrentpier/torrentpier/pull/1923)) - ([f64c340](https://github.com/torrentpier/torrentpier/commit/f64c340563378a364e1f00c64b17ac1c79531302))
|
||||
- *(bbcode)* Implement color customization for `[box]` tag ([#1920](https://github.com/torrentpier/torrentpier/pull/1920)) - ([4c24cb6](https://github.com/torrentpier/torrentpier/commit/4c24cb65bfebf307b717e985b169ea5d27df64f8))
|
||||
- *(install)* Autofill `Host` in `robots.txt` file ([#1916](https://github.com/torrentpier/torrentpier/pull/1916)) - ([03eeb08](https://github.com/torrentpier/torrentpier/commit/03eeb08ad185b6dcc99563f567297e41f4a56117))
|
||||
- *(meta)* Minor improvements to description generation ([#1926](https://github.com/torrentpier/torrentpier/pull/1926)) - ([4d0b294](https://github.com/torrentpier/torrentpier/commit/4d0b2941e3ef6703ac2cd4c03524a93e688e0c39))
|
||||
- Added ability to set page meta description ([#1917](https://github.com/torrentpier/torrentpier/pull/1917)) - ([7b8b9a0](https://github.com/torrentpier/torrentpier/commit/7b8b9a0bbabc1dfbf56cac8c105ad158ae78c3a7))
|
||||
|
||||
### 🈳 New translations
|
||||
|
||||
- New Crowdin updates ([#1925](https://github.com/torrentpier/torrentpier/pull/1925)) - ([2487d13](https://github.com/torrentpier/torrentpier/commit/2487d130bb23bd82cedf0d114843bb48f6d2e61c))
|
||||
- New Crowdin updates ([#1924](https://github.com/torrentpier/torrentpier/pull/1924)) - ([0515670](https://github.com/torrentpier/torrentpier/commit/0515670bee99faa5f0979162096114bc9d3ddf98))
|
||||
- New translations main.php (Russian) ([#1922](https://github.com/torrentpier/torrentpier/pull/1922)) - ([8e965fb](https://github.com/torrentpier/torrentpier/commit/8e965fb1ceb5e82201c43b33fcdb044256646191))
|
||||
- New Crowdin updates ([#1921](https://github.com/torrentpier/torrentpier/pull/1921)) - ([daeb7fe](https://github.com/torrentpier/torrentpier/commit/daeb7fe87e8da53745fe7aac0708cefa3392ffdc))
|
||||
- New Crowdin updates ([#1915](https://github.com/torrentpier/torrentpier/pull/1915)) - ([a3da6f5](https://github.com/torrentpier/torrentpier/commit/a3da6f538658fbfe4e57aad10046d8c459a1a498))
|
||||
- New Crowdin updates ([#1914](https://github.com/torrentpier/torrentpier/pull/1914)) - ([a15baef](https://github.com/torrentpier/torrentpier/commit/a15baef69a2955b6dc9cd6e8fdf467550d0b5d09))
|
||||
- New Crowdin updates ([#1911](https://github.com/torrentpier/torrentpier/pull/1911)) - ([174f441](https://github.com/torrentpier/torrentpier/commit/174f44160e1f33bed9422f0c4eab9d73b7025036))
|
||||
- New Crowdin updates ([#1910](https://github.com/torrentpier/torrentpier/pull/1910)) - ([c40aad2](https://github.com/torrentpier/torrentpier/commit/c40aad20ad865849d3088498f1ba95a5fb0a0621))
|
||||
- New Crowdin updates ([#1907](https://github.com/torrentpier/torrentpier/pull/1907)) - ([999ae1e](https://github.com/torrentpier/torrentpier/commit/999ae1eff9f3a4c951fc48efbf94c0cea2a5f8d2))
|
||||
- Updated translations ([#1909](https://github.com/torrentpier/torrentpier/pull/1909)) - ([897edfc](https://github.com/torrentpier/torrentpier/commit/897edfc371087427c574776472cbbf3f1f933273))
|
||||
- Updated translations ([#1908](https://github.com/torrentpier/torrentpier/pull/1908)) - ([6d0499d](https://github.com/torrentpier/torrentpier/commit/6d0499dd0229d454d3af00f10151adc26a9e96a7))
|
||||
- New translations ([#1906](https://github.com/torrentpier/torrentpier/pull/1906)) - ([8a3b12c](https://github.com/torrentpier/torrentpier/commit/8a3b12c1192678552a3186c1f58df9b4d7e5ba1b))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump filp/whoops from 2.18.0 to 2.18.1 ([#1919](https://github.com/torrentpier/torrentpier/pull/1919)) - ([1253661](https://github.com/torrentpier/torrentpier/commit/125366147c6257abadd489f3802e4a0dab37a89c))
|
||||
- *(deps)* Bump arokettu/bencode from 4.3.0 to 4.3.1 ([#1912](https://github.com/torrentpier/torrentpier/pull/1912)) - ([f76e351](https://github.com/torrentpier/torrentpier/commit/f76e351b32cfa2932bc1afde6c3c522cd993b8af))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(_release.php)* Added `GPG` sign for tags ([#1931](https://github.com/torrentpier/torrentpier/pull/1931)) - ([8ecc617](https://github.com/torrentpier/torrentpier/commit/8ecc61719acb61e9a2ce115b28f1a82580c01110))
|
||||
- *(cliff)* Added automated script for releases creation ([#1930](https://github.com/torrentpier/torrentpier/pull/1930)) - ([6adde35](https://github.com/torrentpier/torrentpier/commit/6adde35849811648bcb8fa1a72c3be0a886b7919))
|
||||
- *(cliff)* Completely removed `cliff-releases.toml` ([#1929](https://github.com/torrentpier/torrentpier/pull/1929)) - ([cef041c](https://github.com/torrentpier/torrentpier/commit/cef041c0d128dca480ca40770f52385f868706b0))
|
||||
- *(cliff)* Updated config ([#1928](https://github.com/torrentpier/torrentpier/pull/1928)) - ([212e5c5](https://github.com/torrentpier/torrentpier/commit/212e5c52832f32e8864850bf520b5c73f27f1609))
|
||||
- Minor improvements ([#1918](https://github.com/torrentpier/torrentpier/pull/1918)) - ([46f29bc](https://github.com/torrentpier/torrentpier/commit/46f29bc68a18fdefad81e26a60fe44f122407ea7))
|
||||
|
||||
|
||||
## [v2.4.5](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.5..v2.4.5) (2025-05-11)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(admin_smilies)* Added confirmation on smilie deleting ([#1895](https://github.com/torrentpier/torrentpier/pull/1895)) - ([b51820e](https://github.com/torrentpier/torrentpier/commit/b51820e1861044143321fcde5239c22abc3de984))
|
||||
- *(announcer)* Check for frozen torrents ([#1770](https://github.com/torrentpier/torrentpier/pull/1770)) - ([6e0786b](https://github.com/torrentpier/torrentpier/commit/6e0786bdee8f1a2557f9ac1dc628983bcafe3f5f))
|
||||
- *(freeipapi)* Added ability to use own API token ([#1901](https://github.com/torrentpier/torrentpier/pull/1901)) - ([513e306](https://github.com/torrentpier/torrentpier/commit/513e3065d34409931c4198c03b080f232f1d809b))
|
||||
- Added ability to hide peer username in peer list ([#1903](https://github.com/torrentpier/torrentpier/pull/1903)) - ([3a64f85](https://github.com/torrentpier/torrentpier/commit/3a64f8595cafd99b9cb821d52ec5d3b3e8e467c0))
|
||||
- Added ability to hide peer country in peer list ([#1891](https://github.com/torrentpier/torrentpier/pull/1891)) - ([2555ebc](https://github.com/torrentpier/torrentpier/commit/2555ebce4717f871922495e48cbca9e22da78bd5))
|
||||
- Added ability to hide BitTorrent client in peers list ([#1890](https://github.com/torrentpier/torrentpier/pull/1890)) - ([f5d65b8](https://github.com/torrentpier/torrentpier/commit/f5d65b8911c5e864f000348a6d1aefbb4c09c2b4))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(peers list)* `IPv6` showing ([#1902](https://github.com/torrentpier/torrentpier/pull/1902)) - ([4b7203f](https://github.com/torrentpier/torrentpier/commit/4b7203f8aeeeffc1b163bd3db1dd6b2cac33c923))
|
||||
- Incorrect rounding in execution time counter ([#1899](https://github.com/torrentpier/torrentpier/pull/1899)) - ([781b724](https://github.com/torrentpier/torrentpier/commit/781b7240c41ddd141cfb057480c10d9cee30e6d7))
|
||||
- `Undefined array key "smile"` when are no smilies ([#1896](https://github.com/torrentpier/torrentpier/pull/1896)) - ([36d3992](https://github.com/torrentpier/torrentpier/commit/36d399220e2c16a582e1e400df0002c164f5ec3b))
|
||||
- Peer country flag not shown in peers list ([#1894](https://github.com/torrentpier/torrentpier/pull/1894)) - ([8edba72](https://github.com/torrentpier/torrentpier/commit/8edba72f09f037225ede058cf09c830b1a01e78f))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump symfony/polyfill from 1.31.0 to 1.32.0 ([#1900](https://github.com/torrentpier/torrentpier/pull/1900)) - ([a4793f6](https://github.com/torrentpier/torrentpier/commit/a4793f6ce103f22941d72793e2bf8cdf9f78d494))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- Minor improvements ([#1904](https://github.com/torrentpier/torrentpier/pull/1904)) - ([3cdf843](https://github.com/torrentpier/torrentpier/commit/3cdf843a0442d4cdf9b70702c6092d05df86c7e0))
|
||||
- Minor improvements ([#1898](https://github.com/torrentpier/torrentpier/pull/1898)) - ([2f02692](https://github.com/torrentpier/torrentpier/commit/2f026921ee331226900b3cd4f1bb238f6562b48d))
|
||||
- Minor improvements ([#1897](https://github.com/torrentpier/torrentpier/pull/1897)) - ([14086a0](https://github.com/torrentpier/torrentpier/commit/14086a0ed6181a0ff4496ee2e56f4fb70bfe18d5))
|
||||
- Minor improvements ([#1893](https://github.com/torrentpier/torrentpier/pull/1893)) - ([90ece5c](https://github.com/torrentpier/torrentpier/commit/90ece5c7621789f170246b2898841b347e264674))
|
||||
- Minor improvements ([#1892](https://github.com/torrentpier/torrentpier/pull/1892)) - ([1e5b93d](https://github.com/torrentpier/torrentpier/commit/1e5b93d2c072c5c35feef7567b3fcdb4b3597935))
|
||||
|
||||
|
||||
## [v2.4.5-rc.5](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.4..v2.4.5-rc.5) (2025-05-03)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(admin_ranks)* Added confirmation on rank deleting ([#1888](https://github.com/torrentpier/torrentpier/pull/1888)) - ([e510ebc](https://github.com/torrentpier/torrentpier/commit/e510ebc3ba30be7bf99769b1e5540353bd53c333))
|
||||
- *(atom)* Hide topics from private forums ([#1889](https://github.com/torrentpier/torrentpier/pull/1889)) - ([75e9d5e](https://github.com/torrentpier/torrentpier/commit/75e9d5e4a8c5ec20f438e7b24a5469d219959a8c))
|
||||
- *(avatar upload)* Added `accept="image/*"` attribute ([#1841](https://github.com/torrentpier/torrentpier/pull/1841)) - ([56d531a](https://github.com/torrentpier/torrentpier/commit/56d531aa5ddb778d08a2796fa9fb865e5b3040ce))
|
||||
- *(emailer)* Added ability to configure `sendmail` - ([5ad4a70](https://github.com/torrentpier/torrentpier/commit/5ad4a7019d996d468650ab608ab53d6cf3ebb4f5))
|
||||
- *(magnet)* Added `xl` (eXact Length) parametr ([#1883](https://github.com/torrentpier/torrentpier/pull/1883)) - ([c0cdcff](https://github.com/torrentpier/torrentpier/commit/c0cdcff48825ce5fb0c89c0ec44eb95686aee74c))
|
||||
- *(playback_m3u.php)* Added checking auth to download ([#1848](https://github.com/torrentpier/torrentpier/pull/1848)) - ([0b8d8a5](https://github.com/torrentpier/torrentpier/commit/0b8d8a5210ee761dddaa57fc48bb48b0ede1ec3c))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(cache)* Implicitly marking parameter `$name` as nullable is deprecated ([#1877](https://github.com/torrentpier/torrentpier/pull/1877)) - ([c3b4000](https://github.com/torrentpier/torrentpier/commit/c3b40003b778a725e958cebee6446bcfd6a68b10))
|
||||
- Displaying `Network news` and `Latest news` for guests when foums are private ([#1879](https://github.com/torrentpier/torrentpier/pull/1879)) - ([9f96090](https://github.com/torrentpier/torrentpier/commit/9f96090cc419f828e54e69a91a906a3f3d92c255))
|
||||
- Pagination issue in `Report on action` page ([#1872](https://github.com/torrentpier/torrentpier/pull/1872)) - ([8358aa0](https://github.com/torrentpier/torrentpier/commit/8358aa00de2ec9efd4c51b8bef11bd700a56c19c))
|
||||
- `tablesorting` issues & incorrect `user_role` for pending users ([#1871](https://github.com/torrentpier/torrentpier/pull/1871)) - ([595adbe](https://github.com/torrentpier/torrentpier/commit/595adbe4da5296b0f3ebde6628e58e878c0fb7d5))
|
||||
- Fixed TorrentPier build-in emojis showing in ACP ([#1870](https://github.com/torrentpier/torrentpier/pull/1870)) - ([12792e7](https://github.com/torrentpier/torrentpier/commit/12792e74f71a57448277dda46471563a7fea71db))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump vlucas/phpdotenv from 5.6.1 to 5.6.2 ([#1887](https://github.com/torrentpier/torrentpier/pull/1887)) - ([7a14464](https://github.com/torrentpier/torrentpier/commit/7a14464d20fe8d2f8b980a82647c6b9ec081f621))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.1.0 to 12.0.0 ([#1868](https://github.com/torrentpier/torrentpier/pull/1868)) - ([bd5aa2a](https://github.com/torrentpier/torrentpier/commit/bd5aa2a5e71560409bc630ea2334e33c77458ab3))
|
||||
- *(deps)* Bump monolog/monolog from 3.8.1 to 3.9.0 ([#1865](https://github.com/torrentpier/torrentpier/pull/1865)) - ([6440162](https://github.com/torrentpier/torrentpier/commit/64401621879af0cc445c38687c571d2fec184410))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.0.5 to 11.1.0 ([#1864](https://github.com/torrentpier/torrentpier/pull/1864)) - ([de2fcea](https://github.com/torrentpier/torrentpier/commit/de2fceabedefd07441ba6801417157a9828e0e2a))
|
||||
- *(deps)* Bump egulias/email-validator from 4.0.3 to 4.0.4 ([#1858](https://github.com/torrentpier/torrentpier/pull/1858)) - ([3ced460](https://github.com/torrentpier/torrentpier/commit/3ced460640e4bfe27a91acd0408e73c3c49e1534))
|
||||
- *(deps)* Bump filp/whoops from 2.17.0 to 2.18.0 ([#1853](https://github.com/torrentpier/torrentpier/pull/1853)) - ([7ca0582](https://github.com/torrentpier/torrentpier/commit/7ca058256186b7b690003308d660a3a6271e84d2))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.0.4 to 11.0.5 ([#1849](https://github.com/torrentpier/torrentpier/pull/1849)) - ([37ad07a](https://github.com/torrentpier/torrentpier/commit/37ad07a40c1adf29f712f469d2850753d32a5eb9))
|
||||
- *(deps)* Bump belomaxorka/captcha from 1.2.3 to 1.2.4 - ([4641b0a](https://github.com/torrentpier/torrentpier/commit/4641b0a0d0e055d684ec36d41bfaf22b4d4b2ee1))
|
||||
- *(deps)* Bump belomaxorka/captcha from 1.2.2 to 1.2.3 ([#1842](https://github.com/torrentpier/torrentpier/pull/1842)) - ([be65f7c](https://github.com/torrentpier/torrentpier/commit/be65f7c55cbf81d889d5083c9344ccef400e8e19))
|
||||
|
||||
### 🚜 Refactor
|
||||
|
||||
- Password generation ([#1847](https://github.com/torrentpier/torrentpier/pull/1847)) - ([af2403f](https://github.com/torrentpier/torrentpier/commit/af2403f1918845e8af3d9fa7708623eef6aa427e))
|
||||
- Moved `Select` class into `Legacy\Common` ([#1846](https://github.com/torrentpier/torrentpier/pull/1846)) - ([bd0ef06](https://github.com/torrentpier/torrentpier/commit/bd0ef063fac328ed16537aacbc12e287a8d8206b))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(.cliffignore)* Added one more commit ([#1860](https://github.com/torrentpier/torrentpier/pull/1860)) - ([974d359](https://github.com/torrentpier/torrentpier/commit/974d3590c1fb11c6314da4a4b8115a2229e32bbd))
|
||||
- *(README)* Removed `Build actions` badge ([#1861](https://github.com/torrentpier/torrentpier/pull/1861)) - ([e9920ab](https://github.com/torrentpier/torrentpier/commit/e9920ab59803552e3a1a00b603962208a62efe4e))
|
||||
- *(cliff)* Added `.cliffignore` file to ignore reverted commits ([#1859](https://github.com/torrentpier/torrentpier/pull/1859)) - ([2eab551](https://github.com/torrentpier/torrentpier/commit/2eab551bd75e7acfd6f4dabe13b2a30ac09db880))
|
||||
- *(nightly builds)* Added cleanup step ([#1851](https://github.com/torrentpier/torrentpier/pull/1851)) - ([299d9a1](https://github.com/torrentpier/torrentpier/commit/299d9a1f6c4f244e435803212e763c252e5bd396))
|
||||
- *(password_hash)* Changed `cost` to `12` by default ([#1886](https://github.com/torrentpier/torrentpier/pull/1886)) - ([1663e19](https://github.com/torrentpier/torrentpier/commit/1663e19c3f80ae15792d6ffe4ce64e40129b14db))
|
||||
- *(render_flag)* Hide names for specified (`$nameIgnoreList`) flags ([#1862](https://github.com/torrentpier/torrentpier/pull/1862)) - ([83e42bc](https://github.com/torrentpier/torrentpier/commit/83e42bc5db086f60a6038b3fffca5982ceeced51))
|
||||
- *(text captcha)* Disabled scatter effect by default - ([3af5202](https://github.com/torrentpier/torrentpier/commit/3af5202f7b2a4ea5d14bbc4808b7a380de2e0dc0))
|
||||
- Updated nightly builds link ([#1885](https://github.com/torrentpier/torrentpier/pull/1885)) - ([6bd000b](https://github.com/torrentpier/torrentpier/commit/6bd000bc0d6176dbe1f0a573f081c9daefd3718b))
|
||||
- Composer dependencies are installed according to the minimum supported PHP version ([#1884](https://github.com/torrentpier/torrentpier/pull/1884)) - ([5fe7700](https://github.com/torrentpier/torrentpier/commit/5fe770070e1cd71ea50ea3ad3825a322774f0baf))
|
||||
- Corrected `php` version in `composer.json` ([#1882](https://github.com/torrentpier/torrentpier/pull/1882)) - ([bc1713a](https://github.com/torrentpier/torrentpier/commit/bc1713abdd28d04e8e1da3c3eabeb5170a35a460))
|
||||
- Composer dependencies are installed according to the minimum supported PHP version ([#1881](https://github.com/torrentpier/torrentpier/pull/1881)) - ([5c4972e](https://github.com/torrentpier/torrentpier/commit/5c4972ec12340cbffb8ac941d390ee6c2c89b635))
|
||||
- Minor improvements ([#1880](https://github.com/torrentpier/torrentpier/pull/1880)) - ([de8f192](https://github.com/torrentpier/torrentpier/commit/de8f1925bae3b38db18b86eb4a10337853638ad7))
|
||||
- Minor improvements ([#1876](https://github.com/torrentpier/torrentpier/pull/1876)) - ([eeb391d](https://github.com/torrentpier/torrentpier/commit/eeb391da6a16440492a3b803f63be301ba3d02d3))
|
||||
- Minor improvements ([#1875](https://github.com/torrentpier/torrentpier/pull/1875)) - ([41a78dd](https://github.com/torrentpier/torrentpier/commit/41a78ddbcbc628f0592c59879df0170bf48664aa))
|
||||
- Minor improvements ([#1874](https://github.com/torrentpier/torrentpier/pull/1874)) - ([0f1a69e](https://github.com/torrentpier/torrentpier/commit/0f1a69e32d8d5eb5053b021844845911c619d8cd))
|
||||
- Fetch only necessary sitemap parameters in `admin_sitemap.php` ([#1873](https://github.com/torrentpier/torrentpier/pull/1873)) - ([f9c8160](https://github.com/torrentpier/torrentpier/commit/f9c8160f8e897950a038a74ad7ee30b116f7b2b8))
|
||||
- Changed placeholder IP address from `7f000001` to `0` ([#1869](https://github.com/torrentpier/torrentpier/pull/1869)) - ([84e2392](https://github.com/torrentpier/torrentpier/commit/84e23928968f943826bdc4390c52365357d56f32))
|
||||
- Minor improvements ([#1866](https://github.com/torrentpier/torrentpier/pull/1866)) - ([7237653](https://github.com/torrentpier/torrentpier/commit/72376532b32395eda04dc032c07ca08b27346c6b))
|
||||
- Some minor improvements ([#1855](https://github.com/torrentpier/torrentpier/pull/1855)) - ([3cc880e](https://github.com/torrentpier/torrentpier/commit/3cc880eeb8be41596d5e8eaf19297046500afcf7))
|
||||
|
||||
### ◀️ Revert
|
||||
|
||||
- Added `TorrentPier instance hash` generation - ([eabf851](https://github.com/torrentpier/torrentpier/commit/eabf851ee60d29835d1979f46dcf2b9d82576c1b))
|
||||
- Added `IndexNow` protocol support 🤖 - ([1b288a9](https://github.com/torrentpier/torrentpier/commit/1b288a96e443e06c4f4e9ea374037d3b0af8a639))
|
||||
|
||||
|
||||
## [v2.4.5-rc.4](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.3..v2.4.5-rc.4) (2025-03-09)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(captcha)* Added `Text Captcha` provider ([#1839](https://github.com/torrentpier/torrentpier/pull/1839)) - ([74ea157](https://github.com/torrentpier/torrentpier/commit/74ea1573b298be5a935caaca0b3cc57cb1e9264a))
|
||||
- *(show post bbcode)* Added `'only_for_first_post'` param ([#1830](https://github.com/torrentpier/torrentpier/pull/1830)) - ([4dcd1fb](https://github.com/torrentpier/torrentpier/commit/4dcd1fb16e4e84acd1231ad821a2f05658b849ad))
|
||||
- *(sitemap)* Update `lastmod` when a new reply in topic ([#1737](https://github.com/torrentpier/torrentpier/pull/1737)) - ([bc95e14](https://github.com/torrentpier/torrentpier/commit/bc95e14be328303bb37e31299661b03045e37d07))
|
||||
- Added `$bb_cfg['auto_language_detection']` parametr ([#1835](https://github.com/torrentpier/torrentpier/pull/1835)) - ([b550fa5](https://github.com/torrentpier/torrentpier/commit/b550fa59f9ee96ca89e5b6db880147bc72841e93))
|
||||
- Easter egg for the 20th anniversary of the TorrentPier! ([#1831](https://github.com/torrentpier/torrentpier/pull/1831)) - ([f2e513d](https://github.com/torrentpier/torrentpier/commit/f2e513dd8b0f82f4f02474db4b83d83904a93f29))
|
||||
- Added configuration files for `nginx` & `caddy` ([#1787](https://github.com/torrentpier/torrentpier/pull/1787)) - ([f7d3946](https://github.com/torrentpier/torrentpier/commit/f7d394607e4ea5bb9b7f2b33692204a226a4d78b))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(info.php)* Undefined array key "show" ([#1836](https://github.com/torrentpier/torrentpier/pull/1836)) - ([f8c4e8f](https://github.com/torrentpier/torrentpier/commit/f8c4e8fb14090bc7403f24e363603bad9e231351))
|
||||
- *(tr_seed_bonus.php)* Incorrect `GROUP BY` ([#1820](https://github.com/torrentpier/torrentpier/pull/1820)) - ([dfd4e5e](https://github.com/torrentpier/torrentpier/commit/dfd4e5ebc9df916868210a7844f2a6f35e7b8aca))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump bugsnag/bugsnag from 3.29.2 to 3.29.3 ([#1837](https://github.com/torrentpier/torrentpier/pull/1837)) - ([b954815](https://github.com/torrentpier/torrentpier/commit/b954815f5d0dce9520f65679e834d8bd49e571e0))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.0.3 to 11.0.4 ([#1823](https://github.com/torrentpier/torrentpier/pull/1823)) - ([1c323a4](https://github.com/torrentpier/torrentpier/commit/1c323a45d777b033155da9a2becec506215bd94c))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.0.1 to 11.0.3 ([#1821](https://github.com/torrentpier/torrentpier/pull/1821)) - ([dedf35b](https://github.com/torrentpier/torrentpier/commit/dedf35b794196034eb27d4125dff0798aed5f315))
|
||||
|
||||
### 🗑️ Removed
|
||||
|
||||
- *(posting.php)* Unused `'U_VIEWTOPIC` variable ([#1818](https://github.com/torrentpier/torrentpier/pull/1818)) - ([03ebbda](https://github.com/torrentpier/torrentpier/commit/03ebbda6be567d82d2a49fefe02356544fbd07cb))
|
||||
- Integrity checker 🥺🪦 ([#1827](https://github.com/torrentpier/torrentpier/pull/1827)) - ([ba3ce88](https://github.com/torrentpier/torrentpier/commit/ba3ce885c8d84ae939a0ce9c79b97877d3aaab41))
|
||||
- Redundant `.htaccess` files ([#1826](https://github.com/torrentpier/torrentpier/pull/1826)) - ([912b080](https://github.com/torrentpier/torrentpier/commit/912b080b16438b09f82fbc72a363589cc2f6209e))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(Caddyfile)* Some minor fixes ([#1822](https://github.com/torrentpier/torrentpier/pull/1822)) - ([6f641aa](https://github.com/torrentpier/torrentpier/commit/6f641aa9d8d7afb30920c054a43347393ea05cc4))
|
||||
- *(README)* Fixed all grammatical errors, sentence structure and readibility ([#1812](https://github.com/torrentpier/torrentpier/pull/1812)) - ([bea3b0b](https://github.com/torrentpier/torrentpier/commit/bea3b0bccf335970ea5826543d8fa223329ef077))
|
||||
- *(_cleanup.php)* Added CLI mode check ([#1834](https://github.com/torrentpier/torrentpier/pull/1834)) - ([5dc9a54](https://github.com/torrentpier/torrentpier/commit/5dc9a5475c051911c579ea732ef52d7feb78e8ac))
|
||||
- *(announcer)* Some minor improvements ([#1819](https://github.com/torrentpier/torrentpier/pull/1819)) - ([bdefed4](https://github.com/torrentpier/torrentpier/commit/bdefed4dab3cc65330fcb9cb9750cc8e84beda1d))
|
||||
- *(cliff)* Removed TorrentPier logo ([#1817](https://github.com/torrentpier/torrentpier/pull/1817)) - ([7794242](https://github.com/torrentpier/torrentpier/commit/7794242750b44183312a2a45c9f54c6afde12f0e))
|
||||
- *(cliff)* Synced `cliff-releases.toml` with `cliff.toml` changes ([#1815](https://github.com/torrentpier/torrentpier/pull/1815)) - ([f2aea92](https://github.com/torrentpier/torrentpier/commit/f2aea92b3d79d72254e696fde31ad9b4bec5dcd0))
|
||||
- *(cliff)* Added missing line breaks after `body` ([#1814](https://github.com/torrentpier/torrentpier/pull/1814)) - ([2593f09](https://github.com/torrentpier/torrentpier/commit/2593f093a389a9c450725290862b99d911fbef5d))
|
||||
- *(installer)* Added cleanup step (for master builds) ([#1838](https://github.com/torrentpier/torrentpier/pull/1838)) - ([dd72136](https://github.com/torrentpier/torrentpier/commit/dd721367c7dc9956861fcd33af7f9f822cf80011))
|
||||
- *(installer)* Some minor improvements ([#1825](https://github.com/torrentpier/torrentpier/pull/1825)) - ([4f89685](https://github.com/torrentpier/torrentpier/commit/4f896854d3bb67300027f7542704f41c4869837f))
|
||||
- *(installer)* Some minor improvements ([#1824](https://github.com/torrentpier/torrentpier/pull/1824)) - ([f3714f0](https://github.com/torrentpier/torrentpier/commit/f3714f02f2c8fbfaccfdafb8f25a269664c48950))
|
||||
- *(workflow)* Short `release_name` ([#1816](https://github.com/torrentpier/torrentpier/pull/1816)) - ([c57db21](https://github.com/torrentpier/torrentpier/commit/c57db2104d7b8363d0b8ce8872ce90fc7410c724))
|
||||
- *(workflow)* Added `workflow_dispatch` for `schedule.yml` ([#1813](https://github.com/torrentpier/torrentpier/pull/1813)) - ([d54c07b](https://github.com/torrentpier/torrentpier/commit/d54c07b3da00fc8bcba5413cd4ae3f3c9f6007bb))
|
||||
- *(workflow)* Some improvements ([#1811](https://github.com/torrentpier/torrentpier/pull/1811)) - ([3a9dd6a](https://github.com/torrentpier/torrentpier/commit/3a9dd6a3c931cfbd682257c283a3296c4914548f))
|
||||
- *(workflow)* Some improvements ([#1810](https://github.com/torrentpier/torrentpier/pull/1810)) - ([c168c39](https://github.com/torrentpier/torrentpier/commit/c168c3956cf77886c14133ac10ec33aa0ae5bc4e))
|
||||
- Replaced `gregwar/captcha` with my own fork ([#1840](https://github.com/torrentpier/torrentpier/pull/1840)) - ([8585560](https://github.com/torrentpier/torrentpier/commit/858556043d3e45218ea8e803786d6b6de6d485d0))
|
||||
- Created cleanup script (for releases preparation) ([#1833](https://github.com/torrentpier/torrentpier/pull/1833)) - ([68bf26d](https://github.com/torrentpier/torrentpier/commit/68bf26d0f4ab33f5394d26f425e53817f3464ac8))
|
||||
- Bring back missing `cache` & `log` directories ([#1832](https://github.com/torrentpier/torrentpier/pull/1832)) - ([249c988](https://github.com/torrentpier/torrentpier/commit/249c9889890291d56317dd703414bdb57ecaa41f))
|
||||
- Some minor improvements ([#1829](https://github.com/torrentpier/torrentpier/pull/1829)) - ([3b8ee4c](https://github.com/torrentpier/torrentpier/commit/3b8ee4c4d3ab4631425fbe44f197b6a9bd7d158c))
|
||||
|
||||
## New Contributors ❤️
|
||||
|
||||
* @xeddmc made their first contribution in [#1812](https://github.com/torrentpier/torrentpier/pull/1812)
|
||||
|
||||
## [v2.4.5-rc.3](https://github.com/torrentpier/torrentpier/compare/v2.4.5-rc.2..v2.4.5-rc.3) (2025-02-06)
|
||||
|
||||
### 🚀 Features
|
||||
|
||||
- *(announcer)* Added some disallowed ports by default ([#1767](https://github.com/torrentpier/torrentpier/pull/1767)) - ([46288ec](https://github.com/torrentpier/torrentpier/commit/46288ec19830c84aedb156e1f30d7ec8a0803e0d))
|
||||
- *(announcer)* Added `is_numeric()` checking for some fields ([#1766](https://github.com/torrentpier/torrentpier/pull/1766)) - ([096bb51](https://github.com/torrentpier/torrentpier/commit/096bb5124fa27d27c3e60031edc432d877f1c507))
|
||||
- *(announcer)* Added `event` verifying ([#1765](https://github.com/torrentpier/torrentpier/pull/1765)) - ([6a19323](https://github.com/torrentpier/torrentpier/commit/6a1932313801e55fbcfb047fdcef87266f472c33))
|
||||
- *(announcer)* Block browser by checking the `User-Agent` ([#1764](https://github.com/torrentpier/torrentpier/pull/1764)) - ([7b64b50](https://github.com/torrentpier/torrentpier/commit/7b64b508199af568472fe6ac2edf333a3e274a00))
|
||||
- *(announcer)* Block `User-Agent` strings that are too long ([#1763](https://github.com/torrentpier/torrentpier/pull/1763)) - ([a98f8f1](https://github.com/torrentpier/torrentpier/commit/a98f8f102a8253b0b22c80ef444fed1ec29177f3))
|
||||
- *(announcer)* Blocking all ports lower then `1024` ([#1762](https://github.com/torrentpier/torrentpier/pull/1762)) - ([1bc7e09](https://github.com/torrentpier/torrentpier/commit/1bc7e09ddbeaf680b86095eed9a80b8ebf6169b3))
|
||||
- *(cache)* Checking if extensions are installed ([#1759](https://github.com/torrentpier/torrentpier/pull/1759)) - ([7f31022](https://github.com/torrentpier/torrentpier/commit/7f31022cfca2acb28a5cba06961eeaf8d2c9de51))
|
||||
- *(captcha)* Added some new services 🤖 ([#1771](https://github.com/torrentpier/torrentpier/pull/1771)) - ([d413c71](https://github.com/torrentpier/torrentpier/commit/d413c717188c9bd906f715e7137955dc9a42a003))
|
||||
- *(environment)* Make configurable `TP_HOST` and `TP_PORT` ([#1780](https://github.com/torrentpier/torrentpier/pull/1780)) - ([e51e091](https://github.com/torrentpier/torrentpier/commit/e51e09159333382a77b809b5f1da5e152a713143))
|
||||
- *(installer)* Fully show non-installed extensions ([#1761](https://github.com/torrentpier/torrentpier/pull/1761)) - ([8fcc62d](https://github.com/torrentpier/torrentpier/commit/8fcc62d2a2fd41927b2f5dae215fe5bbf95f2c96))
|
||||
- *(installer)* More explanations ([#1758](https://github.com/torrentpier/torrentpier/pull/1758)) - ([48ab52a](https://github.com/torrentpier/torrentpier/commit/48ab52ac8674afcb607c8e49134316a3e117236a))
|
||||
- *(installer)* Check `Composer` dependencies after installing ([#1756](https://github.com/torrentpier/torrentpier/pull/1756)) - ([262b887](https://github.com/torrentpier/torrentpier/commit/262b8872a5b14068eb73d745adea6203c557e192))
|
||||
- *(installer)* More explanations ([#1754](https://github.com/torrentpier/torrentpier/pull/1754)) - ([fd6f1f8](https://github.com/torrentpier/torrentpier/commit/fd6f1f86a5e9216469cd648601ecb9ba875f9eb6))
|
||||
- *(installer)* Create `config.local.php` on local environment ([#1745](https://github.com/torrentpier/torrentpier/pull/1745)) - ([0d93b2c](https://github.com/torrentpier/torrentpier/commit/0d93b2c768c2965c12ac62e2f3b2886dc1ef31c2))
|
||||
- *(torrent)* Bring back old torrent file naming ([#1783](https://github.com/torrentpier/torrentpier/pull/1783)) - ([314c592](https://github.com/torrentpier/torrentpier/commit/314c592affbef4b8db48d562b9633aad27059a76))
|
||||
- *(workflow)* Automated deploy actual changes to `TorrentPier Demo` ([#1788](https://github.com/torrentpier/torrentpier/pull/1788)) - ([4333d6a](https://github.com/torrentpier/torrentpier/commit/4333d6aca4aeb8584ff8a8ef0bf76c537a3f371a))
|
||||
- Used `TORRENT_MIMETYPE` constant instead of hardcoded string ([#1757](https://github.com/torrentpier/torrentpier/pull/1757)) - ([4b0d270](https://github.com/torrentpier/torrentpier/commit/4b0d270c89ec06abed590504f6a0cb70076a9e59))
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- *(announcer)* Null `event` exception ([#1784](https://github.com/torrentpier/torrentpier/pull/1784)) - ([b06e327](https://github.com/torrentpier/torrentpier/commit/b06e327cbb285a676814699eb5fb1fbc0e1f22e8))
|
||||
- *(bb_die)* HTML characters converting ([#1744](https://github.com/torrentpier/torrentpier/pull/1744)) - ([4f1c7e4](https://github.com/torrentpier/torrentpier/commit/4f1c7e40d82e52f81eba44ead501e1f01058cc4f))
|
||||
- *(debug)* Disabled `Bugsnag` reporting on local environment ([#1751](https://github.com/torrentpier/torrentpier/pull/1751)) - ([1f3b629](https://github.com/torrentpier/torrentpier/commit/1f3b629e9cea4d11fbf3cf29f575ba730bad898d))
|
||||
- *(installer)* Missing `gd` extension ([#1749](https://github.com/torrentpier/torrentpier/pull/1749)) - ([a1c519d](https://github.com/torrentpier/torrentpier/commit/a1c519d938b848edffcbf7fbbe6a3fdb9a5394f1))
|
||||
- *(youtube player)* Mixed content issue ([#1795](https://github.com/torrentpier/torrentpier/pull/1795)) - ([3c0a1d5](https://github.com/torrentpier/torrentpier/commit/3c0a1d5d0018daa87ad3914ea04078a9a6d05fc2))
|
||||
- Incorrect peer country flag ([#1768](https://github.com/torrentpier/torrentpier/pull/1768)) - ([0f091eb](https://github.com/torrentpier/torrentpier/commit/0f091eb546e34923d9d1ab34be5faf92080ec198))
|
||||
|
||||
### 📦 Dependencies
|
||||
|
||||
- *(deps)* Bump jacklul/monolog-telegram from 3.1.0 to 3.2.0 ([#1776](https://github.com/torrentpier/torrentpier/pull/1776)) - ([420c92c](https://github.com/torrentpier/torrentpier/commit/420c92c0addf4dee91f3ae872517cb3224827a1f))
|
||||
- *(deps)* Bump filp/whoops from 2.16.0 to 2.17.0 ([#1777](https://github.com/torrentpier/torrentpier/pull/1777)) - ([a71609b](https://github.com/torrentpier/torrentpier/commit/a71609ba67a89480fabb7b62de450d9be09373fa))
|
||||
- *(deps)* Bump php-curl-class/php-curl-class from 11.0.0 to 11.0.1 ([#1753](https://github.com/torrentpier/torrentpier/pull/1753)) - ([ce32031](https://github.com/torrentpier/torrentpier/commit/ce32031a0fb14cdf6c3f4ba379b530cbb52b0fea))
|
||||
- *(deps)* Bump bugsnag/bugsnag from 3.29.1 to 3.29.2 ([#1752](https://github.com/torrentpier/torrentpier/pull/1752)) - ([f63d15c](https://github.com/torrentpier/torrentpier/commit/f63d15c49e3992837413b2c7a0160d599b44f2ef))
|
||||
|
||||
### 🗑️ Removed
|
||||
|
||||
- *(environment)* Extra `DB_CONNECTION` variable ([#1775](https://github.com/torrentpier/torrentpier/pull/1775)) - ([cd2786b](https://github.com/torrentpier/torrentpier/commit/cd2786bb69c74cec88a447f66750d014fc4d3612))
|
||||
- Some unused tracker config variables ([#1769](https://github.com/torrentpier/torrentpier/pull/1769)) - ([7f9df35](https://github.com/torrentpier/torrentpier/commit/7f9df35d3bd0e9d23284b8bd9c36a0f52158f5d7))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- Minor improvements ([#1750](https://github.com/torrentpier/torrentpier/pull/1750)) - ([3e850ac](https://github.com/torrentpier/torrentpier/commit/3e850ac724c43e813aa077b272b498e2b0477260))
|
||||
|
||||
### ⚙️ Miscellaneous
|
||||
|
||||
- *(cd workflow)* Fixed release body creation ([#1809](https://github.com/torrentpier/torrentpier/pull/1809)) - ([7378cb3](https://github.com/torrentpier/torrentpier/commit/7378cb3af5cc56343c667a9d920038b05327e97b))
|
||||
- *(cd workflow)* Fixed release body creation ([#1807](https://github.com/torrentpier/torrentpier/pull/1807)) - ([cc679a8](https://github.com/torrentpier/torrentpier/commit/cc679a80246f3ff65136653025d826bf1458db3a))
|
||||
- *(changelog workflow)* Minor improvements ([#1802](https://github.com/torrentpier/torrentpier/pull/1802)) - ([15ca21f](https://github.com/torrentpier/torrentpier/commit/15ca21f03840281f7d4402959aa8bfb7d407b45b))
|
||||
- *(checksum workflow)* Fixed incorrect file path ([#1799](https://github.com/torrentpier/torrentpier/pull/1799)) - ([4eb5a9a](https://github.com/torrentpier/torrentpier/commit/4eb5a9adc61c4e116feb09208091efb914275da2))
|
||||
- *(cliff)* Changed emoji for dependencies ([#1755](https://github.com/torrentpier/torrentpier/pull/1755)) - ([55d4670](https://github.com/torrentpier/torrentpier/commit/55d467048370b51cd592982c8026702dca8813d5))
|
||||
- *(cliff)* Use blockquote for notice ([#1748](https://github.com/torrentpier/torrentpier/pull/1748)) - ([61e5592](https://github.com/torrentpier/torrentpier/commit/61e55925f312417bdb63c88a7c8939c3b2eb2ac5))
|
||||
- *(cliff)* Fixed typo ([#1747](https://github.com/torrentpier/torrentpier/pull/1747)) - ([4936af7](https://github.com/torrentpier/torrentpier/commit/4936af7d3d10f553d8586a14de249c32e50f3494))
|
||||
- *(cliff)* Notice about previous changelog file ([#1746](https://github.com/torrentpier/torrentpier/pull/1746)) - ([85395be](https://github.com/torrentpier/torrentpier/commit/85395be5e7c6a891c79ec72cf215894af097f819))
|
||||
- *(copyright)* Updated copyright year ([#1760](https://github.com/torrentpier/torrentpier/pull/1760)) - ([6697410](https://github.com/torrentpier/torrentpier/commit/6697410c1df6c8d9d7f511b1e984ae90d888ae0e))
|
||||
- *(database)* Use `DEFAULT ''` for `privmsgs_subject` ([#1786](https://github.com/torrentpier/torrentpier/pull/1786)) - ([387a258](https://github.com/torrentpier/torrentpier/commit/387a25870abd37b641b55ffd98e13f4aaecb73b1))
|
||||
- *(deploy action)* Specify some missing params ([#1789](https://github.com/torrentpier/torrentpier/pull/1789)) - ([6115900](https://github.com/torrentpier/torrentpier/commit/6115900b765752209a6ed1dfb83e4f0cbee2ae77))
|
||||
- *(emailer)* Use constants for email types ([#1794](https://github.com/torrentpier/torrentpier/pull/1794)) - ([c95d414](https://github.com/torrentpier/torrentpier/commit/c95d414ef63ca37118f1f660880cd58b4480c414))
|
||||
- *(integrity checker)* Disabled by default in `Demo mode` ([#1804](https://github.com/torrentpier/torrentpier/pull/1804)) - ([44be40c](https://github.com/torrentpier/torrentpier/commit/44be40c2e849c60eb4f10ca7e0bae0463791355e))
|
||||
- *(integrity checker)* Some enhancements ([#1797](https://github.com/torrentpier/torrentpier/pull/1797)) - ([09cafc2](https://github.com/torrentpier/torrentpier/commit/09cafc2285dd171cb2213ece9549993a3321527c))
|
||||
- *(issue template)* Improved `Feature request` template ([#1774](https://github.com/torrentpier/torrentpier/pull/1774)) - ([268f79d](https://github.com/torrentpier/torrentpier/commit/268f79d7259de67aa8877fcf7130ff0069469ab2))
|
||||
- *(issue template)* Improved `Bug report` template ([#1773](https://github.com/torrentpier/torrentpier/pull/1773)) - ([53ebfef](https://github.com/torrentpier/torrentpier/commit/53ebfef32c0e9016257e03b96ef96349e22d3e9b))
|
||||
- *(notify)* Hide notify checkbox in topic for guests ([#1793](https://github.com/torrentpier/torrentpier/pull/1793)) - ([8e4cd97](https://github.com/torrentpier/torrentpier/commit/8e4cd97734fc46f33459c4b00a0fe38b0597f92b))
|
||||
- *(readme)* Improved installation guide ([#1781](https://github.com/torrentpier/torrentpier/pull/1781)) - ([e579b81](https://github.com/torrentpier/torrentpier/commit/e579b816b4dc346b3242cb3d9db292ad05596c1f))
|
||||
- *(readme)* Minor improvements ([#1779](https://github.com/torrentpier/torrentpier/pull/1779)) - ([5b0ed02](https://github.com/torrentpier/torrentpier/commit/5b0ed020890a8f938df912f9215cccbda42b0317))
|
||||
- *(readme)* Added Caddy webserver ([#1778](https://github.com/torrentpier/torrentpier/pull/1778)) - ([970a028](https://github.com/torrentpier/torrentpier/commit/970a0282e3631c403029c959ffd46b21c5cad0cd))
|
||||
- *(workflow)* Refactored all workflows ([#1803](https://github.com/torrentpier/torrentpier/pull/1803)) - ([a29d57b](https://github.com/torrentpier/torrentpier/commit/a29d57b2f8673733bbfbea3fb96eebe841078d49))
|
||||
- *(workflow)* Trying combine `changelog workflow` with `checksums workflow` ([#1800](https://github.com/torrentpier/torrentpier/pull/1800)) - ([60c6057](https://github.com/torrentpier/torrentpier/commit/60c605778412335ce97d41489c3b6ee9c051454b))
|
||||
- Automated releases generation ([#1808](https://github.com/torrentpier/torrentpier/pull/1808)) - ([6c9372c](https://github.com/torrentpier/torrentpier/commit/6c9372c407327c9bb443b2ecf16eff64c0245c4b))
|
||||
- Automated releases generation ([#1806](https://github.com/torrentpier/torrentpier/pull/1806)) - ([bc74550](https://github.com/torrentpier/torrentpier/commit/bc745502940207f3f24c83057cd680fe69355961))
|
||||
- Automated releases generation ([#1805](https://github.com/torrentpier/torrentpier/pull/1805)) - ([425e2e8](https://github.com/torrentpier/torrentpier/commit/425e2e87d5a7f097b961b1a14fbafcdabb9d1666))
|
||||
- Minor improvements ([#1796](https://github.com/torrentpier/torrentpier/pull/1796)) - ([8650ad3](https://github.com/torrentpier/torrentpier/commit/8650ad30f429ab14a03f44b26d7be7701f1985f1))
|
||||
- Update `cliff.toml` - ([254dca2](https://github.com/torrentpier/torrentpier/commit/254dca2b27c2d92421d3e639c80b0adf1172202f))
|
||||
- Minor improvements ([#1743](https://github.com/torrentpier/torrentpier/pull/1743)) - ([e73d650](https://github.com/torrentpier/torrentpier/commit/e73d65011fff0a8b8e1368eef61bbfb67e87eab8))
|
||||
- Enabled `$bb_cfg['integrity_check']` by defaul ([#1742](https://github.com/torrentpier/torrentpier/pull/1742)) - ([7e3601e](https://github.com/torrentpier/torrentpier/commit/7e3601e63aff73be1428969ca37dda3da2537d9b))
|
||||
|
||||
## New Contributors ❤️
|
||||
|
||||
* @actions-user made their first contribution
|
||||
|
||||
|
||||
|
|
144
CLAUDE.md
Normal file
144
CLAUDE.md
Normal file
|
@ -0,0 +1,144 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
TorrentPier is a BitTorrent tracker engine written in PHP, designed for hosting BitTorrent communities with forum functionality. The project is in active modernization, transitioning from legacy code to modern PHP practices while maintaining backward compatibility.
|
||||
|
||||
## Technology Stack & Architecture
|
||||
|
||||
- **PHP 8.2+** with modern features
|
||||
- **MySQL/MariaDB/Percona** database
|
||||
- **Nette Database** with backward-compatible wrapper
|
||||
- **Composer** for dependency management
|
||||
- **Custom BitTorrent tracker** implementation
|
||||
|
||||
## Key Directory Structure
|
||||
|
||||
- `/src/` - Modern PHP classes (PSR-4 autoloaded as `TorrentPier\`)
|
||||
- `/library/` - Core application logic and legacy code
|
||||
- `/admin/` - Administrative interface
|
||||
- `/bt/` - BitTorrent tracker functionality (announce.php, scrape.php)
|
||||
- `/styles/` - Templates, CSS, JS, images
|
||||
- `/internal_data/` - Cache, logs, compiled templates
|
||||
- `/install/` - Installation scripts and configuration examples
|
||||
- `/migrations/` - Database migration files (Phinx)
|
||||
|
||||
## Entry Points & Key Files
|
||||
|
||||
- `index.php` - Main forum homepage
|
||||
- `tracker.php` - Torrent search/browse interface
|
||||
- `bt/announce.php` - BitTorrent announce endpoint
|
||||
- `bt/scrape.php` - BitTorrent scrape endpoint
|
||||
- `admin/index.php` - Administrative panel
|
||||
- `cron.php` - Background task runner (CLI only)
|
||||
- `install.php` - Installation script (CLI only)
|
||||
|
||||
## Development Commands
|
||||
|
||||
### Installation & Setup
|
||||
```bash
|
||||
# Automated installation (CLI)
|
||||
php install.php
|
||||
|
||||
# Install dependencies
|
||||
composer install
|
||||
|
||||
# Update dependencies
|
||||
composer update
|
||||
```
|
||||
|
||||
### Maintenance & Operations
|
||||
```bash
|
||||
# Run background maintenance tasks
|
||||
php cron.php
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
The project uses **StyleCI** with PSR-2 preset for code style enforcement. StyleCI configuration is in `.styleci.yml` targeting `src/` directory.
|
||||
|
||||
## Modern Architecture Components
|
||||
|
||||
### Database Layer (`/src/Database/`)
|
||||
- **Nette Database** with full old SqlDb backward compatibility
|
||||
- Singleton pattern accessible via `DB()` function
|
||||
- Support for multiple database connections and debug functionality
|
||||
- Migration path to ORM-style Explorer queries
|
||||
|
||||
### Cache System (`/src/Cache/`)
|
||||
- **Unified caching** using Nette Caching internally
|
||||
- 100% backward compatibility with existing `CACHE()` and $datastore calls
|
||||
- Supports file, SQLite, memory, and Memcached storage
|
||||
- Advanced features: memoization, cache dependencies
|
||||
|
||||
### Configuration Management
|
||||
- Environment-based config with `.env` files
|
||||
- Singleton `Config` class accessible via `config()` function
|
||||
- Local overrides supported via `library/config.local.php`
|
||||
|
||||
## Configuration Files
|
||||
- `.env` - Environment variables (copy from `.env.example`)
|
||||
- `library/config.php` - Main application configuration
|
||||
- `library/config.local.php` - Local configuration overrides
|
||||
- `composer.json` - Dependencies and PSR-4 autoloading
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### CI/CD Pipeline
|
||||
- **GitHub Actions** for automated testing and deployment
|
||||
- **StyleCI** for code style enforcement
|
||||
- **Dependabot** for dependency updates
|
||||
- **FTP deployment** to demo environment
|
||||
|
||||
### Installation Methods
|
||||
1. **Automated**: `php install.php` (recommended)
|
||||
2. **Composer**: `composer create-project torrentpier/torrentpier`
|
||||
3. **Manual**: Git clone + `composer install` + database setup
|
||||
|
||||
## Database & Schema
|
||||
|
||||
- **Database migrations** managed via Phinx in `/migrations/` directory
|
||||
- Initial schema: `20250619000001_initial_schema.php`
|
||||
- Initial seed data: `20250619000002_seed_initial_data.php`
|
||||
- UTF-8 (utf8mb4) character set required
|
||||
- Multiple database alias support for different components
|
||||
|
||||
### Migration Commands
|
||||
```bash
|
||||
# Run all pending migrations
|
||||
php vendor/bin/phinx migrate --configuration=phinx.php
|
||||
|
||||
# Check migration status
|
||||
php vendor/bin/phinx status --configuration=phinx.php
|
||||
|
||||
# Mark migrations as applied (for existing installations)
|
||||
php vendor/bin/phinx migrate --fake --configuration=phinx.php
|
||||
```
|
||||
|
||||
## Legacy Compatibility Strategy
|
||||
|
||||
The codebase maintains 100% backward compatibility while introducing modern alternatives:
|
||||
|
||||
- **Database layer**: Existing old SqlDb calls work while new code can use Nette Database
|
||||
- **Cache system**: All existing `CACHE()` and $datastore calls preserved while adding modern features
|
||||
- **Configuration**: Legacy config access maintained alongside new singleton pattern
|
||||
|
||||
This approach allows gradual modernization without breaking existing functionality - critical for a mature application with existing deployments.
|
||||
|
||||
## Security & Performance
|
||||
|
||||
- **Environment-based secrets** management via `.env`
|
||||
- **CDN/proxy support** (Cloudflare, Fastly)
|
||||
- **Input sanitization** and CSRF protection
|
||||
- **Advanced caching** with multiple storage backends
|
||||
- **Rate limiting** and IP-based restrictions
|
||||
|
||||
## BitTorrent Tracker Features
|
||||
|
||||
- **BitTorrent v1 & v2** support
|
||||
- **TorrServer integration** capability
|
||||
- **Client ban system** for problematic torrent clients
|
||||
- **Scrape support** for tracker statistics
|
||||
|
||||
When working with this codebase, prioritize understanding the legacy compatibility approach and modern architecture patterns. Always test both legacy and modern code paths when making changes to core systems.
|
1131
HISTORY.md
1131
HISTORY.md
File diff suppressed because it is too large
Load diff
52
README.md
52
README.md
|
@ -19,15 +19,15 @@
|
|||
|
||||
## 🐂 About TorrentPier
|
||||
|
||||
TorrentPier — bull-powered BitTorrent Public/Private tracker engine, written in PHP. High speed, simple modifications, load-balanced
|
||||
architecture. In addition, we have a very helpful
|
||||
TorrentPier — bull-powered BitTorrent Public/Private tracker engine, written in PHP. High speed, simple modifications, load-balanced
|
||||
architecture. In addition, we have a very helpful
|
||||
[official support forum](https://torrentpier.com), where it's possible to get support and download modifications for the engine.
|
||||
|
||||
## 🌈 Current status
|
||||
|
||||
TorrentPier is currently in active development. The goal is to remove all legacy code and rewrite the existing code to
|
||||
modern specifications. If you want delve deep into the code, check our [issues](https://github.com/torrentpier/torrentpier/issues)
|
||||
and go from there. The documentation will be translated to english in the near future, currently russian is the main language of it.
|
||||
TorrentPier is currently in active development. The goal is to remove all legacy code and rewrite the existing code to
|
||||
modern specifications. If you want to delve deep into the code, check our [issues](https://github.com/torrentpier/torrentpier/issues)
|
||||
and go from there. The documentation will be translated to English in the near future, currently Russian is the main language.
|
||||
|
||||
## ✨ Features
|
||||
* Rich forum with browsing/moderation tools
|
||||
|
@ -40,7 +40,7 @@ and go from there. The documentation will be translated to english in the near f
|
|||
* Bonus points
|
||||
* Polling system
|
||||
* PM/DM system
|
||||
* Multilingual support (Russian and English is currently fully supported, with others in the future)
|
||||
* Multilingual support (Russian and English are currently fully supported, with others in the future)
|
||||
* Atom/RSS feeds
|
||||
* ... and so MUCH MORE!
|
||||
|
||||
|
@ -56,8 +56,8 @@ and go from there. The documentation will be translated to english in the near f
|
|||
## 🔧 Requirements
|
||||
|
||||
* Apache / nginx ([example config](install/nginx.conf)) / caddy ([example config](install/Caddyfile))
|
||||
* MySQL 5.5.3 or above / MariaDB 10.0 or above / Percona
|
||||
* PHP: 8.1 / 8.2 / 8.3 / 8.4
|
||||
* MySQL 5.5.3 or above (including MySQL 8.0+) / MariaDB 10.0 or above / Percona
|
||||
* PHP: 8.2 / 8.3 / 8.4
|
||||
* PHP Extensions: mbstring, gd, bcmath, intl, tidy (optional), xml, xmlwriter
|
||||
* Crontab (Recommended)
|
||||
|
||||
|
@ -69,7 +69,7 @@ For the installation, select one of the installation variants below:
|
|||
|
||||
Check out our [autoinstall](https://github.com/torrentpier/autoinstall) repository with detailed instructions.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> [!NOTE]
|
||||
> Thanks to [Sergei Solovev](https://github.com/SeAnSolovev) for this installation script ❤️
|
||||
|
||||
### Quick (For web-panels) ☕️
|
||||
|
@ -100,14 +100,20 @@ Check out our [autoinstall](https://github.com/torrentpier/autoinstall) reposito
|
|||
```shell
|
||||
composer install
|
||||
```
|
||||
5. Create a database and import the dump located at `install/sql/mysql.sql`
|
||||
6. Edit database configuration settings in the environment (`.env.example`), after, rename to `.env`
|
||||
5. Edit database configuration settings in the environment (`.env.example`), after, rename to `.env`
|
||||
6. Create a database and run migrations to set up the schema
|
||||
```shell
|
||||
php vendor/bin/phinx migrate --configuration=phinx.php
|
||||
```
|
||||
7. Provide write permissions to the specified folders:
|
||||
* `data/avatars`, `data/uploads`, `data/uploads/thumbs`
|
||||
* `internal_data/atom`, `internal_data/cache`, `internal_data/log`, `internal_data/triggers`
|
||||
* `sitemap`
|
||||
8. Voila! ✨
|
||||
|
||||
> [!TIP]
|
||||
> You can automate steps 4-7 by running `php install.php` instead, which will guide you through the setup process interactively.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The specific settings depend on the server you are using, but in general we recommend chmod **0755** for folders, and chmod **0644** for the files in them.
|
||||
|
||||
|
@ -122,15 +128,29 @@ Check out our [autoinstall](https://github.com/torrentpier/autoinstall) reposito
|
|||
|
||||
If you discover a security vulnerability within TorrentPier, please follow our [security policy](https://github.com/torrentpier/torrentpier/security/policy), so we can address it promptly.
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
TorrentPier includes a comprehensive testing suite built with **Pest PHP**. Run tests to ensure code quality and system reliability:
|
||||
|
||||
```shell
|
||||
# Run all tests
|
||||
./vendor/bin/pest
|
||||
|
||||
# Run with coverage
|
||||
./vendor/bin/pest --coverage
|
||||
```
|
||||
|
||||
For detailed testing documentation, see [tests/README.md](tests/README.md).
|
||||
|
||||
## 📌 Our recommendations
|
||||
|
||||
* *It's recommended to run `cron.php`.* - For significant tracker speed increase it ay be required to replace the built-in cron.php in operating system daemon.
|
||||
* *It's recommended to run `cron.php`.* - For significant tracker speed increase it may be required to replace the built-in cron.php with an operating system daemon.
|
||||
* *Local configuration copy.* - You can override the settings using the local configuration file `library/config.local.php`.
|
||||
|
||||
## 💚 Contributing / Contributors
|
||||
|
||||
Please read our [contributing policy](CONTRIBUTING.md) and [code of conduct](CODE_OF_CONDUCT.md) for details, and the process for
|
||||
submitting pull requests to us. But we are always ready to renew your pull-request for compliance with
|
||||
Please read our [contributing policy](CONTRIBUTING.md) and [code of conduct](CODE_OF_CONDUCT.md) for details, and the process for
|
||||
submitting pull requests to us. But we are always ready to review your pull-request for compliance with
|
||||
these requirements. Just send it!
|
||||
|
||||
<a href="https://github.com/torrentpier/torrentpier/graphs/contributors">
|
||||
|
@ -141,7 +161,7 @@ Made with [contrib.rocks](https://contrib.rocks).
|
|||
|
||||
## 💞 Sponsoring
|
||||
|
||||
Support this project by becoming a sponsor or a backer.
|
||||
Support this project by becoming a sponsor or a backer.
|
||||
|
||||
[](https://opencollective.com/torrentpier)
|
||||
[](https://opencollective.com/torrentpier)
|
||||
|
@ -164,7 +184,7 @@ Support this project by becoming a sponsor or a backer.
|
|||
|
||||
## 📦 Versioning
|
||||
|
||||
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/torrentpier/torrentpier/tags).
|
||||
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/torrentpier/torrentpier/tags).
|
||||
|
||||
## 📖 License
|
||||
|
||||
|
|
583
UPGRADE_GUIDE.md
583
UPGRADE_GUIDE.md
|
@ -4,15 +4,368 @@ This guide helps you upgrade your TorrentPier installation to the latest version
|
|||
|
||||
## 📖 Table of Contents
|
||||
|
||||
- [Database Migration System](#database-migration-system)
|
||||
- [Database Layer Migration](#database-layer-migration)
|
||||
- [Unified Cache System Migration](#unified-cache-system-migration)
|
||||
- [Configuration System Migration](#configuration-system-migration)
|
||||
- [Language System Migration](#language-system-migration)
|
||||
- [Censor System Migration](#censor-system-migration)
|
||||
- [Select System Migration](#select-system-migration)
|
||||
- [Development System Migration](#development-system-migration)
|
||||
- [Breaking Changes](#breaking-changes)
|
||||
- [Best Practices](#best-practices)
|
||||
|
||||
## 🗄️ Database Migration System
|
||||
|
||||
TorrentPier now includes a modern database migration system using **Phinx** (from CakePHP), replacing the legacy direct SQL import approach. This provides version-controlled database schema management with rollback capabilities.
|
||||
|
||||
### Key Benefits
|
||||
|
||||
- **Version Control**: Database schema changes are tracked in code
|
||||
- **Environment Consistency**: Same database structure across development, staging, and production
|
||||
- **Safe Rollbacks**: Ability to safely revert schema changes
|
||||
- **Team Collaboration**: No more merge conflicts on database changes
|
||||
- **Automated Deployments**: Database updates as part of deployment process
|
||||
|
||||
### Migration Architecture
|
||||
|
||||
#### Engine Strategy
|
||||
- **InnoDB**: Used for all tables for maximum data integrity and reliability
|
||||
- **ACID Compliance**: Full transaction support and crash recovery for all data
|
||||
- **Row-Level Locking**: Better concurrency for high-traffic operations
|
||||
|
||||
#### Directory Structure
|
||||
```
|
||||
/migrations/
|
||||
├── 20250619000001_initial_schema.php # Complete database schema
|
||||
├── 20250619000002_seed_initial_data.php # Essential data seeding
|
||||
└── future_migrations... # Your custom migrations
|
||||
/phinx.php # Migration configuration
|
||||
```
|
||||
|
||||
### For New Installations
|
||||
|
||||
New installations automatically use migrations instead of the legacy SQL dump:
|
||||
|
||||
```bash
|
||||
# Fresh installation now uses migrations
|
||||
php install.php
|
||||
```
|
||||
|
||||
The installer will:
|
||||
1. Set up environment configuration
|
||||
2. Create the database
|
||||
3. Run all migrations automatically
|
||||
4. Seed initial data (admin user, configuration, etc.)
|
||||
|
||||
### For Existing Installations
|
||||
|
||||
Existing installations continue to work without changes. The migration system is designed for new installations and development workflows.
|
||||
|
||||
**Important**: Existing installations should **not** attempt to migrate to the new system without proper backup and testing procedures.
|
||||
|
||||
### Developer Workflow
|
||||
|
||||
#### Creating Migrations
|
||||
```bash
|
||||
# Create a new migration
|
||||
php vendor/bin/phinx create AddNewFeatureTable
|
||||
|
||||
# Edit the generated migration file
|
||||
# /migrations/YYYYMMDDHHMMSS_add_new_feature_table.php
|
||||
```
|
||||
|
||||
#### Running Migrations
|
||||
```bash
|
||||
# Run all pending migrations
|
||||
php vendor/bin/phinx migrate
|
||||
|
||||
# Check migration status
|
||||
php vendor/bin/phinx status
|
||||
|
||||
# Rollback last migration
|
||||
php vendor/bin/phinx rollback
|
||||
```
|
||||
|
||||
#### Migration Template
|
||||
```php
|
||||
<?php
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
class AddNewFeatureTable extends AbstractMigration
|
||||
{
|
||||
public function change()
|
||||
{
|
||||
// InnoDB for data integrity
|
||||
$table = $this->table('bb_new_feature', [
|
||||
'engine' => 'InnoDB',
|
||||
'collation' => 'utf8mb4_unicode_ci'
|
||||
]);
|
||||
|
||||
$table->addColumn('name', 'string', ['limit' => 100])
|
||||
->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP'])
|
||||
->addIndex('name')
|
||||
->create();
|
||||
}
|
||||
|
||||
// Optional: explicit up/down methods for complex operations
|
||||
public function up()
|
||||
{
|
||||
// Complex data migration logic
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Rollback logic
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Engine Guidelines
|
||||
```php
|
||||
// Use InnoDB for all tables for maximum reliability
|
||||
$table = $this->table('bb_user_posts', [
|
||||
'engine' => 'InnoDB',
|
||||
'collation' => 'utf8mb4_unicode_ci'
|
||||
]);
|
||||
|
||||
// All tracker tables also use InnoDB for data integrity
|
||||
$table = $this->table('bb_bt_peer_stats', [
|
||||
'engine' => 'InnoDB',
|
||||
'collation' => 'utf8mb4_unicode_ci'
|
||||
]);
|
||||
|
||||
// Buffer tables use InnoDB for consistency and reliability
|
||||
public function up() {
|
||||
$this->execute('DROP TABLE IF EXISTS buf_temp_data');
|
||||
// Recreate with new structure using InnoDB
|
||||
}
|
||||
```
|
||||
|
||||
### Admin Panel Integration
|
||||
|
||||
The admin panel includes a read-only migration status page at `/admin/admin_migrations.php`:
|
||||
|
||||
- **Current migration version**
|
||||
- **Applied migrations history**
|
||||
- **Pending migrations list**
|
||||
- **Database statistics**
|
||||
- **Clear instructions for CLI operations**
|
||||
|
||||
**Important**: The admin panel is **read-only** for security. All migration operations must be performed via CLI.
|
||||
|
||||
### Complex Migration Handling
|
||||
|
||||
For complex data transformations, create external scripts:
|
||||
|
||||
```php
|
||||
// migrations/YYYYMMDDHHMMSS_complex_data_migration.php
|
||||
class ComplexDataMigration extends AbstractMigration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->output->writeln('Running complex data migration...');
|
||||
|
||||
// Call external script for complex operations
|
||||
$result = shell_exec('php ' . __DIR__ . '/../scripts/migrate_torrent_data.php');
|
||||
$this->output->writeln($result);
|
||||
|
||||
if (strpos($result, 'ERROR') !== false) {
|
||||
throw new Exception('Complex migration failed');
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
#### Migration Development
|
||||
```bash
|
||||
# 1. Create migration
|
||||
php vendor/bin/phinx create MyFeature
|
||||
|
||||
# 2. Edit migration file
|
||||
# 3. Test locally
|
||||
php vendor/bin/phinx migrate -e development
|
||||
|
||||
# 4. Test rollback
|
||||
php vendor/bin/phinx rollback -e development
|
||||
|
||||
# 5. Commit to version control
|
||||
git add migrations/
|
||||
git commit -m "Add MyFeature migration"
|
||||
```
|
||||
|
||||
#### Production Deployment
|
||||
```bash
|
||||
# Always backup database first
|
||||
mysqldump tracker_db > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# Run migrations
|
||||
php vendor/bin/phinx migrate -e production
|
||||
|
||||
# Verify application functionality
|
||||
# Monitor error logs
|
||||
```
|
||||
|
||||
#### Team Collaboration
|
||||
- **Never modify existing migrations** that have been deployed
|
||||
- **Always create new migrations** for schema changes
|
||||
- **Test migrations on production-like data** before deployment
|
||||
- **Coordinate with team** before major schema changes
|
||||
|
||||
### Configuration
|
||||
|
||||
The migration system uses your existing `.env` configuration:
|
||||
|
||||
```php
|
||||
// phinx.php automatically reads from .env
|
||||
'production' => [
|
||||
'adapter' => 'mysql',
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'port' => (int) env('DB_PORT', 3306),
|
||||
'name' => env('DB_DATABASE'),
|
||||
'user' => env('DB_USERNAME'),
|
||||
'pass' => env('DB_PASSWORD', ''),
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci'
|
||||
]
|
||||
```
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
#### Common Issues
|
||||
```bash
|
||||
# Migration table doesn't exist
|
||||
php vendor/bin/phinx init # Re-run if needed
|
||||
|
||||
# Migration fails mid-way
|
||||
php vendor/bin/phinx rollback # Rollback to previous state
|
||||
|
||||
# Check what would be applied
|
||||
php vendor/bin/phinx status # See pending migrations
|
||||
```
|
||||
|
||||
#### Migration Recovery
|
||||
```bash
|
||||
# If migration fails, check status first
|
||||
php vendor/bin/phinx status
|
||||
|
||||
# Rollback to known good state
|
||||
php vendor/bin/phinx rollback -t 20250619000002
|
||||
|
||||
# Fix the migration code and re-run
|
||||
php vendor/bin/phinx migrate
|
||||
```
|
||||
|
||||
### Legacy SQL Import Removal
|
||||
|
||||
The legacy `install/sql/mysql.sql` approach has been replaced by migrations:
|
||||
|
||||
- ✅ **New installations**: Use migrations automatically
|
||||
- ✅ **Development workflow**: Create migrations for all schema changes
|
||||
- ✅ **Version control**: All schema changes tracked in Git
|
||||
- ❌ **Direct SQL imports**: No longer used for new installations
|
||||
|
||||
### Security Considerations
|
||||
|
||||
- **CLI-only execution**: Migrations run via command line only
|
||||
- **Read-only admin interface**: Web interface shows status only
|
||||
- **Backup requirements**: Always backup before production migrations
|
||||
- **Access control**: Restrict migration command access to authorized personnel
|
||||
|
||||
### Migration Setup for Existing Installations
|
||||
|
||||
If you have an **existing TorrentPier installation** and want to adopt the migration system, you need to mark the initial migrations as already applied to avoid recreating your existing database schema.
|
||||
|
||||
#### Detection: Do You Need This?
|
||||
|
||||
You need migration setup if:
|
||||
- ✅ You have an existing TorrentPier installation with data
|
||||
- ✅ Your database already has tables like `bb_users`, `bb_forums`, etc.
|
||||
- ✅ The admin migration panel shows "Migration System: ✗ Not Initialized"
|
||||
|
||||
#### Step-by-Step Setup Process
|
||||
|
||||
**1. Backup Your Database**
|
||||
```bash
|
||||
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
```
|
||||
|
||||
**2. Initialize Migration Table**
|
||||
```bash
|
||||
# This creates the bb_migrations table without running any migrations
|
||||
php vendor/bin/phinx init
|
||||
```
|
||||
|
||||
**3. Mark Initial Migrations as Applied (Fake Run)**
|
||||
```bash
|
||||
# Mark the schema migration as applied without running it
|
||||
php vendor/bin/phinx migrate --fake --target=20250619000001
|
||||
|
||||
# Mark the data seeding migration as applied without running it
|
||||
php vendor/bin/phinx migrate --fake --target=20250619000002
|
||||
```
|
||||
|
||||
**4. Verify Setup**
|
||||
```bash
|
||||
# Check migration status
|
||||
php vendor/bin/phinx status
|
||||
```
|
||||
|
||||
You should see both initial migrations marked as "up" (applied).
|
||||
|
||||
#### Alternative: Manual SQL Method
|
||||
|
||||
If you prefer manual control, you can directly insert migration records:
|
||||
|
||||
```sql
|
||||
-- Create migration table (if phinx init didn't work)
|
||||
CREATE TABLE IF NOT EXISTS bb_migrations (
|
||||
version bigint(20) NOT NULL,
|
||||
migration_name varchar(100) DEFAULT NULL,
|
||||
start_time timestamp NULL DEFAULT NULL,
|
||||
end_time timestamp NULL DEFAULT NULL,
|
||||
breakpoint tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (version)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Mark initial migrations as applied
|
||||
INSERT INTO bb_migrations (version, migration_name, start_time, end_time, breakpoint)
|
||||
VALUES
|
||||
('20250619000001', 'InitialSchema', NOW(), NOW(), 0),
|
||||
('20250619000002', 'SeedInitialData', NOW(), NOW(), 0);
|
||||
```
|
||||
|
||||
#### Post-Setup Workflow
|
||||
|
||||
After setup, your existing installation will work exactly like a fresh installation:
|
||||
|
||||
```bash
|
||||
# Create new migrations
|
||||
php vendor/bin/phinx create AddNewFeature
|
||||
|
||||
# Run new migrations
|
||||
php vendor/bin/phinx migrate
|
||||
|
||||
# Check status
|
||||
php vendor/bin/phinx status
|
||||
```
|
||||
|
||||
#### Troubleshooting
|
||||
|
||||
**Migration table already exists:**
|
||||
- Check if you've already set up migrations: `php vendor/bin/phinx status`
|
||||
- If it shows errors, you may need to recreate: `DROP TABLE bb_migrations;` then restart
|
||||
|
||||
**"Nothing to migrate" message:**
|
||||
- This is normal after fake runs - it means setup was successful
|
||||
- New migrations will appear when you create them
|
||||
|
||||
**Admin panel shows "Needs Setup":**
|
||||
- Follow the setup process above
|
||||
- Refresh the admin panel after completion
|
||||
|
||||
## 🗄️ Database Layer Migration
|
||||
|
||||
TorrentPier has completely replaced its legacy database layer (SqlDb/Dbs) with a modern implementation using Nette Database while maintaining 100% backward compatibility.
|
||||
|
@ -117,8 +470,10 @@ The following legacy files have been removed from the codebase:
|
|||
- `src/Legacy/Dbs.php` - Original database factory
|
||||
|
||||
These were completely replaced by:
|
||||
- `src/Database/DB.php` - Modern database class with Nette Database
|
||||
- `src/Database/DbFactory.php` - Modern factory with backward compatibility
|
||||
- `src/Database/Database.php` - Modern database class with Nette Database (renamed from `DB.php`)
|
||||
- `src/Database/DatabaseFactory.php` - Modern factory with backward compatibility (renamed from `DbFactory.php`)
|
||||
- `src/Database/DatabaseDebugger.php` - Dedicated debug functionality extracted from Database class
|
||||
- `src/Database/DebugSelection.php` - Debug-enabled wrapper for Nette Database Selection
|
||||
|
||||
### Verification
|
||||
|
||||
|
@ -295,6 +650,219 @@ if (isset(config()->bt_announce_url)) {
|
|||
}
|
||||
```
|
||||
|
||||
## 🌐 Language System Migration
|
||||
|
||||
TorrentPier has modernized its language system with a singleton pattern while maintaining 100% backward compatibility with existing global `$lang` variable.
|
||||
|
||||
### No Code Changes Required
|
||||
|
||||
**Important**: All existing `global $lang` calls continue to work exactly as before. This is an internal modernization that requires **zero code changes** in your application.
|
||||
|
||||
```php
|
||||
// ✅ All existing code continues to work unchanged
|
||||
global $lang;
|
||||
echo $lang['FORUM'];
|
||||
echo $lang['DATETIME']['TODAY'];
|
||||
```
|
||||
|
||||
### Key Improvements
|
||||
|
||||
#### Modern Foundation
|
||||
- **Singleton Pattern**: Efficient memory usage and consistent TorrentPier architecture
|
||||
- **Centralized Management**: Single point of control for language loading and switching
|
||||
- **Type Safety**: Better error detection and IDE support
|
||||
- **Dot Notation Support**: Access nested language arrays with simple syntax
|
||||
|
||||
#### Enhanced Functionality
|
||||
- **Automatic Fallback**: Source language fallback for missing translations
|
||||
- **Dynamic Loading**: Load additional language files for modules/extensions
|
||||
- **Runtime Modification**: Add or modify language strings at runtime
|
||||
- **Locale Management**: Automatic locale setting based on language selection
|
||||
|
||||
### Enhanced Capabilities
|
||||
|
||||
New code can leverage the modern Language singleton features with convenient shorthand functions:
|
||||
|
||||
```php
|
||||
// ✅ Convenient shorthand functions (recommended for frequent use)
|
||||
echo __('FORUM'); // Same as lang()->get('FORUM')
|
||||
echo __('DATETIME.TODAY'); // Dot notation for nested arrays
|
||||
_e('WELCOME_MESSAGE'); // Echo shorthand
|
||||
$message = __('CUSTOM_MESSAGE', 'Default'); // With default value
|
||||
|
||||
// ✅ Full singleton access (for advanced features)
|
||||
echo lang()->get('FORUM');
|
||||
echo lang()->get('DATETIME.TODAY'); // Dot notation for nested arrays
|
||||
|
||||
// ✅ Check if language key exists
|
||||
if (lang()->has('ADVANCED_FEATURE')) {
|
||||
echo __('ADVANCED_FEATURE');
|
||||
}
|
||||
|
||||
// ✅ Get current language information
|
||||
$currentLang = lang()->getCurrentLanguage();
|
||||
$langName = lang()->getLanguageName();
|
||||
$langLocale = lang()->getLanguageLocale();
|
||||
|
||||
// ✅ Load additional language files for modules
|
||||
lang()->loadAdditionalFile('custom_module', 'en');
|
||||
|
||||
// ✅ Runtime language modifications
|
||||
lang()->set('CUSTOM_KEY', 'Custom Value');
|
||||
lang()->set('NESTED.KEY', 'Nested Value');
|
||||
```
|
||||
|
||||
### Language Management
|
||||
|
||||
#### Available Languages
|
||||
```php
|
||||
// Get all available languages from configuration
|
||||
$availableLanguages = lang()->getAvailableLanguages();
|
||||
|
||||
// Get language display name
|
||||
$englishName = lang()->getLanguageName('en'); // Returns: "English"
|
||||
$currentName = lang()->getLanguageName(); // Current language name
|
||||
|
||||
// Get language locale for formatting
|
||||
$locale = lang()->getLanguageLocale('ru'); // Returns: "ru_RU.UTF-8"
|
||||
```
|
||||
|
||||
#### Dynamic Language Loading
|
||||
```php
|
||||
// Load additional language files (useful for modules/plugins)
|
||||
$success = lang()->loadAdditionalFile('torrent_management');
|
||||
if ($success) {
|
||||
echo lang()->get('TORRENT_UPLOADED');
|
||||
}
|
||||
|
||||
// Load from specific language
|
||||
lang()->loadAdditionalFile('admin_panel', 'de');
|
||||
```
|
||||
|
||||
#### Runtime Modifications
|
||||
```php
|
||||
// Set custom language strings
|
||||
lang()->set('SITE_WELCOME', 'Welcome to Our Tracker!');
|
||||
lang()->set('ERRORS.INVALID_TORRENT', 'Invalid torrent file');
|
||||
|
||||
// Modify existing strings
|
||||
lang()->set('LOGIN', 'Sign In');
|
||||
```
|
||||
|
||||
### Backward Compatibility Features
|
||||
|
||||
The singleton automatically maintains all global variables:
|
||||
|
||||
```php
|
||||
// Global variable is automatically updated by the singleton
|
||||
global $lang;
|
||||
|
||||
// When you call lang()->set(), global is updated
|
||||
lang()->set('CUSTOM', 'Value');
|
||||
echo $lang['CUSTOM']; // Outputs: "Value"
|
||||
|
||||
// When language is initialized, $lang is populated
|
||||
// $lang contains user language + source language fallbacks
|
||||
```
|
||||
|
||||
### Integration with User System
|
||||
|
||||
The Language singleton integrates seamlessly with the User system:
|
||||
|
||||
```php
|
||||
// User language is automatically detected and initialized
|
||||
// Based on user preferences, browser detection, or defaults
|
||||
|
||||
// In User->init_userprefs(), language is now initialized with:
|
||||
lang()->initializeLanguage($userLanguage);
|
||||
|
||||
// This replaces the old manual language file loading
|
||||
// while maintaining exact same functionality
|
||||
```
|
||||
|
||||
### Convenient Shorthand Functions
|
||||
|
||||
For frequent language access, TorrentPier provides convenient shorthand functions:
|
||||
|
||||
```php
|
||||
// ✅ __() - Get language string (most common)
|
||||
echo __('FORUM'); // Returns: "Forum"
|
||||
echo __('DATETIME.TODAY'); // Nested access: "Today"
|
||||
$msg = __('MISSING_KEY', 'Default'); // With default value
|
||||
|
||||
// ✅ _e() - Echo language string directly
|
||||
_e('WELCOME_MESSAGE'); // Same as: echo __('WELCOME_MESSAGE')
|
||||
_e('USER_ONLINE', 'Online'); // With default value
|
||||
|
||||
// ✅ Common usage patterns
|
||||
$title = __('PAGE_TITLE', config()->get('sitename'));
|
||||
$error = __('ERROR.INVALID_INPUT', 'Invalid input');
|
||||
```
|
||||
|
||||
These functions make language access much more convenient compared to the full `lang()->get()` syntax:
|
||||
|
||||
```php
|
||||
// Before (verbose)
|
||||
echo lang()->get('FORUM');
|
||||
echo lang()->get('DATETIME.TODAY');
|
||||
$msg = lang()->get('WELCOME', 'Welcome');
|
||||
|
||||
// After (concise)
|
||||
echo __('FORUM');
|
||||
echo __('DATETIME.TODAY');
|
||||
$msg = __('WELCOME', 'Welcome');
|
||||
```
|
||||
|
||||
### Magic Methods Support
|
||||
```php
|
||||
// Magic getter (same as lang()->get())
|
||||
$welcome = lang()->WELCOME;
|
||||
$today = lang()->{'DATETIME.TODAY'};
|
||||
|
||||
// Magic setter (same as lang()->set())
|
||||
lang()->CUSTOM_MESSAGE = 'Hello World';
|
||||
lang()->{'NESTED.KEY'} = 'Nested Value';
|
||||
|
||||
// Magic isset
|
||||
if (isset(lang()->ADVANCED_FEATURE)) {
|
||||
// Language key exists
|
||||
}
|
||||
```
|
||||
|
||||
### Performance Benefits
|
||||
|
||||
While maintaining compatibility, you get:
|
||||
- **Single Language Loading**: Languages loaded once and cached in singleton
|
||||
- **Memory Efficiency**: No duplicate language arrays across application
|
||||
- **Automatic Locale Setting**: Proper locale configuration for date/time formatting
|
||||
- **Fallback Chain**: Source language → Default language → Requested language
|
||||
|
||||
### Verification
|
||||
|
||||
To verify the migration is working correctly:
|
||||
|
||||
```php
|
||||
// ✅ Test convenient shorthand functions
|
||||
echo "Forum text: " . __('FORUM');
|
||||
echo "Today text: " . __('DATETIME.TODAY');
|
||||
_e('INFORMATION'); // Echo directly
|
||||
|
||||
// ✅ Test with default values
|
||||
echo "Custom: " . __('CUSTOM_KEY', 'Default Value');
|
||||
|
||||
// ✅ Test full singleton access
|
||||
echo "Current language: " . lang()->getCurrentLanguage();
|
||||
echo "Language name: " . lang()->getLanguageName();
|
||||
|
||||
// ✅ Test backward compatibility
|
||||
global $lang;
|
||||
echo "Global access: " . $lang['FORUM'];
|
||||
|
||||
// ✅ Verify globals are synchronized
|
||||
lang()->set('TEST_KEY', 'Test Value');
|
||||
echo "Sync test: " . $lang['TEST_KEY']; // Should output: "Test Value"
|
||||
```
|
||||
|
||||
## 🛡️ Censor System Migration
|
||||
|
||||
The word censoring system has been refactored to use a singleton pattern, similar to the Configuration system, providing better performance and consistency.
|
||||
|
@ -675,6 +1243,17 @@ $maxFileSize = min(
|
|||
$siteName = htmlspecialchars(config()->get('sitename', 'TorrentPier'));
|
||||
```
|
||||
|
||||
### Testing and Quality Assurance
|
||||
```bash
|
||||
# ✅ Run tests before deploying changes
|
||||
./vendor/bin/pest
|
||||
|
||||
# ✅ Validate test coverage for new components
|
||||
./vendor/bin/pest --coverage
|
||||
```
|
||||
|
||||
For comprehensive testing documentation and best practices, see [tests/README.md](tests/README.md).
|
||||
|
||||
---
|
||||
|
||||
**Important**: Always test the upgrade process in a staging environment before applying it to production. Keep backups of your database and files until you're confident the upgrade was successful.
|
||||
|
|
|
@ -13,7 +13,7 @@ if (!defined('BB_ROOT')) {
|
|||
}
|
||||
|
||||
// Check CLI mode
|
||||
if (php_sapi_name() !== 'cli') {
|
||||
if (PHP_SAPI != 'cli') {
|
||||
exit;
|
||||
}
|
||||
|
||||
|
@ -33,13 +33,17 @@ $items = [
|
|||
'.styleci.yml',
|
||||
'_release.php',
|
||||
'CHANGELOG.md',
|
||||
'CLAUDE.md',
|
||||
'cliff.toml',
|
||||
'CODE_OF_CONDUCT.md',
|
||||
'CONTRIBUTING.md',
|
||||
'crowdin.yml',
|
||||
'HISTORY.md',
|
||||
'phpunit.xml',
|
||||
'README.md',
|
||||
'SECURITY.md'
|
||||
'SECURITY.md',
|
||||
'tests',
|
||||
'UPGRADE_GUIDE.md'
|
||||
];
|
||||
|
||||
foreach ($items as $item) {
|
||||
|
|
|
@ -11,7 +11,7 @@ define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
|
|||
define('BB_PATH', BB_ROOT);
|
||||
|
||||
// Check CLI mode
|
||||
if (php_sapi_name() !== 'cli') {
|
||||
if (PHP_SAPI != 'cli') {
|
||||
die('Please run <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">php ' . basename(__FILE__) . '</code> in CLI mode');
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ if ($bytesWritten === 0) {
|
|||
out("\n- Config file has been updated!", 'success');
|
||||
|
||||
// Update CHANGELOG.md
|
||||
runProcess('npx git-cliff v2.4.5-rc.2.. --config cliff.toml --tag "' . $version . '" > CHANGELOG.md');
|
||||
runProcess('npx git-cliff v2.4.6-alpha.4.. --config cliff.toml --tag "' . $version . '" > CHANGELOG.md');
|
||||
|
||||
// Git add & commit
|
||||
runProcess('git add -A && git commit -m "release: ' . escapeshellarg($version) . (!empty($versionEmoji) ? (' ' . $versionEmoji) : '') . '"');
|
||||
|
|
79
admin/admin_migrations.php
Normal file
79
admin/admin_migrations.php
Normal file
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
/**
|
||||
* TorrentPier – Bull-powered BitTorrent tracker engine
|
||||
*
|
||||
* @copyright Copyright (c) 2005-2025 TorrentPier (https://torrentpier.com)
|
||||
* @link https://github.com/torrentpier/torrentpier for the canonical source repository
|
||||
* @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License
|
||||
*/
|
||||
|
||||
if (!empty($setmodules)) {
|
||||
if (IS_SUPER_ADMIN) {
|
||||
$module['GENERAL']['MIGRATIONS_STATUS'] = basename(__FILE__);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
require __DIR__ . '/pagestart.php';
|
||||
|
||||
if (!IS_SUPER_ADMIN) {
|
||||
bb_die(__('ONLY_FOR_SUPER_ADMIN'));
|
||||
}
|
||||
|
||||
use TorrentPier\Database\MigrationStatus;
|
||||
|
||||
// Initialize migration status
|
||||
$migrationStatus = new MigrationStatus();
|
||||
$status = $migrationStatus->getMigrationStatus();
|
||||
$schemaInfo = $migrationStatus->getSchemaInfo();
|
||||
|
||||
// Template variables
|
||||
$template->assign_vars([
|
||||
'PAGE_TITLE' => __('MIGRATIONS_STATUS'),
|
||||
'CURRENT_TIME' => date('Y-m-d H:i:s'),
|
||||
|
||||
// Migration status individual fields
|
||||
'MIGRATION_TABLE_EXISTS' => $status['table_exists'],
|
||||
'MIGRATION_CURRENT_VERSION' => $status['current_version'],
|
||||
'MIGRATION_APPLIED_COUNT' => count($status['applied_migrations']),
|
||||
'MIGRATION_PENDING_COUNT' => count($status['pending_migrations']),
|
||||
|
||||
// Setup status fields
|
||||
'SETUP_REQUIRES_SETUP' => $status['requires_setup'] ?? false,
|
||||
'SETUP_TYPE' => $status['setup_status']['type'] ?? __('UNKNOWN'),
|
||||
'SETUP_MESSAGE' => $status['setup_status']['message'] ?? '',
|
||||
'SETUP_ACTION_REQUIRED' => $status['setup_status']['action_required'] ?? false,
|
||||
'SETUP_INSTRUCTIONS' => $status['setup_status']['instructions'] ?? '',
|
||||
|
||||
// Schema info individual fields
|
||||
'SCHEMA_DATABASE_NAME' => $schemaInfo['database_name'],
|
||||
'SCHEMA_TABLE_COUNT' => $schemaInfo['table_count'],
|
||||
'SCHEMA_SIZE_MB' => $schemaInfo['size_mb'],
|
||||
]);
|
||||
|
||||
// Assign migration data for template
|
||||
if (!empty($status['applied_migrations'])) {
|
||||
foreach ($status['applied_migrations'] as $i => $migration) {
|
||||
$template->assign_block_vars('applied_migrations', [
|
||||
'VERSION' => $migration['version'],
|
||||
'NAME' => $migration['migration_name'] ?? __('UNKNOWN'),
|
||||
'START_TIME' => $migration['start_time'] ?? __('UNKNOWN'),
|
||||
'END_TIME' => $migration['end_time'] ?? __('UNKNOWN'),
|
||||
'ROW_CLASS' => ($i % 2) ? 'row1' : 'row2'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($status['pending_migrations'])) {
|
||||
foreach ($status['pending_migrations'] as $i => $migration) {
|
||||
$template->assign_block_vars('pending_migrations', [
|
||||
'VERSION' => $migration['version'],
|
||||
'NAME' => $migration['name'],
|
||||
'FILENAME' => $migration['filename'],
|
||||
'ROW_CLASS' => ($i % 2) ? 'row1' : 'row2'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// Output template using standard admin pattern
|
||||
print_page('admin_migrations.tpl', 'admin');
|
|
@ -90,7 +90,7 @@ if (isset($_GET['pane']) && $_GET['pane'] == 'left') {
|
|||
'NEW_VERSION_SIZE' => $update_data['latest_version_size'],
|
||||
'NEW_VERSION_DL_LINK' => $update_data['latest_version_dl_link'],
|
||||
'NEW_VERSION_LINK' => $update_data['latest_version_link'],
|
||||
'NEW_VERSION_MD5' => $update_data['latest_version_checksum']
|
||||
'NEW_VERSION_HASH' => $update_data['latest_version_checksum']
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,8 @@ echo '<html><body><head></head>';
|
|||
echo '<br /><br /><table border="1" cellspacing="0" cellpadding="6" align="center">';
|
||||
|
||||
foreach ($sql as $i => $query) {
|
||||
$row = mysqli_fetch_row(DB()->query($query))[0];
|
||||
$result = DB()->fetch_row($query);
|
||||
$row = array_values($result)[0]; // Get first column value
|
||||
$row = ($i == 2) ? humn_size($row) : $row;
|
||||
echo "<tr><td>{$lang['TR_STATS'][$i]}</td><td><b>$row</b></td>";
|
||||
}
|
||||
|
|
|
@ -115,7 +115,7 @@ $stopped = ($event === 'stopped');
|
|||
|
||||
// Check info_hash length
|
||||
if (strlen($info_hash) !== 20) {
|
||||
msg_die('Invalid info_hash: ' . (mb_check_encoding($info_hash, 'UTF8') ? $info_hash : $info_hash_hex));
|
||||
msg_die('Invalid info_hash: ' . (mb_check_encoding($info_hash, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -257,7 +257,7 @@ if ($lp_info) {
|
|||
|
||||
// Verify if torrent registered on tracker and user authorized
|
||||
if (empty($row['topic_id'])) {
|
||||
msg_die('Torrent not registered, info_hash = ' . (mb_check_encoding($info_hash, 'UTF8') ? $info_hash : $info_hash_hex));
|
||||
msg_die('Torrent not registered, info_hash = ' . (mb_check_encoding($info_hash, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
|
||||
}
|
||||
if (empty($row['user_id'])) {
|
||||
msg_die('Please LOG IN and RE-DOWNLOAD this torrent (user not found)');
|
||||
|
|
|
@ -32,7 +32,7 @@ $info_hash_hex = bin2hex($info_hash);
|
|||
|
||||
// Check info_hash length
|
||||
if (strlen($info_hash) !== 20) {
|
||||
msg_die('Invalid info_hash: ' . (mb_check_encoding($info_hash, 'UTF8') ? $info_hash : $info_hash_hex));
|
||||
msg_die('Invalid info_hash: ' . (mb_check_encoding($info_hash, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
|
||||
}
|
||||
|
||||
// Handle multiple hashes
|
||||
|
@ -97,7 +97,7 @@ if (!empty($info_hash_count)) {
|
|||
|
||||
// Verify if torrent registered on tracker
|
||||
if (empty($torrents)) {
|
||||
msg_die('Torrent not registered, info_hash = ' . (mb_check_encoding($info_hash, 'UTF8') ? $info_hash : $info_hash_hex));
|
||||
msg_die('Torrent not registered, info_hash = ' . (mb_check_encoding($info_hash, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
|
||||
}
|
||||
|
||||
die(\Arokettu\Bencode\Bencode::encode($torrents));
|
||||
|
|
44
common.php
44
common.php
|
@ -120,11 +120,45 @@ function dev(): \TorrentPier\Dev
|
|||
return \TorrentPier\Dev::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Language instance
|
||||
*
|
||||
* @return \TorrentPier\Language
|
||||
*/
|
||||
function lang(): \TorrentPier\Language
|
||||
{
|
||||
return \TorrentPier\Language::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a language string (shorthand for lang()->get())
|
||||
*
|
||||
* @param string $key Language key, supports dot notation (e.g., 'DATETIME.TODAY')
|
||||
* @param mixed $default Default value if key doesn't exist
|
||||
* @return mixed Language string or default value
|
||||
*/
|
||||
function __(string $key, mixed $default = null): mixed
|
||||
{
|
||||
return \TorrentPier\Language::getInstance()->get($key, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Echo a language string (shorthand for echo __())
|
||||
*
|
||||
* @param string $key Language key, supports dot notation
|
||||
* @param mixed $default Default value if key doesn't exist
|
||||
* @return void
|
||||
*/
|
||||
function _e(string $key, mixed $default = null): void
|
||||
{
|
||||
echo \TorrentPier\Language::getInstance()->get($key, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize debug
|
||||
*/
|
||||
define('APP_ENV', env('APP_ENV', 'production'));
|
||||
if (APP_ENV === 'local') {
|
||||
if (APP_ENV === 'development') {
|
||||
define('DBG_USER', true); // forced debug
|
||||
} else {
|
||||
define('DBG_USER', isset($_COOKIE[COOKIE_DBG]));
|
||||
|
@ -141,17 +175,17 @@ define('FULL_URL', $server_protocol . config()->get('server_name') . $server_por
|
|||
unset($server_protocol, $server_port);
|
||||
|
||||
// Initialize the new DB factory with database configuration
|
||||
TorrentPier\Database\DbFactory::init(config()->get('db'), config()->get('db_alias', []));
|
||||
TorrentPier\Database\DatabaseFactory::init(config()->get('db'), config()->get('db_alias', []));
|
||||
|
||||
/**
|
||||
* Get the Database instance
|
||||
*
|
||||
* @param string $db_alias
|
||||
* @return \TorrentPier\Database\DB
|
||||
* @return \TorrentPier\Database\Database
|
||||
*/
|
||||
function DB(string $db_alias = 'db'): \TorrentPier\Database\DB
|
||||
function DB(string $db_alias = 'db'): \TorrentPier\Database\Database
|
||||
{
|
||||
return TorrentPier\Database\DbFactory::getInstance($db_alias);
|
||||
return TorrentPier\Database\DatabaseFactory::getInstance($db_alias);
|
||||
}
|
||||
|
||||
// Initialize Unified Cache System
|
||||
|
|
|
@ -46,9 +46,9 @@
|
|||
"forum": "https://torrentpier.com"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"php": ">=8.2",
|
||||
"arokettu/bencode": "^4.1.0",
|
||||
"arokettu/monsterid": "dev-master",
|
||||
"arokettu/monsterid": "^4.1.0",
|
||||
"arokettu/random-polyfill": "1.0.2",
|
||||
"arokettu/torrent-file": "^5.2.1",
|
||||
"belomaxorka/captcha": "1.*",
|
||||
|
@ -56,43 +56,47 @@
|
|||
"claviska/simpleimage": "^4.0",
|
||||
"egulias/email-validator": "^4.0.1",
|
||||
"filp/whoops": "^2.15",
|
||||
"gemorroj/m3u-parser": "dev-master",
|
||||
"gemorroj/m3u-parser": "^6.0.1",
|
||||
"gigablah/sphinxphp": "2.0.8",
|
||||
"google/recaptcha": "^1.3",
|
||||
"jacklul/monolog-telegram": "^3.1",
|
||||
"josantonius/cookie": "^2.0",
|
||||
"league/flysystem": "^3.28",
|
||||
"longman/ip-tools": "1.2.1",
|
||||
"matthiasmullie/scrapbook": "^1.5.4",
|
||||
"monolog/monolog": "^3.4",
|
||||
"nette/caching": "^3.3",
|
||||
"nette/database": "^3.2",
|
||||
"php-curl-class/php-curl-class": "^12.0.0",
|
||||
"robmorgan/phinx": "^0.16.9",
|
||||
"samdark/sitemap": "2.4.1",
|
||||
"symfony/event-dispatcher": "^6.4",
|
||||
"symfony/filesystem": "^6.4",
|
||||
"symfony/finder": "^6.4",
|
||||
"symfony/mailer": "^6.4",
|
||||
"symfony/mime": "^6.4",
|
||||
"symfony/mailer": "^7.3",
|
||||
"symfony/polyfill": "v1.32.0",
|
||||
"vlucas/phpdotenv": "^5.5",
|
||||
"z4kn4fein/php-semver": "^v3.0.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/var-dumper": "^6.4"
|
||||
"mockery/mockery": "^1.6",
|
||||
"pestphp/pest": "^3.8",
|
||||
"symfony/var-dumper": "^7.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"TorrentPier\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true,
|
||||
"optimize-autoloader": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
|
|
4078
composer.lock
generated
4078
composer.lock
generated
File diff suppressed because it is too large
Load diff
15
filelist.php
15
filelist.php
|
@ -82,7 +82,7 @@ if (IS_GUEST && $torrent->isPrivate()) {
|
|||
|
||||
// Get torrent files
|
||||
$files = $torrent->$t_version_field()->$t_files_field();
|
||||
if ($meta_v1 && $meta_v2) {
|
||||
if ($meta_v2) {
|
||||
$files = new \RecursiveIteratorIterator($files); // Flatten the list
|
||||
}
|
||||
|
||||
|
@ -102,19 +102,6 @@ foreach ($files as $file) {
|
|||
$torrent_name = !empty($t_name = $torrent->getName()) ? str_short(htmlCHR($t_name), 200) : $lang['UNKNOWN'];
|
||||
$torrent_size = humn_size($row['size'], 2);
|
||||
|
||||
// Get announcers list
|
||||
$announcers_list = $torrent->getAnnounceList()->toArray();
|
||||
$announcers_count = 0;
|
||||
foreach ($announcers_list as $announcer) {
|
||||
$announcers_count++;
|
||||
$row_class = ($announcers_count % 2) ? 'row1' : 'row2';
|
||||
$template->assign_block_vars('announcers', [
|
||||
'ROW_NUMBER' => $announcers_count,
|
||||
'ROW_CLASS' => $row_class,
|
||||
'ANNOUNCER' => $announcer[0]
|
||||
]);
|
||||
}
|
||||
|
||||
// Output page
|
||||
$template->assign_vars([
|
||||
'PAGE_TITLE' => "$torrent_name (" . $torrent_size . ")",
|
||||
|
|
15
index.php
15
index.php
|
@ -68,13 +68,15 @@ $tracking_topics = get_tracks('topic');
|
|||
$tracking_forums = get_tracks('forum');
|
||||
|
||||
// Statistics
|
||||
if (!$stats = $datastore->get('stats')) {
|
||||
$stats = $datastore->get('stats');
|
||||
if ($stats === false) {
|
||||
$datastore->update('stats');
|
||||
$stats = $datastore->get('stats');
|
||||
}
|
||||
|
||||
// Forums data
|
||||
if (!$forums = $datastore->get('cat_forums')) {
|
||||
$forums = $datastore->get('cat_forums');
|
||||
if ($forums === false) {
|
||||
$datastore->update('cat_forums');
|
||||
$forums = $datastore->get('cat_forums');
|
||||
}
|
||||
|
@ -177,7 +179,8 @@ if (!$cat_forums = CACHE('bb_cache')->get($cache_name)) {
|
|||
|
||||
// Obtain list of moderators
|
||||
$moderators = [];
|
||||
if (!$mod = $datastore->get('moderators')) {
|
||||
$mod = $datastore->get('moderators');
|
||||
if ($mod === false) {
|
||||
$datastore->update('moderators');
|
||||
$mod = $datastore->get('moderators');
|
||||
}
|
||||
|
@ -325,7 +328,8 @@ if (config()->get('bt_show_dl_stat_on_index') && !IS_GUEST) {
|
|||
|
||||
// Latest news
|
||||
if (config()->get('show_latest_news')) {
|
||||
if (!$latest_news = $datastore->get('latest_news')) {
|
||||
$latest_news = $datastore->get('latest_news');
|
||||
if ($latest_news === false) {
|
||||
$datastore->update('latest_news');
|
||||
$latest_news = $datastore->get('latest_news');
|
||||
}
|
||||
|
@ -348,7 +352,8 @@ if (config()->get('show_latest_news')) {
|
|||
|
||||
// Network news
|
||||
if (config()->get('show_network_news')) {
|
||||
if (!$network_news = $datastore->get('network_news')) {
|
||||
$network_news = $datastore->get('network_news');
|
||||
if ($network_news === false) {
|
||||
$datastore->update('network_news');
|
||||
$network_news = $datastore->get('network_news');
|
||||
}
|
||||
|
|
50
install.php
50
install.php
|
@ -11,7 +11,7 @@ define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
|
|||
define('BB_PATH', BB_ROOT);
|
||||
|
||||
// Check CLI mode
|
||||
if (php_sapi_name() !== 'cli') {
|
||||
if (PHP_SAPI != 'cli') {
|
||||
die('Please run <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">php ' . basename(__FILE__) . '</code> in CLI mode');
|
||||
}
|
||||
|
||||
|
@ -24,8 +24,8 @@ require INC_DIR . '/functions_cli.php';
|
|||
/**
|
||||
* System requirements
|
||||
*/
|
||||
define('CHECK_REQUIREMENTS', [
|
||||
'php_min_version' => '8.1.0',
|
||||
const CHECK_REQUIREMENTS = [
|
||||
'php_min_version' => '8.2.0',
|
||||
'ext_list' => [
|
||||
'json',
|
||||
'curl',
|
||||
|
@ -39,7 +39,7 @@ define('CHECK_REQUIREMENTS', [
|
|||
'zip',
|
||||
'gd'
|
||||
],
|
||||
]);
|
||||
];
|
||||
|
||||
// Welcoming message
|
||||
out("--- TorrentPier Installer ---\n", 'info');
|
||||
|
@ -145,8 +145,7 @@ if (!is_file(BB_ROOT . 'vendor/autoload.php')) {
|
|||
// Installing dependencies
|
||||
if (is_file(BB_ROOT . 'composer.phar')) {
|
||||
out('- Installing dependencies...', 'info');
|
||||
runProcess('php ' . BB_ROOT . 'composer.phar update --no-install');
|
||||
sleep(3);
|
||||
|
||||
runProcess('php ' . BB_ROOT . 'composer.phar install --no-interaction --no-ansi');
|
||||
define('COMPOSER_COMPLETED', true);
|
||||
} else {
|
||||
|
@ -265,35 +264,26 @@ if (!empty($DB_HOST) && !empty($DB_DATABASE) && !empty($DB_USERNAME)) {
|
|||
}
|
||||
$conn->select_db($DB_DATABASE);
|
||||
|
||||
// Checking SQL dump
|
||||
$dumpPath = BB_ROOT . 'install/sql/mysql.sql';
|
||||
if (is_file($dumpPath) && is_readable($dumpPath)) {
|
||||
out('- SQL dump file found and readable!', 'success');
|
||||
} else {
|
||||
out('- SQL dump file not found / not readable', 'error');
|
||||
// Close database connection - migrations will handle their own connections
|
||||
$conn->close();
|
||||
|
||||
// Run database migrations
|
||||
out('- Setting up database using migrations...', 'info');
|
||||
|
||||
// Check if phinx.php exists
|
||||
if (!is_file(BB_ROOT . 'phinx.php')) {
|
||||
out('- Migration configuration (phinx.php) not found', 'error');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Inserting SQL dump
|
||||
out('- Start importing SQL dump...', 'info');
|
||||
$tempLine = '';
|
||||
foreach (file($dumpPath) as $line) {
|
||||
if (str_starts_with($line, '--') || $line == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$tempLine .= $line;
|
||||
if (str_ends_with(trim($line), ';')) {
|
||||
if (!$conn->query($tempLine)) {
|
||||
out("- Error performing query: $tempLine", 'error');
|
||||
exit;
|
||||
}
|
||||
$tempLine = '';
|
||||
}
|
||||
// Run migrations
|
||||
$migrationResult = runProcess('php vendor/bin/phinx migrate --configuration=' . BB_ROOT . 'phinx.php');
|
||||
if ($migrationResult !== 0) {
|
||||
out('- Database migration failed', 'error');
|
||||
exit;
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
out("- Importing SQL dump completed!\n", 'success');
|
||||
out("- Database setup completed!\n", 'success');
|
||||
|
||||
// Autofill host in robots.txt
|
||||
$robots_txt_file = BB_ROOT . 'robots.txt';
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,157 +0,0 @@
|
|||
// Changes from v2.2.0 to 2.4.5
|
||||
|
||||
// 2.2.0
|
||||
UPDATE `bb_config` SET `config_value` = 'http://whatismyipaddress.com/ip/' WHERE `config_name` = 'whois_info';
|
||||
DELETE FROM `bb_smilies` WHERE `code` = ':ad:';
|
||||
INSERT INTO `bb_smilies` (`code`, `smile_url`, `emoticon`) VALUES (':сd:', 'сd.gif', 'сd');
|
||||
DROP TABLE IF EXISTS `bb_ads`;
|
||||
DELETE FROM `bb_config` WHERE `config_name` = 'active_ads';
|
||||
ALTER TABLE `bb_log` DROP COLUMN `log_username`;
|
||||
DELETE FROM `bb_config` WHERE `config_name` = 'new_tpls';
|
||||
UPDATE `bb_posts` SET `poster_ip` = '0';
|
||||
ALTER TABLE `bb_posts` CHANGE `poster_ip` `poster_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_bt_tracker` SET `ip` = '0';
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `ip` `ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_users` SET `user_last_ip` = '0';
|
||||
ALTER TABLE `bb_users` CHANGE `user_last_ip` `user_last_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_users` SET `user_reg_ip` = '0';
|
||||
ALTER TABLE `bb_users` CHANGE `user_reg_ip` `user_reg_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_log` SET `log_user_ip` = '0';
|
||||
ALTER TABLE `bb_log` CHANGE `log_user_ip` `log_user_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_poll_users` SET `vote_ip` = '0';
|
||||
ALTER TABLE `bb_poll_users` CHANGE `vote_ip` `vote_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_privmsgs` SET `privmsgs_ip` = '0';
|
||||
ALTER TABLE `bb_privmsgs` CHANGE `privmsgs_ip` `privmsgs_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_sessions` SET `session_ip` = '0';
|
||||
ALTER TABLE `bb_sessions` CHANGE `session_ip` `session_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
UPDATE `bb_banlist` SET `ban_ip` = '0';
|
||||
ALTER TABLE `bb_banlist` CHANGE `ban_ip` `ban_ip` varchar(42) NOT NULL DEFAULT '0';
|
||||
|
||||
// 2.2.2
|
||||
ALTER TABLE `bb_ranks` DROP `rank_min`;
|
||||
ALTER TABLE `bb_ranks` DROP `rank_special`;
|
||||
|
||||
// 2.3.0
|
||||
ALTER TABLE `bb_cron` CHANGE `last_run` `last_run` DATETIME NOT NULL DEFAULT '1900-01-01 00:00:00';
|
||||
ALTER TABLE `bb_cron` CHANGE `next_run` `next_run` DATETIME NOT NULL DEFAULT '1900-01-01 00:00:00';
|
||||
ALTER TABLE `bb_users` CHANGE `user_birthday` `user_birthday` DATE NOT NULL DEFAULT '1900-01-01';
|
||||
ALTER TABLE `bb_posts` CHANGE `mc_comment` `mc_comment` TEXT NOT NULL DEFAULT '';
|
||||
|
||||
// 2.3.0.2
|
||||
ALTER TABLE `bb_users` CHANGE `user_sig` `user_sig` TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_groups` CHANGE `group_signature` `group_signature` TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_groups` CHANGE `group_description` `group_description` TEXT NOT NULL DEFAULT '';
|
||||
UPDATE `bb_smilies` SET `code` = ':cd:', `smile_url` = 'cd.gif', `emoticon` = 'cd' WHERE `code` = ':сd:' AND `smile_url` = 'сd.gif' AND `emoticon` = 'сd';
|
||||
|
||||
// 2.3.1
|
||||
ALTER TABLE `bb_search_results` CHANGE `search_id` `search_id` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_users` CHANGE `autologin_id` `autologin_id` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
DELETE FROM `bb_config` WHERE `config_name` = 'cron_enabled';
|
||||
|
||||
// 2.4.0-alpha1
|
||||
ALTER TABLE `bb_search_results` CHANGE `session_id` `session_id` CHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_sessions` CHANGE `session_id` `session_id` CHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_users` CHANGE `username` `username` VARCHAR(255) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_users` CHANGE `user_password` `user_password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_users` CHANGE `user_actkey` `user_actkey` VARCHAR(255) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_users` CHANGE `user_newpasswd` `user_newpasswd` VARCHAR(255) NOT NULL DEFAULT '';
|
||||
|
||||
// 2.4.0-alpha3
|
||||
INSERT INTO bb_config VALUES ('show_board_start_index', '1');
|
||||
|
||||
// 2.4.0-beta2
|
||||
INSERT INTO `bb_cron` (`cron_active`, `cron_title`, `cron_script`, `schedule`, `run_day`, `run_time`, `run_order`,
|
||||
`last_run`, `next_run`, `run_interval`, `log_enabled`, `log_file`, `log_sql_queries`,
|
||||
`disable_board`, `run_counter`) VALUES ('1', 'PM cleanup', 'clean_pm.php', 'daily', '', '05:00:00', '70', '', '', '', '1', '', '0', '1', '0');
|
||||
ALTER TABLE `bb_posts_text` CHANGE `post_text` `post_text` MEDIUMTEXT NOT NULL;
|
||||
ALTER TABLE `bb_privmsgs_text` CHANGE `privmsgs_text` `privmsgs_text` MEDIUMTEXT NOT NULL;
|
||||
ALTER TABLE `bb_bt_torrents` ADD COLUMN `info_hash_v2` VARBINARY(32) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `bb_bt_tracker_snap` ADD COLUMN `completed` INT(10) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `complete` `complete` TINYINT(1) NOT NULL DEFAULT '0';
|
||||
|
||||
// 2.4.0-beta3
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('1', 'webp', '');
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('2', '7z', '');
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('1', 'bmp', '');
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `speed_up` `speed_up` INT(11) UNSIGNED NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `speed_down` `speed_down` INT(11) UNSIGNED NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_tracker_snap` CHANGE `speed_up` `speed_up` INT(11) UNSIGNED NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_tracker_snap` CHANGE `speed_down` `speed_down` INT(11) UNSIGNED NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_torrents` ADD COLUMN `last_seeder_id` MEDIUMINT(8) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `buf_last_seeder` ADD COLUMN `user_id` MEDIUMINT(8) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `ip` `ip` VARCHAR(42) DEFAULT NULL;
|
||||
ALTER TABLE `bb_bt_tracker` CHANGE `ipv6` `ipv6` VARCHAR(42) DEFAULT NULL;
|
||||
ALTER TABLE `bb_bt_users` CHANGE `auth_key` `auth_key` CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
|
||||
|
||||
// 2.4.0-beta4
|
||||
DELETE FROM `bb_extensions` WHERE `extension` = 'tif';
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('4', 'tif', '');
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('4', 'tiff', '');
|
||||
DELETE FROM `bb_extensions` WHERE `extension` = 'tga';
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('4', 'tga', '');
|
||||
|
||||
// 2.4.0-rc1
|
||||
ALTER TABLE `bb_bt_tracker` DROP COLUMN `client`;
|
||||
DROP TABLE IF EXISTS `bb_thx`;
|
||||
CREATE TABLE IF NOT EXISTS `bb_thx`
|
||||
(
|
||||
`topic_id` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`user_id` MEDIUMINT(8) NOT NULL DEFAULT '0',
|
||||
`time` INT(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`topic_id`, `user_id`)
|
||||
)
|
||||
ENGINE = MyISAM
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
// 2.4.0
|
||||
UPDATE `bb_attachments_config` SET `config_value` = 'data/uploads' WHERE `config_name` = 'upload_dir';
|
||||
UPDATE `bb_attachments_config` SET `config_value` = '12000' WHERE `config_name` = 'img_min_thumb_filesize';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'attach_version';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'img_min_thumb_filesize';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'img_imagick';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'use_gd2';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'wma_autoplay';
|
||||
DELETE FROM `bb_attachments_config` WHERE config_name = 'flash_autoplay';
|
||||
DELETE FROM `bb_extensions` WHERE extension = 'tif';
|
||||
DELETE FROM `bb_extensions` WHERE extension = 'tiff';
|
||||
DELETE FROM `bb_extensions` WHERE extension = 'tga';
|
||||
DROP TABLE IF EXISTS `bb_banlist`;
|
||||
CREATE TABLE IF NOT EXISTS `bb_banlist`
|
||||
(
|
||||
`ban_id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`ban_userid` MEDIUMINT(8) NOT NULL DEFAULT '0',
|
||||
`ban_reason` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`ban_id`, `ban_userid`)
|
||||
)
|
||||
ENGINE = MyISAM
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci;
|
||||
|
||||
// 2.4.1
|
||||
UPDATE `bb_config` SET `config_value` = '' WHERE `config_name` = 'bt_announce_url';
|
||||
|
||||
// 2.4.2
|
||||
INSERT INTO `bb_cron` (`cron_active`, `cron_title`, `cron_script`, `schedule`, `run_day`, `run_time`, `run_order`,
|
||||
`last_run`, `next_run`, `run_interval`, `log_enabled`, `log_file`, `log_sql_queries`,
|
||||
`disable_board`, `run_counter`) VALUES ('1', 'Demo mode', 'demo_mode.php', 'daily', '', '05:00:00', '255', '', '', '', '1', 'demo_mode_cron', '1', '1', '0');
|
||||
|
||||
// 2.4.3
|
||||
UPDATE `bb_config` SET `config_value` = 'https://localhost/bt/announce.php' WHERE `config_name` = 'bt_announce_url';
|
||||
|
||||
// 2.4.4
|
||||
ALTER TABLE `bb_poll_users` CHANGE `user_id` `user_id` MEDIUMINT(8) NOT NULL;
|
||||
ALTER TABLE `bb_bt_users` ADD COLUMN `ratio_nulled` TINYINT(1) NOT NULL DEFAULT '0';
|
||||
DELETE FROM `bb_cron` WHERE `cron_script` = 'cache_gc.php';
|
||||
UPDATE `bb_cron` SET `run_interval` = '00:10:00' WHERE `cron_script` = 'tr_seed_bonus.php';
|
||||
|
||||
// 2.4.5-rc.1
|
||||
INSERT INTO `bb_extensions` (`group_id`, `extension`, `comment`) VALUES ('1', 'avif', ''), ('3', 'm3u', '');
|
||||
ALTER TABLE `bb_topics` ADD COLUMN `topic_allow_robots` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';
|
||||
|
||||
// 2.4.5-rc.2
|
||||
INSERT INTO `bb_config` VALUES ('magnet_links_for_guests', '0');
|
||||
INSERT INTO `bb_config` VALUES ('tp_instance_hash', '');
|
||||
|
||||
// 2.4.5-rc.5
|
||||
DELETE FROM `bb_config` WHERE `config_name` = 'tp_instance_hash';
|
|
@ -475,6 +475,8 @@ if ($tor_reged && $tor_info) {
|
|||
if ($infoByIP = infoByIP((!empty($peer['ipv6']) ? $peer['ipv6'] : $peer['ip']), $peer['port'])) {
|
||||
if (!empty($infoByIP['countryCode'])) {
|
||||
$peerCountry = render_flag($infoByIP['countryCode'], false);
|
||||
} else {
|
||||
$peerCountry = $lang['NOT_AVAILABLE'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,8 @@ $reserved_port = env('TP_PORT', 80);
|
|||
$bb_cfg = [];
|
||||
|
||||
// Version info
|
||||
$bb_cfg['tp_version'] = 'v2.6.0';
|
||||
$bb_cfg['tp_release_date'] = '18-06-2025';
|
||||
$bb_cfg['tp_version'] = 'v2.8.3';
|
||||
$bb_cfg['tp_release_date'] = '03-07-2025';
|
||||
$bb_cfg['tp_release_codename'] = 'Cattle';
|
||||
|
||||
// Increase version number after changing JS or CSS
|
||||
|
@ -204,6 +204,7 @@ $bb_cfg['lang'] = [
|
|||
'ar' => [
|
||||
'name' => 'Arabic',
|
||||
'locale' => 'ar_SA.UTF-8',
|
||||
'rtl' => true,
|
||||
],
|
||||
'hy' => [
|
||||
'name' => 'Armenian',
|
||||
|
@ -280,6 +281,7 @@ $bb_cfg['lang'] = [
|
|||
'he' => [
|
||||
'name' => 'Hebrew',
|
||||
'locale' => 'he_IL.UTF-8',
|
||||
'rtl' => true,
|
||||
],
|
||||
'hi' => [
|
||||
'name' => 'Hindi',
|
||||
|
|
|
@ -83,6 +83,9 @@ define('CRON_RUNNING', TRIGGERS_DIR . '/cron_running');
|
|||
define('GZIP_OUTPUT_ALLOWED', extension_loaded('zlib') && !ini_get('zlib.output_compression'));
|
||||
define('UA_GZIP_SUPPORTED', isset($_SERVER['HTTP_ACCEPT_ENCODING']) && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'));
|
||||
|
||||
// Migrations table
|
||||
define('BB_MIGRATIONS', 'bb_migrations');
|
||||
|
||||
// Tracker shared constants
|
||||
define('BB_BT_TORRENTS', 'bb_bt_torrents');
|
||||
define('BB_BT_TRACKER', 'bb_bt_tracker');
|
||||
|
|
|
@ -13,11 +13,10 @@ if (!defined('BB_ROOT')) {
|
|||
|
||||
define('IN_CRON', true);
|
||||
|
||||
// Set SESSION vars
|
||||
// Set SESSION vars (optimized for InnoDB)
|
||||
DB()->query("
|
||||
SET SESSION
|
||||
myisam_sort_buffer_size = 16*1024*1024
|
||||
, bulk_insert_buffer_size = 8*1024*1024
|
||||
bulk_insert_buffer_size = 8*1024*1024
|
||||
, join_buffer_size = 4*1024*1024
|
||||
, read_buffer_size = 4*1024*1024
|
||||
, read_rnd_buffer_size = 8*1024*1024
|
||||
|
@ -29,8 +28,7 @@ DB()->query("
|
|||
// Restore vars at shutdown
|
||||
DB()->add_shutdown_query("
|
||||
SET SESSION
|
||||
myisam_sort_buffer_size = DEFAULT
|
||||
, bulk_insert_buffer_size = DEFAULT
|
||||
bulk_insert_buffer_size = DEFAULT
|
||||
, join_buffer_size = DEFAULT
|
||||
, read_buffer_size = DEFAULT
|
||||
, read_rnd_buffer_size = DEFAULT
|
||||
|
|
|
@ -26,9 +26,9 @@ $posts_without_attach = $topics_without_attach = [];
|
|||
|
||||
DB()->query("
|
||||
CREATE TEMPORARY TABLE $tmp_attach_tbl (
|
||||
physical_filename VARCHAR(255) NOT NULL default '',
|
||||
physical_filename VARCHAR(255) NOT NULL default '' COLLATE utf8mb4_unicode_ci,
|
||||
KEY physical_filename (physical_filename(20))
|
||||
) ENGINE = MyISAM DEFAULT CHARSET = utf8
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
|
||||
");
|
||||
DB()->add_shutdown_query("DROP TEMPORARY TABLE IF EXISTS $tmp_attach_tbl");
|
||||
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* TorrentPier – Bull-powered BitTorrent tracker engine
|
||||
*
|
||||
* @copyright Copyright (c) 2005-2025 TorrentPier (https://torrentpier.com)
|
||||
* @link https://github.com/torrentpier/torrentpier for the canonical source repository
|
||||
* @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License
|
||||
*/
|
||||
|
||||
if (!defined('BB_ROOT')) {
|
||||
die(basename(__FILE__));
|
||||
}
|
||||
|
||||
set_time_limit(600);
|
||||
|
||||
global $cron_runtime_log;
|
||||
|
||||
$dump_path = BB_ROOT . 'install/sql/mysql.sql';
|
||||
|
||||
if (!IN_DEMO_MODE || !is_file($dump_path) || !is_readable($dump_path)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Clean cache & datastore
|
||||
$datastore->clean();
|
||||
foreach (config()->get('cache.engines') as $cache_name => $cache_val) {
|
||||
CACHE($cache_name)->rm();
|
||||
}
|
||||
|
||||
// Drop tables & Insert sql dump
|
||||
$temp_line = '';
|
||||
foreach (file($dump_path) as $line) {
|
||||
if (str_starts_with($line, '--') || $line == '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$temp_line .= $line;
|
||||
if (str_ends_with(trim($line), ';')) {
|
||||
if (!DB()->query($temp_line)) {
|
||||
$cron_runtime_log[] = date('Y-m-d H:i:s') . " -- Error performing query: " . $temp_line . " | " . DB()->sql_error()['message'];
|
||||
}
|
||||
$temp_line = '';
|
||||
}
|
||||
}
|
|
@ -16,9 +16,16 @@ if (!config()->get('tp_updater_settings.enabled')) {
|
|||
}
|
||||
|
||||
$data = [];
|
||||
$data[] = ['latest_check_timestamp' => TIMENOW];
|
||||
|
||||
$updaterDownloader = new \TorrentPier\Updater();
|
||||
$updaterDownloader = $updaterDownloader->getLastVersion(config()->get('tp_updater_settings.allow_pre_releases'));
|
||||
try {
|
||||
$updaterDownloader = new \TorrentPier\Updater();
|
||||
$updaterDownloader = $updaterDownloader->getLastVersion(config()->get('tp_updater_settings.allow_pre_releases'));
|
||||
} catch (Exception $exception) {
|
||||
bb_log('[Updater] Exception: ' . $exception->getMessage() . LOG_LF);
|
||||
$this->store('check_updates', $data);
|
||||
return;
|
||||
}
|
||||
|
||||
$getVersion = \TorrentPier\Helpers\VersionHelper::removerPrefix($updaterDownloader['tag_name']);
|
||||
$currentVersion = \TorrentPier\Helpers\VersionHelper::removerPrefix(config()->get('tp_version'));
|
||||
|
@ -26,6 +33,7 @@ $currentVersion = \TorrentPier\Helpers\VersionHelper::removerPrefix(config()->ge
|
|||
// Has update!
|
||||
if (\z4kn4fein\SemVer\Version::greaterThan($getVersion, $currentVersion)) {
|
||||
$latestBuildFileLink = $updaterDownloader['assets'][0]['browser_download_url'];
|
||||
$SHAFileHash = $updaterDownloader['assets'][0]['digest'] ?? '';
|
||||
|
||||
// Check updater file
|
||||
$updaterFile = readUpdaterFile();
|
||||
|
@ -39,10 +47,12 @@ if (\z4kn4fein\SemVer\Version::greaterThan($getVersion, $currentVersion)) {
|
|||
]), UPDATER_FILE, replace_content: true);
|
||||
}
|
||||
|
||||
// Get MD5 checksum
|
||||
// Get MD5 / sha256 checksum
|
||||
$buildFileChecksum = '';
|
||||
if (isset($latestBuildFileLink)) {
|
||||
$buildFileChecksum = strtoupper(md5_file($latestBuildFileLink));
|
||||
if (!empty($SHAFileHash)) {
|
||||
$buildFileChecksum = $SHAFileHash;
|
||||
} else {
|
||||
$buildFileChecksum = 'MD5: ' . strtoupper(md5_file($latestBuildFileLink));
|
||||
}
|
||||
|
||||
// Build data array
|
||||
|
@ -56,5 +66,4 @@ if (\z4kn4fein\SemVer\Version::greaterThan($getVersion, $currentVersion)) {
|
|||
];
|
||||
}
|
||||
|
||||
$data[] = ['latest_check_timestamp' => TIMENOW];
|
||||
$this->store('check_updates', $data);
|
||||
|
|
|
@ -1110,7 +1110,7 @@ function bb_date($gmepoch, $format = false, $friendly_date = true)
|
|||
$format = config()->get('default_dateformat');
|
||||
}
|
||||
if (empty($lang)) {
|
||||
require_once(config()->get('default_lang_dir') . 'main.php');
|
||||
lang()->initializeLanguage();
|
||||
}
|
||||
|
||||
if (!defined('IS_GUEST') || IS_GUEST) {
|
||||
|
@ -1347,9 +1347,9 @@ function bb_die($msg_text, $status_code = null)
|
|||
define('HAS_DIED', 1);
|
||||
define('DISABLE_CACHING_OUTPUT', true);
|
||||
|
||||
// If empty lang
|
||||
// If empty lang, initialize language singleton
|
||||
if (empty($lang)) {
|
||||
require(config()->get('default_lang_dir') . 'main.php');
|
||||
lang()->initializeLanguage();
|
||||
}
|
||||
|
||||
// If empty session
|
||||
|
@ -1437,6 +1437,9 @@ function redirect($url)
|
|||
|
||||
$redirect_url = $server_protocol . $server_name . $server_port . $script_name . preg_replace('#^\/?(.*?)\/?$#', '/\1', $url);
|
||||
|
||||
// Send no-cache headers to prevent browsers from caching redirects
|
||||
send_no_cache_headers();
|
||||
|
||||
// Behave as per HTTP/1.1 spec for others
|
||||
header('Location: ' . $redirect_url, response_code: 301);
|
||||
exit;
|
||||
|
@ -2193,19 +2196,26 @@ function infoByIP(string $ipAddress, int $port = 0): array
|
|||
}
|
||||
|
||||
$context = stream_context_create($contextOptions);
|
||||
$response = file_get_contents(config()->get('ip2country_settings.endpoint') . $ipAddress, context: $context);
|
||||
|
||||
if ($response !== false) {
|
||||
$json = json_decode($response, true);
|
||||
try {
|
||||
$response = file_get_contents(config()->get('ip2country_settings.endpoint') . $ipAddress, context: $context);
|
||||
|
||||
if (is_array($json) && !empty($json)) {
|
||||
$data = [
|
||||
'ipVersion' => $json['ipVersion'],
|
||||
'countryCode' => $json['countryCode'],
|
||||
'continent' => $json['continent'],
|
||||
'continentCode' => $json['continentCode']
|
||||
];
|
||||
if ($response !== false) {
|
||||
$json = json_decode($response, true);
|
||||
|
||||
if (is_array($json) && !empty($json)) {
|
||||
$data = [
|
||||
'ipVersion' => $json['ipVersion'],
|
||||
'countryCode' => $json['countryCode'],
|
||||
'continent' => $json['continent'],
|
||||
'continentCode' => $json['continentCode']
|
||||
];
|
||||
}
|
||||
} else {
|
||||
bb_log("[FreeIPAPI] Failed to get IP info for: $ipAddress" . LOG_LF);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
bb_log("[FreeIPAPI] " . $e->getMessage() . LOG_LF);
|
||||
}
|
||||
|
||||
if (empty($data)) {
|
||||
|
|
|
@ -86,9 +86,9 @@ function out(string $str, string $type = ''): void
|
|||
*
|
||||
* @param string $cmd
|
||||
* @param string|null $input
|
||||
* @return void
|
||||
* @return int
|
||||
*/
|
||||
function runProcess(string $cmd, ?string $input = null): void
|
||||
function runProcess(string $cmd, ?string $input = null): int
|
||||
{
|
||||
$descriptorSpec = [
|
||||
0 => ['pipe', 'r'],
|
||||
|
@ -100,7 +100,7 @@ function runProcess(string $cmd, ?string $input = null): void
|
|||
|
||||
if (!is_resource($process)) {
|
||||
out('- Could not start subprocess', 'error');
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Write input if provided
|
||||
|
@ -124,7 +124,7 @@ function runProcess(string $cmd, ?string $input = null): void
|
|||
fclose($pipes[1]);
|
||||
fclose($pipes[2]);
|
||||
|
||||
proc_close($process);
|
||||
return proc_close($process);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -43,7 +43,7 @@ if ($show_dbg_info) {
|
|||
|
||||
// Get database statistics from the new system
|
||||
try {
|
||||
$main_db = \TorrentPier\Database\DbFactory::getInstance('db');
|
||||
$main_db = \TorrentPier\Database\DatabaseFactory::getInstance('db');
|
||||
$sql_t = $main_db->sql_timetotal;
|
||||
$sql_time_txt = ($sql_t) ? sprintf('%.3f ' . $lang['SEC'] . ' (%d%%) · ', $sql_t, round($sql_t * 100 / $gen_time)) : '';
|
||||
$num_q = $main_db->num_queries;
|
||||
|
|
|
@ -64,11 +64,11 @@ if (!defined('BB_ROOT')) {
|
|||
|
||||
<?php
|
||||
if (!empty($_COOKIE['explain'])) {
|
||||
// Get all database server instances from the new DbFactory
|
||||
$server_names = \TorrentPier\Database\DbFactory::getServerNames();
|
||||
// Get all database server instances from the new DatabaseFactory
|
||||
$server_names = \TorrentPier\Database\DatabaseFactory::getServerNames();
|
||||
foreach ($server_names as $srv_name) {
|
||||
try {
|
||||
$db_obj = \TorrentPier\Database\DbFactory::getInstance($srv_name);
|
||||
$db_obj = \TorrentPier\Database\DatabaseFactory::getInstance($srv_name);
|
||||
if (!empty($db_obj->do_explain)) {
|
||||
$db_obj->explain('display');
|
||||
}
|
||||
|
|
|
@ -117,6 +117,7 @@ $template->assign_vars([
|
|||
'USER_HIDE_CAT' => (BB_SCRIPT == 'index'),
|
||||
|
||||
'USER_LANG' => $userdata['user_lang'],
|
||||
'USER_LANG_DIRECTION' => (isset($bb_cfg['lang'][$userdata['user_lang']]['rtl']) && $bb_cfg['lang'][$userdata['user_lang']]['rtl'] === true) ? 'rtl' : 'ltr',
|
||||
|
||||
'INCLUDE_BBCODE_JS' => !empty($page_cfg['include_bbcode_js']),
|
||||
'USER_OPTIONS_JS' => IS_GUEST ? '{}' : json_encode($user->opt_js, JSON_THROW_ON_ERROR),
|
||||
|
|
|
@ -142,6 +142,7 @@ switch ($mode) {
|
|||
if (!$pr_data = DB()->fetch_row($sql)) {
|
||||
bb_die($lang['PROFILE_NOT_FOUND']);
|
||||
}
|
||||
$pr_data['user_birthday'] = $pr_data['user_birthday']->format('Y-m-d');
|
||||
if (IN_DEMO_MODE && isset($_COOKIE['user_lang'])) {
|
||||
$pr_data['user_lang'] = $_COOKIE['user_lang'];
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ if (!$profiledata = get_userdata($_GET[POST_USERS_URL], profile_view: true)) {
|
|||
bb_die($lang['NO_USER_ID_SPECIFIED']);
|
||||
}
|
||||
|
||||
$profiledata['user_birthday'] = $profiledata['user_birthday']->format('Y-m-d');
|
||||
|
||||
if (!$ranks = $datastore->get('ranks')) {
|
||||
$datastore->update('ranks');
|
||||
$ranks = $datastore->get('ranks');
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Om hierdie sidebar uit te skakel, stel die veranderlike $bb_cfg['page']['show_sidebar2'] in lêer config.php in vals.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker instellings';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Stel sjablone vry';
|
||||
$lang['ACTIONS_LOG'] = 'Verslag oor aksie';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'aktiewe';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Indeks';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistiek';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
لتعطيل هذا الشريط الجانبي ، تعيين متغير $bb_cfg['page']['show_sidebar2'] في الملف config.php إلى false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'تعقب الإعدادات';
|
|||
$lang['RELEASE_TEMPLATES'] = 'الإفراج عن القوالب';
|
||||
$lang['ACTIONS_LOG'] = 'تقرير عن عمل';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'نشط';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'مؤشر المنتدى';
|
||||
$lang['FORUM_STATS'] = 'إحصائيات المنتدى';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Bu sidebar aradan bırakmak üçün, saxta fayl config.php dəyişən $bb_cfg['page']['show_sidebar2'] seçin.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1949,6 +1949,32 @@ $lang['TRACKER_CONFIG'] = 'Parametrlər tracker';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Şablonlar Buraxılması';
|
||||
$lang['ACTIONS_LOG'] = 'Hesabat hərəkətləri';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktiv';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'İndeksi Forum';
|
||||
$lang['FORUM_STATS'] = 'Statistika Forum';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>стыль/шаблоны/па змаўчанні/page_footer.тпл</li>
|
||||
</ul>
|
||||
<br />
|
||||
Каб адключыць гэтую бакавую панэль, ўсталюеце зменную $bb_cfg['page']['show_sidebar2'] ў файле config.php хлусня.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Налады трэкера';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Шаблоны Выпуску';
|
||||
$lang['ACTIONS_LOG'] = 'Справаздачу аб дзеяннях';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Актыўны';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Індэкс Форуму';
|
||||
$lang['FORUM_STATS'] = 'Статыстыка Форуму';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
За да деактивирате тази странична лента, задайте променливата $bb_cfg['page']['show_sidebar2'] във файла config.php на false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1948,6 +1948,32 @@ $lang['TRACKER_CONFIG'] = 'Настройки на тракера';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Шаблони На Издаване';
|
||||
$lang['ACTIONS_LOG'] = 'Доклад за дейността';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Активен';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Пощенски Код На Форума';
|
||||
$lang['FORUM_STATS'] = 'Статистиката На Форума';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Da biste onemogućili to sidebar, postavite varijablu $bb_cfg['page']['show_sidebar2'] u datoteci config.php na lažne.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tragač postavke';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Oslobodi Turskoj';
|
||||
$lang['ACTIONS_LOG'] = 'Izvještaj o akciju';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktivni';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Indeks';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistike';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Per desactivar aquesta barra lateral, estableixi la variable $bb_cfg['page']['show_sidebar2'] en config.php arxiu a fals.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Seguidor de configuració';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Llançament De Plantilles';
|
||||
$lang['ACTIONS_LOG'] = 'Informe sobre l\'acció';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Actiu';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Índex Del Fòrum';
|
||||
$lang['FORUM_STATS'] = 'Estadístiques Del Fòrum';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Pro vypnutí tohoto panelu, nastavte proměnnou $bb_cfg['page']['show_sidebar2'] v souboru config.php na hodnotu false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker nastavení';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Uvolnění Šablon';
|
||||
$lang['ACTIONS_LOG'] = 'Zpráva o akci';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktivní';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Index';
|
||||
$lang['FORUM_STATS'] = 'Fórum Statistiky';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
For at deaktivere denne sidebar, skal du indstille den variable $bb_cfg['page']['show_sidebar2'] i fil config.php til false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker-indstillinger';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Udgivelse Skabeloner';
|
||||
$lang['ACTIONS_LOG'] = 'Rapport om aktion';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktiv';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Indeks';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistik';
|
||||
|
|
|
@ -2,12 +2,9 @@
|
|||
|
||||
Please keep this email for your records. Your account information is as follows:
|
||||
|
||||
----------------------------
|
||||
Username: {USERNAME}
|
||||
---------------------------- Username: {USERNAME}
|
||||
Password: {PASSWORD}
|
||||
----------------------------
|
||||
|
||||
Please do not forget your password as it has been encrypted in our database, and we cannot retrieve it for you. Allerdings sollten Sie Ihr Passwort vergessen können Sie ein neues anfordern, die aktiviert werden, in der gleichen Weise wie das Konto.
|
||||
---------------------------- Please do not forget your password as it has been encrypted in our database, and we cannot retrieve it for you. Allerdings sollten Sie Ihr Passwort vergessen können Sie ein neues anfordern, die aktiviert werden, in der gleichen Weise wie das Konto.
|
||||
|
||||
Danke für die Registrierung.
|
||||
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Zum deaktivieren der Seitenleiste, legen Sie die variable $bb_cfg['page']['show_sidebar2'] in der Datei config.php auf false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker-Einstellungen';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Freigeben Von Vorlagen';
|
||||
$lang['ACTIONS_LOG'] = 'Bericht über die Aktion';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktiv';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum-Index';
|
||||
$lang['FORUM_STATS'] = 'Forum-Statistik';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Για να απενεργοποιήσετε αυτό το sidebar, ορίστε την μεταβλητή $bb_cfg['page']['show_sidebar2'] στο αρχείο config.php σε false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker ρυθμίσεις';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Απελευθέρωση Πρότυπα';
|
||||
$lang['ACTIONS_LOG'] = 'Έκθεση σχετικά με τη δράση';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Ενεργό';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Index';
|
||||
$lang['FORUM_STATS'] = 'Forum Στατιστικά';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
To disable this sidebar, set the variable $bb_cfg['page']['show_sidebar2'] in file config.php to false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker settings';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Release Templates';
|
||||
$lang['ACTIONS_LOG'] = 'Report on action';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Active';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Index';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistics';
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Congratulations!
|
||||
|
||||
Congratulations!
|
||||
|
||||
You have been added to the "{GROUP_NAME}" group on {SITENAME}.
|
||||
Esta acción fue realizada por el grupo de moderador o el administrador del sitio, póngase en contacto con ellos para obtener más información.
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Congratulations!
|
||||
|
||||
Congratulations!
|
||||
|
||||
Your request to join the "{GROUP_NAME}" group on {SITENAME} has been approved.
|
||||
Haga clic en el siguiente enlace para ver a su grupo de pertenencia.
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Hello, {USERNAME}!
|
||||
|
||||
Hello, {USERNAME}!
|
||||
|
||||
You have received a new private message to your account on "{SITENAME}" and you have requested that you be notified on this event. Usted puede ver su nuevo mensaje haciendo clic en el siguiente enlace: {U_INBOX}
|
||||
|
||||
Recuerde que usted siempre puede optar por no ser notificado de nuevos mensajes por el cambio de la configuración apropiada de su perfil.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Hello, {TO_USERNAME}!
|
||||
|
||||
Hello, {TO_USERNAME}!
|
||||
|
||||
The following is an email sent to you by {FROM_USERNAME} via your account on {SITENAME}. Si este mensaje es spam, contiene abusivo o de otros comentarios que considere ofensivos por favor póngase en contacto con el webmaster de la junta en la siguiente dirección: {BOARD_EMAIL}
|
||||
|
||||
Incluir este correo electrónico completa (en particular los encabezados). Por favor, tenga en cuenta que la dirección de respuesta a este correo electrónico ha sido configurado para que de {FROM_USERNAME}.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Hello, {USERNAME}!
|
||||
|
||||
Hello, {USERNAME}!
|
||||
|
||||
You are receiving this email because you are watching the topic, "{TOPIC_TITLE}" at {SITENAME}. Este tema ha recibido una respuesta desde su última visita. Puede utilizar el siguiente enlace para ver las respuestas, no más notificaciones se enviarán hasta que visite el tema.
|
||||
|
||||
{U_TOPIC}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Hello, {USERNAME}!
|
||||
|
||||
Hello, {USERNAME}!
|
||||
|
||||
Your account on "{SITENAME}" has been deactivated, most likely due to changes made to your profile. Con el fin de reactivar su cuenta, usted debe hacer clic en el enlace de abajo: {U_ACTIVATE}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
Hello, {USERNAME}!
|
||||
|
||||
Hello, {USERNAME}!
|
||||
|
||||
You are receiving this email because you have (or someone pretending to be you has) requested a new password be sent for your account on {SITENAME}. Si usted no hizo la solicitud a este correo electrónico, por favor ignore, si seguir recibiendo póngase en contacto con el administrador del foro.
|
||||
|
||||
Para utilizar la nueva contraseña que usted necesita para activarlo. Para ello haga clic en el enlace que se proporciona a continuación.
|
||||
|
|
|
@ -7,9 +7,7 @@ Nombre de usuario: {USERNAME}
|
|||
Contraseña: {PASSWORD}
|
||||
----------------------------
|
||||
|
||||
Su cuenta está inactiva. You cannot use it until you visit the following link:
|
||||
|
||||
{U_ACTIVATE}
|
||||
Su cuenta está inactiva. You cannot use it until you visit the following link: {U_ACTIVATE}
|
||||
|
||||
Please do not forget your password as it has been encrypted in our database, and we cannot retrieve it for you. Sin embargo, si usted olvida su contraseña, puede solicitar una nueva, que será activado en la misma forma como esta cuenta.
|
||||
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Para deshabilitar esta barra lateral, establezca la variable $bb_cfg['page']['show_sidebar2'] en el archivo config.php a false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Rastreador de configuración';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Liberar Las Plantillas';
|
||||
$lang['ACTIONS_LOG'] = 'Informe sobre la acción';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Activo';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Índice Del Foro';
|
||||
$lang['FORUM_STATS'] = 'Foro Estadísticas';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Keelata selle külgriba, set muutuja $bb_cfg['page']['show_sidebar2'] fail config.php väär.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker seaded';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Pressiteade Malle';
|
||||
$lang['ACTIONS_LOG'] = 'Aruande meetmete kohta,';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktiivne';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Foorum Indeks';
|
||||
$lang['FORUM_STATS'] = 'Foorumi Statistika';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Voit poistaa tämän sivupalkissa, asettaa muuttujan $bb_cfg['page']['show_sidebar2'] tiedoston config.php vääriä.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker asetukset';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Julkaisu Malleja';
|
||||
$lang['ACTIONS_LOG'] = 'Raportin toimintaa';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktiivinen';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum-Index';
|
||||
$lang['FORUM_STATS'] = 'Foorumin Tilastot';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Pour désactiver cette barre latérale, définissez la variable $bb_cfg['page']['show_sidebar2'] dans le fichier config.php à false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Des paramètres d\'un suivi';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Communiqué De Modèles';
|
||||
$lang['ACTIONS_LOG'] = 'Rapport sur l\'action';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Active';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Forum Index';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistiques';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
כדי להשבית את סרגל הצד, להגדיר את משתנה $bb_cfg['page']['show_sidebar2'] בקובץ config.php ל-false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'גשש הגדרות';
|
|||
$lang['RELEASE_TEMPLATES'] = 'שחרור תבניות';
|
||||
$lang['ACTIONS_LOG'] = 'דו " ח על פעולה';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'פעיל';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'פורום מדד';
|
||||
$lang['FORUM_STATS'] = 'פורום סטטיסטיקה';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
इस साइडबार को अक्षम करने के लिए, फ़ाइल config.php में $bb_cfg['page']['show_sidebar2'] चर को सेट करें।
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'ट्रैकर सेटिंग्स';
|
|||
$lang['RELEASE_TEMPLATES'] = 'रिलीज़ टेम्पलेट्स';
|
||||
$lang['ACTIONS_LOG'] = 'कार्रवाई पर रिपोर्ट';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'सक्रिय';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'फोरम सूचकांक';
|
||||
$lang['FORUM_STATS'] = 'फोरम सांख्यिकी';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Da biste isključili bočnu traku, postavite varijablu $bb_cfg['page']['show_sidebar2'] u datoteku config.php vrijednost false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1949,6 +1949,32 @@ $lang['TRACKER_CONFIG'] = 'Postavke tracker';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Predlošci Izdavanja';
|
||||
$lang['ACTIONS_LOG'] = 'Izvješće o aktivnostima';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktivan';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Indeks Foruma';
|
||||
$lang['FORUM_STATS'] = 'Statistika Foruma';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Ha le szeretné tiltani ezt az oldalsáv, állítsa be a változó $bb_cfg['page']['show_sidebar2'] a fájl config.php hamis.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker beállítások';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Kiadás Sablonok';
|
||||
$lang['ACTIONS_LOG'] = 'Jelentés akció';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktív';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Index Fórum';
|
||||
$lang['FORUM_STATS'] = 'Fórum Statisztikák';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Անջատել այս Սահմանադրություն, սահմանել է փոփոխական $bb_cfg['page']['show_sidebar2'] ֆայլի config.php ֆայլում կեղծ է.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1949,6 +1949,32 @@ $lang['TRACKER_CONFIG'] = 'Կառավարում ճանապարհները';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Կաղապարներ Թողարկման';
|
||||
$lang['ACTIONS_LOG'] = 'Հաշվետվություն գործողությունների մասին';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Ակտիվ';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Ինդեքսը Համաժողովի';
|
||||
$lang['FORUM_STATS'] = 'Ֆորումի Վիճակագրությունը';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Untuk menonaktifkan sidebar ini, mengatur variabel $bb_cfg['page']['show_sidebar2'] dalam file config.php untuk palsu.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker pengaturan';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Rilis Template';
|
||||
$lang['ACTIONS_LOG'] = 'Laporan tentang tindakan';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Aktif';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Indeks Forum';
|
||||
$lang['FORUM_STATS'] = 'Forum Statistik';
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
<li>style/templates/default/page_footer.tpl</li>
|
||||
</ul>
|
||||
<br />
|
||||
Per disattivare la barra laterale, impostare la variabile $bb_cfg['page']['show_sidebar2'] nel file config.php su false.
|
||||
To disable this sidebar, set the variable page.show_sidebar2 in file config.php to false.
|
||||
</div>
|
||||
|
|
|
@ -1946,6 +1946,32 @@ $lang['TRACKER_CONFIG'] = 'Tracker impostazioni';
|
|||
$lang['RELEASE_TEMPLATES'] = 'Rilasciare Modelli';
|
||||
$lang['ACTIONS_LOG'] = 'Relazione sull\'azione';
|
||||
|
||||
// Migrations
|
||||
$lang['MIGRATIONS_STATUS'] = 'Database Migration Status';
|
||||
$lang['MIGRATIONS_DATABASE_NAME'] = 'Database Name';
|
||||
$lang['MIGRATIONS_DATABASE_TOTAL'] = 'Total Tables';
|
||||
$lang['MIGRATIONS_DATABASE_SIZE'] = 'Database Size';
|
||||
$lang['MIGRATIONS_DATABASE_INFO'] = 'Database Information';
|
||||
$lang['MIGRATIONS_SYSTEM'] = 'Migration System';
|
||||
$lang['MIGRATIONS_NEEDS_SETUP'] = 'Needs Setup';
|
||||
$lang['MIGRATIONS_ACTIVE'] = 'Attivo';
|
||||
$lang['MIGRATIONS_NOT_INITIALIZED'] = 'Not Initialized';
|
||||
$lang['MIGRATIONS_UP_TO_DATE'] = 'All up to date';
|
||||
$lang['MIGRATIONS_PENDING_COUNT'] = 'pending';
|
||||
$lang['MIGRATIONS_APPLIED'] = 'Applied Migrations';
|
||||
$lang['MIGRATIONS_PENDING'] = 'Pending Migrations';
|
||||
$lang['MIGRATIONS_VERSION'] = 'Version';
|
||||
$lang['MIGRATIONS_NAME'] = 'Migration Name';
|
||||
$lang['MIGRATIONS_FILE'] = 'Migration File';
|
||||
$lang['MIGRATIONS_APPLIED_AT'] = 'Applied At';
|
||||
$lang['MIGRATIONS_COMPLETED_AT'] = 'Completed At';
|
||||
$lang['MIGRATIONS_CURRENT_VERSION'] = 'Current Version';
|
||||
$lang['MIGRATIONS_NOT_APPLIED'] = 'No migrations applied';
|
||||
$lang['MIGRATIONS_INSTRUCTIONS'] = 'Instructions';
|
||||
$lang['MIGRATIONS_SETUP_STATUS'] = 'Setup Status';
|
||||
$lang['MIGRATIONS_SETUP_GUIDE'] = 'See setup guide below';
|
||||
$lang['MIGRATIONS_ACTION_REQUIRED'] = 'Action Required';
|
||||
|
||||
// Index
|
||||
$lang['MAIN_INDEX'] = 'Indice Del Forum';
|
||||
$lang['FORUM_STATS'] = 'Le Statistiche Del Forum';
|
||||
|
|
|
@ -13,3 +13,8 @@
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
{MESSAGE}
|
||||
|
||||
メッセージ送信者:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
{MESSAGE}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
Congratulations!
|
||||
|
||||
You have been added to the "{GROUP_NAME}" group on {SITENAME}.
|
||||
このアクションは、グループモデレータまたはサイト管理者によって行われました。詳細については、それらに連絡してください。
|
||||
このアクションは、グループモデレータまたはサイト管理者によって行われました。
|
||||
|
||||
詳細については、それらに連絡してください。
|
||||
|
||||
ここであなたのグループ情報を表示できます:
|
||||
{U_GROUP}
|
||||
|
|
|
@ -6,3 +6,7 @@ Your request to join the "{GROUP_NAME}" group on {SITENAME} has been approved.
|
|||
{U_GROUP}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
||||
{U_GROUP}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
|
|
@ -9,3 +9,5 @@ You have received a new private message to your account on "{SITENAME}" and you
|
|||
{EMAIL_SIG}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
||||
{EMAIL_SIG}
|
||||
|
|
|
@ -15,3 +15,8 @@ The following is an email sent to you by {FROM_USERNAME} via your account on {SI
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
{MESSAGE}
|
||||
|
||||
次のメッセージを送信しました
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
{MESSAGE}
|
||||
|
|
|
@ -4,6 +4,8 @@ You are receiving this email because you have (or someone pretending to be you h
|
|||
|
||||
新しいパスワードを使用するには、それを有効にする必要があります。 これを行うには、下記のリンクをクリックしてください。
|
||||
|
||||
これを行うには、下記のリンクをクリックしてください。
|
||||
|
||||
{U_ACTIVATE}
|
||||
|
||||
If successful you will be able to login using the following password:
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue