Compare commits

...

3521 commits

Author SHA1 Message Date
Roman Kelesidis
144aa0558d
chore: Removed deploy pipeline (#2047)
Some checks failed
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
PHPMD / Run PHPMD scanning (push) Has been cancelled
2025-07-16 10:15:09 +03:00
Roman Kelesidis
6e7e3dd9ef
fix: handle Nette DateTime objects in birthday validation (#2032)
Some checks failed
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
PHPMD / Run PHPMD scanning (push) Has been cancelled
* fix: handle Nette DateTime objects in birthday validation

* Update register.php

* Update User.php
2025-07-03 23:07:09 +02:00
Roman Kelesidis
423fb65dbf
release: v2.8.3
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-07-03 10:51:21 +03:00
Roman Kelesidis
51f2c70d81
feat(updater): Added exceptions logging (#2026)
* feat(updater): Added exceptions logging
* refactor(updater): Use `sha256` hash if available
2025-07-03 10:48:25 +03:00
Roman Kelesidis
fd46d3d04a
feat(lang): Added RTL languages support (#2031) 2025-07-03 10:43:02 +03:00
Roman Kelesidis
d4d82101dd
refactor(TorrentFileList): Reduce duplication in root directory unset logic (#2027) 2025-07-03 10:40:56 +03:00
Roman Kelesidis
9e3f3588f2
release: v2.8.2
Some checks failed
PHPMD / Run PHPMD scanning (push) Has been cancelled
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
2025-06-30 10:49:42 +03:00
Roman Kelesidis
915e1d817c
fix(TorrentFileList): Avoid array_merge reindexing for numeric folder names (#2014)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
Co-authored-by: zxc <17812947+metalwarrior88@users.noreply.github.com>
2025-06-29 15:03:56 +03:00
Roman Kelesidis
7ac335974b
refactor: Use DEFAULT_CHARSET constant instead of hardcoded string (#2011)
Some checks failed
PHPMD / Run PHPMD scanning (push) Has been cancelled
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
2025-06-26 13:32:45 +03:00
Roman Kelesidis
c2e3a13a04
release: v2.8.1 2025-06-24 13:00:37 +03:00
Roman Kelesidis
f1d6e74e5d
fix(ip-api): Add error handling and logging for freeipapi.com requests (#2006) 2025-06-24 12:55:41 +03:00
Roman Kelesidis
7f4cc9d3b9
fix(filelist): Undefined property: FileTree::$length when v2 torrent only (#2004) 2025-06-23 21:49:53 +03:00
Roman Kelesidis
a0fc2a9da9
release: v2.8.0
Some checks failed
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
PHPMD / Run PHPMD scanning (push) Has been cancelled
2025-06-21 22:16:28 +03:00
Yury Pikhtarev
c6076c2c27
fix(template): handle L_ variables in template vars when not found in lang vars (#1998)
Template variables starting with L_ (like L_MY_PROFILE) are now properly
resolved when they exist in template variables but not in language variables.
Previously, these would fall back to showing the literal variable name.

The L_ variable regex now checks both $L (language) and $V (template) arrays
before falling back to the literal string, maintaining backward compatibility
while fixing composite language variables set via template assignment.
2025-06-21 22:13:01 +03:00
Roman Kelesidis
714dd6255e
release: v2.7.0 🐈‍⬛
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-06-21 10:52:01 +03:00
Roman Kelesidis
9b322c7093
chore: Update minimum PHP requirement to 8.2 (#1987)
* chore: Update minimum PHP requirement to 8.2

* chore: Update PHP version references to 8.2 in documentation and templates

* chore: Update issue template labels to array format for consistency

* refactor: Changed `local` environment name to `development`

* chore(composer.json): Changed version of `gemorroj/m3u-parser` package

* chore(composer): Removed `matthiasmullie/scrapbook` package

* fix(template): Update variable fallback behavior to return empty string for missing variables

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
2025-06-21 11:45:56 +04:00
Roman Kelesidis
423424e947
chore: Removed useless composer update from workflows & installer (#1986) 2025-06-21 09:25:43 +03:00
belomaxorka
27b5815aee changelog: Update CHANGELOG.md 📖 2025-06-21 01:39:56 +00:00
Yury Pikhtarev
bccbad0c57
New Crowdin updates (#1983)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations admin_send_email.html (Japanese)

* New translations admin_send_email.html (Chinese Traditional)

* New translations admin_send_email.html (Portuguese, Brazilian)

* New translations group_added.html (Spanish)

* New translations group_added.html (Japanese)

* New translations group_added.html (Chinese Traditional)

* New translations group_added.html (Thai)

* New translations group_approved.html (Spanish)

* New translations group_approved.html (Japanese)

* New translations group_approved.html (Chinese Traditional)

* New translations group_approved.html (Thai)

* New translations group_request.html (Chinese Traditional)

* New translations privmsg_notify.html (Spanish)

* New translations privmsg_notify.html (Japanese)

* New translations privmsg_notify.html (Chinese Traditional)

* New translations profile_send_email.html (Spanish)

* New translations profile_send_email.html (Japanese)

* New translations profile_send_email.html (Thai)

* New translations topic_notify.html (Spanish)

* New translations topic_notify.html (Chinese Traditional)

* New translations topic_notify.html (Thai)

* New translations user_activate.html (Spanish)

* New translations user_activate.html (Chinese Traditional)

* New translations user_activate_passwd.html (Spanish)

* New translations user_activate_passwd.html (Japanese)

* New translations user_activate_passwd.html (Chinese Traditional)

* New translations user_activate_passwd.html (Portuguese, Brazilian)

* New translations user_activate_passwd.html (Thai)

* New translations user_welcome.html (German)

* New translations user_welcome.html (Chinese Traditional)

* New translations user_welcome.html (Portuguese, Brazilian)

* New translations user_welcome.html (Thai)

* New translations user_welcome_inactive.html (Spanish)

* New translations user_welcome_inactive.html (Chinese Traditional)

* New translations user_welcome_inactive.html (Portuguese, Brazilian)

* New translations user_welcome_inactive.html (Thai)

* New translations copyright_holders.html (Chinese Traditional)

* New translations copyright_holders.html (Thai)

* New translations sidebar2.html (Romanian)

* New translations sidebar2.html (French)

* New translations sidebar2.html (Spanish)

* New translations sidebar2.html (Afrikaans)

* New translations sidebar2.html (Arabic)

* New translations sidebar2.html (Belarusian)

* New translations sidebar2.html (Bulgarian)

* New translations sidebar2.html (Catalan)

* New translations sidebar2.html (Czech)

* New translations sidebar2.html (Danish)

* New translations sidebar2.html (German)

* New translations sidebar2.html (Greek)

* New translations sidebar2.html (Finnish)

* New translations sidebar2.html (Hebrew)

* New translations sidebar2.html (Hungarian)

* New translations sidebar2.html (Armenian)

* New translations sidebar2.html (Italian)

* New translations sidebar2.html (Japanese)

* New translations sidebar2.html (Georgian)

* New translations sidebar2.html (Korean)

* New translations sidebar2.html (Lithuanian)

* New translations sidebar2.html (Dutch)

* New translations sidebar2.html (Norwegian)

* New translations sidebar2.html (Polish)

* New translations sidebar2.html (Russian)

* New translations sidebar2.html (Slovak)

* New translations sidebar2.html (Slovenian)

* New translations sidebar2.html (Albanian)

* New translations sidebar2.html (Serbian (Cyrillic))

* New translations sidebar2.html (Swedish)

* New translations sidebar2.html (Turkish)

* New translations sidebar2.html (Ukrainian)

* New translations sidebar2.html (Chinese Traditional)

* New translations sidebar2.html (English)

* New translations sidebar2.html (Vietnamese)

* New translations sidebar2.html (Portuguese, Brazilian)

* New translations sidebar2.html (Indonesian)

* New translations sidebar2.html (Thai)

* New translations sidebar2.html (Croatian)

* New translations sidebar2.html (Kazakh)

* New translations sidebar2.html (Estonian)

* New translations sidebar2.html (Latvian)

* New translations sidebar2.html (Azerbaijani)

* New translations sidebar2.html (Hindi)

* New translations sidebar2.html (Bosnian)

* New translations sidebar2.html (Uzbek)

* New translations sidebar2.html (Tajik)

* New translations user_agreement.html (Thai)

* New translations main.php (Russian)

* New translations sidebar2.html (Russian)

* New translations main.php (Russian)

* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2025-06-21 03:52:59 +04:00
Yury Pikhtarev
728116d6dc
refactor(stats): improve database row fetching in tr_stats.php (#1985)
- Updated the method of fetching rows from the database to use a more streamlined approach with `DB()->fetch_row()`.
- Extracted the first column value directly from the result array for clarity and maintainability.
2025-06-21 03:34:11 +04:00
Yury Pikhtarev
a33574c28f
feat(language): add new language variable for migration file and enhance template fallback logic (#1984)
* feat(language): add new language variable for migration file and enhance template fallback logic

- Introduced a new language variable 'MIGRATIONS_FILE' to improve migration management clarity.
- Updated template handling to provide graceful fallbacks for missing language and regular variables, ensuring better user experience and debugging capabilities.
- Added comprehensive unit tests to validate the new fallback logic and ensure existing functionality remains intact.

* refactor(tests): remove debugging test for compiled template output

- Removed the test case that debugged compiled output for troubleshooting in the TemplateGracefulFallbackTest.
- This change streamlines the test suite by focusing on essential functionality, specifically the handling of missing language variables.

* feat(tests): introduce executeTemplate function for streamlined template execution

- Added a new helper function `executeTemplate` to encapsulate the logic for executing compiled templates, improving code readability and reducing duplication in unit tests.
- Updated existing tests in `TemplateGracefulFallbackTest.php` to utilize the new function, ensuring consistent handling of template execution and variable scope.
- Enhanced test coverage by adding edge case scenarios for variable handling, including special characters, empty values, and nested braces.
2025-06-21 03:09:59 +04:00
Roman Kelesidis
e9a9e09576
chore: Added --no-dev composer flag for some workflows (#1982) 2025-06-20 22:39:17 +03:00
Roman Kelesidis
e8cba5dd3f
chore: Added --no-dev composer flag for some workflows (#1981) 2025-06-20 22:27:34 +03:00
Yury Pikhtarev
4f9cc9fe0f
fix(database): update affected rows tracking in Database class (#1980)
* fix(database): update affected rows tracking in Database class

- Enhanced the logic for tracking affected rows in the Database class to accurately reflect the number of rows modified by INSERT, UPDATE, and DELETE operations using the getRowCount() method.
- Added a new unit test suite for the affected_rows method, ensuring comprehensive coverage for various scenarios including tracking of affected rows and validation of the last_affected_rows property.

This update improves the reliability of the Database class's affected rows reporting, facilitating better data handling and debugging.

* feat(install): add developer prompt for dependency installation

- Introduced a prompt during the installation process to ask users if they require development tools and dependencies.
- Adjusted the dependency installation command to conditionally include or exclude development dependencies based on user input.
- Added warnings for users with PHP versions below 8.2 when opting for development dependencies.

This enhancement improves the installation experience by allowing developers to easily set up their environment while ensuring compatibility checks are in place.

* docs(README): clarify PHP version requirements and installation instructions

- Updated PHP version requirements to specify that PHP 8.2+ is required for development dependencies.
- Enhanced installation instructions to differentiate between production and development setups, including commands for Composer installation.
- Added a note regarding the necessity of PHP 8.2+ for running tests, improving clarity for developers.

These changes aim to provide clearer guidance for users setting up their development environments.
2025-06-20 23:06:36 +04:00
Yury Pikhtarev
cc9d412522
feat(test): add comprehensive testing infrastructure with Pest PHP (#1979)
* feat(tests): integrate Pest testing framework and set up initial test structure

- Added Pest as a development dependency for enhanced testing capabilities.
- Created a PHPUnit configuration file (`phpunit.xml`) for test suite management.
- Established a base test case class (`TestCase.php`) for consistent test structure.
- Implemented example tests in both feature and unit directories to demonstrate usage.
- Introduced a custom Pest file (`Pest.php`) to extend functionality and define global helpers.

This setup streamlines the testing process and provides a foundation for future test development.

* feat(test): add comprehensive testing infrastructure with Pest PHP

- Add complete Pest PHP testing suite with extensive helper functions
- Implement unit tests for Database and DatabaseDebugger classes
- Implement unit tests for CacheManager and DatastoreManager classes
- Add comprehensive mock factories and test data generators
- Add custom Pest expectations for TorrentPier-specific validation
- Create detailed testing documentation with examples and best practices
- Update main README.md and UPGRADE_GUIDE.md with testing sections
- Update dependencies to support testing infrastructure
- Remove example test file and replace with production-ready tests

BREAKING CHANGE: None - all existing functionality maintained

The testing infrastructure includes:
- 25+ helper functions for test setup and mocking
- Singleton pattern testing for all major components
- Mock factories for Database, Cache, and external dependencies
- Custom expectations: toBeValidDatabaseConfig, toHaveDebugInfo
- Comprehensive documentation with real-world examples
- Performance testing utilities and execution time assertions
2025-06-20 22:00:12 +04:00
Yury Pikhtarev
7aed6bc7d8
refactor(database): enhance error logging and various fixes (#1978)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
* refactor(database): enhance error logging and handling in Database and DatabaseDebugger classes

- Updated error handling in Database class to provide more meaningful error messages, including detailed PDO error information.
- Enhanced log_error method in DatabaseDebugger to accept exceptions, allowing for more reliable error logging with comprehensive context.
- Improved user-facing error messages while maintaining detailed logging for administrators and developers.
- Added checks for connection status and query context in error logs to aid in debugging.

* refactor(database): streamline error handling and improve code clarity in Database class

- Removed unused imports and global variable references to enhance code readability.
- Simplified error handling by refining conditions for empty input arrays.
- Defined variables early in the error logging method to ensure consistent access throughout.
- Improved comments for better understanding of the error handling logic.

* fix(database): refine development mode condition in Database class

- Removed unnecessary function check from the development mode condition to streamline the logic.

* fix(redirect): add no-cache headers to prevent browser caching of redirects

- Implemented `send_no_cache_headers()` in the redirect function to ensure that browsers do not cache redirect responses, adhering to best practices for HTTP redirects.

* refactor(database): enhance error handling and logging in Database and Whoops classes

- Improved error handling in the Database class to log detailed information for duplicate column errors and automatically retry problematic queries using PDO.
- Introduced a new DatabaseErrorHandler to enhance Whoops error reporting with comprehensive database context and recent query history.
- Updated EnhancedPrettyPageHandler to include dynamic database information in error outputs, improving debugging capabilities.
- Added legacy query tracking in DatabaseDebugger to identify and log queries needing compatibility fixes, ensuring better maintenance of legacy code.

* refactor(posting): rollback changes in SQL queries up to legacy format
2025-06-20 18:52:30 +04:00
belomaxorka
7e723d6ad8 changelog: Update CHANGELOG.md 📖 2025-06-20 09:44:57 +00:00
Yury Pikhtarev
fbde8cd421
feat(migrations): implement Phinx database migration system (#1976)
* feat(migrations): implement Phinx database migration system and update installation process

- Introduced a modern database migration system using Phinx, replacing the legacy SQL import method.
- Updated `install.php` to run migrations instead of importing SQL dumps.
- Added migration configuration file `phinx.php` and initial migration files for schema and data seeding.
- Created a new admin panel for migration status management.
- Updated UPGRADE_GUIDE.md to include migration setup instructions and benefits.
- Ensured backward compatibility for existing installations while facilitating a smoother transition to the new system.

* update runProcess to return process exit code

* refactor(migrations): clean up whitespace and formatting in migration files

- Removed unnecessary whitespace and adjusted formatting for consistency across migration files.

* fix(migrations): enforce NOT NULL constraints on migration columns

- Updated various migration columns to enforce NOT NULL constraints, ensuring data integrity across the schema.
- Adjusted default values and nullability for multiple fields in the initial schema migration files.

* refactor(database): standardize table engines to InnoDB for reliability

- Updated UPGRADE_GUIDE.md to reflect the use of InnoDB for all tables, emphasizing data integrity and reliability.
- Modified migration files to change table engines from MyISAM to InnoDB for various tracker and temporary tables.
- Optimized session variable settings in cron jobs for InnoDB compatibility.
- Ensured consistency across the schema by enforcing InnoDB usage in all relevant areas.

* fix(migrations): correct MySQL integer field types to match original schema

- Fix bb_forums table: forum_status (INT→TINYINT), forum_tpl_id (INT→SMALLINT)
- Fix bb_users table: avatar_ext_id remains TINYINT as per original schema
- Fix bb_groups table: avatar_ext_id (SMALLINT→INT) to match original INT(15)
- Fix bb_topics table: topic_show_first_post, topic_allow_robots (TINYINT(1)→TINYINT UNSIGNED)
- Remove incorrect 'limit' => 11 from standard INT fields, use default Phinx behavior
- Fix search_size field to use proper INT type instead of maximum value hack
- Correct poll table field types: vote_id (TINYINT), user_id (MEDIUMINT), vote_result (MEDIUMINT UNSIGNED)
- Standardize all timestamp and ID fields to use appropriate MySQL integer types

Ensures migration creates database schema identical to install/sql/mysql.sql
while maintaining InnoDB engine for all tables instead of MyISAM.

* fix(cache): auto-create cache directories when using FileStorage

The UnifiedCacheSystem was constructing directory paths for Nette FileStorage
but not creating them, causing "Directory not found" errors when accessing
caches like 'bb_login_err'. FileStorage expects directories to already exist.

Changes:
- Add automatic directory creation using bb_mkdir() before FileStorage init
- Handle both regular cache directories and SQLite parent directories
- Apply to both _buildStorage() and _buildDatastoreStorage() methods
- Add proper error handling with RuntimeException for failed creation
- Maintain consistency with TorrentPier's directory creation patterns

This ensures cache directories are created automatically when first accessed,
eliminating the need for manual directory creation during deployment.

Fixes: Cache initialization failures with missing directories

* refactor(docs): update README for clarity and remove legacy SQL file

- Improved formatting and clarity in the README, ensuring consistent line breaks and spacing.
- Updated installation instructions to reflect the new migration process, emphasizing the use of `phinx` for database setup.
- Removed the legacy SQL dump file `mysql.sql` and the `legacy-changes.txt` file, streamlining the installation process and reducing confusion for new users.
- Enhanced the documentation to guide users through the setup process more effectively.

* docs: enhance CLAUDE.md with migration details and directory updates

- Updated the `/library/` section to clarify its purpose.
- Added a new `/migrations/` directory section detailing database migration files managed by Phinx.
- Included migration commands for running and checking migration status.
- Revised the initial schema and seed data references for clarity.
- Improved formatting for consistency throughout the document.

* refactor(cron): remove demo_mode.php cron job and related functionality

- Deleted the demo_mode.php cron job file, which was responsible for managing demo mode operations.
- Added a migration to remove the demo_mode.php entry from the bb_cron table, ensuring a clean database state.
- Updated the initial schema migration comment to reflect the creation of essential database schema for fresh installations.

* refactor(docs): Fixed some typos

* chore: update changelog generation starting from v2.4.6-alpha.4

* refactor: Changed some `php_sapi_name()` to `PHP_SAPI` constants

* refactor: Extract hardcoded migrations to class property

* refactor: Use `count()` to count $initialMigrations elements

* feat(migrations): enhance migration management UI with new language variables

- Added new language variables for migration status, instructions, and applied/pending migrations to improve user interface clarity.
- Updated admin migration template to utilize these new language variables for better localization and maintainability.
- Introduced a new file 'CLAUDE.md' to the cleanup process for documentation purposes.

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2025-06-20 13:23:33 +04:00
belomaxorka
0d4c869f30 changelog: Update CHANGELOG.md 📖
Some checks failed
PHPMD / Run PHPMD scanning (push) Has been cancelled
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
2025-06-19 01:42:40 +00:00
Yury Pikhtarev
49717d3a68
feat: implement Language singleton with shorthand functions (#1966)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
- Add Language singleton class (src/Language.php) following TorrentPier patterns
- Implement automatic source language fallback loading
- Add dot notation support for nested language arrays
- Provide convenient shorthand functions __() and _e() in common.php
- Maintain 100% backward compatibility with global $lang variable
- Replace manual language file loading in bb_die() and bb_date() functions
- Update poll.php as modern usage example with __() shorthand
- Integrate with User.php initialization via lang()->initializeLanguage()
- Clean up Template.php compilation removing legacy source language logic
- Add comprehensive UPGRADE_GUIDE.md documentation section

BREAKING CHANGE: None - full backward compatibility maintained
2025-06-18 19:29:06 +04:00
Yury Pikhtarev
2fd306704f
feat(database): add visual markers for Nette Explorer queries in debug panel (#1965)
Add automatic detection and colorful badges to distinguish Nette Explorer
queries from legacy database calls, helping track modernization progress.

- Detect Nette SQL patterns (backticks, parentheses)
- Add green styled [Nette Explorer] badges
- Fix HTML escaping in debug tooltips
- Prevent marker duplication
2025-06-18 18:13:34 +04:00
Yury Pikhtarev
6c0219d53c
refactor(database): rename DB to Database and extract debug functionality (#1964)
- Rename DB → Database, DbFactory → DatabaseFactory for consistency
- Extract 8 debug methods from Database to dedicated DatabaseDebugger class
- Add DebugSelection wrapper for debug-enabled Nette Selection
- Update all references across codebase (common.php, Dev.php, page_footer)
- Maintain backward compatibility via magic methods (__get, __isset)
- Update documentation (README.md, UPGRADE_GUIDE.md)

No breaking changes - all existing DB() calls work unchanged
2025-06-18 17:46:12 +04:00
Roman Kelesidis
f2fca0de85
release: v2.6.0 🐂 2025-06-18 14:15:53 +03:00
Yury Pikhtarev
07a06a33cd
feat!: implement unified cache system with Nette Caching (#1963)
* feat!: implement unified cache system with Nette Caching

Replace legacy Cache and Datastore systems with modern unified implementation using Nette Caching v3.3 while maintaining 100% backward compatibility.

BREAKING CHANGE: Internal cache architecture completely rewritten, though all public APIs remain compatible.

### Added
- src/Cache/UnifiedCacheSystem.php: Main singleton orchestrator following TorrentPier patterns
- src/Cache/CacheManager.php: Cache interface using Nette Caching with singleton pattern
- src/Cache/DatastoreManager.php: Datastore interface using CacheManager internally
- src/Cache/README.md: Comprehensive documentation and migration guide

### Changed
- common.php: Updated to use singleton pattern instead of global variables
- src/Dev.php: Added compatibility with unified cache system debug functionality
- composer.json: Added nette/caching dependency
- UPGRADE_GUIDE.md: Added unified cache system migration documentation

### Removed
- src/Legacy/Cache/*: All legacy cache implementations (APCu, File, Memcached, Redis, SQLite, Common)
- src/Legacy/Datastore/*: All legacy datastore implementations (APCu, File, Memcached, Redis, SQLite, Common)
- src/Legacy/Caches.php: Legacy cache factory replaced by UnifiedCacheSystem

### Performance
- 456,647+ operations per second verified in production testing
- Memory optimization through efficient singleton pattern
- Modern Nette Caching algorithms and bulk operations

### Compatibility
- All existing CACHE() calls work unchanged
- All existing $datastore operations work unchanged
- Full backward compatibility with Dev.php debugging
- Resolved Sessions TypeError and debug property access issues

### Architecture
- Consistent singleton pattern matching config(), dev(), censor(), DB()
- Clean function interfaces with proper return types
- No global variables, modern initialization pattern
- Single source of truth replacing duplicate Cache/Datastore code

* fix: update datastore type from 'filecache' to 'file' for consistency

Modified the datastore type in common.php and README.md to reflect the new unified cache system terminology. This change ensures consistency across the codebase and documentation following the recent implementation of the unified cache system.

* refactor(cache): centralize storage creation and eliminate redundancy

- Remove redundant initializeStorage() from CacheManager
- Update CacheManager to receive pre-built Storage instances
- Centralize all storage creation logic in UnifiedCacheSystem
- Remove unused properties and fix method signatures
- Update documentation to reflect simplified architecture

No breaking changes - all public APIs unchanged.
2025-06-18 15:05:22 +04:00
Yury Pikhtarev
e458109eef
fix(User): add null and array checks before session data operations (#1962)
Ensure that session data is only processed if it exists and is an array. This prevents potential errors when attempting to cache or remove user session data. Updated methods `cache_set_userdata` and `cache_rm_userdata` to include necessary checks.
2025-06-18 12:43:58 +04:00
Yury Pikhtarev
f50b914cc1
feat: replace legacy database layer with Nette Database implementation (#1961)
* feat: replace legacy database layer with Nette Database implementation

Replace legacy SqlDb/Dbs classes with modern Nette Database implementation
while maintaining complete backward compatibility.

- Replace SqlDb with singleton DB class using Nette Database Connection
- Replace Dbs factory with DbFactory maintaining full compatibility
- Implement complete feature parity including debug, explain, and logging
- Add proper type declarations and modern PHP standards
- Remove legacy SqlDb.php and Dbs.php files
- Update common.php DB() function with proper PHPDoc and return types
- Fix affected_rows() implementation for Nette Database compatibility
- Fix explain() method to handle missing debug array keys
- Maintain 100% backward compatibility - no code changes required

The new implementation uses Nette Database v3.2 internally while preserving
all existing functionality. All existing DB() calls work unchanged.
All debugging, explain, error handling, and performance tracking features
are fully preserved with enhanced reliability.

Files added:
- src/Database/DB.php - Main database class with singleton pattern
- src/Database/DbFactory.php - Factory for database instance management
- src/Database/README.md - Comprehensive documentation

Files removed:
- src/Database/Config.php - Unused configuration helper
- src/Legacy/SqlDb.php - Legacy database class
- src/Legacy/Dbs.php - Legacy database factory

Files modified:
- common.php - Updated DB() function with proper types and documentation
- viewtopic.php - Fixed duplicate column SQL query issues
- src/Dev.php - Updated to use DbFactory instead of legacy $DBS
- library/includes/page_footer*.php - Replaced $DBS references with DbFactory

* docs: Update UPGRADE_GUIDE.md with Database Layer Migration details

Add a comprehensive section on the new database layer migration to Nette Database, highlighting key improvements, no code changes required, and verification steps. Document the removal of legacy database files and provide links to detailed documentation for further reference. Ensure clarity on backward compatibility and performance benefits.

* docs: Enhance README.md with future migration strategy to Nette Database Explorer

Add detailed sections outlining a phased approach for migrating to Nette Database Explorer, including hybrid methods, advanced features, and migration strategies. Highlight benefits such as improved developer experience, code quality, and performance optimizations. This documentation aims to guide developers through the transition while maintaining backward compatibility.
2025-06-18 12:29:13 +04:00
Roman Kelesidis
edda2306f2
release: v2.5.0 🐂
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-06-18 09:52:20 +03:00
Roman Kelesidis
86abafb114
docs: Add Select class migration guide (#1960) 2025-06-18 09:43:55 +03:00
Yury Pikhtarev
74a564d795
refactor(censor): migrate Censor class to singleton pattern (#1954)
* refactor(censor): migrate Censor class to singleton pattern

- Convert TorrentPier\Censor to singleton pattern following Config class design
- Add global censor() helper function for consistent API access
- Replace all global $wordCensor declarations and usage across 12 files
- Implement automatic reload functionality in admin panel
- Add enhanced methods: isEnabled(), addWord(), getWordsCount(), reload()

Files updated:
- src/Legacy/Atom.php, src/Legacy/Post.php
- viewforum.php, posting.php, search.php, index.php, viewtopic.php, privmsg.php
- library/ajax/posts.php, library/includes/bbcode.php, library/includes/ucp/topic_watch.php
- admin/admin_words.php, library/includes/init_bb.php
- common.php (added global helper)
- UPGRADE_GUIDE.md (documentation)

Benefits:
- Single instance shared across application for better performance
- Memory efficient word loading only when censoring enabled
- Consistent API pattern matching config() singleton
- Automatic word reloading when admin updates censored words
- Enhanced developer experience with new utility methods

BREAKING CHANGE: None - full backward compatibility maintained.
The global $wordCensor variable continues to work as before.
New censor() function is the recommended approach going forward.

* refactor(censor): add enable check to censorString method

* refactor(dev): convert Dev class to singleton pattern (#1955)

* refactor(dev): convert Dev class to singleton pattern

- Convert TorrentPier\Dev class from direct instantiation to singleton pattern
- Add getInstance() method and private constructor for singleton implementation
- Introduce new instance methods with improved naming:
  * getSqlDebugLog() (replaces getSqlLog())
  * checkSqlDebugAllowed() (replaces sqlDebugAllowed())
  * formatShortQuery() (replaces shortQuery())
- Add dev() global helper function for consistent access pattern
- Maintain full backward compatibility with existing static method calls
- Update all internal usage across 18 files to use new singleton pattern:
  * src/Ajax.php, src/Legacy/SqlDb.php
  * All Cache classes (APCu, File, Memcached, Redis, Sqlite, Common)
  * All Datastore classes (APCu, File, Memcached, Redis, Sqlite, Common)
  * library/includes/page_footer_dev.php
- Implement lazy initialization consistent with Config and Censor singletons
- Add comprehensive migration guide in UPGRADE_GUIDE.md

This refactoring improves resource management, provides consistent API patterns
across all singleton classes, and maintains zero breaking changes for existing code.

* refactor(dev): Added missing `\TorrentPier\Dev::init()`

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2025-06-18 10:38:23 +04:00
Roman Kelesidis
b1b2618757
chore(cliff): Add conventional commit prefix to changelog message (#1957) 2025-06-18 07:06:11 +03:00
belomaxorka
62f49beb0b Update CHANGELOG.md 📖 2025-06-18 01:41:26 +00:00
Yury Pikhtarev
bf9100fbfa
feat: implement centralized Config class to replace global $bb_cfg array (#1953)
Some checks failed
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
PHPMD / Run PHPMD scanning (push) Has been cancelled
* feat: implement centralized Config class to replace global $bb_cfg array

- Add singleton Config class with dot notation support for nested configuration
- Implement thread-safe configuration access with magic methods (__get, __set, __isset)
- Add global config() helper function for convenient access
- Support for getSection(), merge(), has(), all() methods with type safety

BREAKING CHANGE: While $bb_cfg global array still works for backward compatibility,
new code should use config()->get() method with dot notation

Updated files:
- src/Config.php: New Config singleton class implementation
- common.php: Initialize Config singleton and add global helper
- src/Emailer.php: Replace $bb_cfg with config()->get()
- src/Ajax.php: Replace $bb_cfg with config()->get()
- src/Censor.php: Replace $bb_cfg with config()->get()
- src/Validate.php: Replace $bb_cfg with config()->get()
- src/Dev.php: Replace $bb_cfg with config()->get()
- src/Sitemap.php: Replace $bb_cfg with config()->get()
- src/TorrServerAPI.php: Replace $bb_cfg with config()->get()
- src/Sessions.php: Replace $bb_cfg with config()->get()
- src/Legacy/TorrentFileList.php: Replace $bb_cfg with config()->get()
- src/Legacy/Poll.php: Replace $bb_cfg with config()->get()
- src/Legacy/Torrent.php: Replace $bb_cfg with config()->get()
- src/Legacy/Common/User.php: Replace $bb_cfg with config()->get()
- src/Legacy/Template.php: Replace $bb_cfg with config()->get()
- src/Legacy/Atom.php: Replace $bb_cfg with config()->get()
- src/Legacy/Admin/Common.php: Replace $bb_cfg with config()->get()
- viewforum.php: Replace $bb_cfg with config()->get()
- posting.php: Replace $bb_cfg with config()->get()
- dl.php: Replace $bb_cfg with config()->get()
- feed.php: Replace $bb_cfg with config()->get()
- filelist.php: Replace $bb_cfg with config()->get()
- group_edit.php: Replace $bb_cfg with config()->get()
- group.php: Replace $bb_cfg with config()->get()
- index.php: Replace $bb_cfg with config()->get()
- login.php: Replace $bb_cfg with config()->get()
- memberlist.php: Replace $bb_cfg with config()->get()
- modcp.php: Replace $bb_cfg with config()->get()
- playback_m3u.php: Replace $bb_cfg with config()->get()
- poll.php: Replace $bb_cfg with config()->get()

* refactor: replace $bb_cfg with config() in various admin files

- Updated multiple admin files to utilize the new Config class for configuration access.
- Replaced instances of $bb_cfg with config()->get() for improved maintainability and consistency.
- Ensured backward compatibility while transitioning to the new configuration system.

Files modified:
- common.php
- index.php
- admin_attach_cp.php
- admin_log.php
- admin_mass_email.php
- admin_sitemap.php
- admin_smilies.php
- admin_terms.php
- admin_user_search.php
- admin_words.php
- admin/index.php
- admin/stats/tracker.php

* refactor: update init_bb.php to use config() for configuration management

- Replaced the merging of $bb_cfg with a call to config()->merge() for improved clarity and maintainability.
- Updated the retrieval of all configuration settings to use config()->all().

This change continues the transition towards a centralized configuration system.

* refactor: replace $bb_cfg with config() in various files

- Updated multiple files to utilize the new Config class for configuration access.
- Replaced instances of $bb_cfg with config()->get() for improved maintainability and consistency.
- Ensured backward compatibility while transitioning to the new configuration system.

Files modified:
- privmsg.php
- search.php
- terms.php
- tracker.php
- viewtopic.php
- bt/announce.php
- bt/scrape.php
- bt/includes/init_tr.php
- library/ajax/*.php
- src/Config.php

* refactor: replace $bb_cfg with config() in attachment and display files

- Updated multiple files to utilize the new Config class for configuration access.
- Replaced instances of $bb_cfg with config()->get() for improved maintainability and consistency.
- Ensured backward compatibility while transitioning to the new configuration system.

Files modified:
- attachment_mod.php
- displaying_torrent.php
- functions_delete.php
- bbcode.php
- functions.php
- init_bb.php
- online_userlist.php
- page_footer.php
- page_header.php
- torrent_show_dl_list.php
- cron jobs (various files)
- datastore build files (various files)

* refactor: replace $bb_cfg with config() in user control panel files

- Updated multiple user control panel files to utilize the new Config class for configuration access.
- Replaced instances of $bb_cfg with config()->get() for improved maintainability and consistency.
- Ensured backward compatibility while transitioning to the new configuration system.

Files modified:
- bonus.php
- email.php
- register.php
- sendpasswd.php
- topic_watch.php
- viewprofile.php

* refactor: replace $bb_cfg with config() in various legacy files

- Updated multiple legacy files to utilize the new Config class for configuration access.
- Replaced instances of $bb_cfg with config()->get() for improved maintainability and consistency.
- Ensured backward compatibility while transitioning to the new configuration system.

Files modified:
- sidebar2.html
- BBCode.php
- LogAction.php
- Post.php
- Template.php
- Torrent.php
- Common/User.php
- Common/Select.php
- Common/Upload.php
- Admin/Common.php
- tpl_config.php

* refactor: remove legacy DOCUMENTATION.md and add UPGRADE_GUIDE.md

- Deleted the outdated DOCUMENTATION.md file, which contained legacy configuration information.
- Introduced a new UPGRADE_GUIDE.md to assist users in migrating to the new configuration system.
- The upgrade guide includes migration strategies, breaking changes, and best practices for using the new Config class.

Files modified:
- DOCUMENTATION.md (deleted)
- UPGRADE_GUIDE.md (new)

* refactor: update legacy files to maintain compatibility with bb_cfg deprecation

- Added comments in init_bb.php, Template.php, and Cron.php to indicate that bb_cfg is deprecated but retained for compatibility with non-adapted code.
- Ensured clarity in documentation for future reference while transitioning to the new configuration system.

Files modified:
- init_bb.php
- Template.php
- Cron.php
2025-06-18 01:19:49 +04:00
Yury Pikhtarev
37a0675adf
fix(sql): resolve only_full_group_by compatibility issues in tracker cleanup (#1951)
- Replace non-aggregated 'seeder' column with MAX(seeder) in GROUP BY query
- Remove ORDER BY clause incompatible with GROUP BY in seeder update query

Fixes MySQL 5.7+ strict SQL mode errors in tr_cleanup_and_dlstat cron job.
2025-06-17 20:28:14 +04:00
Roman Kelesidis
81bf67c2be
fix(installer): Strip protocol from TP_HOST to keep only hostname (#1952)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-06-17 18:14:47 +03:00
Yury Pikhtarev
5842994782
refactor(config): encapsulate global $bb_cfg array in Config class (#1950)
- Create new TorrentPier\Config singleton class with dot notation support
- Add config() helper function for global access
- Replace direct $bb_cfg access in core files (common.php, Emailer.php, Ajax.php)
- Implement methods: get(), set(), has(), all(), getSection(), merge()
- Add magic methods for property-like access
- Maintain backward compatibility with existing $bb_cfg usage

BREAKING CHANGE: None - maintains full backward compatibility
2025-06-17 18:41:45 +04:00
Yury Pikhtarev
8907dbf991
Update composer.lock and improve SQL queries in online_userlist.php and tr_cleanup_and_dlstat.php (#1949)
- Updated plugin API version in composer.lock from 2.3.0 to 2.6.0.
- Modified SQL queries in online_userlist.php to use MAX() for session data and adjusted GROUP BY clause for better accuracy.
- Enhanced SQL logic in tr_cleanup_and_dlstat.php to utilize MAX() for determining the releaser status.
2025-06-17 18:07:31 +04:00
belomaxorka
d8b1489b06 Update CHANGELOG.md 📖
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-06-17 01:42:31 +00:00
dependabot[bot]
b4776804a4
Composer(deps): Bump filp/whoops from 2.18.2 to 2.18.3 (#1948)
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.18.2 to 2.18.3.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.18.2...2.18.3)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-version: 2.18.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 15:07:06 +03:00
belomaxorka
633051bb99 Update CHANGELOG.md 📖
Some checks are pending
Continuous Integration / Nightly builds 📦 (push) Waiting to run
Continuous Integration / 🎉 Deploy (push) Waiting to run
PHPMD / Run PHPMD scanning (push) Waiting to run
2025-06-16 01:45:24 +00:00
belomaxorka
224f0ffa1f Update CHANGELOG.md 📖
Some checks failed
Continuous Integration / Nightly builds 📦 (push) Has been cancelled
Continuous Integration / 🎉 Deploy (push) Has been cancelled
PHPMD / Run PHPMD scanning (push) Has been cancelled
2025-06-15 01:50:26 +00:00
belomaxorka
b530268826 Update CHANGELOG.md 📖 2025-06-13 08:21:18 +00:00
Roman Kelesidis
9c7d270598
misc(_release.php): Finally! Removed some useless params (#1947) 2025-06-13 11:20:11 +03:00
Roman Kelesidis
e7d3133aa8
release: v2.4.6-alpha.4 2025-06-13 11:06:10 +03:00
Roman Kelesidis
0271b21a5e
misc(_release.php): Use GPG sign for tags by default (#1946) 2025-06-13 11:04:49 +03:00
Roman Kelesidis
374a74c91f
release: v2.4.6-alpha.3 2025-06-13 10:53:29 +03:00
Roman Kelesidis
e5811f9c66
misc(_release.php): Minor improvements (#1945)
* misc(_release.php): Minor improvements

* Update _release.php
2025-06-13 10:51:50 +03:00
Roman Kelesidis
b6b38adea3 release: v2.4.6-alpha.2 2025-06-12 22:15:07 +03:00
Roman Kelesidis
5e6fb3ef42
misc(cliff.toml): Use correct nightly link (#1944) 2025-06-12 21:06:00 +03:00
dependabot[bot]
9a529558b4
Composer(deps): Bump filp/whoops from 2.18.1 to 2.18.2 (#1943)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.18.1 to 2.18.2.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.18.1...2.18.2)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-version: 2.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-12 20:33:12 +07:00
belomaxorka
62ab980027 Update CHANGELOG.md 📖 2025-06-12 01:41:04 +00:00
Roman Kelesidis
bcf4eb4e9b
feat(ajax): Log full ajax request/response data to console in explain mode (#1942)
* feat(ajax): log full ajax request data to console in explain mode

* Update Ajax.php
2025-06-11 21:42:13 +03:00
Roman Kelesidis
6f03f750ba
feat: Improved ajax debug (#1941) 2025-06-11 21:32:23 +03:00
belomaxorka
a27d504c7d Update CHANGELOG.md 📖 2025-06-11 18:21:14 +00:00
Roman Kelesidis
345dd1bc20
feat: Add console log for ajax actions when explain cookie is set (#1940) 2025-06-11 21:20:08 +03:00
Roman Kelesidis
28e38aa781
removed: 'cat_forums' from enqueue list in get_forum_mods ajax (#1939) 2025-06-11 21:03:15 +03:00
belomaxorka
1ece8ba830 Update CHANGELOG.md 📖 2025-06-11 01:42:18 +00:00
Roman Kelesidis
f9db78d266
misc(_release.php): Minor improvements (#1938) 2025-06-10 13:54:54 +03:00
Roman Kelesidis
bf328dd69e
fix: Set $datastore->enqueue before $datastore->get (#1937) 2025-06-10 13:47:57 +03:00
belomaxorka
74d3b76f73 Update CHANGELOG.md 📖 2025-06-09 20:22:52 +00:00
Roman Kelesidis
4b16b847f5
removed: Extra CFG_DIR constant (#1936) 2025-06-09 21:47:02 +03:00
Roman Kelesidis
dcd7002c2a
misc(_release.php): Temporary removed automatic push origin (#1935) 2025-06-09 18:46:51 +03:00
Roman Kelesidis
75ef57474c
misc(_release.php): Added ability to set version emoji (#1934) 2025-06-09 17:23:36 +03:00
Roman Kelesidis
867359a89e
misc(_release.php): Added automatic CHANGELOG.md update (#1933) 2025-06-09 17:05:12 +03:00
belomaxorka
eecfc44046 Update CHANGELOG.md 📖 2025-06-09 13:12:00 +00:00
Roman Kelesidis
5561e0022c
misc(_release.php): Added push origin command (#1932) 2025-06-09 16:10:57 +03:00
Roman Kelesidis
128f917d76 release: v2.4.6-alpha.1 2025-06-09 15:55:47 +03:00
Roman Kelesidis
8ecc61719a
misc(_release.php): Added GPG sign for tags (#1931) 2025-06-09 15:55:14 +03:00
belomaxorka
bef5328d1e Update CHANGELOG.md 📖 2025-06-09 12:22:30 +00:00
Roman Kelesidis
6adde35849
misc(cliff): Added automated script for releases creation (#1930)
* misc(cliff): Added automated script for releases creation

* Updated

* Update functions_cli.php

* Updated

* Updated

* Update functions_cli.php

* Updated

* Update _release.php

* Update cliff.toml

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php

* Update _release.php
2025-06-09 15:21:17 +03:00
belomaxorka
c9aff2a152 Update CHANGELOG.md 📖 2025-06-09 10:48:52 +00:00
Roman Kelesidis
cef041c0d1
misc(cliff): Completely removed cliff-releases.toml (#1929) 2025-06-09 13:48:25 +03:00
Roman Kelesidis
212e5c5283
misc(cliff): Updated config (#1928) 2025-06-09 13:44:17 +03:00
belomaxorka
5e291f3043 Update CHANGELOG.md 📖 2025-06-08 19:46:50 +00:00
Roman Kelesidis
4d0b2941e3
feat(meta): Minor improvements to description generation (#1926) 2025-06-08 22:44:50 +03:00
Yury Pikhtarev
2487d130bb
crodwin: New Crowdin updates (#1925) 2025-06-08 18:11:59 +03:00
Yury Pikhtarev
0515670bee
crowdin: New Crowdin updates (#1924)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2025-06-08 18:47:14 +07:00
Roman Kelesidis
f64c340563
feat(bbcode): Added [nfo] and [pre] tags (#1923) 2025-06-08 12:44:04 +03:00
belomaxorka
5768fe7071 Update CHANGELOG.md 📖 2025-06-08 01:48:39 +00:00
Yury Pikhtarev
8e965fb1ce
crowdin: New translations main.php (Russian) (#1922) 2025-06-07 19:29:59 +03:00
Yury Pikhtarev
daeb7fe87e
crowdin: New Crowdin updates (#1921)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2025-06-07 15:00:23 +03:00
Roman Kelesidis
4c24cb65bf
feat(bbcode): Implement color customization for [box] tag (#1920)
* feat(bbcode): implement color customization for `[box]` tag

* feat(bbcode): implement color customization for `[box]` tag
2025-06-07 14:46:42 +03:00
belomaxorka
6d6786481e Update CHANGELOG.md 📖 2025-06-05 01:40:24 +00:00
dependabot[bot]
125366147c
Composer(deps): Bump filp/whoops from 2.18.0 to 2.18.1 (#1919)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.18.0 to 2.18.1.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.18.0...2.18.1)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-version: 2.18.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-04 09:43:43 +03:00
belomaxorka
efa39767a6 Update CHANGELOG.md 📖 2025-05-31 20:09:52 +00:00
Roman Kelesidis
46f29bc68a
misc: Minor improvements (#1918) 2025-05-31 10:19:24 +03:00
Roman Kelesidis
7b8b9a0bba
feat: Added ability to set page meta description (#1917)
* feat: Added ability to set page meta description

* Update page_header.php

* Update viewforum.php

* Updated

* Update viewtopic.php

* Update viewtopic.php

* Update viewtopic.php

* Update viewtopic.php
2025-05-31 10:13:55 +03:00
belomaxorka
5a60ee0193 Update CHANGELOG.md 📖 2025-05-30 18:58:22 +00:00
Roman Kelesidis
03eeb08ad1
feat(install): Autofill Host in robots.txt file (#1916) 2025-05-30 21:53:24 +03:00
Yury Pikhtarev
a3da6f5386
crowdin: New Crowdin updates (#1915) 2025-05-30 20:27:13 +03:00
Yury Pikhtarev
a15baef69a
crowdin: New Crowdin updates (#1914)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2025-05-30 22:59:14 +07:00
Roman Kelesidis
79bb13e17d
feat(ACP): Added robots.txt editor (#1913)
* feat(admin): Added robots.txt editor

* Update admin_robots.tpl

* Update admin_robots.php

* Update admin_robots.php

* Update admin_robots.php

* Update admin_robots.tpl

* Updated

* Updated

* Update main.php

* Updated
2025-05-30 17:53:22 +03:00
belomaxorka
d18f99fa1c Update CHANGELOG.md 📖 2025-05-23 01:38:55 +00:00
dependabot[bot]
f76e351b32
Composer(deps): Bump arokettu/bencode from 4.3.0 to 4.3.1 (#1912)
Bumps [arokettu/bencode](https://github.com/arokettu/bencode) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/arokettu/bencode/releases)
- [Changelog](https://github.com/arokettu/bencode/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/bencode/compare/4.3.0...4.3.1)

---
updated-dependencies:
- dependency-name: arokettu/bencode
  dependency-version: 4.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-22 21:57:40 +07:00
belomaxorka
21b1eef59d Update CHANGELOG.md 📖 2025-05-19 01:43:37 +00:00
Yury Pikhtarev
174f44160e
crowdin: New Crowdin updates (#1911) 2025-05-18 07:52:16 +03:00
belomaxorka
025a1944b9 Update CHANGELOG.md 📖 2025-05-17 17:36:06 +00:00
Yury Pikhtarev
c40aad20ad
crowdin: New Crowdin updates (#1910) 2025-05-17 22:46:27 +07:00
Yury Pikhtarev
999ae1eff9
crowdin: New Crowdin updates (#1907)
* New translations main.php (Russian)

* New translations main.php (Azerbaijani)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2025-05-17 17:37:09 +03:00
Roman Kelesidis
897edfc371
crowdin: Updated translations (#1909) 2025-05-17 17:24:01 +03:00
Roman Kelesidis
6d0499dd02
crowdin: Updated translations (#1908) 2025-05-17 17:22:20 +03:00
Roman Kelesidis
8a3b12c119
crowdin: New translations (#1906)
* crowdin: New translations

* Update main.php
2025-05-17 08:26:34 +03:00
Yury Pikhtarev
dee7b4acf9
New Crowdin updates (#1905)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations admin_send_email.html (Japanese)

* New translations admin_send_email.html (Chinese Traditional)

* New translations admin_send_email.html (Portuguese, Brazilian)

* New translations group_added.html (Spanish)

* New translations group_added.html (Japanese)

* New translations group_added.html (Chinese Traditional)

* New translations group_added.html (Thai)

* New translations group_approved.html (Spanish)

* New translations group_approved.html (Japanese)

* New translations group_approved.html (Chinese Traditional)

* New translations group_approved.html (Thai)

* New translations group_request.html (Chinese Traditional)

* New translations privmsg_notify.html (Spanish)

* New translations privmsg_notify.html (Japanese)

* New translations privmsg_notify.html (Chinese Traditional)

* New translations profile_send_email.html (Spanish)

* New translations profile_send_email.html (Japanese)

* New translations profile_send_email.html (Thai)

* New translations topic_notify.html (Spanish)

* New translations topic_notify.html (Chinese Traditional)

* New translations topic_notify.html (Thai)

* New translations user_activate.html (Spanish)

* New translations user_activate.html (Chinese Traditional)

* New translations user_activate_passwd.html (Spanish)

* New translations user_activate_passwd.html (Japanese)

* New translations user_activate_passwd.html (Chinese Traditional)

* New translations user_activate_passwd.html (Portuguese, Brazilian)

* New translations user_activate_passwd.html (Thai)

* New translations user_welcome.html (German)

* New translations user_welcome.html (Chinese Traditional)

* New translations user_welcome.html (Portuguese, Brazilian)

* New translations user_welcome.html (Thai)

* New translations user_welcome_inactive.html (Spanish)

* New translations user_welcome_inactive.html (Chinese Traditional)

* New translations user_welcome_inactive.html (Portuguese, Brazilian)

* New translations user_welcome_inactive.html (Thai)

* New translations copyright_holders.html (Chinese Traditional)

* New translations copyright_holders.html (Thai)

* New translations user_agreement.html (Thai)
2025-05-17 11:50:07 +07:00
belomaxorka
1738624d04 Update CHANGELOG.md 📖 2025-05-12 01:41:59 +00:00
Roman Kelesidis
cd450e67bb release: v2.4.5 🐠 2025-05-11 21:39:24 +03:00
belomaxorka
44bdd13df8 Update CHANGELOG.md 📖 2025-05-08 01:38:38 +00:00
Roman Kelesidis
3cdf843a04
misc: Minor improvements (#1904)
* misc: Minor improvements

* Update legacy-changes.txt

* Update composer.lock
2025-05-07 22:26:51 +03:00
belomaxorka
19ef9efc6a Update CHANGELOG.md 📖 2025-05-06 17:06:37 +00:00
Roman Kelesidis
3a64f8595c
feat: Added ability to hide peer username in peer list (#1903)
* Added ability to hide peer username in peer list

* Updated
2025-05-06 20:04:17 +03:00
Roman Kelesidis
4b7203f8ae
fix(peers list): IPv6 showing (#1902)
* fix(peers list): `IPv6` showing

* Update functions.php
2025-05-06 19:41:17 +03:00
Roman Kelesidis
6e0786bdee
feat(announcer): Check for frozen torrents (#1770)
* feat(announcer): Check for frozen torrents

* Update announce.php

* Update announce.php

* Update announce.php

* Update announce.php

* Update announce.php

* Update announce.php

* Updated

* Update announce.php

* Update announce.php

* Update announce.php

* Update announce.php

* Update announce.php
2025-05-06 12:55:18 +03:00
belomaxorka
d3b8c38f7a Update CHANGELOG.md 📖 2025-05-05 16:12:44 +00:00
Roman Kelesidis
2f026921ee
misc: Minor improvements (#1898)
* misc: Minor improvements

* Update functions.php

* Update functions.php
2025-05-05 19:11:22 +03:00
Roman Kelesidis
513e3065d3
feat(freeipapi): Added ability to use own API token (#1901)
* feat(freeipapi): Added ability to use own API token

* Updated

* Update displaying_torrent.php

* Update usercp_register.tpl

* Update register.php
2025-05-05 18:58:08 +03:00
dependabot[bot]
a4793f6ce1
Composer(deps): Bump symfony/polyfill from 1.31.0 to 1.32.0 (#1900)
Bumps [symfony/polyfill](https://github.com/symfony/polyfill) from 1.31.0 to 1.32.0.
- [Changelog](https://github.com/symfony/polyfill/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/symfony/polyfill/compare/v1.31.0...v1.32.0)

---
updated-dependencies:
- dependency-name: symfony/polyfill
  dependency-version: 1.32.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 14:26:46 +07:00
belomaxorka
ab7ea901ec Update CHANGELOG.md 📖 2025-05-05 01:40:58 +00:00
Roman Kelesidis
781b7240c4
fix: Incorrect rounding in execution time counter (#1899)
* fix: Incorrect rounding in execution time counter

* Update page_footer.php
2025-05-04 20:16:58 +03:00
Roman Kelesidis
14086a0ed6
misc: Minor improvements (#1897) 2025-05-04 19:40:57 +03:00
Roman Kelesidis
36d399220e
fix: Undefined array key "smile" when are no smilies (#1896) 2025-05-04 17:28:22 +03:00
Roman Kelesidis
b51820e186
feat(admin_smilies): Added confirmation on smilie deleting (#1895)
* feat(admin_smilies): Added confirmation on smilie deleting

* Update admin_smilies.php
2025-05-04 16:50:17 +03:00
belomaxorka
bdd4d9322b Update CHANGELOG.md 📖 2025-05-04 13:25:46 +00:00
Roman Kelesidis
8edba72f09
fix: Peer country flag not shown in peers list (#1894)
* fix: Peer country flag not shown in peers list

* Update functions.php
2025-05-04 16:20:02 +03:00
Roman Kelesidis
90ece5c762
misc: Minor improvements (#1893) 2025-05-04 12:33:08 +03:00
Roman Kelesidis
1e5b93d2c0
misc: Minor improvements (#1892) 2025-05-04 12:27:13 +03:00
Roman Kelesidis
2555ebce47
feat: Added ability to hide peer country in peer list (#1891)
* feat: Added ability to hide peer country in peer list

* Update displaying_torrent.php

* Update displaying_torrent.php

* Updated

* Update usercp_register.tpl

* Update main.php

* Update functions.php
2025-05-04 11:55:28 +03:00
Roman Kelesidis
f5d65b8911
feat: Added ability to hide BitTorrent client in peers list (#1890)
* feat: Added ability to hide peer torrent client

* Update displaying_torrent.php

* Update functions.php

* Update register.php

* Updated
2025-05-04 10:38:38 +03:00
belomaxorka
ccb122f9cb Update CHANGELOG.md 📖 2025-05-03 17:50:28 +00:00
Roman Kelesidis
1db9412957 release: v2.4.5-rc.5 🐑 2025-05-03 20:43:45 +03:00
belomaxorka
3a679bc253 Update CHANGELOG.md 📖 2025-05-03 13:32:36 +00:00
Roman Kelesidis
75e9d5e4a8
feat(atom): Hide topics from private forums (#1889) 2025-05-03 16:24:48 +03:00
belomaxorka
071fc04b48 Update CHANGELOG.md 📖 2025-05-03 01:26:39 +00:00
Roman Kelesidis
e510ebc3ba
feat(admin_ranks): Added confirmation on rank deleting (#1888)
* feat(admin_ranks): Added confirmation on rank deleting

* Update functions.php

* Update admin_ranks.php
2025-05-02 14:43:36 +03:00
belomaxorka
25224e6dfd Update CHANGELOG.md 📖 2025-05-02 01:36:51 +00:00
dependabot[bot]
7a14464d20
Composer(deps): Bump vlucas/phpdotenv from 5.6.1 to 5.6.2 (#1887)
Bumps [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/vlucas/phpdotenv/releases)
- [Commits](https://github.com/vlucas/phpdotenv/compare/v5.6.1...v5.6.2)

---
updated-dependencies:
- dependency-name: vlucas/phpdotenv
  dependency-version: 5.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 19:36:22 +03:00
belomaxorka
0b489a25fd Update CHANGELOG.md 📖 2025-04-30 01:36:25 +00:00
Roman Kelesidis
1663e19c3f
misc(password_hash): Changed cost to 12 by default (#1886) 2025-04-29 20:41:03 +03:00
Roman Kelesidis
6bd000bc0d
misc: Updated nightly builds link (#1885) 2025-04-29 20:36:15 +03:00
Roman Kelesidis
5fe770070e
misc: Composer dependencies are installed according to the minimum supported PHP version (#1884) 2025-04-29 20:26:03 +03:00
belomaxorka
c98a4f760e Update CHANGELOG.md 📖 2025-04-24 01:27:35 +00:00
Roman Kelesidis
c0cdcff488
feat(magnet): Added xl (eXact Length) parametr (#1883) 2025-04-23 19:57:03 +03:00
belomaxorka
04b0a477d3 Update CHANGELOG.md 📖 2025-04-22 18:13:23 +00:00
Roman Kelesidis
53e944be51 Revert "style: Correct sidebar2 displaying" 2025-04-22 16:16:04 +03:00
Roman Kelesidis
bc1713abdd
misc: Corrected php version in composer.json (#1882) 2025-04-22 10:45:43 +03:00
Roman Kelesidis
5c4972ec12
misc: Composer dependencies are installed according to the minimum supported PHP version (#1881) 2025-04-22 10:33:08 +03:00
belomaxorka
ec0efe5790 Update CHANGELOG.md 📖 2025-04-18 01:25:35 +00:00
Roman Kelesidis
de8f1925ba
misc: Minor improvements (#1880)
* misc: Minor improvements

* Update index.php
2025-04-17 19:18:29 +03:00
belomaxorka
9e85a00464 Update CHANGELOG.md 📖 2025-04-17 01:26:28 +00:00
Roman Kelesidis
9f96090cc4
fix: Displaying Network news and Latest news for guests when foums are private (#1879) 2025-04-16 19:29:00 +03:00
Roman Kelesidis
eeb391da6a
misc: Minor improvements (#1876)
* misc: Minor improvements

* Update viewprofile.php

* Update viewprofile.php

* Update functions.php

* Update filelist.php

* Revert "Update filelist.php"

This reverts commit e5eb9a6b3f.

* Update .cliffignore

* Updated

* Update viewtopic_attach_guest.tpl
2025-04-16 13:40:36 +03:00
Roman Kelesidis
1073f19013 Revert "feat: Improvements for Torrent Files List functionality (#1878)"
This reverts commit e59adce848.
2025-04-16 13:27:21 +03:00
belomaxorka
cb36715583 Update CHANGELOG.md 📖 2025-04-16 01:27:40 +00:00
Roman Kelesidis
e59adce848
feat: Improvements for Torrent Files List functionality (#1878)
* feat: Improvements for `Torrent Files List` functionality

* Updated

* Updated

* Update filelist.php

* Update filelist.php

* Update filelist.php

* Updated

* Update filelist.php

* Update filelist.php

* Update filelist.php

* Updated

* Update filelist.php

* Update filelist.php
2025-04-15 20:31:45 +03:00
belomaxorka
1374479fa2 Update CHANGELOG.md 📖 2025-04-11 01:26:04 +00:00
Roman Kelesidis
c3b40003b7
fix(cache): Implicitly marking parameter $name as nullable is deprecated (#1877) 2025-04-10 12:19:22 +03:00
belomaxorka
1dc84f666f Update CHANGELOG.md 📖 2025-04-06 01:37:25 +00:00
Roman Kelesidis
41a78ddbcb
misc: Minor improvements (#1875)
* misc: Minor improvements

* Update activate.php

* Update admin_ug_auth.php

* Update admin_ug_auth.php

* Update register.php

* Update index.php

* Update admin_ug_auth.php
2025-04-05 17:01:59 +03:00
belomaxorka
36ff584e69 Update CHANGELOG.md 📖 2025-04-04 01:24:41 +00:00
Roman Kelesidis
0f1a69e32d
misc: Minor improvements (#1874) 2025-04-03 19:16:08 +03:00
belomaxorka
578a064303 Update CHANGELOG.md 📖 2025-04-01 15:44:55 +00:00
Roman Kelesidis
f9c8160f8e
misc: Fetch only necessary sitemap parameters in admin_sitemap.php (#1873) 2025-04-01 18:40:47 +03:00
Roman Kelesidis
8358aa00de
fix: Pagination issue in Report on action page (#1872) 2025-04-01 18:06:36 +03:00
belomaxorka
0e72537188 Update CHANGELOG.md 📖 2025-03-31 17:17:00 +00:00
Roman Kelesidis
595adbe4da
fix: tablesorting issues & incorrect user_role for pending users (#1871) 2025-03-31 19:54:53 +03:00
Roman Kelesidis
12792e74f7
fix: Fixed TorrentPier build-in emojis showing in ACP (#1870) 2025-03-31 17:50:07 +03:00
Roman Kelesidis
84e2392896
misc: Changed placeholder IP address from 7f000001 to 0 (#1869) 2025-03-31 17:42:36 +03:00
belomaxorka
0a5d14fb6b Update CHANGELOG.md 📖 2025-03-28 01:24:16 +00:00
Roman Kelesidis
72376532b3
misc: Minor improvements (#1866)
* misc:  Minor improvements

* Update _cleanup.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php
2025-03-27 21:29:49 +03:00
belomaxorka
83c03ae08e Update CHANGELOG.md 📖 2025-03-27 01:24:16 +00:00
dependabot[bot]
bd5aa2a5e7
Composer(deps): Bump php-curl-class/php-curl-class from 11.1.0 to 12.0.0 (#1868)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.1.0 to 12.0.0.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.1.0...12.0.0)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-26 13:28:20 +07:00
belomaxorka
ab4602e38f Update CHANGELOG.md 📖 2025-03-26 01:24:34 +00:00
Roman Kelesidis
eabf851ee6 revert: Added TorrentPier instance hash generation 2025-03-25 14:02:35 +03:00
Roman Kelesidis
1b288a96e4 revert: Added IndexNow protocol support 🤖 2025-03-25 13:48:52 +03:00
dependabot[bot]
6440162187
Composer(deps): Bump monolog/monolog from 3.8.1 to 3.9.0 (#1865)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.8.1 to 3.9.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.8.1...3.9.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 13:23:47 +07:00
dependabot[bot]
de2fceabed
Composer(deps): Bump php-curl-class/php-curl-class from 11.0.5 to 11.1.0 (#1864)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.0.5 to 11.1.0.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.0.5...11.1.0)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 13:23:32 +07:00
belomaxorka
1523a37fea Update CHANGELOG.md 📖 2025-03-23 01:36:27 +00:00
Roman Kelesidis
83e42bc5db
misc(render_flag): Hide names for specified ($nameIgnoreList) flags (#1862) 2025-03-22 12:19:29 +03:00
Roman Kelesidis
e9920ab598
misc(README): Removed Build actions badge (#1861) 2025-03-22 11:21:30 +03:00
Roman Kelesidis
974d3590c1
misc(.cliffignore): Added one more commit (#1860) 2025-03-22 08:52:06 +03:00
belomaxorka
02b418ac34 Update CHANGELOG.md 📖 2025-03-22 05:48:52 +00:00
Roman Kelesidis
2eab551bd7
misc(cliff): Added .cliffignore file to ignore reverted commits (#1859) 2025-03-22 08:47:51 +03:00
belomaxorka
a791d4db81 Update CHANGELOG.md 📖 2025-03-22 01:22:28 +00:00
dependabot[bot]
3ced460640
Composer(deps): Bump egulias/email-validator from 4.0.3 to 4.0.4 (#1858)
Bumps [egulias/email-validator](https://github.com/egulias/EmailValidator) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/egulias/EmailValidator/releases)
- [Commits](https://github.com/egulias/EmailValidator/compare/4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: egulias/email-validator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-21 13:15:40 +07:00
belomaxorka
3a2dcab561 Update CHANGELOG.md 📖 2025-03-21 02:12:39 +00:00
Roman Kelesidis
df500c4dfa
Update CHANGELOG.md 2025-03-21 09:11:39 +07:00
Roman Kelesidis
467225e6e4 Revert "feat: Added secure headers configuring (#1856)"
This reverts commit 9766c534bd.
2025-03-19 14:25:51 +03:00
belomaxorka
4f8b51febd Update CHANGELOG.md 📖 2025-03-19 01:24:08 +00:00
Roman Kelesidis
9766c534bd
feat: Added secure headers configuring (#1856)
* feat: Added secure headers configuring

* Update config.secure-headers.php
2025-03-18 21:05:15 +03:00
Roman Kelesidis
3cc880eeb8
misc: Some minor improvements (#1855)
* misc: Some minor improvements

* Update config.php

* Update Env.php

* Update Env.php

* Update tr_seed_bonus.php
2025-03-18 20:52:11 +03:00
belomaxorka
056bf046c1 Update CHANGELOG.md 📖 2025-03-18 01:23:15 +00:00
dependabot[bot]
7ca0582561
Composer(deps): Bump filp/whoops from 2.17.0 to 2.18.0 (#1853)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.17.0 to 2.18.0.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.17.0...2.18.0)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-17 13:34:11 +07:00
belomaxorka
4df48751c0 Update CHANGELOG.md 📖 2025-03-17 01:25:22 +00:00
Roman Kelesidis
9e0a64108d
style: Correct sidebar2 displaying (#1852) 2025-03-16 08:53:13 +03:00
belomaxorka
36430c22ce Update CHANGELOG.md 📖 2025-03-14 01:22:05 +00:00
Roman Kelesidis
299d9a1f6c
misc(nightly builds): Added cleanup step (#1851) 2025-03-13 19:51:03 +03:00
dependabot[bot]
37ad07a40c
Composer(deps): Bump php-curl-class/php-curl-class from 11.0.4 to 11.0.5 (#1849)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.0.4 to 11.0.5.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.0.4...11.0.5)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-13 10:33:19 +07:00
belomaxorka
5f7cfb455f Update CHANGELOG.md 📖 2025-03-12 01:22:02 +00:00
Roman Kelesidis
0b8d8a5210
feat(playback_m3u.php): Added checking auth to download (#1848) 2025-03-11 20:04:04 +03:00
Roman Kelesidis
af2403f191
refactor: Password generation (#1847)
* refactor: Password generation

* Update main.js

* Update usercp_register.tpl

* Update main.js

* Updated

* Update main.js
2025-03-11 18:14:28 +03:00
Roman Kelesidis
bd0ef063fa
refactor: Moved Select class into Legacy\Common (#1846) 2025-03-11 17:30:40 +03:00
Roman Kelesidis
5a4fc121ba
Merge pull request #1845 from torrentpier/misc(text-captcha)-Disabled-scatter-effect-by-default
misc(text captcha): Disabled scatter effect by default
2025-03-11 18:08:54 +07:00
Roman Kelesidis
3af5202f7b misc(text captcha): Disabled scatter effect by default 2025-03-11 14:08:08 +03:00
Roman Kelesidis
37f0fb93f3
Merge pull request #1844 from torrentpier/feat(emailer)-Added-ability-to-configure-sendmail
feat(emailer): Added ability to configure `sendmail`
2025-03-11 18:04:57 +07:00
Roman Kelesidis
5ad4a7019d feat(emailer): Added ability to configure sendmail 2025-03-11 14:03:52 +03:00
belomaxorka
a62a61b008 Update CHANGELOG.md 📖 2025-03-11 06:38:00 +00:00
Roman Kelesidis
ba19130cae
Merge pull request #1843 from torrentpier/dependabot/composer/belomaxorka/captcha-1.2.4
Composer(deps): Bump belomaxorka/captcha from 1.2.3 to 1.2.4
2025-03-11 13:36:24 +07:00
dependabot[bot]
4641b0a0d0
Composer(deps): Bump belomaxorka/captcha from 1.2.3 to 1.2.4
Bumps [belomaxorka/captcha](https://github.com/belomaxorka/Captcha) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/belomaxorka/Captcha/releases)
- [Commits](https://github.com/belomaxorka/Captcha/compare/v1.2.3...v1.2.4)

---
updated-dependencies:
- dependency-name: belomaxorka/captcha
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 06:35:33 +00:00
belomaxorka
edad1785ce Update CHANGELOG.md 📖 2025-03-11 01:22:54 +00:00
dependabot[bot]
be65f7c55c
Composer(deps): Bump belomaxorka/captcha from 1.2.2 to 1.2.3 (#1842)
Bumps [belomaxorka/captcha](https://github.com/belomaxorka/Captcha) from 1.2.2 to 1.2.3.
- [Release notes](https://github.com/belomaxorka/Captcha/releases)
- [Commits](https://github.com/belomaxorka/Captcha/compare/v1.2.2...v1.2.3)

---
updated-dependencies:
- dependency-name: belomaxorka/captcha
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-10 15:34:08 +07:00
belomaxorka
ead48923b9 Update CHANGELOG.md 📖 2025-03-10 01:10:01 +00:00
Roman Kelesidis
56d531aa5d
feat(avatar upload): Added accept="image/*" attribute (#1841) 2025-03-09 19:49:10 +03:00
Roman Kelesidis
4e6aadac8c release: v2.4.5-rc.4 🐦🔥 2025-03-09 15:33:18 +03:00
belomaxorka
aa54b3c9ad Update CHANGELOG.md 📖 2025-03-09 12:31:04 +00:00
Roman Kelesidis
858556043d
misc: Replaced gregwar/captcha with my own fork (#1840) 2025-03-09 09:57:35 +03:00
belomaxorka
01c2f3763f Update CHANGELOG.md 📖 2025-03-09 01:12:01 +00:00
Roman Kelesidis
74ea1573b2
feat(captcha): Added Text Captcha provider (#1839)
* feat(captcha): Added `Text Captcha` provider

* Create TextCaptcha.php

* Updated

* Update composer.lock

* Updated

* Update config.php

* Update functions.php

* Update TextCaptcha.php

* Update TextCaptcha.php

* Update TextCaptcha.php

* Update TextCaptcha.php

* Update TextCaptcha.php

* Update TextCaptcha.php

* Update TextCaptcha.php
2025-03-08 20:12:48 +03:00
belomaxorka
8ad080ff2f Update CHANGELOG.md 📖 2025-03-08 01:06:19 +00:00
Roman Kelesidis
dd721367c7
misc(installer): Added cleanup step (for master builds) (#1838)
* misc(installer): Added cleanup step (for master builds)

* Update _cleanup.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php
2025-03-07 17:13:31 +03:00
dependabot[bot]
b954815f5d
Composer(deps): Bump bugsnag/bugsnag from 3.29.2 to 3.29.3 (#1837)
Bumps [bugsnag/bugsnag](https://github.com/bugsnag/bugsnag-php) from 3.29.2 to 3.29.3.
- [Release notes](https://github.com/bugsnag/bugsnag-php/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-php/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-php/compare/v3.29.2...v3.29.3)

---
updated-dependencies:
- dependency-name: bugsnag/bugsnag
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-07 10:28:38 +03:00
belomaxorka
492a6d105a Update CHANGELOG.md 📖 2025-03-07 01:23:04 +00:00
Roman Kelesidis
f8c4e8fb14
fix(info.php): Undefined array key "show" (#1836) 2025-03-06 14:58:47 +03:00
belomaxorka
b4624aec5a Update CHANGELOG.md 📖 2025-03-05 01:22:13 +00:00
Roman Kelesidis
b550fa59f9
feat: Added $bb_cfg['auto_language_detection'] parametr (#1835)
* feat: Added `$bb_cfg['auto_language_detection']` parametr

* Update config.php
2025-03-04 20:35:03 +03:00
belomaxorka
bb022e9a57 Update CHANGELOG.md 📖 2025-03-03 01:23:30 +00:00
Roman Kelesidis
5dc9a5475c
misc(_cleanup.php): Added CLI mode check (#1834) 2025-03-02 19:57:56 +03:00
Roman Kelesidis
68bf26d0f4
misc: Created cleanup script (for releases preparation) (#1833)
* misc: Created cleanup script (for releases preparation)

* Update _cleanup.php

* Update _cleanup.php

* Update _cleanup.php
2025-03-02 19:52:43 +03:00
Roman Kelesidis
bc95e14be3
feat(sitemap): Update lastmod when a new reply in topic (#1737)
* Sitemap: Update `lastmod` when topic edited

* Update CHANGELOG.md

* Update Sitemap.php

* Update Sitemap.php

* Update Sitemap.php

* Update CHANGELOG.md

* Update Sitemap.php

* Update Sitemap.php

* Update Sitemap.php

* Update Sitemap.php

* Update Sitemap.php

* Update Sitemap.php
2025-03-02 17:51:01 +03:00
Roman Kelesidis
249c988989
misc: Bring back missing cache & log directories (#1832)
* misc: Bring back missing `cache` & `log` directories

* Update .gitignore
2025-03-02 17:32:46 +03:00
Roman Kelesidis
f2e513dd8b
feat: Easter egg for the 20th anniversary of the TorrentPier! (#1831) 2025-03-02 10:59:49 +03:00
Roman Kelesidis
4dcd1fb16e
feat(show post bbcode): Added 'only_for_first_post' param (#1830)
* feat(show post bbcode): Added `'only_for_first_post'` param

* Update config.php
2025-03-02 10:48:02 +03:00
Roman Kelesidis
3b8ee4c4d3
misc: Some minor improvements (#1829) 2025-03-02 10:15:41 +03:00
Roman Kelesidis
380c94ff07 Revert "refactor: Moved classes from Legacy folder to src root (#1828)"
This reverts commit 92ce77ec0e.
2025-03-02 10:07:04 +03:00
belomaxorka
680bd77920 Update CHANGELOG.md 📖 2025-03-02 01:25:41 +00:00
Roman Kelesidis
92ce77ec0e
refactor: Moved classes from Legacy folder to src root (#1828)
* refactor: Moved classes from `Legacy` folder to `src` root

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Updater

* Update Caches.php

* Updater

* Updater

* Updater

* Updater

* Update Attach.php

* Update Post.php

* Update BBCode.php

* Update SqlDb.php

* Update Upload.php

* Update Upload.php

* Updated

* Updated

* Revert "Updated"

This reverts commit 9ecc26b048.

* Revert "Updated"

This reverts commit 22db50889c.

* Revert "Update Upload.php"

This reverts commit a6faf4191a.
2025-03-01 21:18:26 +03:00
Roman Kelesidis
ba3ce885c8
removed: Integrity checker 🥺🪦 (#1827)
* removed: Integrity checker

* Update schedule.yml
2025-03-01 20:22:50 +03:00
Roman Kelesidis
912b080b16
removed: Redundant .htaccess files (#1826) 2025-03-01 20:00:06 +03:00
belomaxorka
1418d2173a Update checksums.md5 📄 2025-02-27 01:21:19 +00:00
belomaxorka
652708952d Update checksums.md5 📄 2025-02-23 01:24:54 +00:00
belomaxorka
cef5c7c2a6 Update CHANGELOG.md 📖 2025-02-23 01:24:35 +00:00
Roman Kelesidis
4f896854d3
misc(installer): Some minor improvements (#1825) 2025-02-22 10:54:28 +03:00
Roman Kelesidis
f3714f02f2
misc(installer): Some minor improvements (#1824) 2025-02-22 10:46:35 +03:00
belomaxorka
0cfb34ce58 Update checksums.md5 📄 2025-02-22 01:17:37 +00:00
belomaxorka
5b3d5333d5 Update CHANGELOG.md 📖 2025-02-22 01:17:18 +00:00
dependabot[bot]
1c323a45d7
Composer(deps): Bump php-curl-class/php-curl-class from 11.0.3 to 11.0.4 (#1823)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.0.3 to 11.0.4.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.0.3...11.0.4)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 14:57:56 +07:00
belomaxorka
5340f301e4 Update checksums.md5 📄 2025-02-21 01:20:02 +00:00
belomaxorka
023d912f24 Update CHANGELOG.md 📖 2025-02-21 01:19:43 +00:00
Roman Kelesidis
6f641aa9d8
misc(Caddyfile): Some minor fixes (#1822) 2025-02-20 18:48:56 +03:00
dependabot[bot]
dedf35b794
Composer(deps): Bump php-curl-class/php-curl-class from 11.0.1 to 11.0.3 (#1821)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.0.1 to 11.0.3.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.0.1...11.0.3)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-20 13:23:07 +07:00
belomaxorka
34c429e9e6 Update checksums.md5 📄 2025-02-20 01:19:52 +00:00
belomaxorka
75bf819391 Update CHANGELOG.md 📖 2025-02-20 01:19:32 +00:00
Roman Kelesidis
dfd4e5ebc9
fix(tr_seed_bonus.php): Incorrect GROUP BY (#1820) 2025-02-19 18:15:47 +03:00
Roman Kelesidis
bdefed4dab
misc(announcer): Some minor improvements (#1819)
* misc(announcer): Some minor improvements

* Update announce.php

* Update README.md

* Update Post.php
2025-02-19 14:58:37 +03:00
belomaxorka
61253b6c94 Update checksums.md5 📄 2025-02-17 01:21:50 +00:00
belomaxorka
0b04d71ea0 Update CHANGELOG.md 📖 2025-02-17 01:21:31 +00:00
Roman Kelesidis
f7d394607e
feat: Added configuration files for nginx & caddy (#1787)
* feat(web servers configs): Added configuration files for `nginx` & `caddy`

* Update nginx.conf

* Updated

* Update Caddyfile

* Update Caddyfile

* Update Caddyfile

* Update Caddyfile
2025-02-16 16:48:13 +03:00
belomaxorka
fd98854977 Update checksums.md5 📄 2025-02-13 01:19:22 +00:00
belomaxorka
0dc788ea05 Update CHANGELOG.md 📖 2025-02-13 01:19:01 +00:00
Roman Kelesidis
03ebbda6be
removed(posting.php): Unused 'U_VIEWTOPIC variable (#1818) 2025-02-12 20:04:53 +03:00
belomaxorka
6c6b7ad194 Update checksums.md5 📄 2025-02-12 01:18:46 +00:00
belomaxorka
7df3e4c617 Update CHANGELOG.md 📖 2025-02-12 01:18:27 +00:00
Roman Kelesidis
7794242750
misc(cliff): Removed TorrentPier logo (#1817) 2025-02-11 20:20:12 +03:00
belomaxorka
7fc26743a7 Update checksums.md5 📄 2025-02-09 01:22:39 +00:00
belomaxorka
f723588d43 Update CHANGELOG.md 📖 2025-02-09 01:22:19 +00:00
Roman Kelesidis
c57db2104d
misc(workflow): Short release_name (#1816) 2025-02-08 13:36:24 +03:00
Roman Kelesidis
f2aea92b3d
misc(cliff): Synced cliff-releases.toml with cliff.toml changes (#1815) 2025-02-08 07:02:52 +03:00
belomaxorka
6640d9eb5a Update checksums.md5 📄 2025-02-08 04:00:41 +00:00
belomaxorka
5b3e948da4 Update CHANGELOG.md 📖 2025-02-08 04:00:22 +00:00
Roman Kelesidis
2593f093a3
misc(cliff): Added missing line breaks after body (#1814)
* misc(cliff): Minor improvements

* Update cliff.toml
2025-02-08 06:59:46 +03:00
belomaxorka
b4e177b6f2 Update checksums.md5 📄 2025-02-08 03:51:05 +00:00
belomaxorka
cdd22df66a Update CHANGELOG.md 📖 2025-02-08 03:50:48 +00:00
Roman Kelesidis
d54c07b3da
misc(workflow): Added workflow_dispatch for schedule.yml (#1813) 2025-02-08 06:49:55 +03:00
belomaxorka
aa866d19e6 Update checksums.md5 📄 2025-02-08 01:16:45 +00:00
belomaxorka
7973c85962 Update CHANGELOG.md 📖 2025-02-08 01:16:27 +00:00
B. Zach
bea3b0bccf
misc(README): Fixed all grammatical errors, sentence structure and readibility (#1812)
Fixed all grammatical errors, sentence structure and readibility of readme.
2025-02-07 18:58:10 +03:00
Roman Kelesidis
3a9dd6a3c9
misc(workflow): Some improvements (#1811) 2025-02-07 15:49:22 +03:00
belomaxorka
b286e35638 Update checksums.md5 📄 2025-02-07 01:19:03 +00:00
belomaxorka
401263001e Update CHANGELOG.md 📖 2025-02-07 01:18:45 +00:00
Roman Kelesidis
c168c3956c
misc(workflow): Some improvements (#1810)
* misc(workflow): Some improvements

* Updated

* Update cd.yml

* Update schedule.yml

* Create cd.yml

* Update cd.yml

* Update schedule.yml

* Update cd.yml
2025-02-06 19:43:44 +03:00
belomaxorka
1b751c72a7 release(preparing): Update checksums.md5 📄 2025-02-06 15:41:15 +00:00
belomaxorka
ad5d20cf87 release(preparing): Update CHANGELOG.md 📖 2025-02-06 15:40:55 +00:00
Roman Kelesidis
7378cb3af5
misc(cd workflow): Fixed release body creation (#1809) 2025-02-06 18:39:55 +03:00
belomaxorka
692b99530a release(preparing): Update checksums.md5 📄 2025-02-06 15:35:21 +00:00
belomaxorka
38299a3114 release(preparing): Update CHANGELOG.md 📖 2025-02-06 15:34:56 +00:00
Roman Kelesidis
6c9372c407
misc: Automated releases generation (#1808)
* misc: Automated releases generation

* Update cliff.toml
2025-02-06 18:33:26 +03:00
belomaxorka
427267d6bc release(preparing): Update checksums.md5 📄 2025-02-06 15:19:10 +00:00
belomaxorka
59ed431751 release(preparing): Update CHANGELOG.md 📖 2025-02-06 15:18:53 +00:00
Roman Kelesidis
cc679a8024
misc(cd workflow): Fixed release body creation (#1807) 2025-02-06 18:17:46 +03:00
belomaxorka
341306247b release(preparing): Update checksums.md5 📄 2025-02-06 15:12:08 +00:00
belomaxorka
c69e2b944a release(preparing): Update CHANGELOG.md 📖 2025-02-06 15:11:49 +00:00
Roman Kelesidis
bc74550294
misc: Automated releases generation (#1806)
* misc: Automated releases generation

* Update cd.yml
2025-02-06 18:09:59 +03:00
Roman Kelesidis
425e2e87d5
misc: Automated releases generation (#1805) 2025-02-06 17:57:06 +03:00
belomaxorka
8f191582f9 release(preparing): Update checksums.md5 📄 2025-02-06 14:13:26 +00:00
belomaxorka
8cbef4227e release(preparing): Update CHANGELOG.md 📖 2025-02-06 14:13:07 +00:00
Roman Kelesidis
44be40c2e8
misc(integrity checker): Disabled by default in Demo mode (#1804)
* misc(integrity checker): Disabled by default in `Demo mode`

* Update build_files_integrity.php

* Update cd.yml

* Revert "Update cd.yml"

This reverts commit ec74a0e0e2.
2025-02-06 17:10:10 +03:00
belomaxorka
c2bd2d4d68 release(preparing): Update checksums.md5 📄 2025-02-06 14:07:23 +00:00
belomaxorka
1e6d0ac85f release(preparing): Update CHANGELOG.md 📖 2025-02-06 14:07:02 +00:00
Roman Kelesidis
a29d57b2f8
misc(workflow): Refactored all workflows (#1803)
* misc(workflow): Refactored all workflows

* Update cd.yml
2025-02-06 16:55:29 +03:00
belomaxorka
25a89b093d Update checksums.md5 📄 2025-02-06 13:19:42 +00:00
belomaxorka
5baad10edb Update CHANGELOG.md 📖 2025-02-06 13:19:21 +00:00
Roman Kelesidis
15ca21f038
misc(changelog workflow): Minor improvements (#1802)
* misc(changelog workflow): Minor improvements

* Update ci.yml

* Update ci.yml

* Update ci.yml
2025-02-06 16:18:59 +03:00
belomaxorka
c331a1d009 Update CHANGELOG.md & checksums.md5 2025-02-06 12:46:29 +00:00
Roman Kelesidis
d8e2fa606c Revert "misc(changelog workflow): Some minor improvements (#1801)"
This reverts commit 2d53efc945.
2025-02-06 15:46:06 +03:00
GitHub Action
8daf87f0bd Update CHANGELOG.md & checksums.md5 2025-02-06 12:43:48 +00:00
GitHub Action
16fdd70e4f Update CHANGELOG.md & checksums.md5 2025-02-06 12:43:29 +00:00
GitHub Action
a4e066a739 Update CHANGELOG.md & checksums.md5 2025-02-06 12:43:06 +00:00
Roman Kelesidis
2d53efc945
misc(changelog workflow): Some minor improvements (#1801) 2025-02-06 15:42:47 +03:00
belomaxorka
fef7a54045 Update CHANGELOG.md & checksums.md5 2025-02-06 12:29:31 +00:00
Roman Kelesidis
60c6057784
misc(workflow): Trying combine changelog workflow with checksums workflow (#1800)
* misc(workflow): Trying combine changelog workflow with checksums workflow

* Update changelog.yml

* Update changelog.yml
2025-02-06 15:29:11 +03:00
belomaxorka
be6be3a6a2 Update CHANGELOG.md 📖 2025-02-06 12:22:06 +00:00
Roman Kelesidis
4eb5a9adc6
misc(checksum workflow): Fixed incorrect file path (#1799) 2025-02-06 15:21:51 +03:00
belomaxorka
7c5c1ad955 Update CHANGELOG.md 📖 2025-02-06 12:18:34 +00:00
Roman Kelesidis
09cafc2285
misc(integrity checker): Some enhancements (#1797)
* misc(integrity checker): Some enhancements

* Update build_files_integrity.php

* Create checksum.yml

* Update checksum.yml
2025-02-06 15:18:18 +03:00
belomaxorka
1ffee77abe Update CHANGELOG.md 📖 2025-02-05 17:59:42 +00:00
Roman Kelesidis
8650ad30f4
misc: Minor improvements (#1796)
* misc: Minor improvements

* Update build_files_integrity.php
2025-02-05 20:59:23 +03:00
belomaxorka
c554f90c31 Update CHANGELOG.md 📖 2025-02-05 12:37:30 +00:00
Roman Kelesidis
3c0a1d5d00
fix(youtube player): Mixed content issue (#1795) 2025-02-05 15:37:12 +03:00
belomaxorka
30836fb8d5 Update CHANGELOG.md 📖 2025-02-04 17:47:59 +00:00
Roman Kelesidis
c95d414ef6
misc(emailer): Use constants for email types (#1794) 2025-02-04 20:47:44 +03:00
belomaxorka
95ccf9bf3e Update CHANGELOG.md 📖 2025-02-03 18:17:15 +00:00
Roman Kelesidis
8e4cd97734
misc(notify): Hide notify checkbox in topic for guests (#1793)
* misc(notify): Hide notify checkbox in topic for guests

* Update usercp_viewprofile.tpl
2025-02-03 21:16:56 +03:00
belomaxorka
fc265ce96e Update CHANGELOG.md 📖 2025-02-02 09:08:39 +00:00
Roman Kelesidis
4eb26ae37e
revert: fix: Null $bb_cfg['tp_instance_hash'] (#1792) 2025-02-02 12:08:24 +03:00
belomaxorka
856afe7f20 Update CHANGELOG.md 📖 2025-02-02 05:32:41 +00:00
Roman Kelesidis
602137b651
fix: Null $bb_cfg['tp_instance_hash'] (#1790) 2025-02-02 08:32:26 +03:00
belomaxorka
9eb0aede73 Update CHANGELOG.md 📖 2025-02-01 04:34:07 +00:00
Roman Kelesidis
6115900b76
misc(deploy action): Specify some missing params (#1789) 2025-02-01 07:33:51 +03:00
belomaxorka
a8e53cb37c Update CHANGELOG.md 📖 2025-02-01 04:26:57 +00:00
Roman Kelesidis
4333d6aca4
feat(workflow): Automated deploy actual changes to TorrentPier Demo (#1788)
* feat(workflow): Automated deploy actual changes to TorrentPier Demo

* Update deploy.yml

* Update README.md

* Update README.md

* Update README.md

* Update README.md
2025-02-01 07:26:39 +03:00
belomaxorka
14714716b7 Update CHANGELOG.md 📖 2025-01-30 17:11:05 +00:00
Roman Kelesidis
387a25870a
misc(database): Use DEFAULT '' for privmsgs_subject (#1786)
* fix(posting): Exception on too long topic title

* Update mysql.sql
2025-01-30 20:10:47 +03:00
belomaxorka
0a423834a7 Update CHANGELOG.md 📖 2025-01-30 16:17:54 +00:00
Roman Kelesidis
b06e327cbb
fix(announcer): Null event exception (#1784) 2025-01-30 19:17:38 +03:00
belomaxorka
b51b226bde Update CHANGELOG.md 📖 2025-01-30 16:08:18 +00:00
Roman Kelesidis
314c592aff
feat(torrent): Bring back old torrent file naming (#1783)
* feat(torrent): Bring back old torrent file naming

* Update displaying_torrent.php

* Update Torrent.php
2025-01-30 19:08:00 +03:00
belomaxorka
d461b39e18 Update CHANGELOG.md 📖 2025-01-27 17:23:23 +00:00
Roman Kelesidis
e579b816b4
misc(readme): Improved installation guide (#1781)
* misc(readme): Improved installation guide

* Update README.md

* Update README.md

* Update README.md

* Update README.md
2025-01-27 20:23:04 +03:00
belomaxorka
c96f2807e6 Update CHANGELOG.md 📖 2025-01-27 16:48:47 +00:00
Roman Kelesidis
e51e091593
feat(environment): Make configurable TP_HOST and TP_PORT (#1780) 2025-01-27 19:48:27 +03:00
belomaxorka
e4242fc6de Update CHANGELOG.md 📖 2025-01-27 16:24:50 +00:00
Roman Kelesidis
5b0ed02089
misc(readme): Minor improvements (#1779) 2025-01-27 19:24:32 +03:00
belomaxorka
08aa18fdfb Update CHANGELOG.md 📖 2025-01-27 16:23:15 +00:00
dependabot[bot]
420c92c0ad
Composer(deps): Bump jacklul/monolog-telegram from 3.1.0 to 3.2.0 (#1776)
Bumps [jacklul/monolog-telegram](https://github.com/jacklul/monolog-telegram) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/jacklul/monolog-telegram/releases)
- [Commits](https://github.com/jacklul/monolog-telegram/compare/3.1.0...3.2.0)

---
updated-dependencies:
- dependency-name: jacklul/monolog-telegram
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 19:22:51 +03:00
dependabot[bot]
a71609ba67
Composer(deps): Bump filp/whoops from 2.16.0 to 2.17.0 (#1777)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.16.0 to 2.17.0.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.16.0...2.17.0)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 19:22:33 +03:00
belomaxorka
92344bb8de Update CHANGELOG.md 📖 2025-01-27 16:22:07 +00:00
Roman Kelesidis
970a0282e3
misc(readme): Added Caddy webserver (#1778) 2025-01-27 19:21:50 +03:00
belomaxorka
3f8107cedb Update CHANGELOG.md 📖 2025-01-26 13:45:40 +00:00
Roman Kelesidis
cd2786bb69
removed(environment): Extra DB_CONNECTION variable (#1775) 2025-01-26 16:45:22 +03:00
belomaxorka
d284b88a5c Update CHANGELOG.md 📖 2025-01-26 13:17:47 +00:00
Roman Kelesidis
268f79d725
misc(issue template): Improved Feature request template (#1774)
* misc(issue template): Improved `Feature request` template

* Update bug_report.yml

* Update feature---enhancement-request.md
2025-01-26 16:17:30 +03:00
belomaxorka
42435f5dd9 Update CHANGELOG.md 📖 2025-01-26 13:08:01 +00:00
Roman Kelesidis
53ebfef32c
misc(issue template): Improved Bug report template (#1773) 2025-01-26 16:07:41 +03:00
belomaxorka
6d0bea64d3 Update CHANGELOG.md 📖 2025-01-26 09:39:02 +00:00
Roman Kelesidis
d413c71718
feat(captcha): Added some new services 🤖 (#1771)
* feat(captcha): Added some new services

* Updated

* Updated

* Update GoogleCaptchaV2.php

* Updated

* Updated

* Create HCaptcha.php

* Update HCaptcha.php

* Update HCaptcha.php

* Create YandexSmartCaptcha.php

* Update YandexSmartCaptcha.php

* Create CloudflareTurnstileCaptcha.php

* Update CloudflareTurnstileCaptcha.php

* Update config.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update GoogleCaptchaV3.php

* Update GoogleCaptchaV3.php

* Update HCaptcha.php

* Update YandexSmartCaptcha.php

* Update CloudflareTurnstileCaptcha.php

* Updated

* Updated

* Update functions.php

* Updated

* Updated

* Update HCaptcha.php

* Updated

* Updated

* Updated

* Update functions.php

* Update main.php

* Updated

* Update HCaptcha.php

* Update HCaptcha.php

* Update GoogleCaptchaV3.php

* Update GoogleCaptchaV3.php

* Updated

* Updated

* Update GoogleCaptchaV2.php

* Update GoogleCaptchaV2.php
2025-01-26 12:38:47 +03:00
belomaxorka
bf2509abe7 Update CHANGELOG.md 📖 2025-01-22 17:52:32 +00:00
Roman Kelesidis
7f9df35d3b
removed: Some unused tracker config variables (#1769) 2025-01-22 20:52:11 +03:00
belomaxorka
f4c618fe54 Update CHANGELOG.md 📖 2025-01-16 14:49:56 +00:00
Roman Kelesidis
0f091eb546
fix: Incorrect peer country flag (#1768) 2025-01-16 17:49:33 +03:00
belomaxorka
7a008a6fa0 Update CHANGELOG.md 📖 2025-01-16 13:29:31 +00:00
Roman Kelesidis
46288ec198
feat(announcer): Added some disallowed ports by default (#1767)
* feat(announcer): Added some disallowed ports by default

* Update announce.php
2025-01-16 16:29:04 +03:00
belomaxorka
a43085a659 Update CHANGELOG.md 📖 2025-01-16 13:09:55 +00:00
Roman Kelesidis
096bb5124f
feat(announcer): Added is_numeric() checking for some fields (#1766) 2025-01-16 16:09:34 +03:00
belomaxorka
b36e4274cc Update CHANGELOG.md 📖 2025-01-16 12:26:34 +00:00
Roman Kelesidis
6a19323138
feat(announcer): Added event verifying (#1765) 2025-01-16 15:25:58 +03:00
belomaxorka
e0456bb792 Update CHANGELOG.md 📖 2025-01-16 12:10:41 +00:00
Roman Kelesidis
7b64b50819
feat(announcer): Block browser by checking the User-Agent (#1764) 2025-01-16 15:10:10 +03:00
belomaxorka
bf0de87679 Update CHANGELOG.md 📖 2025-01-16 12:03:01 +00:00
Roman Kelesidis
a98f8f102a
feat(announcer): Block User-Agent strings that are too long (#1763)
* feat(announcer): Block `User-Agent` strings that are too long

* Update announce.php
2025-01-16 15:02:39 +03:00
belomaxorka
9b1dbbbcb6 Update CHANGELOG.md 📖 2025-01-16 11:50:52 +00:00
Roman Kelesidis
1bc7e09ddb
feat(announcer): Blocking all ports lower then 1024 (#1762)
* feat(announcer): Blocking all ports lower then `1024`

* Update announce.php
2025-01-16 14:50:28 +03:00
belomaxorka
a1e0170770 Update CHANGELOG.md 📖 2025-01-15 12:37:38 +00:00
Roman Kelesidis
8fcc62d2a2
feat(installer): Fully show non-installed extensions (#1761) 2025-01-15 15:37:20 +03:00
belomaxorka
14ed0ce4ed Update CHANGELOG.md 📖 2025-01-15 12:25:24 +00:00
Roman Kelesidis
6697410c1d
misc(copyright): Updated copyright year (#1760) 2025-01-15 15:25:04 +03:00
belomaxorka
1a4efec82d Update CHANGELOG.md 📖 2025-01-15 11:25:33 +00:00
Roman Kelesidis
7f31022cfc
feat(cache): Checking if extensions are installed (#1759)
* feat(cache): Checking if extensions are installed

* Updated

* Update APCu.php

* Update Sqlite.php

* Update Sqlite.php

* Update APCu.php

* Update Sqlite.php

* Update APCu.php

* Updated

* Update APCu.php

* Update Redis.php
2025-01-15 14:25:16 +03:00
belomaxorka
0aab040080 Update CHANGELOG.md 📖 2025-01-15 10:39:52 +00:00
Roman Kelesidis
48ab52ac86
feat(installer): More explanations (#1758) 2025-01-15 13:39:35 +03:00
belomaxorka
ae236f023c Update CHANGELOG.md 📖 2025-01-15 10:33:58 +00:00
Roman Kelesidis
4b0d270c89
feat: Used TORRENT_MIMETYPE constant instead of hardcoded string (#1757) 2025-01-15 13:33:42 +03:00
belomaxorka
1122c603dd Update CHANGELOG.md 📖 2025-01-14 08:26:50 +00:00
Roman Kelesidis
262b8872a5
feat(installer): Check Composer dependencies after installing (#1756) 2025-01-14 15:26:30 +07:00
belomaxorka
800e87e7c0 Update CHANGELOG.md 📖 2025-01-14 06:57:02 +00:00
Roman Kelesidis
55d4670483
misc(cliff): Changed emoji for dependencies (#1755) 2025-01-14 13:56:47 +07:00
belomaxorka
208c55a3d0 Update CHANGELOG.md 📖 2025-01-14 06:51:04 +00:00
dependabot[bot]
ce32031a0f
Composer(deps): Bump php-curl-class/php-curl-class from 11.0.0 to 11.0.1 (#1753)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 11.0.0 to 11.0.1.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/11.0.0...11.0.1)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2025-01-14 13:50:44 +07:00
belomaxorka
1482d09e42 Update CHANGELOG.md 📖 2025-01-14 06:50:15 +00:00
dependabot[bot]
f63d15c49e
Composer(deps): Bump bugsnag/bugsnag from 3.29.1 to 3.29.2 (#1752)
Bumps [bugsnag/bugsnag](https://github.com/bugsnag/bugsnag-php) from 3.29.1 to 3.29.2.
- [Release notes](https://github.com/bugsnag/bugsnag-php/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-php/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-php/compare/v3.29.1...v3.29.2)

---
updated-dependencies:
- dependency-name: bugsnag/bugsnag
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-14 13:50:05 +07:00
belomaxorka
d08a03637b Update CHANGELOG.md 📖 2025-01-14 06:49:59 +00:00
Roman Kelesidis
fd6f1f86a5
feat(installer): More explanations (#1754) 2025-01-14 13:49:42 +07:00
belomaxorka
820739a9ef Update CHANGELOG.md 📖 2025-01-14 06:19:50 +00:00
Roman Kelesidis
1f3b629e9c
fix(debug): Disabled Bugsnag reporting on local environment (#1751) 2025-01-14 13:19:32 +07:00
belomaxorka
a7c30973d9 Update CHANGELOG.md 📖 2025-01-14 06:11:33 +00:00
Roman Kelesidis
3e850ac724
docs: Minor improvements (#1750) 2025-01-14 13:11:19 +07:00
belomaxorka
21a4756ba3 Update CHANGELOG.md 📖 2025-01-14 06:07:26 +00:00
Roman Kelesidis
a1c519d938
fix(installer): Missing gd extension (#1749) 2025-01-14 13:07:10 +07:00
belomaxorka
12cb1ee2a6 Update CHANGELOG.md 📖 2025-01-11 10:25:41 +00:00
Roman Kelesidis
61e55925f3
misc(cliff): Use blockquote for notice (#1748) 2025-01-11 13:25:26 +03:00
belomaxorka
12aef379dd Update CHANGELOG.md 📖 2025-01-11 10:18:03 +00:00
Roman Kelesidis
4936af7d3d
misc(cliff): Fixed typo (#1747) 2025-01-11 13:17:47 +03:00
belomaxorka
f5b4d6bbf6 Update CHANGELOG.md 📖 2025-01-11 10:14:09 +00:00
Roman Kelesidis
85395be5e7
misc(cliff): Notice about previous changelog file (#1746) 2025-01-11 13:13:52 +03:00
belomaxorka
a36ab991fb Update CHANGELOG.md 📖 2025-01-11 10:07:29 +00:00
Roman Kelesidis
0d93b2c768
feat(installer): Create config.local.php on local environment (#1745)
* feat(installer): Create `config.local.php` on local environment

* Update install.php
2025-01-11 13:07:13 +03:00
belomaxorka
2465d7944a Update CHANGELOG.md 📖 2025-01-11 09:20:32 +00:00
Roman Kelesidis
4f1c7e40d8
fix(bb_die): HTML characters converting (#1744) 2025-01-11 12:20:15 +03:00
belomaxorka
1df215985e Update CHANGELOG.md 📖 2025-01-10 05:26:04 +00:00
Roman Kelesidis
254dca2b27 misc: Update cliff.toml 2025-01-10 12:25:42 +07:00
belomaxorka
7b342424a1 Update CHANGELOG.md 📖 2025-01-10 05:10:56 +00:00
Roman Kelesidis
e73d65011f
misc: Minor improvements (#1743) 2025-01-10 12:10:38 +07:00
belomaxorka
416529b4be Update CHANGELOG.md 📖 2025-01-10 03:26:50 +00:00
Roman Kelesidis
7e3601e63a
misc: Enabled $bb_cfg['integrity_check'] by defaul (#1742) 2025-01-10 10:26:32 +07:00
Roman Kelesidis
fe11f9ddd5 misc: change version in legacy-changes.txt 2025-01-10 10:07:14 +07:00
Roman Kelesidis
6eda91d0dc misc: removed changelog 2025-01-10 10:04:39 +07:00
Roman Kelesidis
685dd919b8 misc: v2.4.5-rc.2 release preparation 2025-01-10 10:03:19 +07:00
belomaxorka
89e791a208 Update CHANGELOG.md 📖 2025-01-10 02:58:41 +00:00
Roman Kelesidis
cfeec4f88e test: update cliff.tom 2025-01-10 09:58:19 +07:00
belomaxorka
1e3158dcb1 Update CHANGELOG.md 📖 2025-01-10 02:53:36 +00:00
Roman Kelesidis
a8473d186c Merge branch 'master' of https://github.com/torrentpier/torrentpier 2025-01-10 09:52:58 +07:00
Roman Kelesidis
44007d8d77 doc: renamed CHANGELOG_OLD.md to HISTORY.md 2025-01-10 09:52:47 +07:00
belomaxorka
2f5e4a931e Update CHANGELOG.md 📖 2025-01-10 02:50:13 +00:00
belomaxorka
c1dd214640 Update CHANGELOG.md 📖 2025-01-10 02:49:50 +00:00
belomaxorka
7e4a993165 Update CHANGELOG.md 📖 2025-01-10 02:49:32 +00:00
belomaxorka
e0a000d2e0 Update CHANGELOG.md 📖 2025-01-10 02:49:13 +00:00
belomaxorka
0e76c441df Update CHANGELOG.md 📖 2025-01-10 02:48:56 +00:00
Roman Kelesidis
4403f4bc3d misc(cliff): added tag_pattern param 2025-01-10 09:48:32 +07:00
belomaxorka
f3e68d5b3f Update CHANGELOG.md 📖 2025-01-10 02:28:47 +00:00
Roman Kelesidis
2846e508c7 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2025-01-10 09:28:19 +07:00
Roman Kelesidis
4006d5a9f9 doc: update changelog 2025-01-10 09:27:37 +07:00
belomaxorka
67f6b7ebab Update CHANGELOG.md 📖 2025-01-10 02:26:25 +00:00
belomaxorka
46fc0b39ac Update CHANGELOG.md 📖 2025-01-10 02:26:04 +00:00
belomaxorka
501a41f2d5 Update CHANGELOG.md 📖 2025-01-10 02:25:43 +00:00
Roman Kelesidis
efcdb0deed misc: updated cliff.toml 2025-01-10 09:25:19 +07:00
belomaxorka
c6a14bbc17 Update CHANGELOG.md 📖 2025-01-10 01:36:07 +00:00
Roman Kelesidis
d50490caca Revert "Update changelog.yml"
This reverts commit 2406fc7d12.
2025-01-10 00:56:20 +07:00
Roman Kelesidis
2406fc7d12 Update changelog.yml 2025-01-10 00:54:43 +07:00
Roman Kelesidis
77bcff6652 Revert "Update changelog.yml"
This reverts commit 94b4d2812c.
2025-01-10 00:53:26 +07:00
Roman Kelesidis
afd5e8e3f2 Revert "Update changelog.yml"
This reverts commit 2484b2f335.
2025-01-10 00:53:19 +07:00
Roman Kelesidis
49d569659c Revert "Update changelog.yml"
This reverts commit 21849eca1f.
2025-01-10 00:53:11 +07:00
Roman Kelesidis
21849eca1f Update changelog.yml 2025-01-10 00:52:27 +07:00
Roman Kelesidis
2484b2f335 Update changelog.yml 2025-01-10 00:47:39 +07:00
Roman Kelesidis
94b4d2812c Update changelog.yml 2025-01-10 00:42:34 +07:00
Roman Kelesidis
e53d3b3b9b misc(night builder): Update upload-artifact to @v4 2025-01-10 00:30:47 +07:00
Roman Kelesidis
4b1755706a Update cliff.toml 2025-01-10 00:26:42 +07:00
Roman Kelesidis
d092db307b Update cliff.toml 2025-01-10 00:22:44 +07:00
Roman Kelesidis
8b0566d80a Revert "Update changelog.yml"
This reverts commit 63508ab786.
2025-01-10 00:10:00 +07:00
Roman Kelesidis
63508ab786 Update changelog.yml 2025-01-10 00:08:59 +07:00
Roman Kelesidis
04249391cc Update changelog.yml 2025-01-09 23:34:55 +07:00
Roman Kelesidis
1645a8622a Update changelog.yml 2025-01-09 23:34:14 +07:00
Roman Kelesidis
b83f7621ae Update changelog.yml 2025-01-09 22:43:47 +07:00
Roman Kelesidis
0051638a5d Update changelog generator 2025-01-09 22:33:56 +07:00
Roman Kelesidis
b94f7fb77e Update cliff.toml 2025-01-09 22:28:32 +07:00
Roman Kelesidis
11a85513d5 feat: Changelog generation 2025-01-09 22:23:11 +07:00
Roman Kelesidis
4cf78cc33d Update changelog.yml 2025-01-09 19:12:59 +07:00
Roman Kelesidis
3de586ddcf Update changelog.yml 2025-01-09 19:09:38 +07:00
Roman Kelesidis
f3ad932f30 Update changelog.yml 2025-01-09 19:05:01 +07:00
Roman Kelesidis
68d811fdc3 Update changelog.yml 2025-01-09 19:02:49 +07:00
Roman Kelesidis
a88dad5133 Update changelog.yml 2025-01-09 19:00:17 +07:00
Roman Kelesidis
3b023114e4 Update changelog.yml 2025-01-09 18:57:53 +07:00
Roman Kelesidis
f261b6e1f9 Update changelog.yml 2025-01-09 18:56:59 +07:00
Roman Kelesidis
28a132c713 Update changelog.yml 2025-01-09 18:56:15 +07:00
Roman Kelesidis
b8aaf5ac02 Update changelog.yml 2025-01-09 18:33:43 +07:00
Roman Kelesidis
ce2b13b1ae Update changelog.yml 2025-01-09 18:32:06 +07:00
Roman Kelesidis
19cd8f65f7 Changelog autogeneration update 2025-01-09 18:13:14 +07:00
Roman Kelesidis
026f27ee28 Added changelog auto generation 2025-01-09 17:54:40 +07:00
Roman Kelesidis
1457d739dc Update build.yml 2025-01-09 00:09:22 +07:00
Roman Kelesidis
dcb6446b46 build.yml: Fixed deprecated echo ::set-output` 2025-01-09 00:04:03 +07:00
Roman Kelesidis
1fbdf885a4 Update build.yml 2025-01-08 23:53:02 +07:00
Roman Kelesidis
8e3ad5f69f Update README.md 2025-01-08 23:03:09 +07:00
Roman Kelesidis
0f3e581699 Update build.yml 2025-01-08 22:59:37 +07:00
Roman Kelesidis
2c627f088b Update build.yml 2025-01-08 22:57:02 +07:00
Roman Kelesidis
024fbea0e5 Create nightly auto-builder 2025-01-08 22:38:24 +07:00
Roman Kelesidis
f4070215bc
Minor improvements (#1739)
* Minor improvements

* Update Ajax.php

* Update CHANGELOG.md
2025-01-08 15:34:08 +07:00
Roman Kelesidis
4cc6fa0e6c
Removed sitemap ping because is deprecated (#1738)
* Removed sitemap ping because is deprecated

* Update CHANGELOG.md

* Update Sitemap.php

* Update main.php

* Update config.php

* Update sitemap.php

* Updated

* Update admin_sitemap.tpl

* Update admin_sitemap.tpl

* Update admin_sitemap.tpl
2025-01-08 14:16:39 +07:00
Roman Kelesidis
7a84cdd5c3
Added IndexNow support 🤖 (#1736)
* Added IndexNow support 🤖

* Update CHANGELOG.md

* Updated

* Update IndexNowHelper.php

* Update board_maintenance.php

* Update board_maintenance.php

* Updated

* Updated

* Update Post.php

* Updated

* Update Post.php

* Update IndexNow.php

* Updated

* Updated

* Update config.php

* Update config.php
2025-01-06 23:32:58 +07:00
Roman Kelesidis
e75d2859c3
Replaced some string functions to mbstring alternatives (#1735)
* Replaced some string functions to mbstring alternatives

* Update CHANGELOG.md

* Update admin_attach_cp.php

* Update CHANGELOG.md
2025-01-05 14:42:03 +07:00
Roman Kelesidis
e5aaaf4abd
Use DEFAULT_CHARSET constant instead of hardcoded string (#1734)
* Use `DEFAULT_CHARSET` constant instead of hardcoded string

* Update CHANGELOG.md

* Update defines.php

* Update info.php

* Updated

* Update page_header.tpl

* Update index.tpl

* Update index.tpl
2025-01-05 00:57:20 +07:00
Roman Kelesidis
616a19351f
Replaced some html_entity_decode to engine's built-in function (#1733)
* Replaced some html_entity_decode to engine's built-in function

* Updated
2025-01-05 00:19:14 +07:00
Roman Kelesidis
fd7dc7ac95
Created VersionHelper.php (#1731)
* Created `VersionHelper.php`

* Update VersionHelper.php

* Update CHANGELOG.md
2025-01-02 12:34:13 +07:00
Roman Kelesidis
768837608b
Minor improvements (#1730)
* Minor improvements

* Updated

* Updated

* Update common.php

* Update common.php

* Updated

* Revert "Updated"

This reverts commit 204d196ba5.

* Revert "Update common.php"

This reverts commit eb24dc1c85.

* Updated

* Updated

* Update build_check_updates.php

* Update build_check_updates.php

* Update common.php

* Update build_check_updates.php

* Updated

* Update CHANGELOG.md
2025-01-01 20:52:34 +07:00
Roman Kelesidis
4a076a09cc
Minor improvements (#1728)
* Minor improvements

* Update CHANGELOG.md

* Update filelist.tpl

* Update Torrent.php
2025-01-01 03:19:54 +07:00
Roman Kelesidis
2e5b157ede
Drop Ocelot announcer support 🫡 (#1727)
* Drop Ocelot announcer support

* Update tr_complete_count.php

* Delete ocelot.sql

* Update Torrent.php

* Update Torrent.php

* Update Torrent.php

* Update Torrent.php

* Update CHANGELOG.md

* Update tr_make_snapshot.php

* Update tr_make_snapshot.php

* Update tr_make_snapshot.php

* Update tr_make_snapshot.php
2025-01-01 00:21:06 +07:00
Roman Kelesidis
ba704efba2
Some updater improvements (#1725)
* Some updater improvements

* Update CHANGELOG.md

* Updated

* Updated

* Update index.tpl
2024-12-31 13:07:19 +07:00
Roman Kelesidis
11f5b50760
Added TorrentPier instance hash generation (#1726)
* Added `TorrentPier instance hash` generation

* Update CHANGELOG.md
2024-12-31 12:16:59 +07:00
Roman Kelesidis
8aa1bd77d7
Added m4a extension support in M3U playback (#1724)
* Added `m4a` extension support in M3U playback

* Update CHANGELOG.md
2024-12-29 23:28:09 +07:00
Roman Kelesidis
b8343598ca Update CHANGELOG.md 2024-12-29 11:10:03 +07:00
dependabot[bot]
88c964219e
Composer(deps): Bump egulias/email-validator from 4.0.2 to 4.0.3 (#1723)
Bumps [egulias/email-validator](https://github.com/egulias/EmailValidator) from 4.0.2 to 4.0.3.
- [Release notes](https://github.com/egulias/EmailValidator/releases)
- [Commits](https://github.com/egulias/EmailValidator/compare/4.0.2...4.0.3)

---
updated-dependencies:
- dependency-name: egulias/email-validator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-27 14:01:56 +07:00
Roman Kelesidis
1914e7be30
Fixed issues with searching by username (#1722)
* Fixed issues with searching by username

* Update admin_user_search.php

* Update CHANGELOG.md
2024-12-21 19:15:13 +07:00
Roman Kelesidis
a6035f0cc1
Fixed searching by username in memberlist.php (#1721)
* Fixed searching by username in `memberlist.php`

* Update memberlist.php

* Update memberlist.php

* Update CHANGELOG.md

* Update memberlist.php
2024-12-21 19:05:32 +07:00
Roman Kelesidis
70ecc3462d
Minor improvements (#1720)
* Minor improvements

* Update CHANGELOG.md
2024-12-21 15:42:33 +07:00
Roman Kelesidis
edab2300d3
Minor improments (#1719)
* Minor improments

* Update CHANGELOG.md

* Updated

* Update common.php
2024-12-20 20:29:06 +07:00
Roman Kelesidis
8a0cd5cb84
[PHP 8.4] Fixed some deprecations (#1718)
* [PHP 8.4] Fixed some deprecations

* Update Post.php

* Update Common.php

* Update CHANGELOG.md

* Updated

* Updated
2024-12-19 00:37:28 +07:00
Roman Kelesidis
86e4b04333
Minor improvements (#1717)
* Minor improvements

* Update callseed.php

* Update CHANGELOG.md

* Update index_data.php
2024-12-19 00:06:59 +07:00
Roman Kelesidis
1d51a2af84 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-12-14 20:12:20 +07:00
Roman Kelesidis
b6267ba4fd Update CHANGELOG.md 2024-12-14 20:12:04 +07:00
Yury Pikhtarev
5b19aa003a
New Crowdin updates (#1716)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-12-14 20:10:43 +07:00
Yury Pikhtarev
4046d5c141
New Crowdin updates (#1714)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-12-14 15:42:11 +07:00
Roman Kelesidis
ce138921d8
Minor improvements (#1715)
* Minor improvements

* Updated

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-12-14 15:38:33 +07:00
Roman Kelesidis
b27fa94ee8
Minor improvements (#1713)
* Minor improvements

* Update init_bb.php

* Updated

* Revert "Updated"

This reverts commit af83788c22.

* Update CHANGELOG.md
2024-12-14 15:33:41 +07:00
Roman Kelesidis
fd951a27fa
Show torrent's announcers list in filelist.php page (#1708)
* Show torrent's announcers list in `filelist.php` page

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update filelist.php

* Updated

* Updated

* Updated

* Updated

* Updated

* Update filelist.tpl
2024-12-14 15:20:44 +07:00
Roman Kelesidis
60899a0184
[Configurable] Show magnet-links for guests (#1712)
* [Configurable] Show magnet links for guests

* Update mysql.sql

* Update legacy-changes.txt

* Updated

* Update main.php

* Update functions.php

* Updated

* Update viewforum.tpl

* Update viewtopic_attach.tpl

* Update viewforum.tpl

* Update CHANGELOG.md
2024-12-14 15:03:28 +07:00
Roman Kelesidis
ea1e533a5a
Set cursor: pointer; for input[type=file] (#1711)
* Set `cursor: pointer;` for `input[type=file]`

* Update CHANGELOG.md
2024-12-13 18:00:30 +07:00
Roman Kelesidis
ee8751076a
Set cursor: pointer; for buttons, inputs (buttons) (#1710)
* Set `cursor: pointer;` for buttons, inputs (buttons)

* Update CHANGELOG.md
2024-12-13 17:56:44 +07:00
Roman Kelesidis
e10341355b Removed techstack 2024-12-12 23:07:43 +07:00
Yury Pikhtarev
33cb03e8ce
New translations main.php (Ukrainian) (#1706) 2024-12-10 00:05:53 +07:00
Roman Kelesidis
6ecbb7284a
Minor improvements (#1705)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-12-10 00:05:36 +07:00
Yury Pikhtarev
d9c07424ef
New Crowdin updates (#1704)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations admin_send_email.html (Japanese)

* New translations admin_send_email.html (Chinese Traditional)

* New translations admin_send_email.html (Portuguese, Brazilian)

* New translations group_added.html (Spanish)

* New translations group_added.html (Japanese)

* New translations group_added.html (Chinese Traditional)

* New translations group_added.html (Thai)

* New translations group_approved.html (Spanish)

* New translations group_approved.html (Japanese)

* New translations group_approved.html (Chinese Traditional)

* New translations group_approved.html (Thai)

* New translations group_request.html (Chinese Traditional)

* New translations privmsg_notify.html (Spanish)

* New translations privmsg_notify.html (Japanese)

* New translations privmsg_notify.html (Chinese Traditional)

* New translations profile_send_email.html (Spanish)

* New translations profile_send_email.html (Japanese)

* New translations profile_send_email.html (Thai)

* New translations topic_notify.html (Spanish)

* New translations topic_notify.html (Chinese Traditional)

* New translations topic_notify.html (Thai)

* New translations user_activate.html (Spanish)

* New translations user_activate.html (Chinese Traditional)

* New translations user_activate_passwd.html (Spanish)

* New translations user_activate_passwd.html (Japanese)

* New translations user_activate_passwd.html (Chinese Traditional)

* New translations user_activate_passwd.html (Portuguese, Brazilian)

* New translations user_activate_passwd.html (Thai)

* New translations user_welcome.html (German)

* New translations user_welcome.html (Chinese Traditional)

* New translations user_welcome.html (Portuguese, Brazilian)

* New translations user_welcome.html (Thai)

* New translations user_welcome_inactive.html (Spanish)

* New translations user_welcome_inactive.html (Chinese Traditional)

* New translations user_welcome_inactive.html (Portuguese, Brazilian)

* New translations user_welcome_inactive.html (Thai)

* New translations copyright_holders.html (Chinese Traditional)

* New translations copyright_holders.html (Thai)

* New translations user_agreement.html (Thai)

* New translations main.php (Russian)

* Updated

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2024-12-09 22:55:46 +07:00
Roman Kelesidis
07f209156b Revert "Update main.php"
This reverts commit 70c0e5b7d9.
2024-12-09 17:58:26 +07:00
Roman Kelesidis
70c0e5b7d9
Update main.php 2024-12-09 01:39:07 +07:00
Roman Kelesidis
f1bf873be3 Release v2.4.5-rc.1 🦕 2024-12-09 00:08:54 +07:00
Roman Kelesidis
e7b284ef72
Minor improvements (#1703)
* Minor improvements

* Update CHANGELOG.md
2024-12-09 00:01:27 +07:00
Roman Kelesidis
9b15b5e0f1 Update CHANGELOG.md 2024-12-08 22:35:42 +07:00
Roman Kelesidis
27be6863fc Revert "Datastore improvements" 2024-12-08 22:29:55 +07:00
Roman Kelesidis
b8b52f4d05
Minor improvements (#1702)
* Minor improvements

* Update README.md

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update CHANGELOG.md
2024-12-08 22:19:48 +07:00
Roman Kelesidis
da5019cf81 Updated 2024-12-08 21:33:06 +07:00
Roman Kelesidis
f71deed544
Bring back DBG_USER (old debug method), fixed bugsnag handler (#1701)
* Rollback some changes

* Updated

* Updated

* Updated

* Update SqlDb.php

* Updated

* Update Ajax.php

* Update Redis.php

* Update Redis.php

* Update Memcached.php

* Update File.php

* Updated

* Updated

* Update CHANGELOG.md

* Update Sqlite.php

* Update SqlDb.php

* Update common.php

* Update Dev.php

* Update config.php

* Update User.php

* Update defines.php

* Updated

* Update User.php

* Update User.php

* Update User.php

* Update User.php

* Update config.php

* Update Dev.php

* Updated

* Update Dev.php

* Update Dev.php

* Update SqlDb.php

* Revert "Update SqlDb.php"

This reverts commit d7c05d85ec.

* Update Dev.php

* Update Dev.php

* Update Dev.php

* Update Dev.php

* Update CHANGELOG.md
2024-12-08 21:28:35 +07:00
Roman Kelesidis
83b465ddd2
Merged some fixes from new-attachments branch (#1700)
* Merged some fixes from `new-attachments` branch

* Update CHANGELOG.md
2024-12-07 20:29:21 +07:00
Roman Kelesidis
24e1658078 Update CHANGELOG.md 2024-12-07 12:37:07 +07:00
dependabot[bot]
f2ec1a1dfa
Composer(deps): Bump monolog/monolog from 3.8.0 to 3.8.1 (#1699)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.8.0...3.8.1)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-06 13:23:24 +07:00
Roman Kelesidis
4382ec514b
Added new constant TOR_TYPE_DEFAULT (#1698)
* Added new constant `TOR_TYPE_DEFAULT`

* Update tracker.php

* Update CHANGELOG.md
2024-12-02 23:43:36 +07:00
Roman Kelesidis
2ae9f72c1b
Make get_torrent_info() as public method for re-use (#1697)
* Make `get_torrent_info()` as public method for re-use

* Update CHANGELOG.md
2024-12-02 23:11:44 +07:00
Roman Kelesidis
47e8c9a7ee
Show torrent unregister action in log actions (#1696)
* Show torrent unregister action in log actions

* Update LogAction.php

* Update CHANGELOG.md

* Update main.php

* Update main.php
2024-12-02 18:11:52 +07:00
Roman Kelesidis
6f59d5fea6
Show torrent type (gold / silver) changes in actions log (#1689)
* Minor improvements

* Updated

* Update mod_action.php

* Update modcp.php

* Update change_torrent.php

* Updated

* Update change_torrent.php

* Update main.php

* Updated

* Update LogAction.php

* Update LogAction.php

* Update LogAction.php

* Update main.php

* Update change_torrent.php

* Update change_torrent.php

* Update change_torrent.php

* Updated

* Update CHANGELOG.md

* Update change_torrent.php
2024-12-02 01:22:58 +07:00
Roman Kelesidis
58e6ffac7f
Show torrent status changes in actions log (#1688)
* Show torrent status changes in actions log

* Updated

* Updated

* Update mod_action.php

* Update CHANGELOG.md
2024-12-01 22:11:37 +07:00
Roman Kelesidis
66e7db25bf
Fixed empty topic_id in log actions after topic rename (#1687)
* Fixed empty topic_id in log actions after topic rename

* Update CHANGELOG.md
2024-12-01 15:17:40 +07:00
Roman Kelesidis
46af8af60a Update checksums.md5 2024-11-28 17:30:30 +07:00
Roman Kelesidis
084295c57a
Minor improvements (#1686)
* Minor improvements

* Update index.php

* Update CHANGELOG.md
2024-11-28 17:24:15 +07:00
Roman Kelesidis
68ef591b82
Minor improvements (#1685)
* Minor improvements

* Update ffprobe_info.php

* Update ffprobe_info.php

* Update CHANGELOG.md
2024-11-28 01:07:44 +07:00
Roman Kelesidis
0cabfb5294
Changed database encoding to utf8mb4_unicode_ci (#1684)
* Minor improvements

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update CHANGELOG.md

* Update install.php

* Update install.php

* Updated

* Update CHANGELOG.md
2024-11-27 23:13:15 +07:00
Roman Kelesidis
7474635aed
Minor improvements (#1683)
* Minor improvements

* Update CHANGELOG.md

* Updated

* Updated

* Update page_header.tpl

* Update page_header.tpl

* Update README.md

* Update README.md

* Update README.md

* Update README.md
2024-11-25 20:05:43 +07:00
dependabot[bot]
5052a8fa97
Composer(deps): Bump claviska/simpleimage from 4.2.0 to 4.2.1 (#1682)
Bumps [claviska/simpleimage](https://github.com/claviska/SimpleImage) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/claviska/SimpleImage/releases)
- [Commits](https://github.com/claviska/SimpleImage/compare/4.2.0...4.2.1)

---
updated-dependencies:
- dependency-name: claviska/simpleimage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 14:43:05 +07:00
Roman Kelesidis
a09a57074d Update README.md 2024-11-24 14:39:23 +07:00
Roman Kelesidis
a5793a5b3f Update README.md 2024-11-24 14:30:33 +07:00
Roman Kelesidis
3a1a4a7967 Update README.md 2024-11-24 14:28:13 +07:00
Roman Kelesidis
0a033cb24e Update README.md 2024-11-24 14:25:51 +07:00
Roman Kelesidis
82e08ae48a
Update .env.example 2024-11-24 12:48:47 +07:00
Roman Kelesidis
ced34efb9f
Minor improvements (#1681)
* Minor improvements

* Update CHANGELOG.md
2024-11-22 16:19:37 +07:00
Roman Kelesidis
e9fad73bca
Minor improvements (#1679)
* Minor improvements

* Update viewtopic.php

* Revert "Update viewtopic.php"

This reverts commit 9cff1d7758.

* Update viewtopic.php

* Update CHANGELOG.md
2024-11-18 23:05:41 +07:00
Roman Kelesidis
9c39ab77d1
Update .gitignore 2024-11-17 14:01:08 +07:00
Roman Kelesidis
5eafc5918d Update CHANGELOG.md 2024-11-14 21:23:07 +07:00
dependabot[bot]
12d9269a9e
Composer(deps): Bump monolog/monolog from 3.7.0 to 3.8.0 (#1677)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.7.0...3.8.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-14 13:22:28 +07:00
Roman Kelesidis
4dcee993cc
Minor improvements (#1676)
* Minor improvements

* Update functions.php

* Update common.php

* Update init_bb.php

* Updated

* Update build_files_integrity.php

* Updated

* Update CHANGELOG.md

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update .gitignore

* Update legacy-changes.txt
2024-11-11 01:17:35 +07:00
Roman Kelesidis
e1f03e64dd
Minor improvements (#1675)
* Minor improvements

* Update

* Updated

* Update

* Updated

* Update viewtopic.tpl

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update CHANGELOG.md
2024-11-10 00:02:43 +07:00
Roman Kelesidis
c5b3d63221 Update README.md 2024-11-09 22:47:00 +07:00
Roman Kelesidis
0aaff66ef3
Minor improvements (#1674)
* Minor improvements

* Update CHANGELOG.md
2024-11-09 21:38:00 +07:00
Roman Kelesidis
baa1d32f94 Revert "Fixed incorrect page width on mobile devices" 2024-11-09 17:12:54 +07:00
Roman Kelesidis
a50c6601b4
Fixed broken torrent stats displaying (Part 2) (#1673)
* Fixed broken torrent stats displaying (Part 2)

* Update CHANGELOG.md

* Updated

* Revert "Updated"

This reverts commit e816be32df.

* Updated

* Update mysql.sql

* Update mysql.sql

* Revert "Fixed broken torrent stats displaying (Part 2)"

This reverts commit ce071d9fcf.

* Update Torrent.php

* Reapply "Fixed broken torrent stats displaying (Part 2)"

This reverts commit 3f713b8a45.

* Update register.php

* Updated
2024-11-09 13:27:37 +07:00
Roman Kelesidis
64409e607d
Fixed broken torrent stats displaying (#1672)
* Fixed broken torrent stats displaying

* Updated

* Update CHANGELOG.md
2024-11-09 00:01:30 +07:00
Roman Kelesidis
d9a8adbaaf
Invites: Permanent invites feature (#1670)
* Invites: Permanent invites feature

* Update config.php

* Update config.php

* Update CHANGELOG.md

* Update config.php
2024-11-05 00:06:09 +07:00
Roman Kelesidis
7a209bc615
Updated modern-normalize to v3.0.1 (#1669)
* Updated `modern-normalize` to `v3.0.1`

* Update CHANGELOG.md
2024-10-29 14:21:08 +07:00
Roman Kelesidis
055a6e53ca
Minor improvements (#1658)
* Minor improvements

* Update install.php

* Update install.php

* Update .gitignore

* Update admin_cron.php

* Update Upload.php

* Update CHANGELOG.md
2024-10-19 11:36:05 +07:00
Roman Kelesidis
0587f7a035
WIP: Added avif images support 🌄 (#1660)
* WIP: Added avif images support

* Update CHANGELOG.md

* Update admin_ranks.php
2024-10-19 11:25:29 +07:00
Roman Kelesidis
04e1adf4ba
Improved BitTorrent clients ban functionality (#1657)
* Minor improvements

* Update config.php

* Update config.php

* Update config.php

* Update config.php

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update announce.php

* Update main.php

* Update CronHelper.php

* Updated

* Update CHANGELOG.md

* Update announce.php

* Revert "Update announce.php"

This reverts commit 595784acd6.

* Update announce.php

* Update announce.php
2024-10-14 20:41:22 +07:00
Roman Kelesidis
8e43fde956
Fixed incorrect page width on mobile devices (#1653)
* Fixed incorrect page width on mobile devices

* Update top.css
2024-10-09 23:07:31 +07:00
dependabot[bot]
d6aff3bf95
Composer(deps): Bump league/flysystem from 3.29.0 to 3.29.1 (#1656)
Bumps [league/flysystem](https://github.com/thephpleague/flysystem) from 3.29.0 to 3.29.1.
- [Release notes](https://github.com/thephpleague/flysystem/releases)
- [Changelog](https://github.com/thephpleague/flysystem/blob/3.x/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/flysystem/compare/3.29.0...3.29.1)

---
updated-dependencies:
- dependency-name: league/flysystem
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-09 22:40:02 +07:00
Roman Kelesidis
04fff8ed4e Update CHANGELOG.md 2024-10-08 20:21:48 +07:00
Yury Pikhtarev
a510b4f676
New Crowdin updates (#1655)
* New translations main.php (Russian)

* New translations main.php (Ukrainian)

* New translations main.php (Ukrainian)
2024-10-08 19:53:43 +07:00
Yury Pikhtarev
67b82ed29b
New Crowdin updates (#1654)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-10-05 14:42:31 +07:00
Roman Kelesidis
408635cd52
Added ability to set country name manually (#1652)
* Minor improvements

* Updated

* Revert "Updated"

This reverts commit 927e085cc0.

* Update CHANGELOG.md

* Update usercp_register.tpl

* Updated

* Updated

* Updated

* Update usercp_register.tpl

* Update usercp_register.tpl

* Update usercp_register.tpl

* Updated

* Update CHANGELOG.md

* Update usercp_register.tpl
2024-10-05 14:02:35 +07:00
Roman Kelesidis
ca81d99a71
Minor improvements (#1651)
* Minor improvements

* Update main.js

* Update main.js

* Update CHANGELOG.md
2024-10-03 12:51:27 +07:00
dependabot[bot]
cd339412cf
Composer(deps): Bump league/flysystem from 3.28.0 to 3.29.0 (#1650)
Bumps [league/flysystem](https://github.com/thephpleague/flysystem) from 3.28.0 to 3.29.0.
- [Release notes](https://github.com/thephpleague/flysystem/releases)
- [Changelog](https://github.com/thephpleague/flysystem/blob/3.x/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/flysystem/compare/3.28.0...3.29.0)

---
updated-dependencies:
- dependency-name: league/flysystem
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-03 12:38:09 +07:00
Roman Kelesidis
3e9f4006c4 Revert "Refactoring: Created constants for datetime values (#1648)"
This reverts commit 6eca29714a.
2024-09-27 18:32:23 +07:00
Roman Kelesidis
6eca29714a
Refactoring: Created constants for datetime values (#1648)
* Refactoring: Created constants for datetime values

* Updated

* Updated

* Update tracker.php

* Update tracker.php

* Update index.php

* Update admin_log.php

* Update viewtopic.php

* Updated

* Update Poll.php

* Updated

* Updated

* Update viewtopic.php

* Update User.php

* Update privmsg.php

* Update poll.php

* Update tr_make_snapshot.php

* Update displaying_torrent.php

* Update CHANGELOG.md
2024-09-27 18:22:41 +07:00
Roman Kelesidis
4fe467e64a Update CHANGELOG.md 2024-09-26 19:20:09 +07:00
dependabot[bot]
7f05b01439
Composer(deps): Bump filp/whoops from 2.15.4 to 2.16.0 (#1647)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.15.4 to 2.16.0.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.15.4...2.16.0)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-26 19:15:29 +07:00
dependabot[bot]
d9d01136e4
Composer(deps): Bump arokettu/bencode from 4.2.1 to 4.3.0 (#1646)
Bumps [arokettu/bencode](https://github.com/arokettu/bencode) from 4.2.1 to 4.3.0.
- [Release notes](https://github.com/arokettu/bencode/releases)
- [Changelog](https://github.com/arokettu/bencode/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/bencode/compare/4.2.1...4.3.0)

---
updated-dependencies:
- dependency-name: arokettu/bencode
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-26 19:15:08 +07:00
Roman Kelesidis
a3e48e3e92
Minor improvements (#1641)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update memberlist.php
2024-09-24 17:04:49 +07:00
Yury Pikhtarev
8dca16bd50
New translations main.php (Russian) (#1640) 2024-09-22 13:27:35 +07:00
Roman Kelesidis
edce8af85c Update CHANGELOG.md 2024-09-22 12:40:07 +07:00
Yury Pikhtarev
99970df0f5
New Crowdin updates (#1639)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-09-22 12:38:54 +07:00
Roman Kelesidis
29eb01b958
Disabled resizing for textarea tag (#1638)
* Disabled resizing for textarea tag

* Update CHANGELOG.md
2024-09-19 21:12:03 +07:00
Roman Kelesidis
001c210217
Minor improvements (#1633)
* Minor improvements

* Update CHANGELOG.md

* Update filelist.php

* Update ffprobe_info.php

* Updated

* Update announce.php

* Update announce.php

* Update ffprobe_info.php

* Updated

* Update ffprobe_info.php

* Update ffprobe_info.php

* Updated

* Update common.php

* Update common.php

* Revert "Update common.php"

This reverts commit 3793263ff0.

* Revert "Update common.php"

This reverts commit 3911e72dba.

* Update common.php

* Updated

* Update playback_m3u.tpl

* Update ffprobe_info.php

* Update playback_m3u.php

* Update dl.php

* Update dl.php

* Updated

* Update dl.php

* Update playback_m3u.php

* Revert "Update playback_m3u.php"

This reverts commit 8cf6e9a041.

* Revert "Update dl.php"

This reverts commit 7c11cc385b.

* Revert "Updated"

This reverts commit 9c004f0651.

* Revert "Update dl.php"

This reverts commit 26d5feffa5.

* Revert "Update dl.php"

This reverts commit 261f8d3e62.

* Update playback_m3u.php

* Updated

* Update dl.php

* Update dl.php

* Update CHANGELOG.md
2024-09-19 20:57:36 +07:00
dependabot[bot]
f5a9490dfe
Composer(deps): Bump josantonius/cookie from 2.0.6 to 2.0.7 (#1637)
Bumps [josantonius/cookie](https://github.com/josantonius/php-cookie) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/josantonius/php-cookie/releases)
- [Changelog](https://github.com/josantonius/php-cookie/blob/main/CHANGELOG.md)
- [Commits](https://github.com/josantonius/php-cookie/compare/v2.0.6...v2.0.7)

---
updated-dependencies:
- dependency-name: josantonius/cookie
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-12 19:12:04 +07:00
Roman Kelesidis
13107d1edd Update CHANGELOG.md 2024-09-01 16:00:00 +07:00
Yury Pikhtarev
c5f1a1a1fb
New translations main.php (Russian) (#1632) 2024-09-01 02:27:55 +07:00
Yury Pikhtarev
c68236439f
New Crowdin updates (#1631)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-09-01 01:29:35 +07:00
Roman Kelesidis
383fa7f9b6
Getting ffprobe data from TorrServer API (#1628)
* Minor improvements

* Update posting_tpl.tpl

* Updated

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Updated

* Updated

* Updated

* Update playback_m3u.php

* Update init_bb.php

* Updated

* Update playback_m3u.php

* Update displaying_torrent.php

* Updated

* Update playback_m3u.tpl

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Updated

* Update playback_m3u.php

* Update playback_m3u.php

* Update playback_m3u.php

* Updated

* Updated

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update playback_m3u.php

* Updated

* Updated

* Update playback_m3u.php

* Update playback_m3u.tpl

* Update playback_m3u.php

* Updated

* Update playback_m3u.php

* Updated

* Update playback_m3u.php

* Update playback_m3u.tpl

* Updated

* Update playback_m3u.php

* Update playback_m3u.tpl

* Updated

* Updated

* Update playback_m3u.php

* Update playback_m3u.php

* Update playback_m3u.php

* Update playback_m3u.php

* Update playback_m3u.php

* Update playback_m3u.php

* Updated

* Updated

* Update TorrServerAPI.php

* Revert "Update TorrServerAPI.php"

This reverts commit 9726d0d019.

* Update Ajax.php

* Updated

* Update playback_m3u.tpl

* Update playback_m3u.tpl

* Update playback_m3u.tpl

* Update playback_m3u.php

* Updated

* Updated

* Updated

* Updated

* Update playback_m3u.tpl

* Updated

* Updated

* Revert "Updated"

This reverts commit 5431f1fa51.

* Reapply "Updated"

This reverts commit 61c49dba62.

* Updated

* Update playback_m3u.tpl

* Update TorrServerAPI.php

* Updated

* Update playback_m3u.tpl

* Updated

* Update playback_m3u.php

* Update playback_m3u.tpl

* Update playback_m3u.tpl

* Update playback_m3u.php

* Updated

* Updated

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update Ajax.php

* Update ffprobe_info.php

* Update ffprobe_info.php

* Update ffprobe_info.php

* Update TorrServerAPI.php

* Update CHANGELOG.md
2024-09-01 00:25:38 +07:00
Yury Pikhtarev
4472a3e295
New translations main.php (Russian) (#1630) 2024-08-31 02:15:43 +07:00
Roman Kelesidis
00e73d0db1 Update CHANGELOG.md 2024-08-30 23:33:15 +07:00
Yury Pikhtarev
a52deb045e
New Crowdin updates (#1629)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-30 23:28:35 +07:00
Roman Kelesidis
2657056ead
Minor improvements (#1627)
* Minor improvements

* Update playback_m3u.tpl

* Update playback_m3u.php

* Updated

* Update CHANGELOG.md
2024-08-30 22:10:25 +07:00
Roman Kelesidis
d5557c4a43 Update CHANGELOG.md 2024-08-30 14:47:09 +07:00
Yury Pikhtarev
f4336d4a8a
New translations main.php (Russian) (#1626) 2024-08-29 23:15:41 +07:00
Yury Pikhtarev
4236a23369
New Crowdin updates (#1625)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-29 22:11:41 +07:00
Roman Kelesidis
c3d6d62a82
Improved TorrServer integration (#1624)
* Improved TorrServer integration

* Updated

* Update showm3u.php

* Update showm3u.tpl

* Updated

* Update showm3u.php

* Updated

* Updated

* Updated

* Update showm3u.php

* Update showm3u.tpl

* Update main.php

* Updated

* Update show_m3u.php

* Update

* Update show_m3u.tpl

* Update show_m3u.tpl

* Updated

* Updated

* Update displaying_torrent.php

* Update show_m3u.php

* Updated

* Updated

* Update show_m3u.tpl

* Updated

* Update show_m3u.php

* Updated

* Update show_m3u.php

* Update show_m3u.php

* Update show_m3u.php

* Updated

* Updated

* Update show_m3u.tpl

* Updated

* Update show_m3u.tpl

* Update main.php

* Updated

* Updated

* Updated

* Update playback_m3u.php

* Update playback_m3u.tpl

* Update playback_m3u.tpl

* Update CHANGELOG.md
2024-08-29 21:51:30 +07:00
Roman Kelesidis
658bfe24b5
Some improvements for TorrServer API (#1623)
* Some improvements for TorrServer API

* Update CHANGELOG.md
2024-08-29 01:06:29 +07:00
Roman Kelesidis
accc24a969 Update README.md 2024-08-28 23:11:14 +07:00
Roman Kelesidis
47255b303d Update README.md 2024-08-28 23:06:16 +07:00
Roman Kelesidis
535d02a611 Update README.md 2024-08-28 23:01:25 +07:00
Roman Kelesidis
db7bd79867 Update README.md 2024-08-28 22:59:15 +07:00
Roman Kelesidis
616f08379e Update README.md 2024-08-28 22:49:03 +07:00
Roman Kelesidis
c322bca938
Fixed template caching issue (#1622)
* Minor improvements

* Update CHANGELOG.md

* Update Template.php

* Update Template.php

* Revert "Update Template.php"

This reverts commit c0284ccd1c.

* Revert "Update Template.php"

This reverts commit 81837634dc.

* Update Template.php

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-08-28 22:42:13 +07:00
Roman Kelesidis
6bcf69cfb8
Minor improvements (#1615)
* Minor improvements

* Update CHANGELOG.md
2024-08-27 14:22:50 +07:00
Roman Kelesidis
58a28e83c2
BBCode: Fixed relative links working (#1613)
* Minor improvements

* Update BBCode.php

* Update BBCode.php

* Update BBCode.php

* Update BBCode.php

* Update CHANGELOG.md
2024-08-27 13:19:41 +07:00
Roman Kelesidis
8d1d9cbb01
Minor improvements (#1612)
* Minor improvements

* Update CHANGELOG.md

* Update README.md

* Update install.php

* Update install.php
2024-08-26 15:37:31 +07:00
Roman Kelesidis
7a67fefd4d
Minor improvements (#1611)
* Minor improvements

* Update displaying_torrent.php

* Update TorrServerAPI.php

* Update CHANGELOG.md
2024-08-24 22:09:27 +07:00
dependabot[bot]
ee8d9d5cd2
Composer(deps): Bump php-curl-class/php-curl-class from 10.0.1 to 11.0.0 (#1610)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 10.0.1 to 11.0.0.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/10.0.1...11.0.0)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-23 18:11:07 +07:00
dependabot[bot]
995e1fc970
Composer(deps): Bump php-curl-class/php-curl-class from 10.0.0 to 10.0.1 (#1609)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 10.0.0 to 10.0.1.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/10.0.0...10.0.1)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-23 01:34:55 +07:00
Roman Kelesidis
d8d872c451 Update CHANGELOG.md 2024-08-21 13:47:00 +07:00
dependabot[bot]
d59b9f5512
Composer(deps): Bump php-curl-class/php-curl-class from 9.19.2 to 10.0.0 (#1608)
Bumps [php-curl-class/php-curl-class](https://github.com/php-curl-class/php-curl-class) from 9.19.2 to 10.0.0.
- [Release notes](https://github.com/php-curl-class/php-curl-class/releases)
- [Changelog](https://github.com/php-curl-class/php-curl-class/blob/master/CHANGELOG.md)
- [Commits](https://github.com/php-curl-class/php-curl-class/compare/9.19.2...10.0.0)

---
updated-dependencies:
- dependency-name: php-curl-class/php-curl-class
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-21 13:35:52 +07:00
Yury Pikhtarev
14790c66d4
New translations main.php (Russian) (#1607) 2024-08-21 04:08:12 +07:00
Yury Pikhtarev
1861a25139
New Crowdin updates (#1606)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-21 02:48:50 +07:00
Roman Kelesidis
82e7552a9e
Minor improvements (#1605)
* Minor improvements

* Updated

* Update functions_delete.php

* Update attach_maintenance.php

* Update attach_maintenance.php

* Update config.php

* Updated

* Update viewtopic_attach.tpl

* Updated

* Update CHANGELOG.md
2024-08-21 01:41:57 +07:00
Roman Kelesidis
c6b4672734
Added TorrServer instance support! 🎞 (#1603)
* Added integration with TorrServe 🎞

* Updated

* Updated

* Update functions.php

* Updated

* Update functions.php

* Update functions.php

* Updated

* Update TorrServerAPI.php

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Updated

* Updated

* Update config.php

* Update Attach.php

* Update Torrent.php

* Update CHANGELOG.md

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update displaying_torrent.php

* Update Torrent.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Updated

* Update viewtopic_attach.tpl

* Updated

* Update tor_m3u_format.svg

* Updated

* Updated

* Update tor_m3u_format.png

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Updated

* Update Torrent.php

* Update functions_delete.php

* Updated

* Update TorrServerAPI.php

* Updated

* Updated

* Updated

* Update TorrServerAPI.php

* Update TorrServerAPI.php

* Update displaying_torrent.php

* Update TorrServerAPI.php

* Update CHANGELOG.md

Co-Authored-By: YouROK <4067300+yourok@users.noreply.github.com>

---------

Co-authored-by: YouROK <4067300+yourok@users.noreply.github.com>
2024-08-20 22:16:49 +07:00
Roman Kelesidis
52281847ff Update CHANGELOG.md 2024-08-18 20:21:01 +07:00
Yury Pikhtarev
a3ce77a651
New translations main.php (Russian) (#1601) 2024-08-18 20:20:03 +07:00
Yury Pikhtarev
38a5d50623
New Crowdin updates (#1600)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-18 19:15:12 +07:00
Roman Kelesidis
607141e51d
Newtopic: Added configuring robots indexing (#1599)
* Added ability configure robots indexing while creating new topic

* Update viewtopic.php

* Update mysql.sql

* Update posting.php

* Update Post.php

* Update CHANGELOG.md

* Update posting.php

* Update posting.php

* Update Post.php

* Update posting.tpl

* Update posting.php
2024-08-18 17:18:46 +07:00
Roman Kelesidis
7e43a6d002
Minor improvements (#1592)
* Minor improvements

* Update CHANGELOG.md

* Updated

* Updated

* Updated

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update legacy-changes.txt

* Update legacy-changes.txt

* Minor improvements

* Update prune_inactive_users.php

* Update legacy-changes.txt

* Update legacy-changes.txt
2024-08-18 00:20:15 +07:00
Roman Kelesidis
ba7c8616f6
Some fixes for CLI installer (#1591)
* Some fixes for CLI installer

* Update CHANGELOG.md

* Update install.php

* Update README.md
2024-08-12 04:05:04 +07:00
Yury Pikhtarev
885c1a07f0
New Crowdin updates (#1590)
* New translations main.php (Russian)

* Update CHANGELOG.md

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2024-08-11 16:30:22 +07:00
Roman Kelesidis
df9922870c
Minor improvements (#1589)
* Minor improvements

* Update CHANGELOG.md

* Update README.md
2024-08-11 16:07:05 +07:00
Roman Kelesidis
7c31bc50e0 Update composer.json 2024-08-11 15:32:33 +07:00
Roman Kelesidis
bc45b9d386 Update composer.json 2024-08-11 15:26:28 +07:00
Roman Kelesidis
a6244ed50c Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-08-11 14:59:14 +07:00
Roman Kelesidis
47da2bc515 Update CHANGELOG.md 2024-08-11 14:59:06 +07:00
Yury Pikhtarev
1f2d821e60
New Crowdin updates (#1588)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-11 14:58:46 +07:00
Roman Kelesidis
6c1db78204
Added robots meta-tag support 🤖 (#1587)
* Added robots meta-tag support 🤖

* Update CHANGELOG.md

* Update page_header.php
2024-08-11 14:47:49 +07:00
Roman Kelesidis
aca756ea67
Improved filelist.php (#1586)
* Improved filelist.php

* Update filelist.tpl

* Update filelist.php

* Update filelist.php

* Update CHANGELOG.md

* Update filelist.php

* Updated

* Update filelist.php

* Update filelist.tpl

* Updated

* Update filelist.php

* Update filelist.php

* Update filelist.php

* Update filelist.php

* Updated

* Update filelist.tpl

* Update filelist.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Updated

* Updated

* Updated

* Updated

* Update filelist.php

* Update filelist.tpl

* Updated

* Update main.php
2024-08-11 14:29:37 +07:00
Roman Kelesidis
e82d2b4089
CLI installer improvements (#1585)
* Added Docker support

* Updated

* Updated

* Updated

* Update Dockerfile

* Create nginx.conf

* Updated

* Update .dockerignore

* Updated

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml

* Update common.php

* Updated

* Update common.php

* Update .dockerignore

* Update .dockerignore

* Update .dockerignore

* Update nginx.conf

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Updated

* Updated

* Update CHANGELOG.md
2024-08-10 20:12:13 +07:00
Roman Kelesidis
2d29c29a8a Update CHANGELOG.md 2024-08-10 12:17:55 +07:00
Roman Kelesidis
e9d62f10a6
Demo mode: Save user language in cookies (#1584)
* Updated

* Update User.php

* Update User.php

* Update register.php

* Update CHANGELOG.md
2024-08-09 15:17:56 +07:00
Roman Kelesidis
bd34132469 Update README.md 2024-08-08 01:38:31 +07:00
Roman Kelesidis
e0a05c54d2 Update README.md 2024-08-08 01:31:08 +07:00
Roman Kelesidis
140d01779c Update README.md 2024-08-08 01:28:11 +07:00
Roman Kelesidis
171f3dc60a Update README.md 2024-08-08 01:25:35 +07:00
Roman Kelesidis
b0d15c7a05 Update README.md 2024-08-08 01:24:31 +07:00
Roman Kelesidis
0ca9fa7386 Update README.md 2024-08-08 01:18:53 +07:00
Roman Kelesidis
8af8497e55
Some improvements for CLI installer (#1582)
* Some improvements for CLI installer

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Revert "Update install.php"

This reverts commit b83e0846f9.

* Revert "Update install.php"

This reverts commit a7486cc20c.

* Revert "Update install.php"

This reverts commit af91f8aeb1.

* Update install.php

* Update install.php

* Update install.php

* Update CHANGELOG.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Revert "Update README.md"

This reverts commit c3621c3b9a.

* Revert "Update README.md"

This reverts commit 8832ccdcc2.

* Revert "Update README.md"

This reverts commit 428cc99521.

* Revert "Update README.md"

This reverts commit 282fd2658a.

* Revert "Update README.md"

This reverts commit 0836eaa941.

* Revert "Update README.md"

This reverts commit 525d980c69.

* Revert "Update README.md"

This reverts commit dbd80c5a60.

* Revert "Update README.md"

This reverts commit 07eccab3e1.

* Update README.md

* Update README.md
2024-08-08 01:07:16 +07:00
Roman Kelesidis
9d4466a596 Update README.md 2024-08-07 23:46:18 +07:00
Roman Kelesidis
8c44c05188 Update README.md 2024-08-07 23:44:48 +07:00
Roman Kelesidis
d23a8dae85
Update README.md 2024-08-07 23:28:09 +07:00
Roman Kelesidis
774a052e24
Update README.md 2024-08-07 23:17:50 +07:00
Roman Kelesidis
6daa60fd1d
Update SECURITY.md 2024-08-07 23:09:29 +07:00
Roman Kelesidis
b034423c64
Update SECURITY.md 2024-08-07 23:01:53 +07:00
Roman Kelesidis
801aa69c27
Create SECURITY.md 2024-08-07 22:59:09 +07:00
Roman Kelesidis
eba5dac629 Update README.md 2024-08-07 18:57:14 +07:00
Roman Kelesidis
9e0360677e Update README.md 2024-08-07 17:51:57 +07:00
Roman Kelesidis
b39cac2f52 Update README.md 2024-08-07 17:51:02 +07:00
Roman Kelesidis
6d63169831 Update README.md 2024-08-07 17:50:00 +07:00
Roman Kelesidis
b45eb288b4 Update README.md 2024-08-07 17:43:34 +07:00
Roman Kelesidis
434d4532eb
[CLI] TorrentPier installer (#1576)
* Added CLI preparing installation script

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Revert "Update install.php"

This reverts commit 554319e003.

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update .env.example

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update CHANGELOG.md

* Update install.php

* Update install.php

* Update install.php

* Update install.php

* Update install.php
2024-08-07 17:32:41 +07:00
Roman Kelesidis
45aaba883f
Minor improvements (#1575)
* Minor improvements

* Update CHANGELOG.md

* Update composer.json

* Update composer.json

* Update composer.json

* Update composer.json

* Update composer.lock

* Update composer.json

* Update composer.lock

* Updated

* Revert "Updated"

This reverts commit 74eca59cea.
2024-08-07 00:27:23 +07:00
Roman Kelesidis
bc3f76fdf9
Updated RU translations (#1574)
* Updated RU translations

* Update CHANGELOG.md
2024-08-05 16:37:22 +07:00
Roman Kelesidis
ba28b2ba44 Update CHANGELOG.md 2024-08-05 16:24:44 +07:00
Yury Pikhtarev
014cb64b00
New translations main.php (Russian) (#1573) 2024-08-05 16:22:07 +07:00
Yury Pikhtarev
0356c97be2
New Crowdin updates (#1572)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-05 12:55:31 +07:00
Roman Kelesidis
f39fde2fdb
Minor improvements (#1571)
* Minor improvements

* Update CHANGELOG.md
2024-08-04 23:04:12 +07:00
Roman Kelesidis
c25a6f1dde
Minor improvements (#1570)
* Minor improvements

* Update index_data.php

* Updated

* Updated

* Update CHANGELOG.md

* Update common.php

* Updated

* Revert "Updated"

This reverts commit f5227b4083.

* Revert "Updated"

This reverts commit 911ac4ac29.

* Revert "Updated"

This reverts commit 3e19c1a973.

* Update CHANGELOG.md
2024-08-04 22:55:28 +07:00
Yury Pikhtarev
360b66baca
New Crowdin updates (#1569)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-08-04 22:43:16 +07:00
Roman Kelesidis
7f746af5d5
Added showing releaser stats in profile (#1568)
* Added showing releaser stats in profile

* Update viewprofile.php

* Update usercp_viewprofile.tpl

* Update CHANGELOG.md

* Update viewprofile.php
2024-08-03 13:08:27 +07:00
Roman Kelesidis
c215d8fb31
Increased USEREMAIL_MAX_LENGTH (#1566)
* Minor improvements

* Update CHANGELOG.md
2024-08-03 01:19:51 +07:00
dependabot[bot]
31c901fabd
Composer(deps): Bump arokettu/bencode from 4.2.0 to 4.2.1 (#1564)
Bumps [arokettu/bencode](https://github.com/arokettu/bencode) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/arokettu/bencode/releases)
- [Changelog](https://github.com/arokettu/bencode/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/bencode/compare/4.2.0...4.2.1)

---
updated-dependencies:
- dependency-name: arokettu/bencode
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-29 15:01:17 +07:00
dependabot[bot]
ee310d25da
Composer(deps): Bump arokettu/torrent-file from 5.3.0 to 5.3.1 (#1563)
Bumps [arokettu/torrent-file](https://github.com/arokettu/torrent-file) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/arokettu/torrent-file/releases)
- [Changelog](https://github.com/arokettu/torrent-file/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/torrent-file/compare/5.3.0...5.3.1)

---
updated-dependencies:
- dependency-name: arokettu/torrent-file
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-29 15:01:02 +07:00
Roman Kelesidis
be4a6a2dd8
Added some new HTML meta-tags (#1562)
* Added some new HTML meta-tags

* Update CHANGELOG.md
2024-07-24 22:18:37 +07:00
Roman Kelesidis
612004c10b
Fixed md5() deprecated in PHP 8.4 (#1561)
* Fixed md5() deprecated for PHP 8.4

* Updated

* Update CHANGELOG.md
2024-07-24 13:11:56 +07:00
Roman Kelesidis
1577d9c90b Release 2.4.4 🦩 2024-07-22 23:13:55 +07:00
Roman Kelesidis
97d4def392 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-07-22 23:08:32 +07:00
Roman Kelesidis
8858e2e3e0 Increase version number 2024-07-22 23:08:05 +07:00
Yury Pikhtarev
7a0b05116c
New Crowdin updates (#1560)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-07-22 23:03:57 +07:00
Roman Kelesidis
ae6ded5f62 Update CHANGELOG.md 2024-07-22 21:28:49 +07:00
Roman Kelesidis
0287f10dc4 Update CHANGELOG.md 2024-07-22 21:27:53 +07:00
Yury Pikhtarev
78b15cc15b
New Crowdin updates (#1559)
* New translations main.php (Russian)

* New translations user_agreement.html (Russian)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2024-07-22 21:26:28 +07:00
Roman Kelesidis
518f73ad3a
Minor improvements (#1558)
* Minor improvements

* Update CHANGELOG.md
2024-07-22 21:20:42 +07:00
Roman Kelesidis
db19ca6ecc
Fixed some cache issues (#1557)
* Fixed some cache issues

* Update CHANGELOG.md
2024-07-22 17:58:38 +07:00
Roman Kelesidis
4e853253b6
Fixed: function utf8_encode() is deprecated (#1556)
* Fixed: Function utf8_encode() is deprecated

* Update CHANGELOG.md

* Update CHANGELOG.md

* Updated

* Update Updater.php
2024-07-22 17:20:48 +07:00
Roman Kelesidis
00f4f8f120 Update README.md 2024-07-22 16:34:53 +07:00
Roman Kelesidis
4a16ad2c51
Some improvements for ratio functionality (#1552)
* Some improvements for ratio functionality

* Update usercp_viewprofile.tpl

* Update functions.php

* Update CHANGELOG.md
2024-07-22 15:02:54 +07:00
Roman Kelesidis
f4652a4123 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-07-22 15:00:02 +07:00
Roman Kelesidis
206789d18d Update CHANGELOG.md 2024-07-22 14:59:54 +07:00
Roman Kelesidis
17a320b7c8
Refactored cache drivers 🗃 (#1553)
* Refactored cache drivers 🗃

* Updated

* Update APCu.php

* Update APCu.php

* Update APCu.php

* Update APCu.php

* Update APCu.php

* Update Redis.php

* Update Redis.php

* Updated

* Update

* Updated

* Update config.php

* Updated

* Updated

* Updated

* Updated

* Update config.php

* Updated

* Update composer.lock

* Delete composer.lock

* Create composer.lock

* Update composer.lock

* Update common.php

* Update File.php

* Updated

* Update Sqlite.php

* Update common.php

* Update Redis.php

* Updated

* Update common.php

* Updated
2024-07-22 14:55:04 +07:00
dependabot[bot]
bfd61166be
Composer(deps): Bump vlucas/phpdotenv from 5.6.0 to 5.6.1 (#1555)
Bumps [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) from 5.6.0 to 5.6.1.
- [Release notes](https://github.com/vlucas/phpdotenv/releases)
- [Commits](https://github.com/vlucas/phpdotenv/compare/v5.6.0...v5.6.1)

---
updated-dependencies:
- dependency-name: vlucas/phpdotenv
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 14:09:35 +07:00
dependabot[bot]
bee479b466
Composer(deps): Bump arokettu/torrent-file from 5.2.2 to 5.3.0 (#1554)
Bumps [arokettu/torrent-file](https://github.com/arokettu/torrent-file) from 5.2.2 to 5.3.0.
- [Release notes](https://github.com/arokettu/torrent-file/releases)
- [Changelog](https://github.com/arokettu/torrent-file/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/torrent-file/compare/5.2.2...5.3.0)

---
updated-dependencies:
- dependency-name: arokettu/torrent-file
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 14:08:42 +07:00
Roman Kelesidis
a10ec4c394
Pagination with rel="next" and rel="prev" support (#1551)
* Minor improvements

* Update CHANGELOG.md
2024-07-21 19:59:08 +07:00
Roman Kelesidis
6a4dd64874
Minor improvements (#1550)
* Minor improvements

* Update CHANGELOG.md

* Update register.php
2024-07-21 00:12:31 +07:00
Yury Pikhtarev
a14013d857
New Crowdin updates (#1549)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-07-20 17:41:02 +07:00
Roman Kelesidis
c9d9ebb9c0
Minor improvements (#1548)
* Minor improvements

* Update register.php

* Update register.php

* Updated

* Update CHANGELOG.md

* Update topic_watch.php

* Update Ajax.php
2024-07-20 17:05:02 +07:00
Yury Pikhtarev
a2b15b1ab2
New Crowdin updates (#1547)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-07-19 16:27:41 +07:00
Roman Kelesidis
918902e7e2
Added integration with MonsterID 🎇 (#1546)
* Added integration with MonsterID 🎇

* Updated

* Update usercp_register.tpl

* Revert "Updated"

This reverts commit b85c2b9f4d.

* Update Upload.php

* Update register.php

* Update register.php

* Update usercp_register.tpl

* Updated

* Update CHANGELOG.md
2024-07-19 15:29:54 +07:00
Roman Kelesidis
0eba082d41
Added ability to reset ratio (#1545)
* Minor improvements

* Update index_data.php

* Updated

* Update usercp_viewprofile.tpl

* Update mysql.sql

* Update main.php

* Update CHANGELOG.md
2024-07-19 14:25:47 +07:00
Roman Kelesidis
7b3661cb3f
Minor improvements (#1544)
* Update thanks.php

* Update User.php

* Update User.php

* Update User.php

* Revert "Update User.php"

This reverts commit 8ea96c2224.

* Revert "Update User.php"

This reverts commit 736b3209bf.

* Update User.php

* Update CHANGELOG.md
2024-07-18 20:27:33 +07:00
Yury Pikhtarev
d78305d6af
New Crowdin updates (#1543)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-07-17 02:27:04 +07:00
Roman Kelesidis
5e4eca2c3d
Minor improvements (#1542)
* Minor improvements

* Update Updater.php

* Update Updater.php

* Update Updater.php

* Updated

* Updated

* Update CHANGELOG.md
2024-07-16 18:34:43 +07:00
Yury Pikhtarev
771bad76ca
New Crowdin updates (#1541)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-07-13 20:47:13 +07:00
Roman Kelesidis
a359da1090 Update CHANGELOG.md 2024-07-13 19:45:34 +07:00
Roman Kelesidis
ed37e6e522
Merge commit from fork 2024-07-13 19:26:57 +07:00
Roman Kelesidis
e4b93796f3
Bring back forum description in viewforum.php (#1540)
* Bring back forum description in viewforum.php

* Update CHANGELOG.md
2024-07-13 18:32:00 +07:00
Roman Kelesidis
faede91a14
Minor improvements (#1539)
* Minor improvements

* Update CHANGELOG.md

* Update thanks.php

* Updated
2024-07-13 18:25:21 +07:00
Roman Kelesidis
c7f2223f7f
Datastore improvements (#1538)
* Datastore improvements

* Updated

* Update functions.php

* Updated

* Updated

* Updated

* Update index.php

* Update index.php

* Update index.php

* Update index.php

* Update viewtopic.php

* Update functions.php

* Updated

* Updated

* Revert "Updated"

This reverts commit 0ff7d4ac60.

* Revert "Updated"

This reverts commit 8d637dff6c.

* Update index_data.php

* Update index_data.php

* Update index_data.php

* Updated

* Update CHANGELOG.md
2024-07-13 14:26:34 +07:00
Roman Kelesidis
5971379b6c
Word censor code optimization (#1537)
* Word censor code optimization

* Update CHANGELOG.md

* Updated

* Updated

* Update build_censor.php

* Update admin_words.php
2024-07-13 13:00:46 +07:00
Roman Kelesidis
126c75cd57
Minor improvements (#1536)
* Minor improvements

* Update viewtopic_attach.tpl

* Update viewtopic_attach.tpl

* Update viewforum.tpl

* Update viewforum.tpl

* Update viewtopic.tpl

* Update viewtopic.tpl

* Update CHANGELOG.md

* Updated

* Update defines.php
2024-07-12 23:05:14 +07:00
Roman Kelesidis
97d42c599d
Hide in topic: Added country hiding (#1535)
* Hide in topic: Added country hiding

* Update CHANGELOG.md
2024-07-11 00:25:51 +07:00
Roman Kelesidis
d2a1a7f5f9
Minor improvements (#1532)
* Minor improvements

* Update clean_dlstat.php

* Updated

* Update usercp_viewprofile.tpl

* Update CHANGELOG.md
2024-07-10 23:48:31 +07:00
Roman Kelesidis
ccf6ba3099 Revert "Minor improvements (#1531)"
This reverts commit a1d8f2742a.
2024-07-08 11:49:31 +07:00
Roman Kelesidis
a1d8f2742a
Minor improvements (#1531)
* Minor improvements

* Update CHANGELOG.md

* Update cron_run.php
2024-07-08 01:14:58 +07:00
Roman Kelesidis
137865f3f3
Minor improvements (#1530)
* Minor improvements

* Update changes.txt

* Update attach_maintenance.php

* Update CHANGELOG.md
2024-07-06 17:57:23 +07:00
Roman Kelesidis
04ed0202c6 Update CHANGELOG.md 2024-07-03 16:21:40 +07:00
Roman Kelesidis
a90653e7e2
Fixed broken "Disable Board" function (#1529)
* Fixed broken "Disable Board" function

* Update CHANGELOG.md
2024-07-03 16:20:50 +07:00
Roman Kelesidis
082d553a29 Update composer.lock 2024-07-03 16:11:57 +07:00
dependabot[bot]
f684121297
Composer(deps-dev): Bump symfony/var-dumper from 6.4.8 to 6.4.9 (#1526)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.8 to 6.4.9.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.8...v6.4.9)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-03 16:07:53 +07:00
dependabot[bot]
68bee51ca6
Composer(deps): Bump symfony/mailer from 6.4.8 to 6.4.9 (#1527)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.8 to 6.4.9.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.8...v6.4.9)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-03 16:07:44 +07:00
dependabot[bot]
2d8c64f314
Composer(deps): Bump monolog/monolog from 3.6.0 to 3.7.0 (#1528)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.6.0...3.7.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-03 16:07:12 +07:00
Roman Kelesidis
3488c9cc28
Minor improvements (#1525)
* Minor improvements

* Update posting_tpl.tpl

* Update CHANGELOG.md

* Updated

* Update clean_pm.php

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql
2024-06-28 12:38:43 +07:00
Yury Pikhtarev
f8d3d2721c
New Crowdin updates (#1524)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-06-22 16:04:48 +07:00
Roman Kelesidis
1f50783a70 Update CHANGELOG.md 2024-06-22 11:41:31 +07:00
Roman Kelesidis
b37f2d3666
Minor improvements (#1523)
* Minor improvements

* Update CHANGELOG.md

* Update composer.lock

* Update User.php

* Updated

* Update Torrent.php

* Update Template.php

* Updated

* Update SqlDb.php

* Update Select.php

* Updated

* Updated

* Update viewtopic.tpl

* Updated

* Update viewforum.tpl
2024-06-22 11:39:33 +07:00
Roman Kelesidis
2803870d32 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-06-18 14:46:24 +07:00
Roman Kelesidis
66e804e5e6 Update CHANGELOG.md 2024-06-18 14:46:17 +07:00
stack-file[bot]
4df735c383
Update tech stack docs (techstack.yml and techstack.md) (#1522)
* Update techstack.yml

* Update techstack.md

---------

Co-authored-by: stacksharebot <team@stackshare.io>
2024-06-18 14:45:38 +07:00
Roman Kelesidis
19bfdf7275
Create tech stack docs (techstack.yml and techstack.md) (#1521)
* Create tech stack docs (techstack.yml and techstack.md)

* Update CHANGELOG.md
2024-06-18 14:29:21 +07:00
Roman Kelesidis
cf1497300a
Minor improvements (#1519)
* Minor improvements

* Update CHANGELOG.md
2024-06-17 21:32:34 +07:00
Roman Kelesidis
40b341cb62
Fixed seed bonus accrual (#1518)
* Fixed seed bonus accrual

* Update CHANGELOG.md

* Updated
2024-06-17 20:50:08 +07:00
Roman Kelesidis
5d56517504
Minor improvements (#1517)
* Minor improvements

* Updated

* Update CHANGELOG.md
2024-06-17 18:52:47 +07:00
Roman Kelesidis
84f6c9f4a0
Minor improvements (#1516)
* Minor improvements

* Update build_files_integrity.php

* Update CHANGELOG.md

* Updated
2024-06-16 01:16:42 +07:00
Roman Kelesidis
8e3d1b0479
Minor improvements (#1515)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-06-15 15:46:30 +07:00
Roman Kelesidis
7cf03cb1b1
[BETA] Added emoji support 😄😁 (#1514)
* Added emoji support 😄😁

* Update CHANGELOG.md

* Update mysql.sql
2024-06-15 11:14:11 +07:00
Yury Pikhtarev
0a0e09a183
New Crowdin updates (#1513)
* New translations user_agreement.html (Romanian)

* New translations user_agreement.html (French)

* New translations user_agreement.html (Spanish)

* New translations user_agreement.html (Afrikaans)

* New translations user_agreement.html (Arabic)

* New translations user_agreement.html (Belarusian)

* New translations user_agreement.html (Bulgarian)

* New translations user_agreement.html (Catalan)

* New translations user_agreement.html (Czech)

* New translations user_agreement.html (Danish)

* New translations user_agreement.html (German)

* New translations user_agreement.html (Greek)

* New translations user_agreement.html (Finnish)

* New translations user_agreement.html (Hebrew)

* New translations user_agreement.html (Hungarian)

* New translations user_agreement.html (Armenian)

* New translations user_agreement.html (Italian)

* New translations user_agreement.html (Japanese)

* New translations user_agreement.html (Georgian)

* New translations user_agreement.html (Korean)

* New translations user_agreement.html (Lithuanian)

* New translations user_agreement.html (Dutch)

* New translations user_agreement.html (Norwegian)

* New translations user_agreement.html (Polish)

* New translations user_agreement.html (Russian)

* New translations user_agreement.html (Slovak)

* New translations user_agreement.html (Slovenian)

* New translations user_agreement.html (Albanian)

* New translations user_agreement.html (Serbian (Cyrillic))

* New translations user_agreement.html (Swedish)

* New translations user_agreement.html (Turkish)

* New translations user_agreement.html (Ukrainian)

* New translations user_agreement.html (Chinese Traditional)

* New translations user_agreement.html (English)

* New translations user_agreement.html (Vietnamese)

* New translations user_agreement.html (Portuguese, Brazilian)

* New translations user_agreement.html (Indonesian)

* New translations user_agreement.html (Thai)

* New translations user_agreement.html (Croatian)

* New translations user_agreement.html (Kazakh)

* New translations user_agreement.html (Estonian)

* New translations user_agreement.html (Latvian)

* New translations user_agreement.html (Azerbaijani)

* New translations user_agreement.html (Hindi)

* New translations user_agreement.html (Bosnian)

* New translations user_agreement.html (Uzbek)

* New translations user_agreement.html (Tajik)
2024-06-14 15:51:47 +07:00
Roman Kelesidis
f1665f5155
Resize avatar image if too large 🌆 (#1512)
* Resize avatar image if too large 🌆

* Update CHANGELOG.md
2024-06-14 14:51:19 +07:00
Roman Kelesidis
2cd786f85d
Minor improvements (#1511)
* Minor improvements

* Update user_agreement.html

* Update CHANGELOG.md
2024-06-14 14:12:40 +07:00
Roman Kelesidis
63ba8f1738 Update CHANGELOG.md 2024-06-14 14:02:28 +07:00
Roman Kelesidis
23d8864a9e
Increased PASSWORD_MAX_LENGTH (#1510) 2024-06-14 14:01:41 +07:00
Roman Kelesidis
9940945824
Minor improvements (#1509)
* Minor improvements

* Update CHANGELOG.md

* Update torrent_show_dl_list.php
2024-06-14 13:57:28 +07:00
Roman Kelesidis
75c9f34a73
Hide vote button in topic if guest (#1507)
* Hide vote button in topic if guest

* Update CHANGELOG.md
2024-06-13 16:08:23 +07:00
Roman Kelesidis
0ad1ec45bc
Minor improvements (#1506)
* Minor improvements

* Update CHANGELOG.md

* Update .env.example
2024-06-13 15:27:58 +07:00
Roman Kelesidis
411a756085
Some security enhancements (#1505)
* Some security enhancements

* Update CHANGELOG.md
2024-06-12 13:12:25 +07:00
Roman Kelesidis
0663f55e54
Some security improvements 🔑 (#1503)
* Some security improvements 🔑

* Update .env.example

* Update Dev.php

* Update CHANGELOG.md

* Update Dev.php

* Update Ajax.php

* Update SqlDb.php

* Updated

* Updated

* Update Dev.php

* Update page_header.tpl

* Updated

* Updated

* Update CHANGELOG.md
2024-06-10 16:55:55 +07:00
Yury Pikhtarev
3562a5f63a
New Crowdin updates (#1504)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-06-10 16:55:37 +07:00
Roman Kelesidis
141fab021a
Minor improvements (#1502)
* Minor improvements

* Update build_files_integrity.php

* Updated

* Update usercp_viewprofile.tpl

* Updated

* Update config.php

* Updated

* Update register.php

* Updated

* Update main.php

* Update functions.php

* Update CHANGELOG.md
2024-06-10 13:30:47 +07:00
Roman Kelesidis
6a10adabf5
Some improvements for integrity checker (#1501)
* Some improvements for integrity checker

* Update build_files_integrity.php

* Updated
2024-06-09 17:09:21 +07:00
Roman Kelesidis
784e3aef1c Update checksums.md5 2024-06-09 16:37:26 +07:00
Roman Kelesidis
fa109e1f12
Minor improvements (#1500)
* Minor improvements

* Update CHANGELOG.md
2024-06-09 16:35:42 +07:00
Roman Kelesidis
0ff8ca8e20
Minor improvements (#1499)
* Minor improvements

* Update build_files_integrity.php

* Update CHANGELOG.md
2024-06-09 16:32:32 +07:00
Roman Kelesidis
f801c18e4d Update checksums.md5 2024-06-09 15:43:43 +07:00
Roman Kelesidis
ce6592a307 Release v2.4.3 🐎 2024-06-09 15:42:42 +07:00
Roman Kelesidis
b86422cc00
Minor improvements (#1497)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-06-09 15:35:29 +07:00
Yury Pikhtarev
a01dd8a10c
New translations main.php (Russian) (#1498) 2024-06-09 15:34:21 +07:00
Yury Pikhtarev
c1dbeb4681
New translations main.php (Russian) (#1496) 2024-06-09 14:58:47 +07:00
Yury Pikhtarev
70c557a35d
New Crowdin updates (#1495)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-06-09 11:45:20 +07:00
Roman Kelesidis
8a0fd77e28 Update checksums.md5 2024-06-08 16:53:28 +07:00
Roman Kelesidis
bb3d4e6345
Minor improvements (#1494)
* Minor improvements

* Update CHANGELOG.md
2024-06-08 16:50:40 +07:00
Roman Kelesidis
2cbf9ed743
WIP: Added restoring corrupt TorrentPier files 🪛 (#1493)
* Added restoring corrupt files 🪛

* Update index.tpl

* Updated

* Updated

* Update build_files_integrity.php

* Update build_files_integrity.php

* Update build_files_integrity.php

* Updated

* Updater

* Update Updater.php

* Updated

* Update Updater.php

* Update build_check_updates.php

* Updated

* Updated

* Updated

* Update build_files_integrity.php

* Update build_files_integrity.php

* Updated

* Update checksums.md5

* Update build_files_integrity.php

* Updated

* Updated

* Update Updater.php

* Update CHANGELOG.md

* Updated

* Update index.tpl

* Update functions.php

* Update Updater.php
2024-06-08 16:42:35 +07:00
Yury Pikhtarev
e36a5ee07a
New Crowdin updates (#1492)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-06-08 01:37:21 +07:00
Roman Kelesidis
437c2e5d8d
Added TorrentPier files integrity check 📦 (#1491)
* Added file integrity check 📦

* Update CHANGELOG.md

* Update CHANGELOG.md

* Updated

* Update Common.php

* Updated

* Update board_maintenance.php

* Update index.tpl

* Updated

* Updated

* Update build_check_updates.php

* Update build_check_updates.php

* Update build_check_updates.php

* Update build_check_updates.php

* Update build_check_updates.php

* Update index.php

* Updated

* Update build_check_updates.php

* Update build_files_integrity.php

* Update build_files_integrity.php

* Update build_files_integrity.php

* Create checksums.md5

* Update build_files_integrity.php

* Update build_files_integrity.php

* Updated

* Update checksums.md5

* Update defines.php

* Update build_files_integrity.php

* Updated

* Update main.php

* Update main.php

* Update main.php

* Update index.tpl

* Update index.tpl

* Update index.php

* Update build_check_updates.php

* Update build_check_updates.php

* Update checksums.md5

* Update build_files_integrity.php

* Update checksums.md5
2024-06-08 00:32:10 +07:00
Roman Kelesidis
3db9095b78
Minor improvements (#1490)
* Minor improvements

* Update CHANGELOG.md

* Update functions.php

* Update build_check_updates.php

* Update index.php

* Updated
2024-06-07 21:05:54 +07:00
Yury Pikhtarev
33720fb284
New Crowdin updates (#1489)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations icon_code.gif (Russian)

* New translations icon_code.gif (Ukrainian)
2024-06-05 23:51:42 +07:00
Roman Kelesidis
237e7ec6ef
Some cleanup...😣 (#1488)
* Some cleanup...😣

* Update main.php

* Update CHANGELOG.md

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update main.php

* Update config.php

* Update Common.php

* Updated

* Update filelist.php

* Update filelist.php

* Update viewtopic_attach.tpl

* Updated
2024-06-05 12:51:23 +07:00
Yury Pikhtarev
ce6923b160
New Crowdin updates (#1487)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-06-04 17:20:37 +07:00
Roman Kelesidis
bf9536dece
Minor improvements (#1484)
* Minor improvements

* Update CHANGELOG.md

* Update modcp.php

* Update modcp_split.tpl

* Update main.php

* Update viewtopic.tpl

* Update CHANGELOG.md

* Update Emailer.php

* Updated

* Update common.php
2024-06-04 17:08:27 +07:00
dependabot[bot]
bf34a936b9
Composer(deps-dev): Bump symfony/var-dumper from 6.4.7 to 6.4.8 (#1486)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.7 to 6.4.8.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.7...v6.4.8)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-03 23:02:07 +07:00
dependabot[bot]
3c627d5857
Composer(deps): Bump symfony/mailer from 6.4.7 to 6.4.8 (#1485)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.7 to 6.4.8.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.1/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.7...v6.4.8)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-03 23:01:59 +07:00
Roman Kelesidis
430825c3e7
Minor improvements (#1482)
* Minor improvements

* Update functions.php

* Update functions.php

* Update CHANGELOG.md

* Update composer.lock
2024-05-23 23:31:21 +07:00
Roman Kelesidis
f584cf5d29
Minor improvements (#1481)
* Minor improvements

* Updated

* Update functions.php

* Updated

* Update .gitignore

* Updated

* Update CHANGELOG.md
2024-05-22 14:21:07 +07:00
Roman Kelesidis
9ada2c63b9
Minor improvements (#1480)
* Some enhancements for updates checker

* Updated

* Update updater.php

* Update init_bb.php

* Update CHANGELOG.md

* Update globals.css

* Updated

* Update functions.php

* Update init_bb.php

* Updated

* Updated

* Updated

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Updated

* Update .gitignore

* Update init_bb.php

* Updated

* Update CHANGELOG.md
2024-05-11 00:44:35 +07:00
Yury Pikhtarev
784b608691
New Crowdin updates (#1479)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-05-10 00:44:04 +07:00
Roman Kelesidis
459fba6b86
Show client country in seeders / leechers list 🌍 (#1478)
* Show client country in seeders / leechers list

* Update functions.php

* Update functions.php

* Update functions.php

* Updated

* Update displaying_torrent.php

* Update functions.php

* Update viewtopic_torrent.tpl

* Update viewtopic_torrent.tpl

* Update functions.php

* Update functions.php

* Update functions.php

* Update functions.php

* Update config.php

* Updated

* Updated

* Updated

* Updated

* Update update_geolite_db.php

* Update update_geolite_db.php

* Updated

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Updated

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Update update_geolite_db.php

* Updated

* Update viewtopic_torrent.tpl

* Updated

* Update composer.lock

* Update defines.php

* Updated

* Update init_bb.php

* Update CHANGELOG.md
2024-05-08 22:13:30 +07:00
Roman Kelesidis
2fa3520872
Minor improvements (#1477)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-05-07 23:52:06 +07:00
Yury Pikhtarev
b9147768cc
New Crowdin updates (#1476)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-05-07 23:05:56 +07:00
Roman Kelesidis
e7782e34e6
Some improvements for updater (#1475)
* Some improvements for updater

* Update CHANGELOG.md
2024-05-07 22:26:26 +07:00
Roman Kelesidis
30df72e331
Minor improvements (#1472)
* Minor improvements

* Update torrent_announce_urls.php

* Updated

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update functions.php
2024-05-07 16:22:43 +07:00
Yury Pikhtarev
54c8b0bf2c
New Crowdin updates (#1473)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-05-06 08:59:16 +07:00
Roman Kelesidis
08fb1e3f7c
Some enhancements for flags (#1471)
* Some enhancements for flags

* Update CHANGELOG.md
2024-05-06 00:03:52 +07:00
Roman Kelesidis
b80fa8857d
Some enhancements for flags (#1470)
* Some enhancements for flags

* Update main.php

* Upload

* Update functions.php

* Update functions.php

* Update main.php

* Update CHANGELOG.md
2024-05-05 23:48:00 +07:00
Roman Kelesidis
5774c14686 Update CHANGELOG.md 2024-05-05 10:28:26 +07:00
Yury Pikhtarev
df02844915
New Crowdin updates (#1468)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2024-05-05 10:27:48 +07:00
Roman Kelesidis
e49b81de0e
Minor improvements (#1469)
* Minor improvements

* Update CHANGELOG.md
2024-05-05 10:27:23 +07:00
Roman Kelesidis
3c297fce24
Minor improvements (#1467)
* Minor improvements

* Update CHANGELOG.md

* Update change_user_rank.php
2024-05-05 09:51:16 +07:00
Roman Kelesidis
65a7b89a9e
Added support for attribute to ignoring auto spoilers opening (#1466)
* Added support for attribute to ignoring auto spoilers opening

* Update CHANGELOG.md
2024-05-05 00:50:28 +07:00
Roman Kelesidis
f1f59cbd55
Temp: Removed showing forum description in viewforum.php (#1465)
* Temp: Removed showing forum description in viewforum.php

* Update CHANGELOG.md
2024-05-05 00:13:29 +07:00
Roman Kelesidis
8b459e8670
Guests can view polls (#1464)
* Guests can view polls

* Update CHANGELOG.md
2024-05-04 23:48:27 +07:00
Roman Kelesidis
9cfd3d6a00
Minor improvements (#1462)
* Minor improvements

* Update viewforum.php

* Update posting.php

* Updated

* Update admin_forums.php

* Update CHANGELOG.md
2024-05-04 12:58:51 +07:00
Roman Kelesidis
0ca5fe3abe
Minor improvements (#1461)
* Minor improvements

* Update edit_user_profile.php

* Update init_bb.php

* Update init_bb.php

* Update init_bb.php

* Update usercp_register.tpl

* Update admin_ug_auth.php

* Update admin_ug_auth.tpl

* Update tpl_config.php

* Update viewprofile.php

* Update group_membership.php

* Update group_membership.php

* Update viewtopic.tpl

* Update admin_ug_auth.php

* Update functions.php

* Update admin_ug_auth.php

* Update admin_ug_auth.php

* Update admin_ug_auth.php

* Update admin_forums.php

* Update admin_forums.php

* Update posting_tpl.php

* Update viewforum.php

* Update viewforum.tpl

* Update admin_forums.php

* Update admin_ug_auth.php

* Update admin_ug_auth.php

* Update usercp_viewprofile.tpl

* Update register.php

* Update admin_ug_auth.php

* Update admin_ug_auth.php

* Update posts.php

* Update posting_tpl.php

* Update viewforum.php

* Update admin_forums.php

* Update admin_forums.php

* Update admin_forumauth.php

* Update index_map.tpl

* Update index.tpl

* Update index.tpl

* Update group.php

* Update viewtopic.tpl

* Update change_torrent.php

* Update viewtopic.tpl

* Update viewtopic.php

* Update viewtopic.php

* Update admin_log.php

* Update search.php

* Update usercp_register.tpl

* Update CHANGELOG.md
2024-05-04 11:58:21 +07:00
Roman Kelesidis
9d3bc2c178
Minor improvements (#1458)
* Minor improvements

* Updated

* Update modcp.php

* Update modcp.tpl

* Update modcp.php

* Update modcp.tpl

* Update viewtopic.php

* Update posting.php

* Updated

* Update viewtopic.tpl

* Update admin_log.tpl

* Updated

* Update modcp.php

* Update modcp.php

* Update CHANGELOG.md

* Revert "Update CHANGELOG.md"

This reverts commit 7933176d33.

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-05-01 12:36:06 +07:00
Roman Kelesidis
c0273117b5 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-04-30 14:31:17 +07:00
Roman Kelesidis
2138f9b04e Update CHANGELOG.md 2024-04-30 14:31:08 +07:00
dependabot[bot]
4f5f1ad491
Composer(deps-dev): Bump symfony/var-dumper from 6.4.6 to 6.4.7 (#1460)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.6 to 6.4.7.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.6...v6.4.7)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-30 14:30:22 +07:00
dependabot[bot]
bc94be5a7c
Composer(deps): Bump symfony/mailer from 6.4.6 to 6.4.7 (#1459)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.6 to 6.4.7.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.6...v6.4.7)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-30 14:30:09 +07:00
Roman Kelesidis
fa7a2c3005
Fixed quote selection for smiles (#1457)
* Fixed quote selection for smiles

* Update CHANGELOG.md
2024-04-26 14:32:40 +07:00
Yury Pikhtarev
613f4fc364
New Crowdin updates (#1456)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-04-24 17:25:59 +07:00
Roman Kelesidis
24dbd25d9b
Minor improvements (#1452)
* Minor improvements

* Updated

* Create updater.php

* Revert "Create updater.php"

This reverts commit be2f3d5006.

* Revert "Updated"

This reverts commit 6aae9339cd.

* Updated

* Update board_maintenance.php

* Updated

* Updated

* Update build_check_updates.php

* Updated

* Update board_maintenance.php

* Update functions.php

* Updated

* Update defines.php

* Updated

* Updated

* Updater

* Updated

* Update .gitignore

* Update

* Update updater.php

* Updated

* Update tracker.php

* Update .htaccess

* Update tracker.php

* Update tracker.tpl

* Update CHANGELOG.md
2024-04-24 15:01:37 +07:00
dependabot[bot]
b7b110906b
Composer(deps): Bump claviska/simpleimage from 4.1.0 to 4.2.0 (#1455)
Bumps [claviska/simpleimage](https://github.com/claviska/SimpleImage) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/claviska/SimpleImage/releases)
- [Commits](https://github.com/claviska/SimpleImage/compare/4.1.0...4.2.0)

---
updated-dependencies:
- dependency-name: claviska/simpleimage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-16 13:14:15 +07:00
dependabot[bot]
d1af4a6c02
Composer(deps): Bump monolog/monolog from 3.5.0 to 3.6.0 (#1454)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.5.0...3.6.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-15 22:00:06 +07:00
Yury Pikhtarev
55f07fec27
New Crowdin updates (#1453)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-04-13 20:42:29 +07:00
Roman Kelesidis
a255640f28
Added updates checker ⚙️ (#1451)
* Added update checker

* Update index.php

* Update index.php

* Updated

* Update index.php

* Update index.php

* Update index.tpl

* Update CHANGELOG.md
2024-04-13 16:58:48 +07:00
Roman Kelesidis
d4eb4fe680
Minor improvements (#1450)
* Minor improvements

* Update CHANGELOG.md

* Update memberlist.php
2024-04-13 15:14:15 +07:00
Roman Kelesidis
6d5d5b9669 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-04-11 22:54:23 +07:00
Roman Kelesidis
c2d6a45235 Update CHANGELOG.md 2024-04-11 22:54:16 +07:00
Roman Kelesidis
a43152b421
Added preview for country flags while editing (#1448) 2024-04-11 22:53:20 +07:00
Roman Kelesidis
0b2246b50b Update CHANGELOG.md 2024-04-11 22:33:12 +07:00
Yury Pikhtarev
aae159f01b
New Crowdin updates (#1447)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-04-11 22:31:45 +07:00
Roman Kelesidis
71a372ed66
Minor improvements (#1446)
* Minor improvements

* Updated

* Update edit_user_profile.php

* Update CHANGELOG.md
2024-04-11 19:00:02 +07:00
Roman Kelesidis
edcdaad690 Update CHANGELOG.md 2024-04-11 18:31:17 +07:00
Roman Kelesidis
380fb8b557
Some enhancements (#1445)
* Minor improvements

* Update CHANGELOG.md

* Updated

* Update functions.php

* Updated

* Update functions.php

* Updated

* Update Select.php

* Updated

* Update functions.php

* Updated

* Update register.php

* Update main.php

* Updated

* Update functions.php

* Updated

* Update usercp_viewprofile.tpl

* Update main.php

* Updated

* Update CHANGELOG.md
2024-04-11 18:30:19 +07:00
Yury Pikhtarev
b9f197ce22
New Crowdin updates (#1444)
* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-04-11 15:25:50 +07:00
Roman Kelesidis
8c925cc303
Minor improvements (#1443)
* Minor improvements

* Updated

* Update terms.php

* Update main.php

* Update CHANGELOG.md

* Update memberlist.tpl
2024-04-11 15:11:12 +07:00
Roman Kelesidis
564fc25cbc
Added support for APCu caching method (#1442)
* Added support for APCu caching method

* Create APCu.php

* Update APCu.php

* Updated

* Update CHANGELOG.md
2024-04-10 19:38:53 +07:00
Roman Kelesidis
2472608c6d
Code refactoring (#1441)
* Code refactoring

* Update viewtopic.php

* Update viewforum.php

* Update posting.php

* Update viewtopic.php

* Revert "Code refactoring"

This reverts commit e4ac08e377.

* Revert "Update viewforum.php"

This reverts commit 1ee6321385.

* Update viewforum.php

* Update viewtopic.php

* Update viewtopic.php

* Update viewtopic.php

* Update viewtopic.php

* Update dl_list.php

* Update posting.php

* Update posting.php

* Update posting.php

* Update viewprofile.php

* Update email.php

* Update viewtopic.php

* Update functions.php

* Update posting.php

* Update viewtopic.php

* Update CHANGELOG.md
2024-04-10 18:35:55 +07:00
Roman Kelesidis
8ba00d5966
Demo mode: Allow registering torrents by default (#1440)
* Demo mode: Allow registering torrents by default

* Update CHANGELOG.md
2024-04-06 11:10:21 +07:00
Roman Kelesidis
cfcda68a99
Improved app debug (#1438)
* Improved app debug

* Updated

* Update config.php

* Update Dev.php

* Update Dev.php

* Update Dev.php

* Update Dev.php

* Update config.php

* Update Dev.php

* Update CHANGELOG.md
2024-04-06 10:41:14 +07:00
dependabot[bot]
521af98b69
Composer(deps-dev): Bump symfony/var-dumper from 6.4.4 to 6.4.6 (#1436)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.4 to 6.4.6.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.4...v6.4.6)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-03 14:04:00 +07:00
dependabot[bot]
6e4ddfcca7
Composer(deps): Bump symfony/mailer from 6.4.4 to 6.4.6 (#1437)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.4 to 6.4.6.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.4...v6.4.6)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-03 14:03:36 +07:00
Roman Kelesidis
3b4aa3621b
Minor improvements (#1435)
* Minor improvements

* Update config.php

* Updated

* Update Dev.php

* Revert "Update Dev.php"

This reverts commit 0540ceaa0b.

* Revert "Updated"

This reverts commit e95b14b8c0.

* Updated
2024-04-03 13:12:57 +07:00
Roman Kelesidis
f69476adb9 Release v2.4.2 🐯 2024-03-30 15:18:55 +07:00
Yury Pikhtarev
847e68c48e
New Crowdin updates (#1434)
* New translations main.php (Russian)

* New translations main.php (Russian)
2024-03-29 08:37:32 +07:00
Roman Kelesidis
1f08637a1f
Don't requires fill textarea for mod comment deleting (#1433)
* Don't requires fill textarea for mod comment deleting

* Update CHANGELOG.md
2024-03-27 18:45:48 +07:00
Roman Kelesidis
2898887806
PHP 8.2: Fixed creation of dynamic property (#1432)
* PHP 8.2: Fixed creation of dynamic property

* Update CHANGELOG.md
2024-03-27 18:33:38 +07:00
Roman Kelesidis
b952ec7158
Fixed broken searching of attachments via ACP (#1431)
* Fixed broken searching of attachments via ACP

* Update CHANGELOG.md
2024-03-21 22:51:51 +07:00
Roman Kelesidis
4b486e377e
log_error(): Hide Referer string if empty (#1430)
* log_error(): Hide Referer string if empty

* Update CHANGELOG.md
2024-03-17 14:42:22 +07:00
Roman Kelesidis
a8689cf575 Update CHANGELOG.md 2024-03-16 22:16:41 +07:00
Yury Pikhtarev
9a586d320e
New Crowdin updates (#1429)
* New translations admin_send_email.html (Portuguese, Brazilian)

* New translations group_added.html (Portuguese, Brazilian)

* New translations group_approved.html (Portuguese, Brazilian)

* New translations group_approved.html (Portuguese, Brazilian)

* New translations group_request.html (Portuguese, Brazilian)
2024-03-16 22:13:29 +07:00
Roman Kelesidis
d5cc52eb72
Make post date clickable in posting.php (#1427)
* Make post date clickable (Link to topic)

* Update CHANGELOG.md
2024-03-12 19:03:58 +07:00
Yury Pikhtarev
4c5b1b18eb
New Crowdin updates (#1426)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-03-11 17:58:50 +07:00
Roman Kelesidis
a97f1ac784
Some improvements for Acronym mod (#1425)
* Some improvements for Acronym mod

* Update CHANGELOG.md

* Update BBCode.php
2024-03-11 16:21:43 +07:00
dependabot[bot]
ff75329351
Composer(deps): Bump arokettu/bencode from 4.1.0 to 4.2.0 (#1424)
Bumps [arokettu/bencode](https://github.com/arokettu/bencode) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/arokettu/bencode/releases)
- [Changelog](https://github.com/arokettu/bencode/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/bencode/compare/4.1.0...4.2.0)

---
updated-dependencies:
- dependency-name: arokettu/bencode
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-11 15:47:41 +07:00
Roman Kelesidis
ad16a77b89
Minor improvements (#1422)
* Minor improvements

* Update tracker.tpl

* Update tracker.php

* Update CHANGELOG.md
2024-03-07 18:12:20 +07:00
Roman Kelesidis
6676f5b4f3 Update CHANGELOG.md 2024-03-05 23:22:00 +07:00
Roman Kelesidis
5a8f431215
Minor improvements (#1418)
* Minor improvements

* Update viewforum.tpl

* Update manage_user.php

* Update manage_user.php

* Update manage_admin.php

* Update manage_user.php

* Update CHANGELOG.md
2024-03-05 23:20:51 +07:00
Roman Kelesidis
96d076f9d1 Update CHANGELOG.md 2024-03-05 17:36:24 +07:00
dependabot[bot]
8dc653d279
Composer(deps): Bump claviska/simpleimage from 4.0.6 to 4.1.0 (#1421)
Bumps [claviska/simpleimage](https://github.com/claviska/SimpleImage) from 4.0.6 to 4.1.0.
- [Release notes](https://github.com/claviska/SimpleImage/releases)
- [Commits](https://github.com/claviska/SimpleImage/compare/4.0.6...4.1.0)

---
updated-dependencies:
- dependency-name: claviska/simpleimage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-05 13:11:17 +07:00
Yury Pikhtarev
cbb463124b
New Crowdin updates (#1420)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-03-05 11:31:46 +07:00
Roman Kelesidis
77fa47b5ce
Added BBCode Acronym tag (#1419)
* Added BBCode Acronym tag

* Update CHANGELOG.md

* Update BBCode.php
2024-03-04 23:21:01 +07:00
Roman Kelesidis
d82c974a90
Show poll prefix for guests (#1417)
* Show poll results for guests

* Update viewtopic.php

* Revert "Update viewtopic.php"

This reverts commit fd3f7021a3.

* Update CHANGELOG.md
2024-03-01 17:50:49 +07:00
Roman Kelesidis
971b8da843
Hide quote button if topic locked (#1416)
* Hide quote button if topic locked

* Updated

* Update CHANGELOG.md
2024-02-29 22:07:04 +07:00
Roman Kelesidis
f605a187ce Update CHANGELOG.md 2024-02-28 19:51:46 +07:00
dependabot[bot]
3c3191f3d8
Composer(deps-dev): Bump symfony/var-dumper from 6.4.3 to 6.4.4 (#1415)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.3...v6.4.4)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:46:06 +07:00
dependabot[bot]
6ac7578d71
Composer(deps): Bump symfony/mailer from 6.4.3 to 6.4.4 (#1414)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.3...v6.4.4)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:45:57 +07:00
Roman Kelesidis
daf7297c20
Added showing poll status in topic_watch.php (#1413)
* Added showing poll status in topic_watch.php

* Update CHANGELOG.md
2024-02-28 12:44:56 +07:00
Yury Pikhtarev
eece8a1eb2
New Crowdin updates (#1412)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-02-27 14:49:16 +07:00
Roman Kelesidis
635d715247
Minor improvements (#1411)
* Minor improvements

* Update CHANGELOG.md

* Update edit_user_profile.php

* Updated

* Update main.php

* Update functions.php
2024-02-27 10:03:01 +03:00
Roman Kelesidis
22511c3edc
Minor improvements (#1410)
* Minor improvements

* Update modcp.php

* Update CHANGELOG.md

* Update modcp.php
2024-02-22 18:17:43 +07:00
Roman Kelesidis
39d069016c
Minor improvements (#1409)
* Minor improvements

* Update CHANGELOG.md

* Update viewforum.tpl

* Update viewforum.php

* Update search.php

* Update globals.css

* Update modcp.php

* Update modcp.php

* Revert "Update modcp.php"

This reverts commit decd1d58da.

* Revert "Update modcp.php"

This reverts commit 866ce37218.

* Update modcp.php
2024-02-22 17:51:09 +07:00
Roman Kelesidis
f7ee6d8a57
Minor improvements (#1408)
* Minor improvements

* Update Dev.php

* Update IsHelper.php

* Update CHANGELOG.md
2024-02-20 00:04:47 +07:00
Roman Kelesidis
87034e3ad8
Minor improvements (#1406)
* Minor improvements

* Update viewtopic.tpl

* Update page_footer.php

* Update admin_forums.php

* Update CHANGELOG.md
2024-02-14 20:44:13 +07:00
Roman Kelesidis
059bc61547 Update CHANGELOG.md 2024-02-13 17:40:52 +07:00
Roman Kelesidis
2800c207fb
Minor improvements (#1405)
* Minor improvements

* Updated

* Update CHANGELOG.md
2024-02-13 17:28:47 +07:00
Yury Pikhtarev
a573f30797
New Crowdin updates (#1403)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2024-02-13 00:24:30 +07:00
Roman Kelesidis
bf7fea1f20
Added demo mode 📺 (#1399)
* Added demo mode 📺

* Updated

* Update main.php

* Updated

* Updated

* Update admin_cron.php

* Update admin_phpinfo.php

* Updated

* Update admin_forums.php

* Update admin_extensions.php

* Update admin_ug_auth.php

* Update index.php

* Update admin_phpinfo.php

* Update admin_forums.php

* Updated

* Update admin_extensions.php

* Update register.php

* Updated

* Update mysql.sql

* Updated

* Update demo_mode.php

* Update demo_mode.php

* Update demo_mode.php

* Updated

* Update demo_mode.php

* Update demo_mode.php

* Update demo_mode.php

* Update demo_mode.php

* Update mysql.sql

* Update mysql.sql

* Update demo_mode.php

* Update admin_cron.php

* Update admin_phpinfo.php

* Revert "Update mysql.sql"

This reverts commit d2ec089d8f.

* Revert "Update mysql.sql"

This reverts commit dd7a584c47.

* Update mysql.sql

* Update demo_mode.php

* Updated

* Update usercp_viewprofile.tpl

* Update demo_mode.php

* Update main.php

* Update demo_mode.php

* Updated

* Update admin_cron.php

* Update admin_cron.php

* Update edit_user_profile.php

* Update CHANGELOG.md

* Update viewtopic.tpl

* Update CHANGELOG.md
2024-02-12 22:30:32 +07:00
Yury Pikhtarev
ab79ab9aea
New Crowdin updates (#1402)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations icon_code.gif (Romanian)

* New translations icon_code.gif (French)

* New translations icon_code.gif (Spanish)

* New translations icon_code.gif (Afrikaans)

* New translations icon_code.gif (Arabic)

* New translations icon_code.gif (Belarusian)

* New translations icon_code.gif (Bulgarian)

* New translations icon_code.gif (Catalan)

* New translations icon_code.gif (Czech)

* New translations icon_code.gif (Danish)

* New translations icon_code.gif (German)

* New translations icon_code.gif (Greek)

* New translations icon_code.gif (Finnish)

* New translations icon_code.gif (Hebrew)

* New translations icon_code.gif (Hungarian)

* New translations icon_code.gif (Armenian)

* New translations icon_code.gif (Italian)

* New translations icon_code.gif (Japanese)

* New translations icon_code.gif (Georgian)

* New translations icon_code.gif (Korean)

* New translations icon_code.gif (Lithuanian)

* New translations icon_code.gif (Dutch)

* New translations icon_code.gif (Norwegian)

* New translations icon_code.gif (Polish)

* New translations icon_code.gif (Russian)

* New translations icon_code.gif (Slovak)

* New translations icon_code.gif (Slovenian)

* New translations icon_code.gif (Albanian)

* New translations icon_code.gif (Serbian (Cyrillic))

* New translations icon_code.gif (Swedish)

* New translations icon_code.gif (Turkish)

* New translations icon_code.gif (Ukrainian)

* New translations icon_code.gif (Chinese Traditional)

* New translations icon_code.gif (English)

* New translations icon_code.gif (Vietnamese)

* New translations icon_code.gif (Portuguese, Brazilian)

* New translations icon_code.gif (Indonesian)

* New translations icon_code.gif (Thai)

* New translations icon_code.gif (Croatian)

* New translations icon_code.gif (Kazakh)

* New translations icon_code.gif (Estonian)

* New translations icon_code.gif (Latvian)

* New translations icon_code.gif (Azerbaijani)

* New translations icon_code.gif (Hindi)

* New translations icon_code.gif (Bosnian)

* New translations icon_code.gif (Uzbek)

* New translations icon_code.gif (Tajik)
2024-02-12 22:27:33 +07:00
Roman Kelesidis
c116fe970b
Added ability to view post_text of topic (#1401)
* Added ability to view `post_text` of topic

* Updated

* Update viewtopic.tpl

* Update view_post.php

* Update view_post.php

* Update view_post.php

* Update view_post.php

* Updated

* Update viewtopic.tpl

* Create _source.gif

* Create icon_code.gif

* Update tpl_config.php

* Updated

* Updated

* Updated

* Updated

* Update config.php

* Update icon_code.gif

* Updated

* Delete icon_code.gif

* Update CHANGELOG.md
2024-02-12 21:06:37 +07:00
Roman Kelesidis
a965209be0
Fixed Undefined variable $wordCensor (#1400)
* Fixed Undefined variable $wordCensor

* Update CHANGELOG.md
2024-02-12 17:34:05 +07:00
Roman Kelesidis
3b9590c5ef
Update README.md 2024-02-12 10:31:47 +07:00
Roman Kelesidis
5182570731
Update README.md 2024-02-12 10:28:52 +07:00
Roman Kelesidis
d29af372c4
Update README.md 2024-02-12 10:27:11 +07:00
Roman Kelesidis
73e0e246a2 Update README.md 2024-02-11 13:04:30 +07:00
Roman Kelesidis
7c703164d2
Minor improvements (#1398)
* Minor improvements

* Update viewtopic.php

* Update functions.php

* Update functions.php

* Update usercp_register.tpl

* Update register.php

* Update register.php

* Update CHANGELOG.md
2024-02-10 22:22:26 +07:00
Roman Kelesidis
a63b25f8ba Revert "Minor improvements (#1394)"
This reverts commit 392186c36e.
2024-02-10 21:14:49 +07:00
Roman Kelesidis
5e691a0279 Revert "Minor improvements (#1395)"
This reverts commit 679d422a2a.
2024-02-10 21:14:19 +07:00
Roman Kelesidis
a63ec7a4f5
Added support for rutracker font BBCode tag (#1397)
* Added support for rutracker font BBCode tag

* Update CHANGELOG.md
2024-02-10 20:51:08 +07:00
Roman Kelesidis
679d422a2a
Minor improvements (#1395)
* Minor improvements

* Updated

* Update functions.php

* Update functions.php

* Update mysql.sql

* Update viewtopic.php

* Update CHANGELOG.md
2024-02-09 18:43:03 +07:00
Roman Kelesidis
392186c36e
Minor improvements (#1394)
* Minor improvements

* Update functions.php

* Update CHANGELOG.md
2024-02-09 01:44:23 +07:00
Roman Kelesidis
09b49151ee Update CHANGELOG.md 2024-02-08 23:21:07 +07:00
Yury Pikhtarev
0f8c6dc048
New Crowdin updates (#1392)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2024-02-08 23:18:25 +07:00
Roman Kelesidis
d5390132ec
Improved word censor 🤐 (#1393)
* Improved default word censor

* Updated

* Updated

* Updated

* Update Censor.php

* Update CHANGELOG.md

* Updated
2024-02-08 23:17:09 +07:00
Roman Kelesidis
800cd714ef Merge branch 'master' of https://github.com/torrentpier/torrentpier 2024-02-08 17:58:55 +07:00
Roman Kelesidis
1bbe3798a6 Update CHANGELOG.md 2024-02-08 17:58:46 +07:00
Yury Pikhtarev
b6fba7fe04
New Crowdin updates (#1389)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2024-02-08 17:58:25 +07:00
Roman Kelesidis
fdc56b42c1
Minor improvements (#1391)
* Minor improvements

* Update CHANGELOG.md
2024-02-08 17:57:03 +07:00
Roman Kelesidis
e6e802a6a6
Fixed issue with poll_users cleaning at every cron job startup (#1390)
* Fixed issue with poll_users cleaning at every cron job startup

* Update CHANGELOG.md
2024-02-08 17:46:14 +07:00
Roman Kelesidis
58af3dff58
Added mod "Reason to move topic" (#1388)
* Added mod "Reason to move topic"

* Update CHANGELOG.md
2024-02-08 15:41:10 +07:00
Roman Kelesidis
6585b3124d
Used hashing for filenames generation (#1385)
* Some code cleanup...

* Used hashing for filenames generation

* Revert "Some code cleanup..."

This reverts commit 2dca4c3fb3.

* Update Attach.php

* Update Attach.php

* Update Attach.php
2024-02-08 15:25:05 +07:00
Roman Kelesidis
f9df8fbe80 Update CHANGELOG.md 2024-02-08 14:35:51 +07:00
Roman Kelesidis
b0124c8bb2
Some code cleanup... (#1386) 2024-02-08 14:31:53 +07:00
Roman Kelesidis
80fe5a5e60
Removed wbr() (#1387) 2024-02-08 14:30:22 +07:00
Yury Pikhtarev
c0117d3616
New Crowdin updates (#1384)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Romanian)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-02-08 07:06:41 +07:00
Roman Kelesidis
cebdafb82c
Minor improvements (#1383)
* Minor improvements

* Update CHANGELOG.md
2024-02-08 00:52:38 +07:00
Roman Kelesidis
7d0f2e1ace
Minor improvements (#1382)
* Minor improvements

* Update viewforum.tpl

* Update config.php

* Update admin_forums.tpl

* Update CHANGELOG.md

* Update admin_forums.tpl
2024-02-07 17:25:35 +07:00
Roman Kelesidis
fed538625d
Created template file for AJAX quick actions (#1381)
* Created template file for AJAX quick actions

* Update CHANGELOG.md
2024-02-06 21:20:49 +07:00
Roman Kelesidis
65d9f6d864
Some bugfixes (#1380)
* Some bugfixes

* Update CHANGELOG.md

* Updated

* Update privmsg.php

* Update displaying_torrent.php

* Update privmsg.php
2024-02-06 14:30:00 +07:00
Roman Kelesidis
1da27ad708 Release v2.4.1 💔 2024-02-04 23:12:02 +07:00
Roman Kelesidis
87a300c74c
Minor improvements (#1373)
* Minor improvements

* Update CHANGELOG.md

* Updated

* Update index.php

* Update dl_list.php

* Revert "Update dl_list.php"

This reverts commit 6b16ecaaf7.

* Revert "Update index.php"

This reverts commit a42d3f01fc.

* Revert "Updated"

This reverts commit 360c4cf305.

* Updated

* Updated
2024-02-04 23:01:43 +07:00
Roman Kelesidis
1356ad6450 Update CHANGELOG.md 2024-02-04 22:37:19 +07:00
Roman Kelesidis
dc7d1be9ee
Fixed quick reply issue (#1379)
* Fixed quick reply issue

* Update CHANGELOG.md
2024-02-04 22:36:07 +07:00
Roman Kelesidis
51985d4c48 Update CHANGELOG.md 2024-02-04 17:22:26 +07:00
Roman Kelesidis
f7752b8f6b Update CHANGELOG.md 2024-02-04 17:21:52 +07:00
Roman Kelesidis
203c916fb9
Some reported bugfixes (#1378)
* Some reported bugfixes

* Update privmsg.php

* Update privmsg.php

* Update privmsg.php

* Update privmsg.php

* Update privmsg.php

* Update CHANGELOG.md
2024-02-04 17:20:32 +07:00
Roman Kelesidis
acbe838c23
Fixed negative integer seed bonus accrual (#1377)
* Fixed negative integer seed bonus accrual

* Update CHANGELOG.md
2024-02-04 13:59:21 +07:00
Roman Kelesidis
8abd491d5a Update CHANGELOG.md 2024-02-03 01:44:29 +07:00
Yury Pikhtarev
fd4c6321f6
New Crowdin updates (#1376)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2024-02-03 01:42:37 +07:00
Roman Kelesidis
a716283be0
Added [indent] BBCode tag (#1375)
* Added `[indent]` BBCode tag

* Update CHANGELOG.md

* Update main.php

* Update posting_editor.tpl
2024-02-02 21:31:29 +07:00
Roman Kelesidis
73eedb5c65
Fixed: mb_strlen(): Passing null parameter (#1374)
* Fixed: mb_strlen(): Passing null parameter

* Update CHANGELOG.md

* Update functions.php
2024-02-02 21:13:36 +07:00
Roman Kelesidis
5a975f20b8 Update CHANGELOG.md 2024-02-01 22:22:32 +07:00
Roman Kelesidis
0f1f5baa65
Added ability to send debug via Telegram (#1372)
* Added ability to send debug via Telegram

* Update CHANGELOG.md
2024-02-01 22:21:00 +07:00
Roman Kelesidis
97a9b25bdd
Fixed admin_terms.php textarea reset in preview mode (#1371)
* Fixed `admin_terns.php` textarea reset in preview mode

* Update CHANGELOG.md
2024-02-01 18:08:38 +07:00
Yury Pikhtarev
dd70686fa2
New Crowdin updates (#1370)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations sidebar1.html (Romanian)

* New translations sidebar1.html (French)

* New translations sidebar1.html (Spanish)

* New translations sidebar1.html (Afrikaans)

* New translations sidebar1.html (Arabic)

* New translations sidebar1.html (Belarusian)

* New translations sidebar1.html (Bulgarian)

* New translations sidebar1.html (Catalan)

* New translations sidebar1.html (Czech)

* New translations sidebar1.html (Danish)

* New translations sidebar1.html (German)

* New translations sidebar1.html (Greek)

* New translations sidebar1.html (Finnish)

* New translations sidebar1.html (Hebrew)

* New translations sidebar1.html (Hungarian)

* New translations sidebar1.html (Armenian)

* New translations sidebar1.html (Italian)

* New translations sidebar1.html (Japanese)

* New translations sidebar1.html (Georgian)

* New translations sidebar1.html (Korean)

* New translations sidebar1.html (Lithuanian)

* New translations sidebar1.html (Dutch)

* New translations sidebar1.html (Norwegian)

* New translations sidebar1.html (Polish)

* New translations sidebar1.html (Russian)

* New translations sidebar1.html (Slovak)

* New translations sidebar1.html (Slovenian)

* New translations sidebar1.html (Albanian)

* New translations sidebar1.html (Serbian (Cyrillic))

* New translations sidebar1.html (Swedish)

* New translations sidebar1.html (Turkish)

* New translations sidebar1.html (Ukrainian)

* New translations sidebar1.html (Chinese Traditional)

* New translations sidebar1.html (English)

* New translations sidebar1.html (Vietnamese)

* New translations sidebar1.html (Portuguese, Brazilian)

* New translations sidebar1.html (Indonesian)

* New translations sidebar1.html (Thai)

* New translations sidebar1.html (Croatian)

* New translations sidebar1.html (Kazakh)

* New translations sidebar1.html (Estonian)

* New translations sidebar1.html (Latvian)

* New translations sidebar1.html (Azerbaijani)

* New translations sidebar1.html (Hindi)

* New translations sidebar1.html (Bosnian)

* New translations sidebar1.html (Uzbek)

* New translations sidebar1.html (Tajik)
2024-02-01 17:46:54 +07:00
Roman Kelesidis
c2a2924749 Update CHANGELOG.md 2024-02-01 15:34:47 +07:00
Roman Kelesidis
37dba7522e
Minor improvements (#1369)
* Minor improvements

* Update CHANGELOG.md

* Updated
2024-02-01 15:24:48 +07:00
Roman Kelesidis
3542c083c5 Revert "Extend css contrast attributes (#1349)"
This reverts commit 39885911e7.
2024-02-01 15:23:37 +07:00
Roman Kelesidis
727cbc1388 Revert "CSS hover for news (#1359)"
This reverts commit c090a5dbe6.
2024-02-01 14:52:00 +07:00
Roman Kelesidis
7323f5cd34
Added [box] BBCode tag (#1368)
* Added `[box]` BBCode tag

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-02-01 14:43:05 +07:00
dependabot[bot]
c82147a4a0
Composer(deps-dev): Bump symfony/var-dumper from 6.4.2 to 6.4.3 (#1365)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.2 to 6.4.3.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.2...v6.4.3)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 13:11:51 +07:00
dependabot[bot]
2f59004d0e
Composer(deps): Bump arokettu/torrent-file from 5.2.1 to 5.2.2 (#1366)
Bumps [arokettu/torrent-file](https://github.com/arokettu/torrent-file) from 5.2.1 to 5.2.2.
- [Release notes](https://github.com/arokettu/torrent-file/releases)
- [Changelog](https://github.com/arokettu/torrent-file/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arokettu/torrent-file/compare/5.2.1...5.2.2)

---
updated-dependencies:
- dependency-name: arokettu/torrent-file
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 13:11:21 +07:00
dependabot[bot]
d40fe39a1b
Composer(deps): Bump symfony/mailer from 6.4.2 to 6.4.3 (#1367)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.2 to 6.4.3.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.2...v6.4.3)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 13:08:55 +07:00
Roman Kelesidis
0317664383
Moved announcer url autofill into cron (#1364)
* Moved announcer autofill into cron

* Update CHANGELOG.md
2024-02-01 00:13:48 +07:00
Roman Kelesidis
f87578c94f
Used modern-normalize instead of outdated nornalize-css (#1363)
* Used `modern-normalize` instead of outdated `nornalizecss`

* Update filelist.php

* Update page_header.tpl

* Update sidebar1.html

* Update CHANGELOG.md
2024-01-31 23:59:22 +07:00
Cønstantine Kovalensky
eb48bad47b
Code re-formatting (#1362) 2024-01-31 09:30:52 +04:00
Roman Kelesidis
46910d3015
Minor improvements (#1358)
* Minor improvements

* Update viewtopic_torrent.tpl

* Update admin_rebuild_search.php

* Updated

* Apply fixes from StyleCI (#1361)

Co-authored-by: StyleCI Bot <bot@styleci.io>

* Update CHANGELOG.md

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2024-01-30 22:18:05 +07:00
Cønstantine Kovalensky
ae613c9c70
Counter is not precise (#1360) 2024-01-30 18:16:33 +04:00
Cønstantine Kovalensky
c090a5dbe6
CSS hover for news (#1359) 2024-01-28 12:41:28 +04:00
Cønstantine Kovalensky
827ce7998d
Add referrer "origin" policy to repository links (#1357) 2024-01-28 10:46:06 +04:00
Roman Kelesidis
be08d2bba9
Some enhancements for topic_tpl (#1356)
* Some enhancements for topic_tpl

* Update CHANGELOG.md

* Update posting_tpl.tpl
2024-01-28 13:40:36 +07:00
Roman Kelesidis
0a25af04e3
Minor improvements (#1355)
* Minor improvements

* Update CHANGELOG.md
2024-01-28 10:17:19 +07:00
Cønstantine Kovalensky
0a34d63ab0
Code re-formatting (#1354) 2024-01-27 22:28:31 +04:00
Roman Kelesidis
89d8415865
Minor improvements (#1353)
* Minor improvements

* Update CHANGELOG.md
2024-01-28 01:23:24 +07:00
Roman Kelesidis
a8b8278352
Fixed broken user dl status (#1351)
* Fixed broken user dl status

* Update viewtopic_torrent.tpl

* Update displaying_torrent.php

* Update displaying_torrent.php

* Update displaying_torrent.php

* Updated

* Update CHANGELOG.md

* Update CHANGELOG.md
2024-01-27 19:55:47 +07:00
Cønstantine Kovalensky
15080b054d
Flatten file list for hybrid files (#1350)
By Anton's advice:
https://gitlab.com/sandfox/torrent-file/-/issues/6#note_1746451068
2024-01-27 15:28:15 +04:00
Cønstantine Kovalensky
39885911e7
Extend css contrast attributes (#1349) 2024-01-27 12:36:04 +04:00
Cønstantine Kovalensky
4d9bfa6dea
[BEP47] sha1 hash files are binary by default (#1348) 2024-01-27 11:34:48 +04:00
Roman Kelesidis
c43b54b8c5
Added new flag 🕊 (#1347)
* Added new flag 🕊

* Update functions.php
2024-01-27 11:18:25 +07:00
Roman Kelesidis
66b9b7bdc4
Fixed download counter for torrents (#1346)
* Fixed download counter for torrents

* Updated

* Updated

* Update CHANGELOG.md
2024-01-27 11:04:10 +07:00
Roman Kelesidis
f993983eb0 Update CHANGELOG.md 2024-01-27 10:40:07 +07:00
Roman Kelesidis
8b78253ddc
Don't update download counter if attachment not exists (#1345)
* Don't update download counter if attachment not exists

* Update CHANGELOG.md

* Update CHANGELOG.md

* Updated
2024-01-27 10:33:02 +07:00
Yury Pikhtarev
d6a3598d04
New Crowdin updates (#1344)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-01-27 09:58:41 +07:00
Cønstantine Kovalensky
0af44116ff
Little fix (#1343)
* Remove invalid file in directory
2024-01-27 01:05:33 +04:00
Cønstantine Kovalensky
01c7672dfa
Little fix (2) (#1342)
Use more pixelated image
2024-01-27 00:54:34 +04:00
Cønstantine Kovalensky
14fb6002b0
Little fix (#1341) 2024-01-26 23:58:14 +04:00
Cønstantine Kovalensky
306994f629
Timeline — 2.4.1 (#1340) 2024-01-26 23:19:25 +04:00
Roman Kelesidis
17522c6d8d Revert "Use constants instead of string literals (#1332)"
This reverts commit cdb33ba7a4.
2024-01-25 23:06:05 +07:00
Roman Kelesidis
7f6f49c26d
Minor improvements (#1338)
* Minor improvements

* Update CHANGELOG.md
2024-01-24 15:55:36 +07:00
Yury Pikhtarev
1bb667fb0a
New Crowdin updates (#1337)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-01-24 09:31:10 +07:00
Roman Kelesidis
f154d706f8
Added ability to view "Watching topics" of other people's (Admins) (#1336)
* Added ability to view "Watching topics" of other people's (For admins only)

* Update CHANGELOG.md
2024-01-24 01:03:38 +07:00
Yury Pikhtarev
3e92b105ad
New Crowdin updates (#1335)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-01-23 22:15:34 +07:00
Roman Kelesidis
15a5ae7b2f
Added "Random release" button in tracker.php (#1334)
* Added "Random release" button in tracker.php

* Updated

* Update CHANGELOG.md
2024-01-23 18:46:48 +07:00
Roman Kelesidis
8a81eabe30
WIP: Some enhancements in default template (Part 2) (#1322)
* Some enhancements in default template (Part 2)

* Update CHANGELOG.md

* Updated

* Revert "Updated"

This reverts commit decd0afc69.

* Updated
2024-01-23 16:13:38 +07:00
Roman Kelesidis
cdb33ba7a4
Use constants instead of string literals (#1332)
* Minor improvements

* Update CHANGELOG.md
2024-01-23 16:05:03 +07:00
Roman Kelesidis
f28b3e2d80
Added bt_announce_url autofill (#1331)
* `bt_announce_url` autofill

* Update CHANGELOG.md
2024-01-22 14:48:39 +07:00
Roman Kelesidis
1ba5576ad5
Use target="_blank" in admin for profile_url() redirects (#1330)
* Use target="_blank" in admin for profile_url() redirects

* Update CHANGELOG.md
2024-01-21 14:13:32 +07:00
Roman Kelesidis
3b4fe8008b
Fixed auth(): empty $f_access (#1329)
* Fixed auth(): empty $f_access

* Update functions.php

* Update CHANGELOG.md

* Updated

* Update functions.php

* Update functions.php
2024-01-21 02:08:13 +07:00
Roman Kelesidis
7ee71887f2
Minor improvements (#1328)
* Minor improvements

* Update CHANGELOG.md
2024-01-19 15:54:28 +07:00
Roman Kelesidis
a438031c68
Added support for fastly cdn (#1327)
* Added support for Fastly CDN

Co-Authored-By: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>

* Update common.php

Co-Authored-By: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>

---------

Co-authored-by: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2024-01-19 15:27:53 +07:00
Roman Kelesidis
a46c40e106
Some bugfixes (#1326)
* Some bugfixes

* Update CHANGELOG.md

* Update functions_admin.php
2024-01-19 00:33:29 +07:00
Roman Kelesidis
1a34072e98 Update CHANGELOG.md 2024-01-17 13:57:16 +07:00
Roman Kelesidis
ccb001ca27
Sending debug errors to us to Telegram bot (#1323)
* Sending debug errors to us to Telegram bot

* Update Dev.php

* Updated

* Apply fixes from StyleCI (#1325)

Co-authored-by: StyleCI Bot <bot@styleci.io>

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2024-01-17 13:53:01 +07:00
Roman Kelesidis
9b10b16460
Fixed HTTP 500 while cron running in server-side (#1321)
* Fixed HTTP 500 while cron running in server-side

* Update CHANGELOG.md
2024-01-17 13:08:43 +07:00
Roman Kelesidis
125cd11c01
Set response code in some cases (#1319)
* Set response code in some cases

* Update CHANGELOG.md
2024-01-17 11:10:18 +07:00
Roman Kelesidis
ae616f3a74
Minor improvements (#1315)
* Minor improvements

* Update functions.php

* Revert "Update functions.php"

This reverts commit 2a1c0c6ebe.

* Update functions.php

* Revert "Update functions.php"

This reverts commit b766af59ac.

* Update functions.php

* Update CHANGELOG.md
2024-01-13 15:29:32 +07:00
Roman Kelesidis
6759ce0595
Some enhancements in default template (#1312)
* Some enhancements in default template

* Updated

* Updated

* Updated

* Updated

* Updated

* Updated

* Update admin_user_search.tpl

* Updated

* Updated

* Update admin_attachments.tpl

* Updated

* Updated

* Update posting_smilies.tpl

* Updated

* Update CHANGELOG.md
2024-01-10 10:39:54 +07:00
Roman Kelesidis
1b50dde57b Update CHANGELOG.md 2024-01-10 09:13:08 +07:00
Yury Pikhtarev
b59ee4463e
New Crowdin updates (#1314)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-01-09 14:48:10 +07:00
Roman Kelesidis
0c15224d87
Used humn_size() to count average of releases in tr_stats.php (#1313) 2024-01-09 14:05:21 +07:00
Yury Pikhtarev
b1537359f6
New Crowdin updates (#1311)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2024-01-07 01:09:52 +07:00
Roman Kelesidis
119e05945f Update CHANGELOG.md 2024-01-06 22:06:54 +07:00
Roman Kelesidis
fed1633c1c Updated version number 2024-01-06 22:05:08 +07:00
Roman Kelesidis
489c02aea1
Used declensions for days in some cases (#1310)
* Minor improvements

* Update admin_forums.php

* Updated

* Updated

* Updated
2024-01-06 21:57:41 +07:00
Roman Kelesidis
6bf987edb0
Used datastore to show statistic for more performance (#1309)
* Used datastore to show statistic for more performance

* Update admin_forums.php
2024-01-06 14:07:27 +07:00
Roman Kelesidis
f48e7121df
Minor improvements (#1308)
* Minor improvements

* Updated
2024-01-06 12:59:26 +07:00
Roman Kelesidis
f456c827d7
Minor improvements (#1307)
* Minor improvements

* Updated

* Update Attach.php

* Update posting_attachments.php

* Update change_tor_status.php

* Updated
2024-01-05 00:20:51 +07:00
Roman Kelesidis
36e52d5d3b
Minor improvements (#1306)
* Minor improvements

* Update functions.php

* Updated

* Updated

* Update edit_user_profile.php

* Update index_data.php

* Update

* Update sitemap.php
2024-01-02 21:18:54 +07:00
Roman Kelesidis
7d32944d36 Revert "Moved file_list_v2.php back to includes (#1303)"
This reverts commit be5c34a951.
2024-01-02 19:31:07 +07:00
dependabot[bot]
1303a86b12
Composer(deps-dev): Bump symfony/var-dumper from 6.4.0 to 6.4.2 (#1305)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.4.0...v6.4.2)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 15:24:27 +07:00
dependabot[bot]
3bcf56f6ff
Composer(deps): Bump symfony/mailer from 6.4.0 to 6.4.2 (#1304)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.4.0...v6.4.2)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-01 15:24:19 +07:00
Roman Kelesidis
b1634b6763 Update README.md 2024-01-01 02:47:32 +07:00
Roman Kelesidis
86cd0bf732 Release v2.4.0-stable ☃️ 2023-12-31 22:38:34 +07:00
Roman Kelesidis
be5c34a951
Moved file_list_v2.php back to includes (#1303) 2023-12-31 22:32:49 +07:00
Roman Kelesidis
8a91a44ef2
Update README.md 2023-12-31 21:43:05 +07:00
Roman Kelesidis
bcb5b74d35 Update robots.txt 2023-12-31 16:16:56 +07:00
Roman Kelesidis
1eacf48c62 Update README.md 2023-12-31 16:02:43 +07:00
Roman Kelesidis
49ddfb1cc6
Minor improvements (#1302) 2023-12-31 15:37:33 +07:00
Roman Kelesidis
23456902e3
Minor improvements (#1301)
* Minor improvements

* Update filelist.php
2023-12-31 15:28:45 +07:00
Yury Pikhtarev
ea8d2d76a4
New Crowdin updates (#1300)
* New translations main.php (Russian)

* New translations privmsg_notify.html (Russian)

* New translations profile_send_email.html (Russian)

* New translations topic_notify.html (Russian)

* New translations user_activate.html (Russian)

* New translations user_activate_passwd.html (Russian)
2023-12-31 13:49:52 +07:00
Roman Kelesidis
6c2b969aa1 Update CHANGELOG.md 2023-12-31 13:09:31 +07:00
Yury Pikhtarev
27f88ba819
New translations main.php (Russian) (#1299) 2023-12-31 12:47:55 +07:00
Roman Kelesidis
8240ac3f2b Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-12-31 11:50:08 +07:00
Roman Kelesidis
af41ee02c2 Update CHANGELOG.md 2023-12-31 11:49:57 +07:00
Yury Pikhtarev
04e48a31de
New translations main.php (Russian) (#1297) 2023-12-31 11:49:17 +07:00
Roman Kelesidis
e87c75d27e
Minor improvements (#1298)
* Minor improvements

* Update CHANGELOG.md
2023-12-31 11:48:30 +07:00
Roman Kelesidis
afdc2d927e Update CHANGELOG.md 2023-12-31 11:32:44 +07:00
Yury Pikhtarev
f8d2da15c8
New Crowdin updates (#1296)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-31 00:26:34 +04:00
Roman Kelesidis
ec67edd1ff
Added missing lang variable (#1295)
* Added missing lang variable

* Update CHANGELOG.md
2023-12-31 01:44:41 +07:00
Roman Kelesidis
fdd84cb258 Update CHANGELOG.md 2023-12-31 01:36:26 +07:00
Roman Kelesidis
ca23539fe9 Update CHANGELOG.md 2023-12-31 01:34:53 +07:00
Roman Kelesidis
1a3bdf171e
Minor improvements (#1294) 2023-12-31 01:28:21 +07:00
Roman Kelesidis
09f352d2dd
Block uploading more than one torrent file (#1293) 2023-12-31 01:25:45 +07:00
Cønstantine Kovalensky
dfc79f8109
Update README.md (#1292) 2023-12-30 00:25:16 +04:00
Cønstantine Kovalensky
9e4966c4fd
Update README.md (#1290) 2023-12-29 23:39:15 +04:00
Yury Pikhtarev
f89906d853
New Crowdin updates (#1287)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-29 23:00:56 +04:00
Roman Kelesidis
eaa86f814e
Minor improvements (#1289) 2023-12-30 02:00:19 +07:00
Cønstantine Kovalensky
b35cacc71d
Some display correction (#1288) 2023-12-29 21:42:35 +04:00
Roman Kelesidis
6bbacdfa3e
Minor improvements (#1286) 2023-12-30 00:37:29 +07:00
Roman Kelesidis
28fb4cbffb
Minor improvements (#1285) 2023-12-30 00:32:22 +07:00
Roman Kelesidis
8adb0eae3b
Few cosmetic improvements (#1284) 2023-12-29 23:03:02 +07:00
Cønstantine Kovalensky
c70efeec1b
Some .png file optimizations (#1283) 2023-12-29 13:45:53 +04:00
Yury Pikhtarev
339a071563
New Crowdin updates (#1282)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-29 08:46:20 +07:00
Roman Kelesidis
0204cd0047
Minor improvements (#1281) 2023-12-29 08:32:54 +07:00
Cønstantine Kovalensky
2f8952b3bf
Some CSS additions (#1280) 2023-12-29 00:11:44 +04:00
Cønstantine Kovalensky
0a190bf98a
Announcer integer limits & Country flags display (#1277) 2023-12-28 23:21:25 +04:00
Roman Kelesidis
a3e3aee8df
Minor improvements (#1279)
* Minor improvements

* Update CHANGELOG.md

* Update displaying_torrent.php

* Update displaying_torrent.php
2023-12-28 09:10:50 +07:00
Roman Kelesidis
ed8eeecfec Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-12-28 08:16:52 +07:00
Roman Kelesidis
20330ae4ee Update CHANGELOG.md 2023-12-28 08:16:45 +07:00
Roman Kelesidis
5b68bd857a
Some enhancements (#1278) 2023-12-28 08:12:29 +07:00
Roman Kelesidis
3626143879
Replaced some file exists to is file (#1276)
* Replaced some file_exists to is_file

* Update functions_thumbs.php

* Updated

* Update CronHelper.php

* Updated

* Update IPHelper.php

* Updated

* Update update_forums_atom.php

* Update functions.php

* Update Validate.php
2023-12-27 20:08:00 +07:00
Roman Kelesidis
e8a90b025c
Some reported bugfixes (#1275)
* Some reported bugfixes

* Updated

* Update common.php

* Update BBCode.php
2023-12-27 12:15:43 +07:00
Cønstantine Kovalensky
13bf41e776
Translations (#1274) 2023-12-26 22:27:33 +04:00
Roman Kelesidis
70322d7b73
Minor improvements (#1273)
* Minor improvements

* Updated
2023-12-27 01:26:35 +07:00
Roman Kelesidis
edc365b487
Minor improvements (#1271)
* Minor improvements

* Update admin_user_ban.php
2023-12-27 01:02:05 +07:00
Cønstantine Kovalensky
cf8fd449f7
Little fixes (#1272) 2023-12-26 21:54:09 +04:00
Roman Kelesidis
250b07f3c3 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-12-27 00:19:21 +07:00
Roman Kelesidis
185ec51122 Update CHANGELOG.md 2023-12-27 00:19:14 +07:00
Roman Kelesidis
b19abc3ab2
Striked username if user banned (#1270)
* Striked username if user banned

* Update CHANGELOG.md
2023-12-27 00:17:03 +07:00
Roman Kelesidis
66083cabad
Make caching for ban list (#1269) 2023-12-27 00:16:54 +07:00
Cønstantine Kovalensky
ed34bbb735
Move filelist feature to another file (#1268) 2023-12-26 20:52:05 +04:00
Roman Kelesidis
50dbc617cd
Striked username if user banned (#1267)
* Striked username if user banned

* Update CHANGELOG.md
2023-12-26 23:15:51 +07:00
Roman Kelesidis
2d54b82f1c Update CHANGELOG.md 2023-12-26 23:04:59 +07:00
Roman Kelesidis
23f3d352e2
Minor improvements (#1266) 2023-12-26 23:02:40 +07:00
Yury Pikhtarev
8660205fd5
New Crowdin updates (#1264)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-26 18:08:04 +07:00
Roman Kelesidis
6b798b0bf5
Minor improvements (#1265) 2023-12-26 17:59:16 +07:00
Roman Kelesidis
b16ee57faf
Minor improvements (#1263) 2023-12-26 17:48:28 +07:00
Roman Kelesidis
7beb4afa72
Some improvements for Ban functionality (#1262)
* Some improvements for Ban functionality

* Updated

* Updated

* Update functions.php

* Updated

* Update viewprofile.php

* Update viewtopic.php

* Updated

* Updated

* Updated

* Updated

* Update mysql.sql

* Updated

* Updated
2023-12-26 17:38:16 +07:00
Roman Kelesidis
d090678e14 Update CHANGELOG.md 2023-12-26 12:00:58 +07:00
Roman Kelesidis
f350c2e2db
Changed default upload path (#1261)
* Changed default upload path

* Update .gitignore

* Update CHANGELOG.md
2023-12-26 11:54:01 +07:00
Yury Pikhtarev
5ea18ba434
New Crowdin updates (#1260)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-26 11:53:50 +07:00
Roman Kelesidis
1c6d76b6b6 Update CHANGELOG.md 2023-12-26 11:44:46 +07:00
Roman Kelesidis
297163953e
Minor improvements (#1259) 2023-12-26 11:41:45 +07:00
Cønstantine Kovalensky
0791859923
Show user's ban status (#1258) 2023-12-25 23:07:47 +04:00
Cønstantine Kovalensky
5a3d5947ce
Use "Views" string for thumbnails (#1257) 2023-12-24 22:05:53 +04:00
Cønstantine Kovalensky
b4198d3ccc
Update file_list_v2.php (#1256)
Some SEO little-thingy
2023-12-24 20:46:56 +04:00
Roman Kelesidis
d212ed92b5 Update CHANGELOG.md 2023-12-23 20:27:49 +07:00
Roman Kelesidis
f483aa273b
Some cleanup (#1255) 2023-12-23 20:26:58 +07:00
Roman Kelesidis
912838cd1a Update CHANGELOG.md 2023-12-23 17:20:33 +07:00
Roman Kelesidis
b97e48ce2c
Minor improvements (#1254)
* Minor improvements

* Update CHANGELOG.md
2023-12-23 17:18:36 +07:00
Roman Kelesidis
94cb6ab73c
Minor improvements (#1253)
* Minor improvements

* Update .gitignore

* Update admin_smilies.php

* Update CHANGELOG.md
2023-12-23 14:20:06 +07:00
Cønstantine Kovalensky
cb06f82f06
Update footer text to unique one (#1252) 2023-12-23 09:25:58 +04:00
Yury Pikhtarev
d76702930e
New Crowdin updates (#1251)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-12-23 02:01:03 +07:00
Roman Kelesidis
94f1641b5c
Some cleanup for attach mod (#1250)
* Some cleanup for attach mod

* Update displaying.php

* Update CHANGELOG.md
2023-12-23 01:19:26 +07:00
Roman Kelesidis
65c7903b21
Refactored thumbnail creation 🌄 (#1249)
* Refactored thumbnail creation

* Updated

* Updated

* Updated

* Updated

* Updated

* Update functions_thumbs.php

* Update functions_thumbs.php

* Update displaying.php

* Update mysql.sql

* Update mysql.sql

* Update CHANGELOG.md
2023-12-23 00:42:59 +07:00
Roman Kelesidis
d57bf5265a
Minor improvements (#1248)
* WIP: Minor improvements

* Update Torrent.php

* Updated

* Updated

* Revert "Updated"

This reverts commit e98a5dfe9c.

* Revert "Updated"

This reverts commit 0b53396c56.

* Update group.php

* Update CHANGELOG.md
2023-12-22 16:04:16 +07:00
Cønstantine Kovalensky
573c772798
Use hardcoded dictionary names for better counting result in file listing (#1247)
Thanks to @arokettu for pointing this out.
2023-12-21 20:26:09 +04:00
Roman Kelesidis
486e5cc7d2
Improved handling errors while uploading (#1246) 2023-12-21 13:16:41 +07:00
Cønstantine Kovalensky
fbc4749ca9
Little improvements (#1244) 2023-12-21 09:10:34 +04:00
Roman Kelesidis
c4df759d09
Minor improvements (#1243)
* Minor improvements

* Update CHANGELOG.md
2023-12-21 11:23:08 +07:00
Yury Pikhtarev
c57233414f
Apply fixes from StyleCI (#1242)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-12-20 22:49:00 +04:00
Cønstantine Kovalensky
0525597a15
Handle & show upload_max_filesize occurences (#1241) 2023-12-20 22:47:32 +04:00
Yury Pikhtarev
e9fec26e7d
Apply fixes from StyleCI (#1240)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-12-20 21:47:33 +04:00
Cønstantine Kovalensky
586fc0b563
Exception handling for Bencode errors (#1239) 2023-12-20 21:46:49 +04:00
Cønstantine Kovalensky
a953045aba
Exception handling for Bencode errors (#1237) 2023-12-20 21:37:47 +04:00
Roman Kelesidis
508f73933a Update CHANGELOG.md 2023-12-21 00:26:51 +07:00
Roman Kelesidis
a2862f754c
Minor improvements (#1236) 2023-12-21 00:26:08 +07:00
Roman Kelesidis
428984524e
Hide vote button in poll if user already voted (#1235)
* Hide vote button in poll if user already voted

* Update viewtopic.php

* Update CHANGELOG.md
2023-12-21 00:15:06 +07:00
Roman Kelesidis
7a7334879c
Minor improvements (#1234)
* Minor improvements

* Update CHANGELOG.md
2023-12-20 23:15:48 +07:00
Roman Kelesidis
db597678b7
Fixed broken captcha check on login.php (#1233)
* Fixed broken captcha check on login.php

* Update CHANGELOG.md
2023-12-20 22:47:14 +07:00
Roman Kelesidis
86eb427fbd Revert "Fixed incorrect condition in bb_captcha (#1231)"
This reverts commit 2bb6c50710.
2023-12-20 22:26:40 +07:00
Roman Kelesidis
2bb6c50710
Fixed incorrect condition in bb_captcha (#1231)
* Fixed incorrect condition in bb_captcha

* Update CHANGELOG.md
2023-12-20 18:32:09 +07:00
Roman Kelesidis
517b62c2ba
Minor improvements (#1230)
* Minor improvements

* Update CHANGELOG.md
2023-12-20 17:46:51 +07:00
Roman Kelesidis
7341cb8b25
Minor improvements (#1229)
* Minor improvements

* Update CHANGELOG.md
2023-12-20 09:33:42 +07:00
Roman Kelesidis
f1ba593ba0 Update CHANGELOG.md 2023-12-20 09:05:28 +07:00
Roman Kelesidis
ce25c1a391 Update CHANGELOG.md 2023-12-20 09:02:18 +07:00
Roman Kelesidis
f4e0152d4a
Minor improvements (#1228) 2023-12-20 09:00:02 +07:00
Roman Kelesidis
7e7effefc5
Fixed set auth cookie issue (#1227) 2023-12-20 08:37:16 +07:00
Yury Pikhtarev
243d251066
New Crowdin updates (#1222)
* New translations main.php (Romanian)

* New translations main.php (Russian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Russian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2023-12-19 10:50:38 +04:00
Cønstantine Kovalensky
68013e1610
Code re-formatting (#1225->6) 2023-12-19 08:38:40 +04:00
Cønstantine Kovalensky
035c22f598
Code re-formatting (#1225) 2023-12-19 08:36:37 +04:00
Roman Kelesidis
86d02e9fae
Minor improvements (#1224)
* Minor improvements

* Update CHANGELOG.md

* Update CHANGELOG.md
2023-12-19 08:25:01 +07:00
Cønstantine Kovalensky
89ca744d85
Introduce limit setting for max number of files to be processed in separate index file-listing (#1223) 2023-12-18 22:32:24 +04:00
Roman Kelesidis
b5891ca663
Fixed broken sorting in group.php (#1221)
* Fixed broken sorting in group.php

* Update CHANGELOG.md
2023-12-18 23:48:24 +07:00
Roman Kelesidis
1da4d46822
Minor improvements (#1220) 2023-12-18 18:35:35 +07:00
Roman Kelesidis
860c863a11
Minor improvements (#1219)
* Minor improvements

* Update CHANGELOG.md
2023-12-18 18:28:03 +07:00
Roman Kelesidis
6660bf26e4
Fixed extensions issue (#1218)
* Fixed extensions issue

* Update CHANGELOG.md
2023-12-18 16:24:23 +07:00
Roman Kelesidis
0e7a60ad41
Minor improvements (#1217) 2023-12-18 15:28:09 +07:00
Roman Kelesidis
c7187dd4cd Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-12-18 14:41:57 +07:00
Roman Kelesidis
73c3d3e145 Update CHANGELOG.md 2023-12-18 14:41:50 +07:00
Roman Kelesidis
793b9634bf
Minor improvements (#1215) 2023-12-18 14:39:50 +07:00
Roman Kelesidis
8dd8f20802 Update CHANGELOG.md 2023-12-18 14:02:29 +07:00
Roman Kelesidis
9e164d772a
Some reported bugfixes (#1214) 2023-12-18 13:57:26 +07:00
Cønstantine Kovalensky
0b499dc137
Limit execution time for forum file-listing (#1211)
* Limit execution time for forum file-listing

* Prevent multiple ajax calling
---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-12-18 09:03:00 +04:00
Roman Kelesidis
4295a2c4c6
search.php parameter sanitizing (#1213)
Co-authored-by: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2023-12-18 07:56:28 +07:00
Cønstantine Kovalensky
d28094006f
tracker.php parameter sanitizing (#1212) 2023-12-17 15:29:17 +04:00
Roman Kelesidis
8d20a79bc7
Minor improvements for announcer (#1207) 2023-12-17 12:37:11 +07:00
Roman Kelesidis
5b712a8413
Removed useless condition in viewtopic_attach.tpl (#1208) 2023-12-17 12:37:00 +07:00
Roman Kelesidis
381d9b728f
Cleanup for attach_mod (#1210)
* Cleanup for attach_mod

* Update CHANGELOG.md
2023-12-16 14:23:17 +07:00
Roman Kelesidis
58e6537f03
Some enhancements for dl.php (#1209)
* Some enhancements for dl.php

* Update CHANGELOG.md
2023-12-16 13:32:41 +07:00
Yury Pikhtarev
101c8db18f
New Crowdin updates (#1203)
* New translations main.php (Russian)

* New translations group_added.html (Russian)

* New translations group_approved.html (Russian)

* New translations group_request.html (Russian)

* New translations privmsg_notify.html (Russian)

* New translations profile_send_email.html (Russian)

* New translations topic_notify.html (Russian)

* New translations user_activate.html (Russian)

* New translations user_activate_passwd.html (Russian)

* New translations user_welcome.html (Russian)

* New translations user_welcome_inactive.html (Russian)

---------

Co-authored-by: Cønstantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2023-12-15 08:33:09 +04:00
Roman Kelesidis
d581fabe16 Update CHANGELOG.md 2023-12-14 19:01:08 +07:00
Roman Kelesidis
b284ff0f08
Minor improvements (#1206) 2023-12-14 18:57:58 +07:00
Cønstantine Kovalensky
bcbc35eb24
Repository link in page footer instead of forum (#1205) 2023-12-13 20:44:52 +04:00
Cønstantine Kovalensky
8a5fd01852
Updated TorrentPier footer text (: (#1204) 2023-12-12 23:04:55 +04:00
Cønstantine Kovalensky
06a260c60d
Update file_list_v2.php (#1202)
Use full width for mobile phones
2023-12-12 21:02:49 +04:00
Roman Kelesidis
fad09cf0eb
Updated copyright year (#1201)
* Updated copyright year

* Updated
2023-12-12 22:14:01 +07:00
Roman Kelesidis
07c944d8bd Release v2.4.0-rc2 🍭 2023-12-12 21:52:29 +07:00
Roman Kelesidis
72ad36d0e2
Some reported bugfixes (#1200)
* Some reported bugfixes

* Update CHANGELOG.md
2023-12-11 20:12:06 +07:00
Cønstantine Kovalensky
8f1c66a26b
Update file_list_v2.php (#1199) 2023-12-10 20:32:05 +04:00
Cønstantine Kovalensky
182216830b
Small code re-format for scrape.php (#1198) 2023-12-10 19:30:10 +04:00
Cønstantine Kovalensky
59777ba68a
Update file_list_v2.php (#1197) 2023-12-08 23:27:10 +04:00
Cønstantine Kovalensky
6ac521f831
Update file_list_v2.php (#1196) 2023-12-08 21:15:10 +04:00
Roman Kelesidis
97a9954a4d Update CHANGELOG.md 2023-12-08 13:37:33 +07:00
Roman Kelesidis
987e033d13
Removed useless global $lang; from info.php (#1195) 2023-12-08 13:36:28 +07:00
Roman Kelesidis
7c8239bc36 Update CHANGELOG.md
Oops...
2023-12-08 13:27:05 +07:00
Roman Kelesidis
10fb54ff86 Update CHANGELOG.md 2023-12-08 13:25:25 +07:00
Roman Kelesidis
21acd747ba
Refactored poll.php (#1194) 2023-12-08 13:21:31 +07:00
Cønstantine Kovalensky
13001d42d9
Use one GET variable for filelisting (#1193) 2023-12-06 14:25:25 +04:00
Yury Pikhtarev
6d3010a786
New Crowdin updates (#1191)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (French)
2023-12-06 08:24:36 +07:00
Cønstantine Kovalensky
da2559364b
Remove unnecessary file hashes for in-forum file-listing (#1192)
It's already done by file_list_v2.php
2023-12-05 17:54:30 +04:00
Cønstantine Kovalensky
dd5471ef6a
Get SERVER_NAME variable for cron tasks (#1190) 2023-12-05 14:54:14 +04:00
Yury Pikhtarev
b88637842f
Apply fixes from StyleCI (#1189) 2023-12-05 14:21:06 +04:00
Cønstantine Kovalensky
6911b6099b
RC2 timeline (#1186)
* Disallow downloading of frozen status attachments

* Don't show info-hash, magnet link for frozen attachments

* Direct torrent downloads & post html view in Atom feeds
2023-12-05 14:19:09 +04:00
Roman Kelesidis
68f402d8e7 Update CHANGELOG.md 2023-12-05 16:19:57 +07:00
Roman Kelesidis
ff46ec48a4
Removed sys_getloadavg() (#1188) 2023-12-05 16:18:33 +07:00
Roman Kelesidis
8e5b0ff13e Revert "Replaced some time() with TIMENOW constant (#1174)"
This reverts commit ffd2866f11.
2023-12-05 15:59:26 +07:00
Roman Kelesidis
c7353165c2 Update CHANGELOG.md 2023-12-04 21:17:32 +07:00
Roman Kelesidis
e49005b1a6
Removed verify_id() function (#1187) 2023-12-04 21:13:36 +07:00
Cønstantine Kovalensky
5f6ade8db9
Peer ID was erased if it contained non-latin characters (#1185) 2023-12-04 13:36:12 +04:00
dependabot[bot]
ceaa0d1901
Composer(deps): Bump guzzlehttp/guzzle from 7.8.0 to 7.8.1 (#1184)
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.8.0 to 7.8.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.8/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.8.0...7.8.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 13:49:24 +07:00
dependabot[bot]
9412746f55
Composer(deps): Bump guzzlehttp/psr7 from 2.6.1 to 2.6.2 (#1183)
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 2.6.1 to 2.6.2.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/2.6/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/2.6.1...2.6.2)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-04 13:49:14 +07:00
Roman Kelesidis
3065341c9e Update CHANGELOG.md 2023-12-03 01:39:05 +07:00
Yury Pikhtarev
72876e7bcb
New Crowdin updates (#1182)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (French)
2023-12-01 23:24:54 +07:00
Roman Kelesidis
926f57c048
Refactored memberlist.php 🎓 (#1181)
* Refactored memberlist.php 🎓

* Update memberlist.php
2023-12-01 17:36:53 +07:00
Yury Pikhtarev
efd8a51628
New Crowdin updates (#1179)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-11-30 15:49:51 +07:00
Roman Kelesidis
d17ac37ac3
Removed useless width for BBCode buttons (#1180) 2023-11-30 15:49:37 +07:00
dependabot[bot]
b75d092185
Composer(deps-dev): Bump symfony/var-dumper from 6.3.8 to 6.4.0 (#1178)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.3.8 to 6.4.0.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.3.8...v6.4.0)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-30 09:39:45 +03:00
dependabot[bot]
ec0536ebd7
Composer(deps): Bump symfony/mailer from 6.3.5 to 6.4.0 (#1177)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 6.3.5 to 6.4.0.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/7.0/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v6.3.5...v6.4.0)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-30 09:39:29 +03:00
Cønstantine Kovalensky
6bd132d3ff
Code re-formatting (#1176) 2023-11-30 09:56:03 +04:00
Roman Kelesidis
ea5a2d4fa2 Update CHANGELOG.md 2023-11-30 12:26:56 +07:00
Cønstantine Kovalensky
3f0ce54877
Feature to ban specific torrent clients (#1175)
* Feature to ban specific torrent clients

* Code re-formatting for announce.php

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-11-30 09:26:04 +04:00
Roman Kelesidis
bef521ee38 Update config.php 2023-11-28 22:42:40 +07:00
Roman Kelesidis
58cb8311f3 Update CHANGELOG.md 2023-11-28 22:42:09 +07:00
Roman Kelesidis
ffd2866f11
Replaced some time() with TIMENOW constant (#1174) 2023-11-28 16:00:12 +07:00
Roman Kelesidis
961bbd6306
Replaced some 'switch' with the 'match' expression (#1173) 2023-11-28 00:21:00 +07:00
Roman Kelesidis
493cd910cf
Replaced strpos() with simplified realization (#1172) 2023-11-28 00:12:13 +07:00
Roman Kelesidis
bb20d523b0
Improved cookie management 🍪 (#1171) 2023-11-27 23:18:03 +07:00
Roman Kelesidis
f1fa98deec
Fixed void function result used (#1170) 2023-11-26 14:30:23 +07:00
Roman Kelesidis
198ad9f79f Release 2.4.0-rc1 🤖 2023-11-24 22:55:10 +07:00
Roman Kelesidis
d4f6795641 Update changes.txt 2023-11-24 22:51:59 +07:00
Roman Kelesidis
d7e389cd11 Update CHANGELOG.md 2023-11-24 22:47:08 +07:00
Roman Kelesidis
1753db1fce Revert "Merge pull request #128 from diolektor/fix-sql-group-online-userlist"
This reverts commit e58318f2f3, reversing
changes made to fd8d3a817c.
2023-11-24 22:44:10 +07:00
Yury Pikhtarev
24ad834bf0
Apply fixes from StyleCI (#1169)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-24 17:35:13 +03:00
Cønstantine Kovalensky
4c0a9c0bc6
Typo (#1168) 2023-11-24 18:34:00 +04:00
Roman Kelesidis
9973931004
Simplified gender function (#1167)
* Simplified gender function

* Update CHANGELOG.md
2023-11-24 21:24:53 +07:00
Roman Kelesidis
73671494e9 Update CHANGELOG.md 2023-11-24 15:19:05 +07:00
Roman Kelesidis
20ce8cae9c Revert "Fixed input types in some cases (#697)"
This reverts commit 4ee8ac3aa6.
2023-11-24 15:13:18 +07:00
Roman Kelesidis
74aa6ff299 Revert "Fixed input types in some cases (#693)"
This reverts commit dc25a1c0e0.
2023-11-24 15:10:56 +07:00
Cønstantine Kovalensky
82251ece8c
Support simultaneous id & username inputs for browsing profiles (#1166) 2023-11-24 12:01:11 +04:00
Cønstantine Kovalensky
c3b9a781eb
Tighten registration requirements for torrent files (#1165) 2023-11-24 11:40:57 +04:00
Cønstantine Kovalensky
3c7f3cf7d0
File listing — use browser cache (#1164) 2023-11-23 19:05:32 +04:00
Cønstantine Kovalensky
c9bd92e781
Legacy code comment translations 2023-11-23 13:04:23 +04:00
Roman Kelesidis
1ce0101045 Update config.php 2023-11-23 09:28:34 +07:00
Roman Kelesidis
d0aae07d1a Update config.php 2023-11-23 09:17:28 +07:00
Roman Kelesidis
33b2042395
Invites config re-formatting (#1162)
* Invites config re-formatting

* Update config.php

* Update CHANGELOG.md
2023-11-23 09:15:06 +07:00
Roman Kelesidis
51af9051c0 Update CHANGELOG.md 2023-11-23 08:35:50 +07:00
Roman Kelesidis
99bfaefe1e
Use external cookie library to prevent incorrect cookie setting (#1161) 2023-11-23 08:34:56 +07:00
Roman Kelesidis
357bb08387
Use external cookie library to prevent incorrect cookie setting (#1160)
* Use external cookie library to prevent incorrect cookie setting

* Update CHANGELOG.md
2023-11-23 08:26:32 +07:00
Roman Kelesidis
8531483fdf
Some improvements in default template (#1159)
* Some improvements in default template

* Update CHANGELOG.md
2023-11-23 08:11:00 +07:00
Roman Kelesidis
36fb130336 Update CHANGELOG.md 2023-11-23 08:05:29 +07:00
Yury Pikhtarev
6cafc606fd
New Crowdin updates (#1154)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-11-23 07:58:18 +07:00
Cønstantine Kovalensky
51e037ed44
Use sent port instead of source (#1158)
It looks like torrent clients don't use default listening for sending requests to trackers
2023-11-22 20:28:12 +04:00
Cønstantine Kovalensky
8860049a2f
Remove unnecessary meta tags from file listing (#1157) 2023-11-22 14:50:22 +04:00
Cønstantine Kovalensky
5849738f0b
Use different file listing url parameters for effective indexing by search engines (#1156) 2023-11-22 13:22:37 +04:00
Cønstantine Kovalensky
8f5efa2fa8
Check topic_id existence while searching in tracker mode (#1155) 2023-11-22 13:14:31 +04:00
Cønstantine Kovalensky
552badbfb7
Typo fix (#1153) 2023-11-21 21:14:01 +04:00
Cønstantine Kovalensky
bcabf2078e
Revert 2023-11-21 21:11:51 +04:00
Cønstantine Kovalensky
9972d53a19
Some improvement (#1151)
Remove confusing date which will be always valid
2023-11-21 21:09:56 +04:00
Cønstantine Kovalensky
81a5d1c5a5
Disable invites by default (#1150) 2023-11-21 20:46:09 +04:00
Cønstantine Kovalensky
728a40408f
Event based invite system (#1149)
Co-authored: @belomaxorka
2023-11-21 20:42:44 +04:00
Roman Kelesidis
491c03c243
Some code quality improvements (#1148) 2023-11-21 15:13:19 +07:00
Roman Kelesidis
ed3e28827b Revert "Replaced some 'switch' with the 'match' expression (#1147)"
This reverts commit 4cea325b6c.
2023-11-21 09:37:05 +07:00
Roman Kelesidis
4cea325b6c
Replaced some 'switch' with the 'match' expression (#1147)
* Replaced some 'switch' with the 'match' expression

* Update CHANGELOG.md
2023-11-21 09:34:52 +07:00
Yury Pikhtarev
0a53ddd9df
New Crowdin updates (#1144)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-11-21 09:30:55 +07:00
Roman Kelesidis
696f2a321a Update CHANGELOG.md 2023-11-21 09:15:04 +07:00
Roman Kelesidis
2c46a01fdb
Vote button code improvements (#1146)
* Vote button code improvements

* Updated

* Update viewtopic_attach.tpl
2023-11-21 09:14:11 +07:00
Roman Kelesidis
d9094d1524 Revert "Vote: Use REPLACE INTO instead of INSERT IGNORE INTO (#1145)"
This reverts commit b78b303c4b.
2023-11-21 08:29:11 +07:00
Roman Kelesidis
a5a693c6c3 Revert "Fix typo"
This reverts commit ab41634f0b.
2023-11-21 08:29:04 +07:00
Roman Kelesidis
ab41634f0b Fix typo 2023-11-21 08:17:19 +07:00
Roman Kelesidis
b78b303c4b
Vote: Use REPLACE INTO instead of INSERT IGNORE INTO (#1145)
* Vote: Use REPLACE INTO instead INSERT IGNORE INTO

* Update CHANGELOG.md
2023-11-21 08:14:57 +07:00
Roman Kelesidis
fc1500f9d9
Vote button code improvements (#1143)
* Vote button code improvements

* Update viewtopic_attach.tpl

* Update CHANGELOG.md
2023-11-21 01:06:48 +07:00
Roman Kelesidis
a4be40db9e
Vote button code improvements (#1142) 2023-11-21 00:57:48 +07:00
Roman Kelesidis
f4e92b44ac Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-11-21 00:35:57 +07:00
Roman Kelesidis
21f119b09b Update CHANGELOG.md 2023-11-21 00:35:49 +07:00
Roman Kelesidis
7d6d9adff2
Minor improvements (#1141) 2023-11-21 00:34:13 +07:00
Roman Kelesidis
c046e8a8c1
Vote button code improvements (#1140)
* Vote button code improvements

* Update thanks.php
2023-11-21 00:29:02 +07:00
Yury Pikhtarev
cfb80987d4
Apply fixes from StyleCI (#1139) 2023-11-20 21:07:31 +04:00
Cønstantine Kovalensky
3dedb7e33d
Vote button and v2 file list topic url display (#1138) 2023-11-20 21:05:13 +04:00
Roman Kelesidis
70988814c5
Removed topic watch useless code (#1137)
* Removed topic watch useless code

* Update CHANGELOG.md
2023-11-20 18:41:21 +07:00
Roman Kelesidis
5f42bd085e Update CHANGELOG.md 2023-11-20 18:19:51 +07:00
Roman Kelesidis
e63e1aba8a
Fixed topic_watch array key name (#1136) 2023-11-20 18:19:00 +07:00
Roman Kelesidis
02716090b6
Fixed announce-list indexes ordering (#1135)
* Fixed announce-list indexes ordering

* Update CHANGELOG.md
2023-11-20 15:43:40 +07:00
Roman Kelesidis
85cc06a093
Fixed $bb_cfg['file_id_ext'] ordering (#1134)
* Fixed $bb_cfg['file_id_ext'] ordering

* Fixed $bb_cfg['file_id_ext'] ordering
2023-11-20 09:19:03 +07:00
Roman Kelesidis
20957a3d1b Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-11-20 08:50:36 +07:00
Roman Kelesidis
8531a73464 Update CHANGELOG.md 2023-11-20 08:50:29 +07:00
Roman Kelesidis
d5b7a7c154
Normalizing announce-list (#1133) 2023-11-20 08:49:14 +07:00
Roman Kelesidis
e1220c1846
Fixed announcer-list issue (#1132)
* Fixed announcer-list issue

* Update CHANGELOG.md
2023-11-20 00:47:54 +07:00
Roman Kelesidis
105ea911c9
Fixed announcer-list issue (#1131)
* Fixed announcer-list issue

* Update CHANGELOG.md
2023-11-20 00:16:54 +07:00
Roman Kelesidis
df78acf3c8 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-11-19 23:14:07 +07:00
Roman Kelesidis
dbca3f9fbf Update CHANGELOG.md 2023-11-19 23:13:50 +07:00
Roman Kelesidis
407c887239
Fixed announcer-list issue (#1130) 2023-11-19 23:13:33 +07:00
Roman Kelesidis
e26e3b36c0
Fixed announcer-list issue (#1129)
* Fixed announcer-list issue

* Update CHANGELOG.md
2023-11-19 17:57:43 +07:00
Roman Kelesidis
8e0eb839a8 Update CHANGELOG.md 2023-11-19 16:00:20 +07:00
Roman Kelesidis
fda2bf2dee
Removed client column from bb_bt_tracker table (#1128) 2023-11-19 15:56:51 +07:00
Cønstantine Kovalensky
709e6a53f0
Code re-formatting 2023-11-19 12:30:01 +04:00
Roman Kelesidis
9ebe3a4d5c
Minor improvements (#1125)
* Minor improvements

* Updated

* Updated

* Updated

* Update viewtopic.php

* Update viewtopic.php

* Update viewtopic.php

* Update CHANGELOG.md
2023-11-19 14:37:25 +07:00
Roman Kelesidis
3a7d7bd097 Update CHANGELOG.md 2023-11-19 00:00:38 +07:00
Cønstantine Kovalensky
20662f16e1
Fix-typo (#1124) 2023-11-18 20:55:37 +04:00
Roman Kelesidis
0ba6ebc228
Minor improvements (#1123)
* Minor improvements

* Update CHANGELOG.md
2023-11-18 23:36:59 +07:00
Roman Kelesidis
eecbe070c9
Minor improvements (#1122)
* Minor improvements

* Update CHANGELOG.md
2023-11-18 22:43:58 +07:00
Roman Kelesidis
fe953bd3c2 Update CHANGELOG.md 2023-11-18 20:42:07 +07:00
Roman Kelesidis
556b7c3746
Minor improvements (#1121) 2023-11-18 20:39:57 +07:00
Roman Kelesidis
da6ac1ae89 Update CHANGELOG.md 2023-11-18 20:34:52 +07:00
Roman Kelesidis
edec548219
Removed one-time used variables (#1120) 2023-11-18 20:33:45 +07:00
Roman Kelesidis
f18e80d8ca Update CHANGELOG.md 2023-11-18 20:24:24 +07:00
Cønstantine Kovalensky
ce06937aa8
Don't create empty announce-list dict, if ann_urls are empty (#1119)
* Improve code for retracker addition

* Don't create empty announce-list dict, if ann_urls are empty
2023-11-18 16:53:26 +04:00
Cønstantine Kovalensky
787d4ae90b
Improve code for retracker addition (#1118) 2023-11-18 16:26:34 +04:00
Roman Kelesidis
4a80f0e999 Update CHANGELOG.md 2023-11-18 19:06:26 +07:00
Cønstantine Kovalensky
f426c928ac
Don't use main announce url inside announce-list (#1117) 2023-11-18 16:01:14 +04:00
Cønstantine Kovalensky
0d6a188ae7
Don't check for announce-list while adding new urls (#1116)
@belomaxorka is the only one nigga I need in my life :D
2023-11-18 15:52:18 +04:00
Roman Kelesidis
ca26f31b10 Update CHANGELOG.md 2023-11-18 14:09:28 +07:00
Roman Kelesidis
fc4028475c
Cleanup: Removed useless global variable (#1115) 2023-11-18 14:08:46 +07:00
Roman Kelesidis
a946173b2e Update CHANGELOG.md 2023-11-18 13:56:39 +07:00
Roman Kelesidis
a13af7914e
Unset debug cookies if SQL_DEBUG disabled (#1114) 2023-11-18 13:55:56 +07:00
Roman Kelesidis
ee306e1418 Update CHANGELOG.md 2023-11-18 10:37:54 +07:00
Roman Kelesidis
73b07f2e92
Security measures (#1113) 2023-11-18 10:36:16 +07:00
Cønstantine Kovalensky
61ef24539a
Announcer's code re-formatting (#1112) 2023-11-17 20:40:32 +04:00
Roman Kelesidis
a77b32e2ab
Used new-style [] array constructions in some cases (#1111)
* Used new-style [] array constructions in some cases

* Used new-style [] array constructions in some cases
2023-11-17 14:43:38 +07:00
Roman Kelesidis
c6f0a007ae Update CHANGELOG.md 2023-11-17 14:23:31 +07:00
Roman Kelesidis
a939018275
Use http_response_code() functions instead of old header() functions (#1110) 2023-11-17 14:16:18 +07:00
Cønstantine Kovalensky
f61a6d6c8c
Fix bypassing cache if IP changed while using cache (#1109) 2023-11-16 18:16:11 +04:00
Cønstantine Kovalensky
92aebf4035
Use one variable to determine update status for hybrids #1108 2023-11-16 10:02:23 +04:00
Constantine Kovalensky
6454b8652c Use one variable to determine update status for hybrids 2023-11-16 10:01:18 +04:00
Cønstantine Kovalensky
373175b8f7
Don't re-announce even if peer cache is present (#1107) 2023-11-15 19:51:55 +04:00
Roman Kelesidis
b82c19719c
Used br2nl() in ajax alert messages (#1106) 2023-11-15 21:49:51 +07:00
Roman Kelesidis
b1bd25d32a
Replaced some html_entity_decode to engine's built-in function (#1105) 2023-11-15 21:36:40 +07:00
Cønstantine Kovalensky
6f76c4d902
Fix typo (#1104) 2023-11-15 18:28:59 +04:00
Cønstantine Kovalensky
67c6bd5e7c
Change default engine language to en (#1103) 2023-11-15 15:02:29 +04:00
Yury Pikhtarev
80205e5eef
New Crowdin updates (#1101) 2023-11-15 14:59:26 +04:00
Cønstantine Kovalensky
b3b659a5c3
Record changed port while re-announcing (#1102) 2023-11-15 14:16:03 +04:00
Cønstantine Kovalensky
7e4a76dc02
Translations for config.php, raised scrape interval (#1100) 2023-11-15 13:14:02 +04:00
Cønstantine Kovalensky
6ae8dc8d5e
Don't re-announce for hybrids if the event is "stopped" (#1099) 2023-11-14 19:33:47 +04:00
Yury Pikhtarev
9a99ee450f
New Crowdin updates (#1097)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (French)
2023-11-14 22:26:16 +07:00
Cønstantine Kovalensky
c8cb908c0b
Security measures (#1098) 2023-11-14 16:42:14 +04:00
Roman Kelesidis
8fe0e563fb Release 2.4.0-beta4 🍂 2023-11-14 14:51:27 +07:00
Roman Kelesidis
5d3b88cfc9 Update CHANGELOG.md 2023-11-14 14:43:04 +07:00
Roman Kelesidis
2234c8145b
Use TORRENT_EXT constants for definition torrent extension (#1096) 2023-11-14 14:33:17 +07:00
Roman Kelesidis
be250e12c1
Minor improvements (#1095) 2023-11-14 14:20:25 +07:00
Cønstantine Kovalensky
dc3cd6ec51
Remove html entities for file names (#1094) 2023-11-14 10:47:10 +04:00
Cønstantine Kovalensky
cb557e7345
Fix for html entities being displayed in magnet links (#1092) 2023-11-13 22:01:42 +04:00
Roman Kelesidis
47a776c31d
Calling make_jumpbox() where it needed (#1091) 2023-11-13 15:59:30 +07:00
dependabot[bot]
2119dfea13
Composer(deps-dev): Bump symfony/var-dumper from 6.3.6 to 6.3.8 (#1089)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.3.6 to 6.3.8.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.3.6...v6.3.8)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-13 13:49:10 +07:00
dependabot[bot]
af0e824b5f
Composer(deps): Bump vlucas/phpdotenv from 5.5.0 to 5.6.0 (#1090)
Bumps [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) from 5.5.0 to 5.6.0.
- [Release notes](https://github.com/vlucas/phpdotenv/releases)
- [Commits](https://github.com/vlucas/phpdotenv/compare/v5.5.0...v5.6.0)

---
updated-dependencies:
- dependency-name: vlucas/phpdotenv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-13 13:49:00 +07:00
Cønstantine Kovalensky
58596953e5
Include full url for client icon displaying (#1088) 2023-11-12 22:21:04 +04:00
Cønstantine Kovalensky
4b397efb9a
Fix not working code (#1087) 2023-11-12 22:06:05 +04:00
Roman Kelesidis
ba358f96ee
Fixed data types for seeder_last_seen (#1086) 2023-11-12 12:44:20 +07:00
Roman Kelesidis
196e05c4c2 Added missing queries in changes.txt 2023-11-12 12:35:28 +07:00
Cønstantine Kovalensky
5f8d7faf83
Fix broken PM (Private messages) (#1085) 2023-11-12 01:48:44 +04:00
Cønstantine Kovalensky
618a93e056
Fixed a bug causing inability to view file contents for some torrents (#1084) 2023-11-12 00:51:14 +04:00
Cønstantine Kovalensky
d2e56aa0c8
CSS improvement for file listing (#1083) 2023-11-12 00:25:08 +04:00
Cønstantine Kovalensky
e74dcfd379
Show file count while listing (#1082) 2023-11-11 23:28:30 +04:00
Cønstantine Kovalensky
abccc7ca07
CSS improvement for file listing (#1081) 2023-11-11 22:41:00 +04:00
Roman Kelesidis
f098041713
Simplified jumpbox 📜 (#815)
* Simplified jumpbox 📜

* Updated

* Update README.md

* Updated

* Update page_header.tpl

* Update functions.php
2023-11-12 01:05:14 +07:00
Roman Kelesidis
867c0ec1a2
Removed sorting for torrent clients in table (#1080) 2023-11-12 00:04:03 +07:00
Roman Kelesidis
b95a7f3b7e
Fixed broken table in tracker (#1079) 2023-11-11 23:56:31 +07:00
Roman Kelesidis
b263823aee
Minor improvements (#1078)
* Minor improvements

* Updated

* Update memberlist.tpl

* Update memberlist.tpl

* Update viewtopic.tpl

* Updated

* Updated

* Update viewtopic_torrent.tpl

* Update posting.php

* Update admin_sitemap.tpl

* Update main_content.css

* Updated
2023-11-11 23:47:28 +07:00
Cønstantine Kovalensky
481e5469d1
CSS improvement for file listing (#1077) 2023-11-11 18:50:01 +04:00
Roman Kelesidis
1b479ada9e Update changes.txt 2023-11-11 21:45:57 +07:00
Roman Kelesidis
7bac89cac8
WIP: Release 2.4.0-beta3 🕷 (#1005)
* Release 2.4.0-beta3 🕷

* Update CHANGELOG.md

* Updated

* Updated
2023-11-11 16:32:14 +07:00
Roman Kelesidis
0920876108
Code formatting (#1076) 2023-11-11 15:02:17 +07:00
Cønstantine Kovalensky
e89cd4d335
Use built-in delta_time for age display (#1075) 2023-11-11 11:55:22 +04:00
Cønstantine Kovalensky
e3ad9041bf
List with numbers in tracker stats (#1074) 2023-11-09 22:06:31 +04:00
Yury Pikhtarev
6757c75446
New Crowdin updates (#1072)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-11-10 00:44:14 +07:00
Cønstantine Kovalensky
6f89865f0c
Sort clients from higher to lower in tracker stats (#1073) 2023-11-09 20:38:03 +04:00
Cønstantine Kovalensky
951cebe815
Code re-formatting (#1071) 2023-11-09 20:03:11 +04:00
Cønstantine Kovalensky
e1a7630cee
Use more reliable original file names for attachments (#1070) 2023-11-09 19:54:53 +04:00
Cønstantine Kovalensky
33faad2355
Tracker client stats cache, more robust file list functions, permissions for file list access (#1069) 2023-11-09 18:55:46 +04:00
Cønstantine Kovalensky
f59cfe848d
Some code improvements for file listing (#1068) 2023-11-09 09:04:56 +04:00
Cønstantine Kovalensky
b12c8e4d4b
Update styles for file list (#1067) 2023-11-08 23:17:57 +04:00
Cønstantine Kovalensky
c4ad384342
Show client information for file list (#1066) 2023-11-08 23:08:31 +04:00
Cønstantine Kovalensky
5298f16d47
Code re-formatting (#1065) 2023-11-08 22:24:39 +04:00
Cønstantine Kovalensky
3ac1a835d0
File list tables for v2 compatible torrents (#1064) 2023-11-08 20:59:31 +04:00
Cønstantine Kovalensky
777ebafe6d
Code re-formatting (#1063) 2023-11-08 17:01:04 +04:00
Cønstantine Kovalensky
22ececb970
Code re-formatting (#1062) 2023-11-08 16:43:41 +04:00
Cønstantine Kovalensky
c2599a7c22
Show options for version debugging of user clients (#1061) 2023-11-08 16:25:56 +04:00
Roman Kelesidis
28b379f740
Fixed broken avatar ajax action for users (#1060) 2023-11-08 19:13:20 +07:00
Cønstantine Kovalensky
3ed64ab494
Code re-formatting (#1059) 2023-11-08 11:39:17 +04:00
Cønstantine Kovalensky
30c31144ca
Show icons for clients while in the tracker statistics (#1058) 2023-11-08 11:32:57 +04:00
Cønstantine Kovalensky
24a297d524
Show user clients percentage in tracker statistics (#1057) 2023-11-08 11:06:36 +04:00
Roman Kelesidis
6e0a9964f0
Code formatting (#1056) 2023-11-07 22:25:04 +07:00
Roman Kelesidis
ad031e3bc3
Fixed undefined tpl variable SHOW_GROUP_MEMBERSHIP (#1055) 2023-11-07 22:20:30 +07:00
Yury Pikhtarev
dda7f5e851
New Crowdin updates (#1054)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2023-11-07 22:10:54 +07:00
Cønstantine Kovalensky
1c7c51d1d1
Show guests for last seeders (#1053) 2023-11-07 16:56:21 +04:00
Cønstantine Kovalensky
6c2a94952a
Last seeder display improvements (#1052) 2023-11-07 16:16:27 +04:00
Cønstantine Kovalensky
d7ce42f6be
Show the last seeder's username in topics (#1051) 2023-11-07 14:37:13 +04:00
Roman Kelesidis
bf0c681ca4
Minor improvements for template (#1050)
* Minor improvements for template

* Update tracker.tpl
2023-11-07 08:15:44 +07:00
dependabot[bot]
901e88b45e
Composer(deps): Bump filp/whoops from 2.15.3 to 2.15.4 (#1045)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.15.3 to 2.15.4.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.15.3...2.15.4)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 08:07:18 +07:00
Roman Kelesidis
130628248d
Fixed: Moderators can't see self IP addresses (#1049) 2023-11-07 08:07:06 +07:00
Cønstantine Kovalensky
444a872579
View user's profile also by it's username (#1048) 2023-11-07 01:33:51 +04:00
Cønstantine Kovalensky
f76cc2f0b7
Scrape.php code reformatting (#1047) 2023-11-06 12:56:26 +04:00
Cønstantine Kovalensky
9ca9c72a08
Scraping improvements (#1046) 2023-11-06 12:00:24 +04:00
Cønstantine Kovalensky
c0194aaa54
Code fix (#1044) 2023-11-05 09:46:45 +04:00
Yury Pikhtarev
df045d24fd
New Crowdin updates (#1037) 2023-11-05 09:36:23 +04:00
Cønstantine Kovalensky
eb3ac19f0c
Small tracker improvements (#1043) 2023-11-05 09:35:30 +04:00
Cønstantine Kovalensky
d1611c7d8a
Small improvements to scraping (#1042) 2023-11-05 09:31:27 +04:00
Yury Pikhtarev
a6dd8605a0
Apply fixes from StyleCI (#1041)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-04 21:34:31 +04:00
Cønstantine Kovalensky
04193d95ac
Added v2 hash search to the scraping (#1040) 2023-11-04 21:33:29 +04:00
Cønstantine Kovalensky
edf809667c
Update magnet icon (#1038) 2023-11-04 20:17:01 +04:00
Yury Pikhtarev
f45602d8b6
Apply fixes from StyleCI (#1036)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-04 19:17:19 +04:00
Cønstantine Kovalensky
018dd69177
Magnet link tweaks (#1035) 2023-11-04 19:16:23 +04:00
Yury Pikhtarev
47d07e183c
New Crowdin updates (#1034)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2023-11-04 21:27:13 +07:00
Yury Pikhtarev
82b0490bb1
Apply fixes from StyleCI (#1033)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-04 17:59:22 +04:00
Cønstantine Kovalensky
17640a52c6
Use built-in binary hash feature (#1032) 2023-11-04 17:58:10 +04:00
Cønstantine Kovalensky
2a3a982d78
Some v2 hashes were not found in the announcer (#1031) 2023-11-04 11:31:29 +04:00
Cønstantine Kovalensky
afd4b7a6cb
Code formatting (#1030) 2023-11-04 10:29:38 +04:00
Yury Pikhtarev
01c39aed8c
Apply fixes from StyleCI (#1029)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-04 10:00:07 +04:00
Cønstantine Kovalensky
5d872e3555
Fix issues related to file list display and torrent registration (#1028)
Bencoding libraries properties changed in the new version
2023-11-04 09:56:31 +04:00
Cønstantine Kovalensky
5005474b1a
NAT users' real port (#1027) 2023-11-03 20:03:44 +04:00
Cønstantine Kovalensky
98bfecc0bf
Code formatting (#1026) 2023-11-03 16:12:23 +04:00
Roman Kelesidis
671446e089
Removed time zone auto detection (#1025)
* Removed time zone auto-detection

* Update usercp_register.tpl

* Updated

* Update usercp_register.tpl

* Update usercp_register.tpl

* Update usercp_register.tpl

* Update usercp_register.tpl

* Update usercp_register.tpl
2023-11-03 18:28:42 +07:00
Yury Pikhtarev
31d1cd87e7
Apply fixes from StyleCI (#1024)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-11-03 17:34:43 +07:00
Roman Kelesidis
f2fe7d2e0c
Added ability to debug ajax_die() calls (#1023) 2023-11-03 17:33:57 +07:00
Roman Kelesidis
c9d223b346
Fixed incorrect displaying post actions buttons (#1021) 2023-11-03 17:25:36 +07:00
Roman Kelesidis
eb4ecfabb2
Fixed undefined offset of $action_params (#1020) 2023-11-03 17:22:02 +07:00
Cønstantine Kovalensky
79116b2c27
Transfer from array to ArrayObject data type (#1019) 2023-11-03 14:11:45 +04:00
Cønstantine Kovalensky
3ba3b5a8db
Multiple Scrape (#1018) 2023-11-03 12:38:54 +04:00
Cønstantine Kovalensky
4a46694f01
Announce IPv4 && IPv6 of peers! (#1017) 2023-11-02 23:05:28 +04:00
Cønstantine Kovalensky
1c7d45eabe
Bind peer_hash to auth_key to avoid double announces via IPv4 and IPv6 at the same time (#1016) 2023-11-02 19:21:24 +04:00
dependabot[bot]
a7566823c2
Composer(deps): Bump samdark/sitemap from 2.4.0 to 2.4.1 (#1015)
Bumps [samdark/sitemap](https://github.com/samdark/sitemap) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/samdark/sitemap/releases)
- [Commits](https://github.com/samdark/sitemap/compare/2.4.0...2.4.1)

---
updated-dependencies:
- dependency-name: samdark/sitemap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-02 13:40:54 +07:00
Cønstantine Kovalensky
65a16b8406
Increase auth_key char length (#1014) 2023-11-01 22:51:09 +04:00
Cønstantine Kovalensky
725773254f
More performance optimized/random string generation, removed passkey length limit from the announcer (#1013) 2023-11-01 21:20:12 +04:00
Cønstantine Kovalensky
c69712a463
More performance optimized/random string generation, removed passkey limit from the announcer (#1012) 2023-11-01 21:16:54 +04:00
dependabot[bot]
5249ddad30
Composer(deps): Bump monolog/monolog from 3.4.0 to 3.5.0 (#1011)
Bumps [monolog/monolog](https://github.com/Seldaek/monolog) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/Seldaek/monolog/releases)
- [Changelog](https://github.com/Seldaek/monolog/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Seldaek/monolog/compare/3.4.0...3.5.0)

---
updated-dependencies:
- dependency-name: monolog/monolog
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-30 13:33:22 +07:00
Roman Kelesidis
149f2003f6
Fixed broken ordering in memberlist.php (#1010) 2023-10-29 10:34:26 +07:00
Roman Kelesidis
3ca2777f7d
Some fixes in admin_attach_cp.php (#1009) 2023-10-29 10:30:35 +07:00
Roman Kelesidis
5d89647193
Fixed undefined $lang['PREVIOUS'] (#1008) 2023-10-29 10:22:44 +07:00
Roman Kelesidis
b2997e7c63
Fixed broken letter marking in memberlist.php (#1007) 2023-10-28 19:15:22 +07:00
Roman Kelesidis
78ced34a31
Moved htmlCHR() in common.php (#1006) 2023-10-28 19:12:09 +07:00
Roman Kelesidis
afab42c1f9
Fixed error while trying to delete posts by bot (#1004) 2023-10-28 17:20:32 +07:00
Roman Kelesidis
459e5e161f
Some cleanup (#1003) 2023-10-28 17:15:41 +07:00
Cønstantine Kovalensky
9dc9453ba7
Escape HTML characters for peer_id once to avoid load (#1002) 2023-10-27 13:01:43 +04:00
Yury Pikhtarev
086cd0fceb
New Crowdin updates (#1000)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2023-10-27 14:53:17 +07:00
Roman Kelesidis
163e6d07fb
😅💙 1000th PR Merged! 💙😅 (#1001) 2023-10-27 14:53:05 +07:00
Roman Kelesidis
61033d0765 💙 1000th PR Merged! 💙 2023-10-27 14:49:50 +07:00
Roman Kelesidis
17612d27d3
Added the ability to add additional announce URLs into torrent files (#999) 2023-10-27 14:45:05 +07:00
Roman Kelesidis
abf1c86db8
Expression can be replaced by '??' version (#998) 2023-10-27 14:36:07 +07:00
Roman Kelesidis
f1ad43e02e
Minor improvements (#997) 2023-10-27 14:33:25 +07:00
Roman Kelesidis
5316a9a61e
Added check $bb_cfg['magnet_links_enabled'] in create_magnet() (#996) 2023-10-27 14:27:28 +07:00
Yury Pikhtarev
4180543576
New Crowdin updates (#995)
* New translations user_welcome.html (Dutch)

* New translations user_welcome_inactive.html (Dutch)

* New translations group_added.html (Norwegian)

* New translations group_approved.html (Norwegian)

* New translations group_request.html (Norwegian)

* New translations privmsg_notify.html (Norwegian)

* New translations profile_send_email.html (Norwegian)

* New translations topic_notify.html (Norwegian)

* New translations user_activate.html (Norwegian)

* New translations user_activate_passwd.html (Norwegian)

* New translations user_welcome.html (Norwegian)

* New translations user_welcome_inactive.html (Norwegian)

* New translations group_added.html (Polish)

* New translations group_approved.html (Polish)

* New translations group_request.html (Polish)

* New translations privmsg_notify.html (Polish)

* New translations profile_send_email.html (Polish)

* New translations topic_notify.html (Polish)

* New translations user_activate.html (Polish)

* New translations user_activate_passwd.html (Polish)

* New translations user_welcome.html (Polish)

* New translations user_welcome_inactive.html (Polish)

* New translations group_added.html (Russian)

* New translations group_approved.html (Russian)

* New translations group_request.html (Russian)

* New translations privmsg_notify.html (Russian)

* New translations profile_send_email.html (Russian)

* New translations topic_notify.html (Russian)

* New translations user_activate.html (Russian)

* New translations user_activate_passwd.html (Russian)

* New translations user_welcome.html (Russian)

* New translations user_welcome_inactive.html (Russian)

* New translations group_added.html (Slovak)

* New translations group_approved.html (Slovak)

* New translations group_request.html (Slovak)

* New translations privmsg_notify.html (Slovak)

* New translations profile_send_email.html (Slovak)

* New translations topic_notify.html (Slovak)

* New translations user_activate.html (Slovak)

* New translations user_activate_passwd.html (Slovak)

* New translations user_welcome.html (Slovak)

* New translations user_welcome_inactive.html (Slovak)

* New translations group_added.html (Slovenian)

* New translations group_approved.html (Slovenian)

* New translations group_request.html (Slovenian)

* New translations privmsg_notify.html (Slovenian)

* New translations profile_send_email.html (Slovenian)

* New translations topic_notify.html (Slovenian)

* New translations user_activate.html (Slovenian)

* New translations user_activate_passwd.html (Slovenian)

* New translations user_welcome.html (Slovenian)

* New translations user_welcome_inactive.html (Slovenian)

* New translations group_added.html (Albanian)

* New translations group_approved.html (Albanian)

* New translations group_request.html (Albanian)

* New translations privmsg_notify.html (Albanian)

* New translations profile_send_email.html (Albanian)

* New translations topic_notify.html (Albanian)

* New translations user_activate.html (Albanian)

* New translations user_activate_passwd.html (Albanian)

* New translations user_welcome.html (Albanian)

* New translations user_welcome_inactive.html (Albanian)

* New translations group_added.html (Serbian (Cyrillic))

* New translations group_approved.html (Serbian (Cyrillic))

* New translations group_request.html (Serbian (Cyrillic))

* New translations privmsg_notify.html (Serbian (Cyrillic))

* New translations profile_send_email.html (Serbian (Cyrillic))

* New translations topic_notify.html (Serbian (Cyrillic))

* New translations user_activate.html (Serbian (Cyrillic))

* New translations user_activate_passwd.html (Serbian (Cyrillic))

* New translations user_welcome.html (Serbian (Cyrillic))

* New translations user_welcome_inactive.html (Serbian (Cyrillic))

* New translations group_added.html (Swedish)

* New translations group_approved.html (Swedish)

* New translations group_request.html (Swedish)

* New translations privmsg_notify.html (Swedish)

* New translations profile_send_email.html (Swedish)

* New translations topic_notify.html (Swedish)

* New translations user_activate.html (Swedish)

* New translations user_activate_passwd.html (Swedish)

* New translations user_welcome.html (Swedish)

* New translations user_welcome_inactive.html (Swedish)

* New translations group_added.html (Turkish)

* New translations group_approved.html (Turkish)

* New translations group_request.html (Turkish)

* New translations privmsg_notify.html (Turkish)

* New translations profile_send_email.html (Turkish)

* New translations topic_notify.html (Turkish)

* New translations user_activate.html (Turkish)

* New translations user_activate_passwd.html (Turkish)

* New translations user_welcome.html (Turkish)

* New translations user_welcome_inactive.html (Turkish)

* New translations group_added.html (Ukrainian)

* New translations group_approved.html (Ukrainian)

* New translations group_request.html (Ukrainian)

* New translations privmsg_notify.html (Ukrainian)

* New translations profile_send_email.html (Ukrainian)

* New translations topic_notify.html (Ukrainian)

* New translations user_activate.html (Ukrainian)

* New translations user_activate_passwd.html (Ukrainian)

* New translations user_welcome.html (Ukrainian)

* New translations user_welcome_inactive.html (Ukrainian)

* New translations group_added.html (Chinese Traditional)

* New translations group_approved.html (Chinese Traditional)

* New translations group_request.html (Chinese Traditional)

* New translations privmsg_notify.html (Chinese Traditional)

* New translations profile_send_email.html (Chinese Traditional)

* New translations topic_notify.html (Chinese Traditional)

* New translations user_activate.html (Chinese Traditional)

* New translations user_activate_passwd.html (Chinese Traditional)

* New translations user_welcome.html (Chinese Traditional)

* New translations user_welcome_inactive.html (Chinese Traditional)

* New translations group_added.html (English)

* New translations group_approved.html (English)

* New translations group_request.html (English)

* New translations privmsg_notify.html (English)

* New translations profile_send_email.html (English)

* New translations topic_notify.html (English)

* New translations user_activate.html (English)

* New translations user_activate_passwd.html (English)

* New translations group_added.html (Vietnamese)

* New translations group_approved.html (Vietnamese)

* New translations group_request.html (Vietnamese)

* New translations privmsg_notify.html (Vietnamese)

* New translations profile_send_email.html (Vietnamese)

* New translations topic_notify.html (Vietnamese)

* New translations user_activate.html (Vietnamese)

* New translations user_activate_passwd.html (Vietnamese)

* New translations user_welcome.html (Vietnamese)

* New translations user_welcome_inactive.html (Vietnamese)

* New translations group_added.html (Portuguese, Brazilian)

* New translations group_approved.html (Portuguese, Brazilian)

* New translations group_request.html (Portuguese, Brazilian)

* New translations privmsg_notify.html (Portuguese, Brazilian)

* New translations profile_send_email.html (Portuguese, Brazilian)

* New translations topic_notify.html (Portuguese, Brazilian)

* New translations user_activate.html (Portuguese, Brazilian)

* New translations user_activate_passwd.html (Portuguese, Brazilian)

* New translations user_welcome.html (Portuguese, Brazilian)

* New translations user_welcome_inactive.html (Portuguese, Brazilian)

* New translations group_added.html (Indonesian)

* New translations group_approved.html (Indonesian)

* New translations group_request.html (Indonesian)

* New translations privmsg_notify.html (Indonesian)

* New translations profile_send_email.html (Indonesian)

* New translations topic_notify.html (Indonesian)

* New translations user_activate.html (Indonesian)

* New translations user_activate_passwd.html (Indonesian)

* New translations user_welcome.html (Indonesian)

* New translations user_welcome_inactive.html (Indonesian)

* New translations group_added.html (Thai)

* New translations group_approved.html (Thai)

* New translations group_request.html (Thai)

* New translations privmsg_notify.html (Thai)

* New translations profile_send_email.html (Thai)

* New translations topic_notify.html (Thai)

* New translations user_activate.html (Thai)

* New translations user_activate_passwd.html (Thai)

* New translations user_welcome.html (Thai)

* New translations user_welcome_inactive.html (Thai)

* New translations group_added.html (Croatian)

* New translations group_approved.html (Croatian)

* New translations group_request.html (Croatian)

* New translations privmsg_notify.html (Croatian)

* New translations profile_send_email.html (Croatian)

* New translations topic_notify.html (Croatian)

* New translations user_activate.html (Croatian)

* New translations user_activate_passwd.html (Croatian)

* New translations user_welcome.html (Croatian)

* New translations user_welcome_inactive.html (Croatian)

* New translations group_added.html (Kazakh)

* New translations group_approved.html (Kazakh)

* New translations group_request.html (Kazakh)

* New translations privmsg_notify.html (Kazakh)

* New translations profile_send_email.html (Kazakh)

* New translations topic_notify.html (Kazakh)

* New translations user_activate.html (Kazakh)

* New translations user_activate_passwd.html (Kazakh)

* New translations user_welcome.html (Kazakh)

* New translations user_welcome_inactive.html (Kazakh)

* New translations group_added.html (Estonian)

* New translations group_approved.html (Estonian)

* New translations group_request.html (Estonian)

* New translations privmsg_notify.html (Estonian)

* New translations profile_send_email.html (Estonian)

* New translations topic_notify.html (Estonian)

* New translations user_activate.html (Estonian)

* New translations user_activate_passwd.html (Estonian)

* New translations user_welcome.html (Estonian)

* New translations user_welcome_inactive.html (Estonian)

* New translations group_added.html (Latvian)

* New translations group_approved.html (Latvian)

* New translations group_request.html (Latvian)

* New translations privmsg_notify.html (Latvian)

* New translations profile_send_email.html (Latvian)

* New translations topic_notify.html (Latvian)

* New translations user_activate.html (Latvian)

* New translations user_activate_passwd.html (Latvian)

* New translations user_welcome.html (Latvian)

* New translations user_welcome_inactive.html (Latvian)

* New translations group_added.html (Azerbaijani)

* New translations group_approved.html (Azerbaijani)

* New translations group_request.html (Azerbaijani)

* New translations privmsg_notify.html (Azerbaijani)

* New translations profile_send_email.html (Azerbaijani)

* New translations topic_notify.html (Azerbaijani)

* New translations user_activate.html (Azerbaijani)

* New translations user_activate_passwd.html (Azerbaijani)

* New translations user_welcome.html (Azerbaijani)

* New translations user_welcome_inactive.html (Azerbaijani)

* New translations group_added.html (Hindi)

* New translations group_approved.html (Hindi)

* New translations group_request.html (Hindi)

* New translations privmsg_notify.html (Hindi)

* New translations profile_send_email.html (Hindi)

* New translations topic_notify.html (Hindi)

* New translations user_activate.html (Hindi)

* New translations user_activate_passwd.html (Hindi)

* New translations user_welcome.html (Hindi)

* New translations user_welcome_inactive.html (Hindi)

* New translations group_added.html (Bosnian)

* New translations group_approved.html (Bosnian)

* New translations group_request.html (Bosnian)

* New translations privmsg_notify.html (Bosnian)

* New translations profile_send_email.html (Bosnian)

* New translations topic_notify.html (Bosnian)

* New translations user_activate.html (Bosnian)

* New translations user_activate_passwd.html (Bosnian)

* New translations user_welcome.html (Bosnian)

* New translations user_welcome_inactive.html (Bosnian)

* New translations group_added.html (Uzbek)

* New translations group_approved.html (Uzbek)

* New translations group_request.html (Uzbek)

* New translations privmsg_notify.html (Uzbek)

* New translations profile_send_email.html (Uzbek)

* New translations topic_notify.html (Uzbek)

* New translations user_activate.html (Uzbek)

* New translations user_activate_passwd.html (Uzbek)

* New translations user_welcome.html (Uzbek)

* New translations user_welcome_inactive.html (Uzbek)

* New translations group_added.html (Tajik)

* New translations group_approved.html (Tajik)

* New translations group_request.html (Tajik)

* New translations privmsg_notify.html (Tajik)

* New translations profile_send_email.html (Tajik)

* New translations topic_notify.html (Tajik)

* New translations user_activate.html (Tajik)

* New translations user_activate_passwd.html (Tajik)

* New translations user_welcome.html (Tajik)

* New translations user_welcome_inactive.html (Tajik)
2023-10-27 08:34:46 +07:00
Roman Kelesidis
f343f38f96
Added $lang['BT_UNREGISTERED_ALREADY'] lang key (#994) 2023-10-26 16:05:42 +07:00
Roman Kelesidis
3f835e30e6
Removed useless "Subject:" from email templates (#993)
* Removed useless "Subject:" from email templates

* Updated

* Updated
2023-10-26 15:53:48 +07:00
Roman Kelesidis
cfd64c8442
SQL: Increase speed_up & speed_down type limits (#992) 2023-10-26 15:20:50 +07:00
Roman Kelesidis
f4b2676f66
Use strip_tags() for message in prompt_for_confirm() (#991) 2023-10-26 15:13:17 +07:00
Roman Kelesidis
8765aaaa3a
Use strip_tags() for error message in ajax_die() (#990) 2023-10-26 15:07:39 +07:00
Roman Kelesidis
acda8be43c
Use lang variable $lang['BT_REG_FAIL'] instead of text (#989) 2023-10-26 15:00:53 +07:00
Roman Kelesidis
8fa4758ebe
Minor improvements (#988) 2023-10-25 23:31:39 +07:00
Cønstantine Kovalensky
d45e9e2473
Use announce messages even after using redundant cache for output (#987) 2023-10-25 20:08:41 +04:00
Cønstantine Kovalensky
c05278bb16
Fix currently not working peer icons (#986) 2023-10-25 18:46:03 +04:00
Cønstantine Kovalensky
d420ce0a7f
Variable collision fix (#985) 2023-10-25 18:27:04 +04:00
Cønstantine Kovalensky
c853fa8a7d
Variable collision fix (#984) 2023-10-25 18:23:39 +04:00
dependabot[bot]
8e484c07ec
Composer(deps-dev): Bump symfony/var-dumper from 6.3.5 to 6.3.6 (#983)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 6.3.5 to 6.3.6.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v6.3.5...v6.3.6)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-23 13:35:37 +07:00
Roman Kelesidis
f02e902691
Minor improvements (#982)
* Minor improvements

* Apply fixes from StyleCI (#981)

Co-authored-by: StyleCI Bot <bot@styleci.io>

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-10-22 21:29:09 +07:00
Roman Kelesidis
bbaff4b401
Fixed percentage calculation for SQL debug (#980) 2023-10-22 21:17:09 +07:00
Yury Pikhtarev
1c7ef19c40
New Crowdin updates (#979)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-10-19 21:58:55 +07:00
Roman Kelesidis
de2627341d
Refactoring: Use isset() with multiple parameters (#978) 2023-10-19 16:27:12 +07:00
Roman Kelesidis
1af9cfbbb9
Check $tpl_vars['QUESTION'] in print_confirmation() (#977) 2023-10-19 16:14:11 +07:00
Roman Kelesidis
65c5e5a275
Minor improvements (#976) 2023-10-17 09:10:13 +07:00
Roman Kelesidis
3f98d7680b
Minor improvements (#975) 2023-10-15 21:52:35 +07:00
Roman Kelesidis
10468263cd
Minor improvements (#974) 2023-10-14 21:44:32 +07:00
Roman Kelesidis
9b513714ad
Minor improvements (#973) 2023-10-14 11:27:36 +07:00
Yury Pikhtarev
c1553c7099
New Crowdin updates (#971)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (French)
2023-10-13 17:10:32 +07:00
Roman Kelesidis
6b71a07794
Minor improvements (#972)
* Minor improvements

* Updated
2023-10-13 17:10:06 +07:00
Cønstantine K ̷o̷valensky
716d54a217
Minor code change (#970)
Show torrent client icons for statistics
2023-10-13 13:31:19 +04:00
Cønstantine K ̷o̷valensky
73150d2584
Peer client display support (#968)
Show torrent client icons for statistics
2023-10-13 13:23:21 +04:00
Roman Kelesidis
3ec1699612
Fixed undefined array key group_description (#969) 2023-10-13 12:43:05 +07:00
Cønstantine K ̷o̷valensky
4e81338e0d
Minor code changes (#967) 2023-10-12 15:55:35 +04:00
Roman Kelesidis
f2b93b68aa
Minor improvements (#966)
* Minor improvements

* Update viewtopic.tpl

* Update page_footer.php

* Update page_footer.php
2023-10-12 15:16:35 +07:00
Roman Kelesidis
708dd4f131
Minor improvements (#965) 2023-10-09 18:11:26 +07:00
dependabot[bot]
ee6e735da0
Composer(deps): Bump egulias/email-validator from 4.0.1 to 4.0.2 (#964)
Bumps [egulias/email-validator](https://github.com/egulias/EmailValidator) from 4.0.1 to 4.0.2.
- [Release notes](https://github.com/egulias/EmailValidator/releases)
- [Changelog](https://github.com/egulias/EmailValidator/blob/4.x/CHANGELOG.md)
- [Commits](https://github.com/egulias/EmailValidator/compare/4.0.1...4.0.2)

---
updated-dependencies:
- dependency-name: egulias/email-validator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-09 13:42:13 +07:00
Cønstantine Kovalensky
ba59c31830
Added my name to the list of authors (#963) 2023-10-06 18:53:00 +04:00
Cønstantine Kovalensky
9b3d2a4ebd
Better way to prioritize peers (#962) 2023-10-06 17:51:08 +04:00
Cønstantine Kovalensky
50e305390d
Prioritize returning leecher list for seeder announces (#961)
* Show IPv6 peers for cached announces
2023-10-06 16:15:11 +04:00
Roman Kelesidis
8f4d00c1cc
Minor improvements (#960)
* Minor improvements

* Update admin_extensions.php

* Update Ajax.php
2023-10-06 18:43:56 +07:00
Roman Kelesidis
ced2cc6fed
Minor improvements (#959) 2023-10-06 18:41:04 +07:00
Yury Pikhtarev
44512e88b6
New Crowdin updates (#957)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (French)
2023-10-06 18:32:36 +07:00
Constantine Kovalensky
e2bf40bd64
Generate .torrent file names based on topic titles (#958) 2023-10-05 23:08:36 +04:00
Roman Kelesidis
8e218f5d69
Minor improvements (#956) 2023-10-05 23:32:22 +07:00
Roman Kelesidis
3a03381b8d
Minor improvements (#954)
* Minor improvements

* Update admin_extensions.php

* Updated

* Update index.tpl
2023-10-05 23:09:57 +07:00
Roman Kelesidis
1c7f13e737
Minor improvements (#953) 2023-10-05 19:46:56 +07:00
Roman Kelesidis
1ac777c1f7
Minor improvements (#952) 2023-10-05 19:19:02 +07:00
Roman Kelesidis
f6302ca550
Minor improvements (#951) 2023-10-05 19:00:26 +07:00
Roman Kelesidis
ca8a8a2036
Minor improvements (#950) 2023-10-05 09:36:46 +07:00
Constantine Kovalensky
9182928273
long2ip_extended() missing function (#948)
long2ip_extended() missing function
2023-10-04 08:06:25 +04:00
Yury Pikhtarev
d410e70162
New Crowdin updates (#947)
* New translations main.php (Romanian)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-10-03 23:41:20 +07:00
Roman Kelesidis
95ca827198
Minor improvements (#946)
* Minor improvements

* Apply fixes from StyleCI (#945)

Co-authored-by: StyleCI Bot <bot@styleci.io>

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-10-03 20:35:53 +07:00
Yury Pikhtarev
05ffabb1d3
Apply fixes from StyleCI (#942)
* Use humn_size() for AVATAR_EXPLAIN

* Apply fixes from StyleCI

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-10-03 20:35:05 +07:00
Yury Pikhtarev
1a92a4c61b
Apply fixes from StyleCI (#944)
Co-authored-by: StyleCI Bot <bot@styleci.io>
Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-10-03 20:34:43 +07:00
Yury Pikhtarev
0969f467c7
Apply fixes from StyleCI (#940)
* Added missing template var in group.php

* Update group.php

* Apply fixes from StyleCI

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-10-03 20:33:36 +07:00
Roman Kelesidis
c77de7b15a
Use humn_size() for AVATAR_EXPLAIN (#943) 2023-10-03 20:31:21 +07:00
Roman Kelesidis
860011d517
Added missing template var in group.php (#939)
* Added missing template var in group.php

* Update group.php
2023-10-03 20:28:02 +07:00
Constantine Kovalensky
e05ef75abc
BEP-7 & BEP-24 & IPv6 functions (#934)
BEP-7 & BEP-24 & IPv6 functions

Tracker:
Realized support for IPv6 (BEP-7).
Realized support for returning external IP address (BEP-24).

TorrentPier:
IPv6-only users should receive less error messages now.
2023-10-03 17:26:25 +04:00
Roman Kelesidis
628a066f91
Prevent infinity user adding into group (#937)
* Prevent infinity user adding into group

* Update group.php
2023-10-03 20:23:43 +07:00
Roman Kelesidis
c57ddd4621
Maked configurable email visibility for everybody (#936) 2023-10-03 20:20:13 +07:00
Roman Kelesidis
64112bca8b
Minor improvements (#935) 2023-10-03 20:17:10 +07:00
Constantine Kovalensky
ea70734a9d
Respond with loopback if peer list is empty (#933)
Respond with loopback if peers list is empty
2023-10-02 20:56:11 +04:00
Roman Kelesidis
c6fe4241e3
Use \Arokettu\Bencode\ instead \SandFox\Bencode\ (#932) 2023-10-02 20:32:56 +07:00
Roman Kelesidis
cb4516f869
Added support for bmp images (#931) 2023-10-02 19:41:19 +07:00
Yury Pikhtarev
cfed26400e
New Crowdin updates (#925)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2023-10-02 19:34:16 +07:00
Roman Kelesidis
98975fd7e9
ACP: Changed extensions sorting (#930) 2023-10-02 14:48:29 +07:00
Roman Kelesidis
7d2cf477e5
Added missing bmp extension in SQL dump (#929) 2023-10-02 14:23:53 +07:00
Roman Kelesidis
da39de5cf4
Use IMAGETYPE_* constants (#928) 2023-10-02 14:14:27 +07:00
Roman Kelesidis
4c708d578b
Small refactoring in Upload class (#927) 2023-10-02 13:53:41 +07:00
Roman Kelesidis
725c1919cf
Added support for webp avatars (#926) 2023-10-02 13:40:48 +07:00
Roman Kelesidis
ddaf31ea42
Added check up_allowed in Upload.php class (#924) 2023-10-02 13:28:34 +07:00
Roman Kelesidis
5272d7e00b
Added support for webp images 🌆 (#919)
* 1

* Temp: added webp in bbcode

* Update functions_thumbs.php

* Update functions_thumbs.php

* Updated

* Update functions_thumbs.php

* Update changes.txt

* Update functions_filetypes.php

* Update functions_filetypes.php

* Update posting_tpl.tpl
2023-10-02 01:04:29 +07:00
Roman Kelesidis
e1ff5f9256 Removed webp from config 2023-10-02 01:01:36 +07:00
Roman Kelesidis
7e9b564bbd Drop support PHP 7 👋 2023-10-02 00:52:11 +07:00
Constantine Kovalensky
1a0e5ea237
Switched from md5 to a faster xxHash hash function (#921)
* Support for IDN domains

* Announcer support for answering stopped events

* Update init_tr.php

* Informing message

* Update announce.php

* Switched from md5 to a faster xxHash hash function

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-10-01 21:36:51 +04:00
Roman Kelesidis
1d3ac71ac1 Update config.php 2023-10-02 00:33:31 +07:00
Roman Kelesidis
c9a17b86dd
Added support 7z archives (#923) 2023-10-02 00:01:51 +07:00
Roman Kelesidis
97526d59f2
Added missing EXCLUDED_USERS in tr_stats.php (#922) 2023-10-01 23:54:05 +07:00
Roman Kelesidis
82e5829426
Minor improvements (#920) 2023-09-30 19:25:57 +07:00
Constantine Kovalensky
6a007023da
Announcer support for responding to stopped events (#918)
* Announcer support for answering stopped events
2023-09-30 13:20:55 +04:00
Roman Kelesidis
9a372605f3 Update announce.php 2023-09-27 19:38:55 +07:00
Roman Kelesidis
4929a75179
Added missing !defined('BB_ROOT') check (#917) 2023-09-27 19:38:06 +07:00
Yury Pikhtarev
0751633311
New Crowdin updates (#916)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)
2023-09-25 23:50:18 +07:00
Roman Kelesidis
7ff2437186
Minor improvements (#915) 2023-09-25 23:01:04 +07:00
Roman Kelesidis
5e42154272
Minor improvements (#914) 2023-09-25 16:27:13 +07:00
Roman Kelesidis
cb48b4dd98 Updated 2023-09-24 13:53:27 +07:00
Roman Kelesidis
bbe17401a0 Added missing mbstring extension 2023-09-24 12:26:38 +07:00
Yury Pikhtarev
9f479a5ca5
New Crowdin updates (#912)
* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-09-24 00:43:23 +07:00
Roman Kelesidis
45f17fe7b6
Minor improvements (#913) 2023-09-24 00:42:27 +07:00
Roman Kelesidis
4ef31d2878
Minor improvements (#911) 2023-09-23 23:13:44 +07:00
Roman Kelesidis
973005f5ed
Minor improvements (#910) 2023-09-23 23:08:17 +07:00
Constantine Kovalensky
4b848df266
Support for IDN domains (#909) 2023-09-21 21:27:32 +04:00
Roman Kelesidis
0a8fea75c5
Minor improvements (#908) 2023-09-19 17:24:48 +07:00
Roman Kelesidis
f93ee8331d Update .gitignore 2023-09-19 17:15:32 +07:00
Roman Kelesidis
a9f815d378 Added missing directory thumbs 2023-09-19 17:15:18 +07:00
Roman Kelesidis
715faa2dd2
Removed useless chmod() (#907) 2023-09-19 17:05:27 +07:00
Roman Kelesidis
34fd7ba2f8
Minor improvements (#906) 2023-09-19 17:00:17 +07:00
Roman Kelesidis
0cf8250c69
Minor improvements (#905) 2023-09-18 16:20:03 +07:00
Roman Kelesidis
236ae639ed
Minor improvements (#904) 2023-09-17 21:59:23 +07:00
Roman Kelesidis
119cf935a2
Minor improvements (#903) 2023-09-17 16:17:10 +07:00
Roman Kelesidis
a2e7251d38
Minor improvements (#902) 2023-09-17 00:42:54 +07:00
Roman Kelesidis
ab9336ec94 Release 2.4.0-beta2 🦕 2023-09-16 12:49:11 +07:00
Roman Kelesidis
c654a9ae36
Tracker announce & scrape improvements 🥳 (#901)
* Tracker announce & scrape improvements

* Fixed null variables

Co-Authored-By: Constantine Kovalensky <45331093+kovalensky@users.noreply.github.com>

* Hybrid topics handling in announcer

* Updated

* Use correct data types

* Revert "Use correct data types"

This reverts commit bc9f0e4d6f.

* Update announce.php

* Showing downloaded times in stats

* Updated

* Updated

* Debugging variables

* Update scrape.php

* Updated

* Update announce.php

* Update announce.php

* Code re-formatting

* Code re-formatting

* Updated

* Update config.php

* Update tr_make_snapshot.php

* Update tr_complete_count.php

* Stopped event should be handled before cache check

* Include torrent download name in magnet link

* Magnet name re-formatting

* Smart cache management

---------

Co-authored-by: Constantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2023-09-14 08:38:07 +07:00
Roman Kelesidis
cc07ecb56c
Minor improvements (#900) 2023-09-09 21:32:04 +07:00
Roman Kelesidis
c7ec1e54d6
Minor improvements (#898) 2023-09-09 17:30:08 +07:00
Roman Kelesidis
a729c32454
Minor improvements (#897) 2023-09-09 17:00:04 +07:00
Roman Kelesidis
b78127173f
Minor improvements (#895) 2023-09-09 16:13:51 +07:00
Roman Kelesidis
c6b3a80d96 Update viewtopic_torrent.tpl 2023-09-07 23:39:16 +07:00
Roman Kelesidis
465f504f53 Update viewtopic_attach.tpl 2023-09-07 22:31:43 +07:00
Roman Kelesidis
559029a133
Fixed downloaded counter (#894) 2023-09-07 21:45:04 +07:00
Roman Kelesidis
5ed4fdadd3
Minor improvements (#893) 2023-09-07 21:19:21 +07:00
Roman Kelesidis
b80874abe4 Update Redis.php 2023-09-07 21:06:39 +07:00
Roman Kelesidis
3c503c981f Updated 2023-09-07 18:29:50 +07:00
Roman Kelesidis
ed8fe6fbf1 Update announce.php 2023-09-07 18:25:46 +07:00
Roman Kelesidis
1abd1176bf
Minor improvements (#892) 2023-09-07 17:51:49 +07:00
Roman Kelesidis
813fff63d0
Fixed null seeders & leechers in announcer (#891) 2023-09-07 16:52:24 +07:00
Roman Kelesidis
f4fc5d7cdf
Minor improvements (#890) 2023-09-07 00:49:53 +07:00
Roman Kelesidis
339f0ef948
Minor improvements (#889) 2023-09-07 00:44:28 +07:00
Roman Kelesidis
10b56ecdef
Replace all double quotes with single quotes (#888) 2023-09-05 21:59:03 +07:00
Roman Kelesidis
3c5a37fdb4
Minor improvements (#887)
* Minor improvements

* Fixed
2023-09-05 16:50:37 +07:00
Yury Pikhtarev
a319d29bc5
New Crowdin updates (#886)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-09-05 08:27:10 +07:00
Roman Kelesidis
a3f00eee69
Removed unused lang variables (#885) 2023-09-04 23:21:12 +07:00
Yury Pikhtarev
f9c4712bd2
New Crowdin updates (#881)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-09-04 23:08:12 +07:00
Roman Kelesidis
209b8cd638
Minor improvements (#884)
* Minor improvements

* Update displaying_torrent.php

* Updated

* Updated

* Updated

* Update terms.php
2023-09-04 16:42:15 +07:00
Roman Kelesidis
4b453de64a
Minor improvements (#882)
* Minor improvements

* Updated

* Updated

* Updated

* Update privmsg.php

* Updated

* Update admin_attach_cp.php
2023-09-04 01:01:01 +07:00
Roman Kelesidis
2c07660435 Update scrape.php 2023-09-03 11:45:18 +07:00
Constantine Kovalensky
50926639cf
BitTorrent v2 support enhancements 🥳 (#876)
* BitTorrent v2 support enchancements

* Added torrent name sanitizing

* Using faster language construct instead of function call for name sanitizing

* Minor improvements

- Fixed deformed avatars => get_avatar() function
- Removed outdated dc links support

* Code comments

* Changed function name

* Added table generation function with file list

For search engines to index

* Used humn_size function for size formatting in table generation

* Fixed typo

* Removed useless language variables

* Fixed code formatting

* Fixed broken displaying magnet link

* Torrent fields sanitization in table

* Fixed info hash issue

* Support for v2 only torrents

* Code re-formatting

* Typo

* Update Torrent.php

* Update functions.php

* Updated

* Updated

* Update Torrent.php

* Update TorrentFileList.php

* Update Torrent.php

* Update Torrent.php

* Update Torrent.php

* Update Torrent.php

* Error msg

* Update Torrent.php

* Update Torrent.php

* Updated

* Update Torrent.php

* Update Torrent.php

* Update config.php

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql

* Update mysql.sql

* String fixes

* Update TorrentFileList.php

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-09-03 00:55:21 +07:00
Roman Kelesidis
bebf6dd4a4
Fixed empty $row['pm_count'] (#880) 2023-09-02 11:28:29 +07:00
Roman Kelesidis
d6cec9333c
Minor improvements (#879) 2023-09-02 11:08:52 +07:00
Roman Kelesidis
7281480b0f
Created function get_banned_users() (#878) 2023-09-02 10:28:31 +07:00
Roman Kelesidis
9bb409c4ff
Moved callseed to ajax actions (#877) 2023-09-02 10:09:58 +07:00
dependabot[bot]
e56b457a79
Composer(deps): Bump guzzlehttp/guzzle from 7.7.0 to 7.8.0 (#872)
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.7.0 to 7.8.0.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.8/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.7.0...7.8.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-28 16:18:17 +07:00
dependabot[bot]
642d45c40b
Composer(deps): Bump symfony/polyfill from 1.27.0 to 1.28.0 (#873)
Bumps [symfony/polyfill](https://github.com/symfony/polyfill) from 1.27.0 to 1.28.0.
- [Release notes](https://github.com/symfony/polyfill/releases)
- [Changelog](https://github.com/symfony/polyfill/blob/1.x/CHANGELOG.md)
- [Commits](https://github.com/symfony/polyfill/compare/v1.27.0...v1.28.0)

---
updated-dependencies:
- dependency-name: symfony/polyfill
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-28 16:18:03 +07:00
dependabot[bot]
af6d2027f5
Composer(deps-dev): Bump symfony/var-dumper from 5.4.26 to 5.4.28 (#874)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.26 to 5.4.28.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.26...v5.4.28)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-28 16:17:33 +07:00
dependabot[bot]
13623122ea
Composer(deps): Bump guzzlehttp/psr7 from 2.6.0 to 2.6.1 (#875)
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/2.6/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/2.6.0...2.6.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-28 16:17:16 +07:00
Yury Pikhtarev
104f6b16f8
New Crowdin updates (#871)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-27 22:26:27 +07:00
Roman Kelesidis
e368f45f49
Added showing info_hash v2 in viewtopic.php (#870) 2023-08-27 21:44:05 +07:00
Roman Kelesidis
072b5a074f
WIP: Added search by info_hash v2 🐯 (#869)
* Added search by info_hash v2

* Update functions.php

* Update functions.php
2023-08-27 21:13:36 +07:00
Roman Kelesidis
9b43d144a4
Minor improvements (#868)
* Minor improvements

* Update viewforum.php

* Updated
2023-08-27 20:05:27 +07:00
Roman Kelesidis
87b497e32a
Minor improvements (#867) 2023-08-27 19:00:48 +07:00
Constantine Kovalensky
fadce7a297
BitTorrent v2 support 🐸 (#866)
* BitTorrent v2 support

* Update TorrentFileList.php

* BitTorrent v2 support

Added support for BitTorrent v2 file hash displaying, magnet links

* Updated

* Updated

* Update changes.txt

* Update Torrent.php

* Update Torrent.php

* Updated

* Added support in announcer

* Update announce.php

* Update scrape.php

* Update scrape.php

* Update scrape.php

* Changed the condition for single files

* Update scrape.php

* Update displaying_torrent.php

* Update displaying_torrent.php

* Update displaying_torrent.php

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-27 18:33:38 +07:00
Roman Kelesidis
a2e8817b5f
Minor improvements (#863)
* Minor improvements

* Update posting.tpl

* Update posting.tpl

* Updated

* Update globals.css
2023-08-24 14:34:28 +07:00
Yury Pikhtarev
78af4031f0
New Crowdin updates (#859)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-23 01:52:25 +07:00
Roman Kelesidis
3da70d5c5c
Added ability to remove topic templates (#862) 2023-08-23 01:37:34 +07:00
Roman Kelesidis
ad38225f2b
Added missing translation in admin_ug_auth (#861) 2023-08-23 01:30:21 +07:00
Roman Kelesidis
597c192cc4
Show renamed topic actions in log actions (#860) 2023-08-22 01:05:39 +07:00
Roman Kelesidis
fe742de211
Show set/unset downloaded actions in log actions (#858) 2023-08-22 00:32:06 +07:00
Roman Kelesidis
da08532898
Show pin & unpin actions in log actions (#857) 2023-08-21 23:32:33 +07:00
Roman Kelesidis
6e1d7c3538
Minor improvements (#856) 2023-08-20 23:44:32 +07:00
Roman Kelesidis
666c42f012 Update index.tpl 2023-08-17 00:45:22 +07:00
Roman Kelesidis
723c9f80fd
Minor improvements (#855) 2023-08-15 01:29:42 +07:00
Roman Kelesidis
43178a89c9
Minor improvements (#854) 2023-08-14 23:08:27 +07:00
Roman Kelesidis
0210000e34
Minor improvements (#853) 2023-08-10 22:45:29 +07:00
Roman Kelesidis
718da43798
Minor improvements (#852) 2023-08-09 18:41:19 +07:00
Yury Pikhtarev
7ec7a79539
New Crowdin updates (#850)
* New translations user_activate_passwd.html (Russian)

* New translations user_welcome.html (Russian)

* New translations user_welcome_inactive.html (Russian)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-04 14:55:28 +07:00
dependabot[bot]
e9071f9433
Composer(deps): Bump guzzlehttp/psr7 from 2.5.0 to 2.6.0 (#849)
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/2.6/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/2.5.0...2.6.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-04 14:53:49 +07:00
Yury Pikhtarev
bf2fe4d4b2
New Crowdin updates (#840)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Russian)

* New translations main.php (Russian)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-08-02 23:11:26 +07:00
Roman Kelesidis
0cb2a3f74b
Increase post_text & privmsgs_text limits (#848) 2023-08-01 16:59:32 +07:00
dependabot[bot]
256f26bc01
Composer(deps-dev): Bump symfony/var-dumper from 5.4.25 to 5.4.26 (#847)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.25 to 5.4.26.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.25...v5.4.26)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-31 14:26:38 +07:00
Roman Kelesidis
803a3a52a3
Minor improvements (#846) 2023-07-27 01:05:02 +07:00
Roman Kelesidis
7e88089cbb Update config.php 2023-07-24 13:31:53 +07:00
Roman Kelesidis
188f15f53f
Minor improvements (#845) 2023-07-24 13:30:42 +07:00
Roman Kelesidis
7f499cf853
Minor improvements (#844) 2023-07-24 13:06:14 +07:00
Roman Kelesidis
ab0d2133d4
Minor improvements (#843) 2023-07-24 12:55:46 +07:00
Roman Kelesidis
742b51cc45
Minor improvements (#842)
* Minor improvements

* Updated
2023-07-24 12:45:15 +07:00
Roman Kelesidis
0322199874
Added show password button (#841) 2023-07-24 00:12:36 +07:00
Roman Kelesidis
9ba9ca2b61
Passkey rework 🔫 (#839)
* WIP: Passkey rework 🔫

* Update tracker.php

* Update Torrent.php

* Update Torrent.php

* Update displaying_torrent.php

* Update viewforum.php

* Update Torrent.php

* Update functions.php

* Update functions.php

* Updated

* Update config.php

* Update functions.php

* Update usercp_viewprofile.tpl

* Update usercp_viewprofile.tpl

* Updated

* Updated

* Update usercp_viewprofile.tpl

* Update usercp_viewprofile.tpl

* Update displaying_torrent.php
2023-07-23 23:55:57 +07:00
Roman Kelesidis
3288d905ac
Rename passkeyExists() -> getPasskey() (#838) 2023-07-23 14:05:48 +07:00
Roman Kelesidis
0e8aa1177e
Added method passkeyExists() (#837) 2023-07-23 13:59:42 +07:00
Roman Kelesidis
c760c01773 Corrected version 2023-07-23 13:20:54 +07:00
Roman Kelesidis
a73ea633e4
Refactored get_userdata() function (#836) 2023-07-23 01:17:23 +07:00
Roman Kelesidis
fbf5bf94f1
Fixed $bb_cfg['pm_days_keep'] (#834) 2023-07-20 23:08:45 +07:00
Roman Kelesidis
b1403aa95b
Minor improvements (#833) 2023-07-20 22:42:31 +07:00
Roman Kelesidis
1ed6ca1c13
Update README.md 2023-07-20 09:53:04 +07:00
Roman Kelesidis
8a21b1c8b7 Release 2.4.0-beta1 🦊 2023-07-18 01:23:58 +07:00
Roman Kelesidis
9d4bef3598 Update change_torrent.php 2023-07-18 01:04:26 +07:00
Roman Kelesidis
7f9b974c09 Minor adjustments 2023-07-18 00:48:50 +07:00
Roman Kelesidis
ddf13d9bf2
Fixed broken smilies replacing (#832) 2023-07-17 01:15:52 +07:00
Roman Kelesidis
d1d9b3f14c
Fixed mailer exception exposing stack trace (#831) 2023-07-17 00:37:52 +07:00
dependabot[bot]
2ca2d9936c
Composer(deps): Bump filp/whoops from 2.15.2 to 2.15.3 (#830)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.15.2 to 2.15.3.
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.15.2...2.15.3)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-15 12:24:15 +07:00
Roman Kelesidis
ab14e67a92 Fix previous PR 😄 2023-07-13 12:30:29 +07:00
Roman Kelesidis
fc287fd13e
Maked max smilies in PM configurable (#829) 2023-07-13 12:28:19 +07:00
Roman Kelesidis
5e726b348a
Fix RFC 1918 RegExp (#828) 2023-07-04 12:41:28 +07:00
Roman Kelesidis
ff0e9a29a9 Small dateformat fix 2023-07-04 11:49:26 +07:00
Roman Kelesidis
c89bf3531b
Minor improvements (#826) 2023-07-01 16:14:05 +07:00
Roman Kelesidis
7c49ed0755
Fixed broken reset autologin (#825) 2023-06-30 18:58:19 +07:00
Roman Kelesidis
a9e0a975dc
Minor improvements (#824) 2023-06-30 14:22:26 +07:00
Roman Kelesidis
9e7038c3f8
Minor improvements (#823) 2023-06-30 13:59:38 +07:00
Roman Kelesidis
69f2509910
Imporeved debug 🐛 (#822) 2023-06-30 13:46:26 +07:00
Roman Kelesidis
695d46e31e
Redirect to viewprofile.php if profile.php hasn't arguments (#821) 2023-06-29 21:29:50 +07:00
Roman Kelesidis
dc46528918
Update posting_editor.tpl (#820) 2023-06-29 16:38:29 +07:00
Roman Kelesidis
9bf3b78352
Minor improvements (#819) 2023-06-27 18:44:37 +07:00
dependabot[bot]
97c2332047
Composer(deps-dev): Bump symfony/var-dumper from 5.4.24 to 5.4.25 (#818)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.24 to 5.4.25.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.24...v5.4.25)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-26 14:31:11 +07:00
Roman Kelesidis
65883d7d5b
Show smilies in post for guests (#817) 2023-06-25 12:42:56 +07:00
Roman Kelesidis
dad0f055f6
Update CHANGELOG.md 2023-06-24 11:15:15 +07:00
Roman Kelesidis
084d567543
Minor improvements (#816) 2023-06-23 23:49:07 +07:00
Roman Kelesidis
ed270566b6
Minor improvements (#814) 2023-06-22 13:18:17 +07:00
Roman Kelesidis
c0593b9fa2
Added ability to set MySQLi error reporting (#813)
* Added ability to set MySQLi error reporting

* fix

* fix
2023-06-22 13:07:48 +07:00
Roman Kelesidis
41664685ba
Minor improvements (#812)
* Minor improvements

* fix

* fix

* Update viewtopic_attach.tpl

* Revert "Maked max post length configurable (#793)"

This reverts commit fd42eae329.

* Update config.php

* fix
2023-06-21 14:03:19 +07:00
Roman Kelesidis
a340ff644b
Minor improvements (#811) 2023-06-14 21:30:05 +07:00
Roman Kelesidis
79b2677809
Minor improvements (#809)
* Minor improvements

* Fix

* Fix

* Update functions.php
2023-06-13 13:26:56 +07:00
Roman Kelesidis
07f8d85740
Added ability to generate passkey after registration (#810) 2023-06-13 13:26:28 +07:00
Roman Kelesidis
9787835c57
Minor improvements (#808) 2023-06-13 02:13:37 +07:00
Yury Pikhtarev
e1724cf09e
New Crowdin updates (#807)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Ukrainian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-06-11 11:52:28 +07:00
Roman Kelesidis
eb8f15d5b0
Minor improvements (#806) 2023-06-11 01:47:10 +07:00
Roman Kelesidis
b21333bbb9
Added search by torrent status (#805)
Mod: https://torrentpier.com/resources/poisk-po-statusu-razdachi.161/

Author: Gemini_13
2023-06-11 01:42:13 +07:00
Roman Kelesidis
f653634f19
Minor improvements (#804) 2023-06-11 01:00:41 +07:00
Yury Pikhtarev
bfb43fe4dd
New Crowdin updates (#803)
* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-06-10 16:52:16 +07:00
Roman Kelesidis
e62310e098
Removed unused lang variables (#802) 2023-06-10 16:06:22 +07:00
Roman Kelesidis
eabc49f68e
Minor improvements (#801) 2023-06-10 15:55:53 +07:00
Roman Kelesidis
23544f4acf
Fixed pagination (#800) 2023-06-10 13:30:54 +07:00
Roman Kelesidis
b82299b0d1
Removed WIP status 2023-06-10 12:20:48 +07:00
Roman Kelesidis
d84d66909f
Minor improvements (#799) 2023-06-10 11:19:04 +07:00
Roman Kelesidis
99602ec255
Minor improvements (#798) 2023-06-10 11:14:26 +07:00
Roman Kelesidis
a7a469de78
Minor improvements (#797)
* Minor improvements

* Minor improvements
2023-06-10 11:01:58 +07:00
Roman Kelesidis
a66a0007c3
Minor improvements (#796) 2023-06-10 10:31:26 +07:00
Roman Kelesidis
e6d66d2d7f Release 2.4.0-alpha4 🎱 2023-06-08 22:30:36 +07:00
Roman Kelesidis
4634b674b6 Fix 2023-06-08 22:22:42 +07:00
Roman Kelesidis
d84fd998f6
Minor improvements (#795) 2023-06-08 15:18:06 +07:00
Roman Kelesidis
7a64f3fe6f Added TMRR tool in README ❤️ 2023-06-08 14:07:28 +07:00
Roman Kelesidis
23787febd7 Revert "Added TMRR tool in README ❤️"
This reverts commit 077eae2e71.
2023-06-08 13:57:44 +07:00
Roman Kelesidis
9015980e17
Reformated JS (#794) 2023-06-08 13:53:26 +07:00
Roman Kelesidis
fb07248a4a Revert "Reformated JS (#753)"
This reverts commit 243ddf337c.
2023-06-08 13:50:37 +07:00
Roman Kelesidis
53e26905b3 Revert "Reformated JS (#754)"
This reverts commit cbbd2ebcc6.
2023-06-08 13:50:26 +07:00
Roman Kelesidis
077eae2e71 Added TMRR tool in README ❤️ 2023-06-08 13:34:12 +07:00
Roman Kelesidis
8fe6e729d0 Revert "Unified checkForm() JS (#747)"
This reverts commit 56b518d44e.
2023-06-08 13:17:37 +07:00
Roman Kelesidis
fd42eae329
Maked max post length configurable (#793) 2023-06-08 12:55:32 +07:00
Roman Kelesidis
2369e4cc0c
Used new Bencoder library 🔩 (#791)
Co-authored-by: Constantine Kovalensky <45331093+kovalensky@users.noreply.github.com>
2023-06-08 11:45:20 +07:00
Roman Kelesidis
356218dc67 Revert "Minor improvements (#790)"
This reverts commit 214c361d1c.
2023-06-08 10:51:29 +07:00
Roman Kelesidis
214c361d1c
Minor improvements (#790) 2023-06-08 10:49:51 +07:00
Roman Kelesidis
6e24671cdf
Added some placeholders for input fields (#789) 2023-06-08 00:19:53 +07:00
Roman Kelesidis
0bc3903c9d Revert "Generate jumpbox files only if enabled (#764)"
This reverts commit ce9c3d9b47.
2023-06-08 00:03:12 +07:00
Roman Kelesidis
4c725f6246 Revert "Minor improvements (#766)"
This reverts commit 75c0920dce.
2023-06-08 00:03:01 +07:00
Roman Kelesidis
345845e5cf
Minor improvements (#788) 2023-06-08 00:01:40 +07:00
Roman Kelesidis
0a72b27a09
Minor improvements (#787) 2023-06-07 15:51:27 +07:00
Yury Pikhtarev
d6478a5d13
New Crowdin updates (#786)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Ukrainian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Ukrainian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Ukrainian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@gmail.com>
2023-06-07 14:38:41 +07:00
Roman Kelesidis
c3e1e7283b Revert "[ACP] Added showing user device type in online info (#772)"
This reverts commit a8eec778df.
2023-06-07 14:14:08 +07:00
Roman Kelesidis
ba2bc4b56e Revert "Added session_agent in session (#771)"
This reverts commit 1bfda297ad.
2023-06-07 14:13:48 +07:00
Roman Kelesidis
727d34d268
Fixed empty user search box (#785) 2023-06-07 01:02:08 +07:00
Roman Kelesidis
5b566ea2b2
Minor improvements (#784) 2023-06-06 21:38:06 +07:00
Roman Kelesidis
f4de0d17cc
Fixed null $u_data if user not found (#783) 2023-06-06 15:54:32 +07:00
Roman Kelesidis
464966c9fb
Added missing properties in User class (#782) 2023-06-06 14:56:15 +07:00
Roman Kelesidis
645cdb2515 Revert "Minor improvements (#778)"
This reverts commit 5fa582ab8b.
2023-06-06 14:47:36 +07:00
Roman Kelesidis
c7c1cb920b Revert "Minor improvements (#779)"
This reverts commit cb94b703cc.
2023-06-06 14:47:15 +07:00
Roman Kelesidis
9202ecbc91 Revert "Fixed null $u_data if user not found (#781)"
This reverts commit 1d1f9fa4aa.
2023-06-06 14:46:54 +07:00
Roman Kelesidis
1d1f9fa4aa
Fixed null $u_data if user not found (#781) 2023-06-06 14:37:24 +07:00
Roman Kelesidis
cb94b703cc
Minor improvements (#779) 2023-06-05 23:31:06 +07:00
Roman Kelesidis
5fa582ab8b
Minor improvements (#778) 2023-06-05 23:14:40 +07:00
Roman Kelesidis
9a5d9a71d2
Fixed some deprecations (#777) 2023-06-05 20:09:54 +07:00
Roman Kelesidis
dadd5dbcdc
Fixed: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated (#776) 2023-06-05 19:43:42 +07:00
Roman Kelesidis
9d5fd03a45 Revert "Added clear logs option in admin panel (#775)"
This reverts commit 88cf205962.
2023-06-05 18:57:24 +07:00
Roman Kelesidis
88cf205962
Added clear logs option in admin panel (#775) 2023-06-05 18:32:36 +07:00
Roman Kelesidis
2b5c1d5734
Minor improvements (#773) 2023-06-05 15:59:01 +07:00
Roman Kelesidis
a8eec778df
[ACP] Added showing user device type in online info (#772) 2023-06-05 15:28:59 +07:00
Roman Kelesidis
1bfda297ad
Added session_agent in session (#771) 2023-06-05 15:15:20 +07:00
Roman Kelesidis
76fa6eeabd
Reformated JS (#770) 2023-06-05 14:48:40 +07:00
Roman Kelesidis
2c1cb6d703
Minor improvements (#769) 2023-06-05 13:52:34 +07:00
Roman Kelesidis
18d21d6a49
Implemented password_hash API 🥳 (#768)
* Replaced md5 with password_hash API

* Updated

* Update User.php

* Update User.php

* Updated

* Update User.php

* Updated

* Updated
2023-06-05 13:45:50 +07:00
Roman Kelesidis
75c0920dce
Minor improvements (#766) 2023-06-04 13:26:20 +07:00
Roman Kelesidis
ce9c3d9b47
Generate jumpbox files only if enabled (#764) 2023-06-04 10:21:27 +07:00
Roman Kelesidis
788d7a8b1a
Updated deps (#763) 2023-06-04 10:13:56 +07:00
Roman Kelesidis
0143d8e0c8 Release 2.4.0-alpha3 🐬 2023-06-02 23:42:12 +07:00
Roman Kelesidis
aa0b94afd1
Minor improvements (#761) 2023-06-02 23:10:19 +07:00
Roman Kelesidis
dd638fda7e Revert "Minor improvements (#759)"
This reverts commit 0728fad7d7.
2023-06-02 23:05:01 +07:00
Roman Kelesidis
6378c43ef7 Revert "Minor improvements (#760)"
This reverts commit 495a2bb5c7.
2023-06-02 23:04:49 +07:00
Roman Kelesidis
02e1679f29 Moved legacy.js to libs dir 2023-06-02 22:38:08 +07:00
Roman Kelesidis
495a2bb5c7
Minor improvements (#760) 2023-06-02 14:43:05 +07:00
Roman Kelesidis
0728fad7d7
Minor improvements (#759) 2023-06-02 14:14:48 +07:00
dependabot[bot]
9f24a39a13
Composer(deps): Bump egulias/email-validator from 3.2.5 to 3.2.6 (#758)
Bumps [egulias/email-validator](https://github.com/egulias/EmailValidator) from 3.2.5 to 3.2.6.
- [Release notes](https://github.com/egulias/EmailValidator/releases)
- [Changelog](https://github.com/egulias/EmailValidator/blob/4.x/CHANGELOG.md)
- [Commits](https://github.com/egulias/EmailValidator/compare/3.2.5...3.2.6)

---
updated-dependencies:
- dependency-name: egulias/email-validator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-02 14:11:22 +07:00
Roman Kelesidis
a5d6bc5b4f
Minor improvements (#757) 2023-06-02 13:19:11 +07:00
Roman Kelesidis
e1bef86ad3
Minor improvements (#756) 2023-06-02 01:09:30 +07:00
Roman Kelesidis
3580c2fe6e Fixed previous commit 2023-06-02 01:00:09 +07:00
Roman Kelesidis
2f23f97b84
Minor improvements (#755) 2023-06-02 00:52:21 +07:00
Roman Kelesidis
cbbd2ebcc6
Reformated JS (#754) 2023-06-01 23:43:30 +07:00
Roman Kelesidis
243ddf337c
Reformated JS (#753) 2023-06-01 22:37:24 +07:00
Yury Pikhtarev
f35ca7a88e
New Crowdin updates (#700)
* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-06-01 01:23:30 +07:00
Roman Kelesidis
e302393c6e
Minor improvements (#752) 2023-06-01 00:02:16 +07:00
Roman Kelesidis
e22d2a6254
Minor improvements (#751) 2023-05-31 23:53:36 +07:00
Roman Kelesidis
eb604a566e
Fixed: Automatic conversion of false to array is deprecated (#750) 2023-05-31 21:52:48 +07:00
Roman Kelesidis
c31d64ddfb
Added reset button in posting editor (#749) 2023-05-31 21:09:33 +07:00
Roman Kelesidis
98d683f98a
[TEMP] Removed Http class (#748) 2023-05-31 20:33:50 +07:00
Roman Kelesidis
56b518d44e
Unified checkForm() JS (#747) 2023-05-31 20:23:37 +07:00
Roman Kelesidis
1d9db82688
Added sup & sub tags in BBCode (#746) 2023-05-31 00:03:32 +07:00
Roman Kelesidis
421c8b60f9
Moved $bb_cfg['show_board_start_date'] to admin panel (#745) 2023-05-30 23:34:31 +07:00
Roman Kelesidis
dd469f6bc0
Fixed empty $_SERVER['SERVER_PROTOCOL'] in cron (#744) 2023-05-30 13:51:07 +07:00
Roman Kelesidis
916e40a2d3
Fixed methods types in Admin/Cron.php (#743) 2023-05-30 13:21:50 +07:00
Roman Kelesidis
09d64c5a24
Minor improvements (#742) 2023-05-30 12:54:09 +07:00
Roman Kelesidis
333c0cef1d
Minor improvements (#741) 2023-05-30 01:02:24 +07:00
Roman Kelesidis
c6b6a79da9
Replaced bb_realpath() with native (#740) 2023-05-29 23:32:29 +07:00
Roman Kelesidis
d2588855fa
Moved poll functions to Poll class (#739) 2023-05-29 22:57:10 +07:00
Roman Kelesidis
22fbae61db
Fixed broken $replace_content (#738) 2023-05-29 17:17:03 +07:00
Roman Kelesidis
efe793e699
Fixed broken file_write() function (#737) 2023-05-29 16:57:46 +07:00
Roman Kelesidis
039ec555f2 Revert "Fixed broken file_write function (#736)"
This reverts commit 68ee788d32.
2023-05-29 16:51:21 +07:00
Roman Kelesidis
68ee788d32
Fixed broken file_write function (#736) 2023-05-29 16:45:46 +07:00
Roman Kelesidis
8f2150a986
Minor improvements (#735) 2023-05-29 16:23:28 +07:00
Roman Kelesidis
f4150ef12c
Added exception if .env not found (#734) 2023-05-29 15:26:41 +07:00
dependabot[bot]
3d0dddb320
Composer(deps-dev): Bump symfony/var-dumper from 5.4.23 to 5.4.24 (#733)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.23 to 5.4.24.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.3/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.23...v5.4.24)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-29 14:12:48 +07:00
Roman Kelesidis
20cb0bfe17
Minor improvements (#732) 2023-05-29 12:37:26 +07:00
Roman Kelesidis
eb94659c61
Replaced bb_exit() with native (#731) 2023-05-29 12:13:20 +07:00
Roman Kelesidis
20837e08ae
Replaced prn_r() function with dump() (#730) 2023-05-29 12:08:07 +07:00
Roman Kelesidis
0c5f584bbd
Fixed: [Deprecated] number_format(): Passing null to parameter (#729) 2023-05-29 01:18:13 +07:00
Roman Kelesidis
de076c80ef
Code Inspection: Ternary expression can be replaced with condition (#728) 2023-05-29 00:32:36 +07:00
Roman Kelesidis
4e40a4bcd4 Update config.php 2023-05-28 23:04:38 +07:00
Roman Kelesidis
696a6bc158 Update .gitignore 2023-05-28 22:52:22 +07:00
Roman Kelesidis
3ed0bf3bb5
Maked jumpbox optional (#727) 2023-05-28 22:50:56 +07:00
Roman Kelesidis
fa0bafebd3 Release 2.4.0-alpha2 😺 2023-05-28 17:41:33 +07:00
Roman Kelesidis
737b7b992b
Use define instead of tpl variable (#726)
* COOKIE_MARK

* Use U_INDEX

* Removed BB_ROOT

* ONLY_NEW_TOPICS, ONLY_NEW_POSTS
2023-05-28 15:21:17 +07:00
Roman Kelesidis
af1924e04a Update build_ranks.php 2023-05-28 15:12:35 +07:00
Roman Kelesidis
4b96dd714c Move 'BOARD_START' to index.php 2023-05-28 13:26:22 +07:00
Roman Kelesidis
108fe39ade
Added show board start date on index page (#725) 2023-05-25 13:59:57 +07:00
Roman Kelesidis
00afae9c88
Fixed: Required parameter $mode follows optional parameter $submit (#724) 2023-05-25 13:31:45 +07:00
Roman Kelesidis
d951ee0a84
Minor improvements (#723) 2023-05-25 13:26:58 +07:00
Roman Kelesidis
5870163c08 Update page_footer_dev.php 2023-05-25 13:19:38 +07:00
Roman Kelesidis
874ba8c3a3
Added some new meta tags (#722) 2023-05-25 13:02:29 +07:00
Roman Kelesidis
2b996d16b5
Removed deprecated type="text/css" (#721) 2023-05-25 12:53:48 +07:00
Roman Kelesidis
5ae2d9ee89
Added 'samesite' option for setcookie() (#720) 2023-05-24 23:25:06 +07:00
Roman Kelesidis
47c3a1dd20 [TODO] Remove the legacy JS deps 2023-05-24 22:59:58 +07:00
Roman Kelesidis
64976d1049
Fixed: htmlspecialchars(): Passing null to parameter (#719) 2023-05-24 22:57:22 +07:00
Roman Kelesidis
6e4c8a1b88
Added password required symbols check (#713)
* Added password required symbols check

* Update Validate.php
2023-05-24 18:43:41 +07:00
Roman Kelesidis
ab77976e10
Improvements for SEO (#718) 2023-05-24 18:27:24 +07:00
Roman Kelesidis
d3a88a8d1d
Minor improvements (#717) 2023-05-24 18:06:25 +07:00
Roman Kelesidis
4b01801744
Changed syntax for constants definition (#714) 2023-05-24 15:52:01 +07:00
Roman Kelesidis
7c2b5c75b5
Minor improvements (#716)
* Minor improvements

* Minor improvements
2023-05-24 15:50:41 +07:00
Roman Kelesidis
383ab0d356
Minor improvements (#715) 2023-05-24 15:34:22 +07:00
Roman Kelesidis
d9d38935b6
Simplified IPHelper (#712) 2023-05-23 22:23:00 +07:00
Roman Kelesidis
8a5bac558f
Minor improvements (#711) 2023-05-23 15:10:58 +07:00
Roman Kelesidis
95d280175a
Fixed issue with DB_PORT not applying (#710) 2023-05-23 14:34:20 +07:00
Roman Kelesidis
7b456fcb54
Removed unused globals (#709) 2023-05-23 14:04:25 +07:00
Roman Kelesidis
8add267b2f
Removed APP_NAME variable (#708) 2023-05-23 14:00:28 +07:00
Roman Kelesidis
214e862e91
Minor improvements (#707) 2023-05-23 13:38:28 +07:00
Roman Kelesidis
b93f841e24
Minor improvements in admin templates (#706)
* Minor improvements in admin templates

* Update admin_sitemap.tpl
2023-05-22 23:29:42 +07:00
Roman Kelesidis
dffc4338cf
Updated deps (#705) 2023-05-22 22:27:21 +07:00
dependabot[bot]
7fb0122c8e
Composer(deps): Bump guzzlehttp/guzzle from 7.6.1 to 7.7.0 (#704)
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.6.1 to 7.7.0.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.7/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.6.1...7.7.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-22 14:15:25 +07:00
Roman Kelesidis
f7d9a1c53d
Use native __DIR__ for BB_PATH (#702) 2023-05-21 23:13:28 +07:00
Roman Kelesidis
16e07952e8 Update defines.php 2023-05-21 11:26:26 +07:00
Roman Kelesidis
553fd5c6e6
Added translations for debug panel (#699) 2023-05-21 11:21:29 +07:00
Roman Kelesidis
33625c6ed6 Update CHANGELOG.md 2023-05-21 00:01:36 +07:00
Roman Kelesidis
7d56395196
Refactored is_gold & gender_image functions (#698) 2023-05-20 23:57:18 +07:00
Roman Kelesidis
4ee8ac3aa6
Fixed input types in some cases (#697) 2023-05-20 23:37:12 +07:00
Roman Kelesidis
d70f9d1602
Show cut button in debug panel only if sql_log (#696) 2023-05-20 22:56:43 +07:00
Roman Kelesidis
fea0ed4da3 Update changes.txt 2023-05-20 22:16:00 +07:00
Roman Kelesidis
3713d449f7 Release 2.4.0-alpha1 💞 2023-05-20 17:56:15 +07:00
Yury Pikhtarev
1641488959
New translations main.php (Ukrainian) (#695) 2023-05-20 10:53:35 +07:00
Yury Pikhtarev
1473b2428e
New Crowdin updates (#626)
* New translations user_welcome_inactive.html (Slovenian)

* New translations sidebar1.html (Slovenian)

* New translations main.php (Albanian)

* New translations user_activate_passwd.html (Albanian)

* New translations user_welcome.html (Albanian)

* New translations user_welcome_inactive.html (Albanian)

* New translations sidebar1.html (Albanian)

* New translations main.php (Indonesian)

* New translations user_activate_passwd.html (Indonesian)

* New translations user_welcome.html (Indonesian)

* New translations user_welcome_inactive.html (Indonesian)

* New translations sidebar1.html (Indonesian)

* New translations main.php (Thai)

* New translations user_activate_passwd.html (Thai)

* New translations user_welcome.html (Thai)

* New translations user_welcome_inactive.html (Thai)

* New translations sidebar1.html (Thai)

* New translations main.php (Croatian)

* New translations user_activate_passwd.html (Croatian)

* New translations user_welcome.html (Croatian)

* New translations user_welcome_inactive.html (Croatian)

* New translations sidebar1.html (Croatian)

* New translations main.php (Estonian)

* New translations user_activate_passwd.html (Estonian)

* New translations user_welcome.html (Estonian)

* New translations user_welcome_inactive.html (Estonian)

* New translations sidebar1.html (Estonian)

* New translations main.php (Latvian)

* New translations user_activate_passwd.html (Latvian)

* New translations user_welcome.html (Latvian)

* New translations user_welcome_inactive.html (Latvian)

* New translations sidebar1.html (Latvian)

* New translations main.php (Azerbaijani)

* New translations user_activate_passwd.html (Azerbaijani)

* New translations user_welcome.html (Azerbaijani)

* New translations user_welcome_inactive.html (Azerbaijani)

* New translations sidebar1.html (Azerbaijani)

* New translations main.php (Hindi)

* New translations user_activate_passwd.html (Hindi)

* New translations user_welcome.html (Hindi)

* New translations user_welcome_inactive.html (Hindi)

* New translations sidebar1.html (Hindi)

* New translations main.php (Bosnian)

* New translations user_activate_passwd.html (Bosnian)

* New translations user_welcome.html (Bosnian)

* New translations user_welcome_inactive.html (Bosnian)

* New translations sidebar1.html (Bosnian)

* New translations main.php (Uzbek)

* New translations user_activate_passwd.html (Uzbek)

* New translations user_welcome.html (Uzbek)

* New translations user_welcome_inactive.html (Uzbek)

* New translations sidebar1.html (Uzbek)

* New translations main.php (Tajik)

* New translations user_activate_passwd.html (Tajik)

* New translations user_welcome.html (Tajik)

* New translations user_welcome_inactive.html (Tajik)

* New translations sidebar1.html (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Kazakh)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations sidebar1.html (Romanian)

* New translations sidebar1.html (French)

* New translations sidebar1.html (Spanish)

* New translations sidebar1.html (Afrikaans)

* New translations sidebar1.html (Arabic)

* New translations sidebar1.html (Belarusian)

* New translations sidebar1.html (Bulgarian)

* New translations sidebar1.html (Catalan)

* New translations sidebar1.html (Czech)

* New translations sidebar1.html (Danish)

* New translations sidebar1.html (German)

* New translations sidebar1.html (Greek)

* New translations sidebar1.html (Finnish)

* New translations sidebar1.html (Hebrew)

* New translations sidebar1.html (Hungarian)

* New translations sidebar1.html (Armenian)

* New translations sidebar1.html (Italian)

* New translations sidebar1.html (Japanese)

* New translations sidebar1.html (Georgian)

* New translations sidebar1.html (Korean)

* New translations sidebar1.html (Lithuanian)

* New translations sidebar1.html (Dutch)

* New translations sidebar1.html (Norwegian)

* New translations sidebar1.html (Polish)

* New translations sidebar1.html (Russian)

* New translations sidebar1.html (Slovak)

* New translations sidebar1.html (Slovenian)

* New translations sidebar1.html (Albanian)

* New translations sidebar1.html (Serbian (Cyrillic))

* New translations sidebar1.html (Swedish)

* New translations sidebar1.html (Turkish)

* New translations sidebar1.html (Ukrainian)

* New translations sidebar1.html (Chinese Traditional)

* New translations sidebar1.html (English)

* New translations sidebar1.html (Vietnamese)

* New translations sidebar1.html (Portuguese, Brazilian)

* New translations sidebar1.html (Indonesian)

* New translations sidebar1.html (Thai)

* New translations sidebar1.html (Croatian)

* New translations sidebar1.html (Kazakh)

* New translations sidebar1.html (Estonian)

* New translations sidebar1.html (Latvian)

* New translations sidebar1.html (Azerbaijani)

* New translations sidebar1.html (Hindi)

* New translations sidebar1.html (Bosnian)

* New translations sidebar1.html (Uzbek)

* New translations sidebar1.html (Tajik)

* New translations main.php (Ukrainian)

* New translations user_welcome.html (Ukrainian)

* New translations main.php (Ukrainian)

* New translations user_activate_passwd.html (Ukrainian)

* New translations user_welcome_inactive.html (Ukrainian)

* New translations main.php (Romanian)

* New translations main.php (Ukrainian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Bulgarian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Armenian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Georgian)

* New translations main.php (Korean)

* New translations main.php (Lithuanian)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Kazakh)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-05-17 18:28:33 +07:00
Roman Kelesidis
5183b3e7ab
[TEMP] Prevent issue with undefined lang variable (#694) 2023-05-17 17:22:28 +07:00
Roman Kelesidis
dc25a1c0e0
Fixed input types in some cases (#693) 2023-05-17 17:11:43 +07:00
Roman Kelesidis
2f2df932c0
Prevent issue with empty $disallowed_id removing (#692) 2023-05-17 16:48:13 +07:00
dependabot[bot]
10d6fe320f
Composer(deps): Bump guzzlehttp/guzzle from 7.5.1 to 7.6.1 (#691)
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.5.1 to 7.6.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/7.6/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.5.1...7.6.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-17 11:00:50 +07:00
dependabot[bot]
a49cec1ab0
Composer(deps): Bump bugsnag/bugsnag from 3.29.0 to 3.29.1 (#689)
Bumps [bugsnag/bugsnag](https://github.com/bugsnag/bugsnag-php) from 3.29.0 to 3.29.1.
- [Release notes](https://github.com/bugsnag/bugsnag-php/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-php/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-php/compare/v3.29.0...v3.29.1)

---
updated-dependencies:
- dependency-name: bugsnag/bugsnag
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-12 00:46:55 +07:00
Roman Kelesidis
3b06d23f71 Changed codename in sql dump 2023-05-09 12:54:12 +07:00
Roman Kelesidis
2312a57bad
Moved "Supported versions" to organization README 2023-05-09 12:40:06 +07:00
Roman Kelesidis
0fdaa2071f
Update README.md 2023-05-03 23:00:12 +07:00
dependabot[bot]
8a6f0cc2b2
Composer(deps-dev): Bump symfony/var-dumper from 5.4.22 to 5.4.23 (#688)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.22 to 5.4.23.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.22...v5.4.23)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-05-01 15:34:32 +07:00
Roman Kelesidis
23c130594a
Remove unused use statement (#687) 2023-04-30 21:21:45 +07:00
Roman Kelesidis
ca4bc04902
Minor fixes (#686) 2023-04-30 17:46:19 +07:00
Roman Kelesidis
4ff334bb45
WIP: Cumulative update (#685)
* Use lang variables instead of strings

* [Cache/Datastore] Use switch constructions

* Removed old-style debug from SQL wrapper

* Removed useless functions

* Use bb_date instead of native function
2023-04-18 23:08:57 +07:00
dependabot[bot]
cef8db9af7
Composer(deps): Bump guzzlehttp/guzzle from 7.5.0 to 7.5.1 (#684)
Bumps [guzzlehttp/guzzle](https://github.com/guzzle/guzzle) from 7.5.0 to 7.5.1.
- [Release notes](https://github.com/guzzle/guzzle/releases)
- [Changelog](https://github.com/guzzle/guzzle/blob/master/CHANGELOG.md)
- [Commits](https://github.com/guzzle/guzzle/compare/7.5.0...7.5.1)

---
updated-dependencies:
- dependency-name: guzzlehttp/guzzle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-18 18:34:39 +07:00
dependabot[bot]
815cd1a115
Composer(deps): Bump guzzlehttp/psr7 from 2.4.4 to 2.5.0 (#683)
Bumps [guzzlehttp/psr7](https://github.com/guzzle/psr7) from 2.4.4 to 2.5.0.
- [Release notes](https://github.com/guzzle/psr7/releases)
- [Changelog](https://github.com/guzzle/psr7/blob/2.5/CHANGELOG.md)
- [Commits](https://github.com/guzzle/psr7/compare/2.4.4...2.5.0)

---
updated-dependencies:
- dependency-name: guzzlehttp/psr7
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-18 18:34:18 +07:00
Roman Kelesidis
b20aa32b89
Minor fixes (#682) 2023-04-15 14:01:44 +07:00
Roman Kelesidis
bc6e8589a5
Fixed broken get gethostbyaddr (#681) 2023-04-15 13:05:13 +07:00
Roman Kelesidis
78d19700f2
Added theme exists check (#679) 2023-04-14 15:08:20 +07:00
Roman Kelesidis
a152b220ad
Updated sidebar links (#678) 2023-04-14 15:07:53 +07:00
Roman Kelesidis
efb0eb5b55 Update README.md 2023-04-13 19:51:06 +07:00
Roman Kelesidis
8d2d69301b
Update README.md 2023-04-13 19:34:45 +07:00
Roman Kelesidis
c4c19b921e
readme: add wip status 2023-04-13 15:06:21 +07:00
Roman Kelesidis
068577b7b3
readme: moreee emojiii 🍡🍡🍡 2023-04-13 14:59:36 +07:00
dependabot[bot]
4831000a0f
Composer(deps): Bump filp/whoops from 2.15.1 to 2.15.2 (#677)
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.15.1 to 2.15.2.
- [Release notes](https://github.com/filp/whoops/releases)
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.15.1...2.15.2)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-13 14:32:41 +07:00
Roman Kelesidis
7d57483086
Show correct info about password requirements (#676) 2023-04-11 10:17:35 +07:00
Roman Kelesidis
045297eb6d
Removed isAJAX check [So buggy] (#675) 2023-04-08 00:16:55 +07:00
Roman Kelesidis
9281ba84cf Minor fixes 2023-04-06 23:45:07 +07:00
Roman Kelesidis
5d955d1af6
Minor fixes (#674) 2023-04-05 23:40:56 +07:00
Roman Kelesidis
c57752e682
Prevent issue with broken deleting posts (#673) 2023-04-05 16:35:10 +07:00
dependabot[bot]
cac6ad2292
Composer(deps-dev): Bump symfony/var-dumper from 5.4.21 to 5.4.22 (#672)
Bumps [symfony/var-dumper](https://github.com/symfony/var-dumper) from 5.4.21 to 5.4.22.
- [Release notes](https://github.com/symfony/var-dumper/releases)
- [Changelog](https://github.com/symfony/var-dumper/blob/6.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/var-dumper/compare/v5.4.21...v5.4.22)

---
updated-dependencies:
- dependency-name: symfony/var-dumper
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 17:20:48 +07:00
dependabot[bot]
44eca019f6
Composer(deps): Bump symfony/mailer from 5.4.21 to 5.4.22 (#671)
Bumps [symfony/mailer](https://github.com/symfony/mailer) from 5.4.21 to 5.4.22.
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/6.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v5.4.21...v5.4.22)

---
updated-dependencies:
- dependency-name: symfony/mailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-03 17:20:19 +07:00
Roman Kelesidis
c32b3d5d6a
Update README.md 2023-04-03 01:28:45 +07:00
Roman Kelesidis
ada79743d7
Update README.md
* Added Crowdin badge
2023-04-03 01:25:22 +07:00
Roman Kelesidis
351bdeba67
Update README.md
* Added build badges
* Added contributors summaries
* Added sponsoring summaries
* Minor improvements
2023-04-02 23:02:45 +07:00
Roman Kelesidis
808d60d9a6 Update README.md 2023-04-02 17:03:26 +07:00
Roman Kelesidis
76b1936ded readme: added supported version 2023-04-02 16:59:04 +07:00
Roman Kelesidis
9b46d364b0
Fixed broken predicting birthday year (#668) 2023-04-02 16:23:26 +07:00
Roman Kelesidis
170363be82
Minor fixes (#669)
* Minor fixes

* Moved ssl_type to smtp section
2023-04-02 15:19:19 +07:00
Roman Kelesidis
d6b94ac91f
Fixed empty $auth_key after gen passkey (#670) 2023-04-02 15:18:05 +07:00
Roman Kelesidis
0fd4b733fc
Minor fixes (#667) 2023-03-30 01:05:50 +07:00
Roman Kelesidis
f62d25d33b
Fixed broken flood control (#666) 2023-03-29 00:32:44 +07:00
Roman Kelesidis
e99de931a7
New implementation of IPHelper (#665) 2023-03-29 00:12:48 +07:00
Roman Kelesidis
f4bf7111bc
Removed useless copy actions (#661) 2023-03-28 17:55:22 +07:00
Yury Pikhtarev
cae6ce72a9
Create .github/FUNDING.yml 2023-03-28 13:10:57 +03:00
Roman Kelesidis
b20e7489d7
Reworked info.php (#664) 2023-03-28 12:28:47 +07:00
Roman Kelesidis
642e49e77d
Minor fixes (#663) 2023-03-28 12:17:42 +07:00
Roman Kelesidis
6e666695e8
Minor fixes (#662) 2023-03-28 10:25:03 +07:00
Roman Kelesidis
048ce1183e
Fixed broken pin first post (#660) 2023-03-27 22:51:07 +07:00
Roman Kelesidis
d806d12443
Minor fixes (#659) 2023-03-27 22:41:05 +07:00
Roman Kelesidis
95fe065a3e Revert "Updated treeview up to 1.4.2" 2023-03-27 16:56:56 +07:00
Roman Kelesidis
274939962c Revert "Updated quicksearch up to Feb 21, 2018 commit"
This reverts commit 583727acc1.
2023-03-27 16:53:02 +07:00
Roman Kelesidis
32fadb556e Revert "Updated scrollTo up to 1.4.6"
This reverts commit 91bc09f40b.
2023-03-27 16:51:33 +07:00
Roman Kelesidis
5d9955cd78
Minor fixes (#654)
* Minor fixes

* Removed WTF statement

* Fixed broken birthday applying in profile.php

* Removed double-quotes
2023-03-27 10:10:42 +03:00
Roman Kelesidis
8685ba598d
Minor edits to the localization (#655) 2023-03-27 10:09:46 +03:00
Roman Kelesidis
bea63b6f47
Refactored CronHelper class (#657) 2023-03-27 10:07:38 +03:00
Roman Kelesidis
58cc723e4b
Refactored Sessions class (#656) 2023-03-27 10:06:50 +03:00
Roman Kelesidis
4d496ba645
Added missing default statement in switch case (#653) 2023-03-26 16:00:38 +07:00
Roman Kelesidis
49ac3503c1
Added SQLite3 installed check [Cache/Datastore] (#652) 2023-03-26 14:45:50 +07:00
Roman Kelesidis
918e8d8485
Refactored Ajax class (#650)
* Refactored Ajax class

* Update Ajax.php
2023-03-22 07:22:21 +07:00
Roman Kelesidis
bcf9465dc0
Refactored Dev class (#649) 2023-03-20 23:28:10 +07:00
Roman Kelesidis
5f0649073f
Refactored Sitemap class (#648) 2023-03-20 23:27:28 +07:00
Roman Kelesidis
c9d0a06fbc
Removed useless email empty check in register.php (#647) 2023-03-20 18:36:05 +07:00
Roman Kelesidis
4d812bb1fc
Added system check requirements and more (#645)
* Added system check requirements and more

* Update IsHelper.php
2023-03-20 13:09:51 +03:00
Roman Kelesidis
8cbe09027a
Refactored Validate class (#646)
* Refactored Validate class

* Fixed undefined variables

* Moved check for empty
2023-03-20 13:08:34 +03:00
Roman Kelesidis
274550cec4
Minor adjustments (#644) 2023-03-20 15:29:06 +07:00
Roman Kelesidis
b0a0ec1dd4
Added Http class implementation (#632)
* Added Http class implementation

* Applied requested changes
2023-03-20 10:58:14 +03:00
Yury Pikhtarev
e5e325df85
Fixing the .env load (#643) 2023-03-20 10:15:03 +03:00
Roman Kelesidis
ef4e1aa18f
Added IPHelper implementation (#631) 2023-03-20 09:52:28 +03:00
Roman Kelesidis
2ac13bbc50
Fixed undefined value() functions (#640)
* Fixed undefined value() functions

* Apply fixes from StyleCI (#639)

Co-authored-by: StyleCI Bot <bot@styleci.io>

* PHP 7.4 backward

* Apply fixes from StyleCI (#642)

Co-authored-by: StyleCI Bot <bot@styleci.io>

---------

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-03-20 09:51:31 +03:00
Roman Kelesidis
12f09f7995
Various fixes after composer deps update (#638) 2023-03-20 11:56:32 +07:00
Roman Kelesidis
96fe6cc5b7
Added missing comments Emailer (#637) 2023-03-20 11:46:36 +07:00
Yury Pikhtarev
ced24029fb
Apply fixes from StyleCI (#635)
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-03-20 11:43:00 +07:00
Yury Pikhtarev
f241383ed3
Apply fixes from StyleCI (#634)
* Added missing comments into Env class

* Apply fixes from StyleCI

---------

Co-authored-by: Roman Kelesidis <roman25052006.kelesh@Gmail.com>
Co-authored-by: StyleCI Bot <bot@styleci.io>
2023-03-20 11:42:38 +07:00
Roman Kelesidis
068f58847f
Added missing comments into Env class (#633) 2023-03-20 11:42:20 +07:00
Yury Pikhtarev
faf2306862
Switching to Symfony Mailer (#629)
* Switching to Symfony Mailer

Additionally, support for all versions of PHP below 7.4 has been withdrawn

* Language variable for reply to

* Update to PHP 7.4
2023-03-20 01:26:26 +07:00
Roman Kelesidis
9689efd6f4
Show default avatar after delete, instead of hide (#628) 2023-03-20 00:02:54 +07:00
Roman Kelesidis
edc57bfd2a
Added password method in validator (#625)
Метод который занимается валидацией пароля, в будущем будет дополнен ещё несколькими проверками при необходимости (наличие цифр, букв, спец-символом)
2023-03-18 18:08:01 +03:00
Roman Kelesidis
aa9d02d41f
Added ability to select email type in mass email (#624)
* Added ability to select email type in mass email

* Added text / html type selector.

* Return back constants
2023-03-18 18:07:20 +03:00
Roman Kelesidis
94c63257f3 Release 2.3.1 💜 2023-03-18 09:45:01 +07:00
Yury Pikhtarev
84a6bea4f8
New Crowdin updates (#616)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)

* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-03-17 23:19:39 +07:00
Roman Kelesidis
41600142b4
Globally improved log system (#623) 2023-03-17 22:39:35 +07:00
Roman Kelesidis
97918d0d83
Fixed getting online info from cache (#622)
Prevent - "Trying to access array offset on value of type bool" error on index page

Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
2023-03-17 18:02:46 +03:00
Yury Pikhtarev
7019d31353
Miscellaneous static analysis improvements for php 7.1 (#620)
* Miscellaneous static analysis improvements for php 7.1

* Update changes.txt
2023-03-17 18:02:00 +03:00
Roman Kelesidis
4e8e181d8c
Added passkey check in get_bt_userdata (#621) 2023-03-17 21:50:29 +07:00
Roman Kelesidis
5931fee4da
Added ability to hide ajax loading alert (#617)
Позволяет сделать процесс выполнения ajax скрипта не таким явным. Т. е скрывает алерт в углу.

Добавляется как опциональный параметр для ajax.exec.

Будет полезно в некоторых кейсах, где запрос выполняется с неким интервалом.

P.S - Скрытие не работает в случае ошибки (Оно и понятно)
2023-03-17 15:26:57 +03:00
Roman Kelesidis
0e3a2a0e8a
Fixed broken avatar ajax action for users (#618) 2023-03-17 15:26:41 +03:00
Yury Pikhtarev
e4b6a91909
New cron initialization and minor edits (#619)
* New cron initialization and minor edits

Updated the mechanism to check if cron needs to run and made minor improvements to the first run

* Adding a warning in the control panel
2023-03-17 15:26:07 +03:00
Yury Pikhtarev
dd853151c0
Minor edits to the localization (#615) 2023-03-17 11:47:38 +03:00
Roman Kelesidis
4fc04dbe59
Redesigned AJAX system styles (#614)
Co-authored-by: Yury Pikhtarev <exileum@icloud.com>
2023-03-17 14:46:27 +07:00
Roman Kelesidis
b7f0a7bbca
Added PM counter in title (#613) 2023-03-17 10:43:24 +03:00
Roman Kelesidis
7bbeff0141
Small refactoring for avatar ajax (#612)
* Small refactoring for avatar.php [AJAX]

* Small fixes
2023-03-17 13:15:10 +07:00
Roman Kelesidis
d68c37eacd
Small refactoring for avatar.php [AJAX] (#611) 2023-03-17 13:05:49 +07:00
Roman Kelesidis
823b947ce6
Fixed issue with generate_user_info (#610) 2023-03-17 12:48:15 +07:00
Roman Kelesidis
9b5282d0c7
Removed length limits for search_id & autologin_id (#609) 2023-03-17 12:45:06 +07:00
Roman Kelesidis
1b2e40c512
Minor adjustments (#607)
* Minor adjustments

* Make generate_user_info globaly.
* Added NOSELECT if field is empty

* Applied some fixes

* Applied requested changes
2023-03-17 12:17:48 +07:00
Roman Kelesidis
a5dcafa865
Fixed undefined $subject in register.php (#608)
Переменная $subject нигде не объявлена, это приводит к ошибке при редактировании пользователя с не активированным аккаунтом.
2023-03-17 12:15:21 +07:00
Roman Kelesidis
14b5db1413
Use translations instead of untranslatable strings (#606) 2023-03-16 23:03:56 +07:00
Yury Pikhtarev
5ab7de5bf9
New Crowdin updates (#605)
* New translations main.php (Romanian)

* New translations main.php (French)

* New translations main.php (Spanish)

* New translations main.php (Afrikaans)

* New translations main.php (Arabic)

* New translations main.php (Belarusian)

* New translations main.php (Catalan)

* New translations main.php (Czech)

* New translations main.php (Danish)

* New translations main.php (German)

* New translations main.php (Greek)

* New translations main.php (Finnish)

* New translations main.php (Hebrew)

* New translations main.php (Hungarian)

* New translations main.php (Italian)

* New translations main.php (Japanese)

* New translations main.php (Korean)

* New translations main.php (Dutch)

* New translations main.php (Norwegian)

* New translations main.php (Polish)

* New translations main.php (Russian)

* New translations main.php (Serbian (Cyrillic))

* New translations main.php (Swedish)

* New translations main.php (Turkish)

* New translations main.php (Ukrainian)

* New translations main.php (Chinese Traditional)

* New translations main.php (English)

* New translations main.php (Vietnamese)

* New translations main.php (Portuguese, Brazilian)

* New translations main.php (Kazakh)

* New translations main.php (Bulgarian)

* New translations main.php (Armenian)

* New translations main.php (Georgian)

* New translations main.php (Lithuanian)

* New translations main.php (Slovak)

* New translations main.php (Slovenian)

* New translations main.php (Albanian)

* New translations main.php (Indonesian)

* New translations main.php (Thai)

* New translations main.php (Croatian)

* New translations main.php (Estonian)

* New translations main.php (Latvian)

* New translations main.php (Azerbaijani)

* New translations main.php (Hindi)

* New translations main.php (Bosnian)

* New translations main.php (Uzbek)

* New translations main.php (Tajik)
2023-03-16 18:44:25 +07:00
Roman Kelesidis
39cd01ca7f
Use APP_NAME instread lang variables (#604) 2023-03-16 15:40:17 +07:00
Roman Kelesidis
d7e875f8bd
Merge pull request #577 from torrentpier/l10n_master
New Crowdin updates
2023-03-16 15:12:08 +07:00
Yury Pikhtarev
2e88383eb0
Merge branch 'master' into l10n_master 2023-03-16 15:08:03 +07:00
Roman Kelesidis
7dddf096fd
Merge pull request #602 from torrentpier/revert-599-remove-env
Revert "Removed ENV"
2023-03-16 14:39:59 +07:00
Roman Kelesidis
f8722a8b9a
Revert "Removed ENV" 2023-03-16 14:33:37 +07:00
StyleCI Bot
1f75f4e997 Apply fixes from StyleCI 2023-03-16 14:27:09 +07:00
Roman Kelesidis
7dd699ddf9
Merge pull request #599 from torrentpier/remove-env
Removed ENV
2023-03-16 14:25:08 +07:00
Roman Kelesidis
25bc51eebb Removed ENV 2023-03-16 14:23:32 +07:00
Roman Kelesidis
754b7c5291
Merge pull request #596 from torrentpier/fixed-typo-filecache
Fixed typo in src/Cache/File.php
2023-03-15 23:39:37 +07:00
Roman Kelesidis
2d86843f96 Fixed typo in src/Cache/File.php
cache->set('$name') -> cache->get('$name').
2023-03-15 23:39:14 +07:00
Roman Kelesidis
b80a9ead17
Merge pull request #593 from torrentpier/minor-adjustments
Minor adjustments #592
2023-03-15 15:32:35 +07:00
Roman Kelesidis
7585dcbcea Minor adjustments #592
* Minor adjustments for future.
2023-03-15 15:31:39 +07:00
Roman Kelesidis
ff1a1f6bd5
Merge pull request #590 from torrentpier/make-actkey-configurable
Make activate key lenght configurable
2023-03-14 12:53:00 +07:00
Roman Kelesidis
e1fb41e558 Make activate key lenght configurable 2023-03-14 12:49:49 +07:00
Roman Kelesidis
0f08b4ea41
changelog: fixed incorrect PR number 2023-03-11 08:53:04 +07:00
Roman Kelesidis
51b4be6934 Release 2.3.1-rc1 2023-03-10 18:57:32 +07:00
Yury Pikhtarev
09ffd0976f New translations main.php (Ukrainian) 2023-03-09 22:34:38 +03:00
Yury Pikhtarev
9359a59b42
Merge branch 'master' into l10n_master 2023-03-09 22:26:07 +03:00
Yury Pikhtarev
38deca492f New translations user_agreement.html (Tajik) 2023-03-09 21:58:04 +03:00
Yury Pikhtarev
69796b34a6 New translations user_agreement.html (Uzbek) 2023-03-09 21:58:01 +03:00
Yury Pikhtarev
e3981d3251 New translations copyright_holders.html (Tajik) 2023-03-09 21:57:59 +03:00
Yury Pikhtarev
b5fca8f219 New translations user_welcome_inactive.html (Tajik) 2023-03-09 21:57:57 +03:00
Yury Pikhtarev
1cf56b5496 New translations user_welcome.html (Tajik) 2023-03-09 21:57:56 +03:00
Yury Pikhtarev
5853532bb2 New translations user_activate_passwd.html (Tajik) 2023-03-09 21:57:56 +03:00
Yury Pikhtarev
43d44ee502 New translations user_activate.html (Tajik) 2023-03-09 21:57:55 +03:00
Yury Pikhtarev
ea7978c6b6 New translations topic_notify.html (Tajik) 2023-03-09 21:57:54 +03:00
Yury Pikhtarev
e1e94a5eff New translations profile_send_email.html (Tajik) 2023-03-09 21:57:53 +03:00
Yury Pikhtarev
f303657e47 New translations privmsg_notify.html (Tajik) 2023-03-09 21:57:52 +03:00
Yury Pikhtarev
3638dc299e New translations copyright_holders.html (Uzbek) 2023-03-09 21:57:51 +03:00
Yury Pikhtarev
dc528db8bc New translations user_welcome_inactive.html (Uzbek) 2023-03-09 21:57:49 +03:00
Yury Pikhtarev
b121672823 New translations user_welcome.html (Uzbek) 2023-03-09 21:57:48 +03:00
Yury Pikhtarev
aed9d71c99 New translations user_activate_passwd.html (Uzbek) 2023-03-09 21:57:48 +03:00
Yury Pikhtarev
21e6669400 New translations user_activate.html (Uzbek) 2023-03-09 21:57:47 +03:00
Yury Pikhtarev
a8517876c9 New translations group_request.html (Tajik) 2023-03-09 21:57:46 +03:00
Yury Pikhtarev
8b12c90d35 New translations group_approved.html (Tajik) 2023-03-09 21:57:45 +03:00
Yury Pikhtarev
07b0464e72 New translations group_added.html (Tajik) 2023-03-09 21:57:44 +03:00
Yury Pikhtarev
7978f72934 New translations admin_send_email.html (Tajik) 2023-03-09 21:57:42 +03:00
Yury Pikhtarev
51d191c583 New translations main.php (Tajik) 2023-03-09 21:57:41 +03:00
Yury Pikhtarev
3b70e15654 New translations user_agreement.html (Bosnian) 2023-03-09 21:57:31 +03:00
Yury Pikhtarev
c5f8d97a99 New translations topic_notify.html (Uzbek) 2023-03-09 21:57:29 +03:00
Yury Pikhtarev
9aab48a811 New translations profile_send_email.html (Uzbek) 2023-03-09 21:57:28 +03:00
Yury Pikhtarev
d38d1f4e65 New translations privmsg_notify.html (Uzbek) 2023-03-09 21:57:27 +03:00
Yury Pikhtarev
46ffe6e6df New translations copyright_holders.html (Bosnian) 2023-03-09 21:57:26 +03:00
Yury Pikhtarev
d9f0f763d3 New translations user_welcome_inactive.html (Bosnian) 2023-03-09 21:57:25 +03:00
Yury Pikhtarev
379d532045 New translations user_welcome.html (Bosnian) 2023-03-09 21:57:24 +03:00
Yury Pikhtarev
3ec7d05cd9 New translations user_activate_passwd.html (Bosnian) 2023-03-09 21:57:23 +03:00
Yury Pikhtarev
edbf34e864 New translations user_activate.html (Bosnian) 2023-03-09 21:57:22 +03:00
Yury Pikhtarev
3c7305ccf2 New translations topic_notify.html (Bosnian) 2023-03-09 21:57:21 +03:00
Yury Pikhtarev
e83180dab8 New translations profile_send_email.html (Bosnian) 2023-03-09 21:57:20 +03:00
Yury Pikhtarev
11eaf7d73b New translations privmsg_notify.html (Bosnian) 2023-03-09 21:57:19 +03:00
Yury Pikhtarev
c5c4795bf3 New translations group_request.html (Uzbek) 2023-03-09 21:57:18 +03:00
Yury Pikhtarev
f517e7a528 New translations group_approved.html (Uzbek) 2023-03-09 21:57:18 +03:00
Yury Pikhtarev
337769abb8 New translations group_added.html (Uzbek) 2023-03-09 21:57:17 +03:00
Yury Pikhtarev
61e1f6b308 New translations admin_send_email.html (Uzbek) 2023-03-09 21:57:15 +03:00
Yury Pikhtarev
7e0db3a1c3 New translations main.php (Uzbek) 2023-03-09 21:57:14 +03:00
Yury Pikhtarev
45246defda New translations group_request.html (Bosnian) 2023-03-09 21:57:12 +03:00
Yury Pikhtarev
f24e96a25a New translations group_approved.html (Bosnian) 2023-03-09 21:57:11 +03:00
Yury Pikhtarev
df736e8ec1 New translations group_added.html (Bosnian) 2023-03-09 21:57:10 +03:00
Yury Pikhtarev
666ed3e21c New translations admin_send_email.html (Bosnian) 2023-03-09 21:57:09 +03:00
Yury Pikhtarev
80d41529eb New translations main.php (Bosnian) 2023-03-09 21:57:08 +03:00
Yury Pikhtarev
925aa1871d New translations user_agreement.html (Hindi) 2023-03-09 21:56:56 +03:00
Yury Pikhtarev
758de6ca3a New translations copyright_holders.html (Hindi) 2023-03-09 21:56:51 +03:00
Yury Pikhtarev
806a41e87b New translations user_welcome_inactive.html (Hindi) 2023-03-09 21:56:50 +03:00
Yury Pikhtarev
392d96591e New translations user_welcome.html (Hindi) 2023-03-09 21:56:49 +03:00
Yury Pikhtarev
c88cc59df4 New translations topic_notify.html (Japanese) 2023-03-09 21:49:55 +03:00
Yury Pikhtarev
896dafc31d New translations topic_notify.html (Hungarian) 2023-03-09 21:49:54 +03:00
Yury Pikhtarev
c4acf299f3 New translations topic_notify.html (Hebrew) 2023-03-09 21:49:53 +03:00
Yury Pikhtarev
612843c2ae New translations topic_notify.html (Catalan) 2023-03-09 21:49:50 +03:00
Yury Pikhtarev
fdedfa4d0f New translations topic_notify.html (Belarusian) 2023-03-09 21:49:49 +03:00
Yury Pikhtarev
3b8d79a8f6 New translations topic_notify.html (Afrikaans) 2023-03-09 21:49:48 +03:00
Yury Pikhtarev
7247d647cd New translations profile_send_email.html (Hungarian) 2023-03-09 21:49:28 +03:00
Yury Pikhtarev
79b744ec36 New translations profile_send_email.html (Hebrew) 2023-03-09 21:49:27 +03:00
Yury Pikhtarev
470ebeba06 New translations profile_send_email.html (Catalan) 2023-03-09 21:49:23 +03:00
Yury Pikhtarev
373189ff53 New translations profile_send_email.html (Belarusian) 2023-03-09 21:49:22 +03:00
Yury Pikhtarev
5350de65a1 New translations profile_send_email.html (Afrikaans) 2023-03-09 21:49:21 +03:00
Yury Pikhtarev
694ff3cac5 New translations privmsg_notify.html (Kazakh) 2023-03-09 21:49:19 +03:00
Yury Pikhtarev
ab5de8ee61 New translations privmsg_notify.html (Vietnamese) 2023-03-09 21:49:17 +03:00
Yury Pikhtarev
772fe3f5ef New translations privmsg_notify.html (Serbian (Cyrillic)) 2023-03-09 21:49:15 +03:00
Yury Pikhtarev
87f95a0efb New translations privmsg_notify.html (Hungarian) 2023-03-09 21:49:11 +03:00
Yury Pikhtarev
4d25df3108 New translations privmsg_notify.html (Hebrew) 2023-03-09 21:49:10 +03:00
Yury Pikhtarev
a75dbe1136 New translations privmsg_notify.html (Catalan) 2023-03-09 21:49:06 +03:00
Yury Pikhtarev
7077e8fa2c New translations privmsg_notify.html (Belarusian) 2023-03-09 21:49:05 +03:00
Yury Pikhtarev
c486c4fbc3 New translations privmsg_notify.html (Afrikaans) 2023-03-09 21:49:04 +03:00
Yury Pikhtarev
a5e71ff865 New translations group_request.html (Kazakh) 2023-03-09 21:49:01 +03:00
Yury Pikhtarev
044ac8c010 New translations group_request.html (Vietnamese) 2023-03-09 21:49:00 +03:00
Yury Pikhtarev
29a07fadc7 New translations group_request.html (Serbian (Cyrillic)) 2023-03-09 21:48:57 +03:00
Yury Pikhtarev
effdd24f65 New translations group_request.html (Hungarian) 2023-03-09 21:48:54 +03:00
Yury Pikhtarev
59c3e3a977 New translations group_request.html (Hebrew) 2023-03-09 21:48:53 +03:00
Yury Pikhtarev
b2d4d59bc9 New translations group_request.html (Catalan) 2023-03-09 21:48:49 +03:00
Yury Pikhtarev
d82690c7b7 New translations group_request.html (Belarusian) 2023-03-09 21:48:48 +03:00
Yury Pikhtarev
85d0a2e23e New translations group_request.html (Afrikaans) 2023-03-09 21:48:46 +03:00
Yury Pikhtarev
eaa7c1c3e4 New translations group_approved.html (Kazakh) 2023-03-09 21:48:43 +03:00
Yury Pikhtarev
7053ccf3b8 New translations group_approved.html (Vietnamese) 2023-03-09 21:48:42 +03:00
Yury Pikhtarev
be7e13a797 New translations group_approved.html (Serbian (Cyrillic)) 2023-03-09 21:48:39 +03:00
Yury Pikhtarev
6c90443905 New translations group_approved.html (Hungarian) 2023-03-09 21:48:35 +03:00
Yury Pikhtarev
18bc78192c New translations group_approved.html (Hebrew) 2023-03-09 21:48:34 +03:00
Yury Pikhtarev
4a589d72b6 New translations group_approved.html (Catalan) 2023-03-09 21:48:31 +03:00
Yury Pikhtarev
f400de7fcb New translations group_approved.html (Belarusian) 2023-03-09 21:48:30 +03:00
Yury Pikhtarev
852588d9c9 New translations group_approved.html (Afrikaans) 2023-03-09 21:48:29 +03:00
Yury Pikhtarev
d60757eea2 New translations group_added.html (Kazakh) 2023-03-09 21:48:27 +03:00
Yury Pikhtarev
1ab5f81354 New translations group_added.html (Vietnamese) 2023-03-09 21:48:25 +03:00
Yury Pikhtarev
7f9397b175 New translations group_added.html (Serbian (Cyrillic)) 2023-03-09 21:48:22 +03:00
Yury Pikhtarev
ba5ec49984 New translations group_added.html (Hungarian) 2023-03-09 21:48:19 +03:00
Yury Pikhtarev
910f947c0a New translations group_added.html (Hebrew) 2023-03-09 21:48:18 +03:00
Yury Pikhtarev
2c9c8be963 New translations group_added.html (Catalan) 2023-03-09 21:48:14 +03:00
Yury Pikhtarev
d4b1533358 New translations group_added.html (Belarusian) 2023-03-09 21:48:13 +03:00
Yury Pikhtarev
4e5183883a New translations group_added.html (Afrikaans) 2023-03-09 21:48:12 +03:00
Yury Pikhtarev
bc0ab914c1 New translations admin_send_email.html (Kazakh) 2023-03-09 21:48:01 +03:00
Yury Pikhtarev
eac513d820 New translations admin_send_email.html (Vietnamese) 2023-03-09 21:48:00 +03:00
Yury Pikhtarev
ea68a25f66 New translations admin_send_email.html (Chinese Traditional) 2023-03-09 21:47:58 +03:00
Yury Pikhtarev
e709783896 New translations admin_send_email.html (Serbian (Cyrillic)) 2023-03-09 21:47:56 +03:00
dependabot[bot]
1bf85de2f3 Composer(deps): Bump filp/whoops from 2.14.6 to 2.15.1
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.14.6 to 2.15.1.
- [Release notes](https://github.com/filp/whoops/releases)
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.14.6...2.15.1)

---
updated-dependencies:
- dependency-name: filp/whoops
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-09 21:35:31 +03:00
Yury Pikhtarev
37111bda50
Create .github/workflows/phpmd.yml
Add PHP equivalent of the well known Java tool PMD.
2023-03-09 21:32:06 +03:00
Yury Pikhtarev
c4c25dfd08 Create .github/dependabot.yml
Add Dependabot automatic composer packages updates
2023-03-09 21:25:40 +03:00
Yury Pikhtarev
3b8c5b9e66 New translations user_activate_passwd.html (Hindi) 2023-03-09 20:52:56 +03:00
Yury Pikhtarev
f132448d02 New translations user_activate.html (Hindi) 2023-03-09 20:52:55 +03:00
Yury Pikhtarev
8b29ac516d New translations topic_notify.html (Hindi) 2023-03-09 20:52:54 +03:00
Yury Pikhtarev
bbe7fa1d2b New translations profile_send_email.html (Hindi) 2023-03-09 20:52:53 +03:00
Yury Pikhtarev
7ae4d70270 New translations privmsg_notify.html (Hindi) 2023-03-09 20:52:52 +03:00
Yury Pikhtarev
afc5e40d9d New translations group_request.html (Hindi) 2023-03-09 20:52:51 +03:00
Yury Pikhtarev
dd7eaaf2b0 New translations group_approved.html (Hindi) 2023-03-09 20:52:50 +03:00
Yury Pikhtarev
e366563e33 New translations group_added.html (Hindi) 2023-03-09 20:52:50 +03:00
Yury Pikhtarev
a31fb1dfa5 New translations admin_send_email.html (Hindi) 2023-03-09 20:52:48 +03:00
Yury Pikhtarev
1d28252f3b New translations main.php (Hindi) 2023-03-09 20:52:47 +03:00
Yury Pikhtarev
984e459e32 New translations user_agreement.html (Azerbaijani) 2023-03-09 20:52:39 +03:00
Yury Pikhtarev
b9fd212536 New translations copyright_holders.html (Azerbaijani) 2023-03-09 20:52:37 +03:00
Yury Pikhtarev
7f5562e52d New translations user_welcome_inactive.html (Azerbaijani) 2023-03-09 20:52:35 +03:00
Yury Pikhtarev
19e5c2d69a New translations user_welcome.html (Azerbaijani) 2023-03-09 20:52:34 +03:00
Yury Pikhtarev
a1a5000a94 New translations user_activate_passwd.html (Azerbaijani) 2023-03-09 20:52:34 +03:00
Yury Pikhtarev
cd0ece42f8 New translations user_activate.html (Azerbaijani) 2023-03-09 20:52:33 +03:00
Yury Pikhtarev
b54553c0a9 New translations topic_notify.html (Azerbaijani) 2023-03-09 20:52:32 +03:00
Yury Pikhtarev
6b4ea35393 New translations profile_send_email.html (Azerbaijani) 2023-03-09 20:52:31 +03:00
Yury Pikhtarev
41cadf91fa New translations privmsg_notify.html (Azerbaijani) 2023-03-09 20:52:30 +03:00
Yury Pikhtarev
fcc08fa51e New translations group_request.html (Azerbaijani) 2023-03-09 20:52:29 +03:00
Yury Pikhtarev
ed5eccbc5d New translations group_approved.html (Azerbaijani) 2023-03-09 20:52:28 +03:00
Yury Pikhtarev
89e84e457e New translations group_added.html (Azerbaijani) 2023-03-09 20:52:28 +03:00
Yury Pikhtarev
4c3e585b2c New translations admin_send_email.html (Azerbaijani) 2023-03-09 20:52:26 +03:00
Yury Pikhtarev
f950089ed5 New translations main.php (Azerbaijani) 2023-03-09 20:52:25 +03:00
Yury Pikhtarev
c15cda3cd0 New translations user_agreement.html (Latvian) 2023-03-09 20:52:16 +03:00
Yury Pikhtarev
65b73f2a94 New translations copyright_holders.html (Latvian) 2023-03-09 20:52:14 +03:00
Yury Pikhtarev
f06263f333 New translations user_welcome_inactive.html (Latvian) 2023-03-09 20:52:13 +03:00
Yury Pikhtarev
080ace062c New translations user_welcome.html (Latvian) 2023-03-09 20:52:12 +03:00
Yury Pikhtarev
4d6dbc7dc0 New translations user_activate_passwd.html (Latvian) 2023-03-09 20:52:11 +03:00
Yury Pikhtarev
3fd1edac14 New translations user_activate.html (Latvian) 2023-03-09 20:52:10 +03:00
Yury Pikhtarev
55f83b123d New translations topic_notify.html (Latvian) 2023-03-09 20:52:09 +03:00
Yury Pikhtarev
c077f63958 New translations profile_send_email.html (Latvian) 2023-03-09 20:52:08 +03:00
Yury Pikhtarev
b3a2830cb5 New translations privmsg_notify.html (Latvian) 2023-03-09 20:52:07 +03:00
Yury Pikhtarev
8f68bb297a New translations group_request.html (Latvian) 2023-03-09 20:52:06 +03:00
Yury Pikhtarev
0921f04831 New translations group_approved.html (Latvian) 2023-03-09 20:52:05 +03:00
Yury Pikhtarev
b1e647f58b New translations group_added.html (Latvian) 2023-03-09 20:52:04 +03:00
Yury Pikhtarev
acd4ddcc9b New translations admin_send_email.html (Latvian) 2023-03-09 20:52:03 +03:00
Yury Pikhtarev
a64f28cc61 New translations main.php (Latvian) 2023-03-09 20:52:02 +03:00
Yury Pikhtarev
1e96dd45d2 New translations user_agreement.html (Estonian) 2023-03-09 20:51:54 +03:00
Yury Pikhtarev
3cbedc9457 New translations copyright_holders.html (Estonian) 2023-03-09 20:51:51 +03:00
Yury Pikhtarev
1c7dc66258 New translations user_welcome_inactive.html (Estonian) 2023-03-09 20:51:50 +03:00
Yury Pikhtarev
7ec4e8ba4a New translations user_welcome.html (Estonian) 2023-03-09 20:51:49 +03:00
Yury Pikhtarev
8ebde76c43 New translations user_activate_passwd.html (Estonian) 2023-03-09 20:51:48 +03:00
Yury Pikhtarev
97b9a25ee1 New translations user_activate.html (Estonian) 2023-03-09 20:51:47 +03:00
Yury Pikhtarev
708a323044 New translations topic_notify.html (Estonian) 2023-03-09 20:51:46 +03:00
Yury Pikhtarev
324e65b63a New translations profile_send_email.html (Estonian) 2023-03-09 20:51:45 +03:00
Yury Pikhtarev
6191a2db9e New translations privmsg_notify.html (Estonian) 2023-03-09 20:51:44 +03:00
Yury Pikhtarev
6fa6594041 New translations group_request.html (Estonian) 2023-03-09 20:51:44 +03:00
Yury Pikhtarev
6bace5034e New translations group_approved.html (Estonian) 2023-03-09 20:51:43 +03:00
Yury Pikhtarev
583d7aa4d0 New translations group_added.html (Estonian) 2023-03-09 20:51:42 +03:00
Yury Pikhtarev
9426c24a75 New translations admin_send_email.html (Estonian) 2023-03-09 20:51:40 +03:00
Yury Pikhtarev
55fa9c538c New translations main.php (Estonian) 2023-03-09 20:51:40 +03:00
Yury Pikhtarev
e94537bd16 New translations user_agreement.html (Croatian) 2023-03-09 20:51:31 +03:00
Yury Pikhtarev
6eed04be91 New translations copyright_holders.html (Croatian) 2023-03-09 20:51:28 +03:00
Yury Pikhtarev
87eff35fe8 New translations user_welcome_inactive.html (Croatian) 2023-03-09 20:51:27 +03:00
Yury Pikhtarev
17d90cc341 New translations user_welcome.html (Croatian) 2023-03-09 20:51:26 +03:00
Yury Pikhtarev
adb2e4e67e New translations user_activate_passwd.html (Croatian) 2023-03-09 20:51:25 +03:00
Yury Pikhtarev
45c0b3b213 New translations user_activate.html (Croatian) 2023-03-09 20:51:24 +03:00
Yury Pikhtarev
d5181e2cef New translations topic_notify.html (Croatian) 2023-03-09 20:51:23 +03:00
Yury Pikhtarev
8499e79306 New translations profile_send_email.html (Croatian) 2023-03-09 20:51:22 +03:00
Yury Pikhtarev
121fd350d4 New translations privmsg_notify.html (Croatian) 2023-03-09 20:51:22 +03:00
Yury Pikhtarev
21d1f2ef7b New translations group_request.html (Croatian) 2023-03-09 20:51:21 +03:00
Yury Pikhtarev
8f689b4ce8 New translations group_approved.html (Croatian) 2023-03-09 20:51:20 +03:00
Yury Pikhtarev
95fbf928e8 New translations group_added.html (Croatian) 2023-03-09 20:51:19 +03:00
Yury Pikhtarev
a894c824d9 New translations admin_send_email.html (Croatian) 2023-03-09 20:51:18 +03:00
Yury Pikhtarev
95c52efc31 New translations main.php (Croatian) 2023-03-09 20:51:17 +03:00
Yury Pikhtarev
8f5155e29a New translations user_agreement.html (Thai) 2023-03-09 20:51:08 +03:00
Yury Pikhtarev
d979ed3e95 New translations sidebar1.html (Thai) 2023-03-09 20:51:06 +03:00
Yury Pikhtarev
a4dd86b67e New translations copyright_holders.html (Thai) 2023-03-09 20:51:04 +03:00
Yury Pikhtarev
c3b2a90026 New translations advert.html (Thai) 2023-03-09 20:51:04 +03:00
Yury Pikhtarev
78b83dd895 New translations user_welcome_inactive.html (Thai) 2023-03-09 20:51:03 +03:00
Yury Pikhtarev
1f63f3a10d New translations user_welcome.html (Thai) 2023-03-09 20:51:00 +03:00
Yury Pikhtarev
167e5ec3bf New translations user_activate_passwd.html (Thai) 2023-03-09 20:50:59 +03:00
Yury Pikhtarev
4f2c287516 New translations user_activate.html (Thai) 2023-03-09 20:50:59 +03:00
Yury Pikhtarev
4a59ff3c05 New translations topic_notify.html (Thai) 2023-03-09 20:50:58 +03:00
Yury Pikhtarev
ef22f2c126 New translations profile_send_email.html (Thai) 2023-03-09 20:50:57 +03:00
Yury Pikhtarev
cb149f2195 New translations privmsg_notify.html (Thai) 2023-03-09 20:50:56 +03:00
Yury Pikhtarev
95ceb219c8 New translations group_request.html (Thai) 2023-03-09 20:50:55 +03:00
Yury Pikhtarev
0617ee7918 New translations group_approved.html (Thai) 2023-03-09 20:50:54 +03:00
Yury Pikhtarev
df4a60a867 New translations group_added.html (Thai) 2023-03-09 20:50:53 +03:00
Yury Pikhtarev
70edc091e2 New translations main.php (Thai) 2023-03-09 20:50:50 +03:00
Yury Pikhtarev
a31cd57a98 New translations user_agreement.html (Indonesian) 2023-03-09 20:50:41 +03:00
Yury Pikhtarev
02678b43c6 New translations copyright_holders.html (Indonesian) 2023-03-09 20:50:38 +03:00
Yury Pikhtarev
4577a4f276 New translations user_welcome_inactive.html (Indonesian) 2023-03-09 20:50:37 +03:00
Yury Pikhtarev
bc28fa5dc3 New translations user_welcome.html (Indonesian) 2023-03-09 20:50:36 +03:00
Yury Pikhtarev
1eb7d9bab9 New translations user_activate_passwd.html (Indonesian) 2023-03-09 20:50:35 +03:00
Yury Pikhtarev
aebfbc4c20 New translations user_activate.html (Indonesian) 2023-03-09 20:50:34 +03:00
Yury Pikhtarev
ca6ee304b7 New translations topic_notify.html (Indonesian) 2023-03-09 20:50:33 +03:00
Yury Pikhtarev
5b14c65ec3 New translations profile_send_email.html (Indonesian) 2023-03-09 20:50:33 +03:00
Yury Pikhtarev
4ab9aa01af New translations privmsg_notify.html (Indonesian) 2023-03-09 20:50:32 +03:00
Yury Pikhtarev
2b04a8ca14 New translations group_request.html (Indonesian) 2023-03-09 20:50:31 +03:00
Yury Pikhtarev
36bb6e0fa6 New translations group_approved.html (Indonesian) 2023-03-09 20:50:30 +03:00
Yury Pikhtarev
9cd09ce8a1 New translations group_added.html (Indonesian) 2023-03-09 20:50:29 +03:00
Yury Pikhtarev
1b03632a91 New translations admin_send_email.html (Indonesian) 2023-03-09 20:50:27 +03:00
Yury Pikhtarev
e2f627b4ec New translations main.php (Indonesian) 2023-03-09 20:50:26 +03:00
Yury Pikhtarev
aab58157b9 New translations user_agreement.html (Albanian) 2023-03-09 20:50:17 +03:00
Yury Pikhtarev
738694af05 New translations copyright_holders.html (Albanian) 2023-03-09 20:50:14 +03:00
Yury Pikhtarev
18f64d09d2 New translations user_welcome_inactive.html (Albanian) 2023-03-09 20:50:13 +03:00
Yury Pikhtarev
17164ac2c9 New translations user_welcome.html (Albanian) 2023-03-09 20:50:11 +03:00
Yury Pikhtarev
c60dd0c408 New translations user_activate_passwd.html (Albanian) 2023-03-09 20:50:09 +03:00
Yury Pikhtarev
26093650f4 New translations user_activate.html (Albanian) 2023-03-09 20:50:08 +03:00
Yury Pikhtarev
6b000a9cf6 New translations topic_notify.html (Albanian) 2023-03-09 20:50:07 +03:00
Yury Pikhtarev
b9e7c63454 New translations profile_send_email.html (Albanian) 2023-03-09 20:50:07 +03:00
Yury Pikhtarev
f0de92d679 New translations privmsg_notify.html (Albanian) 2023-03-09 20:50:05 +03:00
Yury Pikhtarev
9eb3882186 New translations group_request.html (Albanian) 2023-03-09 20:50:02 +03:00
Yury Pikhtarev
fddd1866a7 New translations group_approved.html (Albanian) 2023-03-09 20:50:01 +03:00
Yury Pikhtarev
247770a393 New translations group_added.html (Albanian) 2023-03-09 20:50:01 +03:00
Yury Pikhtarev
3b215d1eb0 New translations admin_send_email.html (Albanian) 2023-03-09 20:49:59 +03:00
Yury Pikhtarev
aa29884b2d New translations main.php (Albanian) 2023-03-09 20:49:57 +03:00
Yury Pikhtarev
4cf495e2e9 New translations user_agreement.html (Slovenian) 2023-03-09 20:49:49 +03:00
Yury Pikhtarev
33fa3e1eec New translations copyright_holders.html (Slovenian) 2023-03-09 20:49:46 +03:00
Yury Pikhtarev
47d9939633 New translations user_welcome_inactive.html (Slovenian) 2023-03-09 20:49:45 +03:00
Yury Pikhtarev
8a805e971e New translations user_welcome.html (Slovenian) 2023-03-09 20:49:44 +03:00
Yury Pikhtarev
f8155d5969 New translations user_activate_passwd.html (Slovenian) 2023-03-09 20:49:43 +03:00
Yury Pikhtarev
c7abbb492b New translations user_activate.html (Slovenian) 2023-03-09 20:49:42 +03:00
Yury Pikhtarev
ce65bc0fb4 New translations topic_notify.html (Slovenian) 2023-03-09 20:49:41 +03:00
Yury Pikhtarev
5c2c835154 New translations profile_send_email.html (Slovenian) 2023-03-09 20:49:40 +03:00
Yury Pikhtarev
7cdba2dbf4 New translations privmsg_notify.html (Slovenian) 2023-03-09 20:49:39 +03:00
Yury Pikhtarev
b8b0ea1742 New translations group_request.html (Slovenian) 2023-03-09 20:49:38 +03:00
Yury Pikhtarev
42be3d11ff New translations group_approved.html (Slovenian) 2023-03-09 20:49:36 +03:00
Yury Pikhtarev
0307b58092 New translations group_added.html (Slovenian) 2023-03-09 20:49:36 +03:00
Yury Pikhtarev
121a5b992a New translations admin_send_email.html (Slovenian) 2023-03-09 20:49:34 +03:00
Yury Pikhtarev
21ebeb9bdf New translations main.php (Slovenian) 2023-03-09 20:49:33 +03:00
Yury Pikhtarev
5949df394a New translations user_agreement.html (Slovak) 2023-03-09 20:49:24 +03:00
Yury Pikhtarev
3794a8c0c1 New translations copyright_holders.html (Slovak) 2023-03-09 20:49:21 +03:00
Yury Pikhtarev
979c1064e1 New translations user_welcome_inactive.html (Slovak) 2023-03-09 20:49:20 +03:00
Yury Pikhtarev
5c7cf488c4 New translations user_welcome.html (Slovak) 2023-03-09 20:49:19 +03:00
Yury Pikhtarev
c4934c6554 New translations user_activate_passwd.html (Slovak) 2023-03-09 20:49:18 +03:00
Yury Pikhtarev
be82896ba8 New translations user_activate.html (Slovak) 2023-03-09 20:49:17 +03:00
Yury Pikhtarev
f52ebb7388 New translations topic_notify.html (Slovak) 2023-03-09 20:49:16 +03:00
Yury Pikhtarev
6a5b510c14 New translations profile_send_email.html (Slovak) 2023-03-09 20:49:15 +03:00
Yury Pikhtarev
08ab68b651 New translations privmsg_notify.html (Slovak) 2023-03-09 20:49:14 +03:00
Yury Pikhtarev
e056a2d075 New translations group_request.html (Slovak) 2023-03-09 20:49:13 +03:00
Yury Pikhtarev
25f5c4883c New translations group_approved.html (Slovak) 2023-03-09 20:49:12 +03:00
Yury Pikhtarev
564623bfd0 New translations group_added.html (Slovak) 2023-03-09 20:49:12 +03:00
Yury Pikhtarev
05ad2d418a New translations admin_send_email.html (Slovak) 2023-03-09 20:49:10 +03:00
Yury Pikhtarev
6b57291ec0 New translations main.php (Slovak) 2023-03-09 20:49:09 +03:00
Yury Pikhtarev
f38ca62302 New translations user_agreement.html (Lithuanian) 2023-03-09 20:49:00 +03:00
Yury Pikhtarev
839ef057d4 New translations copyright_holders.html (Lithuanian) 2023-03-09 20:48:57 +03:00
Yury Pikhtarev
231f731260 New translations user_welcome_inactive.html (Lithuanian) 2023-03-09 20:48:55 +03:00
Yury Pikhtarev
8461fbcb7d New translations user_welcome.html (Lithuanian) 2023-03-09 20:48:55 +03:00
Yury Pikhtarev
acd85f8ce9 New translations user_activate_passwd.html (Lithuanian) 2023-03-09 20:48:53 +03:00
Yury Pikhtarev
b66615f901 New translations user_activate.html (Lithuanian) 2023-03-09 20:48:52 +03:00
Yury Pikhtarev
1a66937761 New translations topic_notify.html (Lithuanian) 2023-03-09 20:48:51 +03:00
Yury Pikhtarev
f6594effc5 New translations profile_send_email.html (Lithuanian) 2023-03-09 20:48:50 +03:00
Yury Pikhtarev
5061effd83 New translations privmsg_notify.html (Lithuanian) 2023-03-09 20:48:49 +03:00
Yury Pikhtarev
07066a13a9 New translations group_request.html (Lithuanian) 2023-03-09 20:48:48 +03:00
Yury Pikhtarev
3c71cd7d53 New translations group_approved.html (Lithuanian) 2023-03-09 20:48:47 +03:00
Yury Pikhtarev
296a018f89 New translations group_added.html (Lithuanian) 2023-03-09 20:48:46 +03:00
Yury Pikhtarev
565f3ff2f4 New translations admin_send_email.html (Lithuanian) 2023-03-09 20:48:43 +03:00
Yury Pikhtarev
59c57b6013 New translations main.php (Lithuanian) 2023-03-09 20:48:42 +03:00
Yury Pikhtarev
64f9e528e4 New translations user_agreement.html (Georgian) 2023-03-09 20:48:33 +03:00
Yury Pikhtarev
a174d23a83 New translations copyright_holders.html (Georgian) 2023-03-09 20:48:30 +03:00
Yury Pikhtarev
e543712714 New translations user_welcome_inactive.html (Georgian) 2023-03-09 20:48:29 +03:00
Yury Pikhtarev
927c8c5e13 New translations user_welcome.html (Georgian) 2023-03-09 20:48:28 +03:00
Yury Pikhtarev
86ed83f4cd New translations user_activate_passwd.html (Georgian) 2023-03-09 20:48:26 +03:00
Yury Pikhtarev
0e6da0a2d1 New translations user_activate.html (Georgian) 2023-03-09 20:48:25 +03:00
Yury Pikhtarev
5f96d8b597 New translations topic_notify.html (Georgian) 2023-03-09 20:48:25 +03:00
Yury Pikhtarev
0c46c3bc9d New translations profile_send_email.html (Georgian) 2023-03-09 20:48:24 +03:00
Yury Pikhtarev
e372adf211 New translations privmsg_notify.html (Georgian) 2023-03-09 20:48:23 +03:00
Yury Pikhtarev
7bd688e9b6 New translations group_request.html (Georgian) 2023-03-09 20:48:22 +03:00
Yury Pikhtarev
061b97be9d New translations group_approved.html (Georgian) 2023-03-09 20:48:21 +03:00
Yury Pikhtarev
03a38c4fae New translations group_added.html (Georgian) 2023-03-09 20:48:20 +03:00
Yury Pikhtarev
514fa049bb New translations admin_send_email.html (Georgian) 2023-03-09 20:48:19 +03:00
Yury Pikhtarev
89fb75e660 New translations main.php (Georgian) 2023-03-09 20:48:18 +03:00
Yury Pikhtarev
e2d64d3fcb New translations user_agreement.html (Armenian) 2023-03-09 20:48:09 +03:00
Yury Pikhtarev
bc5c98a640 New translations copyright_holders.html (Armenian) 2023-03-09 20:48:06 +03:00
Yury Pikhtarev
ab3c9c98ea New translations user_welcome_inactive.html (Armenian) 2023-03-09 20:48:04 +03:00
Yury Pikhtarev
59ededc56f New translations user_welcome.html (Armenian) 2023-03-09 20:48:04 +03:00
Yury Pikhtarev
8a6f65d7a8 New translations user_activate_passwd.html (Armenian) 2023-03-09 20:48:03 +03:00
Yury Pikhtarev
ae8fba7cb3 New translations user_activate.html (Armenian) 2023-03-09 20:48:01 +03:00
Yury Pikhtarev
11684e70d1 New translations topic_notify.html (Armenian) 2023-03-09 20:48:00 +03:00
Yury Pikhtarev
331608ffd1 New translations profile_send_email.html (Armenian) 2023-03-09 20:47:59 +03:00
Yury Pikhtarev
569310fddc New translations privmsg_notify.html (Armenian) 2023-03-09 20:47:58 +03:00
Yury Pikhtarev
59fc56c41f New translations group_request.html (Armenian) 2023-03-09 20:47:57 +03:00
Yury Pikhtarev
3ccecfd0c7 New translations group_approved.html (Armenian) 2023-03-09 20:47:56 +03:00
Yury Pikhtarev
e22fb26da4 New translations group_added.html (Armenian) 2023-03-09 20:47:54 +03:00
Yury Pikhtarev
3eb605a3c5 New translations admin_send_email.html (Armenian) 2023-03-09 20:47:52 +03:00
Yury Pikhtarev
24dd493388 New translations main.php (Armenian) 2023-03-09 20:47:51 +03:00
Yury Pikhtarev
dfbe4ce05a New translations user_agreement.html (Bulgarian) 2023-03-09 20:47:42 +03:00
Yury Pikhtarev
671be11649 New translations copyright_holders.html (Bulgarian) 2023-03-09 20:47:39 +03:00
Yury Pikhtarev
b78a0d1b9f New translations user_welcome_inactive.html (Bulgarian) 2023-03-09 20:47:37 +03:00
Yury Pikhtarev
0687c4f9ff New translations user_welcome.html (Bulgarian) 2023-03-09 20:47:36 +03:00
Yury Pikhtarev
1da001574e New translations user_activate_passwd.html (Bulgarian) 2023-03-09 20:47:35 +03:00
Yury Pikhtarev
7e271103ea New translations user_activate.html (Bulgarian) 2023-03-09 20:47:34 +03:00
Yury Pikhtarev
bf7539178a New translations topic_notify.html (Bulgarian) 2023-03-09 20:47:33 +03:00
Yury Pikhtarev
d54a0599bd New translations profile_send_email.html (Bulgarian) 2023-03-09 20:47:32 +03:00
Yury Pikhtarev
b20ccf29e5 New translations privmsg_notify.html (Bulgarian) 2023-03-09 20:47:32 +03:00
Yury Pikhtarev
eff6325f48 New translations group_request.html (Bulgarian) 2023-03-09 20:47:31 +03:00
Yury Pikhtarev
b9f7e7347b New translations group_approved.html (Bulgarian) 2023-03-09 20:47:30 +03:00
Yury Pikhtarev
abee84230f New translations group_added.html (Bulgarian) 2023-03-09 20:47:29 +03:00
Yury Pikhtarev
5510553550 New translations admin_send_email.html (Bulgarian) 2023-03-09 20:47:27 +03:00
Yury Pikhtarev
a3dd08a24a New translations main.php (Bulgarian) 2023-03-09 20:47:27 +03:00
Yury Pikhtarev
98eb4e66ed New translations user_agreement.html (Kazakh) 2023-03-09 20:47:18 +03:00
Yury Pikhtarev
9a9baf901b New translations user_agreement.html (Vietnamese) 2023-03-09 20:47:15 +03:00
Yury Pikhtarev
7e39e3b1fc New translations user_agreement.html (Chinese Traditional) 2023-03-09 20:47:14 +03:00
Yury Pikhtarev
c25db1b2e7 New translations user_agreement.html (Ukrainian) 2023-03-09 20:47:13 +03:00
Yury Pikhtarev
89c14c4d0b New translations user_agreement.html (Turkish) 2023-03-09 20:47:12 +03:00
Yury Pikhtarev
f26debb071 New translations user_agreement.html (Swedish) 2023-03-09 20:47:11 +03:00
Yury Pikhtarev
f3569e58d7 New translations user_agreement.html (Serbian (Cyrillic)) 2023-03-09 20:47:10 +03:00
Yury Pikhtarev
a7e6d1e16d New translations user_agreement.html (Polish) 2023-03-09 20:47:04 +03:00
Yury Pikhtarev
6888faa29b New translations user_agreement.html (Norwegian) 2023-03-09 20:47:03 +03:00
Yury Pikhtarev
d2a88fb59e New translations user_agreement.html (Dutch) 2023-03-09 20:47:02 +03:00
Yury Pikhtarev
0f3b4cf6d4 New translations user_agreement.html (Korean) 2023-03-09 20:47:01 +03:00
Yury Pikhtarev
d44f71c9ef New translations user_agreement.html (Japanese) 2023-03-09 20:47:00 +03:00
Yury Pikhtarev
17f793efc3 New translations user_agreement.html (Italian) 2023-03-09 20:47:00 +03:00
Yury Pikhtarev
aa4536d95d New translations user_agreement.html (Hungarian) 2023-03-09 20:46:54 +03:00
Yury Pikhtarev
1b94e6dd3e New translations user_agreement.html (Hebrew) 2023-03-09 20:46:53 +03:00
Yury Pikhtarev
616034242e New translations user_agreement.html (Finnish) 2023-03-09 20:46:52 +03:00
Yury Pikhtarev
aebd71352d New translations user_agreement.html (Greek) 2023-03-09 20:46:41 +03:00
Yury Pikhtarev
31ac62c2b0 New translations user_agreement.html (German) 2023-03-09 20:46:39 +03:00
Yury Pikhtarev
2b5a0ef08f New translations user_agreement.html (Danish) 2023-03-09 20:46:38 +03:00
Yury Pikhtarev
ac8f727da0 New translations user_agreement.html (Czech) 2023-03-09 20:46:37 +03:00
Yury Pikhtarev
e74ef03a45 New translations user_agreement.html (Catalan) 2023-03-09 20:46:36 +03:00
Yury Pikhtarev
125e8f6ea0 New translations user_agreement.html (Belarusian) 2023-03-09 20:46:35 +03:00
Yury Pikhtarev
c2a49497ed New translations user_agreement.html (Afrikaans) 2023-03-09 20:46:21 +03:00
Yury Pikhtarev
597b162f6a New translations user_agreement.html (Romanian) 2023-03-09 20:46:19 +03:00
Yury Pikhtarev
a286a0a84a New translations sidebar1.html (Turkish) 2023-03-09 20:46:14 +03:00
Yury Pikhtarev
deddc03f34 New translations sidebar1.html (Japanese) 2023-03-09 20:46:05 +03:00
Yury Pikhtarev
7a5b7d73f0 New translations sidebar1.html (Greek) 2023-03-09 20:45:58 +03:00
Yury Pikhtarev
6c7487e561 New translations copyright_holders.html (Kazakh) 2023-03-09 20:45:49 +03:00
Yury Pikhtarev
ebd9293087 New translations copyright_holders.html (Vietnamese) 2023-03-09 20:45:47 +03:00
Yury Pikhtarev
9a05702f6c New translations copyright_holders.html (Chinese Traditional) 2023-03-09 20:45:46 +03:00
Yury Pikhtarev
c7cba7d1e2 New translations copyright_holders.html (Ukrainian) 2023-03-09 20:45:45 +03:00
Yury Pikhtarev
69ee557861 New translations copyright_holders.html (Swedish) 2023-03-09 20:45:43 +03:00
Yury Pikhtarev
8cec8baeea New translations copyright_holders.html (Serbian (Cyrillic)) 2023-03-09 20:45:42 +03:00
Yury Pikhtarev
da2afa001c New translations copyright_holders.html (Polish) 2023-03-09 20:45:38 +03:00
Yury Pikhtarev
e3b0634195 New translations copyright_holders.html (Norwegian) 2023-03-09 20:45:37 +03:00
Yury Pikhtarev
2cd4b2c968 New translations copyright_holders.html (Hungarian) 2023-03-09 20:45:29 +03:00
Yury Pikhtarev
e66f4ccfe6 New translations copyright_holders.html (Hebrew) 2023-03-09 20:45:28 +03:00
Yury Pikhtarev
883989256e New translations copyright_holders.html (Finnish) 2023-03-09 20:45:26 +03:00
Yury Pikhtarev
c4c2fb0da9 New translations copyright_holders.html (Greek) 2023-03-09 20:45:25 +03:00
Yury Pikhtarev
3c518729dc New translations copyright_holders.html (Danish) 2023-03-09 20:45:24 +03:00
Yury Pikhtarev
8484910663 New translations copyright_holders.html (Czech) 2023-03-09 20:45:23 +03:00
Yury Pikhtarev
20eed92770 New translations copyright_holders.html (Catalan) 2023-03-09 20:45:22 +03:00
Yury Pikhtarev
6cd33c02f9 New translations copyright_holders.html (Belarusian) 2023-03-09 20:45:21 +03:00
Yury Pikhtarev
420421e6b4 New translations copyright_holders.html (Afrikaans) 2023-03-09 20:45:16 +03:00
Yury Pikhtarev
e741e7c6c0 New translations copyright_holders.html (Romanian) 2023-03-09 20:45:14 +03:00
Yury Pikhtarev
b7aea5960d New translations user_welcome_inactive.html (Kazakh) 2023-03-09 20:45:12 +03:00
Yury Pikhtarev
2f29613079 New translations user_welcome_inactive.html (Vietnamese) 2023-03-09 20:45:06 +03:00
Yury Pikhtarev
4ee287a9e3 New translations user_welcome_inactive.html (Ukrainian) 2023-03-09 20:45:04 +03:00
Roman Kelesidis
d939705531
Merge pull request #587 from torrentpier/added-show-avatar-memberlist
Added show avatar in memberlist
2023-03-10 00:45:02 +07:00
Yury Pikhtarev
7517b03501 New translations user_welcome_inactive.html (Swedish) 2023-03-09 20:45:02 +03:00
Yury Pikhtarev
d0a21f4f13 New translations user_welcome_inactive.html (Serbian (Cyrillic)) 2023-03-09 20:45:00 +03:00
Yury Pikhtarev
beb5410601 New translations user_welcome_inactive.html (Norwegian) 2023-03-09 20:44:55 +03:00
Yury Pikhtarev
1d5a75e9ed New translations user_welcome_inactive.html (Japanese) 2023-03-09 20:44:52 +03:00
Yury Pikhtarev
fecc80d677 New translations user_welcome_inactive.html (Hungarian) 2023-03-09 20:44:45 +03:00
Yury Pikhtarev
eda400319c New translations user_welcome_inactive.html (Hebrew) 2023-03-09 20:44:44 +03:00
Yury Pikhtarev
c7ca2aaff7 New translations user_welcome_inactive.html (Finnish) 2023-03-09 20:44:43 +03:00
Yury Pikhtarev
edc8e1c435 New translations user_welcome_inactive.html (Greek) 2023-03-09 20:44:43 +03:00
Yury Pikhtarev
498d6ecc0b New translations user_welcome.html (Kazakh) 2023-03-09 20:44:39 +03:00
Yury Pikhtarev
2d870b90a9 New translations user_activate_passwd.html (Kazakh) 2023-03-09 20:44:38 +03:00
Yury Pikhtarev
05aa48c591 New translations user_welcome.html (Vietnamese) 2023-03-09 20:44:36 +03:00
Yury Pikhtarev
4f2223f498 New translations user_welcome.html (Ukrainian) 2023-03-09 20:44:34 +03:00
Yury Pikhtarev
ebd9b07e09 New translations user_welcome.html (Swedish) 2023-03-09 20:44:32 +03:00
Yury Pikhtarev
9b81df60dd New translations user_welcome.html (Serbian (Cyrillic)) 2023-03-09 20:44:32 +03:00
Yury Pikhtarev
6eb4dcd274 New translations user_activate_passwd.html (Vietnamese) 2023-03-09 20:44:30 +03:00
Yury Pikhtarev
409e4a65f5 New translations user_activate_passwd.html (Chinese Traditional) 2023-03-09 20:44:29 +03:00
Yury Pikhtarev
7b482e8f0e New translations user_activate_passwd.html (Ukrainian) 2023-03-09 20:44:28 +03:00
Yury Pikhtarev
c4c5efa70d New translations user_activate_passwd.html (Swedish) 2023-03-09 20:44:26 +03:00
Yury Pikhtarev
83307f4256 New translations user_activate_passwd.html (Serbian (Cyrillic)) 2023-03-09 20:44:26 +03:00
Yury Pikhtarev
3f6c1ac30c New translations user_welcome.html (Norwegian) 2023-03-09 20:44:24 +03:00
Yury Pikhtarev
33a9a58510 New translations user_welcome.html (Japanese) 2023-03-09 20:44:21 +03:00
Yury Pikhtarev
4444fa69e1 New translations user_welcome_inactive.html (German) 2023-03-09 20:44:20 +03:00
Yury Pikhtarev
bab8105743 New translations user_welcome_inactive.html (Danish) 2023-03-09 20:44:19 +03:00
Yury Pikhtarev
24af5928e5 New translations user_welcome_inactive.html (Czech) 2023-03-09 20:44:18 +03:00
Yury Pikhtarev
2a3947034c New translations user_welcome_inactive.html (Catalan) 2023-03-09 20:44:17 +03:00
Yury Pikhtarev
29a3e793d1 New translations user_welcome_inactive.html (Belarusian) 2023-03-09 20:44:16 +03:00
Yury Pikhtarev
2471b09f33 New translations user_welcome.html (Hungarian) 2023-03-09 20:44:15 +03:00
Yury Pikhtarev
a24c49b25e New translations user_welcome.html (Hebrew) 2023-03-09 20:44:14 +03:00
Yury Pikhtarev
200baa6e33 New translations user_welcome.html (Finnish) 2023-03-09 20:44:13 +03:00
Yury Pikhtarev
f2b3b6b5ea New translations user_welcome.html (Greek) 2023-03-09 20:44:12 +03:00
Yury Pikhtarev
673ce53c4a New translations user_welcome.html (German) 2023-03-09 20:44:12 +03:00
Yury Pikhtarev
eeafdbc200 New translations user_welcome.html (Danish) 2023-03-09 20:44:11 +03:00
Yury Pikhtarev
369ac60424 New translations user_welcome.html (Czech) 2023-03-09 20:44:10 +03:00
Yury Pikhtarev
6271c937a5 New translations user_welcome.html (Catalan) 2023-03-09 20:44:09 +03:00
Yury Pikhtarev
e032c12a79 New translations user_welcome.html (Belarusian) 2023-03-09 20:44:08 +03:00
Yury Pikhtarev
8116bb11f9 New translations user_welcome_inactive.html (Afrikaans) 2023-03-09 20:44:07 +03:00
Yury Pikhtarev
0300882e61 New translations user_welcome_inactive.html (Romanian) 2023-03-09 20:44:05 +03:00
Yury Pikhtarev
2c3dfb7a7d New translations user_welcome.html (Afrikaans) 2023-03-09 20:44:03 +03:00
Yury Pikhtarev
fbe55d9830 New translations user_welcome.html (Romanian) 2023-03-09 20:44:01 +03:00
Yury Pikhtarev
3755cae13d New translations user_activate.html (Kazakh) 2023-03-09 20:44:00 +03:00
Yury Pikhtarev
16f98bf8ca New translations user_activate.html (Vietnamese) 2023-03-09 20:43:58 +03:00
Yury Pikhtarev
eec9a1b601 New translations user_activate.html (Ukrainian) 2023-03-09 20:43:56 +03:00
Yury Pikhtarev
d33d535433 New translations user_activate.html (Swedish) 2023-03-09 20:43:55 +03:00
Yury Pikhtarev
7db9b9136b New translations user_activate.html (Serbian (Cyrillic)) 2023-03-09 20:43:54 +03:00
Yury Pikhtarev
734c7fce7f New translations user_activate_passwd.html (Norwegian) 2023-03-09 20:43:53 +03:00
Yury Pikhtarev
fa67881831 New translations user_activate_passwd.html (Japanese) 2023-03-09 20:43:50 +03:00
Yury Pikhtarev
efb92b1bd4 New translations user_activate.html (Norwegian) 2023-03-09 20:43:49 +03:00
Yury Pikhtarev
55d0573b90 New translations user_activate_passwd.html (Hungarian) 2023-03-09 20:43:45 +03:00
Yury Pikhtarev
b3fa08c15c New translations user_activate_passwd.html (Hebrew) 2023-03-09 20:43:45 +03:00
Yury Pikhtarev
d27323934c New translations user_activate_passwd.html (Finnish) 2023-03-09 20:43:44 +03:00
Yury Pikhtarev
8aece43b5f New translations user_activate_passwd.html (Greek) 2023-03-09 20:43:43 +03:00
Yury Pikhtarev
26ab7f66aa New translations user_activate_passwd.html (Danish) 2023-03-09 20:43:41 +03:00
Yury Pikhtarev
4a39b57a16 New translations user_activate_passwd.html (Czech) 2023-03-09 20:43:40 +03:00
Yury Pikhtarev
74719efa06 New translations user_activate_passwd.html (Catalan) 2023-03-09 20:43:39 +03:00
Yury Pikhtarev
39f042d110 New translations user_activate_passwd.html (Belarusian) 2023-03-09 20:43:38 +03:00
Yury Pikhtarev
ebf438e38c New translations user_activate.html (Hungarian) 2023-03-09 20:43:37 +03:00
Yury Pikhtarev
88ca98c6fc New translations user_activate.html (Hebrew) 2023-03-09 20:43:36 +03:00
Yury Pikhtarev
eca431cad8 New translations user_activate.html (Finnish) 2023-03-09 20:43:35 +03:00
Yury Pikhtarev
506d2f66dd New translations user_activate.html (Greek) 2023-03-09 20:43:33 +03:00
Yury Pikhtarev
94de52a42a New translations user_activate.html (Danish) 2023-03-09 20:43:32 +03:00
Yury Pikhtarev
91b26e2c6d New translations user_activate.html (Czech) 2023-03-09 20:43:31 +03:00
Yury Pikhtarev
28d27b9c0f New translations user_activate.html (Catalan) 2023-03-09 20:43:30 +03:00
Yury Pikhtarev
33b09d9c36 New translations user_activate.html (Belarusian) 2023-03-09 20:43:29 +03:00
Yury Pikhtarev
7765537652 New translations user_activate_passwd.html (Afrikaans) 2023-03-09 20:43:27 +03:00
Yury Pikhtarev
467ab83bbb New translations user_activate_passwd.html (Romanian) 2023-03-09 20:43:25 +03:00
Yury Pikhtarev
a334dabbb7 New translations user_activate.html (Afrikaans) 2023-03-09 20:43:24 +03:00
Yury Pikhtarev
100073760a New translations user_activate.html (Romanian) 2023-03-09 20:43:22 +03:00
Yury Pikhtarev
954b4c2ca9 New translations topic_notify.html (Kazakh) 2023-03-09 20:43:21 +03:00
Yury Pikhtarev
79f7b8de70 New translations profile_send_email.html (Kazakh) 2023-03-09 20:43:20 +03:00
Yury Pikhtarev
8fed127716 New translations topic_notify.html (Vietnamese) 2023-03-09 20:43:19 +03:00
Yury Pikhtarev
21a4843f30 New translations topic_notify.html (Ukrainian) 2023-03-09 20:43:16 +03:00
Yury Pikhtarev
9f8d174ed6 New translations topic_notify.html (Swedish) 2023-03-09 20:43:15 +03:00
Yury Pikhtarev
37c8372014 New translations topic_notify.html (Serbian (Cyrillic)) 2023-03-09 20:43:14 +03:00
Yury Pikhtarev
7346f12397 New translations profile_send_email.html (Vietnamese) 2023-03-09 20:43:13 +03:00
Yury Pikhtarev
0b75e07363 New translations profile_send_email.html (Chinese Traditional) 2023-03-09 20:43:11 +03:00
Yury Pikhtarev
936f9218ee New translations profile_send_email.html (Ukrainian) 2023-03-09 20:43:10 +03:00
Yury Pikhtarev
7820a5dab1 New translations profile_send_email.html (Swedish) 2023-03-09 20:43:09 +03:00
Yury Pikhtarev
49793cad1b New translations profile_send_email.html (Serbian (Cyrillic)) 2023-03-09 20:43:08 +03:00
Yury Pikhtarev
71bd7dd7d1 New translations topic_notify.html (Norwegian) 2023-03-09 20:43:05 +03:00
Yury Pikhtarev
6b25302d8a New translations topic_notify.html (Japanese) 2023-03-09 20:43:04 +03:00
Yury Pikhtarev
cba0677d04 New translations profile_send_email.html (Norwegian) 2023-03-09 20:43:02 +03:00
Yury Pikhtarev
249065dd00 New translations profile_send_email.html (Japanese) 2023-03-09 20:42:59 +03:00
Yury Pikhtarev
5132596975 New translations topic_notify.html (Finnish) 2023-03-09 20:42:57 +03:00
Yury Pikhtarev
37c8dd09a7 New translations topic_notify.html (Greek) 2023-03-09 20:42:56 +03:00
Yury Pikhtarev
98475b0134 New translations topic_notify.html (Danish) 2023-03-09 20:42:54 +03:00
Yury Pikhtarev
892ef2a596 New translations topic_notify.html (Czech) 2023-03-09 20:42:53 +03:00
Yury Pikhtarev
44b42816e7 New translations profile_send_email.html (Hungarian) 2023-03-09 20:42:51 +03:00
Yury Pikhtarev
35c4fff746 New translations profile_send_email.html (Hebrew) 2023-03-09 20:42:50 +03:00
Yury Pikhtarev
5a939a37ac New translations profile_send_email.html (Finnish) 2023-03-09 20:42:49 +03:00
Yury Pikhtarev
df70e9179b New translations profile_send_email.html (Greek) 2023-03-09 20:42:48 +03:00
Yury Pikhtarev
2541581e6d New translations topic_notify.html (Spanish) 2023-03-09 20:42:46 +03:00
Yury Pikhtarev
494b458b51 New translations topic_notify.html (Romanian) 2023-03-09 20:42:44 +03:00
Yury Pikhtarev
85c05174f8 New translations privmsg_notify.html (Ukrainian) 2023-03-09 20:42:40 +03:00
Yury Pikhtarev
bc5ac10a77 New translations privmsg_notify.html (Swedish) 2023-03-09 20:42:39 +03:00
Yury Pikhtarev
52aedc0099 New translations group_request.html (Ukrainian) 2023-03-09 20:42:35 +03:00
Yury Pikhtarev
102b53e5d2 New translations group_request.html (Swedish) 2023-03-09 20:42:33 +03:00
Yury Pikhtarev
6ad4e2c75d New translations privmsg_notify.html (Norwegian) 2023-03-09 20:42:31 +03:00
Yury Pikhtarev
9d96e15616 New translations profile_send_email.html (Danish) 2023-03-09 20:42:27 +03:00
Yury Pikhtarev
50e2da491a New translations profile_send_email.html (Czech) 2023-03-09 20:42:26 +03:00
Yury Pikhtarev
f944280aa1 New translations profile_send_email.html (Catalan) 2023-03-09 20:42:25 +03:00
Yury Pikhtarev
743fd5aca0 New translations profile_send_email.html (Belarusian) 2023-03-09 20:42:14 +03:00
Yury Pikhtarev
9a2f6d4a45 New translations privmsg_notify.html (Finnish) 2023-03-09 20:42:11 +03:00
Yury Pikhtarev
79dfd12305 New translations privmsg_notify.html (Greek) 2023-03-09 20:42:10 +03:00
Yury Pikhtarev
307de9feee New translations privmsg_notify.html (Danish) 2023-03-09 20:42:09 +03:00
Yury Pikhtarev
0c7074328c New translations privmsg_notify.html (Czech) 2023-03-09 20:42:08 +03:00
Yury Pikhtarev
1df55ea8f0 New translations profile_send_email.html (Afrikaans) 2023-03-09 20:42:05 +03:00
Yury Pikhtarev
6407d2a0fa New translations profile_send_email.html (Romanian) 2023-03-09 20:42:03 +03:00
Yury Pikhtarev
b45ec592e8 New translations privmsg_notify.html (Romanian) 2023-03-09 20:41:59 +03:00
Yury Pikhtarev
1c722e90da New translations group_approved.html (Ukrainian) 2023-03-09 20:41:56 +03:00
Yury Pikhtarev
32519acca7 New translations group_approved.html (Swedish) 2023-03-09 20:41:54 +03:00
Yury Pikhtarev
c04ce2ca6b New translations group_request.html (Norwegian) 2023-03-09 20:41:52 +03:00
Yury Pikhtarev
656023916c New translations group_request.html (Japanese) 2023-03-09 20:41:50 +03:00
Yury Pikhtarev
c2bf91207e New translations group_approved.html (Norwegian) 2023-03-09 20:41:48 +03:00
Yury Pikhtarev
442982a489 New translations group_approved.html (Japanese) 2023-03-09 20:41:46 +03:00
Yury Pikhtarev
cf33862cf8 New translations group_request.html (Finnish) 2023-03-09 20:41:44 +03:00
Yury Pikhtarev
f2c5d3dc98 New translations group_request.html (Greek) 2023-03-09 20:41:43 +03:00
Yury Pikhtarev
27f0c57165 New translations group_request.html (Danish) 2023-03-09 20:41:41 +03:00
Yury Pikhtarev
9fd74c19c5 New translations group_request.html (Czech) 2023-03-09 20:41:40 +03:00
Yury Pikhtarev
c9206f2281 New translations group_approved.html (Finnish) 2023-03-09 20:41:27 +03:00
Yury Pikhtarev
310a09d7a5 New translations group_approved.html (Greek) 2023-03-09 20:41:26 +03:00
Yury Pikhtarev
ff8df3eab9 New translations group_approved.html (Danish) 2023-03-09 20:41:25 +03:00
Yury Pikhtarev
6fc577cb62 New translations group_approved.html (Czech) 2023-03-09 20:41:24 +03:00
Yury Pikhtarev
059e96f4e3 New translations group_request.html (Romanian) 2023-03-09 20:41:18 +03:00
Yury Pikhtarev
402cc38aac New translations group_approved.html (Romanian) 2023-03-09 20:41:15 +03:00
Yury Pikhtarev
e30764371d New translations group_added.html (Ukrainian) 2023-03-09 20:41:10 +03:00
Yury Pikhtarev
8d19c20fbb New translations group_added.html (Swedish) 2023-03-09 20:41:09 +03:00
Yury Pikhtarev
eba8492293 New translations group_added.html (Norwegian) 2023-03-09 20:41:02 +03:00
Yury Pikhtarev
f06637e9ff New translations group_added.html (Japanese) 2023-03-09 20:40:59 +03:00
Yury Pikhtarev
261841d4e7 New translations group_added.html (Finnish) 2023-03-09 20:40:54 +03:00
Yury Pikhtarev
f1e07262f8 New translations group_added.html (Greek) 2023-03-09 20:40:53 +03:00
Yury Pikhtarev
cbc5083442 New translations group_added.html (Danish) 2023-03-09 20:40:51 +03:00
Yury Pikhtarev
7320bb0b70 New translations group_added.html (Czech) 2023-03-09 20:40:51 +03:00
Yury Pikhtarev
beaabb16c8 New translations group_added.html (Romanian) 2023-03-09 20:40:44 +03:00
Yury Pikhtarev
eb18ba68ee New translations main.php (Kazakh) 2023-03-09 20:40:42 +03:00
Yury Pikhtarev
c281870f0c New translations admin_send_email.html (Ukrainian) 2023-03-09 20:40:39 +03:00
Yury Pikhtarev
ce81b5937a New translations admin_send_email.html (Swedish) 2023-03-09 20:40:37 +03:00
Yury Pikhtarev
57cc9c6ff5 New translations main.php (Vietnamese) 2023-03-09 20:40:34 +03:00
Yury Pikhtarev
3fe4c03972 New translations main.php (Chinese Traditional) 2023-03-09 20:40:32 +03:00
Yury Pikhtarev
c7b263b699 New translations main.php (Serbian (Cyrillic)) 2023-03-09 20:40:28 +03:00
Yury Pikhtarev
e787794436 New translations admin_send_email.html (Norwegian) 2023-03-09 20:40:25 +03:00
Yury Pikhtarev
8a16726b9a New translations admin_send_email.html (Japanese) 2023-03-09 20:40:23 +03:00
Yury Pikhtarev
bdbab89f73 New translations admin_send_email.html (Hungarian) 2023-03-09 20:40:18 +03:00
Yury Pikhtarev
ede4877078 New translations admin_send_email.html (Hebrew) 2023-03-09 20:40:17 +03:00
Yury Pikhtarev
b4098c04ee New translations admin_send_email.html (Finnish) 2023-03-09 20:40:16 +03:00
Yury Pikhtarev
75603335f4 New translations admin_send_email.html (Greek) 2023-03-09 20:40:15 +03:00
Yury Pikhtarev
4651e10dfa New translations admin_send_email.html (Danish) 2023-03-09 20:40:13 +03:00
Yury Pikhtarev
e9d9f73c70 New translations admin_send_email.html (Czech) 2023-03-09 20:40:12 +03:00
Yury Pikhtarev
5d9fcd147e New translations admin_send_email.html (Catalan) 2023-03-09 20:40:12 +03:00
Yury Pikhtarev
8543579baa New translations admin_send_email.html (Belarusian) 2023-03-09 20:40:11 +03:00
Yury Pikhtarev
114b727da1 New translations admin_send_email.html (Afrikaans) 2023-03-09 20:40:06 +03:00
Yury Pikhtarev
05b345f219 New translations admin_send_email.html (Romanian) 2023-03-09 20:40:04 +03:00
Yury Pikhtarev
963fe79678 New translations main.php (Korean) 2023-03-09 20:39:55 +03:00
Yury Pikhtarev
16eb6effe0 New translations main.php (Hungarian) 2023-03-09 20:39:49 +03:00
Yury Pikhtarev
ad544c3249 New translations main.php (Hebrew) 2023-03-09 20:39:47 +03:00
Yury Pikhtarev
c3868c9283 New translations main.php (Czech) 2023-03-09 20:39:42 +03:00
Yury Pikhtarev
e482d8b152 New translations main.php (Catalan) 2023-03-09 20:39:41 +03:00
Yury Pikhtarev
304ca0e867 New translations main.php (Belarusian) 2023-03-09 20:39:39 +03:00
Yury Pikhtarev
01de81ff47 New translations main.php (Arabic) 2023-03-09 20:39:33 +03:00
Yury Pikhtarev
80d491c2a2 New translations main.php (Afrikaans) 2023-03-09 20:39:32 +03:00
Yury Pikhtarev
6afaab21ae New translations user_agreement.html (Turkish) 2023-03-09 19:47:42 +03:00
Yury Pikhtarev
70792e6680 New translations sidebar1.html (Turkish) 2023-03-09 19:47:23 +03:00
Yury Pikhtarev
2d1a40d8bc New translations copyright_holders.html (Turkish) 2023-03-09 19:47:05 +03:00
Yury Pikhtarev
ecbfb90327 New translations main.php (Turkish) 2023-03-09 19:44:21 +03:00
Roman Kelesidis
6f2a545f60 Added show avatar in memberlist 2023-03-09 22:53:42 +07:00
Yury Pikhtarev
2ebb693799 New translations user_agreement.html (Tajik) 2023-03-09 18:50:42 +03:00
Yury Pikhtarev
63e8dbb75f New translations copyright_holders.html (Tajik) 2023-03-09 18:50:40 +03:00
Yury Pikhtarev
95f9c647b3 New translations user_welcome_inactive.html (Tajik) 2023-03-09 18:50:38 +03:00
Yury Pikhtarev
30be80fa14 New translations user_welcome.html (Tajik) 2023-03-09 18:50:37 +03:00
Yury Pikhtarev
f8599cce95 New translations user_activate_passwd.html (Tajik) 2023-03-09 18:50:36 +03:00
Yury Pikhtarev
fa7329ae65 New translations user_activate.html (Tajik) 2023-03-09 18:50:35 +03:00
Yury Pikhtarev
7b7a969303 New translations topic_notify.html (Tajik) 2023-03-09 18:50:34 +03:00
Yury Pikhtarev
53e034bdcd New translations profile_send_email.html (Tajik) 2023-03-09 18:50:33 +03:00
Yury Pikhtarev
27fba2ac89 New translations privmsg_notify.html (Tajik) 2023-03-09 18:50:33 +03:00
Yury Pikhtarev
d700c1318c New translations group_request.html (Tajik) 2023-03-09 18:50:32 +03:00
Yury Pikhtarev
47ad224594 New translations group_approved.html (Tajik) 2023-03-09 18:50:30 +03:00
Yury Pikhtarev
8f5c040b80 New translations group_added.html (Tajik) 2023-03-09 18:50:30 +03:00
Yury Pikhtarev
d0f8ebc347 New translations admin_send_email.html (Tajik) 2023-03-09 18:50:28 +03:00
Yury Pikhtarev
cf913d1ddf New translations main.php (Tajik) 2023-03-09 18:50:27 +03:00
Yury Pikhtarev
1661967fd1 New translations user_agreement.html (Uzbek) 2023-03-09 18:50:17 +03:00
Yury Pikhtarev
0ee89b0ea1 New translations copyright_holders.html (Uzbek) 2023-03-09 18:50:14 +03:00
Yury Pikhtarev
c29797eadc New translations user_welcome_inactive.html (Uzbek) 2023-03-09 18:50:12 +03:00
Yury Pikhtarev
9de53e1b30 New translations user_welcome.html (Uzbek) 2023-03-09 18:50:11 +03:00
Yury Pikhtarev
248590c8d6 New translations user_activate_passwd.html (Uzbek) 2023-03-09 18:50:10 +03:00
Yury Pikhtarev
11dd8ed88c New translations user_activate.html (Uzbek) 2023-03-09 18:50:08 +03:00
Yury Pikhtarev
ad0809a37c New translations topic_notify.html (Uzbek) 2023-03-09 18:50:07 +03:00
Yury Pikhtarev
9c6d76ecfd New translations profile_send_email.html (Uzbek) 2023-03-09 18:50:06 +03:00
Yury Pikhtarev
16921094a9 New translations privmsg_notify.html (Uzbek) 2023-03-09 18:50:05 +03:00
Yury Pikhtarev
813340cf87 New translations group_request.html (Uzbek) 2023-03-09 18:50:04 +03:00
Yury Pikhtarev
e3fd4a93df New translations group_approved.html (Uzbek) 2023-03-09 18:50:03 +03:00
Yury Pikhtarev
0db8e85b2f New translations group_added.html (Uzbek) 2023-03-09 18:50:02 +03:00
Yury Pikhtarev
e741133f74 New translations admin_send_email.html (Uzbek) 2023-03-09 18:50:00 +03:00
Yury Pikhtarev
e8b128c783 New translations main.php (Uzbek) 2023-03-09 18:49:59 +03:00
Roman Kelesidis
533a2a0fbd
Merge pull request #586 from torrentpier/fixed-get_avatar-method
Fixed get_avatar method
2023-03-09 22:49:57 +07:00
Yury Pikhtarev
39f379a7ce New translations user_agreement.html (Bosnian) 2023-03-09 18:49:49 +03:00
Yury Pikhtarev
9fd441d3ba New translations copyright_holders.html (Bosnian) 2023-03-09 18:49:46 +03:00
Yury Pikhtarev
541d3c425f New translations user_welcome_inactive.html (Bosnian) 2023-03-09 18:49:45 +03:00
Yury Pikhtarev
de0cf08db2 New translations user_welcome.html (Bosnian) 2023-03-09 18:49:44 +03:00
Yury Pikhtarev
b696187d04 New translations user_activate_passwd.html (Bosnian) 2023-03-09 18:49:43 +03:00
Yury Pikhtarev
ec5f842e02 New translations user_activate.html (Bosnian) 2023-03-09 18:49:42 +03:00
Yury Pikhtarev
02177c596c New translations topic_notify.html (Bosnian) 2023-03-09 18:49:41 +03:00
Yury Pikhtarev
abaa9fa64a New translations profile_send_email.html (Bosnian) 2023-03-09 18:49:41 +03:00
Yury Pikhtarev
07426b054b New translations privmsg_notify.html (Bosnian) 2023-03-09 18:49:40 +03:00
Yury Pikhtarev
b7ce2c5743 New translations group_request.html (Bosnian) 2023-03-09 18:49:39 +03:00
Yury Pikhtarev
1a878a950e New translations group_approved.html (Bosnian) 2023-03-09 18:49:38 +03:00
Yury Pikhtarev
2390793ee4 New translations group_added.html (Bosnian) 2023-03-09 18:49:37 +03:00
Yury Pikhtarev
ad066c1d4c New translations admin_send_email.html (Bosnian) 2023-03-09 18:49:36 +03:00
Yury Pikhtarev
95df1d5a9c New translations main.php (Bosnian) 2023-03-09 18:49:35 +03:00
Roman Kelesidis
adfb27ecdf Fixed get_avatar method 2023-03-09 22:49:28 +07:00
Yury Pikhtarev
f8ed4a32ca New translations user_agreement.html (Hindi) 2023-03-09 18:49:26 +03:00
Yury Pikhtarev
87dec794f9 New translations copyright_holders.html (Hindi) 2023-03-09 18:49:23 +03:00
Yury Pikhtarev
41cea683af New translations user_welcome_inactive.html (Hindi) 2023-03-09 18:49:22 +03:00
Yury Pikhtarev
0bf5e9cfc5 New translations user_welcome.html (Hindi) 2023-03-09 18:49:21 +03:00
Yury Pikhtarev
0e81527526 New translations user_activate_passwd.html (Hindi) 2023-03-09 18:49:20 +03:00
Yury Pikhtarev
d3c8878586 New translations user_activate.html (Hindi) 2023-03-09 18:49:19 +03:00
Yury Pikhtarev
552e8954b1 New translations topic_notify.html (Hindi) 2023-03-09 18:49:18 +03:00
Yury Pikhtarev
5bd1a5ca11 New translations profile_send_email.html (Hindi) 2023-03-09 18:49:16 +03:00
Yury Pikhtarev
60538c6a07 New translations privmsg_notify.html (Hindi) 2023-03-09 18:49:15 +03:00
Yury Pikhtarev
1a45d75b17 New translations group_request.html (Hindi) 2023-03-09 18:49:14 +03:00
Yury Pikhtarev
417227348f New translations group_approved.html (Hindi) 2023-03-09 18:49:13 +03:00
Yury Pikhtarev
a058841d2f New translations group_added.html (Hindi) 2023-03-09 18:49:12 +03:00
Yury Pikhtarev
6f3e3804b0 New translations admin_send_email.html (Hindi) 2023-03-09 18:49:11 +03:00
Yury Pikhtarev
143ba11b73 New translations main.php (Hindi) 2023-03-09 18:49:09 +03:00
Yury Pikhtarev
1779beb3f6 New translations user_agreement.html (Azerbaijani) 2023-03-09 18:48:59 +03:00
Yury Pikhtarev
0ca9b8e22b New translations copyright_holders.html (Azerbaijani) 2023-03-09 18:48:56 +03:00
Yury Pikhtarev
78241c8609 New translations user_welcome_inactive.html (Azerbaijani) 2023-03-09 18:48:55 +03:00
Yury Pikhtarev
bbf7a93401 New translations user_welcome.html (Azerbaijani) 2023-03-09 18:48:54 +03:00
Yury Pikhtarev
748bd90a09 New translations user_activate_passwd.html (Azerbaijani) 2023-03-09 18:48:53 +03:00
Yury Pikhtarev
0b38a852ab New translations user_activate.html (Azerbaijani) 2023-03-09 18:48:52 +03:00
Yury Pikhtarev
747bd32712 New translations topic_notify.html (Azerbaijani) 2023-03-09 18:48:51 +03:00
Yury Pikhtarev
74e2213b46 New translations profile_send_email.html (Azerbaijani) 2023-03-09 18:48:48 +03:00
Yury Pikhtarev
d1f481b9a2 New translations privmsg_notify.html (Azerbaijani) 2023-03-09 18:48:47 +03:00
Yury Pikhtarev
a4b7343990 New translations group_request.html (Azerbaijani) 2023-03-09 18:48:46 +03:00
Yury Pikhtarev
f4e76fbb7c New translations group_approved.html (Azerbaijani) 2023-03-09 18:48:45 +03:00
Yury Pikhtarev
491b552ec7 New translations group_added.html (Azerbaijani) 2023-03-09 18:48:43 +03:00
Yury Pikhtarev
7cdadfb48c New translations admin_send_email.html (Azerbaijani) 2023-03-09 18:48:42 +03:00
Yury Pikhtarev
c9b420bc13 New translations main.php (Azerbaijani) 2023-03-09 18:48:41 +03:00
Yury Pikhtarev
9cbc422a11 New translations user_agreement.html (Latvian) 2023-03-09 18:48:32 +03:00
Yury Pikhtarev
324a356b22 New translations copyright_holders.html (Latvian) 2023-03-09 18:48:29 +03:00
Yury Pikhtarev
7d40b15bd4 New translations user_welcome_inactive.html (Latvian) 2023-03-09 18:48:27 +03:00
Yury Pikhtarev
37d855e21b New translations user_welcome.html (Latvian) 2023-03-09 18:48:24 +03:00
Yury Pikhtarev
650d0da7cf New translations user_activate_passwd.html (Latvian) 2023-03-09 18:48:23 +03:00
Yury Pikhtarev
3d199f425b New translations user_activate.html (Latvian) 2023-03-09 18:48:22 +03:00
Yury Pikhtarev
ba54fa5b3a New translations topic_notify.html (Latvian) 2023-03-09 18:48:21 +03:00
Yury Pikhtarev
d145512c1c New translations profile_send_email.html (Latvian) 2023-03-09 18:48:20 +03:00
Yury Pikhtarev
e3c99ce811 New translations privmsg_notify.html (Latvian) 2023-03-09 18:48:19 +03:00
Yury Pikhtarev
2e2a5a39a6 New translations group_request.html (Latvian) 2023-03-09 18:48:18 +03:00
Yury Pikhtarev
3767b8bad1 New translations group_approved.html (Latvian) 2023-03-09 18:48:16 +03:00
Yury Pikhtarev
d301fe27b2 New translations group_added.html (Latvian) 2023-03-09 18:48:15 +03:00
Yury Pikhtarev
84466ead6e New translations admin_send_email.html (Latvian) 2023-03-09 18:48:13 +03:00
Yury Pikhtarev
9ef10eba16 New translations main.php (Latvian) 2023-03-09 18:48:12 +03:00
Yury Pikhtarev
2dd1449f43 New translations user_agreement.html (Estonian) 2023-03-09 18:48:02 +03:00
Yury Pikhtarev
83e24763a2 New translations copyright_holders.html (Estonian) 2023-03-09 18:47:59 +03:00
Yury Pikhtarev
8c510f8cf9 New translations user_welcome_inactive.html (Estonian) 2023-03-09 18:47:56 +03:00
Yury Pikhtarev
7d0f50c035 New translations user_welcome.html (Estonian) 2023-03-09 18:47:55 +03:00
Yury Pikhtarev
476ea37173 New translations user_activate_passwd.html (Estonian) 2023-03-09 18:47:53 +03:00
Yury Pikhtarev
b284d680a3 New translations user_activate.html (Estonian) 2023-03-09 18:47:51 +03:00
Yury Pikhtarev
9862d1307d New translations topic_notify.html (Estonian) 2023-03-09 18:47:50 +03:00
Yury Pikhtarev
0fd0dd9fe4 New translations profile_send_email.html (Estonian) 2023-03-09 18:47:49 +03:00
Yury Pikhtarev
3649750e8c New translations privmsg_notify.html (Estonian) 2023-03-09 18:47:49 +03:00
Yury Pikhtarev
ba9bca9c40 New translations group_request.html (Estonian) 2023-03-09 18:47:48 +03:00
Yury Pikhtarev
7369d51272 New translations group_approved.html (Estonian) 2023-03-09 18:47:47 +03:00
Yury Pikhtarev
0d7b88cd92 New translations group_added.html (Estonian) 2023-03-09 18:47:46 +03:00
Yury Pikhtarev
a7bcbe6efb New translations admin_send_email.html (Estonian) 2023-03-09 18:47:44 +03:00
Yury Pikhtarev
d3f511060b New translations main.php (Estonian) 2023-03-09 18:47:43 +03:00
Yury Pikhtarev
f7f97b54dd New translations user_agreement.html (Croatian) 2023-03-09 18:47:34 +03:00
Yury Pikhtarev
a4a139ddb5 New translations copyright_holders.html (Croatian) 2023-03-09 18:47:31 +03:00
Yury Pikhtarev
995d199e57 New translations user_welcome_inactive.html (Croatian) 2023-03-09 18:47:29 +03:00
Yury Pikhtarev
ce5ddb08d5 New translations user_welcome.html (Croatian) 2023-03-09 18:47:28 +03:00
Yury Pikhtarev
899d70eb3e New translations user_activate_passwd.html (Croatian) 2023-03-09 18:47:27 +03:00
Yury Pikhtarev
ad8c53ae58 New translations user_activate.html (Croatian) 2023-03-09 18:47:26 +03:00
Yury Pikhtarev
7c69b83ec3 New translations topic_notify.html (Croatian) 2023-03-09 18:47:25 +03:00
Yury Pikhtarev
6440d63aed New translations profile_send_email.html (Croatian) 2023-03-09 18:47:22 +03:00
Yury Pikhtarev
c74109febc New translations privmsg_notify.html (Croatian) 2023-03-09 18:47:21 +03:00
Yury Pikhtarev
784bf6888b New translations group_request.html (Croatian) 2023-03-09 18:47:20 +03:00
Yury Pikhtarev
3196081802 New translations group_approved.html (Croatian) 2023-03-09 18:47:18 +03:00
Yury Pikhtarev
799dbe6a70 New translations group_added.html (Croatian) 2023-03-09 18:47:17 +03:00
Yury Pikhtarev
2d5723567d New translations admin_send_email.html (Croatian) 2023-03-09 18:47:15 +03:00
Yury Pikhtarev
3c62af3434 New translations main.php (Croatian) 2023-03-09 18:47:13 +03:00
Yury Pikhtarev
8f4658c1cc New translations user_agreement.html (Thai) 2023-03-09 18:47:04 +03:00
Yury Pikhtarev
653f4e6a0f New translations sidebar1.html (Thai) 2023-03-09 18:47:01 +03:00
Yury Pikhtarev
7293be7546 New translations copyright_holders.html (Thai) 2023-03-09 18:47:00 +03:00
Yury Pikhtarev
7fed08f798 New translations advert.html (Thai) 2023-03-09 18:46:59 +03:00
Yury Pikhtarev
fee5dc3bb8 New translations user_welcome_inactive.html (Thai) 2023-03-09 18:46:58 +03:00
Yury Pikhtarev
584734e176 New translations user_welcome.html (Thai) 2023-03-09 18:46:57 +03:00
Yury Pikhtarev
37b0c6d4d9 New translations user_activate_passwd.html (Thai) 2023-03-09 18:46:56 +03:00
Yury Pikhtarev
cfa48b24ee New translations user_activate.html (Thai) 2023-03-09 18:46:55 +03:00
Yury Pikhtarev
f890a52689 New translations topic_notify.html (Thai) 2023-03-09 18:46:54 +03:00
Yury Pikhtarev
99ad867314 New translations profile_send_email.html (Thai) 2023-03-09 18:46:53 +03:00
Yury Pikhtarev
80c949945b New translations privmsg_notify.html (Thai) 2023-03-09 18:46:52 +03:00
Yury Pikhtarev
9cdea21537 New translations group_request.html (Thai) 2023-03-09 18:46:51 +03:00
Yury Pikhtarev
74a004cc87 New translations group_approved.html (Thai) 2023-03-09 18:46:50 +03:00
Yury Pikhtarev
965076f554 New translations group_added.html (Thai) 2023-03-09 18:46:48 +03:00
Yury Pikhtarev
5942be5ae2 New translations main.php (Thai) 2023-03-09 18:46:46 +03:00
Yury Pikhtarev
fd5191b5c1 New translations user_agreement.html (Indonesian) 2023-03-09 18:46:36 +03:00
Yury Pikhtarev
9bb20c3f93 New translations copyright_holders.html (Indonesian) 2023-03-09 18:46:33 +03:00
Yury Pikhtarev
3fc721f839 New translations user_welcome_inactive.html (Indonesian) 2023-03-09 18:46:31 +03:00
Yury Pikhtarev
cedda34a96 New translations user_welcome.html (Indonesian) 2023-03-09 18:46:30 +03:00
Yury Pikhtarev
80d44b4dd0 New translations user_activate_passwd.html (Indonesian) 2023-03-09 18:46:28 +03:00
Yury Pikhtarev
a39390cfbc New translations user_activate.html (Indonesian) 2023-03-09 18:46:28 +03:00
Yury Pikhtarev
c8f55eea94 New translations topic_notify.html (Indonesian) 2023-03-09 18:46:27 +03:00
Yury Pikhtarev
98d118e111 New translations profile_send_email.html (Indonesian) 2023-03-09 18:46:26 +03:00
Yury Pikhtarev
50fd740a7a New translations privmsg_notify.html (Indonesian) 2023-03-09 18:46:25 +03:00
Yury Pikhtarev
7e2da3b51c New translations group_request.html (Indonesian) 2023-03-09 18:46:24 +03:00
Yury Pikhtarev
5bcc44881c New translations group_approved.html (Indonesian) 2023-03-09 18:46:23 +03:00
Yury Pikhtarev
82379105fb New translations group_added.html (Indonesian) 2023-03-09 18:46:20 +03:00
Yury Pikhtarev
74203faab6 New translations admin_send_email.html (Indonesian) 2023-03-09 18:46:19 +03:00
Yury Pikhtarev
5909ab2e1c New translations main.php (Indonesian) 2023-03-09 18:46:17 +03:00
Yury Pikhtarev
2c25f86b90 New translations user_agreement.html (Albanian) 2023-03-09 18:46:06 +03:00
Yury Pikhtarev
977a670e42 New translations copyright_holders.html (Albanian) 2023-03-09 18:46:03 +03:00
Yury Pikhtarev
9eced8288a New translations user_welcome_inactive.html (Albanian) 2023-03-09 18:46:02 +03:00
Yury Pikhtarev
ba54cf3f46 New translations user_welcome.html (Albanian) 2023-03-09 18:46:01 +03:00
Yury Pikhtarev
a5e84b2881 New translations user_activate_passwd.html (Albanian) 2023-03-09 18:46:00 +03:00
Yury Pikhtarev
41975a1b42 New translations user_activate.html (Albanian) 2023-03-09 18:45:58 +03:00
Yury Pikhtarev
3df1fe0b0c New translations topic_notify.html (Albanian) 2023-03-09 18:45:57 +03:00
Yury Pikhtarev
bd90848fdd New translations profile_send_email.html (Albanian) 2023-03-09 18:45:56 +03:00
Yury Pikhtarev
21dd3bd105 New translations privmsg_notify.html (Albanian) 2023-03-09 18:45:55 +03:00
Yury Pikhtarev
1bd2b3a0cf New translations group_request.html (Albanian) 2023-03-09 18:45:54 +03:00
Yury Pikhtarev
64236e63bc New translations group_approved.html (Albanian) 2023-03-09 18:45:53 +03:00
Yury Pikhtarev
96cc9b2d60 New translations group_added.html (Albanian) 2023-03-09 18:45:52 +03:00
Yury Pikhtarev
0833af5b45 New translations admin_send_email.html (Albanian) 2023-03-09 18:45:51 +03:00
Yury Pikhtarev
1f25178bb7 New translations main.php (Albanian) 2023-03-09 18:45:50 +03:00
Yury Pikhtarev
c0085d846f New translations user_agreement.html (Slovenian) 2023-03-09 18:45:40 +03:00
Yury Pikhtarev
0f96e52c4b New translations copyright_holders.html (Slovenian) 2023-03-09 18:45:37 +03:00
Yury Pikhtarev
85039955b6 New translations user_welcome_inactive.html (Slovenian) 2023-03-09 18:45:35 +03:00
Yury Pikhtarev
e340f6697c New translations user_welcome.html (Slovenian) 2023-03-09 18:45:35 +03:00
Yury Pikhtarev
87e05c32dd New translations user_activate_passwd.html (Slovenian) 2023-03-09 18:45:34 +03:00
Yury Pikhtarev
5cdef00fd7 New translations user_activate.html (Slovenian) 2023-03-09 18:45:32 +03:00
Yury Pikhtarev
84429222ce New translations topic_notify.html (Slovenian) 2023-03-09 18:45:31 +03:00
Yury Pikhtarev
4416881908 New translations profile_send_email.html (Slovenian) 2023-03-09 18:45:29 +03:00
Yury Pikhtarev
ca4c8a8f01 New translations privmsg_notify.html (Slovenian) 2023-03-09 18:45:29 +03:00
Yury Pikhtarev
7bb9bfbbb2 New translations group_request.html (Slovenian) 2023-03-09 18:45:28 +03:00
Yury Pikhtarev
280ed60e7c New translations group_approved.html (Slovenian) 2023-03-09 18:45:27 +03:00
Yury Pikhtarev
b16c76997a New translations group_added.html (Slovenian) 2023-03-09 18:45:26 +03:00
Yury Pikhtarev
63b272bed2 New translations admin_send_email.html (Slovenian) 2023-03-09 18:45:24 +03:00
Yury Pikhtarev
f7c1d316dc New translations main.php (Slovenian) 2023-03-09 18:45:23 +03:00
Yury Pikhtarev
a047eef89b New translations user_agreement.html (Slovak) 2023-03-09 18:45:13 +03:00
Yury Pikhtarev
b295fd050b New translations copyright_holders.html (Slovak) 2023-03-09 18:45:10 +03:00
Yury Pikhtarev
e8463b0bef New translations user_welcome_inactive.html (Slovak) 2023-03-09 18:45:09 +03:00
Yury Pikhtarev
260135c390 New translations user_welcome.html (Slovak) 2023-03-09 18:45:07 +03:00
Yury Pikhtarev
678b338648 New translations user_activate_passwd.html (Slovak) 2023-03-09 18:45:06 +03:00
Yury Pikhtarev
619ab6969e New translations user_activate.html (Slovak) 2023-03-09 18:45:05 +03:00
Yury Pikhtarev
dcc7d4d47f New translations topic_notify.html (Slovak) 2023-03-09 18:45:04 +03:00
Yury Pikhtarev
710d671eea New translations profile_send_email.html (Slovak) 2023-03-09 18:45:03 +03:00
Yury Pikhtarev
2b17ebf778 New translations privmsg_notify.html (Slovak) 2023-03-09 18:45:02 +03:00
Yury Pikhtarev
f6a840e13a New translations group_request.html (Slovak) 2023-03-09 18:45:01 +03:00
Yury Pikhtarev
b4bcda5279 New translations group_approved.html (Slovak) 2023-03-09 18:45:00 +03:00
Yury Pikhtarev
7528a521de New translations group_added.html (Slovak) 2023-03-09 18:44:59 +03:00
Yury Pikhtarev
b5ca30ca67 New translations admin_send_email.html (Slovak) 2023-03-09 18:44:57 +03:00
Yury Pikhtarev
ff99efc722 New translations main.php (Slovak) 2023-03-09 18:44:56 +03:00
Yury Pikhtarev
6259e6397a New translations user_agreement.html (Lithuanian) 2023-03-09 18:44:46 +03:00
Yury Pikhtarev
46ac2e7e00 New translations copyright_holders.html (Lithuanian) 2023-03-09 18:44:43 +03:00
Yury Pikhtarev
3793d9ec91 New translations user_welcome_inactive.html (Lithuanian) 2023-03-09 18:44:41 +03:00
Yury Pikhtarev
07e4e5ff8a New translations user_welcome.html (Lithuanian) 2023-03-09 18:44:40 +03:00
Yury Pikhtarev
6b3706331c New translations user_activate_passwd.html (Lithuanian) 2023-03-09 18:44:39 +03:00
Yury Pikhtarev
3facddc1fc New translations user_activate.html (Lithuanian) 2023-03-09 18:44:39 +03:00
Yury Pikhtarev
341947c088 New translations topic_notify.html (Lithuanian) 2023-03-09 18:44:38 +03:00
Yury Pikhtarev
d957c173c3 New translations profile_send_email.html (Lithuanian) 2023-03-09 18:44:37 +03:00
Yury Pikhtarev
434cc3a08c New translations privmsg_notify.html (Lithuanian) 2023-03-09 18:44:36 +03:00
Yury Pikhtarev
c9d76808e5 New translations group_request.html (Lithuanian) 2023-03-09 18:44:35 +03:00
Yury Pikhtarev
43f76b0fee New translations group_approved.html (Lithuanian) 2023-03-09 18:44:34 +03:00
Yury Pikhtarev
8f9afa760c New translations group_added.html (Lithuanian) 2023-03-09 18:44:33 +03:00
Yury Pikhtarev
b44061dc4e New translations admin_send_email.html (Lithuanian) 2023-03-09 18:44:32 +03:00
Yury Pikhtarev
b9f86e87e4 New translations main.php (Lithuanian) 2023-03-09 18:44:30 +03:00
Yury Pikhtarev
db4215e643 New translations user_agreement.html (Georgian) 2023-03-09 18:44:21 +03:00
Yury Pikhtarev
6cc8963878 New translations copyright_holders.html (Georgian) 2023-03-09 18:44:18 +03:00
Yury Pikhtarev
a457e18c2c New translations user_welcome_inactive.html (Georgian) 2023-03-09 18:44:16 +03:00
Yury Pikhtarev
3ddbe11f01 New translations user_welcome.html (Georgian) 2023-03-09 18:44:16 +03:00
Yury Pikhtarev
13990ab909 New translations user_activate_passwd.html (Georgian) 2023-03-09 18:44:15 +03:00
Yury Pikhtarev
e6dc94a49f New translations user_activate.html (Georgian) 2023-03-09 18:44:13 +03:00
Yury Pikhtarev
bb6de98358 New translations topic_notify.html (Georgian) 2023-03-09 18:44:12 +03:00
Yury Pikhtarev
5ec5a60870 New translations profile_send_email.html (Georgian) 2023-03-09 18:44:11 +03:00
Yury Pikhtarev
1fb8500671 New translations privmsg_notify.html (Georgian) 2023-03-09 18:44:11 +03:00
Yury Pikhtarev
b44b317951 New translations group_request.html (Georgian) 2023-03-09 18:44:10 +03:00
Yury Pikhtarev
7a461cb446 New translations group_approved.html (Georgian) 2023-03-09 18:44:08 +03:00
Yury Pikhtarev
c23fd5cdbe New translations group_added.html (Georgian) 2023-03-09 18:44:07 +03:00
Yury Pikhtarev
444bcdd675 New translations admin_send_email.html (Georgian) 2023-03-09 18:44:06 +03:00
Yury Pikhtarev
5202b07b4e New translations main.php (Georgian) 2023-03-09 18:44:05 +03:00
Yury Pikhtarev
7c6e699cdf New translations user_agreement.html (Armenian) 2023-03-09 18:43:55 +03:00
Yury Pikhtarev
69ed6543c6 New translations copyright_holders.html (Armenian) 2023-03-09 18:43:52 +03:00
Yury Pikhtarev
351c2eaee1 New translations user_welcome_inactive.html (Armenian) 2023-03-09 18:43:51 +03:00
Yury Pikhtarev
b0f08987a3 New translations user_welcome.html (Armenian) 2023-03-09 18:43:50 +03:00
Yury Pikhtarev
7739c4b436 New translations user_activate_passwd.html (Armenian) 2023-03-09 18:43:49 +03:00
Yury Pikhtarev
b4146048f7 New translations user_activate.html (Armenian) 2023-03-09 18:43:48 +03:00
Yury Pikhtarev
f16bfaeffa New translations topic_notify.html (Armenian) 2023-03-09 18:43:47 +03:00
Yury Pikhtarev
4a50f280ff New translations profile_send_email.html (Armenian) 2023-03-09 18:43:46 +03:00
Yury Pikhtarev
b833edffb9 New translations privmsg_notify.html (Armenian) 2023-03-09 18:43:45 +03:00
Yury Pikhtarev
44bb0ff8eb New translations group_request.html (Armenian) 2023-03-09 18:43:44 +03:00
Yury Pikhtarev
0abe26928d New translations group_approved.html (Armenian) 2023-03-09 18:43:43 +03:00
Yury Pikhtarev
45ef1724b0 New translations group_added.html (Armenian) 2023-03-09 18:43:42 +03:00
Yury Pikhtarev
ce435c525b New translations admin_send_email.html (Armenian) 2023-03-09 18:43:40 +03:00
Yury Pikhtarev
bc85c1c689 New translations main.php (Armenian) 2023-03-09 18:43:39 +03:00
Yury Pikhtarev
01bcfccee3 New translations user_agreement.html (Bulgarian) 2023-03-09 18:43:29 +03:00
Yury Pikhtarev
057f2b8981 New translations copyright_holders.html (Bulgarian) 2023-03-09 18:43:22 +03:00
Yury Pikhtarev
f1ffb77ca2 New translations user_welcome_inactive.html (Bulgarian) 2023-03-09 18:43:20 +03:00
Yury Pikhtarev
e8beb81b27 New translations user_welcome.html (Bulgarian) 2023-03-09 18:43:19 +03:00
Yury Pikhtarev
f734c20375 New translations user_activate_passwd.html (Bulgarian) 2023-03-09 18:43:18 +03:00
Yury Pikhtarev
ad3546064d New translations user_activate.html (Bulgarian) 2023-03-09 18:43:17 +03:00
Yury Pikhtarev
8a0ad78126 New translations topic_notify.html (Bulgarian) 2023-03-09 18:43:17 +03:00
Yury Pikhtarev
6f3d5a309d New translations profile_send_email.html (Bulgarian) 2023-03-09 18:43:15 +03:00
Yury Pikhtarev
54d1a08d5f New translations privmsg_notify.html (Bulgarian) 2023-03-09 18:43:15 +03:00
Yury Pikhtarev
cc81588a9d New translations group_request.html (Bulgarian) 2023-03-09 18:43:13 +03:00
Yury Pikhtarev
c482aa41eb New translations group_approved.html (Bulgarian) 2023-03-09 18:43:12 +03:00
Yury Pikhtarev
ef3c8de728 New translations group_added.html (Bulgarian) 2023-03-09 18:43:12 +03:00
Yury Pikhtarev
5debe7b502 New translations admin_send_email.html (Bulgarian) 2023-03-09 18:43:10 +03:00
Yury Pikhtarev
5a4c38cc87 New translations main.php (Bulgarian) 2023-03-09 18:43:09 +03:00
Roman Kelesidis
63222c48ac
Merge pull request #585 from torrentpier/make-sitemap-sending-configurable
Make sitemap sending configurable
2023-03-09 22:39:36 +07:00
Roman Kelesidis
1b443d6f6a Make sitemap sending configurable 2023-03-09 22:39:07 +07:00
Yury Pikhtarev
422d16bee1 New translations main.php (Russian) 2023-03-09 18:37:27 +03:00
Roman Kelesidis
184398d7c1
Merge pull request #584 from torrentpier/minor-adjustments
Minor adjustments #580
2023-03-09 22:27:43 +07:00
Roman Kelesidis
612093fb2a Minor adjustments #580 2023-03-09 22:26:31 +07:00
Yury Pikhtarev
462ccb7a91 New translations user_agreement.html (Russian) 2023-03-09 16:19:28 +03:00
Yury Pikhtarev
f78b7bbeaf New translations admin_send_email.html (Ukrainian) 2023-03-09 16:14:10 +03:00
Yury Pikhtarev
11c9f590dd New translations main.php (Russian) 2023-03-09 16:13:44 +03:00
Roman Kelesidis
fdebe81abf
Merge pull request #579 from torrentpier/fixed-broken-user-viewonline-admincp
Fixed broken "user_viewonline" in admin panel
2023-03-09 18:01:06 +07:00
Roman Kelesidis
49508c1d3c Fixed broken "user_viewonline" in admin panel 2023-03-09 18:00:08 +07:00
Roman Kelesidis
7d9f1a968e
Merge pull request #578 from torrentpier/bugfix/create-cache-file-for-template
Fixed checking exists a file to create a cache
2023-03-09 16:31:31 +07:00
Roman Kelesidis
2bc28aa29f Fixed checking exists a file to create a cache
https: //github.com/torrentpier/torrentpier/pull/481
Co-Authored-By: Vasily Komrakov <425040+diolektor@users.noreply.github.com>
2023-03-09 16:30:55 +07:00
Roman Kelesidis
6a4ee4e238 Revert "Fixed broken file_write() function"
This reverts commit 4a65e1af02.
2023-03-09 16:24:32 +07:00
Yury Pikhtarev
b3742bf15d New translations user_agreement.html (Kazakh) 2023-03-08 14:28:20 +03:00
Yury Pikhtarev
440097db55 New translations user_agreement.html (Portuguese, Brazilian) 2023-03-08 14:28:19 +03:00
Yury Pikhtarev
3ce47c9b07 New translations user_agreement.html (Vietnamese) 2023-03-08 14:28:19 +03:00
Yury Pikhtarev
c7c2326944 New translations user_agreement.html (Chinese Traditional) 2023-03-08 14:28:17 +03:00
Yury Pikhtarev
8a52fba2e8 New translations user_agreement.html (Chinese Simplified) 2023-03-08 14:28:16 +03:00
Yury Pikhtarev
1092adf81b New translations user_agreement.html (Ukrainian) 2023-03-08 14:28:15 +03:00
Yury Pikhtarev
c6b509c834 New translations user_agreement.html (Turkish) 2023-03-08 14:28:14 +03:00
Yury Pikhtarev
e7257b75dd New translations user_agreement.html (Swedish) 2023-03-08 14:28:13 +03:00
Yury Pikhtarev
22e059fe9c New translations user_agreement.html (Serbian (Cyrillic)) 2023-03-08 14:28:12 +03:00
Yury Pikhtarev
defb9f3ff2 New translations user_agreement.html (Russian) 2023-03-08 14:28:12 +03:00
Yury Pikhtarev
d0b79c0af7 New translations user_agreement.html (Portuguese) 2023-03-08 14:28:11 +03:00
Yury Pikhtarev
9aab4df641 New translations user_agreement.html (Polish) 2023-03-08 14:28:10 +03:00
Yury Pikhtarev
c3cac7ff22 New translations user_agreement.html (Norwegian) 2023-03-08 14:28:09 +03:00
Yury Pikhtarev
101d669c1f New translations user_agreement.html (Dutch) 2023-03-08 14:28:08 +03:00
Yury Pikhtarev
2647df843b New translations user_agreement.html (Korean) 2023-03-08 14:28:07 +03:00
Yury Pikhtarev
2c7d5f491b New translations user_agreement.html (Japanese) 2023-03-08 14:28:06 +03:00
Yury Pikhtarev
789e206964 New translations user_agreement.html (Italian) 2023-03-08 14:28:05 +03:00
Yury Pikhtarev
0b39acb6e7 New translations user_agreement.html (Hungarian) 2023-03-08 14:28:04 +03:00
Yury Pikhtarev
c01452b04e New translations user_agreement.html (Hebrew) 2023-03-08 14:28:03 +03:00
Yury Pikhtarev
2b3bfa4224 New translations user_agreement.html (Finnish) 2023-03-08 14:28:02 +03:00
Yury Pikhtarev
b5fffeee42 New translations user_agreement.html (Greek) 2023-03-08 14:28:01 +03:00
Yury Pikhtarev
f3626af967 New translations user_agreement.html (German) 2023-03-08 14:28:00 +03:00
Yury Pikhtarev
99cba8a707 New translations user_agreement.html (Danish) 2023-03-08 14:28:00 +03:00
Yury Pikhtarev
6ad9848525 New translations user_agreement.html (Czech) 2023-03-08 14:27:59 +03:00
Yury Pikhtarev
d8bb99598f New translations user_agreement.html (Catalan) 2023-03-08 14:27:58 +03:00
Yury Pikhtarev
b2867e23d0 New translations user_agreement.html (Belarusian) 2023-03-08 14:27:57 +03:00
Yury Pikhtarev
6083943488 New translations user_agreement.html (Arabic) 2023-03-08 14:27:56 +03:00
Yury Pikhtarev
3f443fa4b7 New translations user_agreement.html (Afrikaans) 2023-03-08 14:27:55 +03:00
Yury Pikhtarev
dc17eebef6 New translations user_agreement.html (Romanian) 2023-03-08 14:27:53 +03:00
Yury Pikhtarev
01c60cc17f New translations sidebar2.html (Portuguese, Brazilian) 2023-03-08 14:27:51 +03:00
Yury Pikhtarev
a0709b1581 New translations sidebar2.html (Chinese Traditional) 2023-03-08 14:27:49 +03:00
Yury Pikhtarev
06f4810094 New translations sidebar2.html (Chinese Simplified) 2023-03-08 14:27:48 +03:00
Yury Pikhtarev
6828642ab2 New translations sidebar2.html (Portuguese) 2023-03-08 14:27:45 +03:00
Yury Pikhtarev
5b936d275d New translations sidebar2.html (Polish) 2023-03-08 14:27:44 +03:00
Yury Pikhtarev
c51f477424 New translations sidebar2.html (Italian) 2023-03-08 14:27:41 +03:00
Yury Pikhtarev
db739d96ba New translations sidebar2.html (Spanish) 2023-03-08 14:27:33 +03:00
Yury Pikhtarev
7893fc3828 New translations sidebar2.html (French) 2023-03-08 14:27:32 +03:00
Yury Pikhtarev
6584e22a4d New translations sidebar1.html (Portuguese, Brazilian) 2023-03-08 14:27:30 +03:00
Yury Pikhtarev
0019c5a3c2 New translations sidebar1.html (Chinese Traditional) 2023-03-08 14:27:28 +03:00
Yury Pikhtarev
8dd6709bbd New translations sidebar1.html (Chinese Simplified) 2023-03-08 14:27:27 +03:00
Yury Pikhtarev
54414fae62 New translations sidebar1.html (Turkish) 2023-03-08 14:27:26 +03:00
Yury Pikhtarev
7fed777a9d New translations sidebar1.html (Russian) 2023-03-08 14:27:24 +03:00
Yury Pikhtarev
a07205c461 New translations sidebar1.html (Portuguese) 2023-03-08 14:27:23 +03:00
Yury Pikhtarev
a89085ab4a New translations sidebar1.html (Japanese) 2023-03-08 14:27:20 +03:00
Yury Pikhtarev
9143d5c30c New translations sidebar1.html (Greek) 2023-03-08 14:27:17 +03:00
Yury Pikhtarev
434b6362db New translations sidebar1.html (Arabic) 2023-03-08 14:27:13 +03:00
Yury Pikhtarev
4176e8f34d New translations not_found.html (Portuguese, Brazilian) 2023-03-08 14:27:09 +03:00
Yury Pikhtarev
15b0beedad New translations not_found.html (Chinese Traditional) 2023-03-08 14:27:07 +03:00
Yury Pikhtarev
d2b066f31d New translations not_found.html (Chinese Simplified) 2023-03-08 14:27:06 +03:00
Yury Pikhtarev
0bb6259434 New translations not_found.html (Portuguese) 2023-03-08 14:27:02 +03:00
Yury Pikhtarev
33a62d1d7c New translations copyright_holders.html (Kazakh) 2023-03-08 14:26:51 +03:00
Yury Pikhtarev
9f722ba472 New translations copyright_holders.html (Portuguese, Brazilian) 2023-03-08 14:26:50 +03:00
Yury Pikhtarev
44b5dfb0f2 New translations copyright_holders.html (Vietnamese) 2023-03-08 14:26:49 +03:00
Yury Pikhtarev
dd8a1eff4d New translations copyright_holders.html (Chinese Traditional) 2023-03-08 14:26:47 +03:00
Yury Pikhtarev
a857f4d186 New translations copyright_holders.html (Chinese Simplified) 2023-03-08 14:26:47 +03:00
Yury Pikhtarev
398192eaf1 New translations copyright_holders.html (Ukrainian) 2023-03-08 14:26:36 +03:00
Yury Pikhtarev
47a7d804e0 New translations copyright_holders.html (Turkish) 2023-03-08 14:26:35 +03:00
Yury Pikhtarev
94f5af9802 New translations copyright_holders.html (Swedish) 2023-03-08 14:26:34 +03:00
Yury Pikhtarev
99b808fba8 New translations copyright_holders.html (Serbian (Cyrillic)) 2023-03-08 14:26:33 +03:00
Yury Pikhtarev
917456efa9 New translations copyright_holders.html (Portuguese) 2023-03-08 14:26:32 +03:00
Yury Pikhtarev
d3157579b9 New translations copyright_holders.html (Polish) 2023-03-08 14:26:31 +03:00
Yury Pikhtarev
a9125f811b New translations copyright_holders.html (Norwegian) 2023-03-08 14:26:30 +03:00
Yury Pikhtarev
fc33ee8986 New translations copyright_holders.html (Italian) 2023-03-08 14:26:27 +03:00
Yury Pikhtarev
4e654606c6 New translations copyright_holders.html (Hungarian) 2023-03-08 14:26:26 +03:00
Yury Pikhtarev
d6a55b819b New translations copyright_holders.html (Hebrew) 2023-03-08 14:26:26 +03:00
Yury Pikhtarev
099f4c2217 New translations copyright_holders.html (Finnish) 2023-03-08 14:26:25 +03:00
Yury Pikhtarev
35764e20b1 New translations copyright_holders.html (Greek) 2023-03-08 14:26:24 +03:00
Yury Pikhtarev
f0147078f9 New translations copyright_holders.html (Danish) 2023-03-08 14:26:22 +03:00
Yury Pikhtarev
fa09b7fe21 New translations copyright_holders.html (Czech) 2023-03-08 14:26:22 +03:00
Yury Pikhtarev
1870566c57 New translations copyright_holders.html (Catalan) 2023-03-08 14:26:21 +03:00
Yury Pikhtarev
367300edce New translations copyright_holders.html (Belarusian) 2023-03-08 14:26:20 +03:00
Yury Pikhtarev
b79d6bb0a1 New translations copyright_holders.html (Afrikaans) 2023-03-08 14:26:18 +03:00
Yury Pikhtarev
df7133fb63 New translations copyright_holders.html (Romanian) 2023-03-08 14:26:16 +03:00
Yury Pikhtarev
9068c6a2ae New translations advert.html (Portuguese, Brazilian) 2023-03-08 14:26:15 +03:00
Yury Pikhtarev
fe09397308 New translations advert.html (Chinese Traditional) 2023-03-08 14:26:13 +03:00
Yury Pikhtarev
9e8c3f3ab9 New translations advert.html (Chinese Simplified) 2023-03-08 14:26:12 +03:00
Yury Pikhtarev
2dc00d6235 New translations advert.html (Portuguese) 2023-03-08 14:26:08 +03:00
Yury Pikhtarev
cf69f3d088 New translations user_welcome_inactive.html (Kazakh) 2023-03-08 14:25:56 +03:00
Yury Pikhtarev
fd5971e472 New translations user_welcome_inactive.html (Portuguese, Brazilian) 2023-03-08 14:25:55 +03:00
Yury Pikhtarev
93a65136d6 New translations user_welcome_inactive.html (Vietnamese) 2023-03-08 14:25:55 +03:00
Yury Pikhtarev
e25a0c18b1 New translations user_welcome_inactive.html (Chinese Traditional) 2023-03-08 14:25:53 +03:00
Yury Pikhtarev
8e92a393be New translations user_welcome_inactive.html (Chinese Simplified) 2023-03-08 14:25:52 +03:00
Yury Pikhtarev
e5c37565e9 New translations user_welcome_inactive.html (Ukrainian) 2023-03-08 14:25:51 +03:00
Yury Pikhtarev
f3d8c1b9f9 New translations user_welcome_inactive.html (Swedish) 2023-03-08 14:25:50 +03:00
Yury Pikhtarev
d5119c2d8c New translations user_welcome_inactive.html (Serbian (Cyrillic)) 2023-03-08 14:25:49 +03:00
Yury Pikhtarev
b9f272efbe New translations user_welcome_inactive.html (Portuguese) 2023-03-08 14:25:48 +03:00
Yury Pikhtarev
e7a2c851c6 New translations user_welcome_inactive.html (Norwegian) 2023-03-08 14:25:47 +03:00
Yury Pikhtarev
80133f4ebf New translations user_welcome_inactive.html (Japanese) 2023-03-08 14:25:45 +03:00
Yury Pikhtarev
eb2c0044b7 New translations user_welcome_inactive.html (Hungarian) 2023-03-08 14:25:44 +03:00
Yury Pikhtarev
edce1fb30c New translations user_welcome_inactive.html (Hebrew) 2023-03-08 14:25:43 +03:00
Yury Pikhtarev
78e2e4369b New translations user_welcome_inactive.html (Finnish) 2023-03-08 14:25:41 +03:00
Yury Pikhtarev
0ac19cafbe New translations user_welcome_inactive.html (Greek) 2023-03-08 14:25:41 +03:00
Yury Pikhtarev
691956bead New translations user_welcome_inactive.html (German) 2023-03-08 14:25:40 +03:00
Yury Pikhtarev
f95d294fe4 New translations user_welcome_inactive.html (Danish) 2023-03-08 14:25:39 +03:00
Yury Pikhtarev
4a75c845bb New translations user_welcome_inactive.html (Czech) 2023-03-08 14:25:38 +03:00
Yury Pikhtarev
67c3475658 New translations user_welcome_inactive.html (Catalan) 2023-03-08 14:25:37 +03:00
Yury Pikhtarev
2e1b5f9c07 New translations user_welcome_inactive.html (Belarusian) 2023-03-08 14:25:37 +03:00
Yury Pikhtarev
fe6fb59246 New translations user_welcome_inactive.html (Afrikaans) 2023-03-08 14:25:35 +03:00
Yury Pikhtarev
fdb32723bc New translations user_welcome_inactive.html (Spanish) 2023-03-08 14:25:34 +03:00
Yury Pikhtarev
020c2a571b New translations user_welcome_inactive.html (Romanian) 2023-03-08 14:25:33 +03:00
Yury Pikhtarev
328991112f New translations user_welcome.html (Kazakh) 2023-03-08 14:25:32 +03:00
Yury Pikhtarev
32f32731fa New translations user_welcome.html (Portuguese, Brazilian) 2023-03-08 14:25:31 +03:00
Yury Pikhtarev
aa219083ae New translations user_welcome.html (Vietnamese) 2023-03-08 14:25:30 +03:00
Yury Pikhtarev
16c6b658b2 New translations user_welcome.html (Chinese Traditional) 2023-03-08 14:25:29 +03:00
Yury Pikhtarev
67f1e641db New translations user_welcome.html (Chinese Simplified) 2023-03-08 14:25:28 +03:00
Yury Pikhtarev
8e6341dee9 New translations user_welcome.html (Ukrainian) 2023-03-08 14:25:27 +03:00
Yury Pikhtarev
573aede4ef New translations user_welcome.html (Swedish) 2023-03-08 14:25:25 +03:00
Yury Pikhtarev
b45b378e27 New translations user_welcome.html (Serbian (Cyrillic)) 2023-03-08 14:25:24 +03:00
Yury Pikhtarev
c5e2aff0fc New translations user_welcome.html (Portuguese) 2023-03-08 14:25:23 +03:00
Yury Pikhtarev
6c3bf4e062 New translations user_welcome.html (Norwegian) 2023-03-08 14:25:21 +03:00
Yury Pikhtarev
8c0df83dcb New translations user_welcome.html (Japanese) 2023-03-08 14:25:19 +03:00
Yury Pikhtarev
f110eba496 New translations user_welcome.html (Hungarian) 2023-03-08 14:25:18 +03:00
Yury Pikhtarev
f302cf402c New translations user_welcome.html (Hebrew) 2023-03-08 14:25:17 +03:00
Yury Pikhtarev
3165cd25e4 New translations user_welcome.html (Finnish) 2023-03-08 14:25:16 +03:00
Yury Pikhtarev
08ec8c7a71 New translations user_welcome.html (Greek) 2023-03-08 14:25:15 +03:00
Yury Pikhtarev
7bd15ba90c New translations user_welcome.html (German) 2023-03-08 14:25:14 +03:00
Yury Pikhtarev
9cc5d64d07 New translations user_welcome.html (Danish) 2023-03-08 14:25:13 +03:00
Yury Pikhtarev
6fbc3ff295 New translations user_welcome.html (Czech) 2023-03-08 14:25:13 +03:00
Yury Pikhtarev
e39558cf16 New translations user_welcome.html (Catalan) 2023-03-08 14:25:12 +03:00
Yury Pikhtarev
71fac2650a New translations user_welcome.html (Belarusian) 2023-03-08 14:25:11 +03:00
Yury Pikhtarev
3c595fbca1 New translations user_welcome.html (Afrikaans) 2023-03-08 14:25:09 +03:00
Yury Pikhtarev
9c00f79df6 New translations user_welcome.html (Romanian) 2023-03-08 14:25:07 +03:00
Yury Pikhtarev
112925fb2a New translations user_activate_passwd.html (Kazakh) 2023-03-08 14:25:06 +03:00
Yury Pikhtarev
620fcf17bc New translations user_activate_passwd.html (Portuguese, Brazilian) 2023-03-08 14:25:06 +03:00
Yury Pikhtarev
209655fd73 New translations user_activate_passwd.html (Vietnamese) 2023-03-08 14:25:05 +03:00
Yury Pikhtarev
8caddfaf32 New translations user_activate_passwd.html (Chinese Traditional) 2023-03-08 14:25:03 +03:00
Yury Pikhtarev
65af734425 New translations user_activate_passwd.html (Chinese Simplified) 2023-03-08 14:25:02 +03:00
Yury Pikhtarev
b03be9c5e4 New translations user_activate_passwd.html (Ukrainian) 2023-03-08 14:25:01 +03:00
Yury Pikhtarev
0286a66d0b New translations user_activate_passwd.html (Swedish) 2023-03-08 14:24:59 +03:00
Yury Pikhtarev
2995525062 New translations user_activate_passwd.html (Serbian (Cyrillic)) 2023-03-08 14:24:59 +03:00
Yury Pikhtarev
e92c63fe4c New translations user_activate_passwd.html (Russian) 2023-03-08 14:24:58 +03:00
Yury Pikhtarev
44d0b8e915 New translations user_activate_passwd.html (Portuguese) 2023-03-08 14:24:57 +03:00
Yury Pikhtarev
81752c6343 New translations user_activate_passwd.html (Norwegian) 2023-03-08 14:24:56 +03:00
Yury Pikhtarev
7ce8af30f0 New translations user_activate_passwd.html (Japanese) 2023-03-08 14:24:54 +03:00
Yury Pikhtarev
3183bc3681 New translations user_activate_passwd.html (Hungarian) 2023-03-08 14:24:47 +03:00
Yury Pikhtarev
c6fe5c4fc3 New translations user_activate_passwd.html (Hebrew) 2023-03-08 14:24:46 +03:00
Yury Pikhtarev
fde57faae9 New translations user_activate_passwd.html (Finnish) 2023-03-08 14:24:45 +03:00
Yury Pikhtarev
6af9d4cb99 New translations user_activate_passwd.html (Greek) 2023-03-08 14:24:44 +03:00
Yury Pikhtarev
328821a44c New translations user_activate_passwd.html (Danish) 2023-03-08 14:24:43 +03:00
Yury Pikhtarev
a1322d0f36 New translations user_activate_passwd.html (Czech) 2023-03-08 14:24:42 +03:00
Yury Pikhtarev
4fb767d910 New translations user_activate_passwd.html (Catalan) 2023-03-08 14:24:41 +03:00
Yury Pikhtarev
cef135fd91 New translations user_activate_passwd.html (Belarusian) 2023-03-08 14:24:40 +03:00
Yury Pikhtarev
7a18e00886 New translations user_activate_passwd.html (Afrikaans) 2023-03-08 14:24:39 +03:00
Yury Pikhtarev
f36d5921a6 New translations user_activate_passwd.html (Romanian) 2023-03-08 14:24:37 +03:00
Yury Pikhtarev
cf20348706 New translations user_activate.html (Kazakh) 2023-03-08 14:24:36 +03:00
Yury Pikhtarev
f64b8ea59a New translations user_activate.html (Portuguese, Brazilian) 2023-03-08 14:24:35 +03:00
Yury Pikhtarev
a734c5b0dc New translations user_activate.html (Vietnamese) 2023-03-08 14:24:34 +03:00
Yury Pikhtarev
b8c7dab645 New translations user_activate.html (Chinese Traditional) 2023-03-08 14:24:33 +03:00
Yury Pikhtarev
f1bdff4b7c New translations user_activate.html (Chinese Simplified) 2023-03-08 14:24:32 +03:00
Yury Pikhtarev
3abf98c9a3 New translations user_activate.html (Ukrainian) 2023-03-08 14:24:31 +03:00
Yury Pikhtarev
d2dbaf8527 New translations user_activate.html (Swedish) 2023-03-08 14:24:30 +03:00
Yury Pikhtarev
95d3ecb8ae New translations user_activate.html (Serbian (Cyrillic)) 2023-03-08 14:24:29 +03:00
Yury Pikhtarev
fb563b457d New translations user_activate.html (Russian) 2023-03-08 14:24:28 +03:00
Yury Pikhtarev
113534ccad New translations user_activate.html (Portuguese) 2023-03-08 14:24:27 +03:00
Yury Pikhtarev
0825a0b932 New translations user_activate.html (Norwegian) 2023-03-08 14:24:26 +03:00
Yury Pikhtarev
bd5752f832 New translations user_activate.html (Hungarian) 2023-03-08 14:24:23 +03:00
Yury Pikhtarev
376ebca763 New translations user_activate.html (Hebrew) 2023-03-08 14:24:22 +03:00
Yury Pikhtarev
40380a6af2 New translations user_activate.html (Finnish) 2023-03-08 14:24:21 +03:00
Yury Pikhtarev
08564b0067 New translations user_activate.html (Greek) 2023-03-08 14:24:20 +03:00
Yury Pikhtarev
d5cf16e584 New translations user_activate.html (Danish) 2023-03-08 14:24:18 +03:00
Yury Pikhtarev
98ba9e4f85 New translations user_activate.html (Czech) 2023-03-08 14:24:18 +03:00
Yury Pikhtarev
f4796daf29 New translations user_activate.html (Catalan) 2023-03-08 14:24:17 +03:00
Yury Pikhtarev
e2a643c276 New translations user_activate.html (Belarusian) 2023-03-08 14:24:16 +03:00
Yury Pikhtarev
e021b96d8a New translations user_activate.html (Afrikaans) 2023-03-08 14:24:14 +03:00
Yury Pikhtarev
5f4ead5f59 New translations user_activate.html (Spanish) 2023-03-08 14:24:14 +03:00
Yury Pikhtarev
ed30225ee3 New translations user_activate.html (Romanian) 2023-03-08 14:24:12 +03:00
Yury Pikhtarev
bf4192f7d8 New translations topic_notify.html (Kazakh) 2023-03-08 14:24:11 +03:00
Yury Pikhtarev
3a47030809 New translations topic_notify.html (Portuguese, Brazilian) 2023-03-08 14:24:10 +03:00
Yury Pikhtarev
eb4eaf43a2 New translations topic_notify.html (Vietnamese) 2023-03-08 14:24:09 +03:00
Yury Pikhtarev
f86cfcfbe6 New translations topic_notify.html (Chinese Traditional) 2023-03-08 14:24:08 +03:00
Yury Pikhtarev
fcfddd1e37 New translations topic_notify.html (Chinese Simplified) 2023-03-08 14:24:07 +03:00
Yury Pikhtarev
51554efce3 New translations topic_notify.html (Ukrainian) 2023-03-08 14:24:06 +03:00
Yury Pikhtarev
489dbac8f9 New translations topic_notify.html (Swedish) 2023-03-08 14:24:05 +03:00
Yury Pikhtarev
3c9994a9de New translations topic_notify.html (Serbian (Cyrillic)) 2023-03-08 14:24:04 +03:00
Yury Pikhtarev
bac43bf188 New translations topic_notify.html (Russian) 2023-03-08 14:24:03 +03:00
Yury Pikhtarev
29fd981faf New translations topic_notify.html (Portuguese) 2023-03-08 14:24:02 +03:00
Yury Pikhtarev
69ed5c56f3 New translations topic_notify.html (Norwegian) 2023-03-08 14:24:01 +03:00
Yury Pikhtarev
ef7d848ec1 New translations topic_notify.html (Japanese) 2023-03-08 14:23:59 +03:00
Yury Pikhtarev
99da571323 New translations topic_notify.html (Hungarian) 2023-03-08 14:23:57 +03:00
Yury Pikhtarev
0fb0303e09 New translations topic_notify.html (Hebrew) 2023-03-08 14:23:56 +03:00
Yury Pikhtarev
260711bda5 New translations topic_notify.html (Finnish) 2023-03-08 14:23:55 +03:00
Yury Pikhtarev
db8e6c5055 New translations topic_notify.html (Greek) 2023-03-08 14:23:55 +03:00
Yury Pikhtarev
77f588a2fe New translations topic_notify.html (Danish) 2023-03-08 14:23:53 +03:00
Yury Pikhtarev
592678be0f New translations topic_notify.html (Czech) 2023-03-08 14:23:52 +03:00
Yury Pikhtarev
2cb61b52d6 New translations topic_notify.html (Catalan) 2023-03-08 14:23:41 +03:00
Yury Pikhtarev
66bad16b62 New translations topic_notify.html (Belarusian) 2023-03-08 14:23:40 +03:00
Yury Pikhtarev
2a47b715fb New translations topic_notify.html (Afrikaans) 2023-03-08 14:23:39 +03:00
Yury Pikhtarev
a5903b9d7a New translations topic_notify.html (Spanish) 2023-03-08 14:23:38 +03:00
Yury Pikhtarev
c902cb2c73 New translations topic_notify.html (Romanian) 2023-03-08 14:23:37 +03:00
Yury Pikhtarev
9777a81f26 New translations profile_send_email.html (Kazakh) 2023-03-08 14:23:36 +03:00
Yury Pikhtarev
888b7d4319 New translations profile_send_email.html (Portuguese, Brazilian) 2023-03-08 14:23:35 +03:00
Yury Pikhtarev
f58aceb347 New translations profile_send_email.html (Vietnamese) 2023-03-08 14:23:34 +03:00
Yury Pikhtarev
892c582888 New translations profile_send_email.html (Chinese Traditional) 2023-03-08 14:23:33 +03:00
Yury Pikhtarev
509522cb7c New translations profile_send_email.html (Chinese Simplified) 2023-03-08 14:23:32 +03:00
Yury Pikhtarev
3c6cdae682 New translations profile_send_email.html (Ukrainian) 2023-03-08 14:23:31 +03:00
Yury Pikhtarev
f1a4573fc7 New translations profile_send_email.html (Swedish) 2023-03-08 14:23:29 +03:00
Yury Pikhtarev
14111258ba New translations profile_send_email.html (Serbian (Cyrillic)) 2023-03-08 14:23:29 +03:00
Yury Pikhtarev
5490c60bd1 New translations profile_send_email.html (Russian) 2023-03-08 14:23:28 +03:00
Yury Pikhtarev
5589e7d8db New translations profile_send_email.html (Portuguese) 2023-03-08 14:23:27 +03:00
Yury Pikhtarev
39e44eab94 New translations profile_send_email.html (Norwegian) 2023-03-08 14:23:25 +03:00
Yury Pikhtarev
6a8346fb06 New translations profile_send_email.html (Japanese) 2023-03-08 14:23:23 +03:00
Yury Pikhtarev
5bf2ea238e New translations profile_send_email.html (Hungarian) 2023-03-08 14:23:22 +03:00
Yury Pikhtarev
8cb0cf9cb0 New translations profile_send_email.html (Hebrew) 2023-03-08 14:23:21 +03:00
Yury Pikhtarev
bfecd3776d New translations profile_send_email.html (Finnish) 2023-03-08 14:23:20 +03:00
Yury Pikhtarev
d5223d873c New translations profile_send_email.html (Greek) 2023-03-08 14:23:19 +03:00
Yury Pikhtarev
4c09682232 New translations profile_send_email.html (Danish) 2023-03-08 14:23:18 +03:00
Yury Pikhtarev
55876ac50a New translations profile_send_email.html (Czech) 2023-03-08 14:23:17 +03:00
Yury Pikhtarev
7c50996cbd New translations profile_send_email.html (Catalan) 2023-03-08 14:23:16 +03:00
Yury Pikhtarev
c09cac7037 New translations profile_send_email.html (Belarusian) 2023-03-08 14:23:15 +03:00
Yury Pikhtarev
65316162b8 New translations profile_send_email.html (Afrikaans) 2023-03-08 14:23:14 +03:00
Yury Pikhtarev
9302c3a765 New translations profile_send_email.html (Spanish) 2023-03-08 14:23:13 +03:00
Yury Pikhtarev
a0a5dc53b6 New translations profile_send_email.html (Romanian) 2023-03-08 14:23:11 +03:00
Yury Pikhtarev
cf954cfe2a New translations privmsg_notify.html (Kazakh) 2023-03-08 14:23:11 +03:00
Yury Pikhtarev
1ce09c9161 New translations privmsg_notify.html (Portuguese, Brazilian) 2023-03-08 14:23:10 +03:00
Yury Pikhtarev
81e3862a8b New translations privmsg_notify.html (Vietnamese) 2023-03-08 14:23:09 +03:00
Yury Pikhtarev
f644ce3f06 New translations privmsg_notify.html (Chinese Traditional) 2023-03-08 14:23:07 +03:00
Yury Pikhtarev
3895959085 New translations privmsg_notify.html (Chinese Simplified) 2023-03-08 14:23:06 +03:00
Yury Pikhtarev
4ea1341bca New translations privmsg_notify.html (Ukrainian) 2023-03-08 14:23:06 +03:00
Yury Pikhtarev
2cb7a4daaa New translations privmsg_notify.html (Swedish) 2023-03-08 14:23:04 +03:00
Yury Pikhtarev
932fa25f3d New translations privmsg_notify.html (Serbian (Cyrillic)) 2023-03-08 14:23:03 +03:00
Yury Pikhtarev
af54e39e75 New translations privmsg_notify.html (Russian) 2023-03-08 14:23:02 +03:00
Yury Pikhtarev
b825a48479 New translations privmsg_notify.html (Portuguese) 2023-03-08 14:23:01 +03:00
Yury Pikhtarev
ccfe51fd14 New translations privmsg_notify.html (Norwegian) 2023-03-08 14:23:00 +03:00
Yury Pikhtarev
2f4100f92d New translations privmsg_notify.html (Japanese) 2023-03-08 14:22:58 +03:00
Yury Pikhtarev
7cddc50f36 New translations privmsg_notify.html (Hungarian) 2023-03-08 14:22:56 +03:00
Yury Pikhtarev
f70bbff367 New translations privmsg_notify.html (Hebrew) 2023-03-08 14:22:56 +03:00
Yury Pikhtarev
ebd9165f91 New translations privmsg_notify.html (Finnish) 2023-03-08 14:22:55 +03:00
Yury Pikhtarev
34b8cac080 New translations privmsg_notify.html (Greek) 2023-03-08 14:22:54 +03:00
Yury Pikhtarev
643a60c659 New translations privmsg_notify.html (Danish) 2023-03-08 14:22:52 +03:00
Yury Pikhtarev
043fe42240 New translations privmsg_notify.html (Czech) 2023-03-08 14:22:51 +03:00
Yury Pikhtarev
62c0b2358b New translations privmsg_notify.html (Catalan) 2023-03-08 14:22:50 +03:00
Yury Pikhtarev
90214f33bf New translations privmsg_notify.html (Belarusian) 2023-03-08 14:22:50 +03:00
Yury Pikhtarev
e8744e1031 New translations privmsg_notify.html (Afrikaans) 2023-03-08 14:22:48 +03:00
Yury Pikhtarev
1ad51c655f New translations privmsg_notify.html (Spanish) 2023-03-08 14:22:47 +03:00
Yury Pikhtarev
ea7b45eb26 New translations privmsg_notify.html (Romanian) 2023-03-08 14:22:46 +03:00
Yury Pikhtarev
baa7830434 New translations group_request.html (Kazakh) 2023-03-08 14:22:45 +03:00
Yury Pikhtarev
1732a4c33e New translations group_request.html (Portuguese, Brazilian) 2023-03-08 14:22:44 +03:00
Yury Pikhtarev
1b57bfb7bd New translations group_request.html (Vietnamese) 2023-03-08 14:22:43 +03:00
Yury Pikhtarev
7b587a673c New translations group_request.html (Chinese Traditional) 2023-03-08 14:22:42 +03:00
Yury Pikhtarev
492f0ac4be New translations group_request.html (Chinese Simplified) 2023-03-08 14:22:41 +03:00
Yury Pikhtarev
1b551b4b74 New translations group_request.html (Ukrainian) 2023-03-08 14:22:40 +03:00
Yury Pikhtarev
bf07ab6cbe New translations group_request.html (Swedish) 2023-03-08 14:22:38 +03:00
Yury Pikhtarev
f9898bee64 New translations group_request.html (Serbian (Cyrillic)) 2023-03-08 14:22:37 +03:00
Yury Pikhtarev
43d7ac084a New translations group_request.html (Russian) 2023-03-08 14:22:36 +03:00
Yury Pikhtarev
fd791244e2 New translations group_request.html (Portuguese) 2023-03-08 14:22:35 +03:00
Yury Pikhtarev
397f1a7c91 New translations group_request.html (Norwegian) 2023-03-08 14:22:34 +03:00
Yury Pikhtarev
a4eb0fa811 New translations group_request.html (Japanese) 2023-03-08 14:22:32 +03:00
Yury Pikhtarev
357f0ecb99 New translations group_request.html (Hungarian) 2023-03-08 14:22:30 +03:00
Yury Pikhtarev
1da451a9ab New translations group_request.html (Hebrew) 2023-03-08 14:22:29 +03:00
Yury Pikhtarev
9435e47202 New translations group_request.html (Finnish) 2023-03-08 14:22:29 +03:00
Yury Pikhtarev
e04af21505 New translations group_request.html (Greek) 2023-03-08 14:22:28 +03:00
Yury Pikhtarev
060b6e875c New translations group_request.html (Danish) 2023-03-08 14:22:26 +03:00
Yury Pikhtarev
a56f22b182 New translations group_request.html (Czech) 2023-03-08 14:22:25 +03:00
Yury Pikhtarev
17031f47a3 New translations group_request.html (Catalan) 2023-03-08 14:22:24 +03:00
Yury Pikhtarev
dac32ae4d5 New translations group_request.html (Belarusian) 2023-03-08 14:22:23 +03:00
Yury Pikhtarev
82f4403145 New translations group_request.html (Afrikaans) 2023-03-08 14:22:22 +03:00
Yury Pikhtarev
3e688fc4af New translations group_request.html (Spanish) 2023-03-08 14:22:21 +03:00
Yury Pikhtarev
23b784bd1c New translations group_request.html (Romanian) 2023-03-08 14:22:19 +03:00
Yury Pikhtarev
319abf4ecc New translations group_approved.html (Kazakh) 2023-03-08 14:22:18 +03:00
Yury Pikhtarev
dd4951e741 New translations group_approved.html (Portuguese, Brazilian) 2023-03-08 14:22:17 +03:00
Yury Pikhtarev
636c6e844f New translations group_approved.html (Vietnamese) 2023-03-08 14:22:17 +03:00
Yury Pikhtarev
0094e8434b New translations group_approved.html (Chinese Traditional) 2023-03-08 14:22:15 +03:00
Yury Pikhtarev
36f3b25f1a New translations group_approved.html (Chinese Simplified) 2023-03-08 14:22:14 +03:00
Yury Pikhtarev
4b7edb8724 New translations group_approved.html (Ukrainian) 2023-03-08 14:22:13 +03:00
Yury Pikhtarev
7b755ba31e New translations group_approved.html (Swedish) 2023-03-08 14:22:12 +03:00
Yury Pikhtarev
a2f9835faf New translations group_approved.html (Serbian (Cyrillic)) 2023-03-08 14:22:11 +03:00
Yury Pikhtarev
15829648eb New translations group_approved.html (Russian) 2023-03-08 14:22:10 +03:00
Yury Pikhtarev
eeb3adec90 New translations group_approved.html (Portuguese) 2023-03-08 14:22:09 +03:00
Yury Pikhtarev
f1e83e0500 New translations group_approved.html (Norwegian) 2023-03-08 14:22:08 +03:00
Yury Pikhtarev
6abb9e8d8f New translations group_approved.html (Japanese) 2023-03-08 14:22:05 +03:00
Yury Pikhtarev
3ab885c4a8 New translations group_approved.html (Italian) 2023-03-08 14:22:05 +03:00
Yury Pikhtarev
88a05be7ba New translations group_approved.html (Hungarian) 2023-03-08 14:22:03 +03:00
Yury Pikhtarev
2308062dfa New translations group_approved.html (Hebrew) 2023-03-08 14:22:02 +03:00
Yury Pikhtarev
05492a24be New translations group_approved.html (Finnish) 2023-03-08 14:22:01 +03:00
Yury Pikhtarev
ab36d37f48 New translations group_approved.html (Greek) 2023-03-08 14:22:01 +03:00
Yury Pikhtarev
b043c14261 New translations group_approved.html (Danish) 2023-03-08 14:21:59 +03:00
Yury Pikhtarev
35c05baa8e New translations group_approved.html (Czech) 2023-03-08 14:21:58 +03:00
Yury Pikhtarev
63f0c4eb15 New translations group_approved.html (Catalan) 2023-03-08 14:21:57 +03:00
Yury Pikhtarev
ee74a83439 New translations group_approved.html (Belarusian) 2023-03-08 14:21:56 +03:00
Yury Pikhtarev
6e9e372a04 New translations group_approved.html (Afrikaans) 2023-03-08 14:21:55 +03:00
Yury Pikhtarev
4f927bf463 New translations group_approved.html (Romanian) 2023-03-08 14:21:53 +03:00
Yury Pikhtarev
4ca25654f6 New translations group_added.html (Kazakh) 2023-03-08 14:21:52 +03:00
Yury Pikhtarev
00e5f77966 New translations group_added.html (Portuguese, Brazilian) 2023-03-08 14:21:52 +03:00
Yury Pikhtarev
1d2aa217d0 New translations group_added.html (Vietnamese) 2023-03-08 14:21:51 +03:00
Yury Pikhtarev
03b6fcd6f0 New translations group_added.html (Chinese Traditional) 2023-03-08 14:21:49 +03:00
Yury Pikhtarev
87dbfdc69f New translations group_added.html (Chinese Simplified) 2023-03-08 14:21:48 +03:00
Yury Pikhtarev
944d46d39d New translations group_added.html (Ukrainian) 2023-03-08 14:21:48 +03:00
Yury Pikhtarev
5bd401075b New translations group_added.html (Swedish) 2023-03-08 14:21:46 +03:00
Yury Pikhtarev
a16cc4d057 New translations group_added.html (Serbian (Cyrillic)) 2023-03-08 14:21:45 +03:00
Yury Pikhtarev
a8df5fa4e2 New translations group_added.html (Russian) 2023-03-08 14:21:44 +03:00
Yury Pikhtarev
582144991c New translations group_added.html (Portuguese) 2023-03-08 14:21:43 +03:00
Yury Pikhtarev
bfd2e8a62d New translations group_added.html (Norwegian) 2023-03-08 14:21:42 +03:00
Yury Pikhtarev
2710c7dbfc New translations group_added.html (Japanese) 2023-03-08 14:21:40 +03:00
Yury Pikhtarev
64112bcd90 New translations group_added.html (Hungarian) 2023-03-08 14:21:38 +03:00
Yury Pikhtarev
a7b037e1f0 New translations group_added.html (Hebrew) 2023-03-08 14:21:37 +03:00
Yury Pikhtarev
c5df06828d New translations group_added.html (Finnish) 2023-03-08 14:21:37 +03:00
Yury Pikhtarev
260ea451cd New translations group_added.html (Greek) 2023-03-08 14:21:36 +03:00
Yury Pikhtarev
cdddba1308 New translations group_added.html (Danish) 2023-03-08 14:21:34 +03:00
Yury Pikhtarev
bde69ba77c New translations group_added.html (Czech) 2023-03-08 14:21:34 +03:00
Yury Pikhtarev
6aaf32c731 New translations group_added.html (Catalan) 2023-03-08 14:21:33 +03:00
Yury Pikhtarev
f83e470d7e New translations group_added.html (Belarusian) 2023-03-08 14:21:32 +03:00
Yury Pikhtarev
63246728be New translations group_added.html (Afrikaans) 2023-03-08 14:21:29 +03:00
Yury Pikhtarev
7d1e9c257e New translations group_added.html (Spanish) 2023-03-08 14:21:28 +03:00
Yury Pikhtarev
0155126e7d New translations group_added.html (Romanian) 2023-03-08 14:21:27 +03:00
Yury Pikhtarev
d9205d44b2 New translations admin_send_email.html (Kazakh) 2023-03-08 14:21:09 +03:00
Yury Pikhtarev
8848e8336d New translations admin_send_email.html (Portuguese, Brazilian) 2023-03-08 14:21:08 +03:00
Yury Pikhtarev
f964469c64 New translations admin_send_email.html (Vietnamese) 2023-03-08 14:21:07 +03:00
Yury Pikhtarev
735f39dd22 New translations admin_send_email.html (Chinese Traditional) 2023-03-08 14:21:06 +03:00
Yury Pikhtarev
040afaeaef New translations admin_send_email.html (Chinese Simplified) 2023-03-08 14:21:05 +03:00
Yury Pikhtarev
f1752e81c2 New translations admin_send_email.html (Ukrainian) 2023-03-08 14:21:04 +03:00
Yury Pikhtarev
a10768733a New translations admin_send_email.html (Swedish) 2023-03-08 14:21:02 +03:00
Yury Pikhtarev
11fbea398c New translations admin_send_email.html (Serbian (Cyrillic)) 2023-03-08 14:21:01 +03:00
Yury Pikhtarev
f38e84cd40 New translations admin_send_email.html (Portuguese) 2023-03-08 14:21:00 +03:00
Yury Pikhtarev
456d1e07f2 New translations admin_send_email.html (Norwegian) 2023-03-08 14:20:58 +03:00
Yury Pikhtarev
7d794aa408 New translations admin_send_email.html (Japanese) 2023-03-08 14:20:57 +03:00
Yury Pikhtarev
76fd87b6cd New translations admin_send_email.html (Hungarian) 2023-03-08 14:20:55 +03:00
Yury Pikhtarev
4362de126c New translations admin_send_email.html (Hebrew) 2023-03-08 14:20:54 +03:00
Yury Pikhtarev
1702f42d57 New translations admin_send_email.html (Finnish) 2023-03-08 14:20:53 +03:00
Yury Pikhtarev
dca4775c1b New translations admin_send_email.html (Greek) 2023-03-08 14:20:52 +03:00
Yury Pikhtarev
5fd4c22b33 New translations admin_send_email.html (Danish) 2023-03-08 14:20:51 +03:00
Yury Pikhtarev
ded1b99d4f New translations admin_send_email.html (Czech) 2023-03-08 14:20:50 +03:00
Yury Pikhtarev
a50eff8133 New translations admin_send_email.html (Catalan) 2023-03-08 14:20:49 +03:00
Yury Pikhtarev
891055f8df New translations admin_send_email.html (Belarusian) 2023-03-08 14:20:48 +03:00
Yury Pikhtarev
8a0f6c7b66 New translations admin_send_email.html (Afrikaans) 2023-03-08 14:20:47 +03:00
Yury Pikhtarev
eae9c673aa New translations admin_send_email.html (Spanish) 2023-03-08 14:20:46 +03:00
Yury Pikhtarev
60f4b50194 New translations admin_send_email.html (Romanian) 2023-03-08 14:20:45 +03:00
Yury Pikhtarev
c50cc931e5 New translations main.php (Kazakh) 2023-03-08 14:20:44 +03:00
Yury Pikhtarev
98af5aa665 New translations main.php (Portuguese, Brazilian) 2023-03-08 14:20:42 +03:00
Yury Pikhtarev
90d5caa849 New translations main.php (Vietnamese) 2023-03-08 14:20:41 +03:00
Yury Pikhtarev
d28ecfb14c New translations main.php (English) 2023-03-08 14:20:40 +03:00
Yury Pikhtarev
295a2b4eda New translations main.php (Chinese Traditional) 2023-03-08 14:20:39 +03:00
Yury Pikhtarev
6c7660466f New translations main.php (Chinese Simplified) 2023-03-08 14:20:38 +03:00
Yury Pikhtarev
58c84f7487 New translations main.php (Ukrainian) 2023-03-08 14:20:36 +03:00
Yury Pikhtarev
bbf237ec35 New translations main.php (Turkish) 2023-03-08 14:20:35 +03:00
Yury Pikhtarev
602398aae7 New translations main.php (Swedish) 2023-03-08 14:20:34 +03:00
Yury Pikhtarev
5ff12b2fc4 New translations main.php (Serbian (Cyrillic)) 2023-03-08 14:20:32 +03:00
Yury Pikhtarev
617d876947 New translations main.php (Russian) 2023-03-08 14:20:31 +03:00
Yury Pikhtarev
5e15d3c121 New translations main.php (Portuguese) 2023-03-08 14:20:30 +03:00
Yury Pikhtarev
4e21d285df New translations main.php (Polish) 2023-03-08 14:20:28 +03:00
Yury Pikhtarev
35174565b0 New translations main.php (Norwegian) 2023-03-08 14:20:27 +03:00
Yury Pikhtarev
b82c2b9bc5 New translations main.php (Dutch) 2023-03-08 14:20:26 +03:00
Yury Pikhtarev
9a28ba5f61 New translations main.php (Korean) 2023-03-08 14:20:25 +03:00
Yury Pikhtarev
507b6e8392 New translations main.php (Japanese) 2023-03-08 14:20:23 +03:00
Yury Pikhtarev
f27c3c8a37 New translations main.php (Italian) 2023-03-08 14:20:22 +03:00
Yury Pikhtarev
5438b9bac7 New translations main.php (Hungarian) 2023-03-08 14:20:21 +03:00
Yury Pikhtarev
7008179ad4 New translations main.php (Hebrew) 2023-03-08 14:20:20 +03:00
Yury Pikhtarev
70395cbb78 New translations main.php (Finnish) 2023-03-08 14:20:18 +03:00
Yury Pikhtarev
e62759956b New translations main.php (Greek) 2023-03-08 14:20:17 +03:00
Yury Pikhtarev
f9e5fa5e2d New translations main.php (German) 2023-03-08 14:20:15 +03:00
Yury Pikhtarev
d93934aaf1 New translations main.php (Danish) 2023-03-08 14:20:14 +03:00
Yury Pikhtarev
40c6e47604 New translations main.php (Czech) 2023-03-08 14:20:12 +03:00
Yury Pikhtarev
8dbf654da9 New translations main.php (Catalan) 2023-03-08 14:20:11 +03:00
Yury Pikhtarev
cddcb32aab New translations main.php (Belarusian) 2023-03-08 14:20:10 +03:00
Yury Pikhtarev
c679827173 New translations main.php (Arabic) 2023-03-08 14:20:08 +03:00
Yury Pikhtarev
474bb1fd6e New translations main.php (Afrikaans) 2023-03-08 14:20:07 +03:00
Yury Pikhtarev
7baab2f2da New translations main.php (Spanish) 2023-03-08 14:20:06 +03:00
Yury Pikhtarev
589b80c6dd New translations main.php (French) 2023-03-08 14:20:04 +03:00
Yury Pikhtarev
3f7c12e619 New translations main.php (Romanian) 2023-03-08 14:20:02 +03:00
Yury Pikhtarev
56fb344f46 Update Crowdin configuration file 2023-03-08 13:25:06 +03:00
Roman Kelesidis
48d5f5bebe
Merge pull request #576 from torrentpier/redesigned-admin_ug_auth
Redesigned admin_ug_auth
2023-03-08 12:43:35 +07:00
Roman Kelesidis
f0dbf81d24 Redesigned admin_ug_auth
* Fixed some bugs
* Redesigned template
2023-03-08 12:42:17 +07:00
Roman Kelesidis
48066b7baa
Merge pull request #575 from torrentpier/simplified-make_rand_str-function
Simplified make_rand_str function
2023-03-08 11:49:41 +07:00
Roman Kelesidis
91b50f83c8 Simplified make_rand_str function 2023-03-08 11:49:22 +07:00
Roman Kelesidis
903a2ced32 Revert "Minor adjustments #572"
This reverts commit 90d1fc4236.
2023-03-08 11:46:03 +07:00
Roman Kelesidis
bbcd7a1c2f
Merge pull request #569 from torrentpier/ajax-check-if-is-ajax
Check if request is ajax
2023-03-08 11:03:24 +07:00
Roman Kelesidis
258d701f38
Merge pull request #574 from torrentpier/added-link-to-forum-in-admin_forumauth
Added link to forum in admin_forumauth.tpl
2023-03-08 10:43:47 +07:00
Roman Kelesidis
13a4ac2b25 Added link to forum in admin_forumauth.tpl 2023-03-08 10:43:12 +07:00
Roman Kelesidis
7b4809649a
Merge pull request #573 from torrentpier/use-constants-instead-of-string-literals
Use constants instead of string literals #573
2023-03-08 10:40:08 +07:00
Roman Kelesidis
f5da7c4984 Use constants instead of string literals #573 2023-03-08 10:39:51 +07:00
Roman Kelesidis
b9ed53ba6d
Merge pull request #572 from torrentpier/minor-adjustments
Minor adjustments #572
2023-03-08 10:30:20 +07:00
Roman Kelesidis
90d1fc4236 Minor adjustments #572
* Replaced bb_ltrim method with native
* Replaced bb_rtrim method with native
* Simplified make_rand_str method
2023-03-08 10:29:56 +07:00
Roman Kelesidis
21e1ebc86d
Merge pull request #571 from torrentpier/minor-adjustments
Minor adjustments #571
2023-03-07 23:22:30 +07:00
Roman Kelesidis
e5ad0d09b8 Minor adjustments #571 2023-03-07 23:21:58 +07:00
Roman Kelesidis
d775648f22
Merge pull request #570 from torrentpier/fixed-code-style
Fixed code-style in some files
2023-03-07 22:19:56 +07:00
Roman Kelesidis
e398657b20 Fixed code-style in some files 2023-03-07 22:19:26 +07:00
Roman Kelesidis
e340305d69 Check if request is ajax
Проверяет является ли запрос AJAX запросом.

Через проверку наличия X-Requested-With: XMLHttpRequest.
2023-03-07 17:44:48 +07:00
Roman Kelesidis
79cacad216
Merge pull request #568 from torrentpier/fixed-ajax-error
Fixed HTTP 500 error [AJAX]
2023-03-07 15:14:38 +07:00
Roman Kelesidis
b740a5465a Fixed HTTP 500 error [AJAX]
Fixed bug from previous PR #567
2023-03-07 15:14:16 +07:00
Roman Kelesidis
59aa4f069f
Merge pull request #567 from torrentpier/added-optional-param-in-valid-actions-ajax
Added optional parament in $valid_actions [AJAX]
2023-03-07 12:09:01 +07:00
Roman Kelesidis
cbf42251b7 Added optional parament in $valid_actions [AJAX]
Добавляет опциональный параметр IN_ADMIN_CP. Этот параметр указывается для тех ajax скриптов, которые должны выполнятся (работать) при выключенном форуме (через админку или крон). Если этот параметр не указан. то скрипты без него работать не будут в принципе нигде.

По умолчанию параметр IN_ADMIN_CP имеют два скрипты которые выполняются через админку (manage_admin и sitemap).
2023-03-07 00:15:57 +07:00
Roman Kelesidis
170142d019
Merge pull request #566 from torrentpier/added-new-font-sizes-bbcode
Added some new font sizes in bbcode editor
2023-03-06 16:22:49 +07:00
Roman Kelesidis
00da0c0648
Merge pull request #565 from torrentpier/added-some-new-fonts-bbcode
Added some new fonts in bbcode editor
2023-03-06 16:21:56 +07:00
Roman Kelesidis
15eb826f2d Added some new font sizes in bbcode editor
* Added size=26
* Added size=28
2023-03-06 16:02:49 +07:00
Roman Kelesidis
90d7fe0daf Added some new fonts in bbcode editor
* Added Arial Black
* Added Times New Roman
* Added Courier
* Added Bookman Old Style
* Added Trebuchet MS
* Added Garamond
2023-03-06 15:54:45 +07:00
Roman Kelesidis
bee70c3328
Merge pull request #563 from torrentpier/use-constants-instead-of-string-literals
Use constants instead of string literals
2023-03-05 23:49:14 +07:00
Roman Kelesidis
fc04ad1fd9
Merge pull request #564 from torrentpier/hide-feed-button-if-feed-not-exists
Hide feed button if feed file doesn't exists
2023-03-05 23:44:18 +07:00
Roman Kelesidis
a051a10934 Hide feed button if feed file doesn't exists 2023-03-05 23:43:57 +07:00
Roman Kelesidis
d3114093f7 Use constants instead of string literals
* Replaced '../triggers/cron_running' with CRON_RUNNING
* Replaced '../triggers/cron_allowed' with CRON_ALLOWED
2023-03-05 23:09:33 +07:00
Roman Kelesidis
894dacb0e3
Merge pull request #562 from torrentpier/new-root-path-implementation
New BB_PATH implementation
2023-03-05 23:03:30 +07:00
Roman Kelesidis
5a3eb85a96 New BB_PATH implementation 2023-03-05 23:03:14 +07:00
Roman Kelesidis
253d49ec58
Merge pull request #561 from torrentpier/minor-adjustments-sql
Minor adjustments in sql dumps №2
2023-03-05 22:47:38 +07:00
Roman Kelesidis
b39facc4b9 Minor adjustments in sql dumps №2 2023-03-05 22:46:57 +07:00
Roman Kelesidis
28a4d509fa
Merge pull request #560 from torrentpier/minor-adjustments-sql
Minor adjustments in sql dumps
2023-03-05 18:07:46 +07:00
Roman Kelesidis
51b048fc70 Minor adjustments in sql dumps 2023-03-05 18:07:05 +07:00
Roman Kelesidis
d294cf3700 Release 2.3.0.4-beta2 2023-03-04 16:41:21 +07:00
Roman Kelesidis
ba95334374 Revert "Set SQL_MODE = "" as GLOBAL" 2023-03-04 14:42:48 +07:00
Roman Kelesidis
745f7f3947
Merge pull request #559 from torrentpier/added-missing-sql-query-changes
Update changes.txt
2023-03-04 14:36:00 +07:00
Roman Kelesidis
6b101f2850 Update changes.txt 2023-03-04 14:34:45 +07:00
Roman Kelesidis
57815b4c55
Merge pull request #558 from torrentpier/added-missing-sql-query-changes
Added missing sql query in changes.txt
2023-03-04 14:23:34 +07:00
Roman Kelesidis
05d91093c6 Added missing sql query in changes.txt 2023-03-04 14:22:21 +07:00
Roman Kelesidis
1628887753
Merge pull request #557 from torrentpier/fixed-mysql-syntax-error-stats-tracker
Added nedeed "ORDER BY" in sql query
2023-03-03 23:52:56 +07:00
Roman Kelesidis
220da26b71 Applied requested changes №1 2023-03-03 22:29:09 +07:00
Roman Kelesidis
54a6e8accb
Merge pull request #556 from torrentpier/set-sql-mode-global
Set SQL_MODE = "" as GLOBAL
2023-03-03 08:30:26 +07:00
Roman Kelesidis
4c4c810b36 Added nedeed "ORDER BY" in sql query
Co-Authored-By: Sergey <31823239+SeAnSolovev@users.noreply.github.com>
2023-03-02 23:48:51 +07:00
Roman Kelesidis
6664561c61 Set SQL_MODE = "" as GLOBAL 2023-03-02 22:18:22 +07:00
Roman Kelesidis
195e0163ac
Merge pull request #555 from torrentpier/min-req-db-version
Added min required mysql / mariadb version
2023-02-28 22:25:29 +07:00
Roman Kelesidis
307cab28b3
Merge pull request #554 from torrentpier/removed-deprecated-sql-cache
Removed deprecated SQL_CACHE
2023-02-28 22:25:00 +07:00
Roman Kelesidis
82a697010d Added min required mysql / mariadb version 2023-02-28 14:42:39 +07:00
Roman Kelesidis
1dc01fe0b2 Removed deprecated SQL_CACHE
https://dev.mysql.com/worklog/task/?id=10837
2023-02-28 14:37:15 +07:00
Roman Kelesidis
90da2f7983
Merge pull request #544 from torrentpier/added-print-topic
Added ability to print page
2023-02-27 17:53:22 +07:00
Roman Kelesidis
36a731f11b
Merge branch 'master' into added-print-topic 2023-02-27 17:52:57 +07:00
Roman Kelesidis
0399710629
Merge pull request #546 from torrentpier/removed-ugly-copyright-in-indexer
Removed ugly copyright in indexer
2023-02-27 17:40:27 +07:00
Roman Kelesidis
5ba05cd0cb
Merge pull request #549 from torrentpier/updated-treeview-1.4.2
Updated treeview up to 1.4.2
2023-02-23 11:03:27 +07:00
Roman Kelesidis
b22953acd2 Updated treeview up to 1.4.2
From pre-1.4.1 to 1.4.2
2023-02-23 11:03:00 +07:00
Roman Kelesidis
080cf0c3f4 Release 2.3.0.4-beta 2023-02-23 00:06:44 +07:00
Roman Kelesidis
73fcb7078a
Merge pull request #548 from torrentpier/updated-quicksearch-feb-2018
Updated quicksearch up to Feb 21, 2018 commit
2023-02-22 23:53:59 +07:00
Roman Kelesidis
583727acc1 Updated quicksearch up to Feb 21, 2018 commit
From March 07, 2010 to Feb 21, 2018 commit
2023-02-22 23:53:24 +07:00
Roman Kelesidis
8b617b990e Updated composer
* Corrected versions
* Removed PHPStan
2023-02-22 23:41:52 +07:00
Roman Kelesidis
596ba66903
Merge pull request #547 from torrentpier/updated-scrollto-up-1.4.6
Updated scrollTo up to 1.4.6
2023-02-22 23:32:41 +07:00
Roman Kelesidis
91bc09f40b Updated scrollTo up to 1.4.6
From 1.4.2 up 1.4.6
2023-02-22 23:32:11 +07:00
Roman Kelesidis
3d46f12f75 Removed ugly copyright in indexer 2023-02-22 23:22:51 +07:00
Roman Kelesidis
8addd6b310
Merge pull request #545 from torrentpier/added-mailer-is-active-check-admin-mass-email
Added $bb_cfg['emailer']['enabled'] admin_mass_email.php check in
2023-02-22 23:13:30 +07:00
Roman Kelesidis
8b1909a5a6 Added $bb_cfg['emailer']['enabled'] admin_mass_email.php check in 2023-02-22 23:13:00 +07:00
Roman Kelesidis
ef80178f45 Added ability to print page 2023-02-21 15:11:42 +07:00
Roman Kelesidis
3767ff9e92
Merge pull request #543 from torrentpier/added-topic-copy-button
Added current topic url copy button in viewtopic
2023-02-21 14:51:04 +07:00
Roman Kelesidis
364f00a427 Added current topic url copy button in viewtopic
Добавляет кнопку для копирования ссылки на текущий топик
2023-02-21 14:49:27 +07:00
Roman Kelesidis
611bda9735
Merge pull request #542 from torrentpier/added-copy-button-in-viewforum-page
Added copy button in viewforum page
2023-02-21 14:45:46 +07:00
Roman Kelesidis
cfc7256285 Added copy button in viewforum page
Кнопка которая копирует URL текущего форума
2023-02-21 14:44:07 +07:00
Roman Kelesidis
6ca46c31b2
Merge pull request #541 from torrentpier/fixed-broken-log-copy
Fixed broken log copy
2023-02-20 23:29:20 +07:00
Roman Kelesidis
9dd1b149a0
Merge pull request #540 from torrentpier/added-forum-desc-in-viewforum
Added forum description in viewforum page
2023-02-20 23:20:46 +07:00
Roman Kelesidis
3cf6e0974c Fixed broken copy log from debug-panel
Исправляет напрочь нерабочую реализацию копирования данных из дебаг панели. По-моему ещё с SVN версий не работало 😁

+ Перспективы на будущее использование в коде при необходимости.
2023-02-20 23:16:06 +07:00
Roman Kelesidis
0bcb6b67a8 Added forum description in viewforum page
Добавляет описание форума на самой странице форума. Ранее описание высвечивалось только на главной в списке форумов.
2023-02-20 22:41:39 +07:00
Roman Kelesidis
bd9561fc42
Merge pull request #539 from torrentpier/user-birthday-icon-profile
Added user birthday icon in profile
2023-02-20 21:30:44 +07:00
Roman Kelesidis
e4e337942d Added user birthday icon in profile
Добавляет иконку тортика в профиль.

До этого иконка выводилась только в viewtopic, теперь же она добавляется в viewprofile

Для универсальности написал отдельную функцию которая принимает в себя $user_birthday и $user_id.
2023-02-20 18:50:03 +07:00
Roman Kelesidis
e9abfd9890
Merge pull request #538 from torrentpier/adm-panel-adjustments
Admin panel adjustments
2023-02-20 18:31:25 +07:00
Roman Kelesidis
ba643cf5c9 Admin panel adjustments
* Added search user box in admin_user_search.tpl.
* Removed useless dublicated class="post" in some files.
* Grouped Delete & Edit actions in admin_ranks.tpl.
2023-02-20 18:30:34 +07:00
Roman Kelesidis
9419ff6ebf
Merge pull request #536 from torrentpier/extended-email-validation
Extended email validation
2023-02-19 16:46:59 +07:00
Roman Kelesidis
12ee76ff43 Extended email validation
* Standard RFC-like email validation.
* Will check if there are DNS records that signal that the server accepts emails. This does not entail that the email exists.
* Will check for multi-utf-8 chars that can signal an erroneous email name.
2023-02-19 16:46:16 +07:00
Roman Kelesidis
10436f55fe
Merge pull request #535 from torrentpier/fixed-sqlite-issue
Fixed SQLite caching issue
2023-02-19 15:34:31 +07:00
Roman Kelesidis
5be722c69a Fixed SQLite caching issue
* count(): Parameter must be an array or an object that implements Countable

* It happens because of in PHP 7.2 NULL in count() return Warning
2023-02-19 15:33:54 +07:00
Roman Kelesidis
715ac11a8d
Merge pull request #534 from torrentpier/new-implementation-of-old-browser-detector
New implementation of old browser detector
2023-02-19 12:35:32 +07:00
Roman Kelesidis
e17b6bb1d4 New implementation of old browser detector 2023-02-19 12:34:36 +07:00
Roman Kelesidis
9a71c20121
Merge pull request #533 from torrentpier/fixed-broken-sql-log-selecting
Fixed broken sql log selecting in debug-panel
2023-02-19 12:14:12 +07:00
Roman Kelesidis
a2bf059c35 Fixed broken sql log selecting in debug-panel 2023-02-19 12:13:42 +07:00
Roman Kelesidis
63802f02ba Added .env in .gitignore 2023-02-19 11:56:31 +07:00
Roman Kelesidis
ef791b0dfa
Merge pull request #532 from torrentpier/update-path
docs: change official forum path
2023-02-18 16:34:06 +07:00
Yury Pikhtarev
908b44f076 docs: change official forum path 2023-02-18 12:28:59 +03:00
Roman Kelesidis
7d815700d4 Release 2.3.0.3 2023-02-18 00:05:46 +07:00
Roman Kelesidis
5656116744
Merge pull request #531 from torrentpier/htaccess-change-to-new-required-all-denies
Replaced deny from all with Require all denied
2023-02-17 23:45:31 +07:00
Roman Kelesidis
9d58ce9ab2 Replaced deny from all with Require all denied 2023-02-17 23:45:00 +07:00
Roman Kelesidis
e0d5cf5548
Merge pull request #530 from torrentpier/htaccess-removed-useless-files
Removed useless .htaccess files
2023-02-17 23:43:53 +07:00
Roman Kelesidis
405513d59c Removed useless .htaccess files 2023-02-17 23:42:44 +07:00
Roman Kelesidis
bf0d5fd883
Merge pull request #529 from torrentpier/constant-xs-tpl
Use XS_TPL_PREFIX instread of 'tpl_'
2023-02-17 23:36:03 +07:00
Roman Kelesidis
48654fbf1d Use XS_TPL_PREFIX instread of 'tpl_' 2023-02-17 23:35:38 +07:00
Roman Kelesidis
dcb3b6f596 Revert "Misc code improvements"
This reverts commit b479068bf3.
2023-02-17 23:31:23 +07:00
Roman Kelesidis
6064903284 Revert "Added showing post number in viewtopic"
This reverts commit a66a383f2f.
2023-02-15 23:23:46 +07:00
Roman Kelesidis
555119b7e8 Added phpstan in composer.json 2023-02-08 18:06:31 +07:00
Roman Kelesidis
ef526d272e Added email in composer.json 2023-02-06 17:11:45 +07:00
Roman Kelesidis
4493a59c57
Merge pull request #528 from torrentpier/added-declensions-for-count-downloads
Added declensions for count of downloads
2023-01-29 00:24:56 +07:00
Roman Kelesidis
3955472eb1 Added declensions for count of downloads 2023-01-29 00:22:16 +07:00
Roman Kelesidis
8870ff8800
Merge pull request #527 from torrentpier/fixed-broken-getting-avatars-directory-size
Fixed broken getting avatars directory size
2023-01-28 12:27:57 +07:00
Roman Kelesidis
b950858cf9 Fixed broken getting avatars directory size 2023-01-28 12:27:38 +07:00
Roman Kelesidis
005b99b6ef
Merge pull request #526 from torrentpier/fixed-logo-path
Update README.md
2023-01-27 18:32:41 +07:00
Roman Kelesidis
7a44f1fa2b Update README.md 2023-01-27 18:32:15 +07:00
Roman Kelesidis
8bd6a020d6
Merge pull request #525 from torrentpier/updated-copyright-year
Updated copyright year
2023-01-27 18:30:51 +07:00
Roman Kelesidis
261e8b6e27 Updated copyright year 2023-01-27 18:30:34 +07:00
Roman Kelesidis
3ac291cbc5 Release 2.3.0.2 2023-01-23 23:49:10 +07:00
Roman Kelesidis
0b72f999fa
Merge pull request #518 from torrentpier/fixed-array-multi-sorting
Fixed array multi sorting
2023-01-23 23:39:08 +07:00
Roman Kelesidis
983d364845 Fixed array multi sorting 2023-01-23 23:38:47 +07:00
Roman Kelesidis
65bdac8887
Merge pull request #517 from torrentpier/fixed-broken-file_write
Fixed broken file_write() function
2023-01-23 20:26:39 +07:00
Roman Kelesidis
4a65e1af02 Fixed broken file_write() function 2023-01-23 20:26:05 +07:00
Roman Kelesidis
9928f70fe5
Merge pull request #516 from torrentpier/misc-improvements
Misc code improvements
2023-01-23 20:18:35 +07:00
Roman Kelesidis
b479068bf3 Misc code improvements 2023-01-23 20:18:04 +07:00
Roman Kelesidis
78ba737cd3
Merge pull request #515 from torrentpier/updated-normalize-css
Updated normalize css up to 8.0.1
2023-01-23 19:28:46 +07:00
Roman Kelesidis
baca48e4cf Updated normalize css up to 8.0.1 2023-01-23 19:28:01 +07:00
Roman Kelesidis
33b78f8b99 Update README.md 2023-01-23 19:11:30 +07:00
Roman Kelesidis
dc97b2b109
Merge pull request #514 from torrentpier/updated-jquery
Updated jQuery up to 1.12.4
2023-01-23 18:57:41 +07:00
Roman Kelesidis
6e537db290 Updated jQuery up to 1.12.4 2023-01-23 18:57:19 +07:00
Roman Kelesidis
442b58d799 Removed useless bootstrap directory 2023-01-23 18:53:11 +07:00
Roman Kelesidis
5b94eb8481 Merge branch 'master' of https://github.com/torrentpier/torrentpier 2023-01-23 18:51:44 +07:00
Roman Kelesidis
e272dc1668 Update .gitignore 2023-01-23 18:51:21 +07:00
Roman Kelesidis
8f4d4d3eff
Merge pull request #513 from torrentpier/updated-composer
Added symfony/polyfill
2023-01-23 18:46:58 +07:00
Roman Kelesidis
19bda9cb1f Added symfony/polyfill 2023-01-23 18:46:01 +07:00
Roman Kelesidis
9ff8aabd57
Merge pull request #512 from torrentpier/updated-composer
Updated composer dependencies
2023-01-23 18:44:10 +07:00
Roman Kelesidis
5324a782ed Updated composer dependencies 2023-01-23 18:43:13 +07:00
Roman Kelesidis
cf16362077
Merge pull request #511 from torrentpier/added-showing-post-number-in-topic
Added showing post number in viewtopic
2023-01-23 18:24:04 +07:00
Roman Kelesidis
a66a383f2f Added showing post number in viewtopic 2023-01-23 18:23:29 +07:00
Roman Kelesidis
9c9933014c
Merge pull request #510 from torrentpier/fixes-and-improvements-sql
Fixed and improvements for SQL
2023-01-23 18:10:19 +07:00
Roman Kelesidis
881e3f8db9 Fixed and improvements for SQL 2023-01-23 18:09:06 +07:00
Roman Kelesidis
88bbf30348
Merge pull request #509 from torrentpier/fixes-for-strict-mode-sql
Fix some bugs with MySQL strict mode
2023-01-23 17:22:18 +07:00
Roman Kelesidis
5b85c77d2b Fix some bugs with MySQL strict mode 2023-01-23 17:17:29 +07:00
Roman Kelesidis
3303de36e7
Merge pull request #508 from torrentpier/fixed-broken-user-search-admin-groups
Fixed broken user search in admin_groups
2023-01-23 17:01:57 +07:00
Roman Kelesidis
5f232c1440 Fixed broken user search in admin_groups 2023-01-23 17:01:16 +07:00
Roman Kelesidis
ca54be24b5
Merge pull request #507 from torrentpier/fixed-deprecate-filter-validate
Fixed PHP 7.3: Deprecate FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_…
2023-01-23 16:42:30 +07:00
Roman Kelesidis
b59622d254 Fixed PHP 7.3: Deprecate FILTER_FLAG_SCHEME_REQUIRED and FILTER_FLAG_HOST_REQUIRED flags used with FILTER_VALIDATE_URL 2023-01-23 14:42:39 +07:00
Yuriy Pikhtarev
92856a4268
Merge pull request #472 from torrentpier/2.3
Release 2.3.0.1 🐂
2018-06-27 00:08:37 +03:00
Yuriy Pikhtarev
e6ad99825f
Merge branch 'master' into 2.3 2018-06-27 00:08:04 +03:00
Yuriy Pikhtarev
8636237695
Release 2.3.0.1
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-27 00:06:05 +03:00
Yuriy Pikhtarev
25d8a7fa56
Merge pull request #471 from Exileum/bugfix/cron-jobs
Fix cron jobs fail without global config variable
2018-06-27 00:03:12 +03:00
Yuriy Pikhtarev
cf148ba011
Fix cron jobs fail without global config variable
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-27 00:02:16 +03:00
Yuriy Pikhtarev
605670d916
Merge pull request #470 from Exileum/feature/code-cleanup
Cleanup BBCode class
2018-06-26 23:57:08 +03:00
Yuriy Pikhtarev
201720c22f
Cleanup BBCode class
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-26 19:44:20 +03:00
Yuriy Pikhtarev
566b99fbcd
Merge pull request #469 from torrentpier/2.3
Release 2.3.0 🐂
2018-06-26 16:29:20 +03:00
Yuriy Pikhtarev
289c037ee1
Release 2.3.0
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-26 16:25:02 +03:00
Yuriy Pikhtarev
68d7991f4f
Merge pull request #468 from Exileum/crowdin/release-preparation
Release preparation. Crowdin language pack update
2018-06-26 16:07:47 +03:00
Yuriy Pikhtarev
5282032177
Release preparation. Crowdin language pack update.
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-26 16:06:09 +03:00
Yuriy Pikhtarev
5a5bd95d48
Merge pull request #467 from Exileum/feature/deprecations
PHP 7+ deprecations of old cache systems
2018-06-26 15:18:34 +03:00
Yuriy Pikhtarev
a4845b4514
PHP 7+ deprecations of old cache systems
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-26 15:09:47 +03:00
Yuriy Pikhtarev
1296f58f8c
Merge pull request #466 from Exileum/bugfix/atom-global-feed-name
Fix global atom feed name
2018-06-24 22:10:24 +03:00
Yuriy Pikhtarev
1ca6e07ef6
Fix global atom feed name
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 22:07:54 +03:00
Yuriy Pikhtarev
b80ef5d0e5
Merge pull request #465 from Exileum/feature/new-dl-url
Configurable download torrent url
2018-06-24 21:35:24 +03:00
Yuriy Pikhtarev
5a1a4762b8
Configurable download torrent url
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 21:33:27 +03:00
Yuriy Pikhtarev
f09286900c
Merge pull request #464 from Exileum/bugfix/mysql_strict_mode
Fix some bugs with MySQL strict mode
2018-06-24 21:10:05 +03:00
Yuriy Pikhtarev
5429a3bcb8
Fix some bugs with MySQL strict mode
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 21:08:46 +03:00
Yuriy Pikhtarev
b02fe1dcc5
Merge pull request #463 from Exileum/bugfix/release_template_editor
Fix release template editor
2018-06-24 20:44:26 +03:00
Yuriy Pikhtarev
d23b13ec86
Fix release template editor
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 20:43:19 +03:00
Yuriy Pikhtarev
5078ed646d
Merge pull request #462 from Exileum/bugfix/privmsg_clean_username
Fix multiple variable cleanup in private messaging
2018-06-24 20:09:13 +03:00
Yuriy Pikhtarev
194e6974d8
Fix multiple variable cleanup in private messaging
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 20:08:27 +03:00
Yuriy Pikhtarev
74147160f6
Merge pull request #461 from Exileum/bugfix/magnet
Fix magnet link passkey creation for new users
2018-06-24 18:58:42 +03:00
Yuriy Pikhtarev
1cbc084f2e
Fix magnet link passkey creation for new users
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 18:08:20 +03:00
Yuriy Pikhtarev
c1fb1479ad
Merge pull request #460 from Exileum/feature/php_713
Update required PHP version to 7.1.3
2018-06-24 16:51:52 +03:00
Yuriy Pikhtarev
78af495048
Unqualified function/constant reference and much more
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 16:46:50 +03:00
Yuriy Pikhtarev
b08f6e898b
Type casting can be used
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 15:23:40 +03:00
Yuriy Pikhtarev
742575bb56
Short list syntax can be used
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 15:21:55 +03:00
Yuriy Pikhtarev
4bb72dfe59
Power operator can be used
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 15:20:23 +03:00
Yuriy Pikhtarev
f0d6d30def
Null coalescing operator can be used
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 15:18:35 +03:00
Yuriy Pikhtarev
4667c92f60
Update required PHP version to 7.1.3
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 15:10:48 +03:00
Yuriy Pikhtarev
f91018156a
Merge pull request #459 from Exileum/feature/autoload_functions
Split functions to the composer autoloading
2018-06-24 14:26:45 +03:00
Yuriy Pikhtarev
83ca67fae6
Split functions to the composer autoloading
Signed-off-by: Yuriy Pikhtarev <iglix@me.com>
2018-06-24 14:20:29 +03:00
Yuriy Pikhtarev
6aae72b836
Merge pull request #458 from Exileum/feature/copyright_update
Update copyright to the short syntax
2018-06-23 21:51:22 +03:00
Yuriy Pikhtarev
2f9cef0a39
Update copyright to the short syntax. 2018-06-23 21:50:13 +03:00
Yuriy Pikhtarev
39a2031470
Merge pull request #457 from Exileum/issue/451
Fix #451. Undefined index: L_CRON_EDIT_HEAD.
2018-06-23 21:07:40 +03:00
Yuriy Pikhtarev
4b9b2b7aa5
Fix #451. Undefined index: L_CRON_EDIT_HEAD. 2018-06-23 21:02:57 +03:00
Yuriy Pikhtarev
8cba75cf37
Merge pull request #456 from torrentpier/master
Merge head branches
2018-06-23 20:45:00 +03:00
Yuriy Pikhtarev
352aec62cd Update CNAME 2018-06-19 22:11:13 +03:00
Yuriy Pikhtarev
319e7f8a88 Create CNAME 2018-06-19 22:11:01 +03:00
Yuriy Pikhtarev
47432543a3 Set theme jekyll-theme-leap-day 2018-06-19 22:09:15 +03:00
Yuriy Pikhtarev
ed64facf84 Update issue templates 2018-05-22 18:23:49 +03:00
Yuriy Pikhtarev
4050326324 Merge pull request #449 from yukoff/bugfix/nullable-user-birthday
Default value for user_birthday causes exception on user password change
2017-08-28 01:10:23 +03:00
Yury Buldakov
59916c9bf5 Add support for NULLs as user_birthday 2017-08-27 16:20:32 +03:00
Yury Buldakov
a6ab8ac431 Fix "A non well formed numeric value encountered" exception
In case there are users having birthdays this week "A non well formed
numeric value encountered" exception is thrown.

Fixes #447
2017-08-27 07:18:43 +03:00
Yuriy Pikhtarev
01bb18fbaf Merge pull request #446 from yukoff/feature/roave-security-advisories
Add back roave/security-advisories
2017-08-09 22:38:42 +03:00
Yury Buldakov
d446ed4158 Add back roave/security-advisories
Add it back as otherwise tests with --prefer-lowest may fail
2017-08-09 01:52:39 +03:00
Yuriy Pikhtarev
3c661ea136 Merge pull request #444 from torrentpier/2.2
Release 2.2.3 🔥
2017-08-07 21:56:58 +03:00
Yuriy Pikhtarev
f3cfc8547e Merge pull request #443 from Exile37/feature/release-2.2.3
Release 2.2.3 🔥
2017-08-07 21:47:19 +03:00
Yuriy Pikhtarev
0285008752
Release 2.2.3. 2017-08-07 21:44:12 +03:00
Yuriy Pikhtarev
8f092b59ff Merge pull request #442 from Exile37/crowdin/release-preparation
Release preparation. Crowdin language pack update
2017-08-07 21:29:19 +03:00
Yuriy Pikhtarev
fcd3925554
Release preparation. Crowdin language pack update. 2017-08-07 21:28:14 +03:00
Yuriy Pikhtarev
fbccfeecc9 Merge pull request #441 from Exile37/bugfix/undefinied_lang
Unique topic page title, undefined language variables fix
2017-08-07 20:52:51 +03:00
Yuriy Pikhtarev
7e757b166b
Unique topic page title, undefined language variables fix. 2017-08-07 20:51:04 +03:00
Yuriy Pikhtarev
e234ea5e43 Merge pull request #440 from Exile37/bugfix/profile-ip-list
Remove matching users with default IP from profile list
2017-08-07 01:01:34 +03:00
Yuriy Pikhtarev
e865b4c258
Remove matching users with default IP from profile list. 2017-08-07 01:00:09 +03:00
Yuriy Pikhtarev
1d4a08a3d0 Merge pull request #439 from Exile37/bugfix/announcer-restore
Broken announcer fix, announcer debug removed
2017-08-07 00:32:29 +03:00
Yuriy Pikhtarev
9aba4d0d59
Broken announcer fix, announcer debug removed. 2017-08-07 00:30:28 +03:00
Yuriy Pikhtarev
78b8a38e73 Merge pull request #436 from Exile37/bugfix/js_ajax
Fix broken ajax
2017-08-02 23:43:27 +03:00
Yuriy Pikhtarev
3f62073630
Fix broken ajax. 2017-08-02 23:42:15 +03:00
Yuriy Pikhtarev
674edbd3f6 Merge pull request #434 from Exile37/bugfix/some-deprecations
Some deprecations, normalize.css, torrent file content sort fix
2017-07-30 11:29:26 +03:00
Yuriy Pikhtarev
0eb7faeed7
Some deprecations, normalize.css, torrent file content sort fix. 2017-07-30 11:25:57 +03:00
Yuriy Pikhtarev
78080dea32 Merge pull request #432 from Exile37/bugfix/logfile-regex
Incorrect log file rotation regex
2017-07-29 09:15:46 +03:00
Yuriy Pikhtarev
daeeb031e4
Incorrect logfile rotation regex. 2017-07-29 09:14:08 +03:00
Yuriy Pikhtarev
670a46d9b0 Merge pull request #431 from Exile37/bugfix/various-bugfixes
Various bug fixes described on the forum
2017-07-29 09:08:58 +03:00
Yuriy Pikhtarev
b54c9d0c2e
Various bug fixes described on the forum. 2017-07-29 09:08:36 +03:00
Yuriy Pikhtarev
4ec6a3e578 Merge pull request #430 from Exile37/bugfix/lang-variables
Fixes #412 - bug with dynamic language variables
2017-07-29 07:32:16 +03:00
Yuriy Pikhtarev
6af620831e
Fixes #412 - bug with dynamic language variables. 2017-07-29 07:30:10 +03:00
Yuriy Pikhtarev
6eaeab65f3 Merge pull request #429 from Exile37/feature/apache-24
Update .htaccess for new Apache 2.4 syntax.
2017-07-29 07:23:12 +03:00
Yuriy Pikhtarev
bf494a01ff
Update .htaccess for new Apache 2.4 syntax. 2017-07-29 07:19:24 +03:00
Yuriy Pikhtarev
6bd603f459 Merge pull request #415 from Exile37/crowdin/com
Crowdin language pack update for new project domain name
2017-06-25 00:13:52 +03:00
Yuriy Pikhtarev
9843d2d642
Crowdin language pack update for new project domain name. 2017-06-25 00:12:27 +03:00
Yuriy Pikhtarev
34ed920142 Merge pull request #414 from Exile37/bugfix/composer-json
Composer support section error
2017-06-25 00:06:56 +03:00
Yuriy Pikhtarev
3aa757cdea
Composer support section error. 2017-06-25 00:05:44 +03:00
Yuriy Pikhtarev
7bf0a6ab37 Merge pull request #413 from Exile37/feature/com
New project domain name
2017-06-25 00:03:05 +03:00
Yuriy Pikhtarev
9a2981953d
New project domain name. 2017-06-25 00:01:22 +03:00
Yuriy Pikhtarev
c9c77c2e05 Merge pull request #411 from torrentpier/2.2
Release 2.2.2 🌞
2017-06-23 00:27:52 +03:00
Yuriy Pikhtarev
3b7a0fd3ff Merge pull request #410 from Exile37/feature/release-2.2.2
Release 2.2.2 🌞
2017-06-23 00:22:58 +03:00
Yuriy Pikhtarev
2b44a0e8e8
Release 2.2.2. 2017-06-23 00:21:16 +03:00
Yuriy Pikhtarev
98379ba4da Merge pull request #409 from Exile37/crowdin/release-preparation
Release preparation Crowdin language pack update
2017-06-23 00:13:50 +03:00
Yuriy Pikhtarev
b6f9809399
Release preparation Crowdin language pack update. 2017-06-23 00:12:18 +03:00
Yuriy Pikhtarev
afebd74886 Merge pull request #408 from Exile37/bugfix/source-lang
Display source language if no user language variable
2017-06-23 00:05:09 +03:00
Yuriy Pikhtarev
750d978f0e
Display source language if no user language variable. 2017-06-23 00:01:27 +03:00
Yuriy Pikhtarev
cbc244796b Merge pull request #407 from Exile37/bugfix/disable-bugsnag
Disable Bugsnag by default
2017-06-22 23:19:07 +03:00
Yuriy Pikhtarev
70ce40dfc7
Disable Bugsnag by default. 2017-06-22 23:17:30 +03:00
Yuriy Pikhtarev
a9509bc2a4 Merge pull request #406 from Exile37/bugfix/birthday-list
Fix empty birthday list
2017-06-22 23:03:46 +03:00
Yuriy Pikhtarev
0c09d969b0
Fix empty birthday list. 2017-06-22 23:02:11 +03:00
Yuriy Pikhtarev
5ddd79a84d Merge pull request #405 from Exile37/bugfix/ranks
Remove unused ranks functionality
2017-06-22 22:24:03 +03:00
Yuriy Pikhtarev
061eb3550b
Remove unused ranks functionality. 2017-06-22 22:22:13 +03:00
Yuriy Pikhtarev
18a3a37fd2 Merge pull request #404 from Exile37/crowdin/some-bugfixes
Complete renewal of the Ukrainian language from our toloka.to friends
2017-06-22 02:29:09 +03:00
Yuriy Pikhtarev
0bdbad656b
Complete renewal of the Ukrainian language from our toloka.to friends. 2017-06-22 02:20:04 +03:00
Yuriy Pikhtarev
161ccfc303 Merge pull request #403 from Exile37/feature/some-bugfixes
Some fixes, auto language removal (so buggy) and replenishable status
2017-06-22 02:09:47 +03:00
Yuriy Pikhtarev
2ac12a2e54
Some fixes, auto language removal (so buggy) and replenishable status. 2017-06-22 01:56:01 +03:00
Yuriy Pikhtarev
819aab0572 Merge pull request #393 from torrentpier/2.2
Release 2.2.1 🐛
2017-06-16 00:41:33 +03:00
Yuriy Pikhtarev
a89211a915 Merge pull request #392 from Exile37/feature/release-2.2.1
Release 2.2.1 🐛
2017-06-16 00:32:56 +03:00
Yuriy Pikhtarev
0b7b5412a8
Release 2.2.1. 2017-06-16 00:28:43 +03:00
Yuriy Pikhtarev
ba4900a6cb Merge pull request #391 from Exile37/crowdin/toloka-ukrainian-update
Partial renewal of the Ukrainian language from our toloka.to friends
2017-06-16 00:07:34 +03:00
Yuriy Pikhtarev
21e7669c07
Partial renewal of the Ukrainian language from our toloka.to friends. 2017-06-16 00:05:46 +03:00
Yuriy Pikhtarev
d1455c2b1e Merge pull request #390 from torrentpier/add-code-of-conduct-1
Create CODE_OF_CONDUCT.md
2017-06-15 21:27:34 +03:00
Yuriy Pikhtarev
232c627118 Create CODE_OF_CONDUCT.md 2017-06-15 21:25:12 +03:00
Yuriy Pikhtarev
fcd3b74f12 Merge pull request #387 from Exile37/bugfix/admincp-bugsnag
Fix some notices in admin panel reported by BugSnag
2017-06-15 21:22:53 +03:00
Yuriy Pikhtarev
5728a73e50 Merge pull request #388 from Exile37/feature/tracker-forum-list
Tracker search forum list simplification
2017-06-15 21:22:22 +03:00
Yuriy Pikhtarev
33e50ec4ec Merge pull request #389 from Exile37/bugfix/dump-user-lang
Fix default users language in dump
2017-06-15 21:21:56 +03:00
Yuriy Pikhtarev
757b3e8960
Fix default users language in dump. 2017-06-15 01:22:20 +03:00
Yuriy Pikhtarev
175e22e844
Tracker search forum list simplification. 2017-06-15 01:12:53 +03:00
Yuriy Pikhtarev
c8acc4b02e
Fix some notices in admin panel reported by BugSnag. 2017-06-15 00:41:45 +03:00
Yuriy Pikhtarev
69348b2cc6 Merge pull request #368 from diolektor/fixed-sql-remove-limit-for-update
Fixed SQL. Remove limit from update
2017-06-14 00:20:24 +03:00
Vasily Komrakov
3cf76c97f9
Fixed sql. Remove limit from update. 2017-06-13 22:45:50 +03:00
Yuriy Pikhtarev
d78be79c7b Merge pull request #328 from Exile37/feature/release-2.2.0
Release 2.2.0 ☘️
2017-06-12 21:27:48 +03:00
Yuriy Pikhtarev
1575b6eae0
Release 2.2.0. 2017-06-12 21:18:41 +03:00
Yuriy Pikhtarev
f39006bcac Merge pull request #322 from Exile37/crowdin/release-preparation-final
Release preparation. Crowdin language pack update
2017-06-12 20:20:35 +03:00
Yuriy Pikhtarev
5942e57b53
Release preparation. New language activation and global UTF-8 charset. 2017-06-12 20:19:28 +03:00
Yuriy Pikhtarev
a2b533bb3e
Release preparation. Crowdin language pack update. 2017-06-12 19:04:20 +03:00
Yuriy Pikhtarev
3391fc38e1 Merge pull request #321 from Exile37/bugfix/release-preparation-final
TorrentPier Aurochs release preparation
2017-06-12 15:29:47 +03:00
Yuriy Pikhtarev
3e8b494572
TorrentPier Aurochs release preparation. 2017-06-12 15:28:45 +03:00
Yuriy Pikhtarev
e9a76e6a5c
Yarn init. 2017-06-12 06:03:39 +03:00
Yuriy Pikhtarev
2e53929377 Merge pull request #318 from Exile37/bugfix/release-preparation
Release preparation. Small bugfixes and readme translation
2017-06-12 05:46:12 +03:00
Yuriy Pikhtarev
1626614334
Release preparation. Small bugfixes and readme translation. 2017-06-12 05:44:10 +03:00
Yuriy Pikhtarev
0cc1a587c1 Merge pull request #314 from Exile37/crowdin/ip-storage
Crowdin language pack update
2017-06-12 04:00:20 +03:00
Yuriy Pikhtarev
084497e79b
Crowdin language pack update. 2017-06-12 03:57:04 +03:00
Yuriy Pikhtarev
2e24e83c60 Merge pull request #313 from Exile37/bugfix/ip-storage
IP storage and attachment system bugfix. PHP 5.6+
2017-06-12 03:33:48 +03:00
Yuriy Pikhtarev
8c6097f5d8
IP storage and attachment system bugfix. PHP 5.6+. 2017-06-12 03:31:39 +03:00
Yuriy Pikhtarev
b06bb45700 Merge pull request #303 from Exile37/feature/develop-partial-merge
Bootstrap update & beginning of the develop branch partial merge
2017-06-11 18:59:34 +03:00
Yuriy Pikhtarev
072b19b0ae
Admin index/log rework, codestyle and new_tpl deprecation. 2017-06-11 18:56:28 +03:00
Yuriy Pikhtarev
61b7ab3502
Bootstrap update & beginning of the develop branch partial merge. 2017-06-11 16:18:51 +03:00
Yuriy Pikhtarev
4d1f5cecbd Merge pull request #302 from Exile37/bugfix/avatars
Fix avatars display bug
2017-06-10 12:21:23 +03:00
Yuriy Pikhtarev
06684aae4c
Fix avatars display bug. 2017-06-10 12:19:54 +03:00
Yuriy Pikhtarev
8bac810833 Merge pull request #301 from Exile37/feature/environments
Cron subsystem rework. Environments
2017-06-10 12:03:11 +03:00
Yuriy Pikhtarev
18aeb3e9d5
Cron subsystem rework. Environments. 2017-06-10 12:02:47 +03:00
Yuriy Pikhtarev
d9060d55d9 Merge pull request #293 from Exile37/feature/new-logotype
New logotype, favicon and css split & reformat
2017-06-10 00:42:03 +03:00
Yuriy Pikhtarev
ea31c0bc81
New logotype, favicon and css split & reformat. 2017-06-10 00:37:21 +03:00
Yuriy Pikhtarev
418e21d335 Merge pull request #291 from Exile37/feature/whoops
Whoops error handler for debug users
2017-06-08 23:26:22 +03:00
Yuriy Pikhtarev
9755e8b775
Whoops error handler for debug users. 2017-06-08 23:20:50 +03:00
Yuriy Pikhtarev
3d0e26cf63 Merge pull request #252 from Exile37/feature/new_sitemap
Replace sitemap to the new external component
2017-06-02 00:06:44 +03:00
Yuriy Pikhtarev
826bdea1f5
Replace sitemap to the new external component. 2017-06-02 00:03:55 +03:00
Yuriy Pikhtarev
a14ed75385 Merge pull request #250 from Exile37/crowdin/ip_replace
Crowdin language pack update. Removed some languages
2017-05-30 23:02:37 +03:00
Yuriy Pikhtarev
708eeedbaa Merge pull request #249 from Exile37/feature/ip_replace
IP detect subsystem replace. Trash cleanup. Defines
2017-05-30 23:01:34 +03:00
Yuriy Pikhtarev
76b0bb3110
Crowdin language pack update. Removed some languages. 2017-05-30 01:53:04 +03:00
Yuriy Pikhtarev
ee544cc507
IP detect subsystem replace. Trash cleanup. Defines. 2017-05-30 00:57:57 +03:00
Yuriy Pikhtarev
3f7703a097 Merge pull request #244 from Exile37/feature/ads_removal
Old ads module removal
2017-05-27 13:19:49 +03:00
Yuriy Pikhtarev
46127baf3f
Old ads module removal. 2017-05-27 13:12:07 +03:00
Yuriy Pikhtarev
eb52f5a419 Merge pull request #243 from Exile37/feature/external_bencoder
External bencode library and some other changes
2017-05-26 23:29:05 +03:00
Yuriy Pikhtarev
bb6f772627
External bencode library and some other changes. 2017-05-26 02:21:46 +03:00
Yuriy Pikhtarev
0ed80b7074 Merge pull request #242 from diolektor/readme-add-new-logo
Added new logo to readme
2017-05-25 01:17:20 +03:00
Vasily Komrakov
4b6a712363
Added new logo to readme. 2017-05-25 01:10:35 +03:00
Yuriy Pikhtarev
ad8fbccbc9 Merge pull request #239 from Exile37/feature/bugsnag_integration
Bugsnag integration and some bugfixes in for cycles
2017-05-24 15:37:31 +03:00
Yuriy Pikhtarev
f7cc55b984
Bugsnag integration and some bugfixes in for cycles. 2017-05-24 01:23:28 +03:00
Yuriy Pikhtarev
8104657016 Merge pull request #237 from Exile37/feature/legacy_autoloading
PSR-4 compatible legacy code autoloading
2017-05-23 23:27:00 +03:00
Yuriy Pikhtarev
f254dabddb
PSR-4 compatible legacy code autoloading. Clean up. 2017-05-23 23:26:25 +03:00
Yuriy Pikhtarev
80a035d191
PSR-4 compatible legacy code autoloading. 2017-05-23 23:18:23 +03:00
Yuriy Pikhtarev
e463fee20f Merge pull request #238 from Exile37/hotfix/emailer_bugs
Bug with variables replacement and Crowdin localization fix
2017-05-23 23:17:23 +03:00
Yuriy Pikhtarev
b73d4cf490
Bug with variables replacement and Crowdin localization fix. 2017-05-23 23:14:01 +03:00
Yuriy Pikhtarev
8bf313d474 Merge pull request #235 from Exile37/crowdin/swiftmailer
New localization strings and full Crowdin language pack update
2017-05-23 14:57:42 +03:00
Yuriy Pikhtarev
3a6ab0cc4b Merge pull request #234 from Exile37/feature/swiftmailer
Replace own emailer to SwiftMailer
2017-05-23 14:56:59 +03:00
Yuriy Pikhtarev
09736499b4 Merge pull request #236 from Exile37/feature/utf8correct_removal
UFT-8 autocorrection removal from standart package
2017-05-22 14:09:38 +03:00
Yuriy Pikhtarev
02bb08dcd2
UFT-8 autocorrection removal from standart package. 2017-05-21 15:33:29 +03:00
Yuriy Pikhtarev
e3a3ec5483
New localization strings and full Crowdin language pack update. 2017-05-21 15:10:30 +03:00
Yuriy Pikhtarev
b2fdf0b2a9
Replace own emailer to SwiftMailer. 2017-05-21 15:00:01 +03:00
Yuriy Pikhtarev
091878c088 Merge pull request #232 from Exile37/feature/email_charset
Force email charset and Crowdin language pack update
2017-05-16 00:00:25 +03:00
Yuriy Pikhtarev
d1c9403b94
Force email charset and Crowdin language pack update. 2017-05-14 19:52:00 +03:00
Yuriy Pikhtarev
3aeb1562dc Merge pull request #231 from Exile37/feature/language_pack_update
Crowdin language pack update
2017-05-10 23:14:17 +03:00
Yuriy Pikhtarev
da6049c460
Crowdin language pack update. 2017-05-10 23:10:22 +03:00
Yuriy Pikhtarev
d754a4dc2c Merge pull request #230 from Exile37/code_inspection
Static code analyzer inspection, part 2
2017-05-10 19:28:52 +03:00
Yuriy Pikhtarev
d40af070ae
Small for cycle bugfix. 2017-05-09 23:05:30 +03:00
Yuriy Pikhtarev
72eb538a0a
Parameter could be declared as array. 2017-05-09 23:02:09 +03:00
Yuriy Pikhtarev
2210705486
'str(i)str(...)' could be replaced with 'str(i)pos(...)'. 2017-05-09 22:53:53 +03:00
Yuriy Pikhtarev
1f44ed29aa
Type casting can be used. 2017-05-09 22:52:46 +03:00
Yuriy Pikhtarev
dcb828d983
Alias functions usage. 2017-05-09 20:57:12 +03:00
Yuriy Pikhtarev
3712862832
Deprecated HTML tag. 2017-05-09 20:53:00 +03:00
Yuriy Pikhtarev
75ad3506c2
Ternary operator could be simplified. 2017-05-09 20:50:05 +03:00
Yuriy Pikhtarev
0a9e9e02eb
Unnecessary semicolon. 2017-05-09 20:47:56 +03:00
Yuriy Pikhtarev
187ee44eda
Callable name case mismatched in a call. 2017-05-09 20:47:18 +03:00
Yuriy Pikhtarev
74ab0dca58 Merge pull request #211 from Exile37/feature/deprecated_each
Deprecated each() function in php 7.2
2017-05-09 20:28:15 +03:00
Yuriy Pikhtarev
3d817078a6
Deprecated each() function in php 7.2 2017-05-09 20:25:59 +03:00
Yuriy Pikhtarev
0aae80ba8e Merge pull request #229 from diolektor/enhancement-code
Static code analyzer cherry picked from #228
2017-05-09 20:10:30 +03:00
Yuriy Pikhtarev
8f7ef8af1a
Unnecessary semicolon.
(cherry picked from commit fe79d6c)
2017-05-07 21:08:02 +03:00
Vasily Komrakov
56540c893a
Change for with count. 2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
32ca1d66fc
Unnecessary semicolon.
(cherry picked from commit fe79d6c)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
4e021d06d4
Static methods invocation via '->'.
(cherry picked from commit da1e5a5)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
1daec3c319
Short syntax for applied operation.
(cherry picked from commit a391e21)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
748476b802
Prefixed increment/decrement equivalent.
(cherry picked from commit a4965bf)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
a1ca9a0466
Callable name case mismatched in a call.
(cherry picked from commit 43f3e91)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
335195365f
Class property initialization flaws.
(cherry picked from commit cf5285f)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
5d6039d1c5
Parameter could be declared as array.
(cherry picked from commit 07c6fd4)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
99c79f264b
Insecure 'uniqid(...)' usage (Insufficient Entropy Vulnerability).
(cherry picked from commit 8d1a7d4)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
05442c4213
'stristr(...)/stripos(...)/strripos(...)' could be replaced with 'strstr(...)/strpos()/strrpos()'.
(cherry picked from commit eba06c0)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
8e5338e5d3
'str(i)str(...)' could be replaced with 'str(i)pos(...)'.
(cherry picked from commit b4d079f)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
5dd290f2b2
'(mb_)substr(...)' used as index-based access.
(cherry picked from commit e89f017)
2017-05-07 21:06:12 +03:00
Yuriy Pikhtarev
4dcb113960
'file(...)' misused.
(cherry picked from commit 9a96dc6)
2017-05-07 21:05:18 +03:00
Yuriy Pikhtarev
8d2c7b258b
'array_push(...)' misused.
(cherry picked from commit 897445b)
2017-05-07 21:05:18 +03:00
Yuriy Pikhtarev
21c8e7d48a
Type casting can be used.
(cherry picked from commit b5065ae)
2017-05-07 21:05:18 +03:00
Yuriy Pikhtarev
64df3c5538
'null === ...' can be used.
(cherry picked from commit ec96f65)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
13e3cf6c0d
Elvis operator can be used.
(cherry picked from commit 6a3bf7c)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
ba2e294fe9
__DIR__ constant can be used.
(cherry picked from commit 891ef41)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
3fbd9580a5
Deprecated constructor style.
(cherry picked from commit 38a722e)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
6abd9babc9
Alias functions usage.
(cherry picked from commit 4a79c08)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
6eed2e8a76
'unset(...)' calls could be merged.
(cherry picked from commit 8b3d5e7)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
02a06e68c9
Ternary operator could be simplified.
(cherry picked from commit 57f0cd7)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
fc8d71de5c
Strings normalization.
(cherry picked from commit 72f9ddd)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
dcd19e54a9
One-time use variables.
(cherry picked from commit 95575e1)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
75990902ae
If-return-return could be simplified.
(cherry picked from commit bcf57cd)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
b9330f6aae
Unit of measure 'px' is redundant.
(cherry picked from commit ca6d622)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
f8d84bc917
'safe_mode' is a deprecated option since PHP 5.3.0 (removed in PHP 5.4.0).
(cherry picked from commit 85bd60e)
2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
7e29eb925f
Binary-unsafe 'fopen(...)' usage
(cherry picked from commit b9686af)
2017-05-07 21:03:32 +03:00
Vasily Komrakov
2aa166ea08
Fix check version php. 2017-05-07 21:03:32 +03:00
Vasily Komrakov
3f0504912f
Fix sql. Remove excess "group by". 2017-05-07 21:03:32 +03:00
Vasily Komrakov
609696d0d0
Fix require file. 2017-05-07 21:03:32 +03:00
Yuriy Pikhtarev
e9585e0789 Merge pull request #183 from Exile37/hotfix/notices_in_admin_attach
Fix many notices in admin_attach_cp.php
2017-03-07 23:15:46 +03:00
Yuriy Pikhtarev
7023e386ac
Merge branch 'master' into hotfix/notices_in_admin_attach
# Conflicts:
#	library/attach_mod/includes/functions_admin.php
2017-02-26 01:53:47 +03:00
Yuriy Pikhtarev
4e97e814d4 Merge pull request #178 from diolektor/fix-user_lang-locale
Add check lang
2017-02-19 19:47:00 +03:00
Yuriy Pikhtarev
390518cfd4 Merge pull request #208 from diolektor/refactoring-admin
Performance refactoring. Remove test code. Fix path in config
2017-02-19 19:46:24 +03:00
Vasily Komrakov
d816c26284
Perfomance refactoring. Remove test code. Fix path in config. 2017-02-19 18:54:33 +03:00
Vasily Komrakov
8b33d82fc6
Add check lang
Fixed:
#174. PHP Notice in GET /
#175. PHP Notice in GET /
2017-02-19 18:41:32 +03:00
Yuriy Pikhtarev
8262cf769e
Fix many notices in admin_attach_cp.php 2017-02-12 15:56:46 +03:00
Yuriy Pikhtarev
cc69d607e7 Merge pull request #177 from diolektor/fix-sql-viewforum
Remove order from sql
2017-02-12 14:38:43 +03:00
Yuriy Pikhtarev
8deb4f40e3 Merge pull request #176 from diolektor/fix-path-to-ucp-viewtorrent
Fix path to viewtorrent.php
2017-02-12 14:33:14 +03:00
Vasily Komrakov
4db5588266
Remove order from sql 2017-02-12 11:29:35 +03:00
Vasily Komrakov
b292483666
Fix path to viewtorrent.php
#172. PHP Warning in GET /profile.php
#173. PHP Compile Error in GET /profile.php
2017-02-12 11:22:20 +03:00
Yuriy Pikhtarev
179d5644e5 Update Crowdin configuration file 2017-02-11 04:12:35 +03:00
Yuriy Pikhtarev
2acb05139c Merge pull request #167 from Exile37/hotfix/lang_pack_trash
Localization trash cleanup
2017-02-11 03:42:02 +03:00
Yuriy Pikhtarev
7ba36cd777
Localization trash cleanup 2017-02-11 03:36:32 +03:00
Yuriy Pikhtarev
51c1aa7e17 New Crowdin translations (master) (#164)
Crowdin localization bundle init
2017-02-11 03:03:53 +03:00
Yuriy Pikhtarev
6dedf5a2c1 Update Crowdin configuration file 2017-02-10 13:25:19 +03:00
Yuriy Pikhtarev
62b463edb7 Merge pull request #163 from Exile37/feature/crowdin_integration_master
Crowdin localization integration prepare and stopwords removal
2017-02-10 13:05:49 +03:00
Yuriy Pikhtarev
4b9965b062
Crowdin localization integration prepare and stopwords removal 2017-02-10 13:03:44 +03:00
Yuriy Pikhtarev
e87f1beff0 Merge pull request #159 from diolektor/fix-db-in-anounce
#157. Fix Error in GET /bt/announce.php
2017-02-08 21:50:58 +03:00
Vasily Komrakov
192a1c8601
#157. Fix Error in GET /bt/announce.php 2017-02-08 21:44:32 +03:00
Yuriy Pikhtarev
ecd6ed77d2 Merge pull request #143 from diolektor/change_paths
Change paths to absolute pathname
2017-02-08 21:39:13 +03:00
Vasily Komrakov
064175c67d
Change paths to absolute pathname 2017-02-08 21:34:48 +03:00
Yuriy Pikhtarev
81a51b0231 Merge pull request #148 from diolektor/check-composer-install
Added check composer install
2017-02-06 15:38:04 +03:00
Yuriy Pikhtarev
f4d0eab6a8 Merge pull request #147 from diolektor/fix-operator
Fix operators
2017-02-06 15:36:59 +03:00
Vasily Komrakov
71e351911a
Added check composer install 2017-02-06 00:07:47 +03:00
Vasily Komrakov
9bac23d0b1
Fix operators 2017-02-05 23:25:50 +03:00
Yuriy Pikhtarev
7a3f1ef242 Merge pull request #145 from diolektor/fix-crossdomain-chmod
#144 Files should not be executable
2017-02-05 23:07:02 +03:00
Vasily Komrakov
90223b694b
#144 Files should not be executable 2017-02-05 23:01:07 +03:00
Yuriy Pikhtarev
8de3cbfba5 Merge pull request #141 from Exile37/hotfix/redundant_pagination_and_other
Redundant pagination, mysql 5.7+ issue, release template option
2017-02-05 22:21:31 +03:00
Yuriy Pikhtarev
778f38f80b Merge pull request #140 from Exile37/hotfix/announce_php7
Transfer announce to the php7-optimized database layer
2017-02-05 22:15:53 +03:00
Yuriy Pikhtarev
8008bb899d Merge pull request #139 from Exile37/hotfix/deprecated_scritps_cleaning
Cleanup repository from old deprecated scripts and server configs
2017-02-05 22:15:33 +03:00
Yuriy Pikhtarev
c4749b001c Merge pull request #138 from Exile37/hotfix/torrent_filelist_fixes
Torrent ajax file list fixes and small reformat
2017-02-05 22:15:13 +03:00
Yuriy Pikhtarev
ed3682292e
Redundant pagination, mysql 5.7+ issue, release template option 2017-02-04 22:11:11 +03:00
Yuriy Pikhtarev
54693c00b8
Transfer announce to the php7-optimized database layer 2017-02-04 00:31:50 +03:00
Yuriy Pikhtarev
648c1bcbcb
Cleanup repository from old deprecated scripts and server configs 2017-02-03 02:03:10 +03:00
Yuriy Pikhtarev
f75cd7de56
Torrent ajax file list fixes and small reformat 2017-02-02 22:08:19 +03:00
Yuriy Pikhtarev
195fe90fc8 Merge pull request #135 from Exile37/feature/sphinx_composer_api
Replace Sphinx API to the composer version
2017-02-01 21:43:51 +03:00
Yuriy Pikhtarev
92cdafa391 Merge pull request #133 from Exile37/hotfix/incorrect_cases_master
Incorrect case close operators (master)
2017-02-01 21:43:16 +03:00
Yuriy Pikhtarev
fcc05aa677
Replace Sphinx API to the composer version 2017-01-30 23:05:12 +03:00
Yuriy Pikhtarev
a978ae260a
Incorrect case close operands 2017-01-30 22:41:02 +03:00
Yuriy Pikhtarev
2e092c7bd4 Merge pull request #132 from Exile37/feature/composer_init
Composer init, editor config, some cleanup and much more
2017-01-28 22:58:40 +03:00
Yuriy Pikhtarev
026401be4c
Composer init, editor config, some cleanup and much more 2017-01-28 22:56:46 +03:00
Yuriy Pikhtarev
6698bdc422 Merge pull request #129 from diolektor/remove-eval
Remove eval from admin_attachments and emailer
2017-01-26 23:57:12 +03:00
Yuriy Pikhtarev
e58318f2f3 Merge pull request #128 from diolektor/fix-sql-group-online-userlist
Fix sql group
2017-01-26 23:57:04 +03:00
Vasily Komrakov
fda559ca8b
Fix sql group 2017-01-26 23:52:30 +03:00
Vasily Komrakov
f6e8afb85f
Remove eval from admin_attachments and emailer 2017-01-26 23:51:20 +03:00
Yuriy Pikhtarev
fd8d3a817c Merge pull request #127 from diolektor/remove-zend
Remove Zend
2017-01-26 22:31:54 +03:00
Vasily Komrakov
3e161065f3
Remove Zend 2017-01-26 22:26:34 +03:00
Yuriy Pikhtarev
ee659bb190 Merge pull request #126 from Exile37/fix_upgrade_schema
Small fix to the upgrade schema
2017-01-25 00:01:43 +03:00
Yuriy Pikhtarev
cfc4a76e6b
Small fix to the upgrade schema 2017-01-24 23:59:33 +03:00
Yuriy Pikhtarev
4568f86a54 Merge pull request #125 from diolektor/fix-id-sqllog
Fixed id sqllog table and name select db
2017-01-23 21:00:10 +03:00
Vasily Komrakov
d671a783b5
Fixed id sqllog table and name select db 2017-01-23 20:57:27 +03:00
Yuriy Pikhtarev
c47fc2bd6f Merge pull request #122 from Exile37/new_whois_info
New external service for look up IP address
2017-01-22 19:48:14 +03:00
Yuriy Pikhtarev
f3964d53b1 Merge pull request #121 from Exile37/new_branding_and_copyright
New branding and copyright
2017-01-22 19:47:46 +03:00
Yuriy Pikhtarev
df26881ca8 Merge pull request #120 from Exile37/poster_birthday_fix
Poster birthday with no birthday date fix
2017-01-22 19:46:21 +03:00
Yuriy Pikhtarev
f6a8eed9bb Merge pull request #119 from Exile37/tidy_merge_spans
Tidy deprecated option merge-spans remove
2017-01-22 19:45:52 +03:00
Yuriy Pikhtarev
a0939152b7 Merge pull request #112 from diolektor/refactoring_posting_attachments
Refactoring posting_attachments
2017-01-22 19:45:29 +03:00
Yuriy Pikhtarev
29036876ea
New external service for look up IP address 2017-01-22 18:33:43 +03:00
Yuriy Pikhtarev
24769ef9df
New branding and copyright 2017-01-22 00:56:52 +03:00
Yuriy Pikhtarev
29033ce07b
Poster birthday with no birthday date fix 2017-01-21 23:33:27 +03:00
Yuriy Pikhtarev
b1641901f2
Tidy deprecated option merge-spans remove 2017-01-21 23:25:58 +03:00
Vasily Komrakov
d8f7a14d1d Refactoring posting_attachments and fix sql in job "tr_cleanup_and_dlstat" 2017-01-17 23:57:38 +03:00
Yuriy Pikhtarev
dafef6f624 Merge pull request #109 from Exile37/master_psr2
Reformat master branch to PSR-2 and MIT license
2017-01-14 04:19:43 +03:00
Yuriy Pikhtarev
3730bed000
Реформат в PSR-2 + добавление заголовков лицензии MIT в файлы 2017-01-14 04:08:14 +03:00
Yuriy Pikhtarev
a04df19607 Merge pull request #107 from diolektor/php7-future
Master branch up to php 7 compatibility
2017-01-13 00:09:05 +03:00
Vasily Komrakov
d107221a7b #69 Fixed crypt notice 2017-01-12 18:37:32 +03:00
Vasily Komrakov
efcd7ae71f php 7 future 2017-01-12 18:25:47 +03:00
PheRum
e5fab725e1 Merge pull request #47 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2015-05-24 01:04:30 +03:00
The Gitter Badger
832cfb4a58 Added Gitter badge 2015-04-10 11:28:06 +00:00
Exile
87189dbb54 no message 2015-03-09 00:49:28 +03:00
PheRum
cb34064647 no message 2015-03-07 22:50:35 +03:00
Exile
3bd7c1024b PHP 5.4 😞
Такого рода использование массивов внедрять пока еще рано. Отказ от PHP 5.3 будет позднее.
2014-12-07 01:51:35 +03:00
Exile
2eb49a79e6 Merge pull request #40 from torrentpier/develop
Develop

Версия 2.1.5 ALPHA-5

Пятый ALPHA-билд.

Основные изменения:

- замена стандартной капчи на reCAPTCHA v2;
- новый формат подключения языковых файлов и обновления в них;
- переход на использование в проекте JSON от ZF 2;
- перенос задачи начисления сидбонусов в отдельную и исправления ошибок в ней;
- исправление ошибки с английской системной локалью;
- обновление схемы обновления базы данных;
- переименование шаблонов email в .html для возможности локализации через Crowdin;
- прочие мелкие исправления.

Для обновления на версию, необходимо выполнить следующие запросы к базе данных:

DROP TABLE IF EXISTS `bb_captcha`;
DELETE FROM `bb_cron` WHERE `cron_script` = 'captcha_gen_gc.php';
INSERT INTO `bb_cron` VALUES ('', '1', 'Accrual seedbonus', 'tr_seed_bonus.php', 'interval', '', '', '25', '', '', '00:15:00', '0', '', '0', '0', '0');
2014-12-06 20:49:56 +03:00
Exile
6bc45ad3ce Обновления
Дополнение схемы обновления базы данных; еще один фикс задачи начисления сидбонусов.
2014-12-06 20:34:50 +03:00
PheRum
8d6eeece8e Убираем из индекса всякий мусор
Merge branch 'develop' of https://github.com/torrentpier/tracker into develop

Conflicts:
	library/config.php
	library/includes/sessions.php
2014-12-06 19:51:36 +03:00
Exile
075b185eaf Чистка от неиспользуемого
Удаление логирования сессий в текстовые файлы; откат исправлени отправки email, все было корректно.
2014-12-06 19:35:24 +03:00
Exile
7d2dc28fbe Отделение крон-задачи начисления сидбонусов
Отделение задачи из-за проблем с ее выполнением; исправление с присовением значений переменных массивам в задаче начисления сидбонусов; исправление ошибкис  кодировкой админки после изменения конфига языков; исправление ошибки с отправкой почты из-за неверного email-адреса.
2014-12-06 18:51:02 +03:00
Exile
5745161a54 reCAPTCHA и другое
Удаляем старую капчу и заменяем ее на рекапчу второй версии;
заменяеем подключение языковых файлов, и связанных с ними параметров;
исправление ошибки с путем к карктинке званий в админке;
исправление ошибки с неверной английской локалью.

После обновления необходимо выполнить следующие запросы к базе:

DROP TABLE IF EXISTS `bb_captcha`;
DELETE FROM `bb_cron` WHERE `cron_script` = 'captcha_gen_gc.php';
2014-12-06 01:35:23 +03:00
Exile
f8d0238f5b JSON decode нужен массивами, а не объектами
Хотя проблема, честно, странная. Согласно инструкции должно по-умолчанию отдавать массивами, а у нас поведение отличное.
2014-12-02 10:44:29 +03:00
Exile
12dfc04697 Переименование шаблонов email
Переименовываем шаблоны email для возможности их нормальной локализации через Crowdin.
2014-12-01 20:18:26 +03:00
Exile
328c6b2df6 Потерянный use 2014-12-01 20:09:19 +03:00
Exile
067528b2d7 ZF JSON
Убираем местные костыли по работе с JSON.
2014-12-01 20:05:43 +03:00
Exile
e37312cfab Merge pull request #39 from torrentpier/develop
Версия 2.1.4 ALPHA-4

Четвертый ALPHA-билд.

Основные изменения:

- интегрирован Zend Framework 2;
- перенос файлов из папки upload в корень проекта;
- перенос необходимых файлов для установки в папку install;
- обновление часовых поясов для России;
- исправление поддержки ssl;
- исправление подавления ошибок с помощью @;
- исправления ссылок на форум проекта;
- обновление примера конфигурации nginx, редиректы для apache;
- обновление sql-дампа (чистка мусора от xbtt, обновление формата);
- обновление bootstrap, добавление .gitignore;
- упрощение функции вывода аватара;
- перенос классов кеширования в отдельные файлы;
- исправление ошибки с начислением сидбонусов (строгая типизация);
- изменение метода поисковой строки (заработает "поисковость" в Яндекс.Браузер и т.п.);
- исправление ошибок с редиректом и редирект на главную страницу для отсутствующей темы;
- прочие мелкие исправления.
2014-11-26 21:31:09 +03:00
Exile
c69eec1b41 Исправления ошибок
Окончательное подключение ZF2, ошибки с редиректом, редирект если нет такой темы, проблемы старого аттач-мода. Нужно выложить 4 ALPHA-билд.
2014-11-26 02:33:25 +03:00
Exile
449b519f72 Подключение от ZF1 заменяем на ZF2
Исправление несоответствия подключения от ZF1 и самого ZF2.
2014-11-25 00:47:30 +03:00
Exile
0387f38d7f Интеграция с Zend Framework
Класс интеграции + вывод версии ZF в админку (для своевременного обновления).
2014-11-24 20:18:22 +03:00
Exile
1ac86c5b0d Zend Framework 2
Добавляем основные файлы ZF2. В будущем запланировано переписывание движка с использованием данного фреймворка.
2014-11-24 19:58:24 +03:00
Exile
92172c833b Ошибка подключения классов кеша
Исправление ошибки + замена sqlite_escape_string костыльного.
2014-11-24 13:59:51 +03:00
Exile
740eb64a51 Исправления ошибок
Мусорный файл, исправление ошибки с начислением сидбонусов (строгая типизация), изменение метода поисковой строки (заработает "поисковость" в Яндекс.Браузер и т.п.).
2014-11-23 00:42:41 +03:00
Exile
80c99e7c8e Перенос классов в файлы
Классы работы с базой данных, кеша, датастора переносим в отдельные файлы. Обычный require, но надо добавить require только при выбранности данного вида кеширования.
2014-11-23 00:22:21 +03:00
Exile
66455f879d Sitemap fix
Исправление ошибки с путями. TODO: реврайт для внутренних карт сайта.
2014-11-18 21:47:14 +03:00
Exile
1c5fb857f2 Исправления SSL, sitemap и т.д.
Множественные исправления предыдущих коммитов, правки форматирования.
2014-11-18 19:55:25 +03:00
Vitalychez
0804706fd7 sitemap fix 2014-11-18 15:44:52 +04:00
PheRum
bd905c64ad Merge branch 'theme_bootstrap' into develop 2014-11-12 23:46:57 +03:00
PheRum
575ef9fb48 bootstrap v.3.3.1 2014-11-12 23:46:39 +03:00
PheRum
bdcdceca1a Merge branch 'develop' into theme_bootstrap 2014-11-12 23:44:39 +03:00
Vitalychez
56c352b284 ssl fix 2014-11-10 18:15:24 +04:00
PheRum
dd6e9aed8e Возможность получить старый path нахождения аттачей или аватар используя одну функцию 2014-11-06 12:38:57 +03:00
PheRum
180f856406 начинает только мусор скапливаться 2014-10-31 20:11:26 +03:00
PheRum
13cbd9c58a в добавок к gitignore 2014-10-30 20:19:30 +03:00
Exile
41b0894d3d Фиксы ссылок на форум, дампа Ocelot
Небольшие работы со стилистикой и исправления некоторых ссылок.
2014-10-30 18:49:51 +03:00
PheRum
036bbae358 Merge branch 'sql_dump' into develop 2014-10-30 18:21:11 +03:00
PheRum
208cc82423 не то наменял 2014-10-30 18:20:49 +03:00
PheRum
c45a008f99 Merge branch 'bootstrap' into develop 2014-10-30 16:21:48 +03:00
PheRum
e736af9553 обновление Bootstrap до v3.3.0 и создание ветки для дальшей работы по внедрению Bootstrap 2014-10-30 16:21:32 +03:00
PheRum
a6fba9e4c5 Merge branch 'sql_dump' into develop 2014-10-30 14:31:51 +03:00
PheRum
5cda312da7 поле client 2014-10-30 14:31:36 +03:00
PheRum
d93d578e0d default value 2014-10-30 14:24:51 +03:00
PheRum
531d46874f чистка остаточных полей с xbtt 2014-10-30 12:20:24 +03:00
PheRum
39124f0c55 автоинкремент сам проставит нужные id 2014-10-30 12:12:56 +03:00
PheRum
0fd4e90fa5 обновление sql дампа 2014-10-30 12:00:30 +03:00
Exile
6e7595b686 Расширяем gitignore + защита .git
Добавляем некоторые используемые расширения в .gitignore + дополнительные правила для сервера (запрет на доступ к папке .git извне).
2014-10-29 20:12:18 +03:00
PheRum
5e65d7a8d7 gitignore и чистка 2014-10-28 23:38:47 +03:00
Exile
c5b210e556 Правка ссылки. 2014-10-28 23:12:23 +03:00
Exile
569c8c30e5 Правки после перемещения
Закрываем доступ к .md (раскрытие версии), переименование файла со списком помогающих.
2014-10-28 21:49:44 +03:00
Exile
f94c0dd2ee Перенос файлов движка в корень 2014-10-28 21:35:42 +03:00
Dmitry Larchikov
584f692288 develop
Подавление ошибок довольно медленная операция. Немножко убрал.
2014-10-28 18:06:22 +03:00
Dmitry Larchikov
b370d84786 develop
При вызове из командной строки лезут нотисы. Пофиксил.
2014-10-26 23:13:05 +03:00
Exile
d4c77489c7 Росскийские часовые пояса в выпадающий список для ориентирования. 2014-10-25 14:00:30 +04:00
Exile
ec831471ba Россия переходит на зимнее время 2014-10-24 21:10:33 +04:00
Exile
9bf658893a Merge pull request #38 from torrentpier/develop
Версия 2.1.3 ALPHA-3

Третий ALPHA-билд.

Основные изменения:

- нативная поддержка альтернативного компилируемого анонсера Ocelot;
- поддержка SSL-шифрования у внешнего SMTP-сервера (Яндекс.Почта и т.п.);
- удалена система транслитерации из движка (пользователям следует посоветовать использование сайтов наподобие http://translit.net/ для этой цели);
- исправлена ошибка с прописыванием ретрекера у гостей;
- исправлена ошибка с выводом списка релиз-групп;
- исправления путей к изображениям.
2014-10-24 16:17:55 +04:00
Exile
379b5f9677 Обновление readme. 2014-10-24 16:06:56 +04:00
Exile
65e8058815 Обновление readme 2014-10-24 12:02:34 +04:00
Exile
99400052d3 Интеграция с Ocelot
Добавляем интеграцию с Ocelot. Включение в конфиге, настройки там же. Исправление дампа базы на замену. Исправление ошибки с добавлением ретрекера гостю.
2014-10-24 10:43:09 +04:00
PheRum
5c51e6a824 поддержка ssl smtp отправки, добавление константы на папку с картинками 2014-10-23 21:05:30 +03:00
pherum
31e7430c33 микро фиксы 2014-10-23 20:30:57 +03:00
Exile
ce14b6a54b Добавление нативной поддержки Ocelot, начало. Параметры в конфиге, дамп базы. 2014-10-23 18:01:53 +04:00
Exile
cd8c7aa4b0 Удаление системы транслитерации из движка.
Отсутствует возможность поддерживать сложную систему транслитерации, тем более на нескольких языках. Пользователям следует посоветовать использование сайтов наподобие http://translit.net/ для этой цели.
2014-10-21 17:50:26 +04:00
Exile
d3b8049006 Удаление ссылки по просьбе, правки путей к картинкам, правка функции перезагрузки аватара. 2014-10-21 17:37:35 +04:00
Exile
f20402ad7e Merge pull request #37 from torrentpier/develop
Версия 2.1.2 ALPHA-2

Второй ALPHA-билд.

Основные изменения:

- новая структура папок движка, подготовка к частичному ООП, системе модулей, упрощение бекапа форума;
- новые пути к карте сайта, файлам классов, api, драйверу для работы в базой данных, файлу config.php;
- исправлена проверка на наличие и корректность работы tidy;
- исправлена поддерка скобок в ссылках;
- частично исправлена поддержка относительных путей.

Для обновления на версию, необходимо выполнить следующие запросы к базе данных:

UPDATE `bb_cron` SET `cron_script` = 'board_maintenance.php' WHERE `cron_script` = 'bb_maintenance.php';
TRUNCATE TABLE `bb_posts_html`;
2014-10-20 14:53:57 +04:00
Exile
75922449d7 Константа папки для скриптов профиля. 2014-10-20 14:43:23 +04:00
Exile
779ddb7b20 Ссылка на atom всех форумов. 2014-10-16 20:51:49 +04:00
Exile
539094ee7f Константа для папки с классами. 2014-10-16 20:41:23 +04:00
Vitalychez
1a2532402e Перенос класса базы 2014-10-08 08:30:21 +04:00
Exile
2d4f59cf81 Переименование скрипта крона. 2014-09-30 13:50:34 +04:00
Dmitry Larchikov
c88b41e35c Develop
это уже давно устарело
2014-09-28 14:55:41 +04:00
Exile
55a7b200dd Новый билд: ALPHA-2 2014-09-27 02:46:47 +04:00
Exile
180f839c8f Старый путь к css. 2014-09-27 02:44:45 +04:00
Exile
bdf93ca29a Перенос классов и api в свои подпапки. 2014-09-27 02:39:04 +04:00
Exile
50eccec1ae Пути в сайдбаре. 2014-09-25 16:36:13 +04:00
Exile
53c0e9f9b8 Конфиги, реврайты, лишняя папка. 2014-09-25 16:33:05 +04:00
Exile
7eaa4f3b8d Исправление подключение локального конфига. 2014-09-25 16:21:55 +04:00
Exile
d940bde30d Исправления ошибок с путями к изображениям. 2014-09-25 16:02:30 +04:00
Exile
68b722be83 Исправления ошибок. 2014-09-25 15:45:18 +04:00
Exile
cf0a860f10 Переделка структуры папок движка. 2014-09-25 15:07:35 +04:00
Dark Nightmare
63c38b6a38 fix url bbcode
make_clickable
2014-09-18 18:59:39 +06:00
Dark Nightmare
0fba5efd09 Fix url bbcode
фикс ссылок типа
https://site.com/public/4f7b69175cbf%2F%D0%A1%D0%BD%D0%BE%D0%B2%D0%B0%20%D0%BE%D0%B4%D0%B8%D0%BD%20%D0%BD%D0%B0%20%D0%B2%D1%81%D0%B5%D1%85%2001_%D1%81%D0%B5%D1%80%D0%B8%D1%8F_WEBRip_1080p%20(1)-009.mkv

содержащих скобки
2014-09-18 07:00:04 +06:00
Exile
cbae34ebf4 Merge pull request #34 from torrentpier/develop
Версия 2.1.1 ALPHA-1

Начало разработки версии 2.2. Первый ALPHA-билд.

Основные изменения:

- удалена встроенная система жалоб по причине излишней монструозности и несоответствия современным стандартам в целом;
- удалена поддержка кеширующей системы eaccelerator (последняя версия вышла в 2007 году, последняя совместимая версия php 5.4);
- удаление скриптов для бекапа через php (бекап настраивать надо на сервере, а не таким способом);
- переделка скрипта вывода служебных текстов (невозможность XSS, file include априори);
- мелкие правки верстки, локализации.

Для обновления на версию, необходимо выполнить следующие запросы к базе данных:

DROP TABLE IF EXISTS `bb_reports`;
DROP TABLE IF EXISTS `bb_reports_changes`;
DROP TABLE IF EXISTS `bb_reports_modules`;
DROP TABLE IF EXISTS `bb_reports_reasons`;
DELETE FROM `bb_config` WHERE `config_name` = 'report_subject_auth';
DELETE FROM `bb_config` WHERE `config_name` = 'report_modules_cache';
DELETE FROM `bb_config` WHERE `config_name` = 'report_hack_count';
DELETE FROM `bb_config` WHERE `config_name` = 'report_notify';
DELETE FROM `bb_config` WHERE `config_name` = 'report_list_admin';
DELETE FROM `bb_config` WHERE `config_name` = 'report_new_window';
DELETE FROM `bb_config` WHERE `config_name` = 'reports_enabled';
ALTER TABLE `bb_posts` DROP COLUMN `post_reported`;
ALTER TABLE `bb_privmsgs` DROP COLUMN `privmsgs_reported`;
ALTER TABLE `bb_topics` DROP COLUMN `topic_reported`;
DELETE FROM `bb_cron` WHERE `cron_script` = 'site_backup.php';
DELETE FROM `bb_cron` WHERE `cron_script` = 'db_backup.php';
2014-09-11 20:59:15 +04:00
Exile
90c7d4e889 Backup removed 2014-09-11 20:52:48 +04:00
Exile
34334e09c4 Contributors
Обновление списка поддерживающих движок.
2014-09-11 20:40:22 +04:00
Exile
b61a7ee9b6 New infopage script
Переделка файла выводящего страницы с информацией. Долой динамическое подключение и костыли на проверку XSS.
2014-09-07 18:56:37 +04:00
Exile
16c1e401d7 Merge branch 'master' into develop
Conflicts:
	upload/config.php
2014-09-07 17:18:53 +04:00
Exile
44dd6f69d0 Bugfix: https url replacement
Исправление ошибки с некорректной заменой https-ссылок.
2014-09-07 16:55:33 +04:00
Exile
129a3af4d0 Report hack removed
Удаление системы жалоб по причине излишней монструозности и несоответствия современным стандартам в целом. Система будет заменна до версии 2.2 на более легковесное решение на ajax.
2014-09-07 16:32:06 +04:00
Exile
bd6dc26fcb Eaccelerator removed
Удаляем eaccelerator из поддерживаемых движков кеширования - поддержка прекращена в 2007 году, последняя совместимая версия 5.4.
2014-09-03 21:23:46 +04:00
Exile
0776fb9f3b WC3 Validation
Исправление некоторых ошибок, которые нашел валидатор.
2014-09-03 16:48:56 +04:00
Dark Nightmare
f9ffa60e9a Unused variables
Удаление неиспользуемых переменных
2014-09-02 10:48:59 +06:00
Exile
85e2cb66d1 Нотис при просмотре tracker.php если нет групп
Исправление нотиса, возникающего при просмотре tracker.php, если на форуме не создано ни одной группы.
2014-09-01 14:00:19 +04:00
Exile
c78b6ace10 Мелкий фикс в схеме обновления
Немного неправильный порядок. Не критично.
2014-09-01 11:35:39 +04:00
Exile
2d56971bc7 Обновление конвертера
Устаревшая удаленная функция заменена на нормальную.
2014-09-01 10:46:21 +04:00
Exile
eb4ff6227f Обновление readme под новый формат конфига БД 2014-09-01 02:42:20 +04:00
Exile
baea6e04df Merge pull request #32 from torrentpier/develop
Версия 2.1 (R600)

Новая стабильная версия, рекомендуемая для обновления и перехода. Обсуждение релиза - на форуме: http://torrentpier.me/threads/vyshla-stabilnaja-versija-2-1-r600.26148/
2014-09-01 00:37:29 +04:00
Exile
5c61cdf981 R600
Теперь точно все. 2 года подошли к концу. Ура!
2014-09-01 00:07:46 +04:00
Exile
66e6c97289 The end.
Все. Остальная работа - на форуме.
2014-08-31 22:57:49 +04:00
Exile
16de03b214 Autocorrect layout
Опциональная корректировка раскладки клаваатуры в поиске. По умолчанию включено.
2014-08-31 22:14:41 +04:00
Exile
800111c899 Lang finish
Перевод языковых в управлении аватарой. С базовой частью перевода вроде все.
2014-08-31 21:46:42 +04:00
Exile
72b4307268 Upload langs
Перевод языковых связанных с загрузкой файлов.
2014-08-31 21:11:24 +04:00
Exile
d5a0e44eb9 More lang
Продолжение локализации.
2014-08-31 19:46:12 +04:00
Exile
70d27807eb Poll lang
Локализация голосований.
2014-08-31 18:46:54 +04:00
Exile
b468aaff39 Stats pages
Перевод страниц со статистикой, привод к едииному виду + фикс анкоров.
2014-08-31 17:46:31 +04:00
Exile
022fe7ea21 Cleaning
Несколько фиксов в бб-коды, небольшая чистка шаблонов, мелочи.
2014-08-31 16:54:11 +04:00
Exile
810439438d Revert previous
Откат предыдущего коммита. Все было ок.
2014-08-31 16:43:32 +04:00
Dark Nightmare
80a178b729 fix fix bbcode url
Фикс регулярки
2014-08-31 14:48:31 +06:00
Dmitry Larchikov
f86c369809 Fix bb-code.
Не работал bb-code вида [url]yandex.ru[/url]. Пофиксил.
2014-08-31 11:48:56 +04:00
Exile
2d865de5a1 Merge pull request #31 from torrentpier/develop
R599b

Дополнение к предыдущей ревизии. Добавлена страница с правилами ресурса, которую администратор может настроить в администраторской панели. Текст правил вводится как обычное сообщение и поддерживает бб-коды. Также был вынесен кеш конфига в отдельную сущность, дабы при его обновлениях не скидывался кеш всего форума в целом. Мелкие правки по шаблону.

Для обновления на ревизию требуется выполнить запрос к базе: INSERT INTO `bb_config` VALUES ('terms', '');
2014-08-31 02:59:55 +04:00
Exile
5ff735e0c8 Update shema fix
Забыла добавить в схему обновления базы.
2014-08-31 02:58:33 +04:00
Exile
0f91ad7bf3 Terms fix
Переделка страницы с правилами под стандарты + отдельный кеш для конфига.
2014-08-31 02:54:38 +04:00
Exile
0865d0f9ea Merge pull request #30 from torrentpier/feature/terms
Feature/terms
2014-08-30 18:44:23 +04:00
Dmitry Larchikov
8e54b30087 Добавлена страница с правилами. Настройка страницы из админки. 2014-08-30 15:55:01 +04:00
Exile
a7ee8484e4 Merge pull request #29 from torrentpier/develop
R599

Подготовка к релизу. Функциональные изменения в движок более не вносятся.

Основные изменения в данной ревизии:

- добавлена поддержка подключения локального файла конфигурации (подробнее в README.md);
- исправлена ошибка с недоступностью страницы настройки групп на веб-сервере Apache;
- исправлена ошибка при цитировании выделенного текста в форме быстрого ответа;
- чистка в языковых файлах, в шаблоне, мелкие исправления верстки шаблона в профиле;
- исправление ошибки при отправке личных сообщений, вызванных ревизией 598;
- исправление ошибки с невозможностью отключения показа подписи релиз-групы;
- переименование файла groupcp.php в group.php.

Также был добавлен небольшой бонус - летняя версия логотипа TorrentPier II.
2014-08-30 01:09:44 +04:00
Exile
515d020398 Soma lang + readme
Несколько переменных существующих локализованных заменил. Остальная локализация в 600 ревизии.
2014-08-30 00:58:46 +04:00
Exile
5d3561b4e9 Local config 2014-08-30 00:17:47 +04:00
Exile
d092d8d7f0 Template cleaning + bonus logo
Чистим шаблон немного.
2014-08-29 23:59:44 +04:00
Exile
f5bbc881c7 Lang clean
Удаляем лишнее в языковых (100 строк набралось).
2014-08-29 16:57:48 +04:00
Exile
069745da60 Some fixes
Исправления обнаруженных ошибок.
2014-08-29 15:55:35 +04:00
Exile
fc063b8fc3 Quote selected
Фикс цитаты выделенного.
2014-08-29 01:45:46 +04:00
Exile
9fd88dbb12 Notice in PM
Исправляем нотис в отправке личных сообщених из-за неверной расстановки условий.
2014-08-29 01:37:39 +04:00
Exile
8f3af36460 Group cp rename
Переименование файлов с группами и настройкой групп. Использовать слово config из-за htaccess нельзя.
2014-08-29 01:22:31 +04:00
Exile
aa1d266614 Dump fix
Правка ссылки в дампе, небольшие правки стиля.
2014-08-27 23:50:35 +04:00
Exile
3a2437dec5 Merge pull request #28 from torrentpier/develop
R598

Переделана система групп. Добавлена возможность создания релиз-групп, модераторы которых имеют возможность редактирования описания группы, ее подписи и т.п. Подробное описание со скриншотами опубликовано на форуме: http://torrentpier.me/threads/26134/

Для обновления на данную ревизию потребуется выполнение следующих запросов:

ALTER TABLE `bb_groups` CHANGE `group_description` `group_description` text NOT NULL DEFAULT '';
ALTER TABLE `bb_groups` ADD `avatar_ext_id` int(15) NOT NULL DEFAULT '0' AFTER `group_id`;
ALTER TABLE `bb_groups` ADD `mod_time` INT(11) NOT NULL DEFAULT '0' AFTER `group_time`;
ALTER TABLE `bb_groups` ADD `release_group` tinyint(4) NOT NULL DEFAULT '0' AFTER `group_type`;
ALTER TABLE `bb_groups` ADD `group_signature` text NOT NULL DEFAULT '' AFTER `group_description`;
ALTER TABLE `bb_posts` ADD `poster_rg_id` mediumint(8) NOT NULL DEFAULT '0' AFTER `poster_ip`;
ALTER TABLE `bb_posts` ADD `attach_rg_sig` tinyint(4) NOT NULL DEFAULT '0' AFTER `poster_rg_id`;

Остальные изменения в данной ревизии:

- добавлено кеширование статистики торрент-профиля пользователя;
- изменено приветственное сообщение после установки трекера;
- исправлена ошибка с нерациональным кешированием числом жалоб;
- исправлена фильтрация email-адреса пользователя;
- исправлены некоторые ошибки в шаблоне;
- прочие мелкие исправления и улучшения.
2014-08-27 23:04:03 +04:00
Exile
f56b89b9e1 New welcome message
Новое приветственное сообщение + небольшая правка таблички с информацией о релиз-группе.
2014-08-27 22:08:34 +04:00
Exile
8b9c1b30cd CSS for release table
Поправим яркие стили.
2014-08-27 18:02:42 +04:00
Exile
41f234fdab Update README.md 2014-08-27 17:40:48 +04:00
Exile
7241e419fe Group fixes
Наточил я свой топор, багофиксов полон двор. Некоторые изменения и фиксы новой системы групп по результатам тестирования.
2014-08-27 17:26:20 +04:00
Exile
99e89c4860 Merge branch 'feature/groups-dev' into develop
Заливаем новую систему групп (релиз-группы, аватарки пользователей, подготовленные релизы с подписями группы). Попутное исправление некоторых ошибок. Требуется обновить схему обновления базы данных и подготовить запросы пользователям для обновления. Инкримент версии движка, начало подготовки к релизу.
2014-08-27 14:32:54 +04:00
Exile
f7cefa1c87 Some cache
кешируем юзердату для трекера, правим кеширование системы жалоб, увеличиваем кеш для списка тех кто онлайн до минуты.
2014-08-26 13:40:41 +04:00
Exile
b4b4235986 Footer fix 2014-08-26 12:21:38 +04:00
Exile
e36a6dcebe Validate email
Новая валидация email-адресов.
2014-08-26 00:12:09 +04:00
Exile
d4c28abe87 MS-SQL? Rly?
Удаляем старенькое.
2014-08-25 16:40:55 +04:00
Exile
8c69f08269 Lang fix
Правка пары языковых переменных.
2014-08-25 12:18:19 +04:00
Exile
f53f5d11c2 Merge pull request #27 from torrentpier/develop
R597

Добавлена схема обновления базы и файлов до ревизии r600 с предыдущей стабильной. Для продвинутых пользователей уже возможно ручное обновление, путем последовательного выполнения запросов и запуска конвертеров "сложных" ревизий. Автоматический конвертер будет в ревизии r599.

Основные изменения в данной ревизии:

- добавлен поиск раздач по info-hash;
- добавлен вывод info-hash торрента в теме;
- добавлен недостающий конвертер на версию r496;

- переделано подключение языков (теперь достаточно закинуть папку и указать его в списке доступных для выбора пользователю в файле config.php);

- исправлена ошибка с автоматическим выбором украинского языка (язык переименован для соответствия стандарту);
- исправлена ошибка с генерацией atom-лент в случае их отсутствия;
- исправлено двойное подключение SWFObject в скриптах;
- исправлено отображение колонок в просмотре форума (небольшие правки стиля).
2014-08-24 21:28:10 +04:00
Exile
098595e3ea Info-hash search
Добавляем поиск по хешу, вывод хеша в топики.
2014-08-24 21:15:26 +04:00
Exile
56610c6d84 Converter
Обновление схемы базы, составление списка удаленных файлов для конвертера. По текущей схеме уже возможно обновление базы вручную.
2014-08-24 18:29:13 +04:00
Exile
13b06c62b6 JS
Небольшие правки в JS, удаление дублирущегося кода флеш-загрузчика, небольшие правки в шаблон.
2014-08-24 15:12:50 +04:00
Exile
9eaa8c4c2e Css
Пара фиксов.
2014-08-24 02:49:49 +04:00
Exile
22cfeb1b83 Converter
Добавляем недостающий конвертер. Начинаем работу над основным - составляем полный список изменений в схеме базы данных.
2014-08-24 01:22:23 +04:00
Exile
98efbee092 New lang include
Новая система подключения языков - автоматическая, теперь не надо дописывать новые языки в условие, достаточно забросить папку с ним и указать в массиве доступных языков к выбору пользователя.
2014-08-23 19:24:18 +04:00
Exile
83836e856f Ukrainian language fix
Неправильное название языка (локали). Приводим к стандарту. Файлы языковых не правились, кроме локали в main.php
2014-08-23 18:47:35 +04:00
Exile
0eab8c3198 ¯\_(ツ)_/¯
Очередной косяк с атом-лентами. Лента не создавалась первично.
2014-08-23 12:13:32 +04:00
Exile
1ffbe7f52c Potential bug in posting.php
Возможный баг при постинге из-за некорректного наименования переменной. Излишнее дублирование переменной все в том же постинге. Исправление дублирования параметра в CSS. Добавление пары строчек к описанию файлов, которые необходимо править после установки.
2014-08-21 21:14:50 +04:00
Exile
4090f9f9c3 Merge pull request #26 from torrentpier/develop
R596

Основные изменения в данной ревизии:

- добавлен опциональный атрибут nofollow для внешних ссылок, размещаемых в сообщениях;
- добавлена поддержка добавления ретрекера в скачиваемые торренты (отключаемая глобально и непосредственно пользователем);
- добавлена генерация magnet-ссылок для DC++ хабов, в просмотре содержимого торрента;

- переделано выделение форумов при их поиске в карте форума;
- переделан принцип генерации карты сайта (порядок тем);
- переделан принцип сортировки смайликов;

- исправлена ошибка с отрицательными размерами файлов, в просмотре содержимого торрента;
- исправлена ошибка с несоответствием поля lastmod стандарту у карты сайта;
- исправлена ошибка в запросе подписки на тему;
- исправлено форматирование картинки bb-кодом [img] по центру;
- исправление ошибки в украинской локализации (число скачиваний);

- удалены заготовки для чата (чат будет добавлен после стабильной, 600 ревизии);
- удален несоответствующий базовому набору смайлик.
2014-08-20 23:49:19 +04:00
Exile
4b2c5d9d64 Simply sort
Можно и без атрибута.
2014-08-20 23:47:52 +04:00
Exile
4fe050bf1c Nofollow
Добавляем атрибут nofollow для внешних ссылок + успрощение сортировки смайликов.
2014-08-20 23:30:41 +04:00
Exile
b1933c1d79 Sitemap time fix
Отображение времени в карте сайта согласно стандарта.
2014-08-20 02:11:20 +04:00
Exile
dd26eda857 Disable DC++ magnets
Отключение магнитов для хабов при отключении магнитов в целом.
2014-08-19 14:33:27 +04:00
Exile
48c5e149c2 Topic watch fix
Мелкий фикс запроса.
2014-08-19 01:55:16 +04:00
Exile
85b7ce7681 DC++ magnets + filelist fix
Поиск в DC++ по имени файла и расширению. Исправление ошибки с переполнением int в списке файлов (отрицательные размеры).
2014-08-19 01:47:48 +04:00
Exile
5a5c0fe95f Merge commit '4288681eb6' into develop
Добавление ретрекера в скачиваемые торренты. Отключение как админом глобально, так и через профиль конкретнм юзером.
2014-08-18 23:23:25 +04:00
Exile
5b236c6a81 Atom fix ¯\(°_o)/¯
Без комментариев вообще.
2014-08-17 16:19:17 +04:00
Dark Nightmare
ca8df0deec Subscribe to the feed in viewforum page
Добавлена ссылка для подписки на ленту на странице viewforum
2014-08-16 08:01:08 +06:00
Exile
5f18edc936 Remove chat drafts
Удаляем заготовки для чата, раньше времени включенные в основную ветку. Чат отдельной веткой разрабатывается и будет включен только после 600 ревизии.
2014-08-15 10:16:49 +04:00
Dmitry Larchikov
317691eb5f Более логичная подсветка совпадений. Строку мы и там видим, а вот част которая совпала с поисковой лучше подсветить. 2014-08-15 08:57:57 +04:00
Dmitry Larchikov
4288681eb6 Merge branch 'master' into feature/retracker 2014-08-15 08:47:38 +04:00
Exile
adc1a3353a Merge pull request #22 from torrentpier/develop
R595

Основные изменения в данной ревизии:

- добавлена карта форумов;
- добавлена генерация atom-лент для форумов и пользователей;
- добавлено оповещение администратора о недоступности форума;
- добавлена возможность снятия блокировки залипшего крона из админки на ajax;

- переделано использование прямых ссылок исполняемых файлов на константы;
- переделан вывод "золотого статуса" для раздач, на универсальную функцию;
- переименована папка с вложениями, для обеспечения совместимости в будущем;
- переименован файл download.php -> dl.php;
- переименование часовых поясов GMT в UTC;
- переделан список допустимых шрифтов в написании сообщения;

- исправлена ошибка с доступом к файлам списка форумов (ajax);
- исправлена ошибка с выводом картинок через bbcode без явно указанного протокола;
- исправлена ошибка с недоступностью списков закачки для пользователей с низким рейтингом;
- исправлено время хранения статусов закачек для реализации новых возможностей в будущем;
- исправлено излишнее дублирование языковых переменных для вывода часового пояса;
- исправлена ошибка в просмотре списка скачавших торрент пользователей;
- исправлена ошибка с доступностью статистики трекера для всех;
- исправлена ошибка с неправильным редиректом для гостей;
- исправлены мелкие ошибки в языковых, css и файлах шаблона.
2014-08-14 23:12:50 +04:00
Exile
02ac67bb50 Ajax access
Исправление ошибки с недоступностью списка форума для вывода.
2014-08-14 23:09:46 +04:00
Exile
306418955e Config
Пояснения к путям у капчи и атомов. Уменьшенный интервал генерации общих атомов.
2014-08-14 22:54:34 +04:00
Exile
892b601b64 Merge branch 'feature/atom' into develop
* feature/atom:
  Atom ajax post
  Atom updates
  Function update_atom
  Atom path
  Atom links
  Atom images + forum map fix
  Atom for users
  Atom picture
  Atom
2014-08-14 22:51:15 +04:00
Exile
54d0c387b2 Atom ajax post
Фиксы при удалении поста на аяксе.
2014-08-14 22:44:15 +04:00
Exile
469d038784 Atom updates
Обновления лент при удалении тем (одиночном, массовом). При удалении сообщений (одиночном, массовом).
2014-08-14 22:21:55 +04:00
dimka3210@gmail.com
c2bceb9fc5 Добавление retracker.local через конфиг 2014-08-14 20:39:42 +04:00
Exile
773dcb5baf Lang cleaning
Удаление избыточных языковых переменных на часовые пояса.
2014-08-14 00:25:21 +04:00
Exile
1969c6c57e Function update_atom
Переходим на использование функции для минимизации кода.
2014-08-13 23:15:19 +04:00
Exile
5874e3383e Atom path
Фикс косяка с путями к атомам.
2014-08-13 22:24:57 +04:00
Exile
5b79642a1f Atom links
Ссылки в профиле пользователя + локализация. Осталась перегенерация лент при удалении тем и сообщений.
2014-08-13 00:26:22 +04:00
Exile
05832b2c6d Atom images + forum map fix
Начинаем добавлять ссылки на атом-ленты + корректировки в карте форумов.
2014-08-12 23:31:00 +04:00
Exile
12db8b3b5f Merge branch 'develop' into feature/atom 2014-08-12 22:24:00 +04:00
Exile
a7f0d2148c Atom for users
Создание лент пользователей: в аяксе, создание при обычном постинге, удаление при удалении юзера, фиксы папок для аттачей, аватарок и атомов. Осталось сделать пересоздание лент пользователей при удалении постов из тем и удалении тем (functions_admin).
2014-08-12 22:11:47 +04:00
Exile
626c1b19ba Lang fix + old attach
Фиксим пару языковых + переименововываем папку с аттачами, поскольку будет смена аттач-мода на новый.
2014-08-12 17:04:12 +04:00
Exile
506597ef09 Guest map fix
Фиксим вывод карты форума для гостей.
2014-08-12 16:27:55 +04:00
Exile
63835dbe76 Atom picture
Добавляем картинку для ленты, вносим ее в переменные.
2014-08-12 16:24:38 +04:00
Exile
683b86bf5c Atom
Начинаем добавлять поддержку генерации atom-лент.
2014-08-12 14:07:38 +04:00
Exile
49393a2458 Forums' map fix
Небольшой фикс.
2014-08-12 13:31:25 +04:00
Exile
5470d8a289 Forums' map
Добавлена карта форумов.
2014-08-12 13:16:02 +04:00
Exile
01933955e1 Less fonts
Уменьшаем базовое число доступных шрифтов.
2014-08-11 22:01:47 +04:00
Exile
d1f87716af Admin cron ulock
Разблокировка форума заблокированного крон на аяксе, GMT -> UTC, мелкие фиксы (золото, доступ к статистике, пара переменных).
2014-08-11 16:07:37 +04:00
Dark Nightmare
d4be38e088 Using constant links 2
Использование заранее определенных констант для ссылок
Небольшая правка
2014-08-11 00:45:30 +06:00
Dark Nightmare
dce994f613 Using constant links
Использование заранее определенных констант для ссылок
Исправление некорректного редиректа viewtopic.php
2014-08-10 19:46:09 +06:00
Dark Nightmare
1635224764 Search release groups releases in tracker.php
+ Поиск раздач релиз групп в tracker.php
+ Вывод ссылки "Релизы группы" если группа является релиз группой
+ Проверка является ли группа релиз группой
2014-08-09 22:24:15 +06:00
Exile
13e3af62d9 Download -> dl
Переименование скрипта закачки торрентов.
2014-08-09 10:25:46 +04:00
Exile
ab3786b02c Gold image
Вывод картинки золото/серебро через функцию, для предотвращения дублирования кода.
2014-08-09 01:29:32 +04:00
Exile
e6c0b2f930 Stupid rating limit remove
Удаляем дурацкое ограничение на запрет занесения раздачи в стисок будущих на закачку при низком рейтинге.
2014-08-09 01:06:46 +04:00
Dark Nightmare
040c9fb865 https bbcode support
Поддержка https для картинок в bbcode
2014-08-08 22:35:32 +06:00
Exile
1e78d6c0ea Merge pull request #17 from torrentpier/develop
Исправление случайно допущенной ошибки
2014-08-07 21:45:27 +04:00
Exile
94c4d058a5 Merge pull request #16 from torrentpier/hotfix/bbcode
Hotfix/bbcode
2014-08-07 21:44:20 +04:00
Exile
b73b5f6349 Bbcode hotfix
Откат из-за случайной ошибки в функции bbcode.
2014-08-07 21:40:43 +04:00
Dark Nightmare
8dc95f0622 Update README.md 2014-08-07 22:24:01 +06:00
Dark Nightmare
82092388d5 R594
Небольшие фиксы

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-07 12:32:51 +06:00
Dark Nightmare
8691ad0751 R594
+ Добавлены релизы группы на страницу группы
+ Исправлена проблема спойлера с названием

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-07 12:11:50 +06:00
Dark Nightmare
5c355fd027 R594
+ Добавлена дата создания группы

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-06 12:19:10 +06:00
Dark Nightmare
d3b9b0ca2b R594
Исправлено выполнение запроса при пустом поле avatar

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-05 22:18:55 +06:00
Dark Nightmare
0f1c93f166 R594
Не выводить блок если пользователь не состоит ни в одной релиз группе

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-05 13:57:04 +06:00
Dark Nightmare
ee26088b16 R593
Hot Fix Удаление группы
Обнуляйте переменные

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-05 01:11:03 +06:00
Dark Nightmare
090b886dc1 R593
+ Добавлена возможность указать от какой релиз группы создана раздача
+ Добавлена возможность присоединить подпись релиз группы при создании раздачи
+ Добавленна подпись релиз группы

Необходимый SQL запрос:

ALTER TABLE  `bb_posts` ADD  `poster_rg_id` mediumint(8) NOT NULL DEFAULT '0'
      ADD  `attach_poster_rg_sig` tinyint(4) NOT NULL DEFAULT '0';
ALTER TABLE  `bb_posts` ADD  `group_signature` text NOT NULL DEFAULT '';

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-05 00:45:47 +06:00
Dark Nightmare
a3a8cd548b R593
Фикс использования конфигов

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-03 20:49:37 +06:00
Dark Nightmare
89521020f2 R593
+ Добавлены конфиги для изображений групп в config.php
- Удален не используемый код

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-03 20:15:38 +06:00
Dark Nightmare
179baf8543 R593
Обновлен дамп базы

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-03 14:07:49 +06:00
Dark Nightmare
f992d730fd R593
+Добавлены аватары к группам

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-03 14:00:24 +06:00
Exile
cd40f62cd6 r593
Завершаем с форматированием.
2014-08-02 22:42:17 +04:00
Exile
7495588152 r593
Конвертирование последней косячной ветки к правильным окончаниям строк.
2014-08-02 22:27:46 +04:00
Exile
9324102892 r593
Разрешили конфликт ревизий.
2014-08-02 22:16:19 +04:00
Exile
fc9ed75775 Revert "R593"
This reverts commit 82960dd8e7.
2014-08-02 22:01:01 +04:00
Dark Nightmare
82960dd8e7 R593
+ Добавлена проверка прав в ajax
+ Добавлена возможность указать релиз группу при создании группы в администраторской панели
+ Исправленна работа bbcode
+ Исправлены мелкие недочеты

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-02 23:32:19 +06:00
Exile
61b27dd444 r593
Форматирование.
2014-08-02 19:50:08 +04:00
Dark Nightmare
b8cb7633e6 R593
Переработка системы групп пользователей

Signed-off-by: Dark Nightmare <gtdarknightmare@gmail.com>
2014-08-02 19:08:52 +06:00
2929 changed files with 246220 additions and 87029 deletions

7
.cliffignore Normal file
View file

@ -0,0 +1,7 @@
9766c534bddad8e82e6d19f9bad5cf70b9887f9a
92ce77ec0ec703c08a659419087a373f76e711f7
2d53efc945c7747be1755d0b66557a86bdc12cbd
602137b65129b817811b80975a369ebde3270c6d
4eb26ae37e1f4c82a45961517ffeb54c20200408
e59adce848a9e10ee5775254045cbbd915236b8b
9e0a64108d62236ab07b3f8d10e8c78269b8e1d1

19
.editorconfig Normal file
View file

@ -0,0 +1,19 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2
[*.{diff,md}]
trim_trailing_whitespace = false
[*.{php,tpl}]
indent_size = 4

13
.env.example Normal file
View file

@ -0,0 +1,13 @@
# Common params
TP_HOST=example.com
TP_PORT=80
APP_ENV=production
APP_CRON_ENABLED=true
APP_DEMO_MODE=false
# Database credentials
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=torrentpier
DB_USERNAME=root
DB_PASSWORD=secret

4
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,4 @@
# These are supported funding model platforms
github: torrentpier
open_collective: torrentpier

62
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,62 @@
name: Bug Report
description: File a bug report
title: "[Bug]"
labels: [Bug]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
The more detailed this bug report is, the faster it can be reviewed and fixed.
- type: input
id: version-torrentpier
attributes:
label: TorrentPier Version
description: TorrentPier version your using?
placeholder: 2.4.0
validations:
required: true
- type: input
id: version-php-os
attributes:
label: PHP & Platform
description: Exact PHP and Platform (OS) versions your using.
placeholder: 8.2.2 - Ubuntu 22.04 x64
validations:
required: true
- type: checkboxes
id: requirements
attributes:
label: Have you done this?
options:
- label: I am willing to share my stack trace and logs
required: true
- label: I can suggest a fix as a Pull Request
required: false
- type: textarea
id: expectation
attributes:
label: Expectation
description: Write what you expect to (correctly) happen.
placeholder: When I do this, I expect to this to happen.
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: Write what (incorrectly) happens instead.
placeholder: Instead, when I do this, I receive that.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Stack trace & logs
description: |
If you have a stack trace, you can copy it here. You may hide sensitive information.
Including a stack trace when reporting an error 500 is required.
placeholder: This is automatically formatted into code, no need for backticks.
render: shell
validations:
required: false

View file

@ -0,0 +1,7 @@
---
name: Feature / Enhancement request
about: Suggest an idea for TorrentPier
title: "[Feature]"
labels: [Feature, Enhancement]
assignees: ''
---

16
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,16 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "composer"
directory: "/"
versioning-strategy: increase-if-necessary
commit-message:
prefix: "Composer"
include: "scope"
schedule:
interval: "daily"

80
.github/workflows/cd.yml vendored Normal file
View file

@ -0,0 +1,80 @@
name: Continuous Deployment
on:
push:
tags:
- "v*.*.*"
jobs:
generate-changelog:
name: Generate changelog
runs-on: ubuntu-22.04
outputs:
release_body: ${{ steps.git-cliff.outputs.content }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate a changelog
uses: orhun/git-cliff-action@v4
id: git-cliff
with:
config: cliff.toml
args: -vv --latest --no-exec --github-repo ${{ github.repository }}
- name: Print the changelog
run: cat "${{ steps.git-cliff.outputs.changelog }}"
release:
name: Create release
needs: [ generate-changelog ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Set the release version
shell: bash
run: echo "RELEASE_VERSION=${GITHUB_REF:11}" >> $GITHUB_ENV
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install Composer dependencies
run: composer install --no-dev --no-progress --prefer-dist --optimize-autoloader
- name: Cleanup
run: php _cleanup.php && rm _cleanup.php
- name: Create archive
id: create-zip
run: |
ZIP_NAME="torrentpier-v${{ env.RELEASE_VERSION }}.zip"
zip -r "$ZIP_NAME" . -x ".git/*"
echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_OUTPUT
- name: Publish to GitHub
if: ${{ !contains(github.ref, '-') }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.create-zip.outputs.ZIP_NAME }}
overwrite: true
tag: ${{ github.ref }}
release_name: "v${{ env.RELEASE_VERSION }}"
body: "${{ needs.generate-changelog.outputs.release_body }}"
- name: Publish to GitHub (pre-release)
if: ${{ contains(github.ref, '-') }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.create-zip.outputs.ZIP_NAME }}
overwrite: true
tag: ${{ github.ref }}
release_name: "v${{ env.RELEASE_VERSION }}"
body: "${{ needs.generate-changelog.outputs.release_body }}"
prerelease: true

45
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,45 @@
name: Continuous Integration
on:
push:
branches:
- master
jobs:
nightly:
name: Nightly builds 📦
runs-on: ubuntu-22.04
steps:
- name: Checkout code 🗳
uses: actions/checkout@v4
- name: Setup PHP 🔩
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install Composer dependencies 🪚
run: composer install --no-dev --no-progress --prefer-dist --optimize-autoloader
- name: Get commit hash 🔗
id: get-commit-hash
run: |
COMMIT_HASH=$(git rev-parse --short HEAD)
echo "COMMIT_HASH=$COMMIT_HASH" >> $GITHUB_OUTPUT
- name: Cleanup
run: php _cleanup.php && rm _cleanup.php
- name: Create archive 🗞
id: create-zip
run: |
ZIP_NAME="torrentpier-${{ steps.get-commit-hash.outputs.COMMIT_HASH }}.zip"
zip -r "$ZIP_NAME" . -x ".git/*"
echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_OUTPUT
- name: Upload Archive 📤
uses: actions/upload-artifact@v4
with:
name: TorrentPier-master
path: ${{ steps.create-zip.outputs.ZIP_NAME }}

57
.github/workflows/phpmd.yml vendored Normal file
View file

@ -0,0 +1,57 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# PHPMD is a spin-off project of PHP Depend and
# aims to be a PHP equivalent of the well known Java tool PMD.
# What PHPMD does is: It takes a given PHP source code base
# and look for several potential problems within that source.
# These problems can be things like:
# Possible bugs
# Suboptimal code
# Overcomplicated expressions
# Unused parameters, methods, properties
# More details at https://phpmd.org/
name: PHPMD
on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '40 0 * * 3'
permissions:
contents: read
jobs:
PHPMD:
name: Run PHPMD scanning
runs-on: ubuntu-latest
permissions:
contents: read # for checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@aa1fe473f9c687b6fb896056d771232c0bc41161
with:
coverage: none
tools: phpmd
- name: Run PHPMD
run: phpmd . sarif codesize --reportfile phpmd-results.sarif
continue-on-error: true
- name: Upload analysis results to GitHub
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: phpmd-results.sarif
wait-for-processing: true

41
.github/workflows/schedule.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: Changelog generation
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
changelog:
name: Changelog generation
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
token: ${{ secrets.REPO_TOKEN }}
- name: Generate a changelog
uses: orhun/git-cliff-action@v4
id: git-cliff
with:
config: cliff.toml
args: v2.4.6-alpha.4.. --verbose
env:
OUTPUT: CHANGELOG.md
GITHUB_REPO: ${{ github.repository }}
- name: Print the changelog
run: cat "${{ steps.git-cliff.outputs.changelog }}"
- name: Commit changelog
run: |
git checkout master
git config --local user.name 'belomaxorka'
git config --local user.email 'roman25052006.kelesh@gmail.com'
set +e
git add CHANGELOG.md
git commit -m "changelog: Update CHANGELOG.md 📖"
git push https://${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git master

47
.gitignore vendored Normal file
View file

@ -0,0 +1,47 @@
### IDE ###
.idea
.vscode
### TorrentPier ###
*.log
install.php_*
composer-setup.php
.env
.php_cs.cache
data/avatars
data/uploads
internal_data/atom
internal_data/cache
internal_data/log
internal_data/updater.json
sitemap
internal_data/triggers
library/config.local.php
vendor
### Archives ###
*.phar
*.rar
*.tar
*.gz
*.zip
*.7z
*.torrent
*.pak
### Windows ###
Thumbs.db
Desktop.ini
$RECYCLE.BIN/
*.lnk
*.bat
### OSX ###
.DS_Store
.AppleDouble
.LSOverride
._*
.Spotlight-V100
.Trashes
*.orig
*.rej

18
.htaccess Normal file
View file

@ -0,0 +1,18 @@
## set default server charset
AddDefaultCharset UTF-8
## folder listing access control
Options All -Indexes
## sitemap and atom rewrite
RewriteEngine On
RewriteRule ^sitemap.xml$ sitemap/sitemap.xml [L]
RewriteRule ^/internal_data/atom/(.*) /atom$1 [L]
## deny access to git folder
RedirectMatch 404 /\\.git(/|$)
## deny access to system files
<FilesMatch "\.(.*sql|tpl|db|inc|log|md|env)|(config|common).php$">
Require all denied
</FilesMatch>

10
.styleci.yml Normal file
View file

@ -0,0 +1,10 @@
preset: psr2
finder:
name:
- "*.php"
not-name:
- "*Stub.php"
path:
- "src"
- "tests"

113
CHANGELOG.md Normal file
View file

@ -0,0 +1,113 @@
[![TorrentPier](https://raw.githubusercontent.com/torrentpier/.github/refs/heads/main/versions/Cattle.png)](https://github.com/torrentpier)
# 📖 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
- [**breaking**] Implement unified cache system with Nette Caching ([#1963](https://github.com/torrentpier/torrentpier/pull/1963)) - ([07a06a3](https://github.com/torrentpier/torrentpier/commit/07a06a33cd97b37f68b533a87cdb5f7578f2c86f))
- Replace legacy database layer with Nette Database implementation ([#1961](https://github.com/torrentpier/torrentpier/pull/1961)) - ([f50b914](https://github.com/torrentpier/torrentpier/commit/f50b914cc18f777d92002baf2c812a635d5eed4b))
### 🐛 Bug Fixes
- *(User)* Add null and array checks before session data operations ([#1962](https://github.com/torrentpier/torrentpier/pull/1962)) - ([e458109](https://github.com/torrentpier/torrentpier/commit/e458109eefc54d86a78a1ddb3954581524852516))
## [v2.5.0](https://github.com/torrentpier/torrentpier/compare/v2.4.6-alpha.4..v2.5.0) (2025-06-18)
### 🚀 Features
- [**breaking**] Implement centralized Config class to replace global $bb_cfg array ([#1953](https://github.com/torrentpier/torrentpier/pull/1953)) - ([bf9100f](https://github.com/torrentpier/torrentpier/commit/bf9100fbfa74768edb01c62636198a44739d9923))
### 🐛 Bug Fixes
- *(installer)* Strip protocol from TP_HOST to keep only hostname ([#1952](https://github.com/torrentpier/torrentpier/pull/1952)) - ([81bf67c](https://github.com/torrentpier/torrentpier/commit/81bf67c2be85d49e988b7802ca7e9738ff580031))
- *(sql)* Resolve only_full_group_by compatibility issues in tracker cleanup ([#1951](https://github.com/torrentpier/torrentpier/pull/1951)) - ([37a0675](https://github.com/torrentpier/torrentpier/commit/37a0675adfb02014e7068f4aa82301e29f39eab6))
### 📦 Dependencies
- *(deps)* Bump filp/whoops from 2.18.2 to 2.18.3 ([#1948](https://github.com/torrentpier/torrentpier/pull/1948)) - ([b477680](https://github.com/torrentpier/torrentpier/commit/b4776804a408217229caa327c79849cf13ce2aa5))
### 🚜 Refactor
- *(censor)* [**breaking**] Migrate Censor class to singleton pattern ([#1954](https://github.com/torrentpier/torrentpier/pull/1954)) - ([74a564d](https://github.com/torrentpier/torrentpier/commit/74a564d7954c6f8745ebcffdcd9c8997e371d47a))
- *(config)* [**breaking**] Encapsulate global $bb_cfg array in Config class ([#1950](https://github.com/torrentpier/torrentpier/pull/1950)) - ([5842994](https://github.com/torrentpier/torrentpier/commit/5842994782dfa62788f8427c55045abdbfb5b8e9))
### 📚 Documentation
- Add Select class migration guide ([#1960](https://github.com/torrentpier/torrentpier/pull/1960)) - ([86abafb](https://github.com/torrentpier/torrentpier/commit/86abafb11469d14a746d12725b15cf6b7015ec44))
### ⚙️ Miscellaneous
- *(_release.php)* Finally! Removed some useless params ([#1947](https://github.com/torrentpier/torrentpier/pull/1947)) - ([9c7d270](https://github.com/torrentpier/torrentpier/commit/9c7d270598c0153fb82f4b7ad96f5b59399b2159))
- *(cliff)* Add conventional commit prefix to changelog message ([#1957](https://github.com/torrentpier/torrentpier/pull/1957)) - ([b1b2618](https://github.com/torrentpier/torrentpier/commit/b1b26187579f6981165d85c316a3c5b7199ce2ee))

144
CLAUDE.md Normal file
View 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.

46
CODE_OF_CONDUCT.md Normal file
View file

@ -0,0 +1,46 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at admin@torrentpier.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

93
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,93 @@
# Contributing
When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
## Pull Request Process
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
build.
2. Update the README.md with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer to merge it for you.
## Code of Conduct
### Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
### Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
### Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
### Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
### Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at admin@torrentpier.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
### Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2005-2025 TorrentPier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

216
README.md
View file

@ -1,59 +1,191 @@
TorrentPier II
======================
<p align="center"><a href="https://torrentpier.com"><img src="https://torrentpier.com/styles/default/xenforo/bull-logo.svg" width="400px" alt="TorrentPier" /></a></p>
TorrentPier II - движок торрент-трекера, написанный на php. Высокая скорость работы, простота модификации, устойчивость к высоким нагрузкам, в том числе и поддержка альтернативных анонсеров (например, Ocelot). Помимо этого, крайне развитый официальный форум поддержки, где помимо прочего можно испытать движок в работе на демо-версии, не устанавливая его а также получить любую другую интересующую вас информацию и скачать моды.
<p align="center">
Bull-powered BitTorrent tracker engine
<br/>
</p>
## Установка
<p align="center">
<a href="https://github.com/torrentpier/torrentpier/blob/master/LICENSE"><img src="https://img.shields.io/github/license/torrentpier/torrentpier" alt="License"></a>
<a href="https://packagist.org/packages/torrentpier/torrentpier"><img src="https://img.shields.io/packagist/stars/torrentpier/torrentpier" alt="Stars Packagist"></a>
<a href="https://crowdin.com/project/torrentpier"><img src="https://badges.crowdin.net/torrentpier/localized.svg" alt="Crowdin"></a>
<a href="https://nightly.link/torrentpier/torrentpier/workflows/ci/master/TorrentPier-master"><img src="https://img.shields.io/badge/Nightly%20release-gray?logo=hackthebox&logoColor=fff" alt="TorrentPier nightly"></a>
<a href="https://packagist.org/packages/torrentpier/torrentpier"><img src="https://img.shields.io/packagist/dt/torrentpier/torrentpier" alt="Downloads"></a>
<a href="https://packagist.org/packages/torrentpier/torrentpier"><img src="https://img.shields.io/packagist/v/torrentpier/torrentpier" alt="Version"></a>
<a href="https://github.com/torrentpier/torrentpier/releases"><img src="https://img.shields.io/github/release-date/torrentpier/torrentpier" alt="Last release"></a>
<img src="https://img.shields.io/github/repo-size/torrentpier/torrentpier" alt="Size">
<a href="https://github.com/SamKirkland/FTP-Deploy-Action"><img src="https://img.shields.io/badge/Deployed to TorrentPier Demo with-FTP DEPLOY ACTION-%3CCOLOR%3E?color=2b9348" alt="Deployed to TorrentPier Demo with FTP Deploy Action"></a>
</p>
Для установки вам необходимо выполнить несколько простых шагов:
## 🐂 About TorrentPier
1. Распаковываем на сервер содержимое папки **upload**
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.
2. Создаем базу данных, в которую при помощи phpmyadmin (или любого другого удобного инструмента) импортируем дамп, расположенный в папке **install/sql/mysql.sql**
3. Правим файл конфигурации **config.php**, загруженный на сервер:
> $bb_cfg['db']['db1'] = array('localhost', 'dbase', 'user', 'pass', $charset, $pconnect);
> В данной строке изменяем данные входа в базу данных, остальные правки в файле вносятся по усмотрению, исходя из необходимости из внесения (ориентируйтесь на описания, указанные у полей).
## 🌈 Current status
4. Редактируем указанные файлы:
+ **favicon.ico** (меняем на свою иконку, если есть)
+ **robots.txt** (меняем адреса в строках **Host** и **Sitemap** на свои)
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
* High-load capable, heavily configurable announcer
* Scrape support
* FreeLeech
* [TorrServer integration](https://github.com/YouROK/TorrServer) support
* BitTorrent v2 support
* Event-based invite system
* Bonus points
* Polling system
* PM/DM system
* Multilingual support (Russian and English are currently fully supported, with others in the future)
* Atom/RSS feeds
* ... and so MUCH MORE!
Исходя из настроек вашего сервера, устанавливаем рекомендуемые права доступа (chmod) на указанные папки **777**, а на файлы внутри этих папок (кроме файлов **.htaccess** и **.keep**) **666**:
- ajax/html
- cache
- cache/filecache
- files
- files/thumbs
- images
- images/avatars
- images/captcha
- images/ranks
- images/smiles
- log
- sitemap
- triggers
## 🖥️ Demo
## Необходимые настройки php
* URL: https://torrentpier.duckdns.org
* Username: `admin`
* Password: `admin`
mbstring.internal_encoding = UTF-8
magic_quotes_gpc = Off
Внести данные настройки необходимо в файл **php.ini**. Их вам может установить ваш хостер по запросу, если у вас возникают какие-либо проблемы с их самостоятельной установкой. Впрочем, эти настройки могут быть установлены на сервере по-умолчанию, поэтому их внесение требуется исключительно по необходимости.
> [!NOTE]
> Demo resets every 24 hours!
## Необходимые модули php
## 🔧 Requirements
php5-tidy
* Apache / nginx ([example config](install/nginx.conf)) / caddy ([example config](install/Caddyfile))
* 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)
Начиная с версии 2.0.9 (ревизия 592 в старой нумерации) данный модуль не является обязательным, но его установка крайне рекомендуется для повышения качества обработки html-кода тем и сообщений пользователей.
## 💾 Installation
## Рекомендуемый способ запуска cron.php
For the installation, select one of the installation variants below:
Для значительного ускорения работы трекера может потребоваться отвязка встроенного форумного крона. С более подробной информацией об отвязке крона, вы можете ознакомиться в данной теме http://torrentpier.me/threads/52/ на нашем форуме поддержки.
### Quick (Clean install) 🚀
## Полезные ссылки
Check out our [autoinstall](https://github.com/torrentpier/autoinstall) repository with detailed instructions.
+ Наш форум http://torrentpier.me/
+ Центр загрузки http://get.torrentpier.me/
+ Часто задаваемые вопросы http://faq.torrentpier.me/
+ Где задать вопрос http://torrentpier.me/forums/10/
> [!NOTE]
> Thanks to [Sergei Solovev](https://github.com/SeAnSolovev) for this installation script ❤️
### Quick (For web-panels) ☕️
1. Select the folder where you want TorrentPier installed
```shell
cd /path/to/public_html
```
2. Download the latest version of TorrentPier
```shell
sudo git clone https://github.com/torrentpier/torrentpier.git .
```
3. After completing, execute the command below and follow the instructions
```shell
php install.php
```
4. Voila! ✨
### Manual 🔩
1. Install [Composer](https://getcomposer.org/)
2. Run the following command to create the TorrentPier project
```shell
composer create-project torrentpier/torrentpier
```
3. [Check our system requirements](#-requirements)
4. After, run this command in the project directory to install Composer dependencies
```shell
composer install
```
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.
### Additional steps 👣
1. Edit these files:
* `favicon.png` (change to your own)
* `robots.txt` (change the addresses in lines `Host` and `Sitemap` to your own)
2. Log in to the forum using the **admin/admin** login/password, and finish setting up via admin panel. Don't forget to change your password!
## 🔐 Security vulnerabilities
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 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 review your pull-request for compliance with
these requirements. Just send it!
<a href="https://github.com/torrentpier/torrentpier/graphs/contributors">
<img src="https://contrib.rocks/image?repo=torrentpier/torrentpier" alt="Contributors"/>
</a>
Made with [contrib.rocks](https://contrib.rocks).
## 💞 Sponsoring
Support this project by becoming a sponsor or a backer.
[![OpenCollective sponsors](https://opencollective.com/torrentpier/sponsors/badge.svg)](https://opencollective.com/torrentpier)
[![OpenCollective backers](https://opencollective.com/torrentpier/backers/badge.svg)](https://opencollective.com/torrentpier)
<details>
<summary>Monero</summary>
```
42zJE3FDvN8foP9QYgDrBjgtd7h2FipGCGmAcmG5VFQuRkJBGMbCvoLSmivepmAMEgik2E8MPWUzKaoYsGCtmhvL7ZN73jh
```
</details>
<details>
<summary>YooMoney</summary>
```
4100118022415720
```
</details>
## 📦 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).
## 📖 License
This project is licensed under the MIT License - see the [LICENSE](https://github.com/torrentpier/torrentpier/blob/master/LICENSE) file for details.

13
SECURITY.md Normal file
View file

@ -0,0 +1,13 @@
# Security Policy
## Versions
Due to the nature of our project - being open source - we have decided to patch only the latest major release (currently v2.4.x) for security vulnerabilities.
## How to disclose
Please disclose security issues by mailing [admin@torrentpier.com](mailto:admin@torrentpier.com).
## What we do
Any submitted security issue will be checked thoroughly by our development team. A fix for the issue and a transparent information on GitHub about the issue existing will be released. You can view any previously identified issues on our [GitHub Security Page](https://github.com/torrentpier/torrentpier/security/advisories). New major versions of TorrentPier will also receive a security audit to verify our efforts on providing a secure application.

1261
UPGRADE_GUIDE.md Normal file

File diff suppressed because it is too large Load diff

57
_cleanup.php Normal file
View file

@ -0,0 +1,57 @@
<?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')) {
define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
define('BB_PATH', BB_ROOT);
}
// Check CLI mode
if (PHP_SAPI != 'cli') {
exit;
}
if (!function_exists('removeFile')) {
// Get all constants
require_once BB_ROOT . 'library/defines.php';
// Include CLI functions
require INC_DIR . '/functions_cli.php';
}
$items = [
'.github',
'.cliffignore',
'.editorconfig',
'.gitignore',
'.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',
'tests',
'UPGRADE_GUIDE.md'
];
foreach ($items as $item) {
$path = BB_ROOT . $item;
if (is_file($path)) {
removeFile($path);
} elseif (is_dir($path)) {
removeDir($path);
}
}

130
_release.php Normal file
View file

@ -0,0 +1,130 @@
<?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
*/
define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
define('BB_PATH', BB_ROOT);
// Check CLI mode
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');
}
// Get all constants
require_once BB_ROOT . 'library/defines.php';
// Include CLI functions
require INC_DIR . '/functions_cli.php';
// Welcoming message
out("--- Release creation tool ---\n", 'info');
$configFile = BB_PATH . '/library/config.php';
if (!is_file($configFile)) {
out('- Config file ' . basename($configFile) . ' not found', 'error');
exit;
}
if (!is_readable($configFile)) {
out('- Config file ' . basename($configFile) . ' is not readable', 'error');
exit;
}
if (!is_writable($configFile)) {
out('- Config file ' . basename($configFile) . ' is not writable', 'error');
exit;
}
// Ask for version
fwrite(STDOUT, 'Enter version number (e.g, v2.4.0): ');
$version = trim(fgets(STDIN));
if (empty($version)) {
out("- Version cannot be empty. Please enter a valid version number", 'error');
exit;
} else {
// Add 'v' prefix if missing
if (!str_starts_with($version, 'v')) {
$version = 'v' . $version;
}
out("- Using version: $version", 'info');
}
// Ask for version emoji
fwrite(STDOUT, 'Enter version emoji: ');
$versionEmoji = trim(fgets(STDIN));
if (!empty($versionEmoji)) {
out("- Using version emoji: $versionEmoji", 'info');
}
// Ask for release date or use today's date
fwrite(STDOUT, "Enter release date (e.g. 25-05-2025), leave empty to use today's date: ");
$date = trim(fgets(STDIN));
if (empty($date)) {
$date = date('d-m-Y');
out("- Using current date: $date", 'info');
} else {
// Validate date format (dd-mm-yyyy)
$dateObj = DateTime::createFromFormat('d-m-Y', $date);
if (!$dateObj || $dateObj->format('d-m-Y') !== $date) {
out("- Invalid date format. Expected format: DD-MM-YYYY", 'error');
exit;
}
out("- Using date: $date", 'info');
}
// Read config file content
$content = file_get_contents($configFile);
// Update version
$content = preg_replace(
"/\\\$bb_cfg\['tp_version'\]\s*=\s*'[^']*';/",
"\$bb_cfg['tp_version'] = '$version';",
$content
);
// Update release date
$content = preg_replace(
"/\\\$bb_cfg\['tp_release_date'\]\s*=\s*'[^']*';/",
"\$bb_cfg['tp_release_date'] = '$date';",
$content
);
// Save updated config
$bytesWritten = file_put_contents($configFile, $content);
if ($bytesWritten === false) {
out("- Failed to write to config file", 'error');
exit;
}
if ($bytesWritten === 0) {
out("- Config file was not updated (0 bytes written)", 'error');
exit;
}
out("\n- Config file has been updated!", 'success');
// Update 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) : '') . '"');
// Git tag
runProcess("git tag -a \"$version\" -m \"Release $version\"");
runProcess("git tag -v \"$version\"");
// Git push
runProcess("git push origin master");
runProcess("git push origin $version");
out("\n- Release $version has been successfully prepared, committed and pushed!", 'success');

477
admin/admin_attach_cp.php Normal file
View file

@ -0,0 +1,477 @@
<?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)) {
$module['ATTACHMENTS']['CONTROL_PANEL'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
if (($attach_config['upload_dir'][0] == '/') || (($attach_config['upload_dir'][0] != '/') && ($attach_config['upload_dir'][1] == ':'))) {
$upload_dir = $attach_config['upload_dir'];
} else {
$upload_dir = '../' . $attach_config['upload_dir'];
}
include ATTACH_DIR . '/includes/functions_selects.php';
// Init Variables
$start = get_var('start', 0);
$sort_order = get_var('order', 'ASC');
$sort_order = ($sort_order == 'ASC') ? 'ASC' : 'DESC';
$mode = get_var('mode', '');
$view = get_var('view', '');
$uid = isset($_POST['u_id']) ? get_var('u_id', 0) : get_var('uid', 0);
$view = (isset($_POST['search']) && $_POST['search']) ? 'attachments' : $view;
// process modes based on view
if ($view === 'username') {
$mode_types_text = [$lang['SORT_USERNAME'], $lang['SORT_ATTACHMENTS'], $lang['SORT_SIZE']];
$mode_types = ['username', 'attachments', 'filesize'];
if (!$mode) {
$mode = 'attachments';
$sort_order = 'DESC';
}
} elseif ($view === 'attachments') {
$mode_types_text = [$lang['SORT_FILENAME'], $lang['SORT_COMMENT'], $lang['SORT_EXTENSION'], $lang['SORT_SIZE'], $lang['SORT_DOWNLOADS'], $lang['SORT_POSTTIME']];
$mode_types = ['real_filename', 'comment', 'extension', 'filesize', 'downloads', 'post_time'];
if (!$mode) {
$mode = 'real_filename';
$sort_order = 'ASC';
}
} elseif ($view === 'search') {
$mode_types_text = [$lang['SORT_FILENAME'], $lang['SORT_COMMENT'], $lang['SORT_EXTENSION'], $lang['SORT_SIZE'], $lang['SORT_DOWNLOADS'], $lang['SORT_POSTTIME']];
$mode_types = ['real_filename', 'comment', 'extension', 'filesize', 'downloads', 'post_time'];
$sort_order = 'DESC';
} else {
$view = 'stats';
$mode_types_text = [];
$sort_order = 'ASC';
}
// Pagination ?
$do_pagination = ($view !== 'stats' && $view !== 'search');
// Set Order
$order_by = '';
if ($view === 'username') {
switch ($mode) {
case 'username':
$order_by = 'ORDER BY u.username ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'attachments':
$order_by = 'ORDER BY total_attachments ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'filesize':
$order_by = 'ORDER BY total_size ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
default:
$mode = 'attachments';
$sort_order = 'DESC';
$order_by = 'ORDER BY total_attachments ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
}
} elseif ($view === 'attachments') {
switch ($mode) {
case 'real_filename':
$order_by = 'ORDER BY a.real_filename ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'comment':
$order_by = 'ORDER BY a.comment ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'extension':
$order_by = 'ORDER BY a.extension ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'filesize':
$order_by = 'ORDER BY a.filesize ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'downloads':
$order_by = 'ORDER BY a.download_count ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
case 'post_time':
$order_by = 'ORDER BY a.filetime ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
default:
$mode = 'a.real_filename';
$sort_order = 'ASC';
$order_by = 'ORDER BY a.real_filename ' . $sort_order . ' LIMIT ' . $start . ', ' . config()->get('topics_per_page');
break;
}
}
// Set select fields
$view_types_text = [$lang['VIEW_STATISTIC'], $lang['VIEW_SEARCH']];
$view_types = ['stats', 'search'];
$select_view = '';
if (in_array($view, $view_types)) {
$select_view = '<select name="view">';
for ($i = 0, $iMax = count($view_types_text); $i < $iMax; $i++) {
$selected = ($view === $view_types[$i]) ? ' selected' : '';
$select_view .= '<option value="' . $view_types[$i] . '"' . $selected . '>' . $view_types_text[$i] . '</option>';
}
$select_view .= '</select>';
}
if (count($mode_types_text) > 0 && !empty($mode_types)) {
$select_sort_mode = '<select name="mode">';
for ($i = 0, $iMax = count($mode_types_text); $i < $iMax; $i++) {
$selected = ($mode === $mode_types[$i]) ? ' selected' : '';
$select_sort_mode .= '<option value="' . $mode_types[$i] . '"' . $selected . '>' . $mode_types_text[$i] . '</option>';
}
$select_sort_mode .= '</select>';
}
$select_sort_order = '<select name="order">';
if ($sort_order === 'ASC') {
$select_sort_order .= '<option value="ASC" selected>' . $lang['ASC'] . '</option><option value="DESC">' . $lang['DESC'] . '</option>';
} else {
$select_sort_order .= '<option value="ASC">' . $lang['ASC'] . '</option><option value="DESC" selected>' . $lang['DESC'] . '</option>';
}
$select_sort_order .= '</select>';
$submit_change = isset($_POST['submit_change']);
$delete = isset($_POST['delete']);
$delete_id_list = get_var('delete_id_list', [0]);
$confirm = isset($_POST['confirm']);
if ($confirm && count($delete_id_list) > 0) {
$attachments = [];
delete_attachment(0, $delete_id_list);
} elseif ($delete && count($delete_id_list) > 0) {
// Not confirmed, show confirmation message
$hidden_fields = '<input type="hidden" name="view" value="' . $view . '" />';
$hidden_fields .= '<input type="hidden" name="mode" value="' . $mode . '" />';
$hidden_fields .= '<input type="hidden" name="order" value="' . $sort_order . '" />';
$hidden_fields .= '<input type="hidden" name="u_id" value="' . $uid . '" />';
$hidden_fields .= '<input type="hidden" name="start" value="' . $start . '" />';
foreach ($delete_id_list as $iValue) {
$hidden_fields .= '<input type="hidden" name="delete_id_list[]" value="' . $iValue . '" />';
}
print_confirmation([
'FORM_ACTION' => 'admin_attach_cp.php',
'HIDDEN_FIELDS' => $hidden_fields,
]);
}
// Assign Default Template Vars
$template->assign_vars([
'S_VIEW_SELECT' => $select_view,
'S_MODE_ACTION' => 'admin_attach_cp.php?view=' . $view . '&amp;mode=' . $mode . '&amp;order=' . $sort_order . '&amp;uid=' . $uid
]);
if ($submit_change && $view === 'attachments') {
$attach_change_list = get_var('attach_id_list', [0]);
$attach_comment_list = get_var('attach_comment_list', ['']);
$attach_download_count_list = get_var('attach_count_list', [0]);
// Generate correct Change List
$attachments = [];
for ($i = 0, $iMax = count($attach_change_list); $i < $iMax; $i++) {
$attachments['_' . $attach_change_list[$i]]['comment'] = $attach_comment_list[$i];
$attachments['_' . $attach_change_list[$i]]['download_count'] = $attach_download_count_list[$i];
}
$sql = 'SELECT *
FROM ' . BB_ATTACHMENTS_DESC . '
ORDER BY attach_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get attachment informations');
}
while ($attachrow = DB()->sql_fetchrow($result)) {
if (isset($attachments['_' . $attachrow['attach_id']])) {
if ($attachrow['comment'] != $attachments['_' . $attachrow['attach_id']]['comment'] || $attachrow['download_count'] != $attachments['_' . $attachrow['attach_id']]['download_count']) {
$sql = 'UPDATE ' . BB_ATTACHMENTS_DESC . "
SET comment = '" . DB()->escape($attachments['_' . $attachrow['attach_id']]['comment']) . "', download_count = " . (int)$attachments['_' . $attachrow['attach_id']]['download_count'] . '
WHERE attach_id = ' . (int)$attachrow['attach_id'];
if (!DB()->sql_query($sql)) {
bb_die('Could not update attachments informations');
}
}
}
}
DB()->sql_freeresult($result);
}
// Statistics
if ($view == 'stats') {
$upload_dir_size = get_formatted_dirsize();
$attachment_quota = humn_size($attach_config['attachment_quota']);
// number_of_attachments
$row = DB()->fetch_row('SELECT COUNT(*) AS total FROM ' . BB_ATTACHMENTS_DESC);
$number_of_attachments = $number_of_posts = $row['total'];
$number_of_pms = 0;
// number_of_topics
$row = DB()->fetch_row('SELECT COUNT(*) AS topics FROM ' . BB_TOPICS . ' WHERE topic_attachment = 1');
$number_of_topics = $row['topics'];
// number_of_users
$row = DB()->fetch_row('SELECT COUNT(DISTINCT user_id_1) AS users FROM ' . BB_ATTACHMENTS . ' WHERE post_id != 0');
$number_of_users = $row['users'];
$template->assign_vars([
'TPL_ATTACH_STATISTICS' => true,
'TOTAL_FILESIZE' => $upload_dir_size,
'ATTACH_QUOTA' => $attachment_quota,
'NUMBER_OF_ATTACHMENTS' => $number_of_attachments,
'NUMBER_OF_POSTS' => $number_of_posts,
'NUMBER_OF_PMS' => $number_of_pms,
'NUMBER_OF_TOPICS' => $number_of_topics,
'NUMBER_OF_USERS' => $number_of_users,
]);
}
// Search
if ($view === 'search') {
// Get Forums and Categories
//sf - add [, f.forum_parent]
$sql = 'SELECT c.cat_title, c.cat_id, f.forum_name, f.forum_id, f.forum_parent
FROM ' . BB_CATEGORIES . ' c, ' . BB_FORUMS . ' f
WHERE f.cat_id = c.cat_id
ORDER BY c.cat_id, f.forum_order';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not obtain forum_name / forum_id');
}
$s_forums = '';
$list_cat = [];
while ($row = DB()->sql_fetchrow($result)) { //sf
$s_forums .= '<option value="' . $row['forum_id'] . '">' . ($row['forum_parent'] ? HTML_SF_SPACER : '') . htmlCHR($row['forum_name']) . '</option>';
if (empty($list_cat[$row['cat_id']])) {
$list_cat[$row['cat_id']] = $row['cat_title'];
}
}
$s_categories = '';
if ($s_forums) {
$s_forums = '<option value="0">' . $lang['ALL_AVAILABLE'] . '</option>' . $s_forums;
// Category to search
$s_categories = '<option value="0">' . $lang['ALL_AVAILABLE'] . '</option>';
foreach ($list_cat as $cat_id => $cat_title) {
$s_categories .= '<option value="' . $cat_id . '">' . htmlCHR($cat_title) . '</option>';
}
} else {
bb_die($lang['NO_SEARCHABLE_FORUMS']);
}
$template->assign_vars([
'TPL_ATTACH_SEARCH' => true,
'S_FORUM_OPTIONS' => $s_forums,
'S_CATEGORY_OPTIONS' => $s_categories,
'S_SORT_OPTIONS' => $select_sort_mode,
'S_SORT_ORDER' => $select_sort_order,
]);
}
// Username
if ($view === 'username') {
$template->assign_vars([
'TPL_ATTACH_USER' => true,
'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order,
]);
$total_rows = 0;
bb_die('removed');
}
// Attachments
if ($view === 'attachments') {
$user_based = (bool)$uid;
$search_based = (isset($_POST['search']) && $_POST['search']);
$hidden_fields = '';
$template->assign_vars([
'TPL_ATTACH_ATTACHMENTS' => true,
'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order,
]);
$total_rows = 0;
// Are we called from Username ?
if ($user_based) {
$sql = 'SELECT username FROM ' . BB_USERS . ' WHERE user_id = ' . (int)$uid;
if (!($result = DB()->sql_query($sql))) {
bb_die('Error getting username');
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
$username = $row['username'];
$s_hidden = '<input type="hidden" name="u_id" value="' . (int)$uid . '" />';
$template->assign_block_vars('switch_user_based', []);
$template->assign_vars([
'S_USER_HIDDEN' => $s_hidden,
'L_STATISTICS_FOR_USER' => sprintf($lang['STATISTICS_FOR_USER'], $username),
]);
$sql = 'SELECT attach_id
FROM ' . BB_ATTACHMENTS . '
WHERE user_id_1 = ' . (int)$uid . '
GROUP BY attach_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachments #1');
}
$attach_ids = DB()->sql_fetchrowset($result);
$num_attach_ids = DB()->num_rows($result);
DB()->sql_freeresult($result);
if ($num_attach_ids == 0) {
bb_die('For some reason no attachments are assigned to the user ' . $username);
}
$total_rows = $num_attach_ids;
$attach_id = [];
for ($j = 0; $j < $num_attach_ids; $j++) {
$attach_id[] = (int)$attach_ids[$j]['attach_id'];
}
$sql = 'SELECT a.*
FROM ' . BB_ATTACHMENTS_DESC . ' a
WHERE a.attach_id IN (' . implode(', ', $attach_id) . ') ' .
$order_by;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachments #2');
}
$attachments = DB()->sql_fetchrowset($result);
$num_attach = DB()->num_rows($result);
DB()->sql_freeresult($result);
} else {
// we are called from search
$attachments = search_attachments($order_by, $total_rows);
}
if (count($attachments) > 0) {
for ($i = 0, $iMax = count($attachments); $i < $iMax; $i++) {
$delete_box = '<input type="checkbox" name="delete_id_list[]" value="' . (int)$attachments[$i]['attach_id'] . '" />';
foreach ($delete_id_list as $jValue) {
if ($jValue == $attachments[$i]['attach_id']) {
$delete_box = '<input type="checkbox" name="delete_id_list[]" value="' . (int)$attachments[$i]['attach_id'] . '" checked />';
break;
}
}
$row_class = !($i % 2) ? 'row1' : 'row2';
// Is the Attachment assigned to more than one post ?
// If it's not assigned to any post, it's an private message thingy. ;)
$post_titles = [];
$sql = 'SELECT *
FROM ' . BB_ATTACHMENTS . '
WHERE attach_id = ' . (int)$attachments[$i]['attach_id'];
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachments #3');
}
$ids = DB()->sql_fetchrowset($result);
$num_ids = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($j = 0; $j < $num_ids; $j++) {
if ($ids[$j]['post_id'] != 0) {
$sql = 'SELECT t.topic_title
FROM ' . BB_TOPICS . ' t, ' . BB_POSTS . ' p
WHERE p.post_id = ' . (int)$ids[$j]['post_id'] . ' AND p.topic_id = t.topic_id
GROUP BY t.topic_id, t.topic_title';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query topic');
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
$post_title = str_short($row['topic_title'], 30);
$view_topic = BB_ROOT . POST_URL . $ids[$j]['post_id'] . '#' . $ids[$j]['post_id'];
$post_titles[] = '<a href="' . $view_topic . '" class="gen" target="_blank">' . $post_title . '</a>';
} else {
$post_titles[] = $lang['PRIVATE_MESSAGE'];
}
}
$post_titles = implode('<br />', $post_titles);
$hidden_field = '<input type="hidden" name="attach_id_list[]" value="' . (int)$attachments[$i]['attach_id'] . '" />';
$template->assign_block_vars('attachrow', [
'ROW_NUMBER' => $i + (@$_GET['start'] + 1),
'ROW_CLASS' => $row_class,
'FILENAME' => htmlspecialchars($attachments[$i]['real_filename']),
'COMMENT' => htmlspecialchars($attachments[$i]['comment']),
'EXTENSION' => $attachments[$i]['extension'],
'SIZE' => humn_size($attachments[$i]['filesize'], 2),
'DOWNLOAD_COUNT' => $attachments[$i]['download_count'],
'POST_TIME' => bb_date($attachments[$i]['filetime']),
'POST_TITLE' => $post_titles,
'S_DELETE_BOX' => $delete_box,
'S_HIDDEN' => $hidden_field,
'U_VIEW_ATTACHMENT' => BB_ROOT . DL_URL . $attachments[$i]['attach_id'],
]);
}
}
if (!$search_based && !$user_based) {
if (!$attachments) {
$sql = 'SELECT attach_id FROM ' . BB_ATTACHMENTS_DESC;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachment description table');
}
$total_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
}
}
}
// Generate Pagination
if ($do_pagination && $total_rows > config()->get('topics_per_page')) {
generate_pagination('admin_attach_cp.php?view=' . $view . '&amp;mode=' . $mode . '&amp;order=' . $sort_order . '&amp;uid=' . $uid, $total_rows, config()->get('topics_per_page'), $start);
}
print_page('admin_attach_cp.tpl', 'admin');

552
admin/admin_attachments.php Normal file
View file

@ -0,0 +1,552 @@
<?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)) {
$filename = basename(__FILE__);
$module['ATTACHMENTS']['MANAGE'] = $filename . '?mode=manage';
$module['ATTACHMENTS']['SPECIAL_CATEGORIES'] = $filename . '?mode=cats';
$module['ATTACHMENTS']['QUOTA_LIMITS'] = $filename . '?mode=quota';
return;
}
require __DIR__ . '/pagestart.php';
$error = false;
if (($attach_config['upload_dir'][0] == '/') || (($attach_config['upload_dir'][0] != '/') && ($attach_config['upload_dir'][1] == ':'))) {
$upload_dir = $attach_config['upload_dir'];
} else {
$upload_dir = '../' . $attach_config['upload_dir'];
}
include ATTACH_DIR . '/includes/functions_selects.php';
// Init Vars
$mode = request_var('mode', '');
$e_mode = request_var('e_mode', '');
$size = request_var('size', '');
$quota_size = request_var('quota_size', '');
$pm_size = request_var('pm_size', '');
$submit = isset($_POST['submit']);
$check_upload = isset($_POST['settings']);
$check_image_cat = isset($_POST['cat_settings']);
// Re-evaluate the Attachment Configuration
$sql = 'SELECT * FROM ' . BB_ATTACH_CONFIG;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not find attachment config table #1');
}
while ($row = DB()->sql_fetchrow($result)) {
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$new_attach[$config_name] = get_var($config_name, trim($attach_config[$config_name]));
if (!$size && !$submit && $config_name == 'max_filesize') {
$size = ($attach_config[$config_name] >= 1048576) ? 'mb' : (($attach_config[$config_name] >= 1024) ? 'kb' : 'b');
}
if (!$quota_size && !$submit && $config_name == 'attachment_quota') {
$quota_size = ($attach_config[$config_name] >= 1048576) ? 'mb' : (($attach_config[$config_name] >= 1024) ? 'kb' : 'b');
}
if (!$pm_size && !$submit && $config_name == 'max_filesize_pm') {
$pm_size = ($attach_config[$config_name] >= 1048576) ? 'mb' : (($attach_config[$config_name] >= 1024) ? 'kb' : 'b');
}
if (!$submit && ($config_name == 'max_filesize' || $config_name == 'attachment_quota' || $config_name == 'max_filesize_pm')) {
if ($new_attach[$config_name] >= 1048576) {
$new_attach[$config_name] = round($new_attach[$config_name] / 1048576 * 100) / 100;
} elseif ($new_attach[$config_name] >= 1024) {
$new_attach[$config_name] = round($new_attach[$config_name] / 1024 * 100) / 100;
}
}
if ($submit && ($mode == 'manage' || $mode == 'cats')) {
if ($config_name == 'max_filesize') {
$old = $new_attach[$config_name];
$new_attach[$config_name] = ($size == 'kb') ? round($new_attach[$config_name] * 1024) : (($size == 'mb') ? round($new_attach[$config_name] * 1048576) : $new_attach[$config_name]);
}
if ($config_name == 'attachment_quota') {
$old = $new_attach[$config_name];
$new_attach[$config_name] = ($quota_size == 'kb') ? round($new_attach[$config_name] * 1024) : (($quota_size == 'mb') ? round($new_attach[$config_name] * 1048576) : $new_attach[$config_name]);
}
if ($config_name == 'max_filesize_pm') {
$old = $new_attach[$config_name];
$new_attach[$config_name] = ($pm_size == 'kb') ? round($new_attach[$config_name] * 1024) : (($pm_size == 'mb') ? round($new_attach[$config_name] * 1048576) : $new_attach[$config_name]);
}
if ($config_name == 'max_filesize') {
$old_size = $attach_config[$config_name];
$new_size = $new_attach[$config_name];
if ($old_size != $new_size) {
// See, if we have a similar value of old_size in Mime Groups. If so, update these values.
$sql = 'UPDATE ' . BB_EXTENSION_GROUPS . '
SET max_filesize = ' . (int)$new_size . '
WHERE max_filesize = ' . (int)$old_size;
if (!($result_2 = DB()->sql_query($sql))) {
bb_die('Could not update extension group information');
}
}
$sql = 'UPDATE ' . BB_ATTACH_CONFIG . "
SET config_value = '" . DB()->escape($new_attach[$config_name]) . "'
WHERE config_name = '" . DB()->escape($config_name) . "'";
} else {
$sql = 'UPDATE ' . BB_ATTACH_CONFIG . "
SET config_value = '" . DB()->escape($new_attach[$config_name]) . "'
WHERE config_name = '" . DB()->escape($config_name) . "'";
}
if (!DB()->sql_query($sql)) {
bb_die('Failed to update attachment configuration for ' . $config_name);
}
if ($config_name == 'max_filesize' || $config_name == 'attachment_quota' || $config_name == 'max_filesize_pm') {
$new_attach[$config_name] = $old;
}
}
}
DB()->sql_freeresult($result);
// Clear cached config
CACHE('bb_cache')->rm('attach_config');
$select_size_mode = size_select('size', $size);
$select_quota_size_mode = size_select('quota_size', $quota_size);
$select_pm_size_mode = size_select('pm_size', $pm_size);
// Check Settings
if ($check_upload) {
// Some tests...
$attach_config = [];
$sql = 'SELECT * FROM ' . BB_ATTACH_CONFIG;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not find attachment config table #2');
}
$row = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($i = 0; $i < $num_rows; $i++) {
$attach_config[$row[$i]['config_name']] = trim($row[$i]['config_value']);
}
if ($attach_config['upload_dir'][0] == '/' || ($attach_config['upload_dir'][0] != '/' && $attach_config['upload_dir'][1] == ':')) {
$upload_dir = $attach_config['upload_dir'];
} else {
$upload_dir = BB_ROOT . $attach_config['upload_dir'];
}
$error = false;
// Does the target directory exist, is it a directory and writeable
if (!@file_exists(realpath($upload_dir))) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_DOES_NOT_EXIST'], $attach_config['upload_dir']) . '<br />';
}
if (!$error && !is_dir($upload_dir)) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_IS_NOT_A_DIR'], $attach_config['upload_dir']) . '<br />';
}
if (!$error) {
if (!($fp = @fopen($upload_dir . '/0_000000.000', 'wb+'))) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_NOT_WRITEABLE'], $attach_config['upload_dir']) . '<br />';
} else {
@fclose($fp);
unlink_attach($upload_dir . '/0_000000.000');
}
}
if (!$error) {
bb_die($lang['TEST_SETTINGS_SUCCESSFUL'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_attachments.php?mode=manage">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
// Management
if ($submit && $mode == 'manage') {
if (!$error) {
bb_die($lang['ATTACH_CONFIG_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_attachments.php?mode=manage">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
if ($mode == 'manage') {
$template->assign_vars(array(
'TPL_ATTACH_MANAGE' => true,
'S_ATTACH_ACTION' => 'admin_attachments.php?mode=manage',
'S_FILESIZE' => $select_size_mode,
'S_FILESIZE_QUOTA' => $select_quota_size_mode,
'S_FILESIZE_PM' => $select_pm_size_mode,
'S_DEFAULT_UPLOAD_LIMIT' => default_quota_limit_select('default_upload_quota', (int)trim($new_attach['default_upload_quota'])),
'S_DEFAULT_PM_LIMIT' => default_quota_limit_select('default_pm_quota', (int)trim($new_attach['default_pm_quota'])),
'UPLOAD_DIR' => $new_attach['upload_dir'],
'ATTACHMENT_IMG_PATH' => $new_attach['upload_img'],
'TOPIC_ICON' => $new_attach['topic_icon'],
'MAX_FILESIZE' => $new_attach['max_filesize'],
'ATTACHMENT_QUOTA' => $new_attach['attachment_quota'],
'MAX_FILESIZE_PM' => $new_attach['max_filesize_pm'],
'MAX_ATTACHMENTS' => $new_attach['max_attachments'],
'MAX_ATTACHMENTS_PM' => $new_attach['max_attachments_pm'],
'DISABLE_MOD_YES' => $new_attach['disable_mod'] !== '0' ? 'checked' : '',
'DISABLE_MOD_NO' => $new_attach['disable_mod'] === '0' ? 'checked' : '',
'PM_ATTACH_YES' => $new_attach['allow_pm_attach'] !== '0' ? 'checked' : '',
'PM_ATTACH_NO' => $new_attach['allow_pm_attach'] === '0' ? 'checked' : '',
'DISPLAY_ORDER_ASC' => $new_attach['display_order'] !== '0' ? 'checked' : '',
'DISPLAY_ORDER_DESC' => $new_attach['display_order'] === '0' ? 'checked' : '',
));
}
if ($submit && $mode == 'cats') {
if (!$error) {
bb_die($lang['ATTACH_CONFIG_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_attachments.php?mode=cats">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
if ($mode == 'cats') {
$s_assigned_group_images = $lang['NONE'];
$sql = 'SELECT group_name, cat_id FROM ' . BB_EXTENSION_GROUPS . ' WHERE cat_id > 0 ORDER BY cat_id';
$s_assigned_group_images = [];
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get group names from ' . BB_EXTENSION_GROUPS);
}
$row = DB()->sql_fetchrowset($result);
DB()->sql_freeresult($result);
for ($i = 0, $iMax = count($row); $i < $iMax; $i++) {
if ($row[$i]['cat_id'] == IMAGE_CAT) {
$s_assigned_group_images[] = $row[$i]['group_name'];
}
}
$display_inlined_yes = ($new_attach['img_display_inlined'] != '0') ? 'checked' : '';
$display_inlined_no = ($new_attach['img_display_inlined'] == '0') ? 'checked' : '';
$create_thumbnail_yes = ($new_attach['img_create_thumbnail'] != '0') ? 'checked' : '';
$create_thumbnail_no = ($new_attach['img_create_thumbnail'] == '0') ? 'checked' : '';
// Check Thumbnail Support
if (!extension_loaded('gd')) {
$new_attach['img_create_thumbnail'] = '0';
} else {
$template->assign_block_vars('switch_thumbnail_support', []);
}
$template->assign_vars(array(
'TPL_ATTACH_SPECIAL_CATEGORIES' => true,
'IMAGE_MAX_HEIGHT' => $new_attach['img_max_height'],
'IMAGE_MAX_WIDTH' => $new_attach['img_max_width'],
'IMAGE_LINK_HEIGHT' => $new_attach['img_link_height'],
'IMAGE_LINK_WIDTH' => $new_attach['img_link_width'],
'IMAGE_MIN_THUMB_FILESIZE' => $new_attach['img_min_thumb_filesize'],
'DISPLAY_INLINED_YES' => $display_inlined_yes,
'DISPLAY_INLINED_NO' => $display_inlined_no,
'CREATE_THUMBNAIL_YES' => $create_thumbnail_yes,
'CREATE_THUMBNAIL_NO' => $create_thumbnail_no,
'S_ASSIGNED_GROUP_IMAGES' => implode(', ', $s_assigned_group_images),
'S_ATTACH_ACTION' => 'admin_attachments.php?mode=cats',
));
}
// Check Cat Settings
if ($check_image_cat) {
// Some tests...
$attach_config = [];
$sql = 'SELECT * FROM ' . BB_ATTACH_CONFIG;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not find attachment config table #3');
}
$row = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($i = 0; $i < $num_rows; $i++) {
$attach_config[$row[$i]['config_name']] = trim($row[$i]['config_value']);
}
if ($attach_config['upload_dir'][0] == '/' || ($attach_config['upload_dir'][0] != '/' && $attach_config['upload_dir'][1] == ':')) {
$upload_dir = $attach_config['upload_dir'];
} else {
$upload_dir = BB_ROOT . $attach_config['upload_dir'];
}
$upload_dir = $upload_dir . '/' . THUMB_DIR;
$error = false;
// Does the target directory exist, is it a directory and writeable
if (!@file_exists(realpath($upload_dir))) {
if (!bb_mkdir($upload_dir) && !is_dir($upload_dir)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $upload_dir));
}
if (!@file_exists(realpath($upload_dir))) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_DOES_NOT_EXIST'], $upload_dir) . '<br />';
}
}
if (!$error && !is_dir($upload_dir)) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_IS_NOT_A_DIR'], $upload_dir) . '<br />';
}
if (!$error) {
if (!($fp = @fopen($upload_dir . '/0_000000.000', 'wb+'))) {
$error = true;
$error_msg = sprintf($lang['DIRECTORY_NOT_WRITEABLE'], $upload_dir) . '<br />';
} else {
@fclose($fp);
@unlink($upload_dir . '/0_000000.000');
}
}
if (!$error) {
bb_die($lang['TEST_SETTINGS_SUCCESSFUL'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_attachments.php?mode=cats">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
// Quota Limit Settings
if ($submit && $mode == 'quota') {
// Change Quota Limit
$quota_change_list = get_var('quota_change_list', array(0));
$quota_desc_list = get_var('quota_desc_list', array(''));
$filesize_list = get_var('max_filesize_list', array(0));
$size_select_list = get_var('size_select_list', array(''));
$allowed_list = [];
for ($i = 0, $iMax = count($quota_change_list); $i < $iMax; $i++) {
$filesize_list[$i] = ($size_select_list[$i] == 'kb') ? round($filesize_list[$i] * 1024) : (($size_select_list[$i] == 'mb') ? round($filesize_list[$i] * 1048576) : $filesize_list[$i]);
$sql = 'UPDATE ' . BB_QUOTA_LIMITS . "
SET quota_desc = '" . DB()->escape($quota_desc_list[$i]) . "', quota_limit = " . (int)$filesize_list[$i] . '
WHERE quota_limit_id = ' . (int)$quota_change_list[$i];
if (!DB()->sql_query($sql)) {
bb_die('Could not update quota limits');
}
}
// Delete Quota Limits
$quota_id_list = get_var('quota_id_list', array(0));
$quota_id_sql = implode(', ', $quota_id_list);
if ($quota_id_sql != '') {
$sql = 'DELETE FROM ' . BB_QUOTA_LIMITS . ' WHERE quota_limit_id IN (' . $quota_id_sql . ')';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not delete quota limits');
}
// Delete Quotas linked to this setting
$sql = 'DELETE FROM ' . BB_QUOTA . ' WHERE quota_limit_id IN (' . $quota_id_sql . ')';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not delete quotas');
}
}
// Add Quota Limit ?
$quota_desc = get_var('quota_description', '');
$filesize = get_var('add_max_filesize', 0);
$size_select = get_var('add_size_select', '');
$add = isset($_POST['add_quota_check']);
if ($quota_desc != '' && $add) {
// check Quota Description
$sql = 'SELECT quota_desc FROM ' . BB_QUOTA_LIMITS;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query quota limits table');
}
$row = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
if ($num_rows > 0) {
for ($i = 0; $i < $num_rows; $i++) {
if ($row[$i]['quota_desc'] == $quota_desc) {
$error = true;
if (isset($error_msg)) {
$error_msg .= '<br />';
}
$error_msg .= sprintf($lang['QUOTA_LIMIT_EXIST'], $extension_group);
}
}
}
if (!$error) {
$filesize = ($size_select == 'kb') ? round($filesize * 1024) : (($size_select == 'mb') ? round($filesize * 1048576) : $filesize);
$sql = 'INSERT INTO ' . BB_QUOTA_LIMITS . " (quota_desc, quota_limit)
VALUES ('" . DB()->escape($quota_desc) . "', " . (int)$filesize . ')';
if (!DB()->sql_query($sql)) {
bb_die('Could not add quota limit');
}
}
}
if (!$error) {
bb_die($lang['ATTACH_CONFIG_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_attachments.php?mode=quota">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
if ($mode == 'quota') {
$max_add_filesize = $attach_config['max_filesize'];
$size = ($max_add_filesize >= 1048576) ? 'mb' : (($max_add_filesize >= 1024) ? 'kb' : 'b');
if ($max_add_filesize >= 1048576) {
$max_add_filesize = round($max_add_filesize / 1048576 * 100) / 100;
} elseif ($max_add_filesize >= 1024) {
$max_add_filesize = round($max_add_filesize / 1024 * 100) / 100;
}
$template->assign_vars(array(
'TPL_ATTACH_QUOTA' => true,
'MAX_FILESIZE' => $max_add_filesize,
'S_FILESIZE' => size_select('add_size_select', $size),
'S_ATTACH_ACTION' => 'admin_attachments.php?mode=quota',
));
$sql = 'SELECT * FROM ' . BB_QUOTA_LIMITS . ' ORDER BY quota_limit DESC';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get quota limits #1');
}
$rows = DB()->sql_fetchrowset($result);
DB()->sql_freeresult($result);
for ($i = 0, $iMax = count($rows); $i < $iMax; $i++) {
$size_format = ($rows[$i]['quota_limit'] >= 1048576) ? 'mb' : (($rows[$i]['quota_limit'] >= 1024) ? 'kb' : 'b');
if ($rows[$i]['quota_limit'] >= 1048576) {
$rows[$i]['quota_limit'] = round($rows[$i]['quota_limit'] / 1048576 * 100) / 100;
} elseif ($rows[$i]['quota_limit'] >= 1024) {
$rows[$i]['quota_limit'] = round($rows[$i]['quota_limit'] / 1024 * 100) / 100;
}
$template->assign_block_vars('limit_row', array(
'QUOTA_NAME' => $rows[$i]['quota_desc'],
'QUOTA_ID' => $rows[$i]['quota_limit_id'],
'S_FILESIZE' => size_select('size_select_list[]', $size_format),
'U_VIEW' => "admin_attachments.php?mode=$mode&amp;e_mode=view_quota&amp;quota_id=" . $rows[$i]['quota_limit_id'],
'MAX_FILESIZE' => $rows[$i]['quota_limit'],
));
}
}
if ($mode == 'quota' && $e_mode == 'view_quota') {
$quota_id = get_var('quota_id', 0);
if (!$quota_id) {
bb_die('Invalid call');
}
$template->assign_block_vars('switch_quota_limit_desc', []);
$sql = 'SELECT * FROM ' . BB_QUOTA_LIMITS . ' WHERE quota_limit_id = ' . (int)$quota_id . ' LIMIT 1';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get quota limits #2');
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
$template->assign_vars(array(
'L_QUOTA_LIMIT_DESC' => $row['quota_desc'],
));
$sql = 'SELECT q.user_id, u.username, q.quota_type
FROM ' . BB_QUOTA . ' q, ' . BB_USERS . ' u
WHERE q.quota_limit_id = ' . (int)$quota_id . '
AND q.user_id <> 0
AND q.user_id = u.user_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get quota limits #3');
}
$rows = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($i = 0; $i < $num_rows; $i++) {
if ($rows[$i]['quota_type'] == QUOTA_UPLOAD_LIMIT) {
$template->assign_block_vars('users_upload_row', array(
'USER_ID' => $rows[$i]['user_id'],
'USERNAME' => $rows[$i]['username'],
));
} elseif ($rows[$i]['quota_type'] == QUOTA_PM_LIMIT) {
$template->assign_block_vars('users_pm_row', array(
'USER_ID' => $rows[$i]['user_id'],
'USERNAME' => $rows[$i]['username'],
));
}
}
$sql = 'SELECT q.group_id, g.group_name, q.quota_type
FROM ' . BB_QUOTA . ' q, ' . BB_GROUPS . ' g
WHERE q.quota_limit_id = ' . (int)$quota_id . '
AND q.group_id <> 0
AND q.group_id = g.group_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get quota limits #4');
}
$rows = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($i = 0; $i < $num_rows; $i++) {
if ($rows[$i]['quota_type'] == QUOTA_UPLOAD_LIMIT) {
$template->assign_block_vars('groups_upload_row', array(
'GROUP_ID' => $rows[$i]['group_id'],
'GROUPNAME' => $rows[$i]['group_name'],
));
} elseif ($rows[$i]['quota_type'] == QUOTA_PM_LIMIT) {
$template->assign_block_vars('groups_pm_row', array(
'GROUP_ID' => $rows[$i]['group_id'],
'GROUPNAME' => $rows[$i]['group_name'],
));
}
}
}
if ($error) {
$template->assign_vars(array('ERROR_MESSAGE' => $error_msg));
}
print_page('admin_attachments.tpl', 'admin');

154
admin/admin_board.php Normal file
View file

@ -0,0 +1,154 @@
<?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)) {
$module['GENERAL']['CONFIGURATION'] = basename(__FILE__) . '?mode=config';
$module['MODS']['CONFIGURATION'] = basename(__FILE__) . '?mode=config_mods';
return;
}
require __DIR__ . '/pagestart.php';
$mode = $_GET['mode'] ?? '';
$return_links = [
'index' => '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'),
'config' => '<br /><br />' . sprintf($lang['CLICK_RETURN_CONFIG'], '<a href="admin_board.php?mode=config">', '</a>'),
'config_mods' => '<br /><br />' . sprintf($lang['CLICK_RETURN_CONFIG_MODS'], '<a href="admin_board.php?mode=config_mods">', '</a>')
];
/**
* Pull all config data
*/
$sql = 'SELECT * FROM ' . BB_CONFIG;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not query config information in admin_board');
} else {
while ($row = DB()->sql_fetchrow($result)) {
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$default_config[$config_name] = $config_value;
$new[$config_name] = $_POST[$config_name] ?? $default_config[$config_name];
if (isset($_POST['submit']) && $row['config_value'] != $new[$config_name]) {
if ($config_name == 'seed_bonus_points' ||
$config_name == 'seed_bonus_release' ||
$config_name == 'bonus_upload' ||
$config_name == 'bonus_upload_price'
) {
$new[$config_name] = serialize(str_replace(',', '.', $new[$config_name]));
}
bb_update_config([$config_name => $new[$config_name]]);
}
}
if (isset($_POST['submit'])) {
bb_die($lang['CONFIG_UPDATED'] . $return_links[$mode] . $return_links['index']);
}
}
switch ($mode) {
case 'config_mods':
$template->assign_vars([
'S_CONFIG_ACTION' => 'admin_board.php?mode=config_mods',
'CONFIG_MODS' => true,
'MAGNET_LINKS_ENABLED' => $new['magnet_links_enabled'],
'MAGNET_LINKS_FOR_GUESTS' => $new['magnet_links_for_guests'],
'GENDER' => $new['gender'],
'CALLSEED' => $new['callseed'],
'TOR_STATS' => $new['tor_stats'],
'SHOW_LATEST_NEWS' => $new['show_latest_news'],
'MAX_NEWS_TITLE' => $new['max_news_title'],
'LATEST_NEWS_COUNT' => $new['latest_news_count'],
'LATEST_NEWS_FORUM_ID' => $new['latest_news_forum_id'],
'SHOW_NETWORK_NEWS' => $new['show_network_news'],
'MAX_NET_TITLE' => $new['max_net_title'],
'NETWORK_NEWS_COUNT' => $new['network_news_count'],
'NETWORK_NEWS_FORUM_ID' => $new['network_news_forum_id'],
'WHOIS_INFO' => $new['whois_info'],
'SHOW_MOD_INDEX' => $new['show_mod_index'],
'SHOW_BOARD_START_INDEX' => $new['show_board_start_index'],
'BIRTHDAY_ENABLED' => $new['birthday_enabled'],
'BIRTHDAY_MAX_AGE' => $new['birthday_max_age'],
'BIRTHDAY_MIN_AGE' => $new['birthday_min_age'],
'BIRTHDAY_CHECK_DAY' => $new['birthday_check_day'],
'PREMOD' => $new['premod'],
'TOR_COMMENT' => $new['tor_comment'],
'SEED_BONUS_ENABLED' => $new['seed_bonus_enabled'],
'SEED_BONUS_TOR_SIZE' => $new['seed_bonus_tor_size'],
'SEED_BONUS_USER_REGDATE' => $new['seed_bonus_user_regdate']
]);
if ($new['seed_bonus_points'] && $new['seed_bonus_release']) {
$seed_bonus = unserialize($new['seed_bonus_points']);
$seed_release = unserialize($new['seed_bonus_release']);
foreach ($seed_bonus as $i => $row) {
if (!$row || !$seed_release[$i]) {
continue;
}
$template->assign_block_vars('seed_bonus', [
'RELEASE' => $seed_release[$i],
'POINTS' => $row
]);
}
}
if ($new['bonus_upload'] && $new['bonus_upload_price']) {
$upload_row = unserialize($new['bonus_upload']);
$price_row = unserialize($new['bonus_upload_price']);
foreach ($upload_row as $i => $row) {
if (!$row || !$price_row[$i]) {
continue;
}
$template->assign_block_vars('bonus_upload', [
'UP' => $row,
'PRICE' => $price_row[$i]
]);
}
}
break;
default:
$template->assign_vars([
'S_CONFIG_ACTION' => 'admin_board.php?mode=config',
'CONFIG' => true,
'SITENAME' => htmlCHR($new['sitename']),
'CONFIG_SITE_DESCRIPTION' => htmlCHR($new['site_desc']),
'DISABLE_BOARD' => (bool)$new['board_disable'],
'ALLOW_AUTOLOGIN' => (bool)$new['allow_autologin'],
'AUTOLOGIN_TIME' => (int)$new['max_autologin_time'],
'MAX_POLL_OPTIONS' => $new['max_poll_options'],
'FLOOD_INTERVAL' => $new['flood_interval'],
'TOPICS_PER_PAGE' => $new['topics_per_page'],
'POSTS_PER_PAGE' => $new['posts_per_page'],
'HOT_TOPIC' => $new['hot_threshold'],
'DEFAULT_DATEFORMAT' => $new['default_dateformat'],
'LANG_SELECT' => \TorrentPier\Legacy\Common\Select::language($new['default_lang'], 'default_lang'),
'TIMEZONE_SELECT' => \TorrentPier\Legacy\Common\Select::timezone($new['board_timezone'], 'board_timezone'),
'MAX_LOGIN_ATTEMPTS' => $new['max_login_attempts'],
'LOGIN_RESET_TIME' => $new['login_reset_time'],
'PRUNE_ENABLE' => (bool)$new['prune_enable'],
'ALLOW_BBCODE' => (bool)$new['allow_bbcode'],
'ALLOW_SMILIES' => (bool)$new['allow_smilies'],
'ALLOW_SIG' => (bool)$new['allow_sig'],
'SIG_SIZE' => $new['max_sig_chars'],
'ALLOW_NAMECHANGE' => (bool)$new['allow_namechange'],
'SMILIES_PATH' => $new['smilies_path']
]);
break;
}
print_page('admin_board.tpl', 'admin');

View file

@ -0,0 +1,154 @@
<?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)) {
$module[APP_NAME]['FORUM_CONFIG'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$max_forum_name_len = 30;
$max_forum_rows = 25;
$submit = isset($_POST['submit']);
$confirm = isset($_POST['confirm']);
$cfg = [];
/**
* All config names with default values
*/
$default_cfg_str = array(
'bt_announce_url' => 'https://torrentpier.duckdns.org/bt/',
);
$default_cfg_bool = array(
'bt_disable_dht' => 1,
'bt_show_peers' => 1,
'bt_add_auth_key' => 1,
'bt_show_dl_list' => 0,
'bt_dl_list_only_1st_page' => 1,
'bt_dl_list_only_count' => 1,
'bt_replace_ann_url' => 1,
'bt_show_ip_only_moder' => 1,
'bt_show_port_only_moder' => 1,
'bt_check_announce_url' => 0,
'bt_show_dl_list_buttons' => 1,
'bt_show_dl_but_will' => 1,
'bt_show_dl_but_down' => 0,
'bt_show_dl_but_compl' => 1,
'bt_show_dl_but_cancel' => 1,
'bt_show_dl_stat_on_index' => 1,
'bt_newtopic_auto_reg' => 1,
'bt_tor_browse_only_reg' => 1,
'bt_search_bool_mode' => 1,
'bt_allow_spmode_change' => 1,
'bt_del_addit_ann_urls' => 1,
'bt_set_dltype_on_tor_reg' => 1,
'bt_unset_dltype_on_tor_unreg' => 1,
);
$default_cfg_num = array(
'bt_show_peers_mode' => SHOW_PEERS_COUNT,
);
$default_cfg = array_merge($default_cfg_str, $default_cfg_bool, $default_cfg_num);
$db_fields_bool = array(
'allow_reg_tracker' => 0, // Allowed forums for registering torrents on tracker
'allow_porno_topic' => 0, // Allowed forums for porno topics
'self_moderated' => 0, // Users can move theirs topic to another forum
);
/**
* Get config
*/
$cfg = bb_get_config(BB_CONFIG, true, false);
/**
* Submit new config
*/
if ($submit && $confirm) {
foreach ($db_fields_bool as $field_name => $field_def_val) {
\TorrentPier\Legacy\Admin\Torrent::update_table_bool(BB_FORUMS, 'forum_id', $field_name, $field_def_val);
}
\TorrentPier\Legacy\Admin\Torrent::update_config_table(BB_CONFIG, $default_cfg_str, $cfg, 'str');
\TorrentPier\Legacy\Admin\Torrent::update_config_table(BB_CONFIG, $default_cfg_bool, $cfg, 'bool');
\TorrentPier\Legacy\Admin\Torrent::update_config_table(BB_CONFIG, $default_cfg_num, $cfg, 'num');
$datastore->update('cat_forums');
bb_die($lang['CONFIG_UPD'] . '<br /><br />' . sprintf($lang['RETURN_CONFIG'], '<a href="admin_bt_forum_cfg.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
// Set template vars
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars($default_cfg_str, $cfg);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars_lang($default_cfg_str);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars_bool($default_cfg_bool, $cfg);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars_lang($default_cfg_bool);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars($default_cfg_num, $cfg);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars_lang($default_cfg_num);
\TorrentPier\Legacy\Admin\Torrent::set_tpl_vars_lang($db_fields_bool);
// Get Forums list
$sql = 'SELECT f.*
FROM ' . BB_CATEGORIES . ' c, ' . BB_FORUMS . ' f
WHERE f.cat_id = c.cat_id
ORDER BY c.cat_order, f.forum_order';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not obtain forum names');
}
$rowset = DB()->sql_fetchrowset($result);
$forum_rows = min($max_forum_rows, count($rowset));
foreach ($db_fields_bool as $field_name => $field_def_val) {
$$field_name = '';
}
foreach ($rowset as $rid => $forum) {
foreach ($db_fields_bool as $field_name => $field_def_val) {
$forum_name = $forum['forum_name'];
$selected = $forum[$field_name] ? ' selected' : '';
$forum_name = str_short($forum_name, $max_forum_name_len);
$$field_name .= '<option value="' . $forum['forum_id'] . '" ' . $selected . '>&nbsp;' . ($forum['forum_parent'] ? HTML_SF_SPACER : '') . htmlCHR($forum_name) . "</option>\n";
}
}
foreach ($db_fields_bool as $field_name => $field_def_val) {
$$field_name = '<select name="' . $field_name . "[]\" multiple size=\"$forum_rows\">" . $$field_name . '</select>';
$template->assign_vars(array('S_' . strtoupper($field_name) => $$field_name));
}
$template->assign_vars(array(
'L_BT_SHOW_PEERS_MODE_COUNT' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_COUNT) ? '<u>' . $lang['BT_SHOW_PEERS_MODE_COUNT'] . '</u>' : $lang['BT_SHOW_PEERS_MODE_COUNT'],
'L_BT_SHOW_PEERS_MODE_NAMES' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_NAMES) ? '<u>' . $lang['BT_SHOW_PEERS_MODE_NAMES'] . '</u>' : $lang['BT_SHOW_PEERS_MODE_NAMES'],
'L_BT_SHOW_PEERS_MODE_FULL' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_FULL) ? '<u>' . $lang['BT_SHOW_PEERS_MODE_FULL'] . '</u>' : $lang['BT_SHOW_PEERS_MODE_FULL'],
'BT_SHOW_PEERS_MODE_COUNT_VAL' => SHOW_PEERS_COUNT,
'BT_SHOW_PEERS_MODE_NAMES_VAL' => SHOW_PEERS_NAMES,
'BT_SHOW_PEERS_MODE_FULL_VAL' => SHOW_PEERS_FULL,
'BT_SHOW_PEERS_MODE_COUNT_SEL' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_COUNT) ? HTML_CHECKED : '',
'BT_SHOW_PEERS_MODE_NAMES_SEL' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_NAMES) ? HTML_CHECKED : '',
'BT_SHOW_PEERS_MODE_FULL_SEL' => ($cfg['bt_show_peers_mode'] == SHOW_PEERS_FULL) ? HTML_CHECKED : '',
'S_HIDDEN_FIELDS' => '',
'S_CONFIG_ACTION' => 'admin_bt_forum_cfg.php',
));
print_page('admin_bt_forum_cfg.tpl', 'admin');

216
admin/admin_cron.php Normal file
View file

@ -0,0 +1,216 @@
<?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[APP_NAME]['CRON'] = basename(__FILE__) . '?mode=list';
}
return;
}
$mode = $_GET['mode'] ?? '';
$job_id = isset($_GET['id']) ? (int)$_GET['id'] : '';
$submit = isset($_POST['submit']);
$jobs = isset($_POST['select']) ? implode(',', $_POST['select']) : '';
$cron_action = $_POST['cron_action'] ?? '';
if ($mode == 'run' && !$job_id) {
define('BB_ROOT', './../');
require BB_ROOT . 'common.php';
$user->session_start();
redirect('admin/' . basename(__FILE__) . '?mode=list');
} else {
require __DIR__ . '/pagestart.php';
}
// Check for demo mode
if (IN_DEMO_MODE && ($submit || !in_array($mode, ['add', 'list']))) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
if (!IS_SUPER_ADMIN) {
bb_die($lang['ONLY_FOR_SUPER_ADMIN']);
}
$sql = DB()->fetch_rowset('SELECT * FROM ' . BB_CONFIG . " WHERE config_name = 'cron_check_interval'");
foreach ($sql as $row) {
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$default_config[$config_name] = $config_value;
$new[$config_name] = $_POST[$config_name] ?? $default_config[$config_name];
if (isset($_POST['submit']) && $row['config_value'] != $new[$config_name]) {
bb_update_config(array($config_name => $new[$config_name]));
}
}
$template->assign_vars(array(
'CRON_ENABLED' => TorrentPier\Helpers\CronHelper::isEnabled(),
'CRON_CHECK_INTERVAL' => $new['cron_check_interval'],
));
switch ($mode) {
case 'list':
$sql = DB()->fetch_rowset('SELECT * FROM ' . BB_CRON . ' ORDER BY cron_id');
foreach ($sql as $i => $row) {
$template->assign_block_vars('list', array(
'ROW_CLASS' => !($i % 2) ? 'row2' : 'row1',
'JOB_ID' => $i + 1,
'CRON_ID' => $row['cron_id'],
'CRON_ACTIVE' => $row['cron_active'] ? '<img src="../styles/images/icon_run.gif" alt="' . $lang['YES'] . '" />' : '<img src="../styles/images/icon_delete.gif" alt="' . $lang['NO'] . '" />',
'CRON_TITLE' => $row['cron_title'],
'CRON_SCRIPT' => $row['cron_script'],
'SCHEDULE' => $row['schedule'] ? $lang['SCHEDULE'][$row['schedule']] : '<b class="leech">' . $lang['NOSELECT'] . '</b>',
'RUN_DAY' => $row['run_day'],
'LAST_RUN' => $row['last_run'],
'NEXT_RUN' => $row['next_run'],
'RUN_COUNT' => $row['run_counter'],
));
}
$template->assign_vars(array(
'TPL_CRON_LIST' => true,
'S_CRON_ACTION' => 'admin_cron.php',
'S_MODE' => 'list',
));
//detect cron status
if (is_file(CRON_RUNNING)) {
$template->assign_vars(array(
'CRON_RUNNING' => true,
));
}
break;
case 'repair':
if (is_file(CRON_RUNNING)) {
rename(CRON_RUNNING, CRON_ALLOWED);
}
redirect('admin/' . basename(__FILE__) . '?mode=list');
break;
case 'run':
\TorrentPier\Legacy\Admin\Cron::run_jobs($job_id);
redirect('admin/' . basename(__FILE__) . '?mode=list');
break;
case 'edit':
$sql = DB()->fetch_rowset('SELECT * FROM ' . BB_CRON . " WHERE cron_id = $job_id");
foreach ($sql as $row) {
$template->assign_vars(array(
'CRON_ID' => $row['cron_id'],
'CRON_ACTIVE' => $row['cron_active'],
'CRON_TITLE' => $row['cron_title'],
'CRON_SCRIPT' => $row['cron_script'],
'SCHEDULE' => $row['schedule'] ? $lang['SCHEDULE'][$row['schedule']] : '',
'RUN_DAY' => $row['run_day'],
'RUN_TIME' => $row['run_time'],
'RUN_ORDER' => $row['run_order'],
'LAST_RUN' => $row['last_run'],
'NEXT_RUN' => $row['next_run'],
'RUN_INTERVAL' => $row['run_interval'],
'LOG_ENABLED' => $row['log_enabled'],
'LOG_FILE' => $row['log_file'],
'LOG_SQL_QUERIES' => $row['log_sql_queries'],
'DISABLE_BOARD' => $row['disable_board'],
'RUN_COUNTER' => $row['run_counter'],
));
}
$run_day = array($lang['DELTA_TIME']['INTERVALS']['mday'][0] => 0);
for ($i = 1; $i <= 28; $i++) {
$run_day[$i] = $i;
}
$schedule = array($lang['SCHEDULE']['select'] => 0);
foreach ($lang['SCHEDULE'] as $type => $key) {
$schedule[$key] = $type;
}
$template->assign_vars(array(
'TPL_CRON_EDIT' => true,
'S_CRON_ACTION' => 'admin_cron.php',
'S_MODE' => 'edit',
'SCHEDULE' => build_select('schedule', $schedule, $row['schedule']),
'RUN_DAY' => build_select('run_day', $run_day, $row['run_day']),
'L_CRON_EDIT_HEAD' => $lang['CRON_EDIT_HEAD_EDIT'],
));
break;
case 'add':
$run_day = array($lang['DELTA_TIME']['INTERVALS']['mday'][0] => 0);
for ($i = 1; $i <= 28; $i++) {
$run_day[$i] = $i;
}
$schedule = [];
foreach ($lang['SCHEDULE'] as $type => $key) {
$schedule[$key] = $type;
}
$template->assign_vars(array(
'TPL_CRON_EDIT' => true,
'S_CRON_ACTION' => 'admin_cron.php',
'S_MODE' => 'add',
'SCHEDULE' => build_select('schedule', $schedule, 'select', null, null),
'RUN_DAY' => build_select('run_day', $run_day, 0, null, null),
'CRON_ID' => '',
'CRON_ACTIVE' => 1,
'CRON_TITLE' => '',
'CRON_SCRIPT' => '',
'RUN_TIME' => '',
'RUN_ORDER' => 255,
'LAST_RUN' => '1900-01-01 00:00:00',
'NEXT_RUN' => '1900-01-01 00:00:00',
'RUN_INTERVAL' => '',
'LOG_ENABLED' => 0,
'LOG_FILE' => '',
'LOG_SQL_QUERIES' => 0,
'DISABLE_BOARD' => 0,
'RUN_COUNTER' => 0,
));
break;
case 'delete':
\TorrentPier\Legacy\Admin\Cron::delete_jobs($job_id);
bb_die($lang['JOB_REMOVED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_JOBS'], '<a href="admin_cron.php?mode=list">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
break;
}
if ($submit) {
$mode2 = $_POST['mode'] ?? '';
if ($mode2 == 'list') {
if ($cron_action == 'run' && $jobs) {
\TorrentPier\Legacy\Admin\Cron::run_jobs($jobs);
} elseif ($cron_action == 'delete' && $jobs) {
\TorrentPier\Legacy\Admin\Cron::delete_jobs($jobs);
} elseif (($cron_action == 'disable' || $cron_action == 'enable') && $jobs) {
\TorrentPier\Legacy\Admin\Cron::toggle_active($jobs, $cron_action);
}
redirect('admin/' . basename(__FILE__) . '?mode=list');
} elseif (\TorrentPier\Legacy\Admin\Cron::validate_cron_post($_POST) == 1) {
if ($mode2 == 'edit') {
\TorrentPier\Legacy\Admin\Cron::update_cron_job($_POST);
} elseif ($mode2 == 'add') {
\TorrentPier\Legacy\Admin\Cron::insert_cron_job($_POST);
} else {
bb_die("Invalid mode: $mode2");
}
redirect('admin/' . basename(__FILE__) . '?mode=list');
} else {
bb_die(\TorrentPier\Legacy\Admin\Cron::validate_cron_post($_POST));
}
}
print_page('admin_cron.tpl', 'admin');

86
admin/admin_disallow.php Normal file
View file

@ -0,0 +1,86 @@
<?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)) {
$module['USERS']['DISALLOW'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$message = '';
if (isset($_POST['add_name'])) {
$disallowed_user = isset($_POST['disallowed_user']) ? trim($_POST['disallowed_user']) : trim($_GET['disallowed_user']);
if ($disallowed_user == '') {
bb_die($lang['FIELDS_EMPTY']);
}
if (\TorrentPier\Validate::username($disallowed_user)) {
$message = $lang['DISALLOWED_ALREADY'];
} else {
$sql = 'INSERT INTO ' . BB_DISALLOW . " (disallow_username) VALUES('" . DB()->escape($disallowed_user) . "')";
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not add disallowed user');
}
$message = $lang['DISALLOW_SUCCESSFUL'];
}
$message .= '<br /><br />' . sprintf($lang['CLICK_RETURN_DISALLOWADMIN'], '<a href="admin_disallow.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} elseif (isset($_POST['delete_name'])) {
$disallowed_id = isset($_POST['disallowed_id']) ? (int)$_POST['disallowed_id'] : (int)$_GET['disallowed_id'];
if (!empty($disallowed_id)) {
$sql = 'DELETE FROM ' . BB_DISALLOW . " WHERE disallow_id = $disallowed_id";
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not removed disallowed user');
}
$message .= $lang['DISALLOWED_DELETED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_DISALLOWADMIN'], '<a href="admin_disallow.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
}
}
/**
* Grab the current list of disallowed usernames
*/
$sql = 'SELECT * FROM ' . BB_DISALLOW;
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not get disallowed users');
}
$disallowed = DB()->sql_fetchrowset($result);
/**
* Now generate the info for the template, which will be put out no matter what mode we are in
*/
$disallow_select = '<select name="disallowed_id">';
if (count($disallowed) <= 0) {
$disallow_select .= '<option value="">' . $lang['NO_DISALLOWED'] . '</option>';
} else {
for ($i = 0, $iMax = count($disallowed); $i < $iMax; $i++) {
$disallow_select .= '<option value="' . $disallowed[$i]['disallow_id'] . '">' . $disallowed[$i]['disallow_username'] . '</option>';
}
}
$disallow_select .= '</select>';
$template->assign_vars([
'S_DISALLOW_SELECT' => $disallow_select,
'S_FORM_ACTION' => 'admin_disallow.php',
]);
print_page('admin_disallow.tpl', 'admin');

677
admin/admin_extensions.php Normal file
View file

@ -0,0 +1,677 @@
<?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)) {
$filename = basename(__FILE__);
$module['ATTACHMENTS']['EXTENSION_CONTROL'] = $filename . '?mode=extensions';
$module['ATTACHMENTS']['EXTENSION_GROUP_MANAGE'] = $filename . '?mode=groups';
return;
}
require __DIR__ . '/pagestart.php';
function update_attach_extensions()
{
$GLOBALS['datastore']->update('attach_extensions');
}
register_shutdown_function('update_attach_extensions');
if (($attach_config['upload_dir'][0] == '/') || (($attach_config['upload_dir'][0] != '/') && ($attach_config['upload_dir'][1] == ':'))) {
$upload_dir = $attach_config['upload_dir'];
} else {
$upload_dir = BB_ROOT . $attach_config['upload_dir'];
}
include ATTACH_DIR . '/includes/functions_selects.php';
// Init Vars
$types_download = array(INLINE_LINK, PHYSICAL_LINK);
$modes_download = array('inline', 'physical');
$types_category = array(IMAGE_CAT);
$modes_category = array($lang['CATEGORY_IMAGES']);
$size = get_var('size', '');
$mode = get_var('mode', '');
$e_mode = get_var('e_mode', '');
$error = false;
$add_forum = isset($_POST['add_forum']);
$delete_forum = isset($_POST['del_forum']);
$submit = isset($_POST['submit']);
// Check for demo mode
if (IN_DEMO_MODE && ($submit || $add_forum || $delete_forum)) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
// Get Attachment Config
$attach_config = [];
$sql = 'SELECT * FROM ' . BB_ATTACH_CONFIG;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachment information');
}
while ($row = DB()->sql_fetchrow($result)) {
$attach_config[$row['config_name']] = trim($row['config_value']);
}
DB()->sql_freeresult($result);
// Extension Management
if ($submit && $mode == 'extensions') {
// Change Extensions ?
$extension_change_list = get_var('extension_change_list', array(0));
$extension_explain_list = get_var('extension_explain_list', array(''));
$group_select_list = get_var('group_select', array(0));
// Generate correct Change List
$extensions = [];
for ($i = 0, $iMax = count($extension_change_list); $i < $iMax; $i++) {
$extensions['_' . $extension_change_list[$i]]['comment'] = $extension_explain_list[$i];
$extensions['_' . $extension_change_list[$i]]['group_id'] = (int)$group_select_list[$i];
}
$sql = 'SELECT * FROM ' . BB_EXTENSIONS . ' ORDER BY ext_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get extension informations #1');
}
$num_rows = DB()->num_rows($result);
$extension_row = DB()->sql_fetchrowset($result);
DB()->sql_freeresult($result);
if ($num_rows > 0) {
for ($i = 0, $iMax = count($extension_row); $i < $iMax; $i++) {
if ($extension_row[$i]['comment'] != $extensions['_' . $extension_row[$i]['ext_id']]['comment'] || (int)$extension_row[$i]['group_id'] != (int)$extensions['_' . $extension_row[$i]['ext_id']]['group_id']) {
$sql_ary = array(
'comment' => (string)$extensions['_' . $extension_row[$i]['ext_id']]['comment'],
'group_id' => (int)$extensions['_' . $extension_row[$i]['ext_id']]['group_id']
);
$sql = 'UPDATE ' . BB_EXTENSIONS . ' SET ' . DB()->build_array('UPDATE', $sql_ary) . '
WHERE ext_id = ' . (int)$extension_row[$i]['ext_id'];
if (!DB()->sql_query($sql)) {
bb_die('Could not update extension informations');
}
}
}
}
// Delete Extension?
$extension_id_list = get_var('extension_id_list', array(0));
$extension_id_sql = implode(', ', $extension_id_list);
if ($extension_id_sql != '') {
$sql = 'DELETE FROM ' . BB_EXTENSIONS . ' WHERE ext_id IN (' . $extension_id_sql . ')';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not delete extensions');
}
}
// Add Extension ?
$extension = get_var('add_extension', '');
$extension_explain = get_var('add_extension_explain', '');
$extension_group = get_var('add_group_select', 0);
$add = isset($_POST['add_extension_check']);
if ($extension != '' && $add) {
$template->assign_vars(array(
'ADD_EXTENSION' => $extension,
'ADD_EXTENSION_EXPLAIN' => $extension_explain,
));
if (!$error) {
// check extension
$sql = 'SELECT extension FROM ' . BB_EXTENSIONS;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query extensions');
}
$row = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
if ($num_rows > 0) {
for ($i = 0; $i < $num_rows; $i++) {
if (strtolower(trim($row[$i]['extension'])) == strtolower(trim($extension))) {
$error = true;
if (isset($error_msg)) {
$error_msg .= '<br />';
}
$error_msg .= sprintf($lang['EXTENSION_EXIST'], strtolower(trim($extension)));
}
}
}
if (!$error) {
$sql_ary = array(
'group_id' => (int)$extension_group,
'extension' => (string)strtolower($extension),
'comment' => (string)$extension_explain
);
$sql = 'INSERT INTO ' . BB_EXTENSIONS . ' ' . DB()->build_array('INSERT', $sql_ary);
if (!DB()->sql_query($sql)) {
bb_die('Could not add extension');
}
}
}
}
if (!$error) {
bb_die($lang['ATTACH_CONFIG_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_extensions.php?mode=extensions">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
if ($mode == 'extensions') {
// Extensions
$template->assign_vars(array(
'TPL_ATTACH_EXTENSIONS' => true,
'S_CANCEL_ACTION' => 'admin_extensions.php?mode=extensions',
'S_ATTACH_ACTION' => 'admin_extensions.php?mode=extensions',
));
if ($submit) {
$template->assign_vars(array(
'S_ADD_GROUP_SELECT' => group_select('add_group_select', $extension_group))
);
} else {
$template->assign_vars(array(
'S_ADD_GROUP_SELECT' => group_select('add_group_select'))
);
}
$sql = 'SELECT * FROM ' . BB_EXTENSIONS . ' ORDER BY group_id';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get extension informations #2');
}
$extension_row = DB()->sql_fetchrowset($result);
$num_extension_row = DB()->num_rows($result);
DB()->sql_freeresult($result);
if ($num_extension_row > 0) {
$extension_row = sort_multi_array($extension_row, 'group_id');
for ($i = 0; $i < $num_extension_row; $i++) {
if ($submit) {
$template->assign_block_vars('extension_row', array(
'EXT_ID' => $extension_row[$i]['ext_id'],
'EXTENSION' => $extension_row[$i]['extension'],
'EXTENSION_EXPLAIN' => $extension_explain_list[$i],
'S_GROUP_SELECT' => group_select('group_select[]', $group_select_list[$i]))
);
} else {
$template->assign_block_vars('extension_row', array(
'EXT_ID' => $extension_row[$i]['ext_id'],
'EXTENSION' => $extension_row[$i]['extension'],
'EXTENSION_EXPLAIN' => $extension_row[$i]['comment'],
'S_GROUP_SELECT' => group_select('group_select[]', $extension_row[$i]['group_id']))
);
}
}
}
}
// Extension Groups
if ($submit && $mode == 'groups') {
// Change Extension Groups ?
$group_change_list = get_var('group_change_list', array(0));
$extension_group_list = get_var('extension_group_list', array(''));
$group_allowed_list = get_var('allowed_list', array(0));
$download_mode_list = get_var('download_mode_list', array(0));
$category_list = get_var('category_list', array(0));
$upload_icon_list = get_var('upload_icon_list', array(''));
$filesize_list = get_var('max_filesize_list', array(0));
$size_select_list = get_var('size_select_list', array(''));
$allowed_list = [];
foreach ($group_allowed_list as $iValue) {
for ($j = 0, $jMax = count($group_change_list); $j < $jMax; $j++) {
if ($iValue == $group_change_list[$j]) {
$allowed_list[$j] = 1;
}
}
}
for ($i = 0, $iMax = count($group_change_list); $i < $iMax; $i++) {
$allowed = isset($allowed_list[$i]) ? 1 : 0;
$filesize_list[$i] = ($size_select_list[$i] == 'kb') ? round($filesize_list[$i] * 1024) : (($size_select_list[$i] == 'mb') ? round($filesize_list[$i] * 1048576) : $filesize_list[$i]);
$sql_ary = array(
'group_name' => (string)$extension_group_list[$i],
'cat_id' => (int)$category_list[$i],
'allow_group' => (int)$allowed,
'download_mode' => (int)$download_mode_list[$i],
'upload_icon' => (string)$upload_icon_list[$i],
'max_filesize' => (int)$filesize_list[$i]
);
$sql = 'UPDATE ' . BB_EXTENSION_GROUPS . ' SET ' . DB()->build_array('UPDATE', $sql_ary) . '
WHERE group_id = ' . (int)$group_change_list[$i];
if (!DB()->sql_query($sql)) {
bb_die('Could not update extension groups informations');
}
}
// Delete Extension Groups
$group_id_list = get_var('group_id_list', array(0));
$group_id_sql = implode(', ', $group_id_list);
if ($group_id_sql != '') {
$sql = 'DELETE
FROM ' . BB_EXTENSION_GROUPS . '
WHERE group_id IN (' . $group_id_sql . ')';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not delete extension groups');
}
// Set corresponding Extensions to a pending Group
$sql = 'UPDATE ' . BB_EXTENSIONS . '
SET group_id = 0
WHERE group_id IN (' . $group_id_sql . ')';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not assign extensions to pending group');
}
}
// Add Extensions?
$extension_group = get_var('add_extension_group', '');
$download_mode = get_var('add_download_mode', 0);
$cat_id = get_var('add_category', 0);
$upload_icon = get_var('add_upload_icon', '');
$filesize = get_var('add_max_filesize', 0);
$size_select = get_var('add_size_select', '');
$is_allowed = isset($_POST['add_allowed']) ? 1 : 0;
$add = isset($_POST['add_extension_group_check']);
if ($extension_group != '' && $add) {
// check Extension Group
$sql = 'SELECT group_name FROM ' . BB_EXTENSION_GROUPS;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query extension groups table');
}
$row = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
if ($num_rows > 0) {
for ($i = 0; $i < $num_rows; $i++) {
if ($row[$i]['group_name'] == $extension_group) {
$error = true;
if (isset($error_msg)) {
$error_msg .= '<br />';
}
$error_msg .= sprintf($lang['EXTENSION_GROUP_EXIST'], $extension_group);
}
}
}
if (!$error) {
$filesize = ($size_select == 'kb') ? round($filesize * 1024) : (($size_select == 'mb') ? round($filesize * 1048576) : $filesize);
$sql_ary = array(
'group_name' => (string)$extension_group,
'cat_id' => (int)$cat_id,
'allow_group' => (int)$is_allowed,
'download_mode' => (int)$download_mode,
'upload_icon' => (string)$upload_icon,
'max_filesize' => (int)$filesize,
'forum_permissions' => ''
);
$sql = 'INSERT INTO ' . BB_EXTENSION_GROUPS . ' ' . DB()->build_array('INSERT', $sql_ary);
if (!DB()->sql_query($sql)) {
bb_die('Could not add extension group');
}
}
}
if (!$error) {
bb_die($lang['ATTACH_CONFIG_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ATTACH_CONFIG'], '<a href="admin_extensions.php?mode=groups">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
}
if ($mode == 'groups') {
// Extension Groups
if (!$size && !$submit) {
$max_add_filesize = $attach_config['max_filesize'];
$size = ($max_add_filesize >= 1048576) ? 'mb' : (($max_add_filesize >= 1024) ? 'kb' : 'b');
}
if ($max_add_filesize >= 1048576) {
$max_add_filesize = round($max_add_filesize / 1048576 * 100) / 100;
} elseif ($max_add_filesize >= 1024) {
$max_add_filesize = round($max_add_filesize / 1024 * 100) / 100;
}
$viewgroup = get_var(POST_GROUPS_URL, 0);
$template->assign_vars(array(
'TPL_ATTACH_EXTENSION_GROUPS' => true,
'ADD_GROUP_NAME' => $extension_group ?? '',
'MAX_FILESIZE' => $max_add_filesize,
'S_FILESIZE' => size_select('add_size_select', $size),
'S_ADD_DOWNLOAD_MODE' => download_select('add_download_mode'),
'S_SELECT_CAT' => category_select('add_category'),
'S_CANCEL_ACTION' => 'admin_extensions.php?mode=groups',
'S_ATTACH_ACTION' => 'admin_extensions.php?mode=groups',
));
$sql = 'SELECT * FROM ' . BB_EXTENSION_GROUPS;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get extension group informations');
}
$extension_group = DB()->sql_fetchrowset($result);
$num_extension_group = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($i = 0; $i < $num_extension_group; $i++) {
// Format the filesize
if (!$extension_group[$i]['max_filesize']) {
$extension_group[$i]['max_filesize'] = $attach_config['max_filesize'];
}
$size_format = ($extension_group[$i]['max_filesize'] >= 1048576) ? 'mb' : (($extension_group[$i]['max_filesize'] >= 1024) ? 'kb' : 'b');
if ($extension_group[$i]['max_filesize'] >= 1048576) {
$extension_group[$i]['max_filesize'] = round($extension_group[$i]['max_filesize'] / 1048576 * 100) / 100;
} elseif ($extension_group[$i]['max_filesize'] >= 1024) {
$extension_group[$i]['max_filesize'] = round($extension_group[$i]['max_filesize'] / 1024 * 100) / 100;
}
$s_allowed = ($extension_group[$i]['allow_group'] == 1) ? 'checked' : '';
$template->assign_block_vars('grouprow', array(
'GROUP_ID' => $extension_group[$i]['group_id'],
'EXTENSION_GROUP' => $extension_group[$i]['group_name'],
'UPLOAD_ICON' => $extension_group[$i]['upload_icon'],
'S_ALLOW_SELECTED' => $s_allowed,
'S_SELECT_CAT' => category_select('category_list[]', $extension_group[$i]['group_id']),
'S_DOWNLOAD_MODE' => download_select('download_mode_list[]', $extension_group[$i]['group_id']),
'S_FILESIZE' => size_select('size_select_list[]', $size_format),
'MAX_FILESIZE' => $extension_group[$i]['max_filesize'],
'CAT_BOX' => ($viewgroup == $extension_group[$i]['group_id']) ? '-' : '+',
'U_VIEWGROUP' => ($viewgroup == $extension_group[$i]['group_id']) ? 'admin_extensions.php?mode=groups' : 'admin_extensions.php?mode=groups&' . POST_GROUPS_URL . '=' . $extension_group[$i]['group_id'],
'U_FORUM_PERMISSIONS' => "admin_extensions.php?mode=$mode&amp;e_mode=perm&amp;e_group=" . $extension_group[$i]['group_id'],
));
if ($viewgroup && $viewgroup == $extension_group[$i]['group_id']) {
$sql = 'SELECT comment, extension FROM ' . BB_EXTENSIONS . ' WHERE group_id = ' . (int)$viewgroup;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not get extension informations #3');
}
$extension = DB()->sql_fetchrowset($result);
$num_extension = DB()->num_rows($result);
DB()->sql_freeresult($result);
for ($j = 0; $j < $num_extension; $j++) {
$template->assign_block_vars('grouprow.extensionrow', array(
'EXPLANATION' => $extension[$j]['comment'],
'EXTENSION' => $extension[$j]['extension'])
);
}
}
}
}
if ($e_mode == 'perm') {
$group = get_var('e_group', 0);
if (isset($_POST['close_perm'])) {
$e_mode = '';
}
}
// Add Forums
if ($add_forum && $e_mode == 'perm' && $group) {
$add_forums_list = get_var('entries', array(0));
$add_all_forums = false;
foreach ($add_forums_list as $iValue) {
if ($iValue == 0) {
$add_all_forums = true;
}
}
// If we add ALL FORUMS, we are able to overwrite the Permissions
if ($add_all_forums) {
$sql = 'UPDATE ' . BB_EXTENSION_GROUPS . " SET forum_permissions = '' WHERE group_id = " . (int)$group;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not update permissions #1');
}
}
// Else we have to add Permissions
if (!$add_all_forums) {
$sql = 'SELECT forum_permissions
FROM ' . BB_EXTENSION_GROUPS . '
WHERE group_id = ' . (int)$group . '
LIMIT 1';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get group permissions from ' . BB_EXTENSION_GROUPS);
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
if (trim($row['forum_permissions']) == '') {
$auth_p = [];
} else {
$auth_p = auth_unpack($row['forum_permissions']);
}
// Generate array for Auth_Pack, do not add doubled forums
foreach ($add_forums_list as $i => $iValue) {
if (!in_array($add_forums_list[$i], $auth_p)) {
$auth_p[] = $iValue;
}
}
$auth_bitstream = auth_pack($auth_p);
$sql = 'UPDATE ' . BB_EXTENSION_GROUPS . " SET forum_permissions = '" . DB()->escape($auth_bitstream) . "' WHERE group_id = " . (int)$group;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not update permissions #2');
}
}
}
// Delete Forums
if ($delete_forum && $e_mode == 'perm' && $group) {
$delete_forums_list = get_var('entries', array(0));
// Get the current Forums
$sql = 'SELECT forum_permissions
FROM ' . BB_EXTENSION_GROUPS . '
WHERE group_id = ' . (int)$group . '
LIMIT 1';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get group permissions from ' . BB_EXTENSION_GROUPS);
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
$auth_p2 = auth_unpack(trim($row['forum_permissions']));
$auth_p = [];
// Generate array for Auth_Pack, delete the chosen ones
foreach ($auth_p2 as $i => $iValue) {
if (!in_array($auth_p2[$i], $delete_forums_list)) {
$auth_p[] = $iValue;
}
}
$auth_bitstream = (count($auth_p) > 0) ? auth_pack($auth_p) : '';
$sql = 'UPDATE ' . BB_EXTENSION_GROUPS . " SET forum_permissions = '" . DB()->escape($auth_bitstream) . "' WHERE group_id = " . (int)$group;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not update permissions #3');
}
}
// Display the Group Permissions Box for configuring it
if ($e_mode == 'perm' && $group) {
$sql = 'SELECT group_name, forum_permissions
FROM ' . BB_EXTENSION_GROUPS . '
WHERE group_id = ' . (int)$group . '
LIMIT 1';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get group name from ' . BB_EXTENSION_GROUPS);
}
$row = DB()->sql_fetchrow($result);
DB()->sql_freeresult($result);
$group_name = $row['group_name'];
$allowed_forums = trim($row['forum_permissions']);
$forum_perm = [];
if ($allowed_forums == '') {
$forum_perm[0]['forum_id'] = 0;
$forum_perm[0]['forum_name'] = $lang['PERM_ALL_FORUMS'];
} else {
$forum_p = [];
$act_id = 0;
$forum_p = auth_unpack($allowed_forums);
$sql = 'SELECT forum_id, forum_name FROM ' . BB_FORUMS . ' WHERE forum_id IN (' . implode(', ', $forum_p) . ')';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get forum names');
}
while ($row = DB()->sql_fetchrow($result)) {
$forum_perm[$act_id]['forum_id'] = $row['forum_id'];
$forum_perm[$act_id]['forum_name'] = $row['forum_name'];
$act_id++;
}
}
for ($i = 0, $iMax = count($forum_perm); $i < $iMax; $i++) {
$template->assign_block_vars('allow_option_values', array(
'VALUE' => $forum_perm[$i]['forum_id'],
'OPTION' => htmlCHR($forum_perm[$i]['forum_name']))
);
}
$template->assign_vars(array(
'TPL_ATTACH_EXTENSION_GROUPS_PERMISSIONS' => true,
'L_GROUP_PERMISSIONS_TITLE' => sprintf($lang['GROUP_PERMISSIONS_TITLE_ADMIN'], trim($group_name)),
'A_PERM_ACTION' => "admin_extensions.php?mode=groups&amp;e_mode=perm&amp;e_group=$group",
));
$forum_option_values = array(0 => $lang['PERM_ALL_FORUMS']);
$sql = 'SELECT forum_id, forum_name FROM ' . BB_FORUMS;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not get forums #1');
}
while ($row = DB()->sql_fetchrow($result)) {
$forum_option_values[(int)$row['forum_id']] = $row['forum_name'];
}
DB()->sql_freeresult($result);
foreach ($forum_option_values as $value => $option) {
$template->assign_block_vars('forum_option_values', array(
'VALUE' => $value,
'OPTION' => htmlCHR($option))
);
}
$empty_perm_forums = [];
$sql = 'SELECT forum_id, forum_name FROM ' . BB_FORUMS . ' WHERE auth_attachments < ' . AUTH_ADMIN;
if (!($f_result = DB()->sql_query($sql))) {
bb_die('Could not get forums #2');
}
while ($row = DB()->sql_fetchrow($f_result)) {
$forum_id = $row['forum_id'];
$sql = 'SELECT forum_permissions
FROM ' . BB_EXTENSION_GROUPS . '
WHERE allow_group = 1
ORDER BY group_name ASC';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query extension groups');
}
$rows = DB()->sql_fetchrowset($result);
$num_rows = DB()->num_rows($result);
DB()->sql_freeresult($result);
$found_forum = false;
for ($i = 0; $i < $num_rows; $i++) {
$allowed_forums = auth_unpack(trim($rows[$i]['forum_permissions']));
if (in_array($forum_id, $allowed_forums) || trim($rows[$i]['forum_permissions']) == '') {
$found_forum = true;
break;
}
}
if (!$found_forum) {
$empty_perm_forums[$forum_id] = $row['forum_name'];
}
}
DB()->sql_freeresult($f_result);
$message = '';
foreach ($empty_perm_forums as $forum_id => $forum_name) {
$message .= ($message == '') ? $forum_name : '<br />' . $forum_name;
}
if (count($empty_perm_forums) > 0) {
$template->assign_vars(array('ERROR_MESSAGE' => $lang['NOTE_ADMIN_EMPTY_GROUP_PERMISSIONS'] . $message));
}
}
if ($error) {
$template->assign_vars(array('ERROR_MESSAGE' => $error_msg));
}
print_page('admin_extensions.tpl', 'admin');

View file

@ -0,0 +1,61 @@
<?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)) {
$module['FORUMS']['PRUNE'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$all_forums = -1;
$pruned_total = 0;
$prune_performed = false;
if (isset($_REQUEST['submit'])) {
if (!$var =& $_REQUEST['f'] or !$f_selected = get_id_ary($var)) {
bb_die($lang['SELECT_FORUM']);
}
if (!$var =& $_REQUEST['prunedays'] or !$prunedays = abs((int)$var)) {
bb_die($lang['NOT_DAYS']);
}
$prunetime = TIMENOW - 86400 * $prunedays;
$forum_csv = in_array($all_forums, $f_selected) ? $all_forums : implode(',', $f_selected);
$where_sql = ($forum_csv != $all_forums) ? "WHERE forum_id IN($forum_csv)" : '';
$sql = 'SELECT forum_id, forum_name FROM ' . BB_FORUMS . " $where_sql";
foreach (DB()->fetch_rowset($sql) as $i => $row) {
$pruned_topics = \TorrentPier\Legacy\Admin\Common::topic_delete('prune', $row['forum_id'], $prunetime, !empty($_POST['prune_all_topic_types']));
$pruned_total += $pruned_topics;
$prune_performed = true;
$template->assign_block_vars('pruned', [
'ROW_CLASS' => !($i % 2) ? 'row1' : 'row2',
'FORUM_NAME' => htmlCHR($row['forum_name']),
'PRUNED_TOPICS' => $pruned_topics
]);
}
if (!$prune_performed) {
bb_die($lang['NONE_SELECTED']);
}
if (!$pruned_total) {
bb_die($lang['NO_SEARCH_MATCH']);
}
}
$template->assign_vars([
'PRUNED_TOTAL' => $pruned_total,
'S_PRUNE_ACTION' => basename(__FILE__),
'SEL_FORUM' => get_forum_select('admin', 'f[]', null, 65, 16, '', $all_forums)
]);
print_page('admin_forum_prune.tpl', 'admin');

228
admin/admin_forumauth.php Normal file
View file

@ -0,0 +1,228 @@
<?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)) {
$module['FORUMS']['PERMISSIONS'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$forum_auth_fields = [
'auth_view',
'auth_read',
'auth_reply',
'auth_edit',
'auth_delete',
'auth_vote',
'auth_pollcreate',
'auth_attachments',
'auth_download',
'auth_post',
'auth_sticky',
'auth_announce',
];
// View Read Reply Edit Delete Vote Poll PostAttach DownAttach PostTopic Sticky Announce
$simple_auth_ary = [
0 => [AUTH_ALL, AUTH_ALL, AUTH_ALL, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_ALL, AUTH_ALL, AUTH_MOD, AUTH_MOD], // Public
1 => [AUTH_ALL, AUTH_ALL, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_MOD, AUTH_MOD], // Registered
2 => [AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_MOD, AUTH_MOD], // Registered [Hidden]
3 => [AUTH_REG, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_MOD, AUTH_MOD], // Private
4 => [AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_MOD, AUTH_MOD], // Private [Hidden]
5 => [AUTH_REG, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD], // Moderators
6 => [AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD], // Moderators [Hidden]
];
$simple_auth_types = [
$lang['PUBLIC'],
$lang['REGISTERED'],
$lang['REGISTERED'] . ' [' . $lang['HIDDEN'] . ']',
$lang['PRIVATE'],
$lang['PRIVATE'] . ' [' . $lang['HIDDEN'] . ']',
$lang['MODERATORS'],
$lang['MODERATORS'] . ' [' . $lang['HIDDEN'] . ']',
];
$field_names = [];
foreach ($forum_auth_fields as $auth_type) {
$field_names[$auth_type] = $lang[strtoupper($auth_type)];
}
$forum_auth_levels = ['ALL', 'REG', 'PRIVATE', 'MOD', 'ADMIN'];
$forum_auth_const = [AUTH_ALL, AUTH_REG, AUTH_ACL, AUTH_MOD, AUTH_ADMIN];
if (isset($_REQUEST[POST_FORUM_URL])) {
$forum_id = (int)$_REQUEST[POST_FORUM_URL];
$forum_sql = "WHERE forum_id = $forum_id";
} else {
unset($forum_id);
$forum_sql = '';
}
if (isset($_GET['adv'])) {
$adv = (int)$_GET['adv'];
} else {
unset($adv);
}
$submit = isset($_POST['submit']);
// Check for demo mode
if (IN_DEMO_MODE && $submit) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
/**
* Start program proper
*/
if ($submit) {
$sql = '';
if (!empty($forum_id)) {
if (isset($_POST['simpleauth'])) {
$simple_ary = $simple_auth_ary[(int)$_POST['simpleauth']];
for ($i = 0, $iMax = count($simple_ary); $i < $iMax; $i++) {
$sql .= (($sql != '') ? ', ' : '') . $forum_auth_fields[$i] . ' = ' . $simple_ary[$i];
}
if (is_array($simple_ary)) {
$sql = 'UPDATE ' . BB_FORUMS . " SET $sql WHERE forum_id = $forum_id";
}
} else {
for ($i = 0, $iMax = count($forum_auth_fields); $i < $iMax; $i++) {
$value = (int)$_POST[$forum_auth_fields[$i]];
if ($forum_auth_fields[$i] == 'auth_vote') {
if ($_POST['auth_vote'] == AUTH_ALL) {
$value = AUTH_REG;
}
}
$sql .= (($sql != '') ? ', ' : '') . $forum_auth_fields[$i] . ' = ' . $value;
}
$sql = 'UPDATE ' . BB_FORUMS . " SET $sql WHERE forum_id = $forum_id";
}
if ($sql != '') {
if (!DB()->sql_query($sql)) {
bb_die('Could not update auth table');
}
}
$forum_sql = '';
$adv = 0;
}
$datastore->update('cat_forums');
CACHE('bb_cache')->rm();
bb_die($lang['FORUM_AUTH_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_FORUMAUTH'], '<a href="' . 'admin_forumauth.php' . '">', '</a>'));
}
/**
* Get required information
*/
$forum_rows = DB()->fetch_rowset('SELECT * FROM ' . BB_FORUMS . " $forum_sql");
if (empty($forum_id)) {
// Output the selection table if no forum id was specified
$template->assign_vars([
'TPL_AUTH_SELECT_FORUM' => true,
'S_AUTH_ACTION' => 'admin_forumauth.php',
'S_AUTH_SELECT' => get_forum_select('admin', 'f', null, 80),
]);
} else {
// Output the authorisation details if an id was specified
$forum_name = reset($forum_rows)['forum_name'];
reset($simple_auth_ary);
foreach ($simple_auth_ary as $key => $auth_levels) {
$matched = 1;
for ($k = 0, $kMax = count($auth_levels); $k < $kMax; $k++) {
$matched_type = $key;
if ($forum_rows[0][$forum_auth_fields[$k]] != $auth_levels[$k]) {
$matched = 0;
}
}
if ($matched) {
break;
}
}
//
// If we didn't get a match above then we
// automatically switch into 'advanced' mode
//
if (!isset($adv) && !$matched) {
$adv = 1;
}
$s_column_span = 0;
if (empty($adv)) {
$simple_auth = '<select name="simpleauth">';
for ($j = 0, $jMax = count($simple_auth_types); $j < $jMax; $j++) {
$selected = ($matched_type == $j) ? ' selected' : '';
$simple_auth .= '<option value="' . $j . '"' . $selected . '>' . $simple_auth_types[$j] . '</option>';
}
$simple_auth .= '</select>';
$template->assign_block_vars('forum_auth', [
'CELL_TITLE' => $lang['SIMPLE_MODE'],
'S_AUTH_LEVELS_SELECT' => $simple_auth,
]);
$s_column_span++;
} else {
// Output values of individual fields
for ($j = 0, $jMax = count($forum_auth_fields); $j < $jMax; $j++) {
$custom_auth[$j] = '&nbsp;<select name="' . $forum_auth_fields[$j] . '">';
for ($k = 0, $kMax = count($forum_auth_levels); $k < $kMax; $k++) {
$selected = ($forum_rows[0][$forum_auth_fields[$j]] == $forum_auth_const[$k]) ? ' selected' : '';
$custom_auth[$j] .= '<option value="' . $forum_auth_const[$k] . '"' . $selected . '>' . $lang['FORUM_' . strtoupper($forum_auth_levels[$k])] . '</OPTION>';
}
$custom_auth[$j] .= '</select>&nbsp;';
$cell_title = $field_names[$forum_auth_fields[$j]];
$template->assign_block_vars('forum_auth', [
'CELL_TITLE' => $cell_title,
'S_AUTH_LEVELS_SELECT' => $custom_auth[$j],
]);
$s_column_span++;
}
}
$adv_mode = empty($adv) ? '1' : '0';
$switch_mode = "admin_forumauth.php?" . POST_FORUM_URL . "=$forum_id&amp;adv=$adv_mode";
$switch_mode_text = empty($adv) ? $lang['ADVANCED_MODE'] : $lang['SIMPLE_MODE'];
$u_switch_mode = '<a href="' . $switch_mode . '">' . $switch_mode_text . '</a>';
$s_hidden_fields = '<input type="hidden" name="' . POST_FORUM_URL . '" value="' . $forum_id . '">';
$template->assign_vars([
'TPL_EDIT_FORUM_AUTH' => true,
'FORUM_NAME' => htmlCHR($forum_name),
'U_VIEWFORUM' => BB_ROOT . FORUM_URL . $forum_id,
'U_SWITCH_MODE' => $u_switch_mode,
'S_FORUMAUTH_ACTION' => 'admin_forumauth.php',
'S_COLUMN_SPAN' => $s_column_span,
'S_HIDDEN_FIELDS' => $s_hidden_fields,
]);
}
print_page('admin_forumauth.tpl', 'admin');

View file

@ -0,0 +1,327 @@
<?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)) {
$module['FORUMS']['PERMISSIONS_LIST'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
// View Read Post Reply Edit Delete Sticky Announce Vote Poll PostAttach Download
$simple_auth_ary = [
0 => [AUTH_ALL, AUTH_ALL, AUTH_ALL, AUTH_ALL, AUTH_REG, AUTH_REG, AUTH_MOD, AUTH_MOD, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_ALL], // Public
1 => [AUTH_ALL, AUTH_ALL, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_MOD, AUTH_MOD, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG], // Registered
2 => [AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_MOD, AUTH_MOD, AUTH_REG, AUTH_REG, AUTH_REG, AUTH_REG], // Registered [Hidden]
3 => [AUTH_REG, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_MOD, AUTH_MOD, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL], // Private
4 => [AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_MOD, AUTH_MOD, AUTH_ACL, AUTH_ACL, AUTH_ACL, AUTH_ACL], // Private [Hidden]
5 => [AUTH_REG, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD], // Moderators
6 => [AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD, AUTH_MOD], // Moderators [Hidden]
];
$simple_auth_types = [
$lang['PUBLIC'],
$lang['REGISTERED'],
$lang['REGISTERED'] . ' [' . $lang['HIDDEN'] . ']',
$lang['PRIVATE'],
$lang['PRIVATE'] . ' [' . $lang['HIDDEN'] . ']',
$lang['MODERATORS'],
$lang['MODERATORS'] . ' [' . $lang['HIDDEN'] . ']',
];
$forum_auth_fields = [
'auth_view',
'auth_read',
'auth_reply',
'auth_edit',
'auth_delete',
'auth_vote',
'auth_pollcreate',
'auth_attachments',
'auth_download',
'auth_post',
'auth_sticky',
'auth_announce',
];
$field_names = [];
foreach ($forum_auth_fields as $auth_type) {
$field_names[$auth_type] = $lang[strtoupper($auth_type)];
}
$forum_auth_levels = ['ALL', 'REG', 'PRIVATE', 'MOD', 'ADMIN'];
$forum_auth_const = [AUTH_ALL, AUTH_REG, AUTH_ACL, AUTH_MOD, AUTH_ADMIN];
if (isset($_GET[POST_FORUM_URL]) || isset($_POST[POST_FORUM_URL])) {
$forum_id = isset($_POST[POST_FORUM_URL]) ? (int)$_POST[POST_FORUM_URL] : (int)$_GET[POST_FORUM_URL];
$forum_sql = "AND forum_id = $forum_id";
} else {
unset($forum_id);
$forum_sql = '';
}
if (isset($_GET[POST_CAT_URL]) || isset($_POST[POST_CAT_URL])) {
$cat_id = isset($_POST[POST_CAT_URL]) ? (int)$_POST[POST_CAT_URL] : (int)$_GET[POST_CAT_URL];
$cat_sql = "AND c.cat_id = $cat_id";
} else {
unset($cat_id);
$cat_sql = '';
}
if (isset($_GET['adv'])) {
$adv = (int)$_GET['adv'];
} else {
unset($adv);
}
$submit = isset($_POST['submit']);
// Check for demo mode
if (IN_DEMO_MODE && $submit) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
/**
* Start program proper
*/
if ($submit) {
$sql = '';
if (!empty($forum_id)) {
if (isset($_POST['simpleauth'])) {
$simple_ary = $simple_auth_ary[(int)$_POST['simpleauth']];
for ($i = 0, $iMax = count($simple_ary); $i < $iMax; $i++) {
$sql .= (($sql != '') ? ', ' : '') . $forum_auth_fields[$i] . ' = ' . $simple_ary[$i];
}
if (is_array($simple_ary)) {
$sql = 'UPDATE ' . BB_FORUMS . " SET $sql WHERE forum_id = $forum_id";
}
} else {
for ($i = 0, $iMax = count($forum_auth_fields); $i < $iMax; $i++) {
$value = (int)$_POST[$forum_auth_fields[$i]];
if ($forum_auth_fields[$i] == 'auth_vote') {
if ($_POST['auth_vote'] == AUTH_ALL) {
$value = AUTH_REG;
}
}
$sql .= (($sql != '') ? ', ' : '') . $forum_auth_fields[$i] . ' = ' . $value;
}
$sql = 'UPDATE ' . BB_FORUMS . " SET $sql WHERE forum_id = $forum_id";
}
if ($sql != '') {
if (!DB()->sql_query($sql)) {
bb_die('Could not update auth table #1');
}
}
$forum_sql = '';
$adv = 0;
} elseif (!empty($cat_id)) {
for ($i = 0, $iMax = count($forum_auth_fields); $i < $iMax; $i++) {
$value = (int)$_POST[$forum_auth_fields[$i]];
if ($forum_auth_fields[$i] == 'auth_vote') {
if ($_POST['auth_vote'] == AUTH_ALL) {
$value = AUTH_REG;
}
}
$sql .= (($sql != '') ? ', ' : '') . $forum_auth_fields[$i] . ' = ' . $value;
}
$sql = 'UPDATE ' . BB_FORUMS . " SET $sql WHERE cat_id = $cat_id";
if ($sql != '') {
if (!DB()->sql_query($sql)) {
bb_die('Could not update auth table #2');
}
}
$cat_sql = '';
}
$datastore->update('cat_forums');
CACHE('bb_cache')->rm();
bb_die($lang['FORUM_AUTH_UPDATED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_FORUMAUTH'], '<a href="admin_forumauth_list.php">', '</a>'));
} // End of submit
//
// Get required information, either all forums if
// no id was specified or just the requsted forum
// or category if it was
//
$sql = 'SELECT f.*
FROM ' . BB_FORUMS . ' f, ' . BB_CATEGORIES . " c
WHERE c.cat_id = f.cat_id
$forum_sql $cat_sql
ORDER BY c.cat_order ASC, f.forum_order ASC";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not obtain forum list');
}
$forum_rows = DB()->sql_fetchrowset($result);
DB()->sql_freeresult($result);
if (empty($forum_id) && empty($cat_id)) {
//
// Output the summary list if no forum id was
// specified
//
$template->assign_vars(array(
'TPL_AUTH_FORUM_LIST' => true,
'S_COLUMN_SPAN' => count($forum_auth_fields) + 1,
));
for ($i = 0, $iMax = count($forum_auth_fields); $i < $iMax; $i++) {
$template->assign_block_vars('forum_auth_titles', array(
'CELL_TITLE' => $field_names[$forum_auth_fields[$i]],
));
}
// Obtain the category list
$sql = 'SELECT c.cat_id, c.cat_title, c.cat_order
FROM ' . BB_CATEGORIES . ' c
ORDER BY c.cat_order';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query categories list #1');
}
$category_rows = DB()->sql_fetchrowset($result);
$cat_count = count($category_rows);
for ($i = 0; $i < $cat_count; $i++) {
$cat_id = $category_rows[$i]['cat_id'];
$template->assign_block_vars('cat_row', array(
'CAT_NAME' => htmlCHR($category_rows[$i]['cat_title']),
'CAT_URL' => 'admin_forumauth_list.php' . '?' . POST_CAT_URL . '=' . $category_rows[$i]['cat_id'])
);
for ($j = 0, $jMax = count($forum_rows); $j < $jMax; $j++) {
if ($cat_id == $forum_rows[$j]['cat_id']) {
$template->assign_block_vars('cat_row.forum_row', array(
'ROW_CLASS' => !($j % 2) ? 'row4' : 'row5',
'FORUM_NAME' => '<a class="' . ($forum_rows[$j]['forum_parent'] ? 'genmed' : 'gen') . '" href="admin_forumauth.php?' . POST_FORUM_URL . '=' . $forum_rows[$j]['forum_id'] . '">' . htmlCHR($forum_rows[$j]['forum_name']) . '</a>',
'IS_SUBFORUM' => $forum_rows[$j]['forum_parent'],
));
for ($k = 0, $kMax = count($forum_auth_fields); $k < $kMax; $k++) {
$item_auth_value = $forum_rows[$j][$forum_auth_fields[$k]];
for ($l = 0, $lMax = count($forum_auth_const); $l < $lMax; $l++) {
if ($item_auth_value == $forum_auth_const[$l]) {
$item_auth_level = $forum_auth_levels[$l];
break;
}
}
$template->assign_block_vars('cat_row.forum_row.forum_auth_data', array(
'CELL_VALUE' => $lang['FORUM_' . $item_auth_level],
'AUTH_EXPLAIN' => sprintf($lang[strtoupper('FORUM_AUTH_LIST_EXPLAIN_' . $forum_auth_fields[$k])], $lang[strtoupper('FORUM_AUTH_LIST_EXPLAIN_' . $item_auth_level)]))
);
}
}
}
}
} else {
//
// output the authorisation details if an category id was
// specified
//
//
// first display the current details for all forums
// in the category
//
for ($i = 0, $iMax = count($forum_auth_fields); $i < $iMax; $i++) {
$template->assign_block_vars('forum_auth_titles', array(
'CELL_TITLE' => $field_names[$forum_auth_fields[$i]],
));
}
// obtain the category list
$sql = 'SELECT c.cat_id, c.cat_title, c.cat_order
FROM ' . BB_CATEGORIES . " c
WHERE c.cat_id = $cat_id
ORDER BY c.cat_order";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query categories list #2');
}
$category_rows = DB()->sql_fetchrowset($result);
$cat_id = reset($category_rows)['cat_id'];
$cat_name = reset($category_rows)['cat_title'];
$template->assign_block_vars('cat_row', array(
'CAT_NAME' => htmlCHR($cat_name),
'CAT_URL' => 'admin_forumauth_list.php?' . POST_CAT_URL . '=' . $cat_id)
);
for ($j = 0, $jMax = count($forum_rows); $j < $jMax; $j++) {
if ($cat_id == $forum_rows[$j]['cat_id']) {
$template->assign_block_vars('cat_row.forum_row', array(
'ROW_CLASS' => !($j % 2) ? 'row4' : 'row5',
'FORUM_NAME' => '<a class="' . ($forum_rows[$j]['forum_parent'] ? 'genmed' : 'gen') . '" href="admin_forumauth.php?' . POST_FORUM_URL . '=' . $forum_rows[$j]['forum_id'] . '">' . htmlCHR($forum_rows[$j]['forum_name']) . '</a>',
'IS_SUBFORUM' => $forum_rows[$j]['forum_parent'],
));
for ($k = 0, $kMax = count($forum_auth_fields); $k < $kMax; $k++) {
$item_auth_value = $forum_rows[$j][$forum_auth_fields[$k]];
for ($l = 0, $lMax = count($forum_auth_const); $l < $lMax; $l++) {
if ($item_auth_value == $forum_auth_const[$l]) {
$item_auth_level = $forum_auth_levels[$l];
break;
}
}
$template->assign_block_vars('cat_row.forum_row.forum_auth_data', array(
'CELL_VALUE' => $lang['FORUM_' . $item_auth_level],
'AUTH_EXPLAIN' => sprintf($lang[strtoupper('FORUM_AUTH_LIST_EXPLAIN_' . $forum_auth_fields[$k])], $lang[strtoupper('FORUM_AUTH_LIST_EXPLAIN_' . $item_auth_level)]))
);
}
}
}
//
// next generate the information to allow the permissions to be changed
// note: we always read from the first forum in the category
//
for ($j = 0, $jMax = count($forum_auth_fields); $j < $jMax; $j++) {
$custom_auth[$j] = '<select name="' . $forum_auth_fields[$j] . '">';
for ($k = 0, $kMax = count($forum_auth_levels); $k < $kMax; $k++) {
$selected = (!empty($forum_rows) && $forum_rows[0][$forum_auth_fields[$j]] == $forum_auth_const[$k]) ? ' selected' : '';
$custom_auth[$j] .= '<option value="' . $forum_auth_const[$k] . '"' . $selected . '>' . $lang['FORUM_' . $forum_auth_levels[$k]] . '</option>';
}
$custom_auth[$j] .= '</select>';
$template->assign_block_vars('forum_auth_data', array(
'S_AUTH_LEVELS_SELECT' => $custom_auth[$j])
);
}
//
// finally pass any remaining items to the template
//
$s_hidden_fields = '<input type="hidden" name="' . POST_CAT_URL . '" value="' . $cat_id . '">';
$template->assign_vars(array(
'TPL_AUTH_CAT' => true,
'CAT_NAME' => htmlCHR($cat_name),
'S_FORUMAUTH_ACTION' => 'admin_forumauth_list.php',
'S_COLUMN_SPAN' => count($forum_auth_fields) + 1,
'S_HIDDEN_FIELDS' => $s_hidden_fields,
));
}
print_page('admin_forumauth_list.tpl', 'admin');

1191
admin/admin_forums.php Normal file

File diff suppressed because it is too large Load diff

168
admin/admin_groups.php Normal file
View file

@ -0,0 +1,168 @@
<?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)) {
$module['GROUPS']['MANAGE'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? (int)$_REQUEST[POST_GROUPS_URL] : 0;
$mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : '';
attachment_quota_settings('group', $mode, isset($_POST['group_update']));
if (!empty($_POST['edit']) || !empty($_POST['new'])) {
if (!empty($_POST['edit'])) {
if (!$row = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
$group_info = [
'group_name' => $row['group_name'],
'group_description' => $row['group_description'],
'group_moderator' => $row['group_moderator'],
'group_mod_name' => $row['moderator_name'],
'group_type' => $row['group_type'],
'release_group' => $row['release_group']
];
$mode = 'editgroup';
$template->assign_block_vars('group_edit', []);
} elseif (!empty($_POST['new'])) {
$group_info = [
'group_name' => '',
'group_description' => '',
'group_moderator' => '',
'group_mod_name' => '',
'group_type' => GROUP_OPEN,
'release_group' => 0
];
$mode = 'newgroup';
}
// Ok, now we know everything about them, let's show the page.
$s_hidden_fields = '
<input type="hidden" name="mode" value="' . $mode . '" />
<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />
';
$template->assign_vars([
'TPL_EDIT_GROUP' => true,
'GROUP_NAME' => stripslashes(htmlspecialchars($group_info['group_name'])),
'GROUP_DESCRIPTION' => stripslashes(htmlspecialchars($group_info['group_description'])),
'GROUP_MODERATOR' => replace_quote($group_info['group_mod_name']),
'T_GROUP_EDIT_DELETE' => ($mode == 'newgroup') ? $lang['CREATE_NEW_GROUP'] : $lang['EDIT_GROUP'],
'U_SEARCH_USER' => BB_ROOT . 'search.php?mode=searchuser',
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
'S_GROUP_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? HTML_CHECKED : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? HTML_CHECKED : '',
'S_GROUP_HIDDEN_CHECKED' => ($group_info['group_type'] == GROUP_HIDDEN) ? HTML_CHECKED : '',
'RELEASE_GROUP' => (bool)$group_info['release_group'],
'S_GROUP_ACTION' => 'admin_groups.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields
]);
} elseif (!empty($_POST['group_update'])) {
if (!empty($_POST['group_delete'])) {
if (!$group_info = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
// Delete Group
\TorrentPier\Legacy\Group::delete_group($group_id);
$message = $lang['DELETED_GROUP'] . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_GROUPSADMIN'], '<a href="admin_groups.php">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} else {
$group_type = isset($_POST['group_type']) ? (int)$_POST['group_type'] : GROUP_OPEN;
$release_group = isset($_POST['release_group']) ? (int)$_POST['release_group'] : 0;
$group_name = isset($_POST['group_name']) ? trim($_POST['group_name']) : '';
$group_desc = isset($_POST['group_description']) ? trim($_POST['group_description']) : '';
$group_moderator = $_POST['username'] ?? '';
if ($group_name === '') {
bb_die($lang['NO_GROUP_NAME']);
} elseif ($group_moderator === '') {
bb_die($lang['NO_GROUP_MODERATOR']);
}
$this_userdata = get_userdata($group_moderator, true);
if (!$group_moderator = $this_userdata['user_id']) {
bb_die($lang['NO_GROUP_MODERATOR']);
}
$sql_ary = [
'group_type' => (int)$group_type,
'release_group' => (int)$release_group,
'group_name' => (string)$group_name,
'group_description' => (string)$group_desc,
'group_moderator' => (int)$group_moderator,
'group_single_user' => 0,
];
if ($mode == 'editgroup') {
if (!$group_info = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
if ($group_info['group_moderator'] != $group_moderator) {
// Create user_group for new group's moderator
\TorrentPier\Legacy\Group::add_user_into_group($group_id, $group_moderator);
$sql_ary['mod_time'] = TIMENOW;
// Delete old moderator's user_group
if (isset($_POST['delete_old_moderator'])) {
\TorrentPier\Legacy\Group::delete_user_group($group_id, $group_info['group_moderator']);
}
}
$sql_args = DB()->build_array('UPDATE', $sql_ary);
// Update group's data
DB()->query('UPDATE ' . BB_GROUPS . " SET $sql_args WHERE group_id = $group_id");
$message = $lang['UPDATED_GROUP'] . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_GROUPSADMIN'], '<a href="admin_groups.php">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} elseif ($mode == 'newgroup') {
$sql_ary['group_time'] = $sql_ary['mod_time'] = TIMENOW;
$sql_args = DB()->build_array('INSERT', $sql_ary);
// Create new group
DB()->query('INSERT INTO ' . BB_GROUPS . " $sql_args");
$new_group_id = DB()->sql_nextid();
// Create user_group for group's moderator
\TorrentPier\Legacy\Group::add_user_into_group($new_group_id, $group_moderator);
$message = $lang['ADDED_NEW_GROUP'] . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_GROUPSADMIN'], '<a href="admin_groups.php">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} else {
bb_die($lang['NO_GROUP_ACTION']);
}
}
} else {
$template->assign_vars([
'TPL_GROUP_SELECT' => true,
'S_GROUP_ACTION' => 'admin_groups.php',
'S_GROUP_SELECT' => stripslashes(get_select('groups')),
]);
}
print_page('admin_groups.tpl', 'admin');

362
admin/admin_log.php Normal file
View file

@ -0,0 +1,362 @@
<?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)) {
$module['USERS']['ACTIONS_LOG'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$datastore->enqueue([
'moderators',
'cat_forums',
]);
$log_action->init();
$per_page = 50;
$row_class_1 = 'row1';
$row_class_2 = 'row2';
$def_days = 3;
$def_datetime = TIMENOW;
$max_forum_name_len = 40;
$title_match_max_len = 60;
$poster_name_max_len = 25;
$select_max_height = 16;
$dt_format = 'Y-m-d'; // used in one-day filter
$url = basename(__FILE__);
// Key names
$type_key = 'type';
$forum_key = POST_FORUM_URL;
$topic_key = POST_TOPIC_URL;
$user_key = POST_USERS_URL;
$datetime_key = 'dt'; // value should be strtotime() time ("2006-06-25" etc.)
$daysback_key = 'db';
$sort_key = 'sort';
$title_match_key = 'tm';
// Key values
$all_types = 0; // =|
$all_users = 0; // |> only "0" is a valid value
$all_forums = 0; // =|
$sort_asc = 'ASC';
$sort_desc = 'DESC';
// Defaults
$def_types = $all_types;
$def_users = $all_users;
$def_forums = $all_forums;
$def_sort = $sort_desc;
// Moderators data
if (!$mod = $datastore->get('moderators')) {
$datastore->update('moderators');
$mod = $datastore->get('moderators');
}
array_deep($mod['moderators'], 'html_entity_decode');
array_deep($mod['admins'], 'html_entity_decode');
$users = array($lang['ACTS_LOG_ALL_ACTIONS'] => $all_users) + array_flip($mod['moderators']) + array_flip($mod['admins']);
unset($mod);
// Forums data
if (!$forums = $datastore->get('cat_forums')) {
$datastore->update('cat_forums');
$forums = $datastore->get('cat_forums');
}
$f_data = $forums['f'];
unset($forums);
// Start
$start = isset($_REQUEST['start']) ? abs((int)$_REQUEST['start']) : 0;
// Type
$type_selected = array($def_types);
$type_csv = '';
if ($var =& $_REQUEST[$type_key]) {
$type_selected = get_id_ary($var);
if (in_array($all_types, $type_selected)) {
$type_selected = array($all_types);
}
$type_csv = implode(',', $type_selected);
$url = ($type_csv != $def_types) ? url_arg($url, $type_key, $type_csv) : $url;
}
// User
$user_selected = array($def_users);
$user_csv = '';
if ($var =& $_REQUEST[$user_key]) {
$user_selected = get_id_ary($var);
if (in_array($all_users, $user_selected)) {
$user_selected = array($all_users);
}
$user_csv = implode(',', $user_selected);
$url = ($user_csv != $def_users) ? url_arg($url, $user_key, $user_csv) : $url;
}
// Forum
$forum_selected = array($def_forums);
$forum_csv = '';
if ($var =& $_REQUEST[$forum_key]) {
$forum_selected = get_id_ary($var);
if (in_array($all_forums, $forum_selected)) {
$forum_selected = array($all_forums);
}
$forum_csv = implode(',', $forum_selected);
$url = ($forum_csv != $def_forums) ? url_arg($url, $forum_key, $forum_csv) : $url;
}
// Topic
$topic_selected = null;
$topic_csv = '';
if ($var =& $_REQUEST[$topic_key]) {
$topic_selected = get_id_ary($var);
$topic_csv = implode(',', $topic_selected);
$url = $topic_csv ? url_arg($url, $topic_key, $topic_csv) : $url;
}
// Sort
$sort_val = $def_sort;
if ($var =& $_REQUEST[$sort_key] && $var != $def_sort) {
$sort_val = ($var == $sort_asc) ? $sort_asc : $sort_desc;
$url = url_arg($url, $sort_key, $sort_val);
}
// Time
$datetime_val = $def_datetime;
$daysback_val = $def_days;
if ($var =& $_REQUEST[$daysback_key] && $var != $def_days) {
$daysback_val = max((int)$var, 1);
$url = url_arg($url, $daysback_key, $daysback_val);
}
if ($var =& $_REQUEST[$datetime_key] && $var != $def_datetime) {
$tz = TIMENOW + (3600 * config()->get('board_timezone'));
if (($tmp_timestamp = strtotime($var, $tz)) > 0) {
$datetime_val = $tmp_timestamp;
$url = url_arg($url, $datetime_key, date($dt_format, $datetime_val));
}
}
$time_end_val = 86400 + mktime(0, 0, 0, date('m', $datetime_val), date('d', $datetime_val), date('Y', $datetime_val));
$time_start_val = $time_end_val - 86400 * $daysback_val;
// First log time
$row = DB()->fetch_row('SELECT MIN(log_time) AS first_log_time FROM ' . BB_LOG);
$first_log_time = (int)$row['first_log_time'];
// Title match
$title_match_val = $title_match_sql = '';
if ($var =& $_REQUEST[$title_match_key]) {
if ($tmp_title_match = substr(urldecode(trim($var)), 0, $title_match_max_len)) {
$title_match_sql = DB()->escape($tmp_title_match);
$url = url_arg($url, $title_match_key, urlencode($tmp_title_match));
}
}
// SQL
$where = " WHERE l.log_time BETWEEN '$time_start_val' AND '$time_end_val'";
$where .= $type_csv ? " AND l.log_type_id IN($type_csv)" : '';
$where .= $user_csv ? " AND l.log_user_id IN($user_csv)" : '';
$where .= $forum_csv ? " AND l.log_forum_id IN($forum_csv)" : '';
$where .= $topic_csv ? " AND l.log_topic_id IN($topic_csv)" : '';
$where .= $title_match_sql ? " AND MATCH (l.log_topic_title) AGAINST ('$title_match_sql' IN BOOLEAN MODE)" : '';
$sql = 'SELECT l.*, u.*
FROM ' . BB_LOG . ' l
LEFT JOIN ' . BB_USERS . " u ON(u.user_id = l.log_user_id)
$where
ORDER BY l.log_time
$sort_val
LIMIT $start, " . ($per_page + 1);
$log_rowset = DB()->fetch_rowset($sql);
$log_count = count($log_rowset);
if ($log_count == $per_page + 1) {
$items_count = $start + ($per_page * 2);
$pages = '?';
array_pop($log_rowset);
} else {
$items_count = $start + $log_count;
$pages = (!$log_count) ? 1 : ceil($items_count / $per_page);
}
generate_pagination($url, $items_count, $per_page, $start);
$filter = [];
if ($log_rowset) {
$log_type = $log_action->log_type;
$log_type_flip = array_flip($log_type);
foreach ($log_rowset as $row_num => $row) {
$msg = '';
$forum_name = $forum_name_new = '';
$topic_title = $topic_title_new = '';
$topic_deleted = ($row['log_type_id'] == $log_type['mod_topic_delete']);
switch ($row['log_type_id']) {
case $log_type['mod_topic_delete']:
case $log_type['mod_topic_move']:
case $log_type['mod_topic_lock']:
case $log_type['mod_topic_unlock']:
case $log_type['mod_topic_set_downloaded']:
case $log_type['mod_topic_unset_downloaded']:
case $log_type['mod_topic_change_tor_status']:
case $log_type['mod_topic_change_tor_type']:
case $log_type['mod_topic_tor_unregister']:
case $log_type['mod_topic_renamed']:
case $log_type['mod_post_delete']:
case $log_type['mod_post_pin']:
case $log_type['mod_post_unpin']:
case $log_type['mod_topic_split']:
// topic_title
if (!empty($row['log_topic_title'])) {
$topic_title = $row['log_topic_title'];
}
// topic_title_new
if (!empty($row['log_topic_title_new'])) {
$topic_title_new = $row['log_topic_title_new'];
}
// forum_name
if ($fid =& $row['log_forum_id']) {
$forum_name = ($fname =& $f_data[$fid]['forum_name']) ? $fname : 'id:' . $row['log_forum_id'];
}
// forum_name_new
if ($fid =& $row['log_forum_id_new']) {
$forum_name_new = ($fname =& $f_data[$fid]['forum_name']) ? $fname : 'id:' . $row['log_forum_id'];
}
break;
}
$msg .= " {$row['log_msg']}";
$row_class = !($row_num & 1) ? $row_class_1 : $row_class_2;
$datetime_href_s = url_arg($url, $datetime_key, date($dt_format, $row['log_time']));
$datetime_href_s = url_arg($datetime_href_s, $daysback_key, 1);
$template->assign_block_vars('log', array(
'ACTION_DESC' => $lang['LOG_ACTION']['LOG_TYPE'][$log_type_flip[$row['log_type_id']]],
'ACTION_HREF_S' => url_arg($url, $type_key, $row['log_type_id']),
'USER_ID' => $row['log_user_id'],
'USERNAME' => profile_url($row, true),
'USER_HREF_S' => url_arg($url, $user_key, $row['log_user_id']),
'USER_IP' => \TorrentPier\Helpers\IPHelper::isValid($row['log_user_ip']) ? \TorrentPier\Helpers\IPHelper::long2ip_extended($row['log_user_ip']) : '127.0.0.1',
'FORUM_ID' => $row['log_forum_id'],
'FORUM_HREF' => BB_ROOT . FORUM_URL . $row['log_forum_id'],
'FORUM_HREF_S' => url_arg($url, $forum_key, $row['log_forum_id']),
'FORUM_NAME' => htmlCHR($forum_name),
'FORUM_ID_NEW' => $row['log_forum_id_new'],
'FORUM_HREF_NEW' => BB_ROOT . FORUM_URL . $row['log_forum_id_new'],
'FORUM_HREF_NEW_S' => url_arg($url, $forum_key, $row['log_forum_id_new']),
'FORUM_NAME_NEW' => htmlCHR($forum_name_new),
'TOPIC_ID' => $row['log_topic_id'],
'TOPIC_HREF' => (!$topic_deleted) ? BB_ROOT . TOPIC_URL . $row['log_topic_id'] : '',
'TOPIC_HREF_S' => url_arg($url, $topic_key, $row['log_topic_id']),
'TOPIC_TITLE' => $topic_title,
'TOPIC_ID_NEW' => $row['log_topic_id_new'],
'TOPIC_HREF_NEW' => BB_ROOT . TOPIC_URL . $row['log_topic_id_new'],
'TOPIC_HREF_NEW_S' => url_arg($url, $topic_key, $row['log_topic_id_new']),
'TOPIC_TITLE_NEW' => $topic_title_new,
'DATETIME' => bb_date($row['log_time'], 'd-M-y H:i'),
'DATETIME_HREF_S' => $datetime_href_s,
'MSG' => $msg,
'ROW_CLASS' => $row_class,
));
// Topics
if ($topic_csv && empty($filter['topics'][$row['log_topic_title']])) {
$template->assign_block_vars('topics', array(
'TOPIC_TITLE' => $row['log_topic_title'],
));
$filter['topics'][$row['log_topic_title']] = true;
}
// Forums
if ($forum_csv && empty($filter['forums'][$forum_name])) {
$template->assign_block_vars('forums', array(
'FORUM_NAME' => htmlCHR($forum_name),
));
$filter['forums'][$forum_name] = true;
}
// Users
if ($user_csv && empty($filter['users'])) {
$template->assign_block_vars('users', array(
'USERNAME' => profile_url($row, true),
));
$filter['users'] = true;
}
}
$template->assign_vars(array(
'FILTERS' => $topic_csv || $forum_csv || $user_csv,
'FILTER_TOPICS' => !empty($filter['topics']),
'FILTER_FORUMS' => !empty($filter['forums']),
'FILTER_USERS' => !empty($filter['users']),
));
} else {
$template->assign_block_vars('log_not_found', []);
}
// Select
$log_type_select = array($lang['ACTS_LOG_ALL_ACTIONS'] => $all_types) + $log_action->log_type_select;
$template->assign_vars(array(
'LOG_COLSPAN' => 4,
'DATETIME_NAME' => $datetime_key,
'DATETIME_VAL' => date('Y-m-d', $datetime_val),
'DAYSBACK_NAME' => $daysback_key,
'DAYSBACK_VAL' => $daysback_val,
'FIRST_LOG_TIME' => $first_log_time ? date('Y-m-d', $first_log_time) : $lang['ACC_NONE'],
'TITLE_MATCH_MAX' => $title_match_max_len,
'TITLE_MATCH_NAME' => $title_match_key,
'TITLE_MATCH_VAL' => $title_match_val,
'SORT_NAME' => $sort_key,
'SORT_ASC' => $sort_asc,
'SORT_DESC' => $sort_desc,
'SORT_ASC_CHECKED' => ($sort_val == $sort_asc) ? HTML_CHECKED : '',
'SORT_DESC_CHECKED' => ($sort_val == $sort_desc) ? HTML_CHECKED : '',
'SEL_FORUM' => get_forum_select('admin', "{$forum_key}[]", $forum_selected, $max_forum_name_len, $select_max_height, '', $all_forums),
'SEL_LOG_TYPE' => build_select("{$type_key}[]", $log_type_select, $type_selected, 60, $select_max_height),
'SEL_USERS' => build_select("{$user_key}[]", $users, $user_selected, 16, $select_max_height),
'S_LOG_ACTION' => 'admin_log.php',
'TOPIC_CSV' => $topic_csv,
));
print_page('admin_log.tpl', 'admin');

105
admin/admin_mass_email.php Normal file
View file

@ -0,0 +1,105 @@
<?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)) {
$module['MODS']['MASS_EMAIL'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
if (!config()->get('emailer.enabled')) {
bb_die($lang['EMAILER_DISABLED']);
}
set_time_limit(1200);
$subject = trim(request_var('subject', ''));
$message = (string)request_var('message', '');
$group_id = (int)request_var(POST_GROUPS_URL, 0);
$reply_to = (string)request_var('reply_to', config()->get('board_email'));
$message_type = (string)request_var('message_type', '');
$errors = $user_id_sql = [];
if (isset($_POST['submit'])) {
if (!$subject) {
$errors[] = $lang['EMPTY_SUBJECT'];
}
if (!$message) {
$errors[] = $lang['EMPTY_MESSAGE'];
}
if (!$group_id) {
$errors[] = $lang['GROUP_NOT_EXIST'];
}
if (!$errors) {
$banned_users = ($get_banned_users = get_banned_users()) ? (', ' . implode(', ', $get_banned_users)) : '';
if ($group_id != -1) {
$user_list = DB()->fetch_rowset('
SELECT u.username, u.user_email, u.user_lang
FROM ' . BB_USERS . ' u, ' . BB_USER_GROUP . " ug
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND u.user_id = ug.user_id
AND u.user_active = 1
AND u.user_id NOT IN(" . EXCLUDED_USERS . $banned_users . ')
');
} else {
$user_list = DB()->fetch_rowset('
SELECT username, user_email, user_lang
FROM ' . BB_USERS . '
WHERE user_active = 1
AND user_id NOT IN(' . EXCLUDED_USERS . $banned_users . ')
');
}
foreach ($user_list as $i => $row) {
// Sending email
$emailer = new TorrentPier\Emailer();
$emailer->set_to($row['user_email'], $row['username']);
$emailer->set_subject($subject);
$emailer->set_reply($reply_to);
$emailer->set_template('admin_send_email');
$emailer->assign_vars(['MESSAGE' => trim(html_entity_decode($message))]);
$emailer->send($message_type);
}
}
}
//
// Generate page
//
$sql = 'SELECT group_id, group_name
FROM ' . BB_GROUPS . '
WHERE group_single_user = 0
ORDER BY group_name
';
$groups = ['-- ' . $lang['ALL_USERS'] . ' --' => -1];
foreach (DB()->fetch_rowset($sql) as $row) {
$groups[$row['group_name']] = $row['group_id'];
}
$template->assign_vars([
'MESSAGE' => $message,
'SUBJECT' => $subject,
'REPLY_TO' => $reply_to,
'ERROR_MESSAGE' => $errors ? implode('<br />', array_unique($errors)) : '',
'S_USER_ACTION' => 'admin_mass_email.php',
'S_GROUP_SELECT' => build_select(POST_GROUPS_URL, $groups)
]);
print_page('admin_mass_email.tpl', 'admin');

View 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');

29
admin/admin_phpinfo.php Normal file
View file

@ -0,0 +1,29 @@
<?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']['PHP_INFO'] = basename(__FILE__);
}
return;
}
require __DIR__ . '/pagestart.php';
if (!IS_SUPER_ADMIN) {
bb_die($lang['ONLY_FOR_SUPER_ADMIN']);
}
// Check for demo mode
if (IN_DEMO_MODE) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
/** @noinspection ForgottenDebugOutputInspection */
phpinfo();

202
admin/admin_ranks.php Normal file
View file

@ -0,0 +1,202 @@
<?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)) {
$module['USERS']['RANKS'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
if (isset($_GET['mode']) || isset($_POST['mode'])) {
$mode = $_GET['mode'] ?? $_POST['mode'];
} else {
//
// These could be entered via a form button
//
if (isset($_POST['add'])) {
$mode = 'add';
} elseif (isset($_POST['save'])) {
$mode = 'save';
} else {
$mode = '';
}
}
if ($mode == 'delete' && isset($_POST['cancel'])) {
$mode = '';
}
if ($mode != '') {
if ($mode == 'edit' || $mode == 'add') {
//
// They want to add a new rank, show the form.
//
$rank_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$s_hidden_fields = '';
if ($mode == 'edit') {
if (empty($rank_id)) {
bb_die($lang['MUST_SELECT_RANK']);
}
$sql = 'SELECT * FROM ' . BB_RANKS . " WHERE rank_id = $rank_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not obtain ranks data #1');
}
$rank_info = DB()->sql_fetchrow($result);
$s_hidden_fields .= '<input type="hidden" name="id" value="' . $rank_id . '" />';
}
$s_hidden_fields .= '<input type="hidden" name="mode" value="save" />';
$template->assign_vars([
'TPL_RANKS_EDIT' => true,
'RANK' => !empty($rank_info['rank_title']) ? $rank_info['rank_title'] : '',
'IMAGE' => !empty($rank_info['rank_image']) ? $rank_info['rank_image'] : 'styles/images/ranks/rank_image.png',
'STYLE' => !empty($rank_info['rank_style']) ? $rank_info['rank_style'] : '',
'IMAGE_DISPLAY' => !empty($rank_info['rank_image']) ? '<img src="../' . $rank_info['rank_image'] . '" />' : '',
'S_RANK_ACTION' => 'admin_ranks.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields
]);
} elseif ($mode == 'save') {
//
// Ok, they sent us our info, let's update it.
//
$rank_id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
$rank_title = isset($_POST['title']) ? trim($_POST['title']) : '';
$rank_style = isset($_POST['style']) ? trim($_POST['style']) : '';
$rank_image = isset($_POST['rank_image']) ? trim($_POST['rank_image']) : '';
if ($rank_title == '') {
bb_die($lang['MUST_SELECT_RANK']);
}
//
// The rank image has to be a jpg, gif or png
//
if ($rank_image != '') {
if (!preg_match('/(\.gif|\.png|\.jpg|\.jpeg|\.bmp|\.webp|\.avif\.ico)$/is', $rank_image)) {
$rank_image = '';
}
}
if ($rank_id) {
$sql = 'UPDATE ' . BB_USERS . " SET user_rank = 0 WHERE user_rank = $rank_id";
if (!$result = DB()->sql_query($sql)) {
bb_die($lang['NO_UPDATE_RANKS']);
}
$sql = 'UPDATE ' . BB_RANKS . "
SET rank_title = '" . DB()->escape($rank_title) . "',
rank_image = '" . DB()->escape($rank_image) . "',
rank_style = '" . DB()->escape($rank_style) . "'
WHERE rank_id = $rank_id";
$message = $lang['RANK_UPDATED'];
} else {
$sql = 'INSERT INTO ' . BB_RANKS . " (rank_title, rank_image, rank_style)
VALUES ('" . DB()->escape($rank_title) . "', '" . DB()->escape($rank_image) . "', '" . DB()->escape($rank_style) . "')";
$message = $lang['RANK_ADDED'];
}
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not update / insert into ranks table');
}
$message .= '<br /><br />' . sprintf($lang['CLICK_RETURN_RANKADMIN'], '<a href="admin_ranks.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
$datastore->update('ranks');
bb_die($message);
} elseif ($mode == 'delete') {
//
// Ok, they want to delete their rank
//
$confirmed = isset($_POST['confirm']);
if (isset($_POST['id']) || isset($_GET['id'])) {
$rank_id = isset($_POST['id']) ? (int)$_POST['id'] : (int)$_GET['id'];
} else {
$rank_id = 0;
}
if ($confirmed) {
if ($rank_id) {
$sql = 'DELETE FROM ' . BB_RANKS . " WHERE rank_id = $rank_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not delete rank data');
}
$sql = 'UPDATE ' . BB_USERS . " SET user_rank = 0 WHERE user_rank = $rank_id";
if (!$result = DB()->sql_query($sql)) {
bb_die($lang['NO_UPDATE_RANKS']);
}
$datastore->update('ranks');
bb_die($lang['RANK_REMOVED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_RANKADMIN'], '<a href="admin_ranks.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} else {
bb_die($lang['MUST_SELECT_RANK']);
}
} else {
$hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
$hidden_fields .= '<input type="hidden" name="id" value="' . $rank_id . '" />';
print_confirmation([
'FORM_ACTION' => 'admin_ranks.php',
'HIDDEN_FIELDS' => $hidden_fields,
]);
}
} else {
bb_die('Invalid mode');
}
} else {
//
// Show the default page
//
$sql = 'SELECT * FROM ' . BB_RANKS . ' ORDER BY rank_title';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not obtain ranks data #2');
}
$rank_count = DB()->num_rows($result);
$rank_rows = DB()->sql_fetchrowset($result);
$template->assign_vars([
'TPL_RANKS_LIST' => true,
'S_RANKS_ACTION' => 'admin_ranks.php'
]);
for ($i = 0; $i < $rank_count; $i++) {
$rank = $rank_rows[$i]['rank_title'];
$rank_id = $rank_rows[$i]['rank_id'];
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('ranks', [
'ROW_CLASS' => $row_class,
'RANK' => $rank,
'STYLE' => $rank_rows[$i]['rank_style'],
'IMAGE_DISPLAY' => $rank_rows[$i]['rank_image'] ? '<img src="../' . $rank_rows[$i]['rank_image'] . '" />' : '',
'U_RANK_EDIT' => "admin_ranks.php?mode=edit&amp;id=$rank_id",
'U_RANK_DELETE' => "admin_ranks.php?mode=delete&amp;id=$rank_id"
]);
}
}
print_page('admin_ranks.tpl', 'admin');

View file

@ -0,0 +1,588 @@
<?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']['REBUILD_SEARCH_INDEX'] = basename(__FILE__);
}
return;
}
require __DIR__ . '/pagestart.php';
if (!IS_SUPER_ADMIN) {
bb_die($lang['ONLY_FOR_SUPER_ADMIN']);
}
require INC_DIR . '/bbcode.php';
define('REBUILD_SEARCH_ABORTED', 0); // when the user aborted the processing
define('REBUILD_SEARCH_PROCESSED', 1); // when a batch of posts has been processed
define('REBUILD_SEARCH_COMPLETED', 2); // when all the db posts have been processed
//
// Define initial vars
//
$def_post_limit = 50;
$def_refresh_rate = 3;
$def_time_limit = ($sys_time_limit = ini_get('max_execution_time')) ? $sys_time_limit : 30;
$last_session_data = get_rebuild_session_details('last', 'all');
$last_session_id = (int)$last_session_data['rebuild_session_id'];
$max_post_id = get_latest_post_id();
$start_time = TIMENOW;
$mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : '';
// check if the user has choosen to stop processing
if (isset($_REQUEST['cancel_button'])) {
// update the rebuild_status
if ($last_session_id) {
DB()->query('
UPDATE ' . BB_SEARCH_REBUILD . ' SET
rebuild_session_status = ' . REBUILD_SEARCH_ABORTED . "
WHERE rebuild_session_id = $last_session_id
");
}
bb_die(sprintf($lang['REBUILD_SEARCH_ABORTED'], $last_session_data['end_post_id']) . '<br /><br />' . sprintf($lang['CLICK_RETURN_REBUILD_SEARCH'], '<a href="admin_rebuild_search.php">', '</a>'));
}
// from which post to start processing
$start = isset($_REQUEST['start']) ? abs((int)$_REQUEST['start']) : 0;
// get the total number of posts in the db
$total_posts = get_total_posts();
// clear the search tables and clear mode (delete or truncate)
$clear_search = isset($_REQUEST['clear_search']) ? (int)$_REQUEST['clear_search'] : 0;
// get the number of total/session posts already processed
$total_posts_processed = ($start != 0) ? get_total_posts('before', $last_session_data['end_post_id']) : 0;
$session_posts_processed = ($mode == 'refresh') ? get_processed_posts('session') : 0;
// find how many posts aren't processed
$total_posts_processing = $total_posts - $total_posts_processed;
// how many posts to process in this session
$session_posts_processing = isset($_REQUEST['session_posts_processing']) ? (int)$_REQUEST['session_posts_processing'] : null;
if (null !== $session_posts_processing) {
if ($mode == 'submit') {
// check if we passed over total_posts just after submitting
if ($session_posts_processing + $total_posts_processed > $total_posts) {
$session_posts_processing = $total_posts - $total_posts_processed;
}
}
// correct it when posts are deleted during processing
$session_posts_processing = ($session_posts_processing > $total_posts) ? $total_posts : $session_posts_processing;
} else {
// if we have finished, get all the posts, else only the remaining
$session_posts_processing = (!$total_posts_processing) ? $total_posts : $total_posts_processing;
}
// how many posts to process per cycle
$post_limit = isset($_REQUEST['post_limit']) ? (int)$_REQUEST['post_limit'] : $def_post_limit;
// correct the post_limit when we pass over it
if ($session_posts_processed + $post_limit > $session_posts_processing) {
$post_limit = $session_posts_processing - $session_posts_processed;
}
// how much time to wait per cycle
if (isset($_REQUEST['time_limit'])) {
$time_limit = (int)$_REQUEST['time_limit'];
} else {
$time_limit = $def_time_limit;
$time_limit_explain = $lang['TIME_LIMIT_EXPLAIN'];
// check for webserver timeout (IE returns null)
if (isset($_SERVER['HTTP_KEEP_ALIVE'])) {
// get webserver timeout
$webserver_timeout = (int)$_SERVER['HTTP_KEEP_ALIVE'];
$time_limit_explain .= '<br />' . sprintf($lang['TIME_LIMIT_EXPLAIN_WEBSERVER'], $webserver_timeout);
if ($time_limit > $webserver_timeout) {
$time_limit = $webserver_timeout;
}
}
}
// how much time to wait between page refreshes
$refresh_rate = isset($_REQUEST['refresh_rate']) ? (int)$_REQUEST['refresh_rate'] : $def_refresh_rate;
// check if the user gave wrong input
if ($mode == 'submit') {
if (($session_posts_processing || $post_limit || $refresh_rate || $time_limit) <= 0) {
bb_die($lang['WRONG_INPUT'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_REBUILD_SEARCH'], '<a href="admin_rebuild_search.php">', '</a>'));
}
}
// Increase maximum execution time in case of a lot of posts, but don't complain about it if it isn't allowed.
set_time_limit($time_limit + 20);
// check if we are should start processing
if ($mode == 'submit' || $mode == 'refresh') {
// check if we are in the beginning of processing
if ($start == 0) {
$last_session_data = get_empty_last_session_data();
clear_search_tables($clear_search);
}
// get the db sizes
[$search_data_size, $search_index_size, $search_tables_size] = get_db_sizes();
// get the post subject/text of each post
$result = DB()->query("
SELECT
pt.post_id, pt.post_text,
IF(p.post_id = t.topic_first_post_id, t.topic_title, '') AS post_subject
FROM
" . BB_POSTS_TEXT . ' pt,
' . BB_POSTS . ' p,
' . BB_TOPICS . ' t
WHERE p.post_id = pt.post_id
AND t.topic_id = p.topic_id
AND p.poster_id NOT IN(' . BOT_UID . ")
AND pt.post_id >= $start
ORDER BY pt.post_id ASC
LIMIT $post_limit
");
$expire_time = $start_time + $time_limit - 5;
$start_post_id = $end_post_id = $num_rows = 0;
$timer_expired = false;
$words_sql = [];
while ($row = DB()->fetch_next($result) and !$timer_expired) {
set_time_limit(600);
$start_post_id = ($num_rows == 0) ? $row['post_id'] : $start_post_id;
$end_post_id = $row['post_id'];
// Get search words
$s_post_text = str_replace('\n', "\n", $row['post_text']);
$s_post_subject = str_replace('\n', "\n", $row['post_subject']);
$words_sql[] = array(
'post_id' => (int)$row['post_id'],
'search_words' => add_search_words($row['post_id'], stripslashes($s_post_text), stripslashes($s_post_subject), true),
);
$timer_expired = (TIMENOW > $expire_time);
$num_rows++;
}
// Store search words
if ($words_sql) {
DB()->query('REPLACE INTO ' . BB_POSTS_SEARCH . DB()->build_array('MULTI_INSERT', $words_sql));
}
// find how much time the last cycle took
$last_cycle_time = (int)(TIMENOW - $start_time);
// check if we had any data
if ($num_rows != 0) {
if ($mode == 'submit') {
// insert a new session entry
$args = DB()->build_array('INSERT', array(
'end_post_id' => (int)$end_post_id,
'end_time' => (int)TIMENOW,
'last_cycle_time' => (int)$last_cycle_time,
'session_time' => (int)$last_cycle_time,
'session_posts' => (int)$num_rows,
'session_cycles' => (int)1,
'start_post_id' => (int)$start_post_id,
'start_time' => (int)$start_time,
'search_size' => (int)$search_tables_size,
'rebuild_session_status' => REBUILD_SEARCH_PROCESSED,
));
DB()->query('REPLACE INTO ' . BB_SEARCH_REBUILD . $args);
} else {
// refresh
// update the last session entry
DB()->query('
UPDATE ' . BB_SEARCH_REBUILD . " SET
end_post_id = $end_post_id,
end_time = " . TIMENOW . ",
last_cycle_time = $last_cycle_time,
session_time = session_time + $last_cycle_time,
session_posts = session_posts + $num_rows,
session_cycles = session_cycles + 1,
rebuild_session_status = " . REBUILD_SEARCH_PROCESSED . "
WHERE rebuild_session_id = $last_session_id
");
}
}
$last_session_data = get_rebuild_session_details('last', 'all');
$template->assign_vars(array('TPL_REBUILD_SEARCH_PROGRESS' => true));
$processing_messages = '';
$processing_messages .= $timer_expired ? sprintf($lang['TIMER_EXPIRED'], TIMENOW - $start_time) : '';
$processing_messages .= ($start == 0 && $clear_search) ? $lang['CLEARED_SEARCH_TABLES'] : '';
// check if we have reached the end of our post processing
$session_posts_processed = get_processed_posts('session');
$total_posts_processed = get_total_posts('before', $last_session_data['end_post_id']);
$total_posts = get_total_posts();
if ($session_posts_processed < $session_posts_processing && $total_posts_processed < $total_posts) {
$form_parameters = '&start=' . ($end_post_id + 1);
$form_parameters .= '&session_posts_processing=' . $session_posts_processing;
$form_parameters .= '&post_limit=' . $post_limit;
$form_parameters .= '&time_limit=' . $time_limit;
$form_parameters .= '&refresh_rate=' . $refresh_rate;
$form_action = 'admin_rebuild_search.php' . '?mode=refresh' . $form_parameters;
$next_button = $lang['NEXT'];
$progress_bar_img = $images['progress_bar'];
$processing_messages .= sprintf($lang['PROCESSING_NEXT_POSTS'], $post_limit);
meta_refresh($form_action, $refresh_rate);
// create the meta tag for refresh
$template->assign_vars(array(
'CANCEL_BUTTON' => true,
));
} else {
// end of processing
$form_action = 'admin_rebuild_search.php';
$next_button = $lang['FINISHED'];
$progress_bar_img = $images['progress_bar_full'];
$processing_messages .= ($session_posts_processed < $session_posts_processing) ? sprintf($lang['DELETED_POSTS'], $session_posts_processing - $session_posts_processed) : '';
$processing_messages .= ($total_posts_processed == $total_posts) ? $lang['ALL_POSTS_PROCESSED'] : $lang['ALL_SESSION_POSTS_PROCESSED'];
// if we have processed all the db posts we need to update the rebuild_status
DB()->query('UPDATE ' . BB_SEARCH_REBUILD . ' SET
rebuild_session_status = ' . REBUILD_SEARCH_COMPLETED . "
WHERE rebuild_session_id = $last_session_id
AND end_post_id = $max_post_id
");
// optimize all search tables when finished
$table_ary = array(BB_POSTS_SEARCH);
foreach ($table_ary as $table) {
DB()->query("ANALYZE TABLE $table");
DB()->query("OPTIMIZE TABLE $table");
}
$processing_messages .= '<br />' . $lang['ALL_TABLES_OPTIMIZED'];
}
// calculate the percent
if ($session_posts_processing > 0) {
$session_percent = ($session_posts_processed / $session_posts_processing) * 100;
} else {
$session_percent = 100;
}
if ($total_posts > 0) {
$total_percent = ($total_posts_processed / $total_posts) * 100;
} else {
$total_percent = 100;
}
// get the db sizes
[$search_data_size, $search_index_size, $search_tables_size] = get_db_sizes();
// calculate the final (estimated) values
$final_search_tables_size = '';
if ($search_tables_size) {
$start_search_tables_size = $last_session_data['search_size'];
$final_search_tables_size = $start_search_tables_size + round(($search_tables_size - $start_search_tables_size) * (100 / $session_percent));
}
// calculate various times
$session_time = $last_session_data['session_time'];
if ($last_session_data['session_cycles'] > 0) {
$session_average_cycle_time = round($session_time / $last_session_data['session_cycles']);
} else {
$session_average_cycle_time = 0;
}
$session_estimated_time = round($session_time * (100 / $session_percent)) - $session_time;
// create the percent boxes
create_percent_box('session', create_percent_color($session_percent), $session_percent);
create_percent_box('total', create_percent_color($total_percent), $total_percent);
$template->assign_vars(array(
'L_NEXT' => $next_button,
'L_TIME_LAST_POSTS_ADMIN' => sprintf($lang['TIME_LAST_POSTS'], $num_rows),
'PROCESSING_POSTS' => sprintf($lang['PROCESSED_POST_IDS'], $start_post_id, $end_post_id),
'PROCESSING_MESSAGES' => $processing_messages,
'PROGRESS_BAR_IMG' => $progress_bar_img,
'SESSION_DETAILS' => sprintf($lang['PROCESS_DETAILS'], $session_posts_processed - $num_rows + 1, $session_posts_processed, $session_posts_processing),
'SESSION_PERCENT' => sprintf($lang['PERCENT_COMPLETED'], round($session_percent, 2)),
'TOTAL_DETAILS' => sprintf($lang['PROCESS_DETAILS'], $total_posts_processed - $num_rows + 1, $total_posts_processed, $total_posts),
'TOTAL_PERCENT' => sprintf($lang['PERCENT_COMPLETED'], round($total_percent, 2)),
'LAST_CYCLE_TIME' => delta_time(TIMENOW),
'SESSION_TIME' => delta_time(($last_session_data['start_time'] == 0) ? TIMENOW : $last_session_data['start_time']),
'SESSION_AVERAGE_CYCLE_TIME' => delta_time((int)$session_average_cycle_time, 0),
'SESSION_ESTIMATED_TIME' => delta_time((int)$session_estimated_time, 0),
'SEARCH_TABLES_SIZE' => humn_size($search_tables_size),
'FINAL_SEARCH_TABLES_SIZE' => humn_size($final_search_tables_size),
'SEARCH_DATA_SIZE' => humn_size($search_data_size),
'SEARCH_INDEX_SIZE' => humn_size($search_index_size),
'START_POST' => $last_session_data['start_post_id'],
'POST_LIMIT' => $num_rows,
'TIME_LIMIT' => $time_limit,
'REFRESH_RATE' => $refresh_rate,
'S_REBUILD_SEARCH_ACTION' => $form_action,
));
} else {// show the input page
// create the page
// used only with the select input
$post_limit_hidden = ($def_post_limit > $total_posts) ? $total_posts : $def_post_limit;
$s_hidden_fields = '<input type="hidden" name="post_limit_stored" value="' . $post_limit_hidden . '" />';
$s_hidden_fields .= '<input type="hidden" name="total_posts_stored" value="' . $total_posts . '" />';
$next_start_post_id = 0;
$last_saved_processing = '';
$clear_search_disabled = '';
if ($last_session_data['rebuild_session_id']) {
$last_saved_post_id = $last_session_data['end_post_id'];
$next_start_post_id = $last_saved_post_id + 1;
$last_saved_date = bb_date($last_session_data['end_time']);
// check our last status
if ($last_session_data['rebuild_session_status'] == REBUILD_SEARCH_PROCESSED) {
$last_saved_processing = sprintf($lang['INFO_PROCESSING_STOPPED'], $last_saved_post_id, $total_posts_processed, $last_saved_date);
$clear_search_disabled = 'disabled';
$template->assign_block_vars('start_select_input', []);
} elseif ($last_session_data['rebuild_session_status'] == REBUILD_SEARCH_ABORTED) {
$last_saved_processing = sprintf($lang['INFO_PROCESSING_ABORTED'], $last_saved_post_id, $total_posts_processed, $last_saved_date);
// check if the interrupted cycle has finished
if (TIMENOW - $last_session_data['end_time'] < $last_session_data['last_cycle_time']) {
$last_saved_processing .= '<br />' . $lang['INFO_PROCESSING_ABORTED_SOON'];
}
$clear_search_disabled = 'disabled';
$template->assign_block_vars('start_select_input', []);
} else {
// when finished
if ($last_session_data['end_post_id'] < $max_post_id) {
$last_saved_processing = sprintf($lang['INFO_PROCESSING_FINISHED_NEW'], $last_saved_post_id, $total_posts_processed, $last_saved_date, $total_posts - $total_posts_processed);
$clear_search_disabled = 'disabled';
$template->assign_block_vars('start_select_input', []);
} else {
$last_saved_processing = sprintf($lang['INFO_PROCESSING_FINISHED'], $total_posts, $last_saved_date);
$template->assign_block_vars('start_text_input', []);
}
}
$template->assign_block_vars('last_saved_info', []);
} else {
$template->assign_block_vars('start_text_input', []);
}
// create the output of page
$template->assign_vars(array(
'TPL_REBUILD_SEARCH_MAIN' => true,
'L_TIME_LIMIT_EXPLAIN' => $time_limit_explain,
'NEXT_START_POST_ID' => $next_start_post_id,
'CLEAR_SEARCH_DISABLED' => $clear_search_disabled,
'SESSION_POSTS_PROCESSING' => $session_posts_processing,
'POST_LIMIT' => $post_limit,
'REFRESH_RATE' => $refresh_rate,
'TIME_LIMIT' => $time_limit,
'LAST_SAVED_PROCESSING' => $last_saved_processing,
'SESSION_ID' => $userdata['session_id'],
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_REBUILD_SEARCH_ACTION' => 'admin_rebuild_search.php?mode=submit',
));
}
print_page('admin_rebuild_search.tpl', 'admin');
//
// Functions
//
function get_db_sizes()
{
$search_data_size = $search_index_size = 0;
$search_table_like = DB()->escape(BB_POSTS_SEARCH);
$sql = 'SHOW TABLE STATUS FROM `' . DB()->selected_db . "` LIKE '$search_table_like'";
foreach (DB()->fetch_rowset($sql) as $row) {
$search_data_size += $row['Data_length'];
$search_index_size += $row['Index_length'];
}
return array($search_data_size, $search_index_size, $search_data_size + $search_index_size);
}
// get the latest post_id in the forum
function get_latest_post_id()
{
$row = DB()->fetch_row('SELECT MAX(post_id) as post_id FROM ' . BB_POSTS_TEXT);
return (int)$row['post_id'];
}
function get_empty_last_session_data()
{
return array(
'rebuild_session_id' => 0,
'start_post_id' => 0,
'end_post_id' => 0,
'start_time' => 0,
'end_time' => 0,
'last_cycle_time' => 0,
'session_time' => 0,
'session_posts' => 0,
'session_cycles' => 0,
'search_size' => 0,
'rebuild_session_status' => REBUILD_SEARCH_COMPLETED,
);
}
// get some or all of the rebuild details of a specific session or of the last session
// $id is the id or the 'last' id
// $details is one of the fields or 'all' of them
function get_rebuild_session_details($id, $details = 'all')
{
$session_details = get_empty_last_session_data();
if ($id != 'last') {
$sql = 'SELECT * FROM ' . BB_SEARCH_REBUILD . " WHERE rebuild_session_id = $id";
} else {
$sql = 'SELECT * FROM ' . BB_SEARCH_REBUILD . ' ORDER BY rebuild_session_id DESC LIMIT 1';
}
if ($row = DB()->fetch_row($sql)) {
$session_details = ($details == 'all') ? $row : $row[$details];
}
return $session_details;
}
// get the number of processed posts in the last session or in all sessions
// 'total' to get the sum of posts of all sessions
// 'session' to get the posts of the last session
function get_processed_posts($mode = 'session')
{
global $last_session_data;
$row = [];
if ($mode == 'total') {
$sql = 'SELECT SUM(session_posts) as posts FROM ' . BB_SEARCH_REBUILD;
$row = DB()->fetch_row($sql);
} else {
$row['posts'] = $last_session_data['session_posts'];
}
return (int)$row['posts'];
}
// how many posts are in the db before or after a specific post_id
// after/before require and the post_id
function get_total_posts($mode = 'after', $post_id = 0)
{
if ($post_id) {
$sql = 'SELECT COUNT(post_id) as total_posts FROM ' . BB_POSTS_TEXT . '
WHERE post_id ' . (($mode == 'after') ? '>= ' : '<= ') . (int)$post_id;
} else {
$sql = 'SELECT COUNT(*) as total_posts FROM ' . BB_POSTS_TEXT;
}
$row = DB()->fetch_row($sql);
$totalPosts = (int)$row['total_posts'];
if ($totalPosts < 0) {
return 0;
}
return $totalPosts;
}
function clear_search_tables($mode = '')
{
DB()->query('DELETE FROM ' . BB_SEARCH_REBUILD);
if ($mode) {
$table_ary = array(BB_POSTS_SEARCH);
foreach ($table_ary as $table) {
$sql = (($mode == 1) ? 'DELETE FROM ' : 'TRUNCATE TABLE ') . $table;
DB()->query($sql);
}
}
}
// Create the percent color
// We use an array with the color percent limits.
// One color stays constantly at FF when the percent is between its limits
// and we adjust the other 2 accordingly to percent, from 200 to 0.
// We limit the result to 200, in order to avoid white (255).
function create_percent_color($percent)
{
$percent_color = null;
$percent_ary = array(
'r' => array(86, 100),
'g' => array(0, 50),
'b' => array(51, 85),
);
foreach ($percent_ary as $key => $value) {
if ($percent <= $value[1]) {
$percent_color = create_color($key, round(200 - ($percent - $value[0]) * (200 / ($value[1] - $value[0]))));
break;
}
}
return $percent_color;
}
// create the hex representation of color
function create_color($mode, $code)
{
return (($mode == 'r') ? 'FF' : sprintf('%02X', $code)) . (($mode == 'g') ? 'FF' : sprintf('%02X', $code)) . (($mode == 'b') ? 'FF' : sprintf('%02X', $code));
}
// create the percent bar & box
function create_percent_box($box, $percent_color, $percent_width)
{
global $template;
if ($box == 'session') {
$template->assign_vars(array(
'SESSION_PERCENT_BOX' => true,
'SESSION_PERCENT_COLOR' => $percent_color,
'SESSION_PERCENT_WIDTH' => round($percent_width),
));
} else {
$template->assign_vars(array(
'TOTAL_PERCENT_BOX' => true,
'TOTAL_PERCENT_COLOR' => $percent_color,
'TOTAL_PERCENT_WIDTH' => round($percent_width),
));
}
}

45
admin/admin_robots.php Normal file
View file

@ -0,0 +1,45 @@
<?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)) {
$module['MODS']['ROBOTS_TXT_EDITOR_TITLE'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$robots_file = BB_ROOT . 'robots.txt';
// Обработка сохранения
if (isset($_POST['save'])) {
$robots_txt = $_POST['robots_txt'] ?? '';
if (!is_writable($robots_file) && is_file($robots_file)) {
bb_die('File robots.txt is not writable #1');
}
$bytes = file_put_contents($robots_file, $robots_txt);
if ($bytes === false) {
bb_die('Could not write robots.txt #2');
}
bb_die($lang['ROBOTS_TXT_UPDATED_SUCCESSFULLY'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_ROBOTS_TXT_CONFIG'], '<a href="admin_robots.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
$current_content = '';
if (is_file($robots_file)) {
$current_content = file_get_contents($robots_file);
}
$template->assign_vars([
'S_ACTION' => 'admin_robots.php',
'ROBOTS_TXT' => htmlCHR($current_content),
]);
print_page('admin_robots.tpl', 'admin');

50
admin/admin_sitemap.php Normal file
View file

@ -0,0 +1,50 @@
<?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)) {
$module['MODS']['SITEMAP'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$sql = "SELECT * FROM " . BB_CONFIG . " WHERE config_name IN('sitemap_time', 'static_sitemap')";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not query config information in admin_sitemap');
} else {
$new_params = [];
while ($row = DB()->sql_fetchrow($result)) {
$config_name = $row['config_name'];
$config_value = $row['config_value'];
$default_config[$config_name] = $config_value;
$new[$config_name] = $_POST[$config_name] ?? $default_config[$config_name];
if (isset($_POST['submit']) && $row['config_value'] != $new[$config_name]) {
$new_params[$config_name] = $new[$config_name];
}
}
if (isset($_POST['submit'])) {
if (!empty($new_params)) {
bb_update_config($new_params);
}
}
}
$s_mess = $lang['SITEMAP_CREATED'] . ': <b>' . bb_date($new['sitemap_time'], config()->get('post_date_format')) . '</b> ' . $lang['SITEMAP_AVAILABLE'] . ': <a href="' . make_url('sitemap/sitemap.xml') . '" target="_blank">' . make_url('sitemap/sitemap.xml') . '</a>';
$message = is_file(SITEMAP_DIR . '/sitemap.xml') ? $s_mess : $lang['SITEMAP_NOT_CREATED'];
$template->assign_vars([
'STATIC_SITEMAP' => $new['static_sitemap'],
'MESSAGE' => $message
]);
print_page('admin_sitemap.tpl', 'admin');

334
admin/admin_smilies.php Normal file
View file

@ -0,0 +1,334 @@
<?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)) {
$module['GENERAL']['SMILIES'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
// Check to see what mode we should operate in
if (isset($_POST['mode']) || isset($_GET['mode'])) {
$mode = $_POST['mode'] ?? $_GET['mode'];
$mode = htmlspecialchars($mode);
} else {
$mode = '';
}
if ($mode == 'delete' && isset($_POST['cancel'])) {
$mode = '';
}
$pathToSmilesDir = BB_ROOT . config()->get('smilies_path');
$delimeter = '=+:';
$s_hidden_fields = '';
$smiley_paks = $smiley_images = [];
// Read a listing of uploaded smiles
$smilesDirectory = new DirectoryIterator($pathToSmilesDir);
foreach ($smilesDirectory as $files) {
if ($files->isFile()) {
$extension = strtolower(pathinfo($files->getFilename(), PATHINFO_EXTENSION));
if (in_array($extension, ['png', 'gif'], true) && getimagesize($pathToSmilesDir . '/' . $files->getFilename())) {
$smiley_images[] = $files->getFilename();
} else if ($extension === 'pak') {
$smiley_paks[] = $files->getFilename();
}
}
}
// Select main mode
if (isset($_GET['import_pack']) || isset($_POST['import_pack'])) {
$smile_pak = (string)request_var('smile_pak', '');
$clear_current = (int)request_var('clear_current', '');
$replace_existing = (int)request_var('replace', '');
if (!empty($smile_pak)) {
// The user has already selected a smile_pak file.. Import it
if (!empty($clear_current)) {
$sql = 'DELETE FROM ' . BB_SMILIES;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not delete current smilies');
}
$datastore->update('smile_replacements');
} else {
$sql = 'SELECT code FROM ' . BB_SMILIES;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not get current smilies');
}
$cur_smilies = DB()->sql_fetchrowset($result);
for ($i = 0, $iMax = count($cur_smilies); $i < $iMax; $i++) {
$k = $cur_smilies[$i]['code'];
$smiles[$k] = 1;
}
}
$fcontents = file($pathToSmilesDir . '/' . $smile_pak);
if (empty($fcontents)) {
bb_die('Could not read smiley pak file');
}
foreach ($fcontents as $i => $iValue) {
$smile_data = explode($delimeter, trim(addslashes($fcontents[$i])));
for ($j = 2, $jMax = count($smile_data); $j < $jMax; $j++) {
// Replace > and < with the proper html_entities for matching
$smile_data[$j] = str_replace('<', '&lt;', $smile_data[$j]);
$smile_data[$j] = str_replace('>', '&gt;', $smile_data[$j]);
$k = $smile_data[$j];
if (isset($smiles[$k])) {
if (!empty($replace_existing)) {
$sql = 'UPDATE ' . BB_SMILIES . "
SET smile_url = '" . DB()->escape($smile_data[0]) . "', emoticon = '" . DB()->escape($smile_data[1]) . "'
WHERE code = '" . DB()->escape($smile_data[$j]) . "'";
} else {
$sql = '';
}
} else {
$sql = 'INSERT INTO ' . BB_SMILIES . " (code, smile_url, emoticon)
VALUES('" . DB()->escape($smile_data[$j]) . "', '" . DB()->escape($smile_data[0]) . "', '" . DB()->escape($smile_data[1]) . "')";
}
if ($sql != '') {
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not update smilies #1');
}
$datastore->update('smile_replacements');
}
}
}
bb_die($lang['SMILEY_IMPORT_SUCCESS'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '<a href="admin_smilies.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} else {
// Display the script to get the smile_pak cfg file
$smile_paks_select = '<select name="smile_pak"><option value="">' . $lang['SELECT_PAK'] . '</option>';
foreach ($smiley_paks as $key => $value) {
if (!empty($value)) {
$smile_paks_select .= '<option>' . $value . '</option>';
}
}
$smile_paks_select .= '</select>';
$hidden_vars = '<input type="hidden" name="mode" value="import">';
$template->assign_vars([
'TPL_SMILE_IMPORT' => true,
'S_SMILEY_ACTION' => 'admin_smilies.php',
'S_SMILE_SELECT' => $smile_paks_select,
'S_HIDDEN_FIELDS' => $hidden_vars
]);
}
} elseif (isset($_POST['export_pack']) || isset($_GET['export_pack'])) {
$export_pack = (string)request_var('export_pack', '');
if ($export_pack == 'send') {
$sql = 'SELECT * FROM ' . BB_SMILIES;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not get smiley list');
}
$resultset = DB()->sql_fetchrowset($result);
$smile_pak = '';
for ($i = 0, $iMax = count($resultset); $i < $iMax; $i++) {
$smile_pak .= $resultset[$i]['smile_url'] . $delimeter;
$smile_pak .= $resultset[$i]['emoticon'] . $delimeter;
$smile_pak .= $resultset[$i]['code'] . "\n";
}
header('Content-Type: text/x-delimtext; name="smiles.pak"');
header('Content-disposition: attachment; filename=smiles.pak');
echo $smile_pak;
exit;
}
bb_die(sprintf($lang['EXPORT_SMILES'], '<a href="admin_smilies.php?export_pack=send">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '<a href="admin_smilies.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} elseif (isset($_POST['add']) || isset($_GET['add'])) {
$filename_list = '';
for ($i = 0, $iMax = count($smiley_images); $i < $iMax; $i++) {
$filename_list .= '<option value="' . $smiley_images[$i] . '">' . $smiley_images[$i] . '</option>';
}
$s_hidden_fields = '<input type="hidden" name="mode" value="savenew" />';
$template->assign_vars([
'TPL_SMILE_EDIT' => true,
'SMILEY_IMG' => $pathToSmilesDir . '/' . $smiley_images[0],
'S_SMILEY_ACTION' => 'admin_smilies.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_FILENAME_OPTIONS' => $filename_list,
'S_SMILEY_BASEDIR' => $pathToSmilesDir
]);
} elseif ($mode != '') {
switch ($mode) {
case 'delete':
$confirmed = isset($_POST['confirm']);
$smiley_id = (!empty($_POST['id'])) ? $_POST['id'] : $_GET['id'];
$smiley_id = (int)$smiley_id;
if ($confirmed) {
$sql = 'DELETE FROM ' . BB_SMILIES . ' WHERE smilies_id = ' . $smiley_id;
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not delete smiley');
}
$datastore->update('smile_replacements');
bb_die($lang['SMILEY_DEL_SUCCESS'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '<a href="admin_smilies.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} else {
$hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
$hidden_fields .= '<input type="hidden" name="id" value="' . $smiley_id . '" />';
print_confirmation([
'FORM_ACTION' => 'admin_smilies.php',
'HIDDEN_FIELDS' => $hidden_fields,
]);
}
break;
case 'edit':
$smiley_id = (!empty($_POST['id'])) ? $_POST['id'] : $_GET['id'];
$smiley_id = (int)$smiley_id;
$sql = 'SELECT * FROM ' . BB_SMILIES . ' WHERE smilies_id = ' . $smiley_id;
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not obtain emoticon information');
}
$smile_data = DB()->sql_fetchrow($result);
$filename_list = $smiley_edit_img = '';
for ($i = 0, $iMax = count($smiley_images); $i < $iMax; $i++) {
if ($smiley_images[$i] == $smile_data['smile_url']) {
$smiley_selected = 'selected';
$smiley_edit_img = $smiley_images[$i];
} else {
$smiley_selected = '';
}
$filename_list .= '<option value="' . $smiley_images[$i] . '"' . $smiley_selected . '>' . $smiley_images[$i] . '</option>';
}
$s_hidden_fields = '<input type="hidden" name="mode" value="save" /><input type="hidden" name="smile_id" value="' . $smile_data['smilies_id'] . '" />';
$template->assign_vars([
'TPL_SMILE_EDIT' => true,
'SMILEY_CODE' => $smile_data['code'],
'SMILEY_EMOTICON' => $smile_data['emoticon'],
'SMILEY_IMG' => $pathToSmilesDir . '/' . $smiley_edit_img,
'S_SMILEY_ACTION' => 'admin_smilies.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_FILENAME_OPTIONS' => $filename_list,
'S_SMILEY_BASEDIR' => $pathToSmilesDir
]);
break;
case 'save':
$smile_code = isset($_POST['smile_code']) ? trim($_POST['smile_code']) : trim($_GET['smile_code']);
$smile_url = isset($_POST['smile_url']) ? trim($_POST['smile_url']) : trim($_GET['smile_url']);
$smile_url = ltrim(basename($smile_url), "'");
$smile_emotion = isset($_POST['smile_emotion']) ? trim($_POST['smile_emotion']) : trim($_GET['smile_emotion']);
$smile_id = isset($_POST['smile_id']) ? (int)$_POST['smile_id'] : (int)$_GET['smile_id'];
// If no code was entered complain
if ($smile_code == '' || $smile_url == '') {
bb_die($lang['FIELDS_EMPTY']);
}
// Convert < and > to proper htmlentities for parsing
$smile_code = str_replace(['<', '>'], ['&lt;', '&gt;'], $smile_code);
// Proceed with updating the smiley table
$sql = 'UPDATE ' . BB_SMILIES . "
SET code = '" . DB()->escape($smile_code) . "', smile_url = '" . DB()->escape($smile_url) . "', emoticon = '" . DB()->escape($smile_emotion) . "'
WHERE smilies_id = $smile_id";
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not update smilies #2');
}
$datastore->update('smile_replacements');
bb_die($lang['SMILEY_EDIT_SUCCESS'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '<a href="admin_smilies.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
break;
case 'savenew':
$smile_code = $_POST['smile_code'] ?? $_GET['smile_code'];
$smile_url = $_POST['smile_url'] ?? $_GET['smile_url'];
$smile_url = ltrim(basename($smile_url), "'");
$smile_emotion = $_POST['smile_emotion'] ?? $_GET['smile_emotion'];
$smile_code = trim($smile_code);
$smile_url = trim($smile_url);
$smile_emotion = trim($smile_emotion);
// If no code was entered complain
if ($smile_code == '' || $smile_url == '') {
bb_die($lang['FIELDS_EMPTY']);
}
// Convert < and > to proper htmlentities for parsing
$smile_code = str_replace(['<', '>'], ['&lt;', '&gt;'], $smile_code);
// Save the data to the smiley table
$sql = 'INSERT INTO ' . BB_SMILIES . " (code, smile_url, emoticon)
VALUES ('" . DB()->escape($smile_code) . "', '" . DB()->escape($smile_url) . "', '" . DB()->escape($smile_emotion) . "')";
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not insert new smiley');
}
$datastore->update('smile_replacements');
bb_die($lang['SMILEY_ADD_SUCCESS'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_SMILEADMIN'], '<a href="admin_smilies.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
break;
}
} else {
$sql = 'SELECT * FROM ' . BB_SMILIES;
$result = DB()->sql_query($sql);
if (!$result) {
bb_die('Could not obtain smileys from database');
}
$smilies = DB()->sql_fetchrowset($result);
$template->assign_vars([
'TPL_SMILE_MAIN' => true,
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_SMILEY_ACTION' => 'admin_smilies.php'
]);
// Loop throuh the rows of smilies setting block vars for the template
for ($i = 0, $iMax = count($smilies); $i < $iMax; $i++) {
// Replace htmlentites for < and > with actual character
$smilies[$i]['code'] = str_replace('&lt;', '<', $smilies[$i]['code']);
$smilies[$i]['code'] = str_replace('&gt;', '>', $smilies[$i]['code']);
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('smiles', [
'ROW_CLASS' => $row_class,
'SMILEY_IMG' => $pathToSmilesDir . '/' . $smilies[$i]['smile_url'],
'CODE' => $smilies[$i]['code'],
'EMOT' => $smilies[$i]['emoticon'],
'U_SMILEY_EDIT' => 'admin_smilies.php?mode=edit&amp;id=' . $smilies[$i]['smilies_id'],
'U_SMILEY_DELETE' => 'admin_smilies.php?mode=delete&amp;id=' . $smilies[$i]['smilies_id'],
]);
}
}
print_page('admin_smilies.tpl', 'admin');

32
admin/admin_terms.php Normal file
View file

@ -0,0 +1,32 @@
<?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)) {
$module['GENERAL']['TERMS'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
require INC_DIR . '/bbcode.php';
$preview = isset($_POST['preview']);
if (isset($_POST['post']) && (config()->get('terms') !== $_POST['message'])) {
bb_update_config(['terms' => $_POST['message']]);
bb_die($lang['TERMS_UPDATED_SUCCESSFULLY'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_TERMS_CONFIG'], '<a href="admin_terms.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
$template->assign_vars([
'S_ACTION' => 'admin_terms.php',
'EXT_LINK_NW' => config()->get('ext_link_new_win'),
'MESSAGE' => $preview ? $_POST['message'] : config()->get('terms'),
'PREVIEW_HTML' => $preview ? bbcode2html($_POST['message']) : '',
]);
print_page('admin_terms.tpl', 'admin');

426
admin/admin_ug_auth.php Normal file
View file

@ -0,0 +1,426 @@
<?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)) {
$module['USERS']['PERMISSIONS'] = basename(__FILE__) . '?mode=user';
$module['GROUPS']['PERMISSIONS'] = basename(__FILE__) . '?mode=group';
return;
}
require __DIR__ . '/pagestart.php';
$max_forum_name_length = 50;
$yes_sign = '&radic;';
$no_sign = 'x';
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? (int)$_REQUEST[POST_GROUPS_URL] : 0;
$user_id = isset($_REQUEST[POST_USERS_URL]) ? (int)$_REQUEST[POST_USERS_URL] : 0;
$cat_id = isset($_REQUEST[POST_CAT_URL]) ? (int)$_REQUEST[POST_CAT_URL] : 0;
$mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : '';
$submit = isset($_REQUEST['submit']);
// Check for demo mode
if (IN_DEMO_MODE && $submit) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
$group_data = [];
$forum_auth_fields = array(
'auth_view',
'auth_read',
'auth_reply',
'auth_edit',
'auth_delete',
'auth_vote',
'auth_pollcreate',
'auth_attachments',
'auth_download',
'auth_post',
'auth_sticky',
'auth_announce',
);
if ($submit && $mode == 'user') {
$this_user_level = null;
// Obtain relevant data for this user
if (!$row = get_userdata($user_id)) {
bb_die($lang['NO_SUCH_USER']);
}
$this_user_level = $row['user_level'];
// Get "single_user" group_id for this user
$sql = 'SELECT g.group_id
FROM ' . BB_USER_GROUP . ' ug, ' . BB_GROUPS . " g
WHERE ug.user_id = $user_id
AND g.group_id = ug.group_id
AND g.group_single_user = 1";
if ($row = DB()->fetch_row($sql)) {
$group_id = $row['group_id'];
} else {
$group_id = \TorrentPier\Legacy\Group::create_user_group($user_id);
}
if (!$group_id || !$user_id || null === $this_user_level) {
trigger_error('data missing', E_USER_ERROR);
}
// Make user an admin (if already user)
if (isset($_POST['userlevel'])) {
if ($_POST['userlevel'] === 'admin') {
if ($userdata['user_id'] == $user_id || $user_id == GUEST_UID || $user_id == BOT_UID) {
bb_die($lang['AUTH_GENERAL_ERROR']);
}
DB()->query('UPDATE ' . BB_USERS . ' SET user_level = ' . ADMIN . " WHERE user_id = $user_id");
// Delete any entries in auth_access, they are not required if user is becoming an admin
\TorrentPier\Legacy\Group::delete_permissions($group_id, $user_id);
$message = $lang['AUTH_UPDATED'] . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_USERAUTH'], '<a href="admin_ug_auth.php?mode=' . $mode . '&' . POST_USERS_URL . '=' . $user_id . '">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} // Make admin a user (if already admin)
elseif ($_POST['userlevel'] === 'user') {
// ignore if you're trying to change yourself from an admin to user!
if ($userdata['user_id'] == $user_id) {
bb_die($lang['AUTH_SELF_ERROR']);
}
// Update users level, reset to USER
DB()->query('UPDATE ' . BB_USERS . ' SET user_level = ' . USER . " WHERE user_id = $user_id");
\TorrentPier\Legacy\Group::delete_permissions($group_id, $user_id);
$message = $lang['AUTH_UPDATED'] . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_USERAUTH'], '<a href="admin_ug_auth.php?mode=' . $mode . '&' . POST_USERS_URL . '=' . $user_id . '">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
}
}
//
// Submit new USER permissions
//
$auth = [];
if (!empty($_POST['auth']) && is_array($_POST['auth'])) {
array_deep($_POST['auth'], 'intval');
foreach ($_POST['auth'] as $f_id => $bf_ary) {
if (array_sum($bf_ary)) {
$auth[$f_id] = bit2dec(array_keys($bf_ary, 1));
}
}
}
\TorrentPier\Legacy\Group::delete_permissions($group_id, null, $cat_id);
\TorrentPier\Legacy\Group::store_permissions($group_id, $auth);
\TorrentPier\Legacy\Group::update_user_level($user_id);
$l_auth_return = ($mode == 'user') ? $lang['CLICK_RETURN_USERAUTH'] : $lang['CLICK_RETURN_GROUPAUTH'];
$message = $lang['AUTH_UPDATED'] . '<br /><br />';
$message .= sprintf($l_auth_return, '<a href="admin_ug_auth.php?mode=' . $mode . '&' . POST_USERS_URL . '=' . $user_id . '">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
}
//
// Submit new GROUP permissions
//
elseif ($submit && $mode == 'group' && (!empty($_POST['auth']) && is_array($_POST['auth']))) {
if (!$group_data = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
$auth = [];
array_deep($_POST['auth'], 'intval');
foreach ($_POST['auth'] as $f_id => $bf_ary) {
if (array_sum($bf_ary)) {
$auth[$f_id] = bit2dec(array_keys($bf_ary, 1));
}
}
\TorrentPier\Legacy\Group::delete_permissions($group_id, null, $cat_id);
\TorrentPier\Legacy\Group::store_permissions($group_id, $auth);
\TorrentPier\Legacy\Group::update_user_level('all');
$l_auth_return = $lang['CLICK_RETURN_GROUPAUTH'];
$message = $lang['AUTH_UPDATED'] . '<br /><br />';
$message .= sprintf($l_auth_return, '<a href="admin_ug_auth.php?mode=' . $mode . '&' . POST_GROUPS_URL . '=' . $group_id . '">', '</a>') . '<br /><br />';
$message .= sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
}
//
// Front end (changing permissions)
//
if ($mode == 'user' && (!empty($_POST['username']) || $user_id)) {
$page_cfg['quirks_mode'] = true;
if (!empty($_POST['username'])) {
$this_userdata = get_userdata($_POST['username'], true);
$user_id = $this_userdata['user_id'];
} else {
$this_userdata = get_userdata($user_id);
}
if (!$this_userdata) {
bb_die($lang['NO_SUCH_USER']);
}
if (!$forums = $datastore->get('cat_forums')) {
$datastore->update('cat_forums');
$forums = $datastore->get('cat_forums');
}
$base_url = basename(__FILE__) . "?mode=user&amp;" . POST_USERS_URL . "=$user_id";
$ug_data = $this_userdata;
$ug_data['session_logged_in'] = 1;
$u_access = auth(AUTH_ALL, AUTH_LIST_ALL, $ug_data, [], UG_PERM_USER_ONLY);
$g_access = auth(AUTH_ALL, AUTH_LIST_ALL, $ug_data, [], UG_PERM_GROUP_ONLY);
foreach ($forums['c'] as $c_id => $c_data) {
$template->assign_block_vars('c', array(
'CAT_ID' => $c_id,
'CAT_TITLE' => $forums['cat_title_html'][$c_id],
'CAT_HREF' => "$base_url&amp;" . POST_CAT_URL . "=$c_id",
));
if (!$c =& $_REQUEST[POST_CAT_URL] or !in_array($c, array('all', $c_id)) or empty($c_data['forums'])) {
continue;
}
foreach ($c_data['forums'] as $f_id) {
$f_data = $forums['f'][$f_id];
$auth_mod = ($u_access[$f_id]['auth_mod'] || $g_access[$f_id]['auth_mod']);
$disabled = $g_access[$f_id]['auth_mod'];
$template->assign_block_vars('c.f', array(
'DISABLED' => $disabled,
'FORUM_ID' => $f_id,
'FORUM_NAME' => str_short($forums['forum_name_html'][$f_id], $max_forum_name_length),
'SF_SPACER' => $f_data['forum_parent'] ? HTML_SF_SPACER : '',
'IS_MODERATOR' => (bool)$auth_mod,
'MOD_STATUS' => $auth_mod ? $lang['MODERATOR'] : $lang['NONE'],
'MOD_CLASS' => $auth_mod ? ($disabled ? 'yesDisabled' : 'yesMOD') : 'noMOD',
'AUTH_MOD_VAL' => $auth_mod ? 1 : 0,
));
foreach ($forum_auth_fields as $auth_type) {
$bf_num = $bf['forum_perm'][$auth_type];
$f_perm = $f_data[$auth_type];
$auth_via_acl = ($u_access[$f_id][$auth_type] || $g_access[$f_id][$auth_type]);
if ($f_perm == AUTH_ACL) {
$disabled = ($auth_mod || $g_access[$f_id][$auth_type]);
$perm_sign = ($auth_via_acl || $auth_mod) ? $yes_sign : $no_sign;
$acl_class = ($auth_via_acl || $auth_mod) ? 'yes' : 'no';
} else {
$disabled = true;
$perm_sign = $auth_via_acl ? $yes_sign : $no_sign;
$acl_class = $auth_via_acl ? 'yes' : 'no';
}
$template->assign_block_vars('c.f.acl', array(
'DISABLED' => $disabled,
'PERM_SIGN' => $perm_sign,
'ACL_CLASS' => $acl_class,
'FORUM_ID' => $f_id,
'ACL_TYPE_BF' => $bf_num,
'ACL_VAL' => $auth_via_acl ? 1 : 0,
));
}
}
}
$template->assign_vars(array(
'AUTH_MOD_BF' => AUTH_MOD,
));
$s_column_span = 2;
foreach ($forum_auth_fields as $auth_type) {
$template->assign_block_vars('acltype', array(
'ACL_TYPE_NAME' => preg_replace('#(.{5})#u', "\\1<br />", $lang[strtoupper($auth_type)]),
'ACL_TYPE_BF' => $bf['forum_perm'][$auth_type],
));
$s_column_span++;
}
unset($forums, $u_access, $g_access);
$datastore->rm('cat_forums');
$s_hidden_fields = '
<input type="hidden" name="mode" value="' . $mode . '" />
<input type="hidden" name="' . POST_USERS_URL . '" value="' . $user_id . '" />
';
$s_user_type = ($this_userdata['user_level'] == ADMIN) ? '
<select name="userlevel">
<option value="admin" selected>' . $lang['AUTH_ADMIN'] . '</option>
<option value="user">' . $lang['AUTH_USER'] . '</option>
</select>
' : '
<select name="userlevel">
<option value="admin">' . $lang['AUTH_ADMIN'] . '</option>
<option value="user" selected>' . $lang['AUTH_USER'] . '</option>
</select>
';
$template->assign_block_vars('switch_user_auth', []);
$template->assign_vars(array(
'TPL_AUTH_UG_MAIN' => true,
'USER_OR_GROUPNAME' => profile_url($this_userdata, true),
'USER_LEVEL' => $lang['USER_LEVEL'] . ' : ' . $s_user_type,
'T_USER_OR_GROUPNAME' => $lang['USERNAME'],
'T_AUTH_TITLE' => $lang['AUTH_CONTROL_USER'],
'T_AUTH_EXPLAIN' => $lang['USER_AUTH_EXPLAIN'],
'S_COLUMN_SPAN' => $s_column_span,
'S_HIDDEN_FIELDS' => $s_hidden_fields,
));
} elseif ($mode == 'group' && $group_id) {
$page_cfg['quirks_mode'] = true;
if (!$group_data = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
if (!$forums = $datastore->get('cat_forums')) {
$datastore->update('cat_forums');
$forums = $datastore->get('cat_forums');
}
$base_url = basename(__FILE__) . "?mode=group&amp;" . POST_GROUPS_URL . "=$group_id";
$ug_data = array('group_id' => $group_id);
$u_access = auth(AUTH_ALL, AUTH_LIST_ALL, $ug_data);
foreach ($forums['c'] as $c_id => $c_data) {
$template->assign_block_vars('c', array(
'CAT_ID' => $c_id,
'CAT_TITLE' => $forums['cat_title_html'][$c_id],
'CAT_HREF' => "$base_url&amp;" . POST_CAT_URL . "=$c_id",
));
if (!($c =& $_REQUEST[POST_CAT_URL]) || !in_array($c, array('all', $c_id)) || empty($c_data['forums'])) {
continue;
}
foreach ($c_data['forums'] as $f_id) {
$f_data = $forums['f'][$f_id];
$auth_mod = $u_access[$f_id]['auth_mod'];
$template->assign_block_vars('c.f', array(
'DISABLED' => false,
'FORUM_ID' => $f_id,
'FORUM_NAME' => str_short($forums['forum_name_html'][$f_id], $max_forum_name_length),
'SF_SPACER' => $f_data['forum_parent'] ? HTML_SF_SPACER : '',
'IS_MODERATOR' => (bool)$auth_mod,
'MOD_STATUS' => $auth_mod ? $lang['MODERATOR'] : $lang['NO'],
'MOD_CLASS' => $auth_mod ? 'yesMOD' : 'noMOD',
'AUTH_MOD_VAL' => $auth_mod ? 1 : 0,
));
foreach ($forum_auth_fields as $auth_type) {
$bf_num = $bf['forum_perm'][$auth_type];
$f_perm = $f_data[$auth_type];
$auth_via_acl = $u_access[$f_id][$auth_type];
if ($f_perm == AUTH_ACL) {
$disabled = $auth_mod;
$perm_sign = ($auth_via_acl || $auth_mod) ? $yes_sign : $no_sign;
$acl_class = ($auth_via_acl || $auth_mod) ? 'yes' : 'no';
} else {
$disabled = true;
$perm_sign = $auth_via_acl ? $yes_sign : $no_sign;
$acl_class = $auth_via_acl ? 'yes' : 'no';
}
$template->assign_block_vars('c.f.acl', array(
'DISABLED' => $disabled,
'PERM_SIGN' => $perm_sign,
'ACL_CLASS' => $acl_class,
'FORUM_ID' => $f_id,
'ACL_TYPE_BF' => $bf_num,
'ACL_VAL' => $auth_via_acl ? 1 : 0,
));
}
}
}
$template->assign_vars(array(
'AUTH_MOD_BF' => AUTH_MOD,
));
$s_column_span = 2;
foreach ($forum_auth_fields as $auth_type) {
$template->assign_block_vars('acltype', array(
'ACL_TYPE_NAME' => preg_replace('#(.{5})#u', "\\1<br />", $lang[strtoupper($auth_type)]),
'ACL_TYPE_BF' => $bf['forum_perm'][$auth_type],
));
$s_column_span++;
}
unset($forums, $ug_data, $u_access);
$datastore->rm('cat_forums');
$s_hidden_fields = '
<input type="hidden" name="mode" value="' . $mode . '" />
<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />
';
$template->assign_vars(array(
'TPL_AUTH_UG_MAIN' => true,
'T_USER_OR_GROUPNAME' => $lang['GROUP_NAME'],
'USER_LEVEL' => false,
'T_AUTH_TITLE' => $lang['AUTH_CONTROL_GROUP'],
'T_AUTH_EXPLAIN' => $lang['GROUP_AUTH_EXPLAIN'],
'USER_OR_GROUPNAME' => ('<span class="gen">' . htmlCHR($group_data['group_name']) . '</span>'),
'S_COLUMN_SPAN' => $s_column_span,
'S_HIDDEN_FIELDS' => $s_hidden_fields,
));
} else {
// Select a user/group
if ($mode == 'user') {
$template->assign_vars(array(
'TPL_SELECT_USER' => true,
'U_SEARCH_USER' => BB_ROOT . 'search.php?mode=searchuser',
));
} else {
$template->assign_vars(array(
'TPL_SELECT_GROUP' => true,
'S_GROUP_SELECT' => get_select('groups'),
));
}
$s_hidden_fields = '<input type="hidden" name="mode" value="' . $mode . '" />';
$template->assign_vars(array(
'S_HIDDEN_FIELDS' => $s_hidden_fields,
));
}
$template->assign_vars(array(
'YES_SIGN' => $yes_sign,
'NO_SIGN' => $no_sign,
'S_AUTH_ACTION' => 'admin_ug_auth.php',
'SELECTED_CAT' => !empty($_REQUEST[POST_CAT_URL]) ? $_REQUEST[POST_CAT_URL] : '',
'U_ALL_FORUMS' => !empty($base_url) ? "$base_url&amp;" . POST_CAT_URL . "=all" : '',
));
print_page('admin_ug_auth.tpl', 'admin');

81
admin/admin_user_ban.php Normal file
View file

@ -0,0 +1,81 @@
<?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)) {
$module['USERS']['BAN_MANAGEMENT'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
$submit = isset($_POST['submit']);
// Check for demo mode
if (IN_DEMO_MODE && $submit) {
bb_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
if ($submit) {
// Ban action
if (!empty($_POST['username'])) {
if (!$this_userdata = get_userdata($_POST['username'], true)) {
bb_die($lang['NO_USER_ID_SPECIFIED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_BANADMIN'], '<a href="admin_user_ban.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
}
if (!getBanInfo((int)$this_userdata['user_id'])) {
$sql = 'INSERT INTO ' . BB_BANLIST . ' (ban_userid) VALUES (' . $this_userdata['user_id'] . ')';
if (!DB()->sql_query($sql)) {
bb_die('Could not insert ban_userid info into database');
}
}
}
// Unban action
$where_sql = '';
if (!empty($_POST['unban_user'])) {
$user_list = $_POST['unban_user'];
for ($i = 0, $iMax = count($user_list); $i < $iMax; $i++) {
if ($user_list[$i] != -1) {
$where_sql .= (($where_sql != '') ? ', ' : '') . (int)$user_list[$i];
}
}
if ($where_sql != '') {
$sql = 'DELETE FROM ' . BB_BANLIST . " WHERE ban_id IN ($where_sql)";
if (!DB()->sql_query($sql)) {
bb_die('Could not delete ban info from database');
}
}
}
$datastore->update('ban_list');
bb_die($lang['BAN_UPDATE_SUCESSFUL'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_BANADMIN'], '<a href="admin_user_ban.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} else {
$template->assign_vars(['S_BANLIST_ACTION' => 'admin_user_ban.php']);
$select_userlist = '';
foreach (getBanInfo() as $ban) {
$select_userlist .= '<option value="' . $ban['ban_id'] . '">' . get_username($ban['ban_userid']) . '</option>';
}
if ($select_userlist == '') {
$select_userlist = '<option value="-1">' . $lang['NO_BANNED_USERS'] . '</option>';
}
$select_userlist = '<select name="unban_user[]" multiple size="5">' . $select_userlist . '</select>';
$template->assign_vars([
'U_SEARCH_USER' => './../search.php?mode=searchuser',
'S_UNBAN_USERLIST_SELECT' => $select_userlist,
'S_BAN_ACTION' => 'admin_user_ban.php'
]);
}
print_page('admin_user_ban.tpl', 'admin');

937
admin/admin_user_search.php Normal file
View file

@ -0,0 +1,937 @@
<?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)) {
$module['USERS']['SEARCH'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
array_deep($_POST, 'trim');
$total_sql = '';
if (!isset($_REQUEST['dosearch'])) {
$sql = 'SELECT group_id, group_name
FROM ' . BB_GROUPS . '
WHERE group_single_user = 0
ORDER BY group_name ASC';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select group data #1');
}
$group_list = '';
if (DB()->num_rows($result) != 0) {
$template->assign_block_vars('groups_exist', []);
while ($row = DB()->sql_fetchrow($result)) {
$group_list .= '<option value="' . $row['group_id'] . '">' . strip_tags(htmlspecialchars($row['group_name'])) . '</option>';
}
}
$sql = 'SELECT * FROM ' . BB_RANKS . ' ORDER BY rank_title';
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not obtain ranks data');
}
$rank_select_box = '';
if (DB()->num_rows($result) != 0) {
$template->assign_block_vars('ranks_exist', []);
while ($row = DB()->sql_fetchrow($result)) {
$rank = $row['rank_title'];
$rank_id = $row['rank_id'];
$rank_select_box .= '<option value="' . $rank_id . '">' . $rank . '</option>';
}
}
$language_list = \TorrentPier\Legacy\Common\Select::language('', 'language_type');
$timezone_list = \TorrentPier\Legacy\Common\Select::timezone('', 'timezone_type');
$sql = 'SELECT f.forum_id, f.forum_name, f.forum_parent, c.cat_id, c.cat_title
FROM ( ' . BB_FORUMS . ' AS f INNER JOIN ' . BB_CATEGORIES . ' AS c ON c.cat_id = f.cat_id )
ORDER BY c.cat_order, f.forum_order ASC';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select forum data');
}
$forums = [];
$last_cat_id = -1;
$forums_list = '';
if (DB()->num_rows($result) != 0) {
$template->assign_block_vars('forums_exist', []);
while ($row = DB()->sql_fetchrow($result)) {
if ($row['cat_id'] != $last_cat_id) {
$forums_list .= '<optgroup label="' . htmlCHR($row['cat_title']) . '">';
$last_cat_id = $row['cat_id'];
}
$forums_list .= '<option value="' . $row['forum_id'] . '">' . ($row['forum_parent'] ? HTML_SF_SPACER : '') . htmlCHR($row['forum_name']) . '</option>';
}
}
$lastvisited = [1, 7, 14, 30, 60, 120, 365, 500, 730, 1000];
$lastvisited_list = '';
foreach ($lastvisited as $days) {
$lastvisited_list .= '<option value="' . $days . '">' . delta_time((TIMENOW - 86400 * $days), TIMENOW, 'days') . '</option>';
}
$template->assign_vars([
'TPL_ADMIN_USER_SEARCH_MAIN' => true,
'YEAR' => date('Y'),
'MONTH' => date('m'),
'DAY' => date('d'),
'GROUP_LIST' => $group_list,
'RANK_SELECT_BOX' => $rank_select_box,
'LANGUAGE_LIST' => $language_list,
'TIMEZONE_LIST' => $timezone_list,
'FORUMS_LIST' => $forums_list,
'LASTVISITED_LIST' => $lastvisited_list,
'U_SEARCH_USER' => BB_ROOT . 'search.php?mode=searchuser',
'S_SEARCH_ACTION' => 'admin_user_search.php'
]);
} else {
$mode = '';
// validate mode
if (isset($_REQUEST['search_username'])) {
$mode = 'search_username';
} elseif (isset($_REQUEST['search_email'])) {
$mode = 'search_email';
} elseif (isset($_REQUEST['search_ip'])) {
$mode = 'search_ip';
} elseif (isset($_REQUEST['search_joindate'])) {
$mode = 'search_joindate';
} elseif (isset($_REQUEST['search_group'])) {
$mode = 'search_group';
} elseif (isset($_REQUEST['search_rank'])) {
$mode = 'search_rank';
} elseif (isset($_REQUEST['search_postcount'])) {
$mode = 'search_postcount';
} elseif (isset($_REQUEST['search_userfield'])) {
$mode = 'search_userfield';
} elseif (isset($_REQUEST['search_lastvisited'])) {
$mode = 'search_lastvisited';
} elseif (isset($_REQUEST['search_language'])) {
$mode = 'search_language';
} elseif (isset($_REQUEST['search_timezone'])) {
$mode = 'search_timezone';
} elseif (isset($_REQUEST['search_moderators'])) {
$mode = 'search_moderators';
} elseif (isset($_REQUEST['search_misc'])) {
$mode = 'search_misc';
}
// validate fields (that they exist)
switch ($mode) {
case 'search_username':
$username = $_REQUEST['username'];
if (!$username) {
bb_die($lang['SEARCH_INVALID_USERNAME']);
}
break;
case 'search_email':
$email = $_REQUEST['email'];
if (!$email) {
bb_die($lang['SEARCH_INVALID_EMAIL']);
}
break;
case 'search_ip':
$ip_address = $_REQUEST['ip_address'];
if (!$ip_address) {
bb_die($lang['SEARCH_INVALID_IP']);
}
break;
case 'search_joindate':
$date_type = $_REQUEST['date_type'];
$date_day = $_REQUEST['date_day'];
$date_month = $_REQUEST['date_month'];
$date_year = $_REQUEST['date_year'];
if (!($date_type || $date_day || $date_month || $date_year)) {
bb_die($lang['SEARCH_INVALID_DATE']);
}
break;
case 'search_group':
$group_id = $_REQUEST['group_id'];
if (!$group_id) {
bb_die($lang['SEARCH_INVALID_GROUP']);
}
break;
case 'search_rank':
$rank_id = $_REQUEST['rank_id'];
if (!$rank_id) {
bb_die($lang['SEARCH_INVALID_RANK']);
}
break;
case 'search_postcount':
$postcount_type = $_REQUEST['postcount_type'];
$postcount_value = $_REQUEST['postcount_value'];
if (!$postcount_type || (!$postcount_value && $postcount_value != 0)) {
bb_die($lang['SEARCH_INVALID_POSTCOUNT']);
}
break;
case 'search_userfield':
$userfield_type = $_REQUEST['userfield_type'];
$userfield_value = $_REQUEST['userfield_value'];
if (!$userfield_type || !$userfield_value) {
bb_die($lang['SEARCH_INVALID_USERFIELD']);
}
break;
case 'search_lastvisited':
$lastvisited_days = $_REQUEST['lastvisited_days'];
$lastvisited_type = $_REQUEST['lastvisited_type'];
if (!$lastvisited_days || !$lastvisited_type) {
bb_die($lang['SEARCH_INVALID_LASTVISITED']);
}
break;
case 'search_language':
$language_type = $_REQUEST['language_type'];
if (!$language_type) {
bb_die($lang['SEARCH_INVALID_LANGUAGE']);
}
break;
case 'search_timezone':
$timezone_type = $_REQUEST['timezone_type'];
if (!$timezone_type && $timezone_type != 0) {
bb_die($lang['SEARCH_INVALID_TIMEZONE']);
}
break;
case 'search_moderators':
$moderators_forum = $_REQUEST['moderators_forum'];
if (!$moderators_forum) {
bb_die($lang['SEARCH_INVALID_MODERATORS']);
}
break;
case 'search_misc':
$misc = $_REQUEST['misc'];
if (!$misc) {
bb_die($lang['SEARCH_INVALID']);
}
break;
default:
bb_die('Invalid mode');
}
$base_url = 'admin_user_search.php?dosearch=true';
$select_sql = 'SELECT u.user_id, u.username, u.user_rank, u.user_email, u.user_posts, u.user_regdate, u.user_level, u.user_active, u.user_lastvisit FROM ' . BB_USERS . ' AS u';
$lower_b = 'LOWER(';
$lower_e = ')';
// validate data & prepare sql
switch ($mode) {
case 'search_username':
$base_url .= '&search_username=true&username=' . rawurlencode(stripslashes($username));
$text = sprintf($lang['SEARCH_FOR_USERNAME'], strip_tags(htmlspecialchars(stripslashes($username))));
$username = str_replace('*', '%', trim(strip_tags(strtolower($username))));
if (str_contains($username, '%')) {
$op = 'LIKE';
} else {
$op = '=';
}
if ($username == '') {
bb_die($lang['SEARCH_INVALID_USERNAME']);
}
$total_sql .= 'SELECT COUNT(user_id) AS total FROM ' . BB_USERS . " WHERE {$lower_b}username{$lower_e} $op '" . DB()->escape($username) . "' AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE {$lower_b}u.username{$lower_e} $op '" . DB()->escape($username) . "' AND u.user_id <> " . GUEST_UID;
break;
case 'search_email':
$base_url .= '&search_email=true&email=' . rawurlencode(stripslashes($email));
$text = sprintf($lang['SEARCH_FOR_EMAIL'], strip_tags(htmlspecialchars(stripslashes($email))));
$email = str_replace('*', '%', trim(strip_tags(strtolower($email))));
if (str_contains($email, '%')) {
$op = 'LIKE';
} else {
$op = '=';
}
if ($email == '') {
bb_die($lang['SEARCH_INVALID_EMAIL']);
}
$total_sql .= 'SELECT COUNT(user_id) AS total FROM ' . BB_USERS . " WHERE {$lower_b}user_email{$lower_e} $op '" . DB()->escape($email) . "' AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE {$lower_b}u.user_email{$lower_e} $op '" . DB()->escape($email) . "' AND u.user_id <> " . GUEST_UID;
break;
case 'search_ip':
$base_url .= '&search_ip=true&ip_address=' . rawurlencode(stripslashes($ip_address));
$ip_address = trim($ip_address);
$text = sprintf($lang['SEARCH_FOR_IP'], strip_tags(htmlspecialchars(stripslashes($ip_address))));
unset($users);
$users = [];
if (\TorrentPier\Helpers\IPHelper::isValid($ip_address)) {
$ip = \TorrentPier\Helpers\IPHelper::ip2long($ip_address);
$users[] = $ip;
} else {
bb_die($lang['SEARCH_INVALID_IP']);
}
$ip_in_sql = $ip_like_sql = $ip_like_sql_flylast = $ip_like_sql_flyreg = '';
foreach ($users as $address) {
$ip_in_sql .= ($ip_in_sql == '') ? "'$address'" : ", '$address'";
}
$where_sql = '';
$where_sql .= ($ip_in_sql != '') ? "poster_ip IN ($ip_in_sql)" : '';
$where_sql .= ($ip_like_sql != '') ? ($where_sql != '') ? " OR $ip_like_sql" : (string)$ip_like_sql : '';
if (!$where_sql) {
bb_die('invalid request');
}
// start search
$no_result_search = false;
$ip_users_sql = '';
$sql = 'SELECT poster_id FROM ' . BB_POSTS . ' WHERE poster_id <> ' . GUEST_UID . " AND ($where_sql) GROUP BY poster_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not count users #1');
}
if (DB()->num_rows($result) == 0) {
$no_result_search = true;
} else {
$total_pages['total'] = DB()->num_rows($result);
$total_sql = null;
$ip_users_sql = '';
while ($row = DB()->sql_fetchrow($result)) {
$ip_users_sql .= ($ip_users_sql == '') ? $row['poster_id'] : ', ' . $row['poster_id'];
}
}
$where_sql = '';
$where_sql .= ($ip_in_sql != '') ? "user_last_ip IN ($ip_in_sql)" : '';
$where_sql .= ($ip_like_sql_flylast != '') ? ($where_sql != '') ? " OR $ip_like_sql_flylast" : (string)$ip_like_sql_flylast : '';
$sql = 'SELECT user_id FROM ' . BB_USERS . ' WHERE user_id <> ' . GUEST_UID . " AND ($where_sql) GROUP BY user_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not count users #2');
}
if (DB()->num_rows($result) != 0) {
if ($no_result_search == true) {
$no_result_search = false;
}
$total_pages['total'] = DB()->num_rows($result);
$total_sql = null;
while ($row = DB()->sql_fetchrow($result)) {
$ip_users_sql .= ($ip_users_sql == '') ? $row['user_id'] : ', ' . $row['user_id'];
}
}
$where_sql = '';
$where_sql .= ($ip_in_sql != '') ? "user_reg_ip IN ($ip_in_sql)" : '';
$where_sql .= ($ip_like_sql_flyreg != '') ? ($where_sql != '') ? " OR $ip_like_sql_flyreg" : (string)$ip_like_sql_flyreg : '';
$sql = 'SELECT user_id FROM ' . BB_USERS . ' WHERE user_id <> ' . GUEST_UID . " AND ($where_sql) GROUP BY user_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not count users #3');
}
if (DB()->num_rows($result) != 0) {
if ($no_result_search == true) {
$no_result_search = false;
}
$total_pages['total'] = DB()->num_rows($result);
$total_sql = null;
while ($row = DB()->sql_fetchrow($result)) {
$ip_users_sql .= ($ip_users_sql == '') ? $row['user_id'] : ', ' . $row['user_id'];
}
}
if ($no_result_search == true) {
bb_die($lang['SEARCH_NO_RESULTS']);
}
$select_sql .= " WHERE u.user_id IN ($ip_users_sql)";
break;
case 'search_joindate':
$base_url .= '&search_joindate=true&date_type=' . rawurlencode($date_type) . '&date_day=' . rawurlencode($date_day) . '&date_month=' . rawurlencode($date_month) . '&date_year=' . rawurlencode(stripslashes($date_year));
$date_type = strtolower(trim($date_type));
if ($date_type != 'before' && $date_type != 'after') {
bb_die($lang['SEARCH_INVALID_DATE']);
}
$date_day = (int)$date_day;
if (!preg_match('/^([1-9]|[0-2][0-9]|3[0-1])$/', $date_day)) {
bb_die($lang['SEARCH_INVALID_DAY']);
}
$date_month = (int)$date_month;
if (!preg_match('/^(0?[1-9]|1[0-2])$/', $date_month)) {
bb_die($lang['SEARCH_INVALID_MONTH']);
}
$date_year = (int)$date_year;
if (!preg_match('/^(20[0-9]{2}|19[0-9]{2})$/', $date_year)) {
bb_die($lang['SEARCH_INVALID_YEAR']);
}
$text = sprintf($lang['SEARCH_FOR_DATE'], strip_tags(htmlspecialchars(stripslashes($date_type))), $date_year, $date_month, $date_day);
$time = mktime(0, 0, 0, $date_month, $date_day, $date_year);
if ($date_type == 'before') {
$arg = '<';
} else {
$arg = '>';
}
$total_sql .= 'SELECT COUNT(user_id) AS total FROM ' . BB_USERS . " WHERE user_regdate $arg $time AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_regdate $arg $time AND u.user_id <> " . GUEST_UID;
break;
case 'search_group':
$group_id = (int)$group_id;
$base_url .= '&search_group=true&group_id=' . rawurlencode($group_id);
if (!$group_id) {
bb_die($lang['SEARCH_INVALID_GROUP']);
}
$sql = 'SELECT group_name FROM ' . BB_GROUPS . " WHERE group_id = $group_id AND group_single_user = 0";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select group data #2');
}
if (DB()->num_rows($result) == 0) {
bb_die($lang['SEARCH_INVALID_GROUP']);
}
$group_name = DB()->sql_fetchrow($result);
$text = sprintf($lang['SEARCH_FOR_GROUP'], strip_tags(htmlspecialchars($group_name['group_name'])));
$total_sql .= 'SELECT COUNT(u.user_id) AS total
FROM ' . BB_USERS . ' AS u, ' . BB_USER_GROUP . " AS ug
WHERE u.user_id = ug.user_id
AND ug.group_id = $group_id
AND u.user_id <> " . GUEST_UID;
$select_sql .= ', ' . BB_USER_GROUP . " AS ug
WHERE u.user_id = ug.user_id
AND ug.group_id = $group_id
AND u.user_id <> " . GUEST_UID;
break;
case 'search_rank':
$rank_id = (int)$rank_id;
$base_url .= '&search_rank=true&rank_id=' . rawurlencode($rank_id);
if (!$rank_id) {
bb_die($lang['SEARCH_INVALID_RANK']);
}
$sql = 'SELECT rank_title FROM ' . BB_RANKS . " WHERE rank_id = $rank_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select rank data');
}
if (DB()->num_rows($result) == 0) {
bb_die($lang['SEARCH_INVALID_RANK']);
}
$rank_title = DB()->sql_fetchrow($result);
$text = sprintf($lang['SEARCH_FOR_RANK'], strip_tags(htmlspecialchars($rank_title['rank_title'])));
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_rank = $rank_id
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_rank = $rank_id
AND u.user_id <> " . GUEST_UID;
break;
case 'search_postcount':
$postcount_type = strtolower(trim($postcount_type));
$postcount_value = strtolower(trim($postcount_value));
$base_url .= '&search_postcount=true&postcount_type=' . rawurlencode($postcount_type) . '&postcount_value=' . rawurlencode(stripslashes($postcount_value));
switch ($postcount_type) {
case 'greater':
$postcount_value = (int)$postcount_value;
$text = sprintf($lang['SEARCH_FOR_POSTCOUNT_GREATER'], $postcount_value);
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_posts > $postcount_value
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_posts > $postcount_value
AND u.user_id <> " . GUEST_UID;
break;
case 'lesser':
$postcount_value = (int)$postcount_value;
$text = sprintf($lang['SEARCH_FOR_POSTCOUNT_LESSER'], $postcount_value);
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_posts < $postcount_value
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_posts < $postcount_value
AND u.user_id <> " . GUEST_UID;
break;
case 'equals':
// looking for a -
if (str_contains($postcount_value, '-')) {
$range = preg_split('/[-\s]+/', $postcount_value);
$range_begin = (int)$range[0];
$range_end = (int)$range[1];
if ($range_begin > $range_end) {
bb_die($lang['SEARCH_INVALID_POSTCOUNT']);
}
$text = sprintf($lang['SEARCH_FOR_POSTCOUNT_RANGE'], $range_begin, $range_end);
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_posts >= $range_begin
AND user_posts <= $range_end
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_posts >= $range_begin
AND u.user_posts <= $range_end
AND u.user_id <> " . GUEST_UID;
} else {
$postcount_value = (int)$postcount_value;
$text = sprintf($lang['SEARCH_FOR_POSTCOUNT_EQUALS'], $postcount_value);
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_posts = $postcount_value
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_posts = $postcount_value
AND u.user_id <> " . GUEST_UID;
}
break;
default:
bb_die($lang['SEARCH_INVALID']);
}
break;
case 'search_userfield':
$base_url .= '&search_userfield=true&userfield_type=' . rawurlencode($userfield_type) . '&userfield_value=' . rawurlencode(stripslashes($userfield_value));
$text = strip_tags(htmlspecialchars(stripslashes($userfield_value)));
$userfield_value = str_replace('*', '%', trim(strip_tags(strtolower($userfield_value))));
if (str_contains($userfield_value, '%')) {
$op = 'LIKE';
} else {
$op = '=';
}
if ($userfield_value == '') {
bb_die($lang['SEARCH_INVALID_USERFIELD']);
}
$userfield_type = strtolower(trim($userfield_type));
switch ($userfield_type) {
case 'icq':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_ICQ'], $text);
$field = 'user_icq';
break;
case 'skype':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_SKYPE'], $text);
$field = 'user_skype';
break;
case 'twitter':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_TWITTER'], $text);
$field = 'user_twitter';
break;
case 'website':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_WEBSITE'], $text);
$field = 'user_website';
break;
case 'location':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_LOCATION'], $text);
$field = 'user_from';
break;
case 'interests':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_INTERESTS'], $text);
$field = 'user_interests';
break;
case 'occupation':
$text = sprintf($lang['SEARCH_FOR_USERFIELD_OCCUPATION'], $text);
$field = 'user_occ';
break;
default:
bb_die($lang['SEARCH_INVALID']);
}
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE {$lower_b}$field{$lower_e} $op '" . DB()->escape($userfield_value) . "'
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE {$lower_b}u.$field{$lower_e} $op '" . DB()->escape($userfield_value) . "'
AND u.user_id <> " . GUEST_UID;
break;
case 'search_lastvisited':
$lastvisited_type = strtolower(trim($lastvisited_type));
$lastvisited_days = (int)$lastvisited_days;
$base_url .= '&search_lastvisited=true&lastvisited_type=' . rawurlencode(stripslashes($lastvisited_type)) . '&lastvisited_days=' . rawurlencode($lastvisited_days);
$lastvisited_seconds = (TIMENOW - ((($lastvisited_days * 24) * 60) * 60));
switch ($lastvisited_type) {
case 'in':
$text = sprintf($lang['SEARCH_FOR_LASTVISITED_INTHELAST'], delta_time((TIMENOW - 86400 * $lastvisited_days), TIMENOW, 'days'));
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_lastvisit >= $lastvisited_seconds
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_lastvisit >= $lastvisited_seconds
AND u.user_id <> " . GUEST_UID;
break;
case 'after':
$text = sprintf($lang['SEARCH_FOR_LASTVISITED_AFTERTHELAST'], delta_time((TIMENOW - 86400 * $lastvisited_days), TIMENOW, 'days'));
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_lastvisit < $lastvisited_seconds
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_lastvisit < $lastvisited_seconds
AND u.user_id <> " . GUEST_UID;
break;
default:
bb_die($lang['SEARCH_INVALID_LASTVISITED']);
}
break;
case 'search_language':
$base_url .= '&search_language=true&language_type=' . rawurlencode(stripslashes($language_type));
$language_type = strtolower(trim(stripslashes($language_type)));
if ($language_type == '') {
bb_die($lang['SEARCH_INVALID_LANGUAGE']);
}
$text = sprintf($lang['SEARCH_FOR_LANGUAGE'], strip_tags(htmlspecialchars($language_type)));
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_lang = '" . DB()->escape($language_type) . "'
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_lang = '" . DB()->escape($language_type) . "'
AND u.user_id <> " . GUEST_UID;
break;
case 'search_timezone':
$base_url .= '&search_timezone=true&timezone_type=' . rawurlencode(stripslashes($timezone_type));
$text = sprintf($lang['SEARCH_FOR_TIMEZONE'], strip_tags(htmlspecialchars(stripslashes($timezone_type))));
$timezone_type = (int)$timezone_type;
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . "
WHERE user_timezone = $timezone_type
AND user_id <> " . GUEST_UID;
$select_sql .= " WHERE u.user_timezone = $timezone_type
AND u.user_id <> " . GUEST_UID;
break;
case 'search_moderators':
$base_url .= '&search_moderators=true&moderators_forum=' . rawurlencode(stripslashes($moderators_forum));
$moderators_forum = (int)$moderators_forum;
$sql = 'SELECT forum_name FROM ' . BB_FORUMS . ' WHERE forum_id = ' . $moderators_forum;
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select forum data');
}
if (DB()->num_rows($result) == 0) {
bb_die($lang['SEARCH_INVALID_MODERATORS']);
}
$forum_name = DB()->sql_fetchrow($result);
$text = sprintf($lang['SEARCH_FOR_MODERATORS'], htmlCHR($forum_name['forum_name']));
$total_sql .= 'SELECT COUNT(DISTINCT u.user_id) AS total
FROM ' . BB_USERS . ' AS u, ' . BB_GROUPS . ' AS g, ' . BB_USER_GROUP . ' AS ug, ' . BB_AUTH_ACCESS . ' AS aa
WHERE u.user_id = ug.user_id
AND ug.group_id = g.group_id
AND g.group_id = aa.group_id
AND aa.forum_id = ' . $moderators_forum . '
AND aa.forum_perm & ' . BF_AUTH_MOD . '
AND u.user_id <> ' . GUEST_UID;
$select_sql .= ', ' . BB_GROUPS . ' AS g, ' . BB_USER_GROUP . ' AS ug, ' . BB_AUTH_ACCESS . ' AS aa
WHERE u.user_id = ug.user_id
AND ug.group_id = g.group_id
AND g.group_id = aa.group_id
AND aa.forum_id = ' . $moderators_forum . '
AND aa.forum_perm & ' . BF_AUTH_MOD . '
AND u.user_id <> ' . GUEST_UID . '
GROUP BY u.user_id, u.username, u.user_email, u.user_posts, u.user_regdate, u.user_level, u.user_active, u.user_lastvisit';
break;
case 'search_misc':
default:
$misc = strtolower(trim($misc));
$base_url .= '&search_misc=true&misc=' . rawurlencode(stripslashes($misc));
switch ($misc) {
case 'admins':
$text = $lang['SEARCH_FOR_ADMINS'];
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . '
WHERE user_level = ' . ADMIN . '
AND user_id <> ' . GUEST_UID;
$select_sql .= ' WHERE u.user_level = ' . ADMIN . '
AND u.user_id <> ' . GUEST_UID;
break;
case 'mods':
$text = $lang['SEARCH_FOR_MODS'];
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . '
WHERE user_level = ' . MOD . '
AND user_id <> ' . GUEST_UID;
$select_sql .= ' WHERE u.user_level = ' . MOD . '
AND u.user_id <> ' . GUEST_UID;
break;
case 'banned':
$text = $lang['SEARCH_FOR_BANNED'];
$total_sql .= 'SELECT COUNT(u.user_id) AS total
FROM ' . BB_USERS . ' AS u, ' . BB_BANLIST . ' AS b
WHERE u.user_id = b.ban_userid
AND u.user_id <> ' . GUEST_UID;
$select_sql .= ', ' . BB_BANLIST . ' AS b
WHERE u.user_id = b.ban_userid
AND u.user_id <> ' . GUEST_UID;
break;
case 'disabled':
$text = $lang['SEARCH_FOR_DISABLED'];
$total_sql .= 'SELECT COUNT(user_id) AS total
FROM ' . BB_USERS . '
WHERE user_active = 0
AND user_id <> ' . GUEST_UID;
$select_sql .= ' WHERE u.user_active = 0
AND u.user_id <> ' . GUEST_UID;
break;
default:
bb_die($lang['SEARCH_INVALID']);
}
}
$select_sql .= ' ORDER BY ';
if (isset($_GET['sort'])) {
switch (strtolower($_GET['sort'])) {
case 'regdate':
$sort = 'regdate';
$select_sql .= 'u.user_regdate';
break;
case 'posts':
$sort = 'posts';
$select_sql .= 'u.user_posts';
break;
case 'user_email':
$sort = 'user_email';
$select_sql .= 'u.user_email';
break;
case 'lastvisit':
$sort = 'lastvisit';
$select_sql .= 'u.user_lastvisit';
break;
case 'username':
$sort = 'username';
$select_sql .= 'u.username';
}
} else {
$sort = 'username';
$select_sql .= 'u.username';
}
if (isset($_GET['order'])) {
$o_order = 'ASC';
$order = 'DESC';
} else {
$o_order = 'DESC';
$order = 'ASC';
}
$select_sql .= " $order";
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
if ($page < 1) {
$page = 1;
}
if ($page == 1) {
$offset = 0;
} else {
$offset = (($page - 1) * config()->get('topics_per_page'));
}
$limit = "LIMIT $offset, " . config()->get('topics_per_page');
$select_sql .= " $limit";
if (null !== $total_sql) {
if (!$result = DB()->sql_query($total_sql)) {
bb_die('Could not count users');
}
$total_pages = DB()->sql_fetchrow($result);
if ($total_pages['total'] == 0) {
bb_die($lang['SEARCH_NO_RESULTS']);
}
}
$num_pages = ceil($total_pages['total'] / config()->get('topics_per_page'));
$pagination = '';
if ($page > 1) {
$pagination .= '<a href="' . $base_url . '&sort=' . $sort . '&order=' . $order . '&page=' . ($page - 1) . '">' . $lang['BACK'] . '</a>';
}
if ($page < $num_pages) {
$pagination .= ($pagination == '') ? '<a href="' . $base_url . '&sort=' . $sort . '&order=' . $order . '&page=' . ($page + 1) . '">' . $lang['NEXT'] . '</a>' : ' | <a href="' . $base_url . '&sort=' . $sort . '&order=' . $order . '&page=' . ($page + 1) . '">' . $lang['NEXT'] . '</a>';
}
if ($num_pages > 2) {
$pagination .= '&nbsp;&nbsp;<input type="text" name="page" maxlength="5" size="2" class="post" />&nbsp;<input type="submit" name="submit" value="' . $lang['GO'] . '" class="post" />';
}
$template->assign_vars([
'TPL_ADMIN_USER_SEARCH_RESULTS' => true,
'PAGE_NUMBER' => sprintf($lang['PAGE_OF'], $page, $num_pages),
'PAGINATION' => $pagination,
'NEW_SEARCH' => sprintf($lang['SEARCH_USERS_NEW'], $text, $total_pages['total'], 'admin_user_search.php'),
'U_USERNAME' => ($sort == 'username') ? "$base_url&sort=$sort&order=$o_order" : "$base_url&sort=username&order=$order",
'U_EMAIL' => ($sort == 'user_email') ? "$base_url&sort=$sort&order=$o_order" : "$base_url&sort=user_email&order=$order",
'U_POSTS' => ($sort == 'posts') ? "$base_url&sort=$sort&order=$o_order" : "$base_url&sort=posts&order=$order",
'U_JOINDATE' => ($sort == 'regdate') ? "$base_url&sort=$sort&order=$o_order" : "$base_url&sort=regdate&order=$order",
'U_LASTVISIT' => ($sort == 'lastvisit') ? "$base_url&sort=$sort&order=$o_order" : "$base_url&sort=lastvisit&order=$order",
'S_POST_ACTION' => "$base_url&sort=$sort&order=$order"
]);
if (!$result = DB()->sql_query($select_sql)) {
bb_die('Could not select user data');
}
$rowset = DB()->sql_fetchrowset($result);
$users_sql = '';
foreach ($rowset as $array) {
$users_sql .= ($users_sql == '') ? $array['user_id'] : ', ' . $array['user_id'];
}
$sql = 'SELECT ban_userid AS user_id FROM ' . BB_BANLIST . " WHERE ban_userid IN ($users_sql)";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not select banned data');
}
unset($banned);
$banned = [];
while ($row = DB()->sql_fetchrow($result)) {
$banned[$row['user_id']] = true;
}
for ($i = 0, $iMax = count($rowset); $i < $iMax; $i++) {
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('userrow', [
'ROW_CLASS' => $row_class,
'USER' => profile_url($rowset[$i], true),
'EMAIL' => $rowset[$i]['user_email'],
'JOINDATE' => bb_date($rowset[$i]['user_regdate']),
'LASTVISIT' => $rowset[$i]['user_lastvisit'] ? bb_date($rowset[$i]['user_lastvisit']) : $lang['NEVER'],
'POSTS' => $rowset[$i]['user_posts'],
'BAN' => (!isset($banned[$rowset[$i]['user_id']])) ? $lang['NOT_BANNED'] : $lang['BANNED'],
'ABLED' => $rowset[$i]['user_active'] ? $lang['ENABLED'] : $lang['DISABLED'],
'U_VIEWPOSTS' => "../search.php?search_author=1&amp;uid={$rowset[$i]['user_id']}",
'U_MANAGE' => '../profile.php?mode=editprofile&' . POST_USERS_URL . '=' . $rowset[$i]['user_id'] . '&admin=1',
'U_PERMISSIONS' => 'admin_ug_auth.php?mode=user&' . POST_USERS_URL . '=' . $rowset[$i]['user_id'],
]);
}
}
print_page('admin_user_search.tpl', 'admin');

138
admin/admin_words.php Normal file
View file

@ -0,0 +1,138 @@
<?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)) {
$module['GENERAL']['WORD_CENSOR'] = basename(__FILE__);
return;
}
require __DIR__ . '/pagestart.php';
if (!config()->get('use_word_censor')) {
bb_die('Word censor disabled <br /><br /> (use_word_censor in config.php)');
}
$mode = request_var('mode', '');
$mode = htmlspecialchars($mode);
if (isset($_POST['add'])) {
$mode = 'add';
} elseif (isset($_POST['save'])) {
$mode = 'save';
}
if ($mode != '') {
if ($mode == 'edit' || $mode == 'add') {
$word_id = (int)request_var('id', 0);
$s_hidden_fields = $word = $replacement = '';
if ($mode == 'edit') {
if ($word_id) {
$sql = 'SELECT * FROM ' . BB_WORDS . " WHERE word_id = $word_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not query words table #1');
}
$word_info = DB()->sql_fetchrow($result);
$s_hidden_fields .= '<input type="hidden" name="id" value="' . $word_id . '" />';
$word = $word_info['word'];
$replacement = $word_info['replacement'];
} else {
bb_die($lang['NO_WORD_SELECTED']);
}
}
$template->assign_vars([
'TPL_ADMIN_WORDS_EDIT' => true,
'WORD' => $word,
'REPLACEMENT' => $replacement,
'S_WORDS_ACTION' => 'admin_words.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
]);
} elseif ($mode == 'save') {
$word_id = (int)request_var('id', 0);
$word = trim(request_var('word', ''));
$replacement = trim(request_var('replacement', ''));
if ($word == '' || $replacement == '') {
bb_die($lang['MUST_ENTER_WORD']);
}
if ($word_id) {
$sql = 'UPDATE ' . BB_WORDS . "
SET word = '" . DB()->escape($word) . "', replacement = '" . DB()->escape($replacement) . "'
WHERE word_id = $word_id";
$message = $lang['WORD_UPDATED'];
} else {
$sql = 'INSERT INTO ' . BB_WORDS . " (word, replacement)
VALUES ('" . DB()->escape($word) . "', '" . DB()->escape($replacement) . "')";
$message = $lang['WORD_ADDED'];
}
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not insert data into words table');
}
$datastore->update('censor');
censor()->reload(); // Reload the singleton instance with updated words
$message .= '<br /><br />' . sprintf($lang['CLICK_RETURN_WORDADMIN'], '<a href="admin_words.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>');
bb_die($message);
} elseif ($mode == 'delete') {
$word_id = (int)request_var('id', 0);
if ($word_id) {
$sql = 'DELETE FROM ' . BB_WORDS . " WHERE word_id = $word_id";
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not remove data from words table');
}
$datastore->update('censor');
censor()->reload(); // Reload the singleton instance with updated words
bb_die($lang['WORD_REMOVED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_WORDADMIN'], '<a href="admin_words.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'));
} else {
bb_die($lang['NO_WORD_SELECTED']);
}
}
} else {
$sql = 'SELECT * FROM ' . BB_WORDS . ' ORDER BY word';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not query words table #2');
}
$word_rows = DB()->sql_fetchrowset($result);
$word_count = count($word_rows);
$template->assign_vars([
'TPL_ADMIN_WORDS_LIST' => true,
'S_WORDS_ACTION' => 'admin_words.php',
'S_HIDDEN_FIELDS' => ''
]);
for ($i = 0; $i < $word_count; $i++) {
$word = $word_rows[$i]['word'];
$replacement = $word_rows[$i]['replacement'];
$word_id = $word_rows[$i]['word_id'];
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('words', [
'ROW_CLASS' => $row_class,
'WORD' => $word,
'REPLACEMENT' => $replacement,
'U_WORD_EDIT' => "admin_words.php?mode=edit&amp;id=$word_id",
'U_WORD_DELETE' => "admin_words.php?mode=delete&amp;id=$word_id"
]);
}
}
print_page('admin_words.tpl', 'admin');

228
admin/index.php Normal file
View file

@ -0,0 +1,228 @@
<?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
*/
require __DIR__ . '/pagestart.php';
// Statistics
if (!$stats = $datastore->get('stats')) {
$datastore->update('stats');
$stats = $datastore->get('stats');
}
// Check for updates
if (!$update_data = $datastore->get('check_updates')) {
$datastore->update('check_updates');
$update_data = $datastore->get('check_updates');
}
// Generate relevant output
if (isset($_GET['pane']) && $_GET['pane'] == 'left') {
$module = [];
// Scan modules
if (!CACHE('bb_cache')->get('admin_module_' . $user->id)) {
$dir = opendir('.');
$setmodules = true;
while ($file = readdir($dir)) {
if (preg_match('/^admin_.*?\.php$/', $file)) {
include './' . $file;
}
}
unset($setmodules);
closedir($dir);
// Set modules into cache
CACHE('bb_cache')->set('admin_module_' . $user->id, $module, 600);
}
// Get modules from cache
$module = CACHE('bb_cache')->get('admin_module_' . $user->id);
$template->assign_vars([
'TPL_ADMIN_NAVIGATE' => true,
'U_FORUM_INDEX' => '../index.php',
'U_ADMIN_INDEX' => 'index.php?pane=right',
]);
ksort($module);
foreach ($module as $cat => $action_array) {
$cat = (!empty($lang[$cat])) ? $lang[$cat] : str_replace("_", ' ', $cat);
$template->assign_block_vars('catrow', [
'ADMIN_CATEGORY' => $cat,
]);
ksort($action_array);
$row_count = 0;
foreach ($action_array as $action => $file) {
$row_class = !($row_count % 2) ? 'row1' : 'row2';
$action = (!empty($lang[$action])) ? $lang[$action] : str_replace("_", ' ', $action);
$template->assign_block_vars('catrow.modulerow', [
'ROW_CLASS' => $row_class,
'ADMIN_MODULE' => $action,
'U_ADMIN_MODULE' => $file,
]);
$row_count++;
}
}
} elseif (isset($_GET['pane']) && $_GET['pane'] == 'right') {
$template->assign_vars([
'TPL_ADMIN_MAIN' => true,
'ADMIN_LOCK' => (bool)config()->get('board_disable'),
'ADMIN_LOCK_CRON' => is_file(BB_DISABLED),
]);
// Check for updates
if (isset($update_data['available_update'])) {
$template->assign_block_vars('updater', [
'UPDATE_AVAILABLE' => $update_data['available_update'],
'NEW_VERSION_NUMBER' => $update_data['latest_version'],
'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_HASH' => $update_data['latest_version_checksum']
]);
}
// Get forum statistics
$total_posts = $stats['postcount'];
$total_topics = $stats['topiccount'];
$total_users = $stats['usercount'];
$start_date = bb_date(config()->get('board_startdate'));
$boarddays = (TIMENOW - config()->get('board_startdate')) / 86400;
$posts_per_day = sprintf('%.2f', $total_posts / $boarddays);
$topics_per_day = sprintf('%.2f', $total_topics / $boarddays);
$users_per_day = sprintf('%.2f', $total_users / $boarddays);
$avatar_dir_size = 0;
if ($avatar_dir = opendir(config()->get('avatars.upload_path'))) {
while ($file = readdir($avatar_dir)) {
if ($file != '.' && $file != '..') {
$avatar_dir_size += @filesize(config()->get('avatars.upload_path') . $file);
}
}
closedir($avatar_dir);
$avatar_dir_size = humn_size($avatar_dir_size);
} else {
$avatar_dir_size = $lang['NOT_AVAILABLE'];
}
if ((int)$posts_per_day > $total_posts) {
$posts_per_day = $total_posts;
}
if ((int)$topics_per_day > $total_topics) {
$topics_per_day = $total_topics;
}
if ($users_per_day > $total_users) {
$users_per_day = $total_users;
}
$template->assign_vars([
'NUMBER_OF_POSTS' => $total_posts,
'NUMBER_OF_TOPICS' => $total_topics,
'NUMBER_OF_USERS' => $total_users,
'START_DATE' => $start_date,
'POSTS_PER_DAY' => $posts_per_day,
'TOPICS_PER_DAY' => $topics_per_day,
'USERS_PER_DAY' => $users_per_day,
'AVATAR_DIR_SIZE' => $avatar_dir_size,
]);
if (isset($_GET['users_online'])) {
$template->assign_vars([
'SHOW_USERS_ONLINE' => true,
]);
// Get users online information.
$sql = 'SELECT u.user_id, u.username, u.user_rank, s.session_time AS user_session_time, u.user_opt, s.session_logged_in, s.session_ip, s.session_start
FROM ' . BB_USERS . ' u, ' . BB_SESSIONS . ' s
WHERE s.session_logged_in = 1
AND u.user_id = s.session_user_id
AND u.user_id <> ' . GUEST_UID . '
AND s.session_time >= ' . (TIMENOW - 300) . '
ORDER BY s.session_ip ASC, s.session_time DESC';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not obtain reged user / online information');
}
$onlinerow_reg = DB()->sql_fetchrowset($result);
// Get guests online information.
$sql = 'SELECT session_logged_in, session_time, session_ip, session_start
FROM ' . BB_SESSIONS . '
WHERE session_logged_in = 0
AND session_time >= ' . (TIMENOW - 300) . '
ORDER BY session_ip ASC, session_time DESC';
if (!$result = DB()->sql_query($sql)) {
bb_die('Could not obtain guest user / online information');
}
$onlinerow_guest = DB()->sql_fetchrowset($result);
// Reg users
if (count($onlinerow_reg)) {
$users_count = 0;
for ($i = 0, $iMax = count($onlinerow_reg); $i < $iMax; $i++) {
$users_count++;
$row_class = 'row1';
$reg_ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($onlinerow_reg[$i]['session_ip']);
$template->assign_block_vars('reg_user_row', [
'ROW_CLASS' => $row_class,
'USER' => profile_url($onlinerow_reg[$i], true),
'STARTED' => bb_date($onlinerow_reg[$i]['session_start'], 'd-M-Y H:i', false),
'LASTUPDATE' => bb_date($onlinerow_reg[$i]['user_session_time'], 'd-M-Y H:i', false),
'IP_ADDRESS' => $reg_ip,
'U_WHOIS_IP' => config()->get('whois_info') . $reg_ip,
]);
}
}
// Guest users
if (count($onlinerow_guest)) {
$guest_users = 0;
for ($i = 0, $iMax = count($onlinerow_guest); $i < $iMax; $i++) {
$guest_users++;
$row_class = 'row2';
$guest_ip = \TorrentPier\Helpers\IPHelper::long2ip_extended($onlinerow_guest[$i]['session_ip']);
$template->assign_block_vars('guest_user_row', [
'ROW_CLASS' => $row_class,
'STARTED' => bb_date($onlinerow_guest[$i]['session_start'], 'd-M-Y H:i', false),
'LASTUPDATE' => bb_date($onlinerow_guest[$i]['session_time'], 'd-M-Y H:i', false),
'IP_ADDRESS' => $guest_ip,
'U_WHOIS_IP' => config()->get('whois_info') . $guest_ip,
]);
}
}
} else {
$template->assign_vars([
'USERS_ONLINE_HREF' => 'index.php?pane=right&users_online=1',
]);
}
} else {
// Generate frameset
$template->assign_vars([
'CONTENT_ENCODING' => DEFAULT_CHARSET,
'TPL_ADMIN_FRAMESET' => true,
]);
send_no_cache_headers();
print_page('index.tpl', 'admin', 'no_header');
}
print_page('index.tpl', 'admin');

30
admin/pagestart.php Normal file
View file

@ -0,0 +1,30 @@
<?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
*/
define('BB_ROOT', './../');
define('IN_ADMIN', true);
require dirname(__DIR__) . '/common.php';
require ATTACH_DIR . '/attachment_mod.php';
require ATTACH_DIR . '/includes/functions_admin.php';
$user->session_start();
if (IS_GUEST) {
redirect(LOGIN_URL . '?redirect=admin/index.php');
}
if (!IS_ADMIN) {
bb_die($lang['NOT_ADMIN']);
}
if (!$userdata['session_admin']) {
$redirect = url_arg($_SERVER['REQUEST_URI'], 'admin', 1);
redirect(LOGIN_URL . "?redirect=$redirect");
}

46
admin/stats/tr_stats.php Normal file
View file

@ -0,0 +1,46 @@
<?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
*/
define('BB_ROOT', './../../');
define('IN_ADMIN', true);
require BB_ROOT . 'common.php';
$user->session_start();
if (!IS_ADMIN) {
bb_die($lang['NOT_AUTHORISED']);
}
$sql[] = 'SELECT count(*) FROM `' . BB_USERS . '` WHERE `user_lastvisit` < UNIX_TIMESTAMP()-2592000 AND user_id NOT IN (' . EXCLUDED_USERS . ')';
$sql[] = 'SELECT count(*) FROM `' . BB_USERS . '` WHERE `user_lastvisit` < UNIX_TIMESTAMP()-7776000 AND user_id NOT IN (' . EXCLUDED_USERS . ')';
$sql[] = 'SELECT round(avg(size)) FROM `' . BB_BT_TORRENTS . '`';
$sql[] = 'SELECT count(*) FROM `' . BB_BT_TORRENTS . '`';
$sql[] = 'SELECT count(distinct(topic_id)) FROM `' . BB_BT_TRACKER_SNAP . '` WHERE seeders > 0';
$sql[] = 'SELECT count(distinct(topic_id)) FROM `' . BB_BT_TRACKER_SNAP . '` WHERE seeders > 5';
$sql[] = 'SELECT count(distinct(poster_id)) FROM `' . BB_BT_TORRENTS . '`';
$sql[] = 'SELECT count(distinct(poster_id)) FROM `' . BB_BT_TORRENTS . '` WHERE reg_time >= UNIX_TIMESTAMP()-2592000';
echo '<html><body><head></head>';
echo '<br /><br /><table border="1" cellspacing="0" cellpadding="6" align="center">';
foreach ($sql as $i => $query) {
$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>";
}
echo '</table>';
echo '<div align="center"><pre>';
echo 'gen time: <b>' . sprintf('%.3f', array_sum(explode(' ', microtime())) - TIMESTART) . "</b> sec\n";
echo '</pre></div>';
echo '</body></html>';

182
admin/stats/tracker.php Normal file
View file

@ -0,0 +1,182 @@
<?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
*/
define('BB_ROOT', './../../');
define('IN_ADMIN', true);
require BB_ROOT . 'common.php';
$user->session_start();
if (!IS_ADMIN) {
bb_die($lang['NOT_AUTHORISED']);
}
$peers_in_last_minutes = [30, 15, 5, 1];
$peers_in_last_sec_limit = 300;
$announce_interval = (int)config()->get('announce_interval');
$stat = [];
define('TMP_TRACKER_TABLE', 'tmp_tracker');
DB()->query('
CREATE TEMPORARY TABLE ' . TMP_TRACKER_TABLE . " (
`topic_id` mediumint(8) unsigned NOT NULL default '0',
`user_id` mediumint(9) NOT NULL default '0',
`ip` char(42) binary default '0',
`ipv6` char(42) binary default '0',
`peer_id` char(20) binary default '0',
`seeder` tinyint(1) NOT NULL default '0',
`speed_up` mediumint(8) unsigned NOT NULL default '0',
`speed_down` mediumint(8) unsigned NOT NULL default '0',
`update_time` int(11) NOT NULL default '0'
)
SELECT
topic_id, user_id, ip, ipv6, peer_id, seeder, speed_up, speed_down, update_time
FROM " . BB_BT_TRACKER . '
');
// Peers within announce interval
$stat += DB()->fetch_row('SELECT COUNT(*) AS p_within_ann FROM ' . TMP_TRACKER_TABLE . ' WHERE update_time >= ' . (TIMENOW - $announce_interval));
// All peers, "max_peer_time"
$stat += DB()->fetch_row('SELECT COUNT(*) AS p_all, SUM(speed_up) as speed_up, SUM(speed_down) as speed_down, UNIX_TIMESTAMP() - MIN(update_time) AS max_peer_time, UNIX_TIMESTAMP() - MAX(update_time) AS last_peer_time FROM ' . TMP_TRACKER_TABLE);
// Active users
$stat += DB()->fetch_row('SELECT COUNT(DISTINCT user_id) AS u_bt_active FROM ' . TMP_TRACKER_TABLE);
// All bt-users
$stat += DB()->fetch_row('SELECT COUNT(*) AS u_bt_all FROM ' . BB_BT_USERS);
// All bb-users
$stat += DB()->fetch_row('SELECT COUNT(*) AS u_bb_all FROM ' . BB_USERS . ' WHERE user_id != ' . BOT_UID);
// Active torrents
$stat += DB()->fetch_row('SELECT COUNT(DISTINCT topic_id) AS tor_active FROM ' . TMP_TRACKER_TABLE);
// With seeder
$stat += DB()->fetch_row('SELECT COUNT(DISTINCT topic_id) AS tor_with_seeder FROM ' . TMP_TRACKER_TABLE . ' WHERE seeder = 1');
// All torrents
$stat += DB()->fetch_row('SELECT COUNT(*) AS tor_all, SUM(size) AS torrents_size FROM ' . BB_BT_TORRENTS);
// Last xx minutes
$peers_in_last_min = [];
foreach ($peers_in_last_minutes as $t) {
$row = DB()->fetch_row('
SELECT COUNT(*) AS peers FROM ' . TMP_TRACKER_TABLE . ' WHERE update_time >= ' . (TIMENOW - 60 * $t) . '
');
$peers_in_last_min[$t] = (int)$row['peers'];
}
// Last xx seconds
$peers_in_last_sec = [];
$rowset = DB()->fetch_rowset('SELECT COUNT(*) AS peers FROM ' . TMP_TRACKER_TABLE . ' ORDER BY update_time DESC LIMIT ' . $peers_in_last_sec_limit);
foreach ($rowset as $cnt => $row) {
$peers_in_last_sec[] = sprintf('%3s', $row['peers']) . (($cnt && !(++$cnt % 15)) ? " \n" : '');
}
// Detailed statistics for peer clients
$client_list = '';
$clients_percentage = [];
$numwant = !empty($_GET['client_numwant']) ? (int)$_GET['client_numwant'] : 100;
$client_full = !empty($_GET['client_length']) ? (int)$_GET['client_length'] : false;
if ($client_full || !$stats_cache = CACHE('tr_cache')->get('tracker_clients_stats')) {
$rowset = DB()->fetch_rowset('SELECT peer_id AS client FROM ' . TMP_TRACKER_TABLE);
if (!empty($rowset)) {
$client_count = 0;
foreach ($rowset as $cnt => $row) {
$clientString = $client_full ? substr($row['client'], 0, $client_full) : substr($row['client'], 0, 3);
if (!isset($clients[$clientString])) {
$clients[$clientString] = 1;
} else {
$clients[$clientString]++;
}
$client_count++;
}
arsort($clients, SORT_NUMERIC);
foreach ($clients as $client => $count) {
$percentage = number_format(($count / $client_count) * 100, 2);
$clients_percentage[$client] = "[$count] => $percentage%";
}
if (!$client_full) {
CACHE('tr_cache')->set('tracker_clients_stats', $clients_percentage, 3600);
}
}
} else {
$clients_percentage = $stats_cache;
}
$n = 1;
foreach (array_slice($clients_percentage, 0, $numwant) as $client => $value) {
$client_list .= ($client_full) ? ("$client => $value<br/>") : "$n. " . get_user_torrent_client($client) . " $value<br/>";
$n++;
}
function commify_callback($matches)
{
return commify($matches[0]);
}
function commify_ob($contents)
{
return preg_replace_callback("#\b\d+\b#", 'commify_callback', $contents);
}
ob_start('commify_ob');
echo '<html><body><head></head>';
echo '<br /><br /><table border="1" cellspacing="0" cellpadding="6" align="center"><col width="40%"><col width="60%">';
echo "\n<tr><td align=center> users: bb-all / bt-all / bt-active </td><td align=center> $stat[u_bb_all] / $stat[u_bt_all] / <b>$stat[u_bt_active]</b> </td></tr>\n";
echo "\n
<tr><td align=center> torrents: all / active / with seeder </td>
<td align=center>
$stat[tor_all] / <b>$stat[tor_active]</b> / $stat[tor_with_seeder]
&nbsp;
[ " . humn_size($stat['torrents_size']) . " ]
</td></tr>
\n";
echo "\n
<tr><td align=center> peers: all ($stat[max_peer_time] s) / in ann interval ($announce_interval s) </td>
<td align=center>
$stat[p_all] / <b>$stat[p_within_ann]</b>
&nbsp;
[ up: " . humn_size($stat['speed_up']) . '/s,
down: ' . humn_size($stat['speed_down']) . "/s ]
</td></tr>
\n";
echo "\n<tr><td align=center> peers: in last " . implode(' / ', $peers_in_last_minutes) . " min</td>\n";
echo "\n<td align=center>" . implode(' / ', $peers_in_last_min) . "</td></tr>\n";
echo "\n<tr><td align=center> peers in last $peers_in_last_sec_limit sec <br /> [ per second, DESC order --> ] <br /> last peer: $stat[last_peer_time] seconds ago <br /> " . date('j M H:i:s [T O]') . " </td>\n";
echo '<td align=center style="font-size: 13px; font-family: \'Courier New\',Courier,monospace;"><pre> ' . implode(' ', $peers_in_last_sec) . "</pre></td></tr>\n";
echo "\n
<tr><td align=center> clients: </td>
<td align=center>
$client_list
<br/>
\n";
echo (count($clients_percentage) > $numwant) ? ('<a href="' . 'tracker.php?client_numwant=' . ($numwant + 100) . '">' . 'Show more' . '</a><br/>') : '';
echo $client_full ? '<br/><b>Get more length and numbers via modifying the parameters in the url<b>' : (!empty($client_list) ? '<a href="tracker.php?client_length=6&client_numwant=10">Peer_ids with more length (version debugging)</a>' : '');
echo '</td></tr>';
echo '</table>';
echo !$client_full ? '<p style = "text-align:right;">Simple stats for clients are being cached for one hour.</p>' : '';
echo '<div align="center"><pre>';
echo 'gen time: <b>' . sprintf('%.3f', array_sum(explode(' ', microtime())) - TIMESTART) . "</b> sec\n";
echo '</pre></div>';
echo '</body></html>';
DB()->query('DROP TEMPORARY TABLE ' . TMP_TRACKER_TABLE);
exit();

45
ajax.php Normal file
View file

@ -0,0 +1,45 @@
<?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
*/
define('BB_SCRIPT', 'ajax');
define('IN_AJAX', true);
require __DIR__ . '/common.php';
// Init Ajax class
$ajax = new TorrentPier\Ajax();
$ajax->init();
// Init userdata
$user->session_start();
// Load actions required modules
switch ($ajax->action) {
case 'view_post':
case 'posts':
case 'post_mod_comment':
require INC_DIR . '/bbcode.php';
break;
case 'view_torrent':
case 'mod_action':
case 'change_tor_status':
case 'change_torrent':
case 'passkey':
require ATTACH_DIR . '/attachment_mod.php';
break;
}
$ajax->exec();
/**
* @deprecated ajax_common
* Dirty class removed from here since 2.2.0
* To add new actions see at src/Ajax.php
*/

549
bt/announce.php Normal file
View file

@ -0,0 +1,549 @@
<?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
*/
define('IN_TRACKER', true);
define('BB_ROOT', './../');
require dirname(__DIR__) . '/common.php';
// Check User-Agent for existence
$userAgent = (string)$_SERVER['HTTP_USER_AGENT'];
if (empty($userAgent)) {
header('Location: http://127.0.0.1', true, 301);
die;
}
$announce_interval = config()->get('announce_interval');
$passkey_key = config()->get('passkey_key');
// Recover info_hash
if (isset($_GET['?info_hash']) && !isset($_GET['info_hash'])) {
$_GET['info_hash'] = $_GET['?info_hash'];
}
// Initial request verification
if (str_contains($_SERVER['REQUEST_URI'], 'scrape')) {
msg_die('Please disable SCRAPE!');
}
if (!isset($_GET[$passkey_key]) || !is_string($_GET[$passkey_key])) {
msg_die('Please LOG IN and RE-DOWNLOAD this torrent (passkey not found)');
}
// Input var names
// String
$input_vars_str = ['info_hash', 'peer_id', 'event', $passkey_key];
// Numeric
$input_vars_num = ['port', 'uploaded', 'downloaded', 'left', 'numwant', 'compact'];
// Init received data
// String
foreach ($input_vars_str as $var_name) {
$$var_name = isset($_GET[$var_name]) ? (string)$_GET[$var_name] : null;
}
// Numeric
foreach ($input_vars_num as $var_name) {
$$var_name = isset($_GET[$var_name]) ? (float)$_GET[$var_name] : null;
}
// Passkey
$passkey = $$passkey_key ?? null;
// Verify request
// Required params (info_hash, peer_id, port, uploaded, downloaded, left, passkey)
if (!isset($peer_id)) {
msg_die('peer_id was not provided');
}
if (strlen($peer_id) !== 20) {
msg_die('Invalid peer_id: ' . $peer_id);
}
// Check for client ban
if (config()->get('client_ban.enabled')) {
$targetClient = [];
foreach (config()->get('client_ban.clients') as $clientId => $banReason) {
if (str_starts_with($peer_id, $clientId)) {
$targetClient = [
'peer_id' => $clientId,
'ban_reason' => $banReason
];
break;
}
}
if (config()->get('client_ban.only_allow_mode')) {
if (empty($targetClient['peer_id'])) {
msg_die('Your BitTorrent client has been banned!');
}
} else {
if (!empty($targetClient['peer_id'])) {
msg_die(empty($targetClient['ban_reason']) ? 'Your BitTorrent client has been banned!' : $targetClient['ban_reason']);
}
}
}
// Verify info_hash
if (!isset($info_hash)) {
msg_die('info_hash was not provided');
}
/**
* Verify event
*
* @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L275
*/
$event = strtolower((string)$event);
if (!in_array($event, ['started', 'completed', 'stopped', 'paused', ''])) {
msg_die('Invalid event: ' . $event);
}
// Store info hash in hex format
$info_hash_hex = bin2hex($info_hash);
// Store peer id
$peer_id_sql = preg_replace('/[^a-zA-Z0-9\-\_]/', '', $peer_id);
// Stopped event
$stopped = ($event === 'stopped');
// Check info_hash length
if (strlen($info_hash) !== 20) {
msg_die('Invalid info_hash: ' . (mb_check_encoding($info_hash, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
}
/**
* Block system-reserved ports since 99.9% of the time they're fake and thus not connectable
* Some clients will send port of 0 on 'stopped' events. Let them through as they won't receive peers anyway.
*
* @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L284
*/
if (
!isset($port)
|| !is_numeric($port)
|| ($port < 1024 && !$stopped)
|| $port > 0xFFFF
|| (!empty(config()->get('disallowed_ports')) && in_array($port, config()->get('disallowed_ports')))
) {
msg_die('Invalid port: ' . $port);
}
if (!isset($uploaded) || !is_numeric($uploaded) || $uploaded < 0) {
msg_die('Invalid uploaded value: ' . $uploaded);
}
if (!isset($downloaded) || !is_numeric($downloaded) || $downloaded < 0) {
msg_die('Invalid downloaded value: ' . $downloaded);
}
if (!isset($left) || !is_numeric($left) || $left < 0) {
msg_die('Invalid left value: ' . $left);
}
/**
* Check User-Agent length
*
* @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L177
*/
if (strlen($userAgent) > 64) {
msg_die('User-Agent must be less than 64 characters long');
}
/**
* Block Browser by checking the User-Agent
*
* @see https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/c64275f0b5dcb3c4c845d5204871adfe24f359d6/app/Http/Controllers/AnnounceController.php#L182
*/
if (preg_match('/(Mozilla|Browser|Chrome|Safari|AppleWebKit|Opera|Links|Lynx|Bot|Unknown)/i', $userAgent)) {
msg_die('Browser disallowed');
}
// IP
$ip = $_SERVER['REMOTE_ADDR'];
// 'ip' query handling
if (!config()->get('ignore_reported_ip') && isset($_GET['ip']) && $ip !== $_GET['ip']) {
if (!config()->get('verify_reported_ip') && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$x_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
if ($x_ip === $_GET['ip']) {
$filteredIp = filter_var($x_ip, FILTER_VALIDATE_IP);
if ($filteredIp !== false && (config()->get('allow_internal_ip') || !filter_var($filteredIp, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))) {
$ip = $filteredIp;
}
}
}
}
// Check that IP format is valid
if (!\TorrentPier\Helpers\IPHelper::isValid($ip)) {
msg_die("Invalid IP: $ip");
}
// Convert IP to long format
$ip_sql = \TorrentPier\Helpers\IPHelper::ip2long($ip);
// Detect IP version
$ipv4 = $ipv6 = null;
$ip_version = \TorrentPier\Helpers\IPHelper::isValidv6($ip) ? 'ipv6' : 'ip';
if ($ip_version === 'ipv6') {
$ipv6 = $ip_sql;
} else {
$ipv4 = $ip_sql;
}
// Peer unique id
$peer_hash = hash('xxh128', $passkey . $info_hash_hex . $port);
// Set seeder & complete
$complete = $seeder = ($left == 0) ? 1 : 0;
// Get cached peer info from previous announce (last peer info)
$lp_info = CACHE('tr_cache')->get(PEER_HASH_PREFIX . $peer_hash);
// Stopped event, slice peer's cache life to 30 seconds
if ($stopped && $lp_info) {
CACHE('tr_cache')->set(PEER_HASH_PREFIX . $peer_hash, $lp_info, 30);
}
// Drop fast announce
if ($lp_info && (!isset($event) || !$stopped)) {
if ($lp_info['ip_ver4'] === $ipv4 || $lp_info['ip_ver6'] === $ipv6 || isset($lp_info['ip_ver4'], $lp_info['ip_ver6'])) {
if ($lp_cached_peers = CACHE('tr_cache')->get(PEERS_LIST_PREFIX . $lp_info['topic_id'])) {
drop_fast_announce($lp_info, $lp_cached_peers); // Use cache but with new calculated interval and seed, peer count set
}
}
}
// Get last peer info from DB
if (!CACHE('tr_cache')->used && !$lp_info) {
$lp_info = DB()->fetch_row("
SELECT * FROM " . BB_BT_TRACKER . " WHERE peer_hash = '$peer_hash' LIMIT 1
");
}
if ($lp_info) {
$user_id = $lp_info['user_id'];
$topic_id = $lp_info['topic_id'];
$releaser = $lp_info['releaser'];
$tor_type = $lp_info['tor_type'];
$hybrid_unrecord = $lp_info['hybrid_unrecord'] ?? false;
} else {
$info_hash_sql = rtrim(DB()->escape($info_hash), ' ');
/**
* Currently torrent clients send truncated v2 hashes (the design raises questions).
* @see https://github.com/bittorrent/bittorrent.org/issues/145#issuecomment-1720040343
*/
$info_hash_where = "WHERE tor.info_hash = '$info_hash_sql' OR SUBSTRING(tor.info_hash_v2, 1, 20) = '$info_hash_sql'";
$passkey_sql = DB()->escape($passkey);
$sql = "
SELECT tor.topic_id, tor.poster_id, tor.tor_type, tor.tor_status, tor.info_hash, tor.info_hash_v2, bt.*, u.user_level
FROM " . BB_BT_TORRENTS . " tor
LEFT JOIN " . BB_BT_USERS . " bt ON bt.auth_key = '$passkey_sql'
LEFT JOIN " . BB_USERS . " u ON u.user_id = bt.user_id
$info_hash_where
LIMIT 1
";
$row = DB()->fetch_row($sql);
// 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, 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)');
}
// Assign variables
$user_id = $row['user_id'];
define('IS_GUEST', (int)$user_id === GUEST_UID);
define('IS_ADMIN', !IS_GUEST && (int)$row['user_level'] === ADMIN);
define('IS_MOD', !IS_GUEST && (int)$row['user_level'] === MOD);
define('IS_GROUP_MEMBER', !IS_GUEST && (int)$row['user_level'] === GROUP_MEMBER);
define('IS_USER', !IS_GUEST && (int)$row['user_level'] === USER);
define('IS_SUPER_ADMIN', IS_ADMIN && isset(config()->get('super_admins')[$user_id]));
define('IS_AM', IS_ADMIN || IS_MOD);
$topic_id = $row['topic_id'];
$releaser = (int)($user_id == $row['poster_id']);
$tor_type = $row['tor_type'];
$tor_status = $row['tor_status'];
// Check tor status
if (!IS_AM && isset(config()->get('tor_frozen')[$tor_status]) && !(isset(config()->get('tor_frozen_author_download')[$tor_status]) && $releaser)) {
msg_die('Torrent frozen and cannot be downloaded');
}
// Check hybrid status
if (!empty($row['info_hash']) && !empty($row['info_hash_v2'])) {
$stat_protocol = match ((int)config()->get('tracker.hybrid_stat_protocol')) {
2 => substr($row['info_hash_v2'], 0, 20),
default => $row['info_hash'] // 1
};
if ($info_hash !== $stat_protocol) {
$hybrid_unrecord = true; // This allows us to announce only for one info-hash
}
}
// Ratio limits
if ((RATIO_ENABLED || config()->get('tracker.limit_concurrent_ips')) && !$stopped) {
$user_ratio = get_bt_ratio($row);
if ($user_ratio === null) {
$user_ratio = 1;
}
$rating_msg = '';
if (!$seeder) {
foreach (config()->get('rating') as $ratio => $limit) {
if ($user_ratio < $ratio) {
config()->set('tracker.limit_active_tor', 1);
config()->set('tracker.limit_leech_count', $limit);
$rating_msg = " (ratio < $ratio)";
break;
}
}
}
// Limit active torrents
if (!isset(config()->get('unlimited_users')[$user_id]) && config()->get('tracker.limit_active_tor') && ((config()->get('tracker.limit_seed_count') && $seeder) || (config()->get('tracker.limit_leech_count') && !$seeder))) {
$sql = "SELECT COUNT(DISTINCT topic_id) AS active_torrents
FROM " . BB_BT_TRACKER . "
WHERE user_id = $user_id
AND seeder = $seeder
AND topic_id != $topic_id";
if (!$seeder && config()->get('tracker.leech_expire_factor') && $user_ratio < 0.5) {
$sql .= " AND update_time > " . (TIMENOW - 60 * config()->get('tracker.leech_expire_factor'));
}
$sql .= " GROUP BY user_id";
if ($row = DB()->fetch_row($sql)) {
if ($seeder && config()->get('tracker.limit_seed_count') && $row['active_torrents'] >= config()->get('tracker.limit_seed_count')) {
msg_die('Only ' . config()->get('tracker.limit_seed_count') . ' torrent(s) allowed for seeding');
} elseif (!$seeder && config()->get('tracker.limit_leech_count') && $row['active_torrents'] >= config()->get('tracker.limit_leech_count')) {
msg_die('Only ' . config()->get('tracker.limit_leech_count') . ' torrent(s) allowed for leeching' . $rating_msg);
}
}
}
// Limit concurrent IPs
if (config()->get('tracker.limit_concurrent_ips') && ((config()->get('tracker.limit_seed_ips') && $seeder) || (config()->get('tracker.limit_leech_ips') && !$seeder))) {
$sql = "SELECT COUNT(DISTINCT ip) AS ips
FROM " . BB_BT_TRACKER . "
WHERE topic_id = $topic_id
AND user_id = $user_id
AND seeder = $seeder
AND $ip_version != '$ip_sql'";
if (!$seeder && config()->get('tracker.leech_expire_factor')) {
$sql .= " AND update_time > " . (TIMENOW - 60 * config()->get('tracker.leech_expire_factor'));
}
$sql .= " GROUP BY topic_id";
if ($row = DB()->fetch_row($sql)) {
if ($seeder && config()->get('tracker.limit_seed_ips') && $row['ips'] >= config()->get('tracker.limit_seed_ips')) {
msg_die('You can seed only from ' . config()->get('tracker.limit_seed_ips') . " IP's");
} elseif (!$seeder && config()->get('tracker.limit_leech_ips') && $row['ips'] >= config()->get('tracker.limit_leech_ips')) {
msg_die('You can leech only from ' . config()->get('tracker.limit_leech_ips') . " IP's");
}
}
}
}
}
// Up/Down speed
$speed_up = $speed_down = 0;
if ($lp_info && $lp_info['update_time'] < TIMENOW) {
if ($uploaded > $lp_info['uploaded']) {
$speed_up = ceil(($uploaded - $lp_info['uploaded']) / (TIMENOW - $lp_info['update_time']));
}
if ($downloaded > $lp_info['downloaded']) {
$speed_down = ceil(($downloaded - $lp_info['downloaded']) / (TIMENOW - $lp_info['update_time']));
}
}
// Up/Down addition
$up_add = ($lp_info && $uploaded > $lp_info['uploaded']) ? $uploaded - $lp_info['uploaded'] : 0;
$down_add = ($lp_info && $downloaded > $lp_info['downloaded']) ? $downloaded - $lp_info['downloaded'] : 0;
// Gold/Silver releases
if (config()->get('tracker.gold_silver_enabled') && $down_add) {
if ($tor_type == TOR_TYPE_GOLD) {
$down_add = 0;
} // Silver releases
elseif ($tor_type == TOR_TYPE_SILVER) {
$down_add = ceil($down_add / 2);
}
}
// Freeleech
if (config()->get('tracker.freeleech') && $down_add) {
$down_add = 0;
}
// Insert / update peer info
$peer_info_updated = false;
$update_time = ($stopped) ? 0 : TIMENOW;
if ($lp_info && empty($hybrid_unrecord)) {
$sql = "UPDATE " . BB_BT_TRACKER . " SET update_time = $update_time";
$sql .= ", $ip_version = '$ip_sql'";
$sql .= ", port = '$port'";
$sql .= ", seeder = $seeder";
$sql .= ($releaser != $lp_info['releaser']) ? ", releaser = $releaser" : '';
$sql .= ($tor_type != $lp_info['tor_type']) ? ", tor_type = $tor_type" : '';
$sql .= ($uploaded != $lp_info['uploaded']) ? ", uploaded = $uploaded" : '';
$sql .= ($downloaded != $lp_info['downloaded']) ? ", downloaded = $downloaded" : '';
$sql .= ", remain = $left";
$sql .= $up_add ? ", up_add = up_add + $up_add" : '';
$sql .= $down_add ? ", down_add = down_add + $down_add" : '';
$sql .= ", speed_up = $speed_up";
$sql .= ", speed_down = $speed_down";
$sql .= ", complete = $complete";
$sql .= ", peer_id = '$peer_id_sql'";
$sql .= " WHERE peer_hash = '$peer_hash'";
$sql .= " LIMIT 1";
DB()->query($sql);
$peer_info_updated = DB()->affected_rows();
}
if ((!$lp_info || !$peer_info_updated) && !$stopped && empty($hybrid_unrecord)) {
$columns = "peer_hash, topic_id, user_id, $ip_version, port, seeder, releaser, tor_type, uploaded, downloaded, remain, speed_up, speed_down, up_add, down_add, update_time, complete, peer_id";
$values = "'$peer_hash', $topic_id, $user_id, '$ip_sql', $port, $seeder, $releaser, $tor_type, $uploaded, $downloaded, $left, $speed_up, $speed_down, $up_add, $down_add, $update_time, $complete, '$peer_id_sql'";
DB()->query("REPLACE INTO " . BB_BT_TRACKER . " ($columns) VALUES ($values)");
}
// Exit if stopped
if ($stopped) {
dummy_exit();
}
// Store peer info in cache
$lp_info_new = [
'downloaded' => (float)$downloaded,
'releaser' => (int)$releaser,
'seeder' => (int)$seeder,
'topic_id' => (int)$topic_id,
'update_time' => (int)TIMENOW,
'uploaded' => (float)$uploaded,
'user_id' => (int)$user_id,
'tor_type' => (int)$tor_type,
'complete' => (int)$complete,
'ip_ver4' => $lp_info['ip_ver4'] ?? $ipv4,
'ip_ver6' => $lp_info['ip_ver6'] ?? $ipv6,
];
if (!empty($hybrid_unrecord)) {
$lp_info_new['hybrid_unrecord'] = $hybrid_unrecord;
}
// Cache new list with peer hash
$lp_info_cached = CACHE('tr_cache')->set(PEER_HASH_PREFIX . $peer_hash, $lp_info_new, PEER_HASH_EXPIRE);
// Get cached output
$output = CACHE('tr_cache')->get(PEERS_LIST_PREFIX . $topic_id);
if (!$output) {
// Retrieve peers
$numwant = (int)config()->get('tracker.numwant');
$compact_mode = (config()->get('tracker.compact_mode') || !empty($compact));
$rowset = DB()->fetch_rowset("
SELECT ip, ipv6, port
FROM " . BB_BT_TRACKER . "
WHERE topic_id = $topic_id
ORDER BY seeder ASC, RAND()
LIMIT $numwant
");
if (empty($rowset)) {
$rowset[] = ['ip' => $ip_sql, 'port' => (int)$port];
}
if ($compact_mode) {
$peers = '';
$peers6 = '';
foreach ($rowset as $peer) {
if (!empty($peer['ip'])) {
$peer_ipv4 = \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ip']);
$peers .= inet_pton($peer_ipv4) . pack('n', $peer['port']);
}
if (!empty($peer['ipv6'])) {
$peer_ipv6 = \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ipv6']);
$peers6 .= inet_pton($peer_ipv6) . pack('n', $peer['port']);
}
}
} else {
$peers = [];
foreach ($rowset as $peer) {
if (!empty($peer['ip'])) {
$peer_ipv4 = \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ip']);
$peers[] = ['ip' => \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ip']), 'port' => (int)$peer['port']];
}
if (!empty($peer['ipv6'])) {
$peer_ipv6 = \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ipv6']);
$peers[] = ['ip' => \TorrentPier\Helpers\IPHelper::long2ip_extended($peer['ipv6']), 'port' => (int)$peer['port']];
}
}
}
$seeders = $leechers = $client_completed = 0;
if (config()->get('tracker.scrape')) {
$row = DB()->fetch_row("
SELECT seeders, leechers, completed
FROM " . BB_BT_TRACKER_SNAP . "
WHERE topic_id = $topic_id
LIMIT 1
");
$seeders = $row['seeders'] ?? ($seeder ? 1 : 0);
$leechers = $row['leechers'] ?? (!$seeder ? 1 : 0);
$client_completed = $row['completed'] ?? 0;
}
$output = [
'interval' => (int)$announce_interval,
'complete' => (int)$seeders,
'incomplete' => (int)$leechers,
'downloaded' => (int)$client_completed,
];
if (!empty($peers)) {
$output['peers'] = $peers;
}
if (!empty($peers6)) {
$output['peers6'] = $peers6;
}
$peers_list_cached = CACHE('tr_cache')->set(PEERS_LIST_PREFIX . $topic_id, $output, PEERS_LIST_EXPIRE);
}
$output['external ip'] = inet_pton($ip);
// Return data to client
echo \Arokettu\Bencode\Bencode::encode($output);
exit;

84
bt/includes/init_tr.php Normal file
View file

@ -0,0 +1,84 @@
<?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('IN_TRACKER')) {
die(basename(__FILE__));
}
// Exit if tracker is disabled
if (config()->get('tracker.bt_off')) {
msg_die(config()->get('tracker.bt_off_reason'));
}
//
// Functions
//
function silent_exit($msg = '')
{
echo \Arokettu\Bencode\Bencode::encode(['warning message' => str_compact($msg)]);
exit;
}
function error_exit($msg = '')
{
echo \Arokettu\Bencode\Bencode::encode(['failure reason' => str_compact($msg)]);
exit;
}
function drop_fast_announce($lp_info, $lp_cached_peers = [])
{
global $announce_interval;
if ($lp_info['update_time'] < (TIMENOW - $announce_interval + 60)) {
return; // if announce interval correct
}
$new_ann_intrv = $lp_info['update_time'] + $announce_interval - TIMENOW;
dummy_exit($new_ann_intrv, $lp_cached_peers);
}
function msg_die($msg)
{
$output = \Arokettu\Bencode\Bencode::encode([
'interval' => (int)1800,
'failure reason' => (string)$msg,
]);
die($output);
}
function dummy_exit($interval = 1800, $cache_dict = [])
{
$output = [
'interval' => (int)$interval,
'peers' => (string)DUMMY_PEER,
'external ip' => inet_pton($_SERVER['REMOTE_ADDR']),
];
if (!empty($cache_dict)) {
$output['complete'] = $cache_dict['complete'];
$output['incomplete'] = $cache_dict['incomplete'];
$output['downloaded'] = $cache_dict['downloaded'];
}
if (isset($cache_dict['peers'])) {
$output['peers'] = $cache_dict['peers'];
}
if (isset($cache_dict['peers6'])) {
$output['peers6'] = $cache_dict['peers6'];
}
$output = \Arokettu\Bencode\Bencode::encode($output);
die($output);
}

10
bt/index.php Normal file
View file

@ -0,0 +1,10 @@
<?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
*/
require __DIR__ . '/announce.php';

103
bt/scrape.php Normal file
View file

@ -0,0 +1,103 @@
<?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
*/
define('IN_TRACKER', true);
define('BB_ROOT', './../');
require dirname(__DIR__) . '/common.php';
if (!config()->get('tracker.scrape')) {
msg_die('Please disable SCRAPE!');
}
// Recover info_hash
if (isset($_GET['?info_hash']) && !isset($_GET['info_hash'])) {
$_GET['info_hash'] = $_GET['?info_hash'];
}
$info_hash = isset($_GET['info_hash']) ? (string)$_GET['info_hash'] : null;
// Verify info_hash
if (!isset($info_hash)) {
msg_die('info_hash was not provided');
}
// Store info hash in hex format
$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, DEFAULT_CHARSET) ? $info_hash : $info_hash_hex));
}
// Handle multiple hashes
preg_match_all('/info_hash=([^&]*)/i', $_SERVER['QUERY_STRING'], $info_hash_array);
$torrents = [];
$info_hashes = [];
foreach ($info_hash_array[1] as $hash) {
$decoded_hash = urldecode($hash);
if (strlen($decoded_hash) !== 20) {
continue;
}
if ($scrape_cache = CACHE('tr_cache')->get(SCRAPE_LIST_PREFIX . bin2hex($decoded_hash))) {
$torrents['files'][$info_key = array_key_first($scrape_cache)] = $scrape_cache[$info_key];
} else {
$info_hashes[] = DB()->escape(($decoded_hash));
}
}
$info_hash_count = count($info_hashes);
if (!empty($info_hash_count)) {
if ($info_hash_count > config()->get('max_scrapes')) {
$info_hashes = array_slice($info_hashes, 0, config()->get('max_scrapes'));
}
$info_hashes_sql = implode('\', \'', $info_hashes);
/**
* Currently torrent clients send truncated v2 hashes (the design raises questions).
* @see https://github.com/bittorrent/bittorrent.org/issues/145#issuecomment-1720040343
*/
$info_hash_where = "tor.info_hash IN ('$info_hashes_sql') OR SUBSTRING(tor.info_hash_v2, 1, 20) IN ('$info_hashes_sql')";
$sql = "
SELECT tor.info_hash, tor.info_hash_v2, tor.complete_count, snap.seeders, snap.leechers
FROM " . BB_BT_TORRENTS . " tor
LEFT JOIN " . BB_BT_TRACKER_SNAP . " snap ON (snap.topic_id = tor.topic_id)
WHERE $info_hash_where
";
$scrapes = DB()->fetch_rowset($sql);
if (!empty($scrapes)) {
foreach ($scrapes as $scrape) {
$hash_v1 = !empty($scrape['info_hash']) ? $scrape['info_hash'] : '';
$hash_v2 = !empty($scrape['info_hash_v2']) ? substr($scrape['info_hash_v2'], 0, 20) : '';
$info_hash_scrape = (in_array(urlencode($hash_v1), $info_hash_array[1])) ? $hash_v1 : $hash_v2; // Replace logic to prioritize $hash_v2, in case of future prioritization of v2
$torrents['files'][$info_hash_scrape] = [
'complete' => (int)$scrape['seeders'],
'downloaded' => (int)$scrape['complete_count'],
'incomplete' => (int)$scrape['leechers']
];
CACHE('tr_cache')->set(SCRAPE_LIST_PREFIX . bin2hex($info_hash_scrape), array_slice($torrents['files'], -1, null, true), SCRAPE_LIST_EXPIRE);
}
}
}
// Verify if torrent registered on tracker
if (empty($torrents)) {
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));

126
cliff.toml Normal file
View file

@ -0,0 +1,126 @@
# git-cliff ~ TorrentPier configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.
[remote.github]
owner = "torrentpier"
repo = "torrentpier"
[changelog]
# template for the changelog header
header = """
[![TorrentPier](https://raw.githubusercontent.com/torrentpier/.github/refs/heads/main/versions/Cattle.png)](https://github.com/torrentpier)\n
# 📖 Change Log\n
"""
# template for the changelog body
# https://keats.github.io/tera/docs/#introduction
body = """
{%- macro remote_url() -%}
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
{%- endmacro -%}
{%- macro nightly_url() -%}
https://nightly.link/{{ remote.github.owner }}/{{ remote.github.repo }}/workflows/ci/master/TorrentPier-master
{%- endmacro -%}
{% macro print_commit(commit) -%}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**breaking**] {% endif %}\
{{ commit.message | upper_first }} - \
([{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }}))\
{% endmacro -%}
{% if version %}\
{% if previous.version %}\
## [{{ version }}]\
({{ self::remote_url() }}/compare/{{ previous.version }}..{{ version }}) ({{ timestamp | date(format="%Y-%m-%d") }})
{% else %}\
## {{ version }} ({{ timestamp | date(format="%Y-%m-%d") }})
{% endif %}\
{% else %}\
## [nightly]({{ self::nightly_url() }})
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits
| filter(attribute="scope")
| sort(attribute="scope") %}
{{ self::print_commit(commit=commit) }}
{%- endfor %}
{% for commit in commits %}
{%- if not commit.scope -%}
{{ self::print_commit(commit=commit) }}
{% endif -%}
{% endfor -%}
{% endfor -%}
{%- if github -%}
{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
## New Contributors ❤️
{% endif %}\
{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
* @{{ contributor.username }} made their first contribution
{%- if contributor.pr_number %} in \
[#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
{%- endif %}
{%- endfor -%}
{%- endif %}
"""
# template for the changelog footer
footer = """
"""
# remove the leading and trailing whitespace from the templates
trim = true
# postprocessors
postprocessors = [
{ pattern = '<REPO>', replace = "https://github.com/torrentpier/torrentpier" }, # replace repository URL
]
[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# process each line of a commit as an individual commit
split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
# Replace issue numbers
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/pull/${2}))" },
# Check spelling of the commit with https://github.com/crate-ci/typos
# If the spelling is incorrect, it will be automatically fixed.
# { pattern = '.*', replace_command = 'typos --write-changes -' },
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat", group = "<!-- 0 -->🚀 Features" },
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
{ message = "^test", group = "<!-- 6 -->🧪 Testing" },
{ message = "^ignore|^release|^changelog", skip = true },
{ message = "^chore|^ci|^misc", group = "<!-- 7 -->⚙️ Miscellaneous" },
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
{ message = "^crowdin|^crodwin", group = "<!-- 10 -->🈳 New translations" }, # crowdin pulls supporting
{ message = "^Composer", group = "<!-- 11 -->📦 Dependencies" }, # dependabot pulls supporting
{ message = "^rem|^drop|^removed", group = "<!-- 12 -->🗑️ Removed" },
{ message = ".*", group = "<!-- 13 -->💼 Other" },
]
# protect breaking changes from being skipped due to matching a skipping commit_parser
protect_breaking_commits = false
# filter out the commits that are not matched by commit parsers
filter_commits = false
# regex for matching git tags
tag_pattern = "v[0-9].*"
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "newest"

456
common.php Normal file
View file

@ -0,0 +1,456 @@
<?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 (isset($_REQUEST['GLOBALS'])) {
die();
}
define('TIMESTART', utime());
define('TIMENOW', time());
define('BB_PATH', __DIR__);
if (empty($_SERVER['REMOTE_ADDR'])) {
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
}
if (empty($_SERVER['HTTP_USER_AGENT'])) {
$_SERVER['HTTP_USER_AGENT'] = '';
}
if (empty($_SERVER['HTTP_REFERER'])) {
$_SERVER['HTTP_REFERER'] = '';
}
if (empty($_SERVER['SERVER_NAME'])) {
$_SERVER['SERVER_NAME'] = getenv('SERVER_NAME');
}
if (empty($_SERVER['SERVER_ADDR'])) {
$_SERVER['SERVER_ADDR'] = getenv('SERVER_ADDR');
}
if (!defined('BB_ROOT')) {
define('BB_ROOT', './');
}
if (!defined('BB_SCRIPT')) {
define('BB_SCRIPT', null);
}
header('X-Frame-Options: SAMEORIGIN');
date_default_timezone_set('UTC');
// Set remote address
$allowedCDNs = ['HTTP_X_FORWARDED_FOR', 'HTTP_FASTLY_CLIENT_IP', 'HTTP_CF_CONNECTING_IP'];
foreach ($allowedCDNs as $allowedCDN) {
if (isset($_SERVER[$allowedCDN]) && filter_var($_SERVER[$allowedCDN], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
$_SERVER['REMOTE_ADDR'] = $_SERVER[$allowedCDN];
}
}
// Get all constants
require_once BB_PATH . '/library/defines.php';
// Composer
if (!is_file(BB_PATH . '/vendor/autoload.php')) {
die('🔩 Manual install: <a href="https://getcomposer.org/download/" target="_blank" rel="noreferrer" style="color:#0a25bb;">Install composer</a> and run <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">composer install</code>.<br/>☕️ Quick install: Run <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">php install.php</code> in CLI mode.');
}
require_once BB_PATH . '/vendor/autoload.php';
/**
* Gets the value of an environment variable.
*
* @param string $key
* @param mixed|null $default
* @return mixed
*/
function env(string $key, mixed $default = null): mixed
{
return \TorrentPier\Env::get($key, $default);
}
// Load ENV
try {
$dotenv = Dotenv\Dotenv::createMutable(BB_PATH);
$dotenv->load();
} catch (\Dotenv\Exception\InvalidPathException $pathException) {
die('🔩 Manual install: Rename from <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">.env.example</code> to <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">.env</code>, and configure it.<br/>☕️ Quick install: Run <code style="background:#222;color:#00e01f;padding:2px 6px;border-radius:3px;">php install.php</code> in CLI mode.');
}
// Load config
require_once BB_PATH . '/library/config.php';
// Local config
if (is_file(BB_PATH . '/library/config.local.php')) {
require_once BB_PATH . '/library/config.local.php';
}
/** @noinspection PhpUndefinedVariableInspection */
// Initialize Config singleton, bb_cfg from global file config
$config = \TorrentPier\Config::init($bb_cfg);
/**
* Get the Config instance
*
* @return \TorrentPier\Config
*/
function config(): \TorrentPier\Config
{
return \TorrentPier\Config::getInstance();
}
/**
* Get the Censor instance
*
* @return \TorrentPier\Censor
*/
function censor(): \TorrentPier\Censor
{
return \TorrentPier\Censor::getInstance();
}
/**
* Get the Dev instance
*
* @return \TorrentPier\Dev
*/
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 === 'development') {
define('DBG_USER', true); // forced debug
} else {
define('DBG_USER', isset($_COOKIE[COOKIE_DBG]));
}
(\TorrentPier\Dev::init());
/**
* Server variables initialize
*/
$server_protocol = config()->get('cookie_secure') ? 'https://' : 'http://';
$server_port = in_array((int)config()->get('server_port'), [80, 443], true) ? '' : ':' . config()->get('server_port');
define('FORUM_PATH', config()->get('script_path'));
define('FULL_URL', $server_protocol . config()->get('server_name') . $server_port . config()->get('script_path'));
unset($server_protocol, $server_port);
// Initialize the new DB factory with database configuration
TorrentPier\Database\DatabaseFactory::init(config()->get('db'), config()->get('db_alias', []));
/**
* Get the Database instance
*
* @param string $db_alias
* @return \TorrentPier\Database\Database
*/
function DB(string $db_alias = 'db'): \TorrentPier\Database\Database
{
return TorrentPier\Database\DatabaseFactory::getInstance($db_alias);
}
// Initialize Unified Cache System
TorrentPier\Cache\UnifiedCacheSystem::getInstance(config()->all());
/**
* Get cache manager instance (replaces legacy cache system)
*
* @param string $cache_name
* @return \TorrentPier\Cache\CacheManager
*/
function CACHE(string $cache_name): \TorrentPier\Cache\CacheManager
{
return TorrentPier\Cache\UnifiedCacheSystem::getInstance()->get_cache_obj($cache_name);
}
/**
* Get datastore manager instance (replaces legacy datastore system)
*
* @return \TorrentPier\Cache\DatastoreManager
*/
function datastore(): \TorrentPier\Cache\DatastoreManager
{
return TorrentPier\Cache\UnifiedCacheSystem::getInstance()->getDatastore(config()->get('datastore_type', 'file'));
}
/**
* Backward compatibility: Global datastore variable
* This allows existing code to continue using global $datastore
*/
$datastore = datastore();
// Functions
function utime()
{
return array_sum(explode(' ', microtime()));
}
function bb_log($msg, $file_name = 'logs', $return_path = false)
{
if (is_array($msg)) {
$msg = implode(LOG_LF, $msg);
}
$file_name .= (LOG_EXT) ? '.' . LOG_EXT : '';
$path = (LOG_DIR . '/' . $file_name);
if ($return_path) {
return $path;
}
return file_write($msg, $path);
}
function file_write($str, $file, $max_size = LOG_MAX_SIZE, $lock = true, $replace_content = false)
{
$bytes_written = false;
clearstatcache();
if (is_file($file) && ($max_size && (filesize($file) >= $max_size))) {
$file_parts = pathinfo($file);
$new_name = ($file_parts['dirname'] . '/' . $file_parts['filename'] . '_[old]_' . date('Y-m-d_H-i-s_') . getmypid() . '.' . $file_parts['extension']);
clearstatcache();
if (!is_file($new_name)) {
rename($file, $new_name);
}
}
clearstatcache();
if (bb_mkdir(dirname($file))) {
if ($fp = fopen($file, 'ab+')) {
if ($lock) {
flock($fp, LOCK_EX);
}
if ($replace_content) {
ftruncate($fp, 0);
fseek($fp, 0, SEEK_SET);
}
$bytes_written = fwrite($fp, $str);
fclose($fp);
}
}
return $bytes_written;
}
function bb_mkdir($path, $mode = 0777)
{
$old_um = umask(0);
$dir = mkdir_rec($path, $mode);
umask($old_um);
return $dir;
}
function mkdir_rec($path, $mode): bool
{
if (is_dir($path)) {
return ($path !== '.' && $path !== '..') && is_writable($path);
}
return mkdir_rec(dirname($path), $mode) && mkdir($path, $mode);
}
function verify_id($id, $length): bool
{
return (is_string($id) && preg_match('#^[a-zA-Z0-9]{' . $length . '}$#', $id));
}
function clean_filename($fname)
{
static $s = ['\\', '/', ':', '*', '?', '"', '<', '>', '|', ' '];
return str_replace($s, '_', str_compact($fname));
}
/**
* Convert special characters to HTML entities
*
* @param $txt
* @param bool $double_encode
* @param int $quote_style
* @param ?string $charset
* @return string
*/
function htmlCHR($txt, bool $double_encode = false, int $quote_style = ENT_QUOTES, ?string $charset = DEFAULT_CHARSET): string
{
return (string)htmlspecialchars($txt ?? '', $quote_style, $charset, $double_encode);
}
/**
* @param string $str
* @return string
*/
function str_compact($str)
{
return preg_replace('/\s\s+/', ' ', trim($str ?? ''));
}
/**
* Generate a "random" alphanumeric string.
*
* Should not be considered sufficient for cryptography, etc.
*
* @param int $length
* @return string
* @throws Exception
*/
function make_rand_str(int $length = 10): string
{
$pool = str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $pool[random_int(0, 61)];
}
return $randomString;
}
/**
* Calculates user ratio
*
* @param array $btu
* @return float|null
*/
function get_bt_ratio(array $btu): ?float
{
return
(!empty($btu['u_down_total']) && $btu['u_down_total'] > MIN_DL_FOR_RATIO)
? round((($btu['u_up_total'] + $btu['u_up_release'] + $btu['u_up_bonus']) / $btu['u_down_total']), 2)
: null;
}
function array_deep(&$var, $fn, $one_dimensional = false, $array_only = false, $timeout = false)
{
if ($timeout) {
static $recursions = 0;
if (time() > (TIMENOW + $timeout)) {
return [
'timeout' => true,
'recs' => $recursions
];
}
$recursions++;
}
if (is_array($var)) {
foreach ($var as $k => $v) {
if (is_array($v)) {
if ($one_dimensional) {
unset($var[$k]);
} elseif ($array_only) {
$var[$k] = $fn($v);
} else {
array_deep($var[$k], $fn, timeout: $timeout);
}
} elseif (!$array_only) {
$var[$k] = $fn($v);
}
}
} elseif (!$array_only) {
$var = $fn($var);
}
}
/**
* Hide BB_PATH
*
* @param string $path
* @return string
*/
function hide_bb_path(string $path): string
{
return ltrim(str_replace(BB_PATH, '', $path), '/\\');
}
/**
* Returns memory usage statistic
*
* @param string $param
* @return int|void
*/
function sys(string $param)
{
switch ($param) {
case 'mem':
return memory_get_usage();
case 'mem_peak':
return memory_get_peak_usage();
default:
trigger_error("invalid param: $param", E_USER_ERROR);
}
}
/**
* Some shared defines
*/
// Initialize demo mode
define('IN_DEMO_MODE', env('APP_DEMO_MODE', false));
// Ratio status
define('RATIO_ENABLED', TR_RATING_LIMITS && MIN_DL_FOR_RATIO > 0);
// Initialization
if (!defined('IN_TRACKER')) {
// Init board
require_once INC_DIR . '/init_bb.php';
} else {
define('DUMMY_PEER', pack('Nn', \TorrentPier\Helpers\IPHelper::ip2long($_SERVER['REMOTE_ADDR']), !empty($_GET['port']) ? (int)$_GET['port'] : random_int(1000, 65000)));
define('PEER_HASH_EXPIRE', round(config()->get('announce_interval') * (0.85 * config()->get('tracker.expire_factor'))));
define('PEERS_LIST_EXPIRE', round(config()->get('announce_interval') * 0.7));
define('SCRAPE_LIST_EXPIRE', round(config()->get('scrape_interval') * 0.7));
define('PEER_HASH_PREFIX', 'peer_');
define('PEERS_LIST_PREFIX', 'peers_list_');
define('SCRAPE_LIST_PREFIX', 'scrape_list_');
// Init tracker
require_once BB_PATH . '/bt/includes/init_tr.php';
header('Content-Type: text/plain');
header('Pragma: no-cache');
if (!defined('IN_ADMIN')) {
// Exit if tracker is disabled via ON/OFF trigger
if (is_file(BB_DISABLED)) {
dummy_exit(random_int(60, 2400));
}
}
}

102
composer.json Normal file
View file

@ -0,0 +1,102 @@
{
"name": "torrentpier/torrentpier",
"description": "TorrentPier. Bull-powered BitTorrent tracker engine",
"type": "project",
"keywords": [
"bittorrent",
"forum",
"torrent",
"tracker"
],
"homepage": "https://github.com/torrentpier",
"license": "MIT",
"authors": [
{
"name": "Exile",
"email": "admin@torrentpier.com",
"homepage": "https://github.com/Exileum",
"role": "Developer"
},
{
"name": "Diolektor",
"homepage": "https://github.com/diolektor",
"role": "Developer"
},
{
"name": "PheRum",
"homepage": "https://github.com/PheRum",
"role": "Developer"
},
{
"name": "belomaxorka",
"email": "roman25052006.kelesh@gmail.com",
"homepage": "https://github.com/belomaxorka",
"role": "Developer"
},
{
"name": "kovalensky",
"email": "kovalensky@evergarden.ru",
"homepage": "https://github.com/kovalensky",
"role": "Developer"
}
],
"support": {
"email": "support@torrentpier.com",
"issues": "https://github.com/torrentpier/torrentpier/issues",
"forum": "https://torrentpier.com"
},
"require": {
"php": ">=8.2",
"arokettu/bencode": "^4.1.0",
"arokettu/monsterid": "^4.1.0",
"arokettu/random-polyfill": "1.0.2",
"arokettu/torrent-file": "^5.2.1",
"belomaxorka/captcha": "1.*",
"bugsnag/bugsnag": "^v3.29.1",
"claviska/simpleimage": "^4.0",
"egulias/email-validator": "^4.0.1",
"filp/whoops": "^2.15",
"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",
"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/mailer": "^7.3",
"symfony/polyfill": "v1.32.0",
"vlucas/phpdotenv": "^5.5",
"z4kn4fein/php-semver": "^v3.0.0"
},
"require-dev": {
"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": "stable",
"prefer-stable": true
}

7646
composer.lock generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,45 +0,0 @@
Уважаемые пользователи TorrentPier II!
За помощь, оказанную в развитии нашего движка, выражаем особую благодарность нижеперечисленным участникам форума:
***************************
** Сборы 2013 года **
***************************
emilio13
UralSOFT
aik
Sarymian
eve
Алексей Письменский
qaqra
rserg99
leszav
Dr_Brown
Bullit
Triceratop (http://goldenshara.com/)
Ramzess
****************************
** Сборы 2014 года **
****************************
SamSeGo
alesel (http://sporttracker.kz/)
Bullit
igorsaevets
vasilich619
wint1000 (http://asmlocator.ru/)
Philstone (http://worldofminecraft.su/)
Nightwolf
nord51
Вася
*****************************
** Прочая информация **
*****************************
Большое вам всем спасибо за помощь.
Если в данных списках кто-то не указан, либо если вы хотите указать дополнительно адрес своего трекера, отправьте письмо по адресу admin@torrentpier.me,
с указанием вашего ника на форуме и адреса вашего трекера, дабы мы могли вас добавить в этот список.

13
cron.php Normal file
View file

@ -0,0 +1,13 @@
<?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
*/
define('START_CRON', true);
define('BB_ROOT', __DIR__ . '/');
require __DIR__ . '/common.php';

9
crowdin.yml Normal file
View file

@ -0,0 +1,9 @@
files:
- source: /styles/templates/default/images/lang/source/*.*
translation: /styles/templates/default/images/lang/%two_letters_code%/%original_file_name%
- source: /library/language/source/*.*
translation: /library/language/%two_letters_code%/%original_file_name%
- source: /library/language/source/email/*.*
translation: /library/language/%two_letters_code%/email/%original_file_name%
- source: /library/language/source/html/*.*
translation: /library/language/%two_letters_code%/html/%original_file_name%

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

244
dl.php Normal file
View file

@ -0,0 +1,244 @@
<?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
*/
define('BB_SCRIPT', 'dl');
define('NO_GZIP', true);
require __DIR__ . '/common.php';
require ATTACH_DIR . '/attachment_mod.php';
$datastore->enqueue([
'attach_extensions',
'cat_forums'
]);
$download_id = request_var('id', 0);
$thumbnail = request_var('thumb', 0);
$m3u = isset($_GET['m3u']) && $_GET['m3u'];
// Send file to browser
function send_file_to_browser($attachment, $upload_dir)
{
global $lang;
$filename = $upload_dir . '/' . $attachment['physical_filename'];
$gotit = false;
if (is_file(realpath($filename))) {
$gotit = true;
} else {
bb_die($lang['ERROR_NO_ATTACHMENT'] . '<br /><br />' . htmlCHR($filename));
}
// Correct the mime type - we force application/octet-stream for all files, except images
// Please do not change this, it is a security precaution
if (!str_contains($attachment['mimetype'], 'image')) {
$attachment['mimetype'] = 'application/octet-stream';
} else {
header('Cache-Control: public, max-age=3600');
}
//bt
if (!(isset($_GET['original']) && !IS_USER)) {
\TorrentPier\Legacy\Torrent::send_torrent_with_passkey($filename);
}
// Now the tricky part... let's dance
header('Pragma: public');
$real_filename = clean_filename(basename($attachment['real_filename']));
$mimetype = $attachment['mimetype'] . ';';
$charset = 'charset=' . DEFAULT_CHARSET . ';';
// Send out the Headers
header("Content-Type: $mimetype $charset name=\"$real_filename\"");
header("Content-Disposition: inline; filename=\"$real_filename\"");
unset($real_filename);
// Now send the File Contents to the Browser
if ($gotit) {
$size = filesize($filename);
if ($size) {
header("Content-length: $size");
}
readfile($filename);
} else {
bb_die($lang['ERROR_NO_ATTACHMENT'] . '<br /><br />' . htmlCHR($filename));
}
exit;
}
//
// Start Session Management
//
$user->session_start();
set_die_append_msg();
if (!$download_id) {
bb_die($lang['NO_ATTACHMENT_SELECTED']);
}
if ($attach_config['disable_mod'] && !IS_ADMIN) {
bb_die($lang['ATTACHMENT_FEATURE_DISABLED']);
}
$sql = 'SELECT * FROM ' . BB_ATTACHMENTS_DESC . ' WHERE attach_id = ' . (int)$download_id;
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachment information #1');
}
if (!($attachment = DB()->sql_fetchrow($result))) {
bb_die($lang['ERROR_NO_ATTACHMENT']);
}
$attachment['physical_filename'] = basename($attachment['physical_filename']);
if ($thumbnail) {
// Re-define $attachment['physical_filename'] for thumbnails
$attachment['physical_filename'] = THUMB_DIR . '/t_' . $attachment['physical_filename'];
} elseif ($m3u) {
// Check m3u file exist
if (!$m3uFile = (new \TorrentPier\TorrServerAPI())->getM3UPath($download_id)) {
bb_die($lang['ERROR_NO_ATTACHMENT']);
}
$attachment['physical_filename'] = $attachment['real_filename'] = basename($m3uFile);
$attachment['mimetype'] = mime_content_type($m3uFile);
$attachment['extension'] = str_replace('.', '', \TorrentPier\TorrServerAPI::M3U['extension']);
}
DB()->sql_freeresult($result);
// get forum_id for attachment authorization or private message authorization
$authorised = false;
$sql = 'SELECT * FROM ' . BB_ATTACHMENTS . ' WHERE attach_id = ' . (int)$attachment['attach_id'];
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query attachment information #2');
}
$auth_pages = DB()->sql_fetchrowset($result);
$num_auth_pages = DB()->num_rows($result);
for ($i = 0; $i < $num_auth_pages && $authorised == false; $i++) {
$auth_pages[$i]['post_id'] = (int)$auth_pages[$i]['post_id'];
if ($auth_pages[$i]['post_id'] != 0) {
$sql = 'SELECT forum_id, topic_id FROM ' . BB_POSTS . ' WHERE post_id = ' . (int)$auth_pages[$i]['post_id'];
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query post information');
}
$row = DB()->sql_fetchrow($result);
$topic_id = $row['topic_id'];
$forum_id = $row['forum_id'];
$is_auth = auth(AUTH_ALL, $forum_id, $userdata);
set_die_append_msg($forum_id, $topic_id);
if ($is_auth['auth_download']) {
$authorised = true;
}
}
}
// Check the auth rights
if (!$authorised) {
bb_die($lang['SORRY_AUTH_VIEW_ATTACH'], 403);
}
$datastore->rm('cat_forums');
// Check tor status
if (!IS_AM && ($attachment['mimetype'] === TORRENT_MIMETYPE)) {
$sql = 'SELECT tor_status, poster_id FROM ' . BB_BT_TORRENTS . ' WHERE attach_id = ' . (int)$attachment['attach_id'];
if (!($result = DB()->sql_query($sql))) {
bb_die('Could not query tor_status information');
}
$row = DB()->sql_fetchrow($result);
if (isset(config()->get('tor_frozen')[$row['tor_status']]) && !(isset(config()->get('tor_frozen_author_download')[$row['tor_status']]) && $userdata['user_id'] === $row['poster_id'])) {
bb_die($lang['TOR_STATUS_FORBIDDEN'] . $lang['TOR_STATUS_NAME'][$row['tor_status']]);
}
DB()->sql_freeresult($result);
}
// Get Information on currently allowed Extensions
$rows = get_extension_informations();
$num_rows = count($rows);
$allowed_extensions = $download_mode = [];
for ($i = 0; $i < $num_rows; $i++) {
$extension = strtolower(trim($rows[$i]['extension']));
// Get allowed extensions
if ((int)$rows[$i]['allow_group'] === 1) {
$allowed_extensions[] = $extension;
}
$download_mode[$extension] = $rows[$i]['download_mode'];
}
// Disallowed
if (!in_array($attachment['extension'], $allowed_extensions) && !IS_ADMIN) {
bb_die(sprintf($lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension']) . '<br /><br />' . $lang['FILENAME'] . ":&nbsp;" . $attachment['physical_filename']);
}
// Getting download mode by extension
if (isset($download_mode[$attachment['extension']])) {
$download_mode = (int)$download_mode[$attachment['extension']];
} else {
bb_die(sprintf($lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension']) . '<br /><br />' . $lang['FILENAME'] . ":&nbsp;" . $attachment['physical_filename']);
}
// Update download count
if (!$m3u && !$thumbnail && is_file(realpath($upload_dir . '/' . $attachment['physical_filename']))) {
$sql = 'UPDATE ' . BB_ATTACHMENTS_DESC . ' SET download_count = download_count + 1 WHERE attach_id = ' . (int)$attachment['attach_id'];
if (!DB()->sql_query($sql)) {
bb_die('Could not update attachment download count');
}
}
// Determine the 'presenting'-method
switch ($download_mode) {
case PHYSICAL_LINK:
$url = make_url($upload_dir . '/' . $attachment['physical_filename']);
header('Location: ' . $url);
exit;
case INLINE_LINK:
if (IS_GUEST && !config()->get('captcha.disabled') && !bb_captcha('check')) {
global $template;
$redirect_url = $_POST['redirect_url'] ?? $_SERVER['HTTP_REFERER'] ?? '/';
$message = '<form action="' . DL_URL . $attachment['attach_id'] . '" method="post">';
$message .= $lang['CAPTCHA'] . ':';
$message .= '<div class="mrg_10" align="center">' . bb_captcha('get') . '</div>';
$message .= '<input type="hidden" name="redirect_url" value="' . $redirect_url . '" />';
$message .= '<input type="submit" class="bold" value="' . $lang['SUBMIT'] . '" /> &nbsp;';
$message .= '<input type="button" class="bold" value="' . $lang['GO_BACK'] . '" onclick="document.location.href = \'' . $redirect_url . '\';" />';
$message .= '</form>';
$template->assign_vars(['ERROR_MESSAGE' => $message]);
require(PAGE_HEADER);
require(PAGE_FOOTER);
}
send_file_to_browser($attachment, $upload_dir);
exit;
default:
bb_die('Incorrect download mode: ' . $download_mode);
}

139
dl_list.php Normal file
View file

@ -0,0 +1,139 @@
<?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
*/
define('BB_SCRIPT', 'dl_list');
require __DIR__ . '/common.php';
$forum_id = $_REQUEST[POST_FORUM_URL] ?? 0;
$topic_id = $_REQUEST[POST_TOPIC_URL] ?? 0;
$mode = isset($_REQUEST['mode']) ? (string)$_REQUEST['mode'] : '';
$confirmed = isset($_POST['confirm']);
// Get new DL-status
if ($mode == 'set_dl_status' || $mode == 'set_topics_dl_status') {
if (isset($_POST['dl_set_will'])) {
$new_dl_status = DL_STATUS_WILL;
$dl_key = 'dlw';
} elseif (isset($_POST['dl_set_down'])) {
$new_dl_status = DL_STATUS_DOWN;
$dl_key = 'dld';
} elseif (isset($_POST['dl_set_complete'])) {
$new_dl_status = DL_STATUS_COMPLETE;
$dl_key = 'dlc';
} elseif (isset($_POST['dl_set_cancel'])) {
$new_dl_status = DL_STATUS_CANCEL;
$dl_key = 'dla';
} else {
bb_die('Invalid download status');
}
}
// Define redirect URL
$full_url = isset($_POST['full_url']) ? str_replace('&amp;', '&', htmlspecialchars($_POST['full_url'])) : '';
if (isset($_POST['redirect_type']) && $_POST['redirect_type'] == 'search') {
$redirect_type = 'search.php';
$redirect = $full_url ?: "$dl_key=1";
} else {
$redirect_type = (!$topic_id) ? 'viewforum.php' : 'viewtopic.php';
$redirect = $full_url ?: ((!$topic_id) ? POST_FORUM_URL . "=$forum_id" : POST_TOPIC_URL . "=$topic_id");
}
// Start session management
$user->session_start();
set_die_append_msg();
// Check if user logged in
if (IS_GUEST) {
redirect(LOGIN_URL . "?redirect=$redirect_type&$redirect");
}
// Check if user did not confirm
if (isset($_POST['cancel']) && $_POST['cancel']) {
redirect("$redirect_type?$redirect");
}
// Delete DL-list
if ($mode == 'dl_delete' && $topic_id) {
if (!IS_ADMIN) {
$sql = "SELECT forum_id FROM " . BB_TOPICS . " WHERE topic_id = $topic_id LIMIT 1";
if (!$row = DB()->sql_fetchrow(DB()->sql_query($sql))) {
bb_die('Could not obtain forum_id for this topic');
}
$is_auth = auth(AUTH_ALL, $row['forum_id'], $userdata);
if (!$is_auth['auth_mod']) {
bb_die($lang['NOT_MODERATOR']);
}
}
if (!$confirmed) {
$hidden_fields = [
POST_TOPIC_URL => $topic_id,
'mode' => 'dl_delete',
];
print_confirmation([
'QUESTION' => $lang['DL_LIST_DEL_CONFIRM'],
'FORM_ACTION' => 'dl_list.php',
'HIDDEN_FIELDS' => build_hidden_fields($hidden_fields),
]);
}
clear_dl_list($topic_id);
redirect("$redirect_type?$redirect");
}
// Update DL status
$req_topics_ary = $topics_ary = [];
// Get topics selected by user
if ($mode == 'set_topics_dl_status') {
if (!isset($_POST['dl_topics_id_list']) || !is_array($_POST['dl_topics_id_list'])) {
bb_die($lang['NONE_SELECTED']);
}
foreach ($_POST['dl_topics_id_list'] as $topic_id) {
$req_topics_ary[] = (int)$topic_id;
}
} elseif ($mode == 'set_dl_status') {
$req_topics_ary[] = (int)$topic_id;
}
// Get existing topics
if ($req_topics_sql = implode(',', $req_topics_ary)) {
$sql = "SELECT topic_id FROM " . BB_TOPICS . " WHERE topic_id IN($req_topics_sql)";
foreach (DB()->fetch_rowset($sql) as $row) {
$topics_ary[] = $row['topic_id'];
}
}
if ($topics_ary && ($mode == 'set_dl_status' || $mode == 'set_topics_dl_status')) {
$new_dlstatus_ary = [];
foreach ($topics_ary as $topic_id) {
$new_dlstatus_ary[] = [
'user_id' => (int)$user->id,
'topic_id' => (int)$topic_id,
'user_status' => (int)$new_dl_status,
];
}
$new_dlstatus_sql = DB()->build_array('MULTI_INSERT', $new_dlstatus_ary);
DB()->query("REPLACE INTO " . BB_BT_DLSTATUS . " $new_dlstatus_sql");
redirect("$redirect_type?$redirect");
}
redirect('index.php');

BIN
favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

67
feed.php Normal file
View file

@ -0,0 +1,67 @@
<?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
*/
define('BB_SCRIPT', 'feed');
require __DIR__ . '/common.php';
// Init userdata
$user->session_start(['req_login' => true]);
$mode = $_REQUEST['mode'] ?? '';
$type = $_POST['type'] ?? '';
$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
$timecheck = TIMENOW - 600;
if (!$mode) {
bb_simple_die($lang['ATOM_NO_MODE']);
}
if ($mode === 'get_feed_url' && ($type === 'f' || $type === 'u') && $id >= 0) {
if ($type == 'f') {
// Check if the user has actually sent a forum ID
$sql = "SELECT allow_reg_tracker, forum_name FROM " . BB_FORUMS . " WHERE forum_id = $id LIMIT 1";
if (!$forum_data = DB()->fetch_row($sql)) {
if ($id == 0) {
$forum_data = [];
} else {
bb_simple_die($lang['ATOM_ERROR'] . ' #1');
}
}
if (is_file(config()->get('atom.path') . '/f/' . $id . '.atom') && filemtime(config()->get('atom.path') . '/f/' . $id . '.atom') > $timecheck) {
redirect(config()->get('atom.url') . '/f/' . $id . '.atom');
} else {
if (\TorrentPier\Legacy\Atom::update_forum_feed($id, $forum_data)) {
redirect(config()->get('atom.url') . '/f/' . $id . '.atom');
} else {
bb_simple_die($lang['ATOM_NO_FORUM']);
}
}
}
if ($type === 'u') {
// Check if the user has actually sent a user ID
if ($id < 1) {
bb_simple_die($lang['ATOM_ERROR'] . ' #2');
}
if (!$username = get_username($id)) {
bb_simple_die($lang['ATOM_ERROR'] . ' #3');
}
if (is_file(config()->get('atom.path') . '/u/' . floor($id / 5000) . '/' . ($id % 100) . '/' . $id . '.atom') && filemtime(config()->get('atom.path') . '/u/' . floor($id / 5000) . '/' . ($id % 100) . '/' . $id . '.atom') > $timecheck) {
redirect(config()->get('atom.url') . '/u/' . floor($id / 5000) . '/' . ($id % 100) . '/' . $id . '.atom');
} else {
if (\TorrentPier\Legacy\Atom::update_user_feed($id, $username)) {
redirect(config()->get('atom.url') . '/u/' . floor($id / 5000) . '/' . ($id % 100) . '/' . $id . '.atom');
} else {
bb_simple_die($lang['ATOM_NO_USER']);
}
}
}
} else {
bb_simple_die($lang['ATOM_ERROR'] . ' #4');
}

117
filelist.php Normal file
View file

@ -0,0 +1,117 @@
<?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
*/
define('BB_SCRIPT', 'filelist');
require __DIR__ . '/common.php';
// Start session management
$user->session_start();
if (config()->get('bt_disable_dht') && IS_GUEST) {
bb_die($lang['BT_PRIVATE_TRACKER'], 403);
}
$topic_id = isset($_GET[POST_TOPIC_URL]) ? (int)$_GET[POST_TOPIC_URL] : 0;
if (!$topic_id) {
bb_die($lang['INVALID_TOPIC_ID'], 404);
}
$sql = 'SELECT t.forum_id, t.attach_id, t.info_hash, t.info_hash_v2, t.size, ad.physical_filename
FROM ' . BB_BT_TORRENTS . ' t
LEFT JOIN ' . BB_ATTACHMENTS_DESC . ' ad
ON t.attach_id = ad.attach_id
WHERE t.topic_id = ' . $topic_id . '
LIMIT 1';
if (!$row = DB()->fetch_row($sql)) {
bb_die($lang['INVALID_TOPIC_ID_DB'], 404);
}
// Check rights
$is_auth = auth(AUTH_ALL, $row['forum_id'], $userdata);
if (!$is_auth['auth_view']) {
bb_die($lang['SORRY_AUTH_VIEW_ATTACH'], 403);
}
// Protocol meta
$meta_v1 = !empty($row['info_hash']);
$meta_v2 = !empty($row['info_hash_v2']);
// Method fields
$t_version_field = $meta_v2 ? 'v2' : 'v1';
$t_files_field = $meta_v2 ? 'getFileTree' : 'getFiles';
$t_hash_field = $meta_v2 ? 'piecesRoot' : 'sha1';
$file_path = get_attachments_dir() . '/' . $row['physical_filename'];
if (!is_file($file_path)) {
bb_die($lang['TOR_NOT_FOUND'], 410);
}
$file_contents = file_get_contents($file_path);
if (config()->get('flist_max_files')) {
$filetree_pos = $meta_v2 ? strpos($file_contents, '9:file tree') : false;
$files_pos = $meta_v1 ? strpos($file_contents, '5:files', $filetree_pos) : false;
if ($filetree_pos) {
$file_count = substr_count($file_contents, '6:length', $filetree_pos, ($files_pos ? ($files_pos - $filetree_pos) : null));
} else {
$file_count = substr_count($file_contents, '6:length', $files_pos);
}
if ($file_count > config()->get('flist_max_files')) {
bb_die(sprintf($lang['BT_FLIST_LIMIT'], config()->get('flist_max_files'), $file_count), 410);
}
}
try {
$torrent = \Arokettu\Torrent\TorrentFile::loadFromString($file_contents);
} catch (\Exception $e) {
bb_die(htmlCHR("{$lang['TORFILE_INVALID']}: {$e->getMessage()}"), 410);
}
if (IS_GUEST && $torrent->isPrivate()) {
bb_die($lang['BT_PRIVATE_TORRENT'], 403);
}
// Get torrent files
$files = $torrent->$t_version_field()->$t_files_field();
if ($meta_v2) {
$files = new \RecursiveIteratorIterator($files); // Flatten the list
}
$files_count = 0;
foreach ($files as $file) {
$files_count++;
$row_class = ($files_count % 2) ? 'row1' : 'row2';
$template->assign_block_vars('filelist', [
'ROW_NUMBER' => $files_count,
'ROW_CLASS' => $row_class,
'FILE_PATH' => clean_tor_dirname(implode('/', $file->path)),
'FILE_LENGTH' => humn_size($file->length, 2),
'FILE_HASH' => $file->$t_hash_field ?? '-'
]);
}
$torrent_name = !empty($t_name = $torrent->getName()) ? str_short(htmlCHR($t_name), 200) : $lang['UNKNOWN'];
$torrent_size = humn_size($row['size'], 2);
// Output page
$template->assign_vars([
'PAGE_TITLE' => "$torrent_name (" . $torrent_size . ")",
'FILES_COUNT' => sprintf($lang['BT_FLIST_FILE_PATH'], declension(iterator_count($files), 'files')),
'TORRENT_CREATION_DATE' => (!empty($dt = $torrent->getCreationDate()) && is_numeric($creation_date = $dt->getTimestamp())) ? date('d-M-Y H:i (e)', $creation_date) : $lang['UNKNOWN'],
'TORRENT_CLIENT' => !empty($creator = $torrent->getCreatedBy()) ? htmlCHR($creator) : $lang['UNKNOWN'],
'TORRENT_PRIVATE' => $torrent->isPrivate() ? $lang['YES'] : $lang['NO'],
'BTMR_NOTICE' => sprintf($lang['BT_FLIST_BTMR_NOTICE'], 'https://github.com/kovalensky/tmrr'),
'U_TOPIC' => TOPIC_URL . $topic_id,
]);
print_page('filelist.tpl');

600
group.php Normal file
View file

@ -0,0 +1,600 @@
<?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
*/
define('BB_SCRIPT', 'group');
require __DIR__ . '/common.php';
require INC_DIR . '/bbcode.php';
$page_cfg['use_tablesorter'] = true;
$s_member_groups = $s_pending_groups = $s_member_groups_opt = $s_pending_groups_opt = '';
$select_sort_mode = $select_sort_order = '';
// Init userdata
$user->session_start(['req_login' => true]);
set_die_append_msg();
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? (int)$_REQUEST[POST_GROUPS_URL] : null;
$start = isset($_REQUEST['start']) ? abs((int)$_REQUEST['start']) : 0;
$per_page = config()->get('group_members_per_page');
$view_mode = isset($_REQUEST['view']) ? (string)$_REQUEST['view'] : null;
$rel_limit = 50;
$group_info = [];
$is_moderator = false;
if ($group_id) {
if (!$group_info = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
if (!$group_info['group_id'] || !$group_info['group_moderator'] || !$group_info['moderator_name']) {
bb_die("Invalid group data [group_id: $group_id]");
}
$is_moderator = ($userdata['user_id'] == $group_info['group_moderator'] || IS_ADMIN);
}
if (!$group_id) {
// Show the main screen where the user can select a group.
$groups = [];
$pending = 10;
$member = 20;
$sql = "
SELECT
g.group_name, g.group_description, g.group_id, g.group_type, g.release_group,
IF(ug.user_id IS NOT NULL, IF(ug.user_pending = 1, $pending, $member), 0) AS membership,
g.group_moderator, u.username AS moderator_name,
IF(g.group_moderator = ug.user_id, 1, 0) AS is_group_mod,
COUNT(ug2.user_id) AS members, SUM(ug2.user_pending) AS candidates
FROM
" . BB_GROUPS . " g
LEFT JOIN
" . BB_USER_GROUP . " ug ON
ug.group_id = g.group_id
AND ug.user_id = " . $userdata['user_id'] . "
LEFT JOIN
" . BB_USER_GROUP . " ug2 ON
ug2.group_id = g.group_id
LEFT JOIN
" . BB_USERS . " u ON g.group_moderator = u.user_id
WHERE
g.group_single_user = 0
GROUP BY g.group_id
ORDER BY
is_group_mod DESC,
membership DESC,
g.group_type ASC,
g.group_name ASC
";
foreach (DB()->fetch_rowset($sql) as $row) {
if ($row['is_group_mod']) {
$type = 'MOD';
} elseif ($row['membership'] == $member) {
$type = 'MEMBER';
} elseif ($row['membership'] == $pending) {
$type = 'PENDING';
} elseif ($row['group_type'] == GROUP_OPEN) {
$type = 'OPEN';
} elseif ($row['group_type'] == GROUP_CLOSED) {
$type = 'CLOSED';
} elseif ($row['group_type'] == GROUP_HIDDEN && IS_ADMIN) {
$type = 'HIDDEN';
} else {
continue;
}
$data = ['id' => $row['group_id'], 'm' => ($row['members'] - $row['candidates']), 'c' => $row['candidates'], 'rg' => $row['release_group']];
$groups[$type][$row['group_name']] = $data;
}
function build_group($params)
{
global $lang;
$options = '';
foreach ($params as $name => $data) {
$text = str_short(rtrim(htmlCHR($name)), HTML_SELECT_MAX_LENGTH);
$members = ($data['m']) ? $lang['MEMBERS_IN_GROUP'] . ': ' . $data['m'] : $lang['NO_GROUP_MEMBERS'];
$candidates = ($data['c']) ? $lang['PENDING_MEMBERS'] . ': ' . $data['c'] : $lang['NO_PENDING_GROUP_MEMBERS'];
$options .= '<li class="pad_2"><a href="' . GROUP_URL . $data['id'] . '" class="med bold">' . $text . '</a></li>';
$options .= ($data['rg']) ? '<ul><li class="med">' . $lang['RELEASE_GROUP'] . '</li>' : '<ul>';
$options .= '<li class="seedmed">' . $members . '</li>';
if (IS_AM) {
$options .= '<li class="leechmed">' . $candidates . '</li>';
}
$options .= '</ul>';
}
return $options;
}
if ($groups) {
$s_hidden_fields = '';
foreach ($groups as $type => $grp) {
$template->assign_block_vars('groups', [
'MEMBERSHIP' => $lang["GROUP_MEMBER_{$type}"],
'GROUP_SELECT' => build_group($grp)
]);
}
$template->assign_vars([
'SELECT_GROUP' => true,
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'S_USERGROUP_ACTION' => 'group.php',
'S_HIDDEN_FIELDS' => $s_hidden_fields
]);
} else {
if (IS_ADMIN) {
redirect('admin/admin_groups.php');
} else {
bb_die($lang['NO_GROUPS_EXIST']);
}
}
} elseif (isset($_POST['joingroup']) && $_POST['joingroup']) {
if ($group_info['group_type'] != GROUP_OPEN) {
bb_die($lang['THIS_CLOSED_GROUP']);
}
$sql = "SELECT g.group_id, g.group_name, ug.user_id, u.user_email, u.username, u.user_lang
FROM " . BB_GROUPS . " g
LEFT JOIN " . BB_USERS . " u ON(u.user_id = g.group_moderator)
LEFT JOIN " . BB_USER_GROUP . " ug ON(ug.group_id = g.group_id AND ug.user_id = {$userdata['user_id']})
WHERE g.group_id = $group_id
AND group_single_user = 0
AND g.group_type = " . GROUP_OPEN . "
LIMIT 1";
$row = $moderator = DB()->fetch_row($sql);
if (!$row['group_id']) {
bb_die($lang['NO_GROUPS_EXIST']);
}
if ($row['user_id']) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['ALREADY_MEMBER_GROUP']);
}
\TorrentPier\Legacy\Group::add_user_into_group($group_id, $userdata['user_id'], 1, TIMENOW);
if (config()->get('group_send_email')) {
// Sending email
$emailer = new TorrentPier\Emailer();
$emailer->set_to($moderator['user_email'], $moderator['username']);
$emailer->set_subject($lang['EMAILER_SUBJECT']['GROUP_REQUEST']);
$emailer->set_template('group_request', $moderator['user_lang']);
$emailer->assign_vars([
'USER' => $userdata['username'],
'GROUP_MODERATOR' => $moderator['username'],
'U_GROUP' => make_url(GROUP_URL . $group_id)
]);
$emailer->send();
}
set_die_append_msg(group_id: $group_id);
bb_die($lang['GROUP_JOINED']);
} elseif (!empty($_POST['unsub']) || !empty($_POST['unsubpending'])) {
\TorrentPier\Legacy\Group::delete_user_group($group_id, $userdata['user_id']);
set_die_append_msg(group_id: $group_id);
bb_die($lang['UNSUB_SUCCESS']);
} else {
// Handle Additions, removals, approvals and denials
$group_moderator = $group_info['group_moderator'];
if (!empty($_POST['add']) || !empty($_POST['remove']) || !empty($_POST['approve']) || !empty($_POST['deny'])) {
if (!$is_moderator) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['NOT_GROUP_MODERATOR']);
}
if (!empty($_POST['add'])) {
if (isset($_POST['username']) && !($row = get_userdata($_POST['username'], true))) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['COULD_NOT_ADD_USER']);
}
// Prevent adding moderator
if ($row['user_id'] == $group_moderator) {
set_die_append_msg(group_id: $group_id);
bb_die(sprintf($lang['USER_IS_MOD_GROUP'], profile_url($row)));
}
// Prevent infinity user adding into group
if ($is_member = DB()->fetch_row("SELECT user_id FROM " . BB_USER_GROUP . " WHERE group_id = $group_id AND user_id = " . $row['user_id'] . " LIMIT 1")) {
if ($is_member['user_id']) {
set_die_append_msg(group_id: $group_id);
bb_die(sprintf($lang['USER_IS_MEMBER_GROUP'], profile_url($row)));
}
}
\TorrentPier\Legacy\Group::add_user_into_group($group_id, $row['user_id']);
if (config()->get('group_send_email')) {
// Sending email
$emailer = new TorrentPier\Emailer();
$emailer->set_to($row['user_email'], $row['username']);
$emailer->set_subject($lang['EMAILER_SUBJECT']['GROUP_ADDED']);
$emailer->set_template('group_added', $row['user_lang']);
$emailer->assign_vars([
'GROUP_NAME' => $group_info['group_name'],
'U_GROUP' => make_url(GROUP_URL . $group_id)
]);
$emailer->send();
}
} else {
if (((!empty($_POST['approve']) || !empty($_POST['deny'])) && !empty($_POST['pending_members'])) || (!empty($_POST['remove']) && !empty($_POST['members']))) {
$members = (!empty($_POST['approve']) || !empty($_POST['deny'])) ? $_POST['pending_members'] : $_POST['members'];
$sql_in = [];
foreach ($members as $members_id) {
$sql_in[] = (int)$members_id;
}
if (!$sql_in = implode(',', $sql_in)) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['NONE_SELECTED']);
}
if (!empty($_POST['approve'])) {
DB()->query("
UPDATE " . BB_USER_GROUP . " SET
user_pending = 0
WHERE user_id IN($sql_in)
AND group_id = $group_id
");
\TorrentPier\Legacy\Group::update_user_level($sql_in);
} elseif (!empty($_POST['deny']) || !empty($_POST['remove'])) {
DB()->query("
DELETE FROM " . BB_USER_GROUP . "
WHERE user_id IN($sql_in)
AND group_id = $group_id
");
if (!empty($_POST['remove'])) {
\TorrentPier\Legacy\Group::update_user_level($sql_in);
}
}
// Email users when they are approved
if (!empty($_POST['approve']) && config()->get('group_send_email')) {
$sql_select = "SELECT username, user_email, user_lang
FROM " . BB_USERS . "
WHERE user_id IN($sql_in)";
if (!$result = DB()->sql_query($sql_select)) {
bb_die('Could not get user email information');
}
foreach (DB()->fetch_rowset($sql_select) as $row) {
// Sending email
$emailer = new TorrentPier\Emailer();
$emailer->set_to($row['user_email'], $row['username']);
$emailer->set_subject($lang['EMAILER_SUBJECT']['GROUP_APPROVED']);
$emailer->set_template('group_approved', $row['user_lang']);
$emailer->assign_vars([
'GROUP_NAME' => $group_info['group_name'],
'U_GROUP' => make_url(GROUP_URL . $group_id)
]);
$emailer->send();
}
}
}
}
}
// END approve or deny
// Get moderator details for this group
$group_moderator = DB()->fetch_row("
SELECT *
FROM " . BB_USERS . "
WHERE user_id = " . $group_info['group_moderator'] . "
");
// Current user membership
$is_group_member = $is_group_pending_member = false;
$sql = "SELECT user_pending
FROM " . BB_USER_GROUP . "
WHERE group_id = $group_id
AND user_id = " . $userdata['user_id'] . "
LIMIT 1";
if ($row = DB()->fetch_row($sql)) {
if ($row['user_pending'] == 0) {
$is_group_member = true;
} else {
$is_group_pending_member = true;
}
}
if ($userdata['user_id'] == $group_moderator['user_id']) {
$group_details = $lang['ARE_GROUP_MODERATOR'];
$s_hidden_fields = '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
} elseif ($is_group_member || $is_group_pending_member) {
$template->assign_vars([
'SHOW_UNSUBSCRIBE_CONTROLS' => true,
'CONTROL_NAME' => ($is_group_member) ? 'unsub' : 'unsubpending',
]);
$group_details = ($is_group_pending_member) ? $lang['PENDING_THIS_GROUP'] : $lang['MEMBER_THIS_GROUP'];
$s_hidden_fields = '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
} elseif (IS_GUEST) {
$group_details = $lang['LOGIN_TO_JOIN'];
$s_hidden_fields = '';
} else {
if ($group_info['group_type'] == GROUP_OPEN) {
$template->assign_var('SHOW_SUBSCRIBE_CONTROLS');
$group_details = $lang['THIS_OPEN_GROUP'];
$s_hidden_fields = '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
} elseif ($group_info['group_type'] == GROUP_CLOSED) {
$group_details = $lang['THIS_CLOSED_GROUP'];
$s_hidden_fields = '';
} elseif ($group_info['group_type'] == GROUP_HIDDEN) {
$group_details = $lang['THIS_HIDDEN_GROUP'];
$s_hidden_fields = '';
}
}
// Add the moderator
$username = $group_moderator['username'];
$user_id = $group_moderator['user_id'];
$moderator_info = generate_user_info($group_moderator, $is_moderator);
$group_type = '';
if ($group_info['group_type'] == GROUP_OPEN) {
$group_type = $lang['GROUP_OPEN'];
} elseif ($group_info['group_type'] == GROUP_CLOSED) {
$group_type = $lang['GROUP_CLOSED'];
} elseif ($group_info['group_type'] == GROUP_HIDDEN) {
$group_type = $lang['GROUP_HIDDEN'];
}
$i = 0;
$template->assign_vars([
'ROW_NUMBER' => $i + ($start + 1),
'GROUP_INFO' => true,
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'GROUP_NAME' => htmlCHR($group_info['group_name']),
'GROUP_DESCRIPTION' => bbcode2html($group_info['group_description']),
'GROUP_SIGNATURE' => bbcode2html($group_info['group_signature']),
'GROUP_AVATAR' => get_avatar(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id']),
'GROUP_DETAILS' => $group_details,
'GROUP_TIME' => !empty($group_info['group_time']) ? sprintf('%s <span class="signature">(%s)</span>', bb_date($group_info['group_time']), delta_time($group_info['group_time'])) : $lang['NONE'],
'MOD_USER' => profile_url($group_moderator),
'MOD_AVATAR' => $moderator_info['avatar'],
'MOD_FROM' => $moderator_info['from'],
'MOD_JOINED' => $moderator_info['joined'],
'MOD_JOINED_RAW' => $moderator_info['joined_raw'],
'MOD_POSTS' => $moderator_info['posts'],
'MOD_PM' => $moderator_info['pm'],
'MOD_EMAIL' => $moderator_info['email'],
'MOD_WWW' => $moderator_info['www'],
'MOD_TIME' => !empty($group_info['mod_time']) ? sprintf('%s <span class="signature">(%s)</span>', bb_date($group_info['mod_time']), delta_time($group_info['mod_time'])) : $lang['NONE'],
'MOD_TIME_RAW' => !empty($group_info['mod_time']) ? $group_info['mod_time'] : '',
'U_SEARCH_USER' => 'search.php?mode=searchuser',
'U_SEARCH_RELEASES' => "tracker.php?srg=$group_id",
'U_GROUP_RELEASES' => GROUP_URL . $group_id . "&view=releases",
'U_GROUP_MEMBERS' => GROUP_URL . $group_id . "&view=members",
'U_GROUP_CONFIG' => "group_edit.php?" . POST_GROUPS_URL . "=$group_id",
'RELEASE_GROUP' => (bool)$group_info['release_group'],
'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
'S_GROUP_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? ' checked' : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? ' checked' : '',
'S_GROUP_HIDDEN_CHECKED' => ($group_info['group_type'] == GROUP_HIDDEN) ? ' checked' : '',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order,
'S_GROUP_ACTION' => GROUP_URL . $group_id,
]);
switch ($view_mode) {
case 'releases':
// TODO Correct SQL to posts with attach and limit them, optimization
if (!$group_info['release_group']) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['NOT_A_RELEASE_GROUP']);
}
// Count releases for pagination
$all_releases = DB()->fetch_rowset("
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_TOPICS . " t ON(p.topic_id = t.topic_id)
LEFT JOIN " . BB_FORUMS . " f ON(p.forum_id= f.forum_id)
LEFT JOIN " . BB_USERS . " u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $rel_limit
");
$count_releases = count($all_releases);
generate_pagination(GROUP_URL . $group_id . "&amp;view=releases", $count_releases, $per_page, $start);
$sql = "
SELECT p.topic_id, p.forum_id, p.poster_id, t.topic_title, t.topic_time, f.forum_name, u.username, u.avatar_ext_id, u.user_opt, u.user_rank
FROM " . BB_POSTS . " p
LEFT JOIN " . BB_TOPICS . " t ON(p.topic_id = t.topic_id)
LEFT JOIN " . BB_FORUMS . " f ON(p.forum_id= f.forum_id)
LEFT JOIN " . BB_USERS . " u ON(p.poster_id = u.user_id)
WHERE p.poster_rg_id = $group_id
ORDER BY t.topic_time DESC
LIMIT $start, $per_page
";
if (!$releases = DB()->fetch_rowset($sql)) {
set_die_append_msg(group_id: $group_id);
bb_die($lang['NO_SEARCH_MATCH']);
}
foreach ($releases as $i => $release) {
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('releases', [
'ROW_NUMBER' => $i + ($start + 1),
'ROW_CLASS' => $row_class,
'RELEASER' => profile_url(['user_id' => $release['poster_id'], 'username' => $release['username'], 'user_rank' => $release['user_rank']]),
'AVATAR_IMG' => get_avatar($release['poster_id'], $release['avatar_ext_id'], !bf($release['user_opt'], 'user_opt', 'dis_avatar'), 50, 50),
'RELEASE_NAME' => sprintf('<a href="%s">%s</a>', TOPIC_URL . $release['topic_id'], htmlCHR($release['topic_title'])),
'RELEASE_TIME' => bb_date($release['topic_time']),
'RELEASE_FORUM' => sprintf('<a href="%s">%s</a>', FORUM_URL . $release['forum_id'], htmlCHR($release['forum_name'])),
]);
}
$template->assign_vars(['RELEASES' => true]);
break;
case 'members':
default:
// Members
$count_members = DB()->fetch_rowset("
SELECT u.username, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> " . $group_moderator['user_id'] . "
AND u.user_id = ug.user_id
ORDER BY u.username
");
$count_members = count($count_members);
// Get user information for this group
$modgroup_pending_count = 0;
// Members
$group_members = DB()->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, ug.user_pending, ug.user_time
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
WHERE ug.group_id = $group_id
AND ug.user_pending = 0
AND ug.user_id <> " . $group_moderator['user_id'] . "
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT $start, $per_page
");
$members_count = count($group_members);
generate_pagination(GROUP_URL . $group_id, $count_members, $per_page, $start);
// Dump out the remaining users
foreach ($group_members as $i => $member) {
$user_id = $member['user_id'];
$member_info = generate_user_info($member, $is_moderator);
if ($group_info['group_type'] != GROUP_HIDDEN || $is_group_member || $is_moderator) {
$row_class = !($i % 2) ? 'row1' : 'row2';
$template->assign_block_vars('member', [
'ROW_NUMBER' => $i + ($start + 1),
'ROW_CLASS' => $row_class,
'USER' => profile_url($member),
'AVATAR_IMG' => $member_info['avatar'],
'FROM' => $member_info['from'],
'JOINED' => $member_info['joined'],
'JOINED_RAW' => $member_info['joined_raw'],
'POSTS' => $member_info['posts'],
'USER_ID' => $user_id,
'PM' => $member_info['pm'],
'EMAIL' => $member_info['email'],
'WWW' => $member_info['www'],
'TIME' => $member_info['user_time'],
'TIME_RAW' => $member_info['user_time_raw']
]);
if ($is_moderator) {
$template->assign_block_vars('member.switch_mod_option', []);
}
}
}
// No group members
if (!$members_count) {
$template->assign_block_vars('switch_no_members', []);
}
// No group members
if ($group_info['group_type'] == GROUP_HIDDEN && !$is_group_member && !$is_moderator) {
$template->assign_block_vars('switch_hidden_group', []);
}
// Pending
if ($is_moderator) {
$modgroup_pending_list = DB()->fetch_rowset("
SELECT u.username, u.avatar_ext_id, u.user_rank, u.user_id, u.user_opt, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email
FROM " . BB_USER_GROUP . " ug, " . BB_USERS . " u
WHERE ug.group_id = $group_id
AND ug.user_pending = 1
AND u.user_id = ug.user_id
ORDER BY u.username
LIMIT 200
");
$modgroup_pending_count = count($modgroup_pending_list);
}
if ($is_moderator && $modgroup_pending_list) {
foreach ($modgroup_pending_list as $i => $member) {
$user_id = $member['user_id'];
$pending_info = generate_user_info($member, $is_moderator);
$row_class = !($i % 2) ? 'row1' : 'row2';
$user_select = '<input type="checkbox" name="member[]" value="' . $user_id . '">';
$template->assign_block_vars('pending', [
'ROW_CLASS' => $row_class,
'AVATAR_IMG' => $pending_info['avatar'],
'USER' => profile_url($member),
'FROM' => $pending_info['from'],
'JOINED' => $pending_info['joined'],
'JOINED_RAW' => $pending_info['joined_raw'],
'POSTS' => $pending_info['posts'],
'USER_ID' => $user_id,
'PM' => $pending_info['pm'],
'EMAIL' => $pending_info['email'],
'WWW' => $pending_info['www']
]);
}
$template->assign_vars(['PENDING_USERS' => true]);
}
$template->assign_vars(['MEMBERS' => true]);
}
if ($is_moderator) {
$template->assign_block_vars('switch_mod_option', []);
$template->assign_block_vars('switch_add_member', []);
}
}
print_page('group.tpl');

98
group_edit.php Normal file
View file

@ -0,0 +1,98 @@
<?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
*/
define('BB_SCRIPT', 'group_edit');
require __DIR__ . '/common.php';
$page_cfg['include_bbcode_js'] = true;
// Start session management
$user->session_start(['req_login' => true]);
$group_id = isset($_REQUEST[POST_GROUPS_URL]) ? (int)$_REQUEST[POST_GROUPS_URL] : null;
$group_info = [];
$is_moderator = false;
$submit = !empty($_POST['submit']);
if ($group_id) {
if (!$group_info = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
bb_die($lang['GROUP_NOT_EXIST']);
}
if (!$group_info['group_id'] || !$group_info['group_moderator'] || !$group_info['moderator_name']) {
bb_die("Invalid group data [group_id: $group_id]");
}
$is_moderator = ($userdata['user_id'] == $group_info['group_moderator'] || IS_ADMIN);
}
if ($is_moderator) {
// Avatar
if ($submit) {
if (!empty($_FILES['avatar']['name']) && config()->get('group_avatars.up_allowed')) {
$upload = new TorrentPier\Legacy\Common\Upload();
if ($upload->init(config()->get('group_avatars'), $_FILES['avatar']) and $upload->store('avatar', ['user_id' => GROUP_AVATAR_MASK . $group_id, 'avatar_ext_id' => $group_info['avatar_ext_id']])) {
$avatar_ext_id = (int)$upload->file_ext_id;
DB()->query("UPDATE " . BB_GROUPS . " SET avatar_ext_id = $avatar_ext_id WHERE group_id = $group_id LIMIT 1");
} else {
bb_die(implode($upload->errors));
}
}
}
$group_type = '';
if ($group_info['group_type'] == GROUP_OPEN) {
$group_type = $lang['GROUP_OPEN'];
} elseif ($group_info['group_type'] == GROUP_CLOSED) {
$group_type = $lang['GROUP_CLOSED'];
} elseif ($group_info['group_type'] == GROUP_HIDDEN) {
$group_type = $lang['GROUP_HIDDEN'];
}
$s_hidden_fields = '<input type="hidden" name="' . POST_GROUPS_URL . '" value="' . $group_id . '" />';
$template->assign_vars([
'PAGE_TITLE' => $lang['GROUP_CONTROL_PANEL'],
'GROUP_NAME' => htmlCHR($group_info['group_name']),
'GROUP_ID' => $group_id,
'GROUP_DESCRIPTION' => htmlCHR($group_info['group_description']),
'GROUP_SIGNATURE' => htmlCHR($group_info['group_signature']),
'U_GROUP_URL' => GROUP_URL . $group_id,
'RELEASE_GROUP' => (bool)$group_info['release_group'],
'GROUP_TYPE' => $group_type,
'S_GROUP_OPEN_TYPE' => GROUP_OPEN,
'S_GROUP_CLOSED_TYPE' => GROUP_CLOSED,
'S_GROUP_HIDDEN_TYPE' => GROUP_HIDDEN,
'S_GROUP_OPEN_CHECKED' => ($group_info['group_type'] == GROUP_OPEN) ? ' checked' : '',
'S_GROUP_CLOSED_CHECKED' => ($group_info['group_type'] == GROUP_CLOSED) ? ' checked' : '',
'S_GROUP_HIDDEN_CHECKED' => ($group_info['group_type'] == GROUP_HIDDEN) ? ' checked' : '',
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_GROUP_CONFIG_ACTION' => "group_edit.php?" . POST_GROUPS_URL . "=$group_id",
'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], config()->get('group_avatars.max_width'), config()->get('group_avatars.max_height'), humn_size(config()->get('group_avatars.max_size'))),
'AVATAR_IMG' => get_avatar(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id']),
]);
$template->set_filenames(['body' => 'group_edit.tpl']);
$template->assign_vars(['PAGE_TITLE' => $lang['GROUP_CONFIGURATION']]);
require(PAGE_HEADER);
$template->pparse('body');
require(PAGE_FOOTER);
} else {
$redirect = 'index.php';
if ($group_id) {
$redirect = GROUP_URL . $group_id;
}
redirect($redirect);
}

434
index.php Normal file
View file

@ -0,0 +1,434 @@
<?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
*/
define('BB_SCRIPT', 'index');
require __DIR__ . '/common.php';
$page_cfg['load_tpl_vars'] = [
'post_icons'
];
// Show last topic
$show_last_topic = true;
$last_topic_max_len = 28;
// Show online stats
$show_online_users = true;
// Show subforums
$show_subforums = true;
$datastore->enqueue([
'stats',
'moderators',
'cat_forums'
]);
if (config()->get('show_latest_news')) {
$datastore->enqueue([
'latest_news'
]);
}
if (config()->get('show_network_news')) {
$datastore->enqueue([
'network_news'
]);
}
// Init userdata
$user->session_start();
// Set meta description
$page_cfg['meta_description'] = config()->get('site_desc');
// Init main vars
$viewcat = isset($_GET[POST_CAT_URL]) ? (int)$_GET[POST_CAT_URL] : 0;
$lastvisit = IS_GUEST ? TIMENOW : $userdata['user_lastvisit'];
// Caching output
$req_page = 'index_page';
$req_page .= $viewcat ? "_c{$viewcat}" : '';
define('REQUESTED_PAGE', $req_page);
caching_output(IS_GUEST, 'send', REQUESTED_PAGE . '_guest_' . config()->get('default_lang'));
$hide_cat_opt = isset($user->opt_js['h_cat']) ? (string)$user->opt_js['h_cat'] : 0;
$hide_cat_user = array_flip(explode('-', $hide_cat_opt));
$showhide = isset($_GET['sh']) ? (int)$_GET['sh'] : 0;
// Topics read tracks
$tracking_topics = get_tracks('topic');
$tracking_forums = get_tracks('forum');
// Statistics
$stats = $datastore->get('stats');
if ($stats === false) {
$datastore->update('stats');
$stats = $datastore->get('stats');
}
// Forums data
$forums = $datastore->get('cat_forums');
if ($forums === false) {
$datastore->update('cat_forums');
$forums = $datastore->get('cat_forums');
}
$cat_title_html = $forums['cat_title_html'];
$forum_name_html = $forums['forum_name_html'];
$anon = GUEST_UID;
$excluded_forums_csv = $user->get_excluded_forums(AUTH_VIEW);
$excluded_forums_array = $excluded_forums_csv ? explode(',', $excluded_forums_csv) : [];
$only_new = $user->opt_js['only_new'];
// Validate requested category id
if ($viewcat && !($viewcat =& $forums['c'][$viewcat]['cat_id'])) {
redirect('index.php');
}
// Forums
$forums_join_sql = 'f.cat_id = c.cat_id';
$forums_join_sql .= $viewcat ? "
AND f.cat_id = $viewcat
" : '';
$forums_join_sql .= $excluded_forums_csv ? "
AND f.forum_id NOT IN($excluded_forums_csv)
AND f.forum_parent NOT IN($excluded_forums_csv)
" : '';
// Posts
$posts_join_sql = 'p.post_id = f.forum_last_post_id';
$posts_join_sql .= ($only_new == ONLY_NEW_POSTS) ? "
AND p.post_time > $lastvisit
" : '';
$join_p_type = ($only_new == ONLY_NEW_POSTS) ? 'INNER JOIN' : 'LEFT JOIN';
// Topics
$topics_join_sql = 't.topic_last_post_id = p.post_id';
$topics_join_sql .= ($only_new == ONLY_NEW_TOPICS) ? "
AND t.topic_time > $lastvisit
" : '';
$join_t_type = ($only_new == ONLY_NEW_TOPICS) ? 'INNER JOIN' : 'LEFT JOIN';
$sql = "
SELECT f.cat_id, f.forum_id, f.forum_status, f.forum_parent, f.show_on_index,
p.post_id AS last_post_id, p.post_time AS last_post_time,
t.topic_id AS last_topic_id, t.topic_title AS last_topic_title,
u.user_id AS last_post_user_id, u.user_rank AS last_post_user_rank,
IF(p.poster_id = $anon, p.post_username, u.username) AS last_post_username
FROM " . BB_CATEGORIES . ' c
INNER JOIN ' . BB_FORUMS . " f ON($forums_join_sql)
$join_p_type " . BB_POSTS . " p ON($posts_join_sql)
$join_t_type " . BB_TOPICS . " t ON($topics_join_sql)
LEFT JOIN " . BB_USERS . ' u ON(u.user_id = p.poster_id)
ORDER BY c.cat_order, f.forum_order
';
$replace_in_parent = [
'last_post_id',
'last_post_time',
'last_post_user_id',
'last_post_username',
'last_post_user_rank',
'last_topic_title',
'last_topic_id'
];
$cache_name = 'index_sql_' . hash('xxh128', $sql);
if (!$cat_forums = CACHE('bb_cache')->get($cache_name)) {
$cat_forums = [];
foreach (DB()->fetch_rowset($sql) as $row) {
if (!($cat_id = $row['cat_id']) || !($forum_id = $row['forum_id'])) {
continue;
}
if ($parent_id = $row['forum_parent']) {
if (!$parent =& $cat_forums[$cat_id]['f'][$parent_id]) {
$parent = $forums['f'][$parent_id];
$parent['last_post_time'] = 0;
}
if ($row['last_post_time'] > $parent['last_post_time']) {
foreach ($replace_in_parent as $key) {
$parent[$key] = $row[$key];
}
}
if ($show_subforums && $row['show_on_index']) {
$parent['last_sf_id'] = $forum_id;
} else {
continue;
}
} else {
$f =& $forums['f'][$forum_id];
$row['forum_desc'] = $f['forum_desc'];
$row['forum_posts'] = $f['forum_posts'];
$row['forum_topics'] = $f['forum_topics'];
}
$cat_forums[$cat_id]['f'][$forum_id] = $row;
}
CACHE('bb_cache')->set($cache_name, $cat_forums, 180);
unset($row, $forums);
$datastore->rm('cat_forums');
}
// Obtain list of moderators
$moderators = [];
$mod = $datastore->get('moderators');
if ($mod === false) {
$datastore->update('moderators');
$mod = $datastore->get('moderators');
}
if (!empty($mod)) {
foreach ($mod['mod_users'] as $forum_id => $user_ids) {
foreach ($user_ids as $user_id) {
$moderators[$forum_id][] = '<a href="' . PROFILE_URL . $user_id . '">' . $mod['name_users'][$user_id] . '</a>';
}
}
foreach ($mod['mod_groups'] as $forum_id => $group_ids) {
foreach ($group_ids as $group_id) {
$moderators[$forum_id][] = '<a href="' . GROUP_URL . $group_id . '">' . $mod['name_groups'][$group_id] . '</a>';
}
}
}
unset($mod);
$datastore->rm('moderators');
// Build index page
$forums_count = 0;
foreach ($cat_forums as $cid => $c) {
$template->assign_block_vars('h_c', [
'H_C_ID' => $cid,
'H_C_TITLE' => $cat_title_html[$cid],
'H_C_CHEKED' => in_array($cid, preg_split('/[-]+/', $hide_cat_opt)) ? 'checked' : '',
]);
$template->assign_vars(['H_C_AL_MESS' => $hide_cat_opt && !$showhide]);
if (!$showhide && isset($hide_cat_user[$cid]) && !$viewcat) {
continue;
}
$template->assign_block_vars('c', [
'CAT_ID' => $cid,
'CAT_TITLE' => $cat_title_html[$cid],
'U_VIEWCAT' => CAT_URL . $cid,
]);
foreach ($c['f'] as $fid => $f) {
if (!$fname_html =& $forum_name_html[$fid]) {
continue;
}
$is_sf = $f['forum_parent'];
$forums_count++;
$new = is_unread($f['last_post_time'], $f['last_topic_id'], $f['forum_id']) ? '_new' : '';
$folder_image = $is_sf ? $images["icon_minipost{$new}"] : $images["forum{$new}"];
if ($f['forum_status'] == FORUM_LOCKED) {
$folder_image = $is_sf ? $images['icon_minipost'] : $images['forum_locked'];
}
if ($is_sf) {
$template->assign_block_vars('c.f.sf', [
'SF_ID' => $fid,
'SF_NAME' => $fname_html,
'SF_NEW' => $new ? ' new' : ''
]);
continue;
}
$template->assign_block_vars('c.f', [
'FORUM_FOLDER_IMG' => $folder_image,
'FORUM_ID' => $fid,
'FORUM_NAME' => $fname_html,
'FORUM_DESC' => $f['forum_desc'],
'POSTS' => commify($f['forum_posts']),
'TOPICS' => commify($f['forum_topics']),
'LAST_SF_ID' => $f['last_sf_id'] ?? null,
'MODERATORS' => isset($moderators[$fid]) ? implode(', ', $moderators[$fid]) : '',
'FORUM_FOLDER_ALT' => $new ? $lang['NEW'] : $lang['OLD']
]);
if ($f['last_post_id']) {
$template->assign_block_vars('c.f.last', [
'LAST_TOPIC_ID' => $f['last_topic_id'],
'LAST_TOPIC_TIP' => $f['last_topic_title'],
'LAST_TOPIC_TITLE' => str_short($f['last_topic_title'], $last_topic_max_len),
'LAST_POST_TIME' => bb_date($f['last_post_time'], config()->get('last_post_date_format')),
'LAST_POST_USER' => profile_url(['username' => str_short($f['last_post_username'], 15), 'user_id' => $f['last_post_user_id'], 'user_rank' => $f['last_post_user_rank']]),
]);
}
}
}
$template->assign_vars([
'SHOW_FORUMS' => $forums_count,
'SHOW_MAP' => isset($_GET['map']) && !IS_GUEST,
'PAGE_TITLE' => $viewcat ? $cat_title_html[$viewcat] : $lang['HOME'],
'NO_FORUMS_MSG' => $only_new ? $lang['NO_NEW_POSTS'] : $lang['NO_FORUMS'],
'TOTAL_TOPICS' => sprintf($lang['POSTED_TOPICS_TOTAL'], $stats['topiccount']),
'TOTAL_POSTS' => sprintf($lang['POSTED_ARTICLES_TOTAL'], $stats['postcount']),
'TOTAL_USERS' => sprintf($lang['REGISTERED_USERS_TOTAL'], $stats['usercount']),
'TOTAL_GENDER' => config()->get('gender') ? sprintf(
$lang['USERS_TOTAL_GENDER'],
$stats['male'],
$stats['female'],
$stats['unselect']
) : '',
'NEWEST_USER' => sprintf($lang['NEWEST_USER'], profile_url($stats['newestuser'])),
// Tracker stats
'TORRENTS_STAT' => config()->get('tor_stats') ? sprintf(
$lang['TORRENTS_STAT'],
$stats['torrentcount'],
humn_size($stats['size'])
) : '',
'PEERS_STAT' => config()->get('tor_stats') ? sprintf(
$lang['PEERS_STAT'],
$stats['peers'],
$stats['seeders'],
$stats['leechers']
) : '',
'SPEED_STAT' => config()->get('tor_stats') ? sprintf(
$lang['SPEED_STAT'],
humn_size($stats['speed']) . '/s'
) : '',
'SHOW_MOD_INDEX' => config()->get('show_mod_index'),
'FORUM_IMG' => $images['forum'],
'FORUM_NEW_IMG' => $images['forum_new'],
'FORUM_LOCKED_IMG' => $images['forum_locked'],
'SHOW_ONLY_NEW_MENU' => true,
'ONLY_NEW_POSTS_ON' => $only_new == ONLY_NEW_POSTS,
'ONLY_NEW_TOPICS_ON' => $only_new == ONLY_NEW_TOPICS,
'U_SEARCH_NEW' => 'search.php?new=1',
'U_SEARCH_SELF_BY_MY' => "search.php?uid={$userdata['user_id']}&amp;o=1",
'U_SEARCH_LATEST' => 'search.php?search_id=latest',
'U_SEARCH_UNANSWERED' => 'search.php?search_id=unanswered',
'U_ATOM_FEED' => is_file(config()->get('atom.path') . '/f/0.atom') ? make_url(config()->get('atom.url') . '/f/0.atom') : false,
'SHOW_LAST_TOPIC' => $show_last_topic,
'BOARD_START' => config()->get('show_board_start_index') ? ($lang['BOARD_STARTED'] . ':&nbsp;' . '<b>' . bb_date(config()->get('board_startdate')) . '</b>') : false,
]);
// Set tpl vars for bt_userdata
if (config()->get('bt_show_dl_stat_on_index') && !IS_GUEST) {
show_bt_userdata($userdata['user_id']);
}
// Latest news
if (config()->get('show_latest_news')) {
$latest_news = $datastore->get('latest_news');
if ($latest_news === false) {
$datastore->update('latest_news');
$latest_news = $datastore->get('latest_news');
}
$template->assign_vars(['SHOW_LATEST_NEWS' => true]);
foreach ($latest_news as $news) {
if (in_array($news['forum_id'], $excluded_forums_array)) {
continue;
}
$template->assign_block_vars('news', [
'NEWS_TOPIC_ID' => $news['topic_id'],
'NEWS_TITLE' => str_short(censor()->censorString($news['topic_title']), config()->get('max_news_title')),
'NEWS_TIME' => bb_date($news['topic_time'], 'd-M', false),
'NEWS_IS_NEW' => is_unread($news['topic_time'], $news['topic_id'], $news['forum_id']),
]);
}
}
// Network news
if (config()->get('show_network_news')) {
$network_news = $datastore->get('network_news');
if ($network_news === false) {
$datastore->update('network_news');
$network_news = $datastore->get('network_news');
}
$template->assign_vars(['SHOW_NETWORK_NEWS' => true]);
foreach ($network_news as $net) {
if (in_array($net['forum_id'], $excluded_forums_array)) {
continue;
}
$template->assign_block_vars('net', [
'NEWS_TOPIC_ID' => $net['topic_id'],
'NEWS_TITLE' => str_short(censor()->censorString($net['topic_title']), config()->get('max_net_title')),
'NEWS_TIME' => bb_date($net['topic_time'], 'd-M', false),
'NEWS_IS_NEW' => is_unread($net['topic_time'], $net['topic_id'], $net['forum_id']),
]);
}
}
if (config()->get('birthday_check_day') && config()->get('birthday_enabled')) {
$week_list = $today_list = [];
$week_all = $today_all = false;
if (!empty($stats['birthday_week_list'])) {
shuffle($stats['birthday_week_list']);
foreach ($stats['birthday_week_list'] as $i => $week) {
if ($i >= 5) {
$week_all = true;
continue;
}
$week_list[] = profile_url($week) . ' <span class="small">(' . birthday_age(date('Y-m-d', strtotime('-1 year', strtotime($week['user_birthday'])))) . ')</span>';
}
$week_all = $week_all ? '&nbsp;<a class="txtb" href="#" onclick="ajax.exec({action: \'index_data\', mode: \'birthday_week\'}); return false;" title="' . $lang['ALL'] . '">...</a>' : '';
$week_list = sprintf($lang['BIRTHDAY_WEEK'], config()->get('birthday_check_day'), implode(', ', $week_list)) . $week_all;
} else {
$week_list = sprintf($lang['NOBIRTHDAY_WEEK'], config()->get('birthday_check_day'));
}
if (!empty($stats['birthday_today_list'])) {
shuffle($stats['birthday_today_list']);
foreach ($stats['birthday_today_list'] as $i => $today) {
if ($i >= 5) {
$today_all = true;
continue;
}
$today_list[] = profile_url($today) . ' <span class="small">(' . birthday_age($today['user_birthday']) . ')</span>';
}
$today_all = $today_all ? '&nbsp;<a class="txtb" href="#" onclick="ajax.exec({action: \'index_data\', mode: \'birthday_today\'}); return false;" title="' . $lang['ALL'] . '">...</a>' : '';
$today_list = $lang['BIRTHDAY_TODAY'] . implode(', ', $today_list) . $today_all;
} else {
$today_list = $lang['NOBIRTHDAY_TODAY'];
}
$template->assign_vars([
'WHOSBIRTHDAY_WEEK' => $week_list,
'WHOSBIRTHDAY_TODAY' => $today_list
]);
}
// Allow cron
if (IS_AM) {
if (is_file(CRON_RUNNING)) {
if (is_file(CRON_ALLOWED)) {
unlink(CRON_ALLOWED);
}
rename(CRON_RUNNING, CRON_ALLOWED);
}
}
// Display page
define('SHOW_ONLINE', $show_online_users);
if (isset($_GET['map'])) {
$template->assign_vars(['PAGE_TITLE' => $lang['FORUM_MAP']]);
}
print_page('index.tpl');

51
info.php Normal file
View file

@ -0,0 +1,51 @@
<?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
*/
define('BB_SCRIPT', 'info');
require __DIR__ . '/common.php';
// Start session management
$user->session_start();
$info = [];
$htmlDir = LANG_DIR . 'html/';
$show = isset($_REQUEST['show']) ? (string)$_REQUEST['show'] : '';
switch ($show) {
case 'advert':
$info['title'] = $lang['ADVERT'];
$info['src'] = 'advert.html';
break;
case 'copyright_holders':
$info['title'] = $lang['COPYRIGHT_HOLDERS'];
$info['src'] = 'copyright_holders.html';
break;
case 'user_agreement':
$info['title'] = $lang['USER_AGREEMENT'];
$info['src'] = 'user_agreement.html';
break;
default:
case 'not_found':
$info['title'] = $lang['NOT_FOUND'];
$info['src'] = 'not_found.html';
break;
}
$require = is_file($htmlDir . $info['src']) ? ($htmlDir . $info['src']) : false;
$template->assign_vars([
'PAGE_TITLE' => mb_strtoupper($info['title'], DEFAULT_CHARSET),
'REQUIRE' => $require ? file_get_contents($require) : $lang['NOT_FOUND'],
]);
print_page('info.tpl', 'simple');

331
install.php Normal file
View file

@ -0,0 +1,331 @@
<?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
*/
define('BB_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
define('BB_PATH', BB_ROOT);
// Check CLI mode
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');
}
// Get all constants
require_once BB_ROOT . 'library/defines.php';
// Include CLI functions
require INC_DIR . '/functions_cli.php';
/**
* System requirements
*/
const CHECK_REQUIREMENTS = [
'php_min_version' => '8.2.0',
'ext_list' => [
'json',
'curl',
'readline',
'mysqli',
'bcmath',
'mbstring',
'intl',
'xml',
'xmlwriter',
'zip',
'gd'
],
];
// Welcoming message
out("--- TorrentPier Installer ---\n", 'info');
// Checking extensions
out("- Checking installed extensions...", 'info');
// [1] Check PHP Version
if (!version_compare(PHP_VERSION, CHECK_REQUIREMENTS['php_min_version'], '>=')) {
out("- TorrentPier requires PHP version " . CHECK_REQUIREMENTS['php_min_version'] . "+ Your PHP version " . PHP_VERSION, 'warning');
}
// [2] Check installed PHP Extensions on server
foreach (CHECK_REQUIREMENTS['ext_list'] as $ext) {
if (!extension_loaded($ext)) {
out("- ext-$ext not installed. Check out php.ini file", 'error');
if (!defined('EXTENSIONS_NOT_INSTALLED')) {
define('EXTENSIONS_NOT_INSTALLED', true);
}
} else {
out("- ext-$ext installed!");
}
}
if (!defined('EXTENSIONS_NOT_INSTALLED')) {
out("- All extensions are installed!\n", 'success');
} else {
exit;
}
// Check if already installed
if (is_file(BB_ROOT . '.env')) {
out('- TorrentPier already installed', 'warning');
echo 'Are you sure want to re-install TorrentPier? [y/N]: ';
if (str_starts_with(mb_strtolower(trim(readline())), 'y')) {
out("\n- Re-install process started...", 'info');
// environment
if (is_file(BB_ROOT . '.env')) {
if (unlink(BB_ROOT . '.env')) {
out('- Environment file successfully removed!');
} else {
out('- Cannot remove environment (.env) file. Delete it manually', 'error');
exit;
}
}
// composer.phar
if (is_file(BB_ROOT . 'composer.phar')) {
if (unlink(BB_ROOT . 'composer.phar')) {
out("- composer.phar file successfully removed!");
} else {
out('- Cannot remove composer.phar file. Delete it manually', 'error');
exit;
}
}
// composer dir
if (is_dir(BB_ROOT . 'vendor')) {
removeDir(BB_ROOT . 'vendor', true);
if (!is_dir(BB_ROOT . 'vendor')) {
out("- Composer directory successfully removed!");
} else {
out('- Cannot remove Composer directory. Delete it manually', 'error');
exit;
}
}
out("- Re-install process completed!\n", 'success');
out('- Starting installation...', 'info');
} else {
exit;
}
}
// Applying permissions
out("- Applying permissions for folders...", 'info');
chmod_r(BB_ROOT . 'data', 0755, 0644);
chmod_r(BB_ROOT . 'internal_data', 0755, 0644);
chmod_r(BB_ROOT . 'sitemap', 0755, 0644);
out("- Permissions successfully applied!\n", 'success');
// Check composer installation
if (!is_file(BB_ROOT . 'vendor/autoload.php')) {
out('- Hmm, it seems there are no Composer dependencies', 'info');
// Downloading composer
if (!is_file(BB_ROOT . 'composer.phar')) {
out('- Downloading Composer...', 'info');
if (copy('https://getcomposer.org/installer', BB_ROOT . 'composer-setup.php')) {
out("- Composer successfully downloaded!\n", 'success');
runProcess('php ' . BB_ROOT . 'composer-setup.php --install-dir=' . BB_ROOT);
} else {
out('- Cannot download Composer. Please, download it (composer.phar) manually', 'error');
exit;
}
if (is_file(BB_ROOT . 'composer-setup.php')) {
if (unlink(BB_ROOT . 'composer-setup.php')) {
out("- Composer installation file successfully removed!\n", 'success');
} else {
out('- Cannot remove Composer installation file (composer-setup.php). Please, delete it manually', 'warning');
}
}
} else {
out("- composer.phar file found!\n", 'success');
}
// Installing dependencies
if (is_file(BB_ROOT . 'composer.phar')) {
out('- Installing dependencies...', 'info');
runProcess('php ' . BB_ROOT . 'composer.phar install --no-interaction --no-ansi');
define('COMPOSER_COMPLETED', true);
} else {
out('- composer.phar not found. Please, download it (composer.phar) manually', 'error');
exit;
}
} else {
out('- Composer dependencies are present!', 'success');
out("- Note: Remove 'vendor' folder if you want to re-install dependencies\n");
}
// Check composer dependencies
if (defined('COMPOSER_COMPLETED')) {
if (is_file(BB_ROOT . 'vendor/autoload.php')) {
out("- Completed! Composer dependencies are installed!\n", 'success');
} else {
exit;
}
}
// Preparing ENV
if (is_file(BB_ROOT . '.env.example') && !is_file(BB_ROOT . '.env')) {
if (copy(BB_ROOT . '.env.example', BB_ROOT . '.env')) {
out("- Environment file created!\n", 'success');
} else {
out('- Cannot create environment file', 'error');
exit;
}
}
// Editing ENV file
$DB_HOST = 'localhost';
$DB_PORT = 3306;
$DB_DATABASE = '';
$DB_USERNAME = '';
$DB_PASSWORD = '';
if (is_file(BB_ROOT . '.env')) {
out("--- Configuring TorrentPier ---", 'info');
$envContent = file_get_contents(BB_ROOT . '.env');
if ($envContent === false) {
out('- Cannot open environment file', 'error');
exit;
}
$envLines = explode("\n", $envContent);
$editedLines = [];
foreach ($envLines as $line) {
if (trim($line) !== '' && !str_starts_with($line, '#')) {
$parts = explode('=', $line, 2);
$key = trim($parts[0]);
$value = (!empty($parts[1]) && $key !== 'DB_PASSWORD') ? trim($parts[1]) : '';
out("\nCurrent value of $key: $value", 'debug');
echo "Enter a new value for $key (or leave empty to not change): ";
$newValue = trim(readline());
if (!empty($newValue) || $key === 'DB_PASSWORD') {
if ($key === 'TP_HOST') {
if (!preg_match('/^https?:\/\//', $newValue)) {
$newValue = 'https://' . $newValue;
}
$newValue = parse_url($newValue, PHP_URL_HOST);
}
$line = "$key=$newValue";
$$key = $newValue;
} else {
$$key = $value;
}
}
$editedLines[] = $line;
}
$newEnvContent = implode("\n", $editedLines);
if (file_put_contents(BB_ROOT . '.env', $newEnvContent)) {
out("- TorrentPier successfully configured!\n", 'success');
} else {
out('- Cannot save environment file', 'error');
exit;
}
} else {
out('- Environment file not found', 'error');
exit;
}
if (!empty($DB_HOST) && !empty($DB_DATABASE) && !empty($DB_USERNAME)) {
out("--- Checking environment settings ---\n", 'info');
// Connecting to database
out("- Trying connect to MySQL...", 'info');
// Checking mysqli extension installed
if (!extension_loaded('mysqli')) {
out('- ext-mysqli not found. Check out php.ini file', 'error');
exit;
}
// Connect to MySQL server
try {
$conn = new mysqli($DB_HOST, $DB_USERNAME, $DB_PASSWORD, port: $DB_PORT);
} catch (mysqli_sql_exception $exception) {
out("- Connection failed: {$exception->getMessage()}", 'error');
exit;
}
if (!$conn->connect_error) {
out('- Connected successfully!', 'success');
}
// Creating database if not exist
if ($conn->query("CREATE DATABASE IF NOT EXISTS $DB_DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) {
out('- Database created successfully!', 'success');
} else {
out("- Cannot create database: $DB_DATABASE", 'error');
exit;
}
$conn->select_db($DB_DATABASE);
// 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;
}
// Run migrations
$migrationResult = runProcess('php vendor/bin/phinx migrate --configuration=' . BB_ROOT . 'phinx.php');
if ($migrationResult !== 0) {
out('- Database migration failed', 'error');
exit;
}
out("- Database setup completed!\n", 'success');
// Autofill host in robots.txt
$robots_txt_file = BB_ROOT . 'robots.txt';
if (isset($TP_HOST) && is_file($robots_txt_file)) {
$content = file_get_contents($robots_txt_file);
$content = str_replace('example.com', $TP_HOST, $content);
file_put_contents($robots_txt_file, $content);
}
if (isset($APP_ENV) && $APP_ENV === 'local') {
if (!is_file(BB_ROOT . 'library/config.local.php')) {
if (copy(BB_ROOT . 'library/config.php', BB_ROOT . 'library/config.local.php')) {
out('- Local configuration file created!', 'success');
} else {
out('- Cannot create library/config.local.php file. You can create it manually, just copy config.php and rename it to config.local.php', 'warning');
}
}
} else {
if (rename(__FILE__, __FILE__ . '_' . hash('xxh128', time()))) {
out("- Installation file renamed!", 'success');
} else {
out('- Cannot rename installation file (' . __FILE__ . '). Please, rename it manually for security reasons', 'warning');
}
}
// Cleanup...
if (is_file(BB_ROOT . '_cleanup.php')) {
out("\n--- Finishing installation (Cleanup) ---\n", 'info');
out('The cleanup process will remove:');
out('- Development documentation (README, CHANGELOG)', 'debug');
out('- Git configuration files', 'debug');
out('- CI/CD pipelines and code analysis tools', 'debug');
out('- Translation and contribution guidelines', 'debug');
echo 'Do you want to delete these files permanently? [y/N]: ';
if (str_starts_with(mb_strtolower(trim(readline())), 'y')) {
out("\n- Cleanup...", 'info');
require_once BB_ROOT . '_cleanup.php';
unlink(BB_ROOT . '_cleanup.php');
} else {
out('- Skipping...', 'info');
}
}
out("\n- Voila! Good luck & have fun!", 'success');
}

27
install/Caddyfile Normal file
View file

@ -0,0 +1,27 @@
# Example Caddy configuration for TorrentPier
example.com {
root * /path/to/root
encode gzip zstd
php_fastcgi unix//run/php/php-fpm.sock
try_files {path} {path}/ /index.php?{query}
file_server
@blocked {
path /install/* /internal_data/* /library/*
path /.ht* /.en*
path /.git/*
path *.sql *.tpl *.db *.inc *.log *.md
}
respond @blocked 404
redir /sitemap.xml /sitemap/sitemap.xml
@html_css_js {
path *.html *.css *.js *.json *.xml *.txt
}
header @html_css_js Content-Type "{mime}; charset=utf-8"
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

39
install/nginx.conf Normal file
View file

@ -0,0 +1,39 @@
# Example nginx configuration for TorrentPier
server {
listen 80; # port
server_name example.com; # your domain
root /path/to/root; # folder with TorrentPier installed
index index.php;
charset utf-8;
location / {
try_files \$uri \$uri/ /index.php?\$args;
}
location ~ \/(install|internal_data|library)\/ {
return 404;
}
location ~ /\.(ht|en) {
return 404;
}
location ~ /\.git {
return 404;
}
location ~ \.(.*sql|tpl|db|inc|log|md)$ {
return 404;
}
rewrite ^/sitemap.xml$ /sitemap/sitemap.xml;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;
}
}

View file

@ -1,5 +0,0 @@
$ mkdir /tmp/nginx
$ mkdir /tmp/nginx/fastcgi_temp
$ mkdir /tmp/nginx/client_temp
$ mkdir /var/log/nginx/

View file

@ -1,31 +0,0 @@
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
fastcgi_temp_path /tmp/nginx/fastcgi_temp 1 2;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

View file

@ -1,145 +0,0 @@
user www www;
worker_processes 4;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#log_format IP .$remote_addr.;
access_log off;
server_tokens off;
reset_timedout_connection on;
sendfile on;
# http://en.wikipedia.org/wiki/Asynchronous_I/O
# aio sendfile;
output_buffers 1 64k;
tcp_nopush on;
tcp_nodelay on;
send_lowat 12000;
log_not_found off;
keepalive_timeout 65;
limit_req_zone $binary_remote_addr zone=one:16m rate=5r/s;
gzip on;
gzip_vary on;
gzip_min_length 2048;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_proxied any;
gzip_disable "msie6";
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
client_max_body_size 10m;
large_client_header_buffers 4 8k;
client_body_temp_path /tmp/nginx/client_temp 1 2;
server {
#listen 80 default sndbuf=32k rcvbuf=8k accept_filter=httpready;
#listen [::]:80 default sndbuf=32k rcvbuf=8k accept_filter=httpready;
listen 80 default sndbuf=32k rcvbuf=8k;
server_name sitedomain.ru;
charset utf8;
access_log off;
location / {
root /var/www;
index index.html index.htm index.php;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# pass the PHP scripts to FastCGI server listening on /tmp/php.sock;
#
location ~ \.php$ {
#limit_req zone=one burst=20 nodelay;
#limit_req_log_level info;
root /var/www;
fastcgi_index index.php;
fastcgi_pass unix:/tmp/php.sock; # 127.0.0.1:9000;
fastcgi_intercept_errors on;
# FreeBSD Optimization
fastcgi_pass_request_body off;
client_body_in_file_only clean;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Old XBTT config
# location ^~ /bt/ {
# access_log off;
# if ( $query_string ~ "^uk=([^&?]{10})[&?]+(.*)$" ) {
# set $uk $1;
# set $qs $2&ip=$remote_addr;
# }
# if ( $query_string ~ "^uk=([^&?]{10})[&?]+((.*&|)ip=.*)$" ) {
# set $uk $1;
# set $qs $2;
# }
# if ( $qs ) {
# rewrite ^.*/([a-z]+)(\.php|)$ /$uk/$1?$qs break;
# }
# rewrite ^/?(.*)$ /$1?ip=$remote_addr&$query_string break;
# proxy_pass http://127.0.0.1:2710/;
# }
# Cached Images
location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {
root /var/www;
access_log off;
expires 30d;
add_header Cache-Control public;
}
location ~ \/admin|backup\/ {
deny all;
# allow YOUR_IP;
}
# Deny folder (Sec. lvl1)
location ~ \/(cache|log|attach_mod|config|includes|language|triggers)\/ {
deny all;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
# deny sql,tpl,db,inc,log
location ~ /\.ht {
deny all;
}
location ~ \.(.*sql|tpl|db|inc|log)$ {
deny all;
}
}
}

View file

@ -1,104 +0,0 @@
source torrentpier
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = pass
sql_db = dbase
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET CHARACTER_SET_CLIENT=utf8
}
source topics: torrentpier
{
sql_query = \
SELECT topic_id, forum_id, topic_title \
FROM bb_topics \
WHERE topic_id BETWEEN $start AND $end
sql_query_range = SELECT MIN(topic_id), MAX(topic_id) FROM bb_topics
sql_range_step = 100000
sql_attr_uint = forum_id
sql_ranged_throttle = 50
sql_query_info = SELECT * FROM bb_topics WHERE topic_id = $id
}
source posts: torrentpier
{
sql_query = \
SELECT pt.post_id, pt.post_text, t.topic_title, t.topic_id, t.forum_id \
FROM bb_posts_text pt \
LEFT JOIN bb_topics t on pt.post_id = t.topic_first_post_id \
WHERE pt.post_id BETWEEN $start AND $end
sql_query_range = SELECT MIN(post_id), MAX(post_id) FROM bb_posts_text
sql_range_step = 100000
sql_attr_uint = topic_id
sql_attr_uint = forum_id
sql_ranged_throttle = 50
sql_query_info = SELECT * FROM bb_posts_text WHERE post_id = $id
}
source users: torrentpier
{
sql_query = \
SELECT user_id, username \
FROM bb_users \
WHERE user_id BETWEEN $start AND $end
sql_query_range = SELECT 1, MAX(user_id) FROM bb_users
sql_range_step = 1000
sql_query_info = SELECT * FROM bb_users WHERE user_id = $id
}
index topics
{
docinfo = extern
morphology = stem_enru
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42C->U+430..U+44C, U+42E..U+42F->U+44E..U+44F, U+430..U+44C, U+44E..U+44F, U+0401->U+0435, U+0451->U+0435, U+042D->U+0435, U+044D->U+0435
min_prefix_len = 0
min_infix_len = 0
min_word_len = 1
min_stemming_len = 4
enable_star = 1
phrase_boundary = :, - , . , $
phrase_boundary_step = 1
html_strip = 1
path = ./sphinx/data/topics
source = topics
}
index posts: topics
{
path = ./sphinx/data/posts
source = posts
}
index users: topics
{
path = ./sphinx/data/users
source = users
}
indexer
{
mem_limit = 256M
}
searchd
{
listen = 127.0.0.1:3312
log = ./sphinx/log/searchd.log
query_log = ./sphinx/log/query.log
read_timeout = 5
max_children = 15
max_matches = 5000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
pid_file = ./sphinx/searchd.pid
}

File diff suppressed because it is too large Load diff

View file

45
library/ajax/avatar.php Normal file
View file

@ -0,0 +1,45 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $lang, $user;
if (!$mode = (string)$this->request['mode']) {
$this->ajax_die('invalid mode (empty)');
}
$user_id = (int)$this->request['user_id'];
if (!$user_id or !$u_data = get_userdata($user_id)) {
$this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
}
if (!IS_ADMIN && $user_id != $user->id) {
$this->ajax_die($lang['NOT_AUTHORISED']);
}
$new_ext_id = 0;
$response = '';
switch ($mode) {
case 'delete':
delete_avatar($user_id, $u_data['avatar_ext_id']);
$response = get_avatar($user_id, $new_ext_id);
break;
default:
$this->ajax_die('Invalid mode: ' . $mode);
}
DB()->query("UPDATE " . BB_USERS . " SET avatar_ext_id = $new_ext_id WHERE user_id = $user_id LIMIT 1");
\TorrentPier\Sessions::cache_rm_user_sessions($user_id);
$this->response['avatar_html'] = $response;

93
library/ajax/callseed.php Normal file
View file

@ -0,0 +1,93 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $userdata, $lang;
if (!config()->get('callseed')) {
$this->ajax_die($lang['MODULE_OFF']);
}
if (!$topic_id = (int)$this->request['topic_id']) {
$this->ajax_die($lang['INVALID_TOPIC_ID']);
}
if (!$t_data = topic_info($topic_id)) {
$this->ajax_die($lang['INVALID_TOPIC_ID_DB']);
}
$forum_id = $t_data['forum_id'];
if ($t_data['seeders'] >= 3) {
$this->ajax_die(sprintf($lang['CALLSEED_HAVE_SEED'], $t_data['seeders']));
} elseif ($t_data['call_seed_time'] >= (TIMENOW - 86400)) {
$time_left = delta_time($t_data['call_seed_time'] + 86400, TIMENOW, 'days');
$this->ajax_die(sprintf($lang['CALLSEED_MSG_SPAM'], $time_left));
} elseif (isset(config()->get('tor_no_tor_act')[$t_data['tor_status']])) {
$this->ajax_die($lang['NOT_AVAILABLE']);
}
$banned_users = ($get_banned_users = get_banned_users()) ? (', ' . implode(', ', $get_banned_users)) : '';
$user_list = DB()->fetch_rowset("
SELECT DISTINCT dl.user_id, u.user_opt, tr.user_id as active_dl
FROM " . BB_BT_DLSTATUS . " dl
LEFT JOIN " . BB_USERS . " u ON(u.user_id = dl.user_id)
LEFT JOIN " . BB_BT_TRACKER . " tr ON(tr.user_id = dl.user_id)
WHERE dl.topic_id = $topic_id
AND dl.user_status IN (" . DL_STATUS_COMPLETE . ", " . DL_STATUS_DOWN . ")
AND dl.user_id NOT IN ({$userdata['user_id']}, " . EXCLUDED_USERS . $banned_users . ")
AND u.user_active = 1
GROUP BY dl.user_id
");
$subject = sprintf($lang['CALLSEED_SUBJECT'], $t_data['topic_title']);
$message = sprintf($lang['CALLSEED_TEXT'], make_url(TOPIC_URL . $topic_id), $t_data['topic_title'], make_url(DL_URL . $t_data['attach_id']));
if ($user_list) {
foreach ($user_list as $row) {
if (!empty($row['active_dl'])) {
continue;
}
if (bf($row['user_opt'], 'user_opt', 'user_callseed')) {
send_pm($row['user_id'], $subject, $message, BOT_UID);
}
}
} else {
send_pm($t_data['poster_id'], $subject, $message, BOT_UID);
}
DB()->query("UPDATE " . BB_BT_TORRENTS . " SET call_seed_time = " . TIMENOW . " WHERE topic_id = $topic_id LIMIT 1");
function topic_info($topic_id)
{
global $lang;
$sql = "
SELECT
tor.poster_id, tor.forum_id, tor.attach_id, tor.call_seed_time, tor.tor_status,
t.topic_title, sn.seeders
FROM " . BB_BT_TORRENTS . " tor
LEFT JOIN " . BB_TOPICS . " t USING(topic_id)
LEFT JOIN " . BB_BT_TRACKER_SNAP . " sn USING(topic_id)
WHERE tor.topic_id = $topic_id
";
if (!$torrent = DB()->fetch_row($sql)) {
bb_die($lang['TOPIC_POST_NOT_EXIST'], 404);
}
return $torrent;
}
$this->response['response'] = $lang['CALLSEED_MSG_OK'];

View file

@ -0,0 +1,139 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $userdata, $lang, $log_action;
if (!$attach_id = (int)$this->request['attach_id']) {
$this->ajax_die($lang['EMPTY_ATTACH_ID']);
}
if (!$mode = (string)$this->request['mode']) {
$this->ajax_die('invalid mode (empty)');
}
$comment = false;
if (config()->get('tor_comment')) {
$comment = (string)$this->request['comment'];
}
$tor = DB()->fetch_row("
SELECT
tor.poster_id, tor.forum_id, tor.topic_id, tor.tor_status, tor.checked_time, tor.checked_user_id, f.cat_id, t.topic_title
FROM " . BB_BT_TORRENTS . " tor
INNER JOIN " . BB_FORUMS . " f ON(f.forum_id = tor.forum_id)
INNER JOIN " . BB_TOPICS . " t ON(t.topic_id = tor.topic_id)
WHERE tor.attach_id = $attach_id
LIMIT 1
");
if (!$tor) {
$this->ajax_die($lang['TORRENT_FAILED']);
}
switch ($mode) {
case 'status':
$new_status = (int)$this->request['status'];
// Check status validity
if (!isset($lang['TOR_STATUS_NAME'][$new_status])) {
$this->ajax_die($lang['TOR_STATUS_FAILED']);
}
if (!isset($this->request['status'])) {
$this->ajax_die($lang['TOR_DONT_CHANGE']);
}
if (!IS_AM) {
$this->ajax_die($lang['NOT_MODERATOR']);
}
// Error if same status
if ($tor['tor_status'] == $new_status) {
$this->ajax_die($lang['TOR_STATUS_DUB']);
}
// Prohibition on changing/assigning CH-status by moderator
if ($new_status == TOR_CLOSED_CPHOLD && !IS_ADMIN) {
$this->ajax_die($lang['TOR_DONT_CHANGE']);
}
// Check rights to change status
if ($tor['tor_status'] == TOR_CLOSED_CPHOLD) {
if (!IS_ADMIN) {
$this->verify_mod_rights($tor['forum_id']);
}
DB()->query("UPDATE " . BB_TOPICS . " SET topic_status = " . TOPIC_UNLOCKED . " WHERE topic_id = {$tor['topic_id']} LIMIT 1");
} else {
$this->verify_mod_rights($tor['forum_id']);
}
// Confirmation of status change set by another moderator
if ($tor['tor_status'] != TOR_NOT_APPROVED && $tor['checked_user_id'] != $userdata['user_id'] && $tor['checked_time'] + 2 * 3600 > TIMENOW) {
if (empty($this->request['confirmed'])) {
$msg = $lang['TOR_STATUS_OF'] . " {$lang['TOR_STATUS_NAME'][$tor['tor_status']]}\n\n";
$msg .= ($username = get_username($tor['checked_user_id'])) ? $lang['TOR_STATUS_CHANGED'] . html_entity_decode($username) . ", " . delta_time($tor['checked_time']) . $lang['TOR_BACK'] . "\n\n" : "";
$msg .= $lang['PROCEED'] . '?';
$this->prompt_for_confirm($msg);
}
}
\TorrentPier\Legacy\Torrent::change_tor_status($attach_id, $new_status);
// Log action
$log_msg = sprintf($lang['TOR_STATUS_LOG_ACTION'], config()->get('tor_icons')[$new_status] . ' <b> ' . $lang['TOR_STATUS_NAME'][$new_status] . '</b>', config()->get('tor_icons')[$tor['tor_status']] . ' <b> ' . $lang['TOR_STATUS_NAME'][$tor['tor_status']] . '</b>');
if ($comment && $comment != $lang['COMMENT']) {
$log_msg .= "<br/>{$lang['COMMENT']}: <b>$comment</b>.";
}
$log_action->mod('mod_topic_change_tor_status', [
'forum_id' => $tor['forum_id'],
'topic_id' => $tor['topic_id'],
'topic_title' => $tor['topic_title'],
'log_msg' => $log_msg . '<br/>-------------',
]);
$this->response['status'] = config()->get('tor_icons')[$new_status] . ' <b> ' . $lang['TOR_STATUS_NAME'][$new_status] . '</b> &middot; ' . profile_url($userdata) . ' &middot; <i>' . delta_time(TIMENOW) . $lang['TOR_BACK'] . '</i>';
if (config()->get('tor_comment') && (($comment && $comment != $lang['COMMENT']) || in_array($new_status, config()->get('tor_reply')))) {
if ($tor['poster_id'] > 0) {
$subject = sprintf($lang['TOR_MOD_TITLE'], $tor['topic_title']);
$message = sprintf($lang['TOR_MOD_MSG'], get_username($tor['poster_id']), make_url(TOPIC_URL . $tor['topic_id']), config()->get('tor_icons')[$new_status] . ' ' . $lang['TOR_STATUS_NAME'][$new_status]);
if ($comment && $comment != $lang['COMMENT']) {
$message .= "\n\n[b]" . $lang['COMMENT'] . '[/b]: ' . $comment;
}
send_pm($tor['poster_id'], $subject, $message, $userdata['user_id']);
\TorrentPier\Sessions::cache_rm_user_sessions($tor['poster_id']);
}
}
break;
case 'status_reply':
if (!config()->get('tor_comment')) {
$this->ajax_die($lang['MODULE_OFF']);
}
$subject = sprintf($lang['TOR_AUTH_TITLE'], $tor['topic_title']);
$message = sprintf($lang['TOR_AUTH_MSG'], get_username($tor['checked_user_id']), make_url(TOPIC_URL . $tor['topic_id']), $tor['topic_title']);
if ($comment && $comment != $lang['COMMENT']) {
$message .= "\n\n[b]" . $lang['COMMENT'] . '[/b]: ' . $comment;
}
send_pm($tor['checked_user_id'], $subject, $message, $userdata['user_id']);
\TorrentPier\Sessions::cache_rm_user_sessions($tor['checked_user_id']);
break;
default:
$this->ajax_die('Invalid mode: ' . $mode);
}
$this->response['attach_id'] = $attach_id;

View file

@ -0,0 +1,97 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $userdata, $lang, $log_action;
if (!isset($this->request['attach_id'])) {
$this->ajax_die($lang['EMPTY_ATTACH_ID']);
}
if (!isset($this->request['type'])) {
$this->ajax_die('empty type');
}
$attach_id = (int)$this->request['attach_id'];
$type = (string)$this->request['type'];
if (!$torrent = \TorrentPier\Legacy\Torrent::get_torrent_info($attach_id)) {
$this->ajax_die($lang['INVALID_ATTACH_ID']);
}
if ($torrent['poster_id'] == $userdata['user_id'] && !IS_AM) {
if ($type == 'del_torrent' || $type == 'reg' || $type == 'unreg') {
} else {
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
} elseif (!IS_AM) {
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
$title = $url = '';
switch ($type) {
case 'set_gold':
case 'set_silver':
case 'unset_silver_gold':
if ($type == 'set_silver') {
$tor_type = TOR_TYPE_SILVER;
$tor_type_lang = $lang['SILVER'];
} elseif ($type == 'set_gold') {
$tor_type = TOR_TYPE_GOLD;
$tor_type_lang = $lang['GOLD'];
} else {
$tor_type = TOR_TYPE_DEFAULT;
$tor_type_lang = "{$lang['UNSET_GOLD_TORRENT']} / {$lang['UNSET_SILVER_TORRENT']}";
}
\TorrentPier\Legacy\Torrent::change_tor_type($attach_id, $tor_type);
// Log action
$log_action->mod('mod_topic_change_tor_type', [
'forum_id' => $torrent['forum_id'],
'topic_id' => $torrent['topic_id'],
'topic_title' => $torrent['topic_title'],
'log_msg' => sprintf($lang['TOR_TYPE_LOG_ACTION'], $tor_type_lang),
]);
$title = $lang['CHANGE_TOR_TYPE'];
$url = make_url(TOPIC_URL . $torrent['topic_id']);
break;
case 'reg':
\TorrentPier\Legacy\Torrent::tracker_register($attach_id);
$url = (TOPIC_URL . $torrent['topic_id']);
break;
case 'unreg':
\TorrentPier\Legacy\Torrent::tracker_unregister($attach_id);
$url = (TOPIC_URL . $torrent['topic_id']);
break;
case 'del_torrent':
if (empty($this->request['confirmed'])) {
$this->prompt_for_confirm($lang['DEL_TORRENT']);
}
\TorrentPier\Legacy\Torrent::delete_torrent($attach_id);
$url = make_url(TOPIC_URL . $torrent['topic_id']);
break;
case 'del_torrent_move_topic':
if (empty($this->request['confirmed'])) {
$this->prompt_for_confirm($lang['DEL_MOVE_TORRENT']);
}
\TorrentPier\Legacy\Torrent::delete_torrent($attach_id);
$url = make_url("modcp.php?" . POST_TOPIC_URL . "={$torrent['topic_id']}&mode=move&sid={$userdata['session_id']}");
break;
}
$this->response['url'] = $url;
$this->response['title'] = $title;

View file

@ -0,0 +1,38 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $bf, $lang;
$user_id = (int)$this->request['user_id'];
$new_opt = json_decode($this->request['user_opt'], true, 512, JSON_THROW_ON_ERROR);
if (!$user_id or !$u_data = get_userdata($user_id)) {
$this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
}
if (!is_array($new_opt)) {
$this->ajax_die('invalid new_opt');
}
foreach ($bf['user_opt'] as $opt_name => $opt_bit) {
if (isset($new_opt[$opt_name])) {
setbit($u_data['user_opt'], $opt_bit, !empty($new_opt[$opt_name]));
}
}
DB()->query("UPDATE " . BB_USERS . " SET user_opt = {$u_data['user_opt']} WHERE user_id = $user_id LIMIT 1");
// Remove data from cache
\TorrentPier\Sessions::cache_rm_user_sessions($user_id);
$this->response['resp_html'] = $lang['SAVED'];

View file

@ -0,0 +1,38 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $datastore, $lang;
if (!$ranks = $datastore->get('ranks')) {
$datastore->update('ranks');
$ranks = $datastore->get('ranks');
}
$rank_id = (int)$this->request['rank_id'];
if (!$user_id = (int)$this->request['user_id'] or !$profiledata = get_userdata($user_id)) {
$this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
}
if ($rank_id != 0 && !isset($ranks[$rank_id])) {
$this->ajax_die("invalid rank_id: $rank_id");
}
DB()->query("UPDATE " . BB_USERS . " SET user_rank = $rank_id WHERE user_id = $user_id LIMIT 1");
\TorrentPier\Sessions::cache_rm_user_sessions($user_id);
$user_rank = $rank_id ? '<span class="' . $ranks[$rank_id]['rank_style'] . '">' . $ranks[$rank_id]['rank_title'] . '</span>' : '';
$this->response['html'] = $rank_id ? $lang['AWARDED_RANK'] . "<b> $user_rank </b>" : $lang['SHOT_RANK'];
$this->response['rank_name'] = $rank_id ? $user_rank : $lang['USER'];

View file

@ -0,0 +1,54 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $userdata, $lang;
if (!$group_id = (int)$this->request['group_id'] or !$group_info = \TorrentPier\Legacy\Group::get_group_data($group_id)) {
$this->ajax_die($lang['NO_GROUP_ID_SPECIFIED']);
}
if (!$mode = (string)$this->request['mode']) {
$this->ajax_die('No mode specified');
}
$value = $this->request['value'] = (string)(isset($this->request['value'])) ? $this->request['value'] : 0;
if (!IS_ADMIN && $userdata['user_id'] != $group_info['group_moderator']) {
$this->ajax_die($lang['ONLY_FOR_MOD']);
}
switch ($mode) {
case 'group_name':
case 'group_signature':
case 'group_description':
$value = htmlCHR($value, false, ENT_NOQUOTES);
$this->response['new_value'] = $value;
break;
case 'release_group':
case 'group_type':
$this->response['new_value'] = $value;
break;
case 'delete_avatar':
delete_avatar(GROUP_AVATAR_MASK . $group_id, $group_info['avatar_ext_id']);
$value = 0;
$mode = 'avatar_ext_id';
$this->response['remove_avatar'] = get_avatar(GROUP_AVATAR_MASK . $group_id, $value);
break;
default:
$this->ajax_die('Unknown mode');
}
$value_sql = DB()->escape($value, true);
DB()->query("UPDATE " . BB_GROUPS . " SET $mode = $value_sql WHERE group_id = $group_id LIMIT 1");

View file

@ -0,0 +1,159 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $lang;
if (!$user_id = (int)$this->request['user_id'] or !$profiledata = get_userdata($user_id)) {
$this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
}
if (!$field = (string)$this->request['field']) {
$this->ajax_die('invalid profile field');
}
// Check for demo mode
if (IN_DEMO_MODE && in_array($field, ['username', 'user_email'])) {
$this->ajax_die($lang['CANT_EDIT_IN_DEMO_MODE']);
}
$table = BB_USERS;
$value = $this->request['value'] = (string)(isset($this->request['value'])) ? $this->request['value'] : 0;
switch ($field) {
case 'username':
$value = clean_username($value);
if ($err = \TorrentPier\Validate::username($value)) {
$this->ajax_die($err);
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_email':
$value = htmlCHR($value);
if ($err = \TorrentPier\Validate::email($value)) {
$this->ajax_die($err);
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_website':
if ($value == '' || preg_match('#^https?://[\w\#!$%&~/.\-;:=,?@а-яА-Я\[\]+]+$#iu', $value)) {
$this->response['new_value'] = htmlCHR($value);
} else {
$this->ajax_die($lang['WEBSITE_ERROR']);
}
break;
case 'user_gender':
if (!config()->get('gender')) {
$this->ajax_die($lang['MODULE_OFF']);
}
if (!isset($lang['GENDER_SELECT'][$value])) {
$this->ajax_die($lang['ERROR']);
}
$this->response['new_value'] = $lang['GENDER_SELECT'][$value];
break;
case 'user_birthday':
if (!config()->get('birthday_enabled')) {
$this->ajax_die($lang['MODULE_OFF']);
}
$birthday_date = date_parse($value);
if (!empty($birthday_date['year'])) {
if (strtotime($value) >= TIMENOW) {
$this->ajax_die($lang['WRONG_BIRTHDAY_FORMAT']);
} elseif (bb_date(TIMENOW, 'Y', false) - $birthday_date['year'] > config()->get('birthday_max_age')) {
$this->ajax_die(sprintf($lang['BIRTHDAY_TO_HIGH'], config()->get('birthday_max_age')));
} elseif (bb_date(TIMENOW, 'Y', false) - $birthday_date['year'] < config()->get('birthday_min_age')) {
$this->ajax_die(sprintf($lang['BIRTHDAY_TO_LOW'], config()->get('birthday_min_age')));
}
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_icq':
if ($value && !preg_match('#^\d{6,15}$#', $value)) {
$this->ajax_die($lang['ICQ_ERROR']);
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_skype':
if ($value && !preg_match("#^[a-zA-Z0-9_.\-@,]{6,32}$#", $value)) {
$this->ajax_die($lang['SKYPE_ERROR']);
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_twitter':
if ($value && !preg_match("#^[a-zA-Z0-9_]{1,15}$#", $value)) {
$this->ajax_die($lang['TWITTER_ERROR']);
}
$this->response['new_value'] = $this->request['value'];
break;
case 'user_occ':
case 'user_interests':
$this->response['new_value'] = htmlCHR($value);
break;
case 'u_up_total':
case 'u_down_total':
case 'u_up_release':
case 'u_up_bonus':
if (!IS_ADMIN) {
$this->ajax_die($lang['NOT_ADMIN']);
}
$table = BB_BT_USERS;
$value = (int)$this->request['value'];
if ($value < 0) {
$this->ajax_die($lang['WRONG_INPUT']);
}
foreach (['KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8] as $s => $m) {
if (stripos($this->request['value'], $s) !== false) {
$value *= (1024 ** $m);
break;
}
}
$this->response['new_value'] = humn_size($value, space: ' ');
$btu = get_bt_userdata($user_id);
$btu[$field] = $value;
$this->response['update_ids']['u_ratio'] = (string)get_bt_ratio($btu);
CACHE('bb_cache')->rm('btu_' . $user_id);
break;
case 'user_points':
$value = (float)str_replace(',', '.', $this->request['value']);
$value = sprintf('%.2f', $value);
if ($value < 0.0 || strlen(strstr($value, '.', true)) > 14) {
$this->ajax_die($lang['WRONG_INPUT']);
}
$this->response['new_value'] = $value;
break;
default:
$this->ajax_die("invalid profile field: $field");
}
$value_sql = DB()->escape($value, true);
DB()->query("UPDATE $table SET $field = $value_sql WHERE user_id = $user_id LIMIT 1");
\TorrentPier\Sessions::cache_rm_user_sessions($user_id);
$this->response['edit_id'] = $this->request['edit_id'];

View file

@ -0,0 +1,154 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $lang;
if (!config()->get('torr_server.enabled')) {
$this->ajax_die($lang['MODULE_OFF']);
}
if (config()->get('torr_server.disable_for_guest') && IS_GUEST) {
$this->ajax_die($lang['NEED_TO_LOGIN_FIRST']);
}
$attach_id = $this->request['attach_id'] ?? '';
if (empty($attach_id) || !is_numeric($attach_id)) {
$this->ajax_die($lang['INVALID_ATTACH_ID']);
}
$file_index = $this->request['file_index'] ?? '';
if (empty($file_index) || !is_numeric($file_index)) {
$this->ajax_die("Invalid file index: $file_index");
}
if (!$info_hash = (string)$this->request['info_hash'] or !ctype_xdigit($info_hash)) {
$this->ajax_die("Invalid info_hash: $info_hash");
}
$isAudio = isset($this->request['is_audio']) && $this->request['is_audio'];
// Get ffprobe info from TorrServer
$ffpInfo = (new \TorrentPier\TorrServerAPI())->getFfpInfo($info_hash, $file_index, $attach_id);
$ffpInfo = $ffpInfo->{$file_index};
if (isset($ffpInfo->streams)) {
// Video codec information
$videoCodecIndex = array_search('video', array_column($ffpInfo->streams, 'codec_type'));
if (is_int($videoCodecIndex)) {
$videoCodecInfo = $ffpInfo->streams[$videoCodecIndex];
}
// Audio codec information
$audioTracks = array_filter($ffpInfo->streams, function ($e) {
return $e->codec_type === 'audio';
});
// Audio tracks information
$audioDub = array_map(function ($stream) {
global $lang;
$result = '<span class="warnColor2">' . sprintf($lang['AUDIO_TRACK'], (!isset($stream->index) || $stream->index === 0) ? 1 : $stream->index) . '</span><br/>';
if (isset($stream->tags->language)) {
if (isset($stream->tags->title)) {
$result .= '<b>' . mb_strtoupper($stream->tags->language, DEFAULT_CHARSET) . ' (' . $stream->tags->title . ')' . '</b>';
} else {
$result .= '<b>' . mb_strtoupper($stream->tags->language, DEFAULT_CHARSET) . '</b>';
}
$result .= '<br/>';
}
if (!empty($stream->codec_name)) {
$result .= sprintf($lang['AUDIO_CODEC'], $stream->codec_long_name, mb_strtoupper($stream->codec_name, DEFAULT_CHARSET)) . '<br/>';
}
if (!empty($stream->bit_rate)) {
$result .= sprintf($lang['BITRATE'], humn_bitrate((int)$stream->bit_rate)) . '<br/>';
}
if (!empty($stream->sample_rate)) {
$result .= sprintf($lang['SAMPLE_RATE'], humn_sample_rate((int)$stream->sample_rate)) . '<br/>';
}
if (!empty($stream->channels)) {
$result .= sprintf($lang['CHANNELS'], $stream->channels) . '<br/>';
}
if (!empty($stream->channel_layout)) {
$result .= sprintf($lang['CHANNELS_LAYOUT'], $stream->channel_layout);
}
return $result;
}, $audioTracks);
// Generate output data
$data = [
'filesize' => sprintf($lang['FILESIZE'] . ': <b>%s</b>', humn_size($ffpInfo->format->size)),
'resolution' => (!$isAudio && isset($videoCodecInfo)) ? sprintf($lang['RESOLUTION'], $videoCodecInfo->width . 'x' . $videoCodecInfo->height) : '',
'video_codec' => (!$isAudio && isset($videoCodecInfo->codec_name)) ? sprintf($lang['VIDEO_CODEC'], $videoCodecInfo->codec_long_name, mb_strtoupper($videoCodecInfo->codec_name, DEFAULT_CHARSET)) : '',
'audio_dub' => implode('<hr/>', $audioDub)
];
// Validate output data
$result = '<hr/>';
if (!empty($data['resolution'])) {
$result .= $data['resolution'] . '<br/>';
}
if (!empty($data['filesize'])) {
$result .= $data['filesize'] . '<br/>';
}
if (!empty($data['video_codec'])) {
$result .= $data['video_codec'];
}
if (!empty($data['audio_dub'])) {
$result .= '<hr/>' . $data['audio_dub'];
}
$this->response['ffprobe_data'] = $result;
}
/**
* Bitrate to human-readable format
*
* @param int $bitrate
* @param string $space
* @return string
*/
function humn_bitrate(int $bitrate, string $space = '&nbsp;'): string
{
if ($bitrate >= 1000000) {
$unit = 'Mbps';
$bitrate /= 1000000;
} elseif ($bitrate >= 1000) {
$unit = 'kbps';
$bitrate /= 1000;
} else {
$unit = 'bps';
}
return sprintf('%d', commify($bitrate)) . $space . $unit;
}
/**
* Sample rate to human-readable format
*
* @param int $sample_rate
* @param string $space
* @return string
*/
function humn_sample_rate(int $sample_rate, string $space = '&nbsp;'): string
{
if ($sample_rate >= 1000000) {
$unit = 'Mhz';
} elseif ($sample_rate >= 1000) {
$unit = 'kHz';
} else {
$unit = 'Hz';
}
return sprintf('%.1f', commify($sample_rate)) . $space . $unit;
}
$this->response['file_index'] = $file_index;

View file

@ -0,0 +1,67 @@
<?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('IN_AJAX')) {
die(basename(__FILE__));
}
global $lang, $user;
if (!$user_id = (int)$this->request['user_id'] or !$profiledata = get_userdata($user_id)) {
$this->ajax_die($lang['NO_USER_ID_SPECIFIED']);
}
if (!$mode = (string)$this->request['mode']) {
$this->ajax_die('invalid mode (empty)');
}
switch ($mode) {
case 'get_group_list':
$sql = "
SELECT ug.user_pending, g.group_id, g.group_type, g.group_name, g.group_moderator, self.user_id AS can_view
FROM " . BB_USER_GROUP . " ug
INNER JOIN " . BB_GROUPS . " g ON(g.group_id = ug.group_id AND g.group_single_user = 0)
LEFT JOIN " . BB_USER_GROUP . " self ON(self.group_id = g.group_id AND self.user_id = {$user->id} AND self.user_pending = 0)
WHERE ug.user_id = $user_id
ORDER BY g.group_name
";
$html = [];
foreach (DB()->fetch_rowset($sql) as $row) {
$class = ($row['user_pending']) ? 'med' : 'med bold';
$class .= ($row['group_moderator'] == $user_id) ? ' colorMod' : '';
$href = GROUP_URL . $row['group_id'];
if (IS_ADMIN) {
$href .= "&amp;" . POST_USERS_URL . "=$user_id";
$link = '<a href="' . $href . '" class="' . $class . '" target="_blank">' . htmlCHR($row['group_name']) . '</a>';
$html[] = $link;
} else {
// hidden group and the user himself is not a member of it
if ($row['group_type'] == GROUP_HIDDEN && !$row['can_view']) {
continue;
}
if ($row['group_moderator'] == $user->id) {
// the user himself is the moderator of this group
$class .= ' selfMod';
$href .= "&amp;" . POST_USERS_URL . "=$user_id";
}
$link = '<a href="' . $href . '" class="' . $class . '" target="_blank">' . htmlCHR($row['group_name']) . '</a>';
$html[] = $link;
}
}
if ($html) {
$this->response['group_list_html'] = '<ul><li>' . implode('</li><li>', $html) . '</li></ul>';
} else {
$this->response['group_list_html'] = $lang['GROUP_LIST_HIDDEN'];
}
break;
default:
$this->ajax_die("invalid mode: $mode");
}

Some files were not shown because too many files have changed in this diff Show more