Compare commits
17 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ed56a10e50 | ||
![]() |
ecf4742588 | ||
![]() |
0426ff90c1 | ||
![]() |
62bee30a42 | ||
![]() |
a6d8888af6 | ||
![]() |
ebd7cd081c | ||
![]() |
0ad52d80f1 | ||
![]() |
7c29ba0424 | ||
![]() |
9cf7d71085 | ||
![]() |
0cca40399b | ||
![]() |
e46e23c920 | ||
![]() |
46746ae763 | ||
![]() |
68a1e3da5a | ||
![]() |
6fbd5e2d84 | ||
![]() |
55a98d0286 | ||
![]() |
d13ad37f0c | ||
![]() |
31b37b7574 |
86 changed files with 9563 additions and 5240 deletions
BIN
.github/screen/user-listing-selected.webp
vendored
Normal file
BIN
.github/screen/user-listing-selected.webp
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 537 KiB |
1
.github/workflows/docker.yml
vendored
1
.github/workflows/docker.yml
vendored
|
@ -84,6 +84,7 @@ jobs:
|
|||
rm -rf README.md chevereto.svg rector.php
|
||||
rm -rf app/tests app/phpunit*.xml
|
||||
rm -rf app/.editions app/bin/edition
|
||||
mkdir images/_assets
|
||||
mkdir importing/{parse-users,parse-albums,no-parse}
|
||||
mv .package ..
|
||||
ls -la ../.package
|
||||
|
|
1
.github/workflows/release-free.yml
vendored
1
.github/workflows/release-free.yml
vendored
|
@ -54,6 +54,7 @@ jobs:
|
|||
rm -rf README.md chevereto.svg rector.php
|
||||
rm -rf app/tests app/phpunit*.xml
|
||||
rm -rf app/.editions app/bin/edition
|
||||
mkdir images/_assets
|
||||
mkdir importing/{parse-users,parse-albums,no-parse}
|
||||
mv .package ..
|
||||
ls -la ../.package
|
||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -2,7 +2,7 @@
|
|||
/.env
|
||||
/.idea
|
||||
/app/.upgrading
|
||||
/app/CHEVERETO_LICENSE_KEY
|
||||
/app/CHEVERETO_LICENSE_KEY**
|
||||
/app/vendor
|
||||
/app/build
|
||||
/app/.phpunit.cache
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
Chevereto 4.2.1 (2024-11-04)
|
||||
|
||||
- 🐬 Added MySQL compatibility for Tags
|
||||
- 🏷️ Tag input added to uploader form
|
||||
- 🕷️ Increased Project Arachnid Shield timeout
|
||||
- 📱 Mobile listing now displays checkbox
|
||||
- ✅ API now supports use_file_date parameter
|
||||
- 🐞 Fixed bug in API route
|
||||
- 🐞 Fixed bug in API URL upload
|
||||
- 🐞 Fixed bug in homepage as Explore
|
||||
- 🐞 Fixed bug in Pages (free edition)
|
||||
- 🐞 Fixed bug with non-functioning analytics and comment code
|
||||
- 🐞 Fixed bug with non-functioning Banners
|
||||
- 🐞 Fixed TypeError in Image class
|
8
.package/4.2.4.txt
Normal file
8
.package/4.2.4.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
Chevereto 4.2.4 (2024-12-05)
|
||||
|
||||
- Added Chevereto Lite edition
|
||||
- Added placeholders for comments code
|
||||
- Improved comment code page id
|
||||
- Improved ENV handling
|
||||
- Fixed bug affecting CLI runtime
|
||||
- Fixed bug affecting MariaDB 10.4 compatibility
|
|
@ -9,6 +9,7 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
use function Chevereto\Legacy\loaderHandler;
|
||||
|
||||
class CustomTinkerwellDriver extends TinkerwellDriver
|
||||
|
@ -25,7 +26,7 @@ class CustomTinkerwellDriver extends TinkerwellDriver
|
|||
require $projectPath . '/app/legacy/load/loader.php';
|
||||
include loaderHandler(
|
||||
_cookie: [],
|
||||
_env: $_ENV,
|
||||
_env: getCheveretoEnv(),
|
||||
_files: [],
|
||||
_get: [],
|
||||
_post: [],
|
||||
|
|
295
README.md
295
README.md
|
@ -8,21 +8,24 @@
|
|||
|
||||
[](https://v4-docs.chevereto.com/)
|
||||
[](https://chevereto.com/community)
|
||||
[](https://chevereto.com/go/discord)
|
||||
[](https://demo.chevereto.com)
|
||||
[](https://demo.chevereto.com)
|
||||
[](LICENSE)
|
||||
[](https://github.com/rodber/chevereto-free)
|
||||
[](https://github.com/rodber/chevereto-free)
|
||||
[](https://awsmfoss.com/chevereto/)
|
||||
|
||||
> 🔔 [Subscribe](https://chevereto.com/go/newsletter) to don't miss any update regarding Chevereto.
|
||||
|
||||
Chevereto is a robust, self-hosted media-sharing platform that prioritizes flexibility and control. It enables you to build and manage a media-sharing website on your own server, granting you complete autonomy over your hosting environment and policies. With Chevereto, you eliminate the risk of platform restrictions and shutdowns, ensuring your site operates entirely on your terms.
|
||||
|
||||
Our [commercial edition](https://chevereto.com/pricing) is designed for running very large media-sharing services, offering scalability and tools to manage multiple users, high traffic, and extensive media collections.
|
||||
This is the repository for **Chevereto Free** edition. You can [compare editions](https://v4-docs.chevereto.com/introduction/editions/compare.html) to find the Chevereto edition that best suits your needs.
|
||||
|
||||
⭐️ [Live demo](https://demo.chevereto.com)
|
||||

|
||||
|
||||

|
||||
## Requirements
|
||||
|
||||
* A [webserver](https://v4-docs.chevereto.com/application/stack/web-server.html) (Apache recommended)
|
||||
* [PHP](https://v4-docs.chevereto.com/application/stack/php.html) 8.1+ with [extensions](https://v4-docs.chevereto.com/application/stack/php.html#extensions)
|
||||
* [MySQL Server](https://v4-docs.chevereto.com/application/stack/mysql-server.html) 8.0.1+ or MariaDB Server 10.2.2+
|
||||
|
||||
## Install
|
||||
|
||||
|
@ -56,290 +59,10 @@ For Chevereto V2 users:
|
|||
|
||||
* Follow the [Upgrading guide](https://v3-docs.chevereto.com/setup/server/upgrading.html) but skip directly to Chevereto V4.
|
||||
|
||||
## Files supported
|
||||
|
||||
Upload and share the following media types from device file browser, drag and drop, on-the-fly device camera, clipboard, URL, ShareX and via API.
|
||||
|
||||
* image/avif
|
||||
* image/jpeg
|
||||
* image/gif
|
||||
* image/png
|
||||
* image/webp
|
||||
* image/bmp
|
||||
* video/quicktime
|
||||
* video/mp4
|
||||
* video/webm
|
||||
|
||||
## Documentation
|
||||
|
||||
Chevereto [Documentation](https://v4-docs.chevereto.com) covers the system requirements, installation, configuration, and usage of the software. It also includes a [User manual](https://v4-user.chevereto.com/) and an [Admin manual](https://v4-admin.chevereto.com/).
|
||||
|
||||
## Features
|
||||
|
||||
This is a short, not exhaustive, list of features available on Chevereto editions. Feel free to request a demo of the pro edition at [chevereto.com](https://chevereto.com) (free of any charge, no payment required) to see all the features in action.
|
||||
|
||||
### Uploading features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| --------------------------------------- | :---: | :---: | :------------------: |
|
||||
| Image & Video uploads | ✅ | ✅ | ✅ |
|
||||
| AVIF JPEG PNG BMP GIF WEBP MOV MP4 WEBM | ✅ | ✅ | ✅ |
|
||||
| API uploading (ShareX, etc) | ✅ | ✅ | ✅ |
|
||||
| Equirectangular 360° images | ✅ | ✅ | ✅ |
|
||||
| EXIF data (read, strip) | ✅ | ✅ | ✅ |
|
||||
| Clipboard upload | ✅ | ✅ | ✅ |
|
||||
| Drag-and-drop upload (drop zone) | ✅ | ✅ | ✅ |
|
||||
| File delete link | ✅ | ✅ | ✅ |
|
||||
| Time-based expirable uploads | ✅ | ✅ | ✅ |
|
||||
| Generate thumbs & medium sized images | ✅ | ✅ | ✅ |
|
||||
| Generate video frame image | ✅ | ✅ | ✅ |
|
||||
| Duplicate media detection | ✅ | ✅ | ✅ |
|
||||
| Auto file-naming options | ✅ | ✅ | ✅ |
|
||||
| Storage modes (date, direct) | ✅ | ✅ | ✅ |
|
||||
| Upload user interface (container, page) | ✅ | ✅ | ✅ |
|
||||
| Upload plugin (PUP.js, postMessage) | ✅ | ✅ | ✅ |
|
||||
| Upload moderation | – | ✅ | ✅ |
|
||||
| Asset storage API | Local | Local | Any |
|
||||
| External storage servers API | Local | Local | All (S3, SFTP, etc.) |
|
||||
| Watermark image uploads | – | – | ✅ |
|
||||
| Bulk content importer | – | – | ✅ |
|
||||
|
||||
### External storage APIs
|
||||
|
||||
| Storage API | Free | Lite | Pro |
|
||||
| --------------------- | :---: | :---: | :---: |
|
||||
| Amazon S3 | – | – | ✅ |
|
||||
| S3 compatible | – | – | ✅ |
|
||||
| Google Cloud Storage | – | – | ✅ |
|
||||
| Microsoft Azure | – | – | ✅ |
|
||||
| Alibaba Cloud OSS | – | – | ✅ |
|
||||
| SFTP | – | – | ✅ |
|
||||
| FTP | – | – | ✅ |
|
||||
| OpenStack Swift | – | – | ✅ |
|
||||
| Backblaze B2 (legacy) | – | – | ✅ |
|
||||
|
||||
### Content features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ----------------------------------------------------------- | :---: | :---: | :---: |
|
||||
| Listing viewer (light box) | ✅ | ✅ | ✅ |
|
||||
| Dedicated Media, Album, Tags & Users listings | ✅ | ✅ | ✅ |
|
||||
| Configure items per page | ✅ | ✅ | ✅ |
|
||||
| Listing type (paginated/endless) | ✅ | ✅ | ✅ |
|
||||
| Image listing size (fixed, fluid) | ✅ | ✅ | ✅ |
|
||||
| Configure album listing requirement | ✅ | ✅ | ✅ |
|
||||
| Configure listing columns per device (mobile, tablet, etc.) | ✅ | ✅ | ✅ |
|
||||
|
||||
### Organization features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ---------------------------- | :---: | :---: | :---: |
|
||||
| User defined Tags | ✅ | ✅ | ✅ |
|
||||
| Albums & Sub-albums (nested) | ✅ | ✅ | ✅ |
|
||||
| Categories | ✅ | ✅ | ✅ |
|
||||
| Search | ✅ | ✅ | ✅ |
|
||||
| Explore & Discovery | ✅ | ✅ | ✅ |
|
||||
|
||||
### Tags features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ------------------------------ | :---: | :---: | :---: |
|
||||
| On-the-fly tag creation | ✅ | ✅ | ✅ |
|
||||
| Tag description | ✅ | ✅ | ✅ |
|
||||
| Tag listings | ✅ | ✅ | ✅ |
|
||||
| Tag filtering (users, albums) | ✅ | ✅ | ✅ |
|
||||
| Tag autocomplete | ✅ | ✅ | ✅ |
|
||||
| Top tags | ✅ | ✅ | ✅ |
|
||||
| Exif camera model auto-tagging | ✅ | ✅ | ✅ |
|
||||
|
||||
### Album features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| --------------------------- | :---: | :---: | :---: |
|
||||
| Nested albums (breadcrumbs) | ✅ | ✅ | ✅ |
|
||||
| Album cover image | ✅ | ✅ | ✅ |
|
||||
| Album privacy | ✅ | ✅ | ✅ |
|
||||
| Album password | ✅ | ✅ | ✅ |
|
||||
| Album description | ✅ | ✅ | ✅ |
|
||||
|
||||
### Sharing features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ------------------------------ | :---: | :---: | :---: |
|
||||
| Direct link sharing | ✅ | ✅ | ✅ |
|
||||
| Sharing button | ✅ | ✅ | ✅ |
|
||||
| Media oEmbed | ✅ | ✅ | ✅ |
|
||||
| HTML, Markdown & BBCodes | ✅ | ✅ | ✅ |
|
||||
| Embed codes on upload complete | ✅ | ✅ | ✅ |
|
||||
| Embed codes on selected media | ✅ | ✅ | ✅ |
|
||||
| Embed codes media page | ✅ | ✅ | ✅ |
|
||||
|
||||
### User features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| --------------------- | :---: | :---: | :---: |
|
||||
| User profiles | ✅ | ✅ | ✅ |
|
||||
| Private user profiles | ✅ | ✅ | ✅ |
|
||||
| User-based API | ✅ | ✅ | ✅ |
|
||||
| Multiple users | – | ✅ | ✅ |
|
||||
| User management | – | ✅ | ✅ |
|
||||
| Guest API | – | ✅ | ✅ |
|
||||
|
||||
### Social features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ---------------------------- | :---: | :---: | :---: |
|
||||
| Call-to-action album buttons | ✅ | ✅ | ✅ |
|
||||
| Random button | ✅ | ✅ | ✅ |
|
||||
| Notifications | ✅ | ✅ | ✅ |
|
||||
| List users | ✅ | ✅ | ✅ |
|
||||
| Followers | – | – | ✅ |
|
||||
| Likes | – | – | ✅ |
|
||||
|
||||
### Security features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ------------------------------- | :---: | :---: | :---: |
|
||||
| Two-Factor Authentication (2FA) | ✅ | ✅ | ✅ |
|
||||
| Encrypt secrets | ✅ | ✅ | ✅ |
|
||||
| Crypt-salted IDs | ✅ | ✅ | ✅ |
|
||||
| IP banning | – | – | ✅ |
|
||||
| Stop words | – | – | ✅ |
|
||||
|
||||
### Admin features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| --------------------------------------------------------------------------------------------- | :---: | :---: | :---: |
|
||||
| Album creation on behalf of users | ✅ | ✅ | ✅ |
|
||||
| Dashboard (admin UI) | ✅ | ✅ | ✅ |
|
||||
| System stats & usage | ✅ | ✅ | ✅ |
|
||||
| Website name | ✅ | ✅ | ✅ |
|
||||
| Website doctitle | ✅ | ✅ | ✅ |
|
||||
| Website description | ✅ | ✅ | ✅ |
|
||||
| Website privacy mode (public, private) | ✅ | ✅ | ✅ |
|
||||
| Default timezone | ✅ | ✅ | ✅ |
|
||||
| Uploadable file extensions | ✅ | ✅ | ✅ |
|
||||
| Guest uploads auto delete | ✅ | ✅ | ✅ |
|
||||
| Upload threads | ✅ | ✅ | ✅ |
|
||||
| Upload maximum image size | ✅ | ✅ | ✅ |
|
||||
| Upload Exif removal | ✅ | ✅ | ✅ |
|
||||
| Upload max file size (users and guest) | ✅ | ✅ | ✅ |
|
||||
| Upload path | ✅ | ✅ | ✅ |
|
||||
| Upload file naming | ✅ | ✅ | ✅ |
|
||||
| Upload thumb size | ✅ | ✅ | ✅ |
|
||||
| Upload medium size and dimension | ✅ | ✅ | ✅ |
|
||||
| Semantics | ✅ | ✅ | ✅ |
|
||||
| Default palette | ✅ | ✅ | ✅ |
|
||||
| Default font | ✅ | ✅ | ✅ |
|
||||
| Image load max file size | ✅ | ✅ | ✅ |
|
||||
| Image first tab | ✅ | ✅ | ✅ |
|
||||
| Embed codes (content) | ✅ | ✅ | ✅ |
|
||||
| Custom JS & CSS | ✅ | ✅ | ✅ |
|
||||
| Universal CDN support | ✅ | ✅ | ✅ |
|
||||
| [Default language](https://v4-admin.chevereto.com/settings/languages.html#default-language) | ✅ | ✅ | ✅ |
|
||||
| Logo & branding | ✅ | ✅ | ✅ |
|
||||
| Logo type (vector, image, text) | ✅ | ✅ | ✅ |
|
||||
| Logo height | ✅ | ✅ | ✅ |
|
||||
| Logo favicon image | ✅ | ✅ | ✅ |
|
||||
| Homepage style | – | ✅ | ✅ |
|
||||
| Homepage cover images | – | ✅ | ✅ |
|
||||
| Homepage title & paragraph | – | ✅ | ✅ |
|
||||
| Homepage call to action | – | ✅ | ✅ |
|
||||
| Pages | – | ✅ | ✅ |
|
||||
| Lock NSFW editing | – | ✅ | ✅ |
|
||||
| User min age required | – | ✅ | ✅ |
|
||||
| User avatar max file size | – | ✅ | ✅ |
|
||||
| User background max file size | – | ✅ | ✅ |
|
||||
| Guest API key | – | ✅ | ✅ |
|
||||
| Hide "Powered by Chevereto" footer | – | – | ✅ |
|
||||
| [Enabled languages](https://v4-admin.chevereto.com/settings/languages.html#enabled-languages) | – | – | ✅ |
|
||||
| Routing (user, image, album) | – | – | ✅ |
|
||||
| Routing root | – | – | ✅ |
|
||||
| External services | – | – | ✅ |
|
||||
| Comments API (Disqus, JS) | – | – | ✅ |
|
||||
| Analytics code | – | – | ✅ |
|
||||
| Akismet spam protection | – | – | ✅ |
|
||||
| StopForumSpam spam protection | – | – | ✅ |
|
||||
| CAPTCHA (reCAPTCHA, hCaptcha) | – | – | ✅ |
|
||||
| Configurable CAPTCHA threshold | – | – | ✅ |
|
||||
| Shield by Project Arachnid | – | – | ✅ |
|
||||
| ModerateContent (auto approve, block, flag) | – | – | ✅ |
|
||||
| OAuth2 login providers (Amazon, Google, Discord, etc) | – | – | ✅ |
|
||||
| Banners | – | – | ✅ |
|
||||
| Watermark uploads (guest, user, admin) | – | – | ✅ |
|
||||
| Watermark file toggles | – | – | ✅ |
|
||||
| Watermark size requirement | – | – | ✅ |
|
||||
| Watermark custom image | – | – | ✅ |
|
||||
| Watermark position | – | – | ✅ |
|
||||
| Watermark percentage | – | – | ✅ |
|
||||
| Watermark margin | – | – | ✅ |
|
||||
| Watermark opacity | – | – | ✅ |
|
||||
|
||||
### Admin toggles
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| ------------------------------------------------------------------------------------------- | :---: | :---: | :---: |
|
||||
| Search (users and guest) | ✅ | ✅ | ✅ |
|
||||
| Explore (users and guest) | ✅ | ✅ | ✅ |
|
||||
| Random (users and guest) | ✅ | ✅ | ✅ |
|
||||
| NSFW listings | ✅ | ✅ | ✅ |
|
||||
| Blur NSFW content | ✅ | ✅ | ✅ |
|
||||
| NSFW on random mode | ✅ | ✅ | ✅ |
|
||||
| Banners on NSFW | ✅ | ✅ | ✅ |
|
||||
| Uploads (users and guest) | ✅ | ✅ | ✅ |
|
||||
| Uploads (URL) | ✅ | ✅ | ✅ |
|
||||
| Upload moderation | ✅ | ✅ | ✅ |
|
||||
| Upload embed codes | ✅ | ✅ | ✅ |
|
||||
| Upload redirection | ✅ | ✅ | ✅ |
|
||||
| Upload duplication | ✅ | ✅ | ✅ |
|
||||
| Upload expiration | ✅ | ✅ | ✅ |
|
||||
| Upload NSFW checkbox | ✅ | ✅ | ✅ |
|
||||
| Download button | ✅ | ✅ | ✅ |
|
||||
| Right click | ✅ | ✅ | ✅ |
|
||||
| Show Exif data | ✅ | ✅ | ✅ |
|
||||
| Social share buttons | ✅ | ✅ | ✅ |
|
||||
| Automatic updates check | ✅ | ✅ | ✅ |
|
||||
| Dump update query | ✅ | ✅ | ✅ |
|
||||
| Debug errors | ✅ | ✅ | ✅ |
|
||||
| Consent screen (age gate) | – | ✅ | ✅ |
|
||||
| User sign up | – | ✅ | ✅ |
|
||||
| User content delete | – | ✅ | ✅ |
|
||||
| User notify sign up | – | ✅ | ✅ |
|
||||
| User email confirmation | – | ✅ | ✅ |
|
||||
| User email for social login | – | ✅ | ✅ |
|
||||
| [Auto language](https://v4-admin.chevereto.com/settings/languages.html#auto-language) | – | – | ✅ |
|
||||
| [Language chooser](https://v4-admin.chevereto.com/settings/languages.html#language-chooser) | – | – | ✅ |
|
||||
| SEO URLs (media and album) | – | – | ✅ |
|
||||
| Cookie law compliance | – | – | ✅ |
|
||||
| Flood protection | – | – | ✅ |
|
||||
| Flood protection notify | – | – | ✅ |
|
||||
| Watermarks | – | – | ✅ |
|
||||
|
||||
### System features
|
||||
|
||||
| Feature | Free | Lite | Pro |
|
||||
| -------------------------------------------------- | :---: | :-------------------: | :-------------------: |
|
||||
| Roles available | admin | admin, manager & user | admin, manager & user |
|
||||
| Image handling GD & ImageMagick | ✅ | ✅ | ✅ |
|
||||
| Theme palettes (10) | ✅ | ✅ | ✅ |
|
||||
| One-click upgrade (web & CLI) | ✅ | ✅ | ✅ |
|
||||
| Maintenance mode | ✅ | ✅ | ✅ |
|
||||
| Email SMTP + phpmail() | ✅ | ✅ | ✅ |
|
||||
| Cipher ID | ✅ | ✅ | ✅ |
|
||||
| Test-email | ✅ | ✅ | ✅ |
|
||||
| Export user | ✅ | ✅ | ✅ |
|
||||
| Regenerate external storage stats | ✅ | ✅ | ✅ |
|
||||
| Migrate external storage records | ✅ | ✅ | ✅ |
|
||||
| Docker support | ✅ | ✅ | ✅ |
|
||||
| CLI console | ✅ | ✅ | ✅ |
|
||||
| Built-in debugger ([xrDebug](https://xrdebug.com)) | ✅ | ✅ | ✅ |
|
||||
| Built-in REPL (PsySH) | ✅ | ✅ | ✅ |
|
||||
| Supports Tinkerwel REPL | ✅ | ✅ | ✅ |
|
||||
| Queue handling | ✅ | ✅ | ✅ |
|
||||
| Configurable cache TTL | ✅ | ✅ | ✅ |
|
||||
| Hreflang | ✅ | ✅ | ✅ |
|
||||
| Session storage (files, redis) | ✅ | ✅ | ✅ |
|
||||
|
||||
## Contributing
|
||||
|
||||
Chevereto is an open-source project, and while contributions are welcomed, they are entirely voluntary. We appreciate any assistance aimed at enhancing the software and making it better for the community. Please note that any contributions to this repository will fall under the AGPLv3 license, ensuring that your work remains open-source and accessible to all.
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
$translation_header = array (
|
||||
'Project-Id-Version' => 'VERSION',
|
||||
'POT-Creation-Date' => '2023-05-22 15:49+0000',
|
||||
'PO-Revision-Date' => '2023-05-22 15:49+0000',
|
||||
'POT-Creation-Date' => '2024-11-14 15:22+0000',
|
||||
'PO-Revision-Date' => '2024-11-14 15:22+0000',
|
||||
'Last-Translator' => 'FULL NAME <EMAIL@ADDRESS>',
|
||||
'Language-Team' => 'LANGUAGE TEAM <EMAIL@ADDRESS>',
|
||||
'Language' => 'pt',
|
||||
|
@ -19,21 +19,39 @@ $translation_table = [
|
|||
"You have been forbidden to use this website." => [
|
||||
0 => "Foi proibido de usar este site.",
|
||||
],
|
||||
"Moderate" => [
|
||||
0 => "Moderar",
|
||||
],
|
||||
"View all my images" => [
|
||||
0 => "Ver todas as minhas imagens",
|
||||
],
|
||||
"Recent" => [
|
||||
0 => "Recente",
|
||||
],
|
||||
"Trending" => [
|
||||
0 => "Popular agora",
|
||||
],
|
||||
"Popular" => [
|
||||
0 => "Popular",
|
||||
],
|
||||
"Animated" => [
|
||||
0 => "Animadas",
|
||||
],
|
||||
"Request denied" => [
|
||||
0 => "Pedido negado",
|
||||
],
|
||||
"terms" => [
|
||||
0 => "termos",
|
||||
],
|
||||
"privacy policy" => [
|
||||
0 => "política de privacidade",
|
||||
],
|
||||
"That page doesn't exist" => [
|
||||
0 => "Esta página não existe",
|
||||
],
|
||||
"Page %s" => [
|
||||
0 => "Página %s",
|
||||
],
|
||||
"Forgot password?" => [
|
||||
0 => "Esqueceu-se da senha?",
|
||||
],
|
||||
|
@ -49,11 +67,14 @@ $translation_table = [
|
|||
"Awaiting confirmation" => [
|
||||
0 => "Aguardando confirmação",
|
||||
],
|
||||
"Two-factor authentication" => [
|
||||
0 => "Autenticação de dois factores",
|
||||
],
|
||||
"Email changed" => [
|
||||
0 => "E-mail alterado",
|
||||
],
|
||||
"Invalid Username/Email" => [
|
||||
0 => "Nome de usuário inválido / Email",
|
||||
0 => "Nome de utilizador/Email inválido",
|
||||
],
|
||||
"User doesn't have an email." => [
|
||||
0 => "O utilizador não tem um e-mail.",
|
||||
|
@ -64,6 +85,9 @@ $translation_table = [
|
|||
"Account already activated" => [
|
||||
0 => "Conta activada",
|
||||
],
|
||||
"Account banned" => [
|
||||
0 => "Conta banida",
|
||||
],
|
||||
"Allow up to 15 minutes for the email. You can try again later." => [
|
||||
0 => "Aguarde até 15 minutos pela recepção do e-mail. Poderá tentar novamente mais tarde.",
|
||||
],
|
||||
|
@ -88,6 +112,9 @@ $translation_table = [
|
|||
"Email already being used" => [
|
||||
0 => "Esse e-mail já está a ser utilizado",
|
||||
],
|
||||
"Invalid code" => [
|
||||
0 => "Código inválido",
|
||||
],
|
||||
"Check the errors in the form to continue." => [
|
||||
0 => "Verifique os erros no formulário para continuar.",
|
||||
],
|
||||
|
@ -97,6 +124,9 @@ $translation_table = [
|
|||
"Embed codes" => [
|
||||
0 => "Códigos para Incorporar",
|
||||
],
|
||||
"albums" => [
|
||||
0 => "álbuns",
|
||||
],
|
||||
"%a album hosted in %w" => [
|
||||
0 => "Álbum %a alojado em %w",
|
||||
],
|
||||
|
@ -104,12 +134,6 @@ $translation_table = [
|
|||
0 => "imagem",
|
||||
1 => "imagens",
|
||||
],
|
||||
"Stats" => [
|
||||
0 => "Estatísticas",
|
||||
],
|
||||
"Images" => [
|
||||
0 => "Imagens",
|
||||
],
|
||||
"Album" => [
|
||||
0 => "Álbum",
|
||||
1 => "Álbuns",
|
||||
|
@ -133,8 +157,11 @@ $translation_table = [
|
|||
"Listings" => [
|
||||
0 => "Resultados",
|
||||
],
|
||||
"Image upload" => [
|
||||
0 => "Envio de imagem",
|
||||
"File uploads" => [
|
||||
0 => "Envios de ficheiros",
|
||||
],
|
||||
"Semantics" => [
|
||||
0 => "Semântica",
|
||||
],
|
||||
"Categories" => [
|
||||
0 => "Categorias",
|
||||
|
@ -151,8 +178,11 @@ $translation_table = [
|
|||
"Email" => [
|
||||
0 => "E-mail",
|
||||
],
|
||||
"External storage" => [
|
||||
0 => "Alojamento externo",
|
||||
"Tools" => [
|
||||
0 => "Ferramentas",
|
||||
],
|
||||
"Logo" => [
|
||||
0 => "Logo",
|
||||
],
|
||||
"Homepage" => [
|
||||
0 => "Página principal",
|
||||
|
@ -160,11 +190,23 @@ $translation_table = [
|
|||
"Pages" => [
|
||||
0 => "Páginas",
|
||||
],
|
||||
"Consent screen" => [
|
||||
0 => "Janela de consentimento",
|
||||
],
|
||||
"Guests %s" => [
|
||||
0 => "Convidados %s",
|
||||
],
|
||||
"External storage" => [
|
||||
0 => "Alojamento externo",
|
||||
],
|
||||
"Routing" => [
|
||||
0 => "Redireccionamento",
|
||||
],
|
||||
"External services" => [
|
||||
0 => "Serviços externos",
|
||||
],
|
||||
"Flood protection" => [
|
||||
0 => "Protecção contra as inundações",
|
||||
0 => "Protecção contra abuso",
|
||||
],
|
||||
"IP bans" => [
|
||||
0 => "Banimentos por IP",
|
||||
|
@ -172,57 +214,41 @@ $translation_table = [
|
|||
"Watermarks" => [
|
||||
0 => "Marcas de água",
|
||||
],
|
||||
"Documentation" => [
|
||||
0 => "Documentação",
|
||||
],
|
||||
"Support" => [
|
||||
0 => "Suport",
|
||||
],
|
||||
"Community" => [
|
||||
0 => "Comunidade",
|
||||
0 => "Suporte",
|
||||
],
|
||||
"install update" => [
|
||||
0 => "Instalar actualização",
|
||||
],
|
||||
"Stats" => [
|
||||
0 => "Estatísticas",
|
||||
],
|
||||
"Rebuild stats" => [
|
||||
0 => "Estatísticas de reconstrução",
|
||||
],
|
||||
"Not your IP?" => [
|
||||
0 => "Não é o seu IP?",
|
||||
],
|
||||
"PHP version" => [
|
||||
0 => "Versão do PHP",
|
||||
],
|
||||
"Server" => [
|
||||
0 => "Servidor",
|
||||
],
|
||||
"MySQL version" => [
|
||||
0 => "Versão do MySQL",
|
||||
],
|
||||
"MySQL server info" => [
|
||||
0 => "Informação do servidor MySQL",
|
||||
],
|
||||
"File uploads" => [
|
||||
0 => "Envios de ficheiros",
|
||||
],
|
||||
"Enabled" => [
|
||||
0 => "Ativado",
|
||||
],
|
||||
"Disabled" => [
|
||||
0 => "Desactivado",
|
||||
],
|
||||
"Max. execution time" => [
|
||||
0 => "Tempo máximo de execução",
|
||||
"Releases" => [
|
||||
0 => "Lançamentos",
|
||||
],
|
||||
"%d second" => [
|
||||
0 => "%d segundo",
|
||||
1 => "%d segundos",
|
||||
"Community" => [
|
||||
0 => "Comunidade",
|
||||
],
|
||||
"Memory limit" => [
|
||||
0 => "Limite de memória",
|
||||
"Cron last ran" => [
|
||||
0 => "Última execução do agendamento",
|
||||
],
|
||||
"External" => [
|
||||
0 => "Externo",
|
||||
"PHP version" => [
|
||||
0 => "Versão do PHP",
|
||||
],
|
||||
"Server" => [
|
||||
0 => "Servidor",
|
||||
],
|
||||
"All" => [
|
||||
0 => "Todas",
|
||||
|
@ -230,33 +256,15 @@ $translation_table = [
|
|||
"search content" => [
|
||||
0 => "conteúdo de pesquisa",
|
||||
],
|
||||
"Before pagination" => [
|
||||
0 => "Antes de paginação",
|
||||
],
|
||||
"After pagination" => [
|
||||
0 => "Depois de paginação",
|
||||
],
|
||||
"Before comments" => [
|
||||
0 => "Antes dos comentários",
|
||||
],
|
||||
"Image page" => [
|
||||
0 => "Página da imagem",
|
||||
],
|
||||
"Inside viewer top (image page)" => [
|
||||
0 => "Topo da página para visualizar a imagem",
|
||||
],
|
||||
"Footer (image page)" => [
|
||||
0 => "Rodapé (página imagem)",
|
||||
],
|
||||
"User profile page" => [
|
||||
0 => "Página de perfil do utilizador",
|
||||
],
|
||||
"After top (user profile)" => [
|
||||
0 => "Depois de topo (perfil do utlizador)",
|
||||
],
|
||||
"Explore" => [
|
||||
0 => "Explorar",
|
||||
],
|
||||
"After top (%s page)" => [
|
||||
0 => "Depois do topo (%s página)",
|
||||
],
|
||||
"NSFW" => [
|
||||
0 => "18+",
|
||||
],
|
||||
"Invalid website name" => [
|
||||
0 => "Nome da página inválido",
|
||||
],
|
||||
|
@ -266,6 +274,9 @@ $translation_table = [
|
|||
"Invalid timezone" => [
|
||||
0 => "Fuso horário inválido",
|
||||
],
|
||||
"Invalid value: %s" => [
|
||||
0 => "Valor inválido: %s",
|
||||
],
|
||||
"Invalid thumb width" => [
|
||||
0 => "largura da miniatura inválida",
|
||||
],
|
||||
|
@ -278,45 +289,6 @@ $translation_table = [
|
|||
"Invalid value" => [
|
||||
0 => "Valor inválido",
|
||||
],
|
||||
"Invalid theme image listing size" => [
|
||||
0 => "Tamanho para os resultados do tema inválido",
|
||||
],
|
||||
"Invalid user id" => [
|
||||
0 => "ID de usuário Inválido",
|
||||
],
|
||||
"Invalid email mode" => [
|
||||
0 => "Modo de e-mail inválido",
|
||||
],
|
||||
"Invalid SMTP port" => [
|
||||
0 => "Porta SMTP inválida",
|
||||
],
|
||||
"Invalid SMTP security" => [
|
||||
0 => "Segurança inválida SMTP ",
|
||||
],
|
||||
"Invalid website mode" => [
|
||||
0 => "Modo de website inválido",
|
||||
],
|
||||
"Invalid website content privacy mode" => [
|
||||
0 => "modo de conteúdo do site privacidade inválido",
|
||||
],
|
||||
"Invalid homepage style" => [
|
||||
0 => "Estilo da página principal inválido",
|
||||
],
|
||||
"Invalid URL" => [
|
||||
0 => "URL inválido",
|
||||
],
|
||||
"Invalid upload image path" => [
|
||||
0 => "Caminho para o envio de imagens inválido",
|
||||
],
|
||||
"Max. allowed %s" => [
|
||||
0 => "Máximo permitido %s",
|
||||
],
|
||||
"Invalid SMTP server" => [
|
||||
0 => "Servidor SMTP inválido",
|
||||
],
|
||||
"Invalid SMTP username" => [
|
||||
0 => "Nome de usuário SMTP inválido",
|
||||
],
|
||||
"Dashboard" => [
|
||||
0 => "Administração",
|
||||
],
|
||||
|
@ -338,21 +310,6 @@ $translation_table = [
|
|||
"Image %i hosted in %w" => [
|
||||
0 => "Imagem %i alojada em %w",
|
||||
],
|
||||
"Direct links" => [
|
||||
0 => "Links Diretos",
|
||||
],
|
||||
"Image link" => [
|
||||
0 => "Link da imagem",
|
||||
],
|
||||
"Image URL" => [
|
||||
0 => "URL da imagem",
|
||||
],
|
||||
"Thumbnail URL" => [
|
||||
0 => "URL Thumbnail",
|
||||
],
|
||||
"Medium URL" => [
|
||||
0 => "URL Médio",
|
||||
],
|
||||
"Login needed" => [
|
||||
0 => "Necessário iniciar sessão",
|
||||
],
|
||||
|
@ -363,9 +320,6 @@ $translation_table = [
|
|||
"Category" => [
|
||||
0 => "Categoria",
|
||||
],
|
||||
"IP address already banned" => [
|
||||
0 => "Endereço de IP já banido",
|
||||
],
|
||||
"Missing values" => [
|
||||
0 => "Valores em falta",
|
||||
],
|
||||
|
@ -378,6 +332,9 @@ $translation_table = [
|
|||
"Username already being used" => [
|
||||
0 => "Nome de utilizador já está a ser utilizado",
|
||||
],
|
||||
"IP address already banned" => [
|
||||
0 => "Endereço de IP já banido",
|
||||
],
|
||||
"%s has been disconnected." => [
|
||||
0 => "%s foi desconectado.",
|
||||
],
|
||||
|
@ -441,6 +398,9 @@ $translation_table = [
|
|||
"User ID" => [
|
||||
0 => "ID de utilizador",
|
||||
],
|
||||
"Images" => [
|
||||
0 => "Imagens",
|
||||
],
|
||||
"Register date" => [
|
||||
0 => "Data de registo",
|
||||
],
|
||||
|
@ -563,7 +523,7 @@ $translation_table = [
|
|||
0 => "%s atrás",
|
||||
],
|
||||
"moments ago" => [
|
||||
0 => "à momentos atrás",
|
||||
0 => "há poucos segundos",
|
||||
],
|
||||
"Random" => [
|
||||
0 => "Aleatório",
|
||||
|
@ -619,27 +579,24 @@ $translation_table = [
|
|||
"Error deleting profile background image." => [
|
||||
0 => "Erro apagar imagem de fundo do perfil",
|
||||
],
|
||||
"Update available v%s" => [
|
||||
0 => "Actualização disponível v%s",
|
||||
],
|
||||
"Like" => [
|
||||
0 => "Gostar",
|
||||
],
|
||||
"Create album" => [
|
||||
0 => "Criar álbum",
|
||||
],
|
||||
"Edit" => [
|
||||
0 => "Editar",
|
||||
],
|
||||
"Delete" => [
|
||||
0 => "Eliminar",
|
||||
],
|
||||
"Previous" => [
|
||||
0 => "Anterior",
|
||||
"Edit" => [
|
||||
0 => "Editar",
|
||||
],
|
||||
"Like" => [
|
||||
0 => "Gostar",
|
||||
],
|
||||
"Next" => [
|
||||
0 => "Próximo",
|
||||
],
|
||||
"Previous" => [
|
||||
0 => "Anterior",
|
||||
],
|
||||
"File too big." => [
|
||||
0 => "Ficheiro muito grande.",
|
||||
],
|
||||
|
@ -652,9 +609,6 @@ $translation_table = [
|
|||
"%s's Albums" => [
|
||||
0 => "Álbuns de %s",
|
||||
],
|
||||
"Image edited successfully." => [
|
||||
0 => "Imagem editada com sucesso.",
|
||||
],
|
||||
"private" => [
|
||||
0 => "Privado",
|
||||
],
|
||||
|
@ -787,9 +741,6 @@ $translation_table = [
|
|||
"This email was sent from %w %u" => [
|
||||
0 => "Este e-mail foi enviado por %w %u",
|
||||
],
|
||||
"Select the images to upload" => [
|
||||
0 => "Selecionar as imagens para envio",
|
||||
],
|
||||
"complete" => [
|
||||
0 => "completo",
|
||||
],
|
||||
|
@ -829,36 +780,12 @@ $translation_table = [
|
|||
"Description" => [
|
||||
0 => "Descrição",
|
||||
],
|
||||
"Add image URLs" => [
|
||||
0 => "Adicionar URLs de imagem",
|
||||
],
|
||||
"Add the image URLs here" => [
|
||||
0 => "Adicione os URLs de imagem aqui",
|
||||
],
|
||||
"Error report" => [
|
||||
0 => "Relatório de erro",
|
||||
],
|
||||
"Direct" => [
|
||||
0 => "Directo",
|
||||
],
|
||||
"HTML Codes" => [
|
||||
0 => "Códigos HTML",
|
||||
],
|
||||
"HTML medium linked" => [
|
||||
0 => "HTML médio",
|
||||
],
|
||||
"HTML thumbnail linked" => [
|
||||
0 => "HTML da miniatura",
|
||||
],
|
||||
"BBCode medium linked" => [
|
||||
0 => "Código BBCode do tamanho médio",
|
||||
],
|
||||
"BBCode thumbnail linked" => [
|
||||
0 => "Código BBCode da miniatura",
|
||||
],
|
||||
"Viewer links" => [
|
||||
0 => "Ver links",
|
||||
],
|
||||
"All these words" => [
|
||||
0 => "Todas estas palavras",
|
||||
],
|
||||
|
@ -991,6 +918,9 @@ $translation_table = [
|
|||
"There's nothing to show here." => [
|
||||
0 => "Não há nada para ver aqui.",
|
||||
],
|
||||
"Selection will be assigned to %t." => [
|
||||
0 => "A selecção vai ser atribuída a %t.",
|
||||
],
|
||||
"There is no categories." => [
|
||||
0 => "Não existem categorias.",
|
||||
],
|
||||
|
@ -1162,6 +1092,33 @@ $translation_table = [
|
|||
"Disk used" => [
|
||||
0 => "Espaço usado",
|
||||
],
|
||||
"Enable uploads" => [
|
||||
0 => "Activar envios",
|
||||
],
|
||||
"Guest uploads" => [
|
||||
0 => "Envios de visitantes",
|
||||
],
|
||||
"Enable this if you want to allow non registered users to upload." => [
|
||||
0 => "Ative isto se quiser permitir que os utilizadores não registados façam envios.",
|
||||
],
|
||||
"Relative to Chevereto root" => [
|
||||
0 => "Relativo ao root do Chevereto",
|
||||
],
|
||||
"Storage mode" => [
|
||||
0 => "Modo de armazenamento",
|
||||
],
|
||||
"Datefolders creates %s structure" => [
|
||||
0 => "Datefolders cria %s estrutura",
|
||||
],
|
||||
"File naming method" => [
|
||||
0 => "Método de nomeação do arquivo",
|
||||
],
|
||||
"Thumb size" => [
|
||||
0 => "Tamanho da miniatura",
|
||||
],
|
||||
"Thumbnails will be fixed to this size." => [
|
||||
0 => "As miniaturas serão ajustadas para este tamanho.",
|
||||
],
|
||||
"Notify to email" => [
|
||||
0 => "Notificar para o e-mail",
|
||||
],
|
||||
|
@ -1207,39 +1164,6 @@ $translation_table = [
|
|||
"Default" => [
|
||||
0 => "Padrão",
|
||||
],
|
||||
"Enable uploads" => [
|
||||
0 => "Activar envios",
|
||||
],
|
||||
"Guest uploads" => [
|
||||
0 => "Envios de visitantes",
|
||||
],
|
||||
"Enable this if you want to allow non registered users to upload." => [
|
||||
0 => "Ative isto se quiser permitir que os utilizadores não registados façam envios.",
|
||||
],
|
||||
"Image path" => [
|
||||
0 => "Caminho da imagem",
|
||||
],
|
||||
"Relative to Chevereto root" => [
|
||||
0 => "Relativo ao root do Chevereto",
|
||||
],
|
||||
"Where to store the images? Relative to Chevereto root." => [
|
||||
0 => "Onde alojar as imagens? Relativo ao root do Chevereto.",
|
||||
],
|
||||
"Storage mode" => [
|
||||
0 => "Modo de armazenamento",
|
||||
],
|
||||
"Datefolders creates %s structure" => [
|
||||
0 => "Datefolders cria %s estrutura",
|
||||
],
|
||||
"File naming method" => [
|
||||
0 => "Método de nomeação do arquivo",
|
||||
],
|
||||
"Thumb size" => [
|
||||
0 => "Tamanho da miniatura",
|
||||
],
|
||||
"Thumbnails will be fixed to this size." => [
|
||||
0 => "As miniaturas serão ajustadas para este tamanho.",
|
||||
],
|
||||
"Expires" => [
|
||||
0 => "Expira",
|
||||
],
|
||||
|
@ -1475,14 +1399,11 @@ $translation_table = [
|
|||
0 => "Endereço de email",
|
||||
],
|
||||
"Added to %s" => [
|
||||
0 => "Adicionar a %s",
|
||||
0 => "Adicionado a %s",
|
||||
],
|
||||
"Add IP ban" => [
|
||||
0 => "Adicionar banimento de IP",
|
||||
],
|
||||
"Upload and share your images." => [
|
||||
0 => "Envie e compartilhe as suas imagens.",
|
||||
],
|
||||
"Sign up to unlock all the features" => [
|
||||
0 => "Registre-se agora Grátis",
|
||||
],
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -9,6 +9,7 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
use function Chevereto\Legacy\loaderHandler;
|
||||
|
||||
define('ACCESS', 'web');
|
||||
|
@ -16,7 +17,7 @@ define('REPL', true);
|
|||
require __DIR__ . '/legacy/load/loader.php';
|
||||
include loaderHandler(
|
||||
_cookie: [],
|
||||
_env: $_ENV,
|
||||
_env: getCheveretoEnv(),
|
||||
_files: [],
|
||||
_get: [],
|
||||
_post: [],
|
||||
|
@ -28,8 +29,7 @@ include loaderHandler(
|
|||
);
|
||||
|
||||
return [
|
||||
'startupMessage' =>
|
||||
<<<EOM
|
||||
'startupMessage' => <<<EOM
|
||||
__ __
|
||||
____/ / ___ _ _____ _______ / /____
|
||||
/ __/ _ \/ -_) |/ / -_) __/ -_) __/ _ \\
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
"jeroendesloovere/xmp-metadata-extractor": "^2.0",
|
||||
"league/flysystem": "^2.0",
|
||||
"jenssegers/imagehash": "^0.5.0",
|
||||
"guzzlehttp/psr7": "^1.7",
|
||||
"guzzlehttp/psr7": "^1.7||^2",
|
||||
"phpmailer/phpmailer": "^6.5",
|
||||
"psr/cache": "^1",
|
||||
"psr/log": "^1",
|
||||
|
|
335
app/composer.lock
generated
335
app/composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "44fd5c1cbd50c51668b3e303c353daea",
|
||||
"content-hash": "7f3e8782b7fdee03d36b5cdabf54d349",
|
||||
"packages": [
|
||||
{
|
||||
"name": "amphp/amp",
|
||||
|
@ -1190,16 +1190,16 @@
|
|||
},
|
||||
{
|
||||
"name": "chevere/throwable-handler",
|
||||
"version": "1.0.2",
|
||||
"version": "1.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/chevere/throwable-handler.git",
|
||||
"reference": "4b476df67ddb4fa5d49aca75a91787b4dc2c0b82"
|
||||
"reference": "5c4373b6b1d511340694ff9efe83a3c70f1a0fe7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/chevere/throwable-handler/zipball/4b476df67ddb4fa5d49aca75a91787b4dc2c0b82",
|
||||
"reference": "4b476df67ddb4fa5d49aca75a91787b4dc2c0b82",
|
||||
"url": "https://api.github.com/repos/chevere/throwable-handler/zipball/5c4373b6b1d511340694ff9efe83a3c70f1a0fe7",
|
||||
"reference": "5c4373b6b1d511340694ff9efe83a3c70f1a0fe7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1237,22 +1237,22 @@
|
|||
"homepage": "https://chevere.org",
|
||||
"support": {
|
||||
"issues": "https://github.com/chevere/throwable-handler/issues",
|
||||
"source": "https://github.com/chevere/throwable-handler/tree/1.0.2"
|
||||
"source": "https://github.com/chevere/throwable-handler/tree/1.0.3"
|
||||
},
|
||||
"time": "2024-06-21T15:41:35+00:00"
|
||||
"time": "2024-11-06T20:01:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "chevere/trace",
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/chevere/trace.git",
|
||||
"reference": "94a01bbd851dece35f1749ee120b6e04699e76ba"
|
||||
"reference": "56e8ec7bfbb242ca5f986f5c72bffc14c7ec20ec"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/chevere/trace/zipball/94a01bbd851dece35f1749ee120b6e04699e76ba",
|
||||
"reference": "94a01bbd851dece35f1749ee120b6e04699e76ba",
|
||||
"url": "https://api.github.com/repos/chevere/trace/zipball/56e8ec7bfbb242ca5f986f5c72bffc14c7ec20ec",
|
||||
"reference": "56e8ec7bfbb242ca5f986f5c72bffc14c7ec20ec",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1285,9 +1285,9 @@
|
|||
"homepage": "https://chevere.org",
|
||||
"support": {
|
||||
"issues": "https://github.com/chevere/trace/issues",
|
||||
"source": "https://github.com/chevere/trace/tree/2.0.0"
|
||||
"source": "https://github.com/chevere/trace/tree/2.0.1"
|
||||
},
|
||||
"time": "2024-06-03T16:15:25+00:00"
|
||||
"time": "2024-11-21T13:31:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "chevere/var-dump",
|
||||
|
@ -1295,12 +1295,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/chevere/var-dump.git",
|
||||
"reference": "cf6cbd93056ef9eab1d61ae965405d0bb6bdf7a0"
|
||||
"reference": "ea3145a28d3c69ea6e2d18ba8b4f06d47b876def"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/chevere/var-dump/zipball/cf6cbd93056ef9eab1d61ae965405d0bb6bdf7a0",
|
||||
"reference": "cf6cbd93056ef9eab1d61ae965405d0bb6bdf7a0",
|
||||
"url": "https://api.github.com/repos/chevere/var-dump/zipball/ea3145a28d3c69ea6e2d18ba8b4f06d47b876def",
|
||||
"reference": "ea3145a28d3c69ea6e2d18ba8b4f06d47b876def",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1311,7 +1311,7 @@
|
|||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.9",
|
||||
"phpstan/phpstan": "^2.0",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"symplify/easy-coding-standard": "^11.1"
|
||||
},
|
||||
|
@ -1347,7 +1347,7 @@
|
|||
"issues": "https://github.com/chevere/var-dump/issues",
|
||||
"source": "https://github.com/chevere/var-dump/tree/2.0"
|
||||
},
|
||||
"time": "2024-10-14T14:38:37+00:00"
|
||||
"time": "2024-11-26T16:20:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "chevere/var-support",
|
||||
|
@ -1512,29 +1512,29 @@
|
|||
},
|
||||
{
|
||||
"name": "chillerlan/php-qrcode",
|
||||
"version": "4.4.1",
|
||||
"version": "4.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/chillerlan/php-qrcode.git",
|
||||
"reference": "f5e243f3b61a60934780579430a951460f40888d"
|
||||
"reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/f5e243f3b61a60934780579430a951460f40888d",
|
||||
"reference": "f5e243f3b61a60934780579430a951460f40888d",
|
||||
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
|
||||
"reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"chillerlan/php-settings-container": "^2.1.4 || ^3.1",
|
||||
"chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.4 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phan/phan": "^5.4",
|
||||
"phan/phan": "^5.4.5",
|
||||
"phpmd/phpmd": "^2.15",
|
||||
"phpunit/phpunit": "^9.6",
|
||||
"setasign/fpdf": "^1.8.2",
|
||||
"squizlabs/php_codesniffer": "^3.8"
|
||||
"squizlabs/php_codesniffer": "^3.11"
|
||||
},
|
||||
"suggest": {
|
||||
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
|
||||
|
@ -1577,19 +1577,15 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/chillerlan/php-qrcode/issues",
|
||||
"source": "https://github.com/chillerlan/php-qrcode/tree/4.4.1"
|
||||
"source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://ko-fi.com/codemasher",
|
||||
"type": "ko_fi"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-06T16:56:58+00:00"
|
||||
"time": "2024-11-15T15:36:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "chillerlan/php-settings-container",
|
||||
|
@ -1659,16 +1655,16 @@
|
|||
},
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
"version": "1.5.3",
|
||||
"version": "1.5.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/ca-bundle.git",
|
||||
"reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2"
|
||||
"reference": "bc0593537a463e55cadf45fd938d23b75095b7e1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/3b1fc3f0be055baa7c6258b1467849c3e8204eb2",
|
||||
"reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/bc0593537a463e55cadf45fd938d23b75095b7e1",
|
||||
"reference": "bc0593537a463e55cadf45fd938d23b75095b7e1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1715,7 +1711,7 @@
|
|||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"issues": "https://github.com/composer/ca-bundle/issues",
|
||||
"source": "https://github.com/composer/ca-bundle/tree/1.5.3"
|
||||
"source": "https://github.com/composer/ca-bundle/tree/1.5.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1731,7 +1727,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-11-04T10:15:26+00:00"
|
||||
"time": "2024-11-27T15:35:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "evenement/evenement",
|
||||
|
@ -1838,16 +1834,16 @@
|
|||
},
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
"version": "v6.10.1",
|
||||
"version": "v6.10.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/php-jwt.git",
|
||||
"reference": "500501c2ce893c824c801da135d02661199f60c5"
|
||||
"reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5",
|
||||
"reference": "500501c2ce893c824c801da135d02661199f60c5",
|
||||
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b",
|
||||
"reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1895,44 +1891,50 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/firebase/php-jwt/issues",
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.10.1"
|
||||
"source": "https://github.com/firebase/php-jwt/tree/v6.10.2"
|
||||
},
|
||||
"time": "2024-05-18T18:05:11+00:00"
|
||||
"time": "2024-11-24T11:22:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "1.9.1",
|
||||
"version": "2.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b"
|
||||
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
||||
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
|
||||
"reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"psr/http-message": "~1.0",
|
||||
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^1.1 || ^2.0",
|
||||
"ralouphie/getallheaders": "^3.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-factory-implementation": "1.0",
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-zlib": "*",
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"http-interop/http-factory-tests": "0.9.0",
|
||||
"phpunit/phpunit": "^8.5.39 || ^9.6.20"
|
||||
},
|
||||
"suggest": {
|
||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"bamarni-bin": {
|
||||
"bin-links": true,
|
||||
"forward-command": false
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions_include.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"GuzzleHttp\\Psr7\\": "src/"
|
||||
}
|
||||
|
@ -1971,6 +1973,11 @@
|
|||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://sagikazarmark.hu"
|
||||
}
|
||||
],
|
||||
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||
|
@ -1986,7 +1993,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/1.9.1"
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2002,7 +2009,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-04-17T16:00:37+00:00"
|
||||
"time": "2024-07-18T11:15:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "intervention/image",
|
||||
|
@ -2034,16 +2041,16 @@
|
|||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.4-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Intervention\\Image\\ImageServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Image": "Intervention\\Image\\Facades\\Image"
|
||||
}
|
||||
},
|
||||
"providers": [
|
||||
"Intervention\\Image\\ImageServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "2.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -3117,21 +3124,21 @@
|
|||
},
|
||||
{
|
||||
"name": "php-ffmpeg/php-ffmpeg",
|
||||
"version": "v1.2.0",
|
||||
"version": "v1.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git",
|
||||
"reference": "785a5ba05dd88b3b8146f85f18476b259b23917c"
|
||||
"reference": "5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/785a5ba05dd88b3b8146f85f18476b259b23917c",
|
||||
"reference": "785a5ba05dd88b3b8146f85f18476b259b23917c",
|
||||
"url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5",
|
||||
"reference": "5e7b15710a8607e8a3a2d9fbe2c150a99b924fa5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"evenement/evenement": "^3.0",
|
||||
"php": "^8.0 || ^8.1 || ^8.2 || ^8.3",
|
||||
"php": "^8.0 || ^8.1 || ^8.2 || ^8.3 || ^8.4",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0",
|
||||
"spatie/temporary-directory": "^2.0",
|
||||
"symfony/cache": "^5.4 || ^6.0 || ^7.0",
|
||||
|
@ -3139,7 +3146,7 @@
|
|||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.5",
|
||||
"phpunit/phpunit": "^9.5.10"
|
||||
"phpunit/phpunit": "^9.5.10 || ^10.0"
|
||||
},
|
||||
"suggest": {
|
||||
"php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg"
|
||||
|
@ -3200,22 +3207,22 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues",
|
||||
"source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.2.0"
|
||||
"source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.3.0"
|
||||
},
|
||||
"time": "2024-01-02T10:37:01+00:00"
|
||||
"time": "2024-11-12T15:39:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.9.2",
|
||||
"version": "v6.9.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c"
|
||||
"reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a7b17b42fa4887c92146243f3d2f4ccb962af17c",
|
||||
"reference": "a7b17b42fa4887c92146243f3d2f4ccb962af17c",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e",
|
||||
"reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -3275,7 +3282,7 @@
|
|||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.2"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -3283,7 +3290,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-09T10:07:50+00:00"
|
||||
"time": "2024-11-24T18:04:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpseclib/bcmath_compat",
|
||||
|
@ -3988,12 +3995,12 @@
|
|||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-0.11": "0.11.x-dev"
|
||||
},
|
||||
"bamarni-bin": {
|
||||
"bin-links": false,
|
||||
"forward-command": false
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-0.11": "0.11.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -4476,16 +4483,16 @@
|
|||
},
|
||||
{
|
||||
"name": "react/http",
|
||||
"version": "v1.10.0",
|
||||
"version": "v1.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/reactphp/http.git",
|
||||
"reference": "8111281ee57f22b7194f5dba225e609ba7ce4d20"
|
||||
"reference": "8db02de41dcca82037367f67a2d4be365b1c4db9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/reactphp/http/zipball/8111281ee57f22b7194f5dba225e609ba7ce4d20",
|
||||
"reference": "8111281ee57f22b7194f5dba225e609ba7ce4d20",
|
||||
"url": "https://api.github.com/repos/reactphp/http/zipball/8db02de41dcca82037367f67a2d4be365b1c4db9",
|
||||
"reference": "8db02de41dcca82037367f67a2d4be365b1c4db9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -4494,18 +4501,18 @@
|
|||
"php": ">=5.3.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"react/event-loop": "^1.2",
|
||||
"react/promise": "^3 || ^2.3 || ^1.2.1",
|
||||
"react/socket": "^1.12",
|
||||
"react/stream": "^1.2"
|
||||
"react/promise": "^3.2 || ^2.3 || ^1.2.1",
|
||||
"react/socket": "^1.16",
|
||||
"react/stream": "^1.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"clue/http-proxy-react": "^1.8",
|
||||
"clue/reactphp-ssh-proxy": "^1.4",
|
||||
"clue/socks-react": "^1.4",
|
||||
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
|
||||
"react/async": "^4 || ^3 || ^2",
|
||||
"react/async": "^4.2 || ^3 || ^2",
|
||||
"react/promise-stream": "^1.4",
|
||||
"react/promise-timer": "^1.9"
|
||||
"react/promise-timer": "^1.11"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
|
@ -4555,7 +4562,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/reactphp/http/issues",
|
||||
"source": "https://github.com/reactphp/http/tree/v1.10.0"
|
||||
"source": "https://github.com/reactphp/http/tree/v1.11.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -4563,7 +4570,7 @@
|
|||
"type": "open_collective"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-27T17:20:46+00:00"
|
||||
"time": "2024-11-20T15:24:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "react/promise",
|
||||
|
@ -5031,16 +5038,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/cache",
|
||||
"version": "v5.4.45",
|
||||
"version": "v5.4.46",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/cache.git",
|
||||
"reference": "12b03e3cc5c6fd495e56b2b9e7aca777f8608721"
|
||||
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/12b03e3cc5c6fd495e56b2b9e7aca777f8608721",
|
||||
"reference": "12b03e3cc5c6fd495e56b2b9e7aca777f8608721",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
|
||||
"reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5108,7 +5115,7 @@
|
|||
"psr6"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/cache/tree/v5.4.45"
|
||||
"source": "https://github.com/symfony/cache/tree/v5.4.46"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5124,20 +5131,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-25T15:37:00+00:00"
|
||||
"time": "2024-11-04T11:43:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache-contracts",
|
||||
"version": "v2.5.3",
|
||||
"version": "v2.5.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/cache-contracts.git",
|
||||
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
|
||||
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
|
||||
"reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
|
||||
"url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e",
|
||||
"reference": "517c3a3619dadfa6952c4651767fcadffb4df65e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5187,7 +5194,7 @@
|
|||
"standards"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
|
||||
"source": "https://github.com/symfony/cache-contracts/tree/v2.5.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5203,20 +5210,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T13:51:25+00:00"
|
||||
"time": "2024-09-25T14:11:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v6.4.13",
|
||||
"version": "v6.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79"
|
||||
"reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/f793dd5a7d9ae9923e35d0503d08ba734cec1d79",
|
||||
"reference": "f793dd5a7d9ae9923e35d0503d08ba734cec1d79",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
|
||||
"reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5281,7 +5288,7 @@
|
|||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v6.4.13"
|
||||
"source": "https://github.com/symfony/console/tree/v6.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5297,20 +5304,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-09T08:40:40+00:00"
|
||||
"time": "2024-11-06T14:19:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
|
||||
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
|
||||
"reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5348,7 +5355,7 @@
|
|||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5364,7 +5371,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
"time": "2024-09-25T14:20:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
|
@ -5842,16 +5849,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v6.4.13",
|
||||
"version": "v6.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f"
|
||||
"reference": "3cb242f059c14ae08591c5c4087d1fe443564392"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/1f9f59b46880201629df3bd950fc5ae8c55b960f",
|
||||
"reference": "1f9f59b46880201629df3bd950fc5ae8c55b960f",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392",
|
||||
"reference": "3cb242f059c14ae08591c5c4087d1fe443564392",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5883,7 +5890,7 @@
|
|||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v6.4.13"
|
||||
"source": "https://github.com/symfony/process/tree/v6.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5899,20 +5906,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-25T14:18:03+00:00"
|
||||
"time": "2024-11-06T14:19:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
"version": "v3.5.0",
|
||||
"version": "v3.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/service-contracts.git",
|
||||
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f"
|
||||
"reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
|
||||
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
|
||||
"reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -5966,7 +5973,7 @@
|
|||
"standards"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.5.0"
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.5.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -5982,20 +5989,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
"time": "2024-09-25T14:20:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v6.4.13",
|
||||
"version": "v6.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627"
|
||||
"reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/38371c60c71c72b3d64d8d76f6b1bb81a2cc3627",
|
||||
"reference": "38371c60c71c72b3d64d8d76f6b1bb81a2cc3627",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
|
||||
"reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -6052,7 +6059,7 @@
|
|||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v6.4.13"
|
||||
"source": "https://github.com/symfony/string/tree/v6.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -6068,20 +6075,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-25T14:18:03+00:00"
|
||||
"time": "2024-11-13T13:31:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v6.4.13",
|
||||
"version": "v6.4.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41"
|
||||
"reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41",
|
||||
"reference": "2acb151474ed8cb43624e3f41a0bf7c4c8ce4f41",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80",
|
||||
"reference": "38254d5a5ac2e61f2b52f9caf54e7aa3c9d36b80",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -6137,7 +6144,7 @@
|
|||
"dump"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v6.4.13"
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v6.4.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -6153,7 +6160,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-09-25T14:18:03+00:00"
|
||||
"time": "2024-11-08T15:28:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-exporter",
|
||||
|
@ -6445,16 +6452,16 @@
|
|||
},
|
||||
{
|
||||
"name": "xrdebug/php",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/xrdebug/php.git",
|
||||
"reference": "19e6a81dc40164fda6a80febe1417c01673c3b80"
|
||||
"reference": "0ef77144e845c384c5866f689a57eb2e12033f70"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/xrdebug/php/zipball/19e6a81dc40164fda6a80febe1417c01673c3b80",
|
||||
"reference": "19e6a81dc40164fda6a80febe1417c01673c3b80",
|
||||
"url": "https://api.github.com/repos/xrdebug/php/zipball/0ef77144e845c384c5866f689a57eb2e12033f70",
|
||||
"reference": "0ef77144e845c384c5866f689a57eb2e12033f70",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -6463,7 +6470,7 @@
|
|||
"chevere/standard": "^1.0.1",
|
||||
"chevere/throwable-handler": "^1.0.2",
|
||||
"chevere/trace": "^2.0.0",
|
||||
"chevere/var-dump": "^2.0.0",
|
||||
"chevere/var-dump": "^2.0.1",
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"php": "^8.1",
|
||||
|
@ -6506,9 +6513,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/xrdebug/php/issues",
|
||||
"source": "https://github.com/xrdebug/php/tree/2.0.2"
|
||||
"source": "https://github.com/xrdebug/php/tree/2.0.4"
|
||||
},
|
||||
"time": "2024-06-23T14:05:32+00:00"
|
||||
"time": "2024-11-06T20:05:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "xrdebug/xrdebug",
|
||||
|
@ -6652,16 +6659,16 @@
|
|||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.12.0",
|
||||
"version": "1.12.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
|
||||
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
|
||||
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -6700,7 +6707,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -6708,7 +6715,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-06-12T14:39:25+00:00"
|
||||
"time": "2024-11-08T17:47:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
|
@ -6830,16 +6837,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.12.7",
|
||||
"version": "1.12.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0"
|
||||
"reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
|
||||
"reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
|
||||
"reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -6884,7 +6891,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-18T11:12:07+00:00"
|
||||
"time": "2024-11-28T22:13:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
|
@ -8273,16 +8280,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symplify/easy-coding-standard",
|
||||
"version": "12.3.6",
|
||||
"version": "12.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/easy-coding-standard/easy-coding-standard.git",
|
||||
"reference": "c0f378782d06dfd21c66c3024e9d28f4e737645e"
|
||||
"reference": "54d26710fc05c733cbd788a23a709e7815ab0a67"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/c0f378782d06dfd21c66c3024e9d28f4e737645e",
|
||||
"reference": "c0f378782d06dfd21c66c3024e9d28f4e737645e",
|
||||
"url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/54d26710fc05c733cbd788a23a709e7815ab0a67",
|
||||
"reference": "54d26710fc05c733cbd788a23a709e7815ab0a67",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -8318,7 +8325,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues",
|
||||
"source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.6"
|
||||
"source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.4.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -8330,7 +8337,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-06T08:27:28+00:00"
|
||||
"time": "2024-12-03T12:53:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
|
|
1772
app/languages/pl.po
1772
app/languages/pl.po
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: VERSION\n"
|
||||
"POT-Creation-Date: 2023-05-22 15:49+0000\n"
|
||||
"PO-Revision-Date: 2023-05-22 15:49+0000\n"
|
||||
"POT-Creation-Date: 2024-11-14 15:22+0000\n"
|
||||
"PO-Revision-Date: 2024-11-14 15:22+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE TEAM <EMAIL@ADDRESS>\n"
|
||||
"Language: pt\n"
|
||||
|
@ -14,21 +14,40 @@ msgstr ""
|
|||
msgid "You have been forbidden to use this website."
|
||||
msgstr "Foi proibido de usar este site."
|
||||
|
||||
msgid "Moderate"
|
||||
msgstr "Moderar"
|
||||
|
||||
msgid "View all my images"
|
||||
msgstr "Ver todas as minhas imagens"
|
||||
|
||||
msgid "Recent"
|
||||
msgstr "Recente"
|
||||
|
||||
msgid "Trending"
|
||||
msgstr "Popular agora"
|
||||
|
||||
msgid "Popular"
|
||||
msgstr "Popular"
|
||||
|
||||
msgid "Animated"
|
||||
msgstr "Animadas"
|
||||
|
||||
msgid "Request denied"
|
||||
msgstr "Pedido negado"
|
||||
|
||||
msgid "terms"
|
||||
msgstr "termos"
|
||||
|
||||
msgid "privacy policy"
|
||||
msgstr "política de privacidade"
|
||||
|
||||
msgid "That page doesn't exist"
|
||||
msgstr "Esta página não existe"
|
||||
|
||||
#, php-format
|
||||
msgid "Page %s"
|
||||
msgstr "Página %s"
|
||||
|
||||
msgid "Forgot password?"
|
||||
msgstr "Esqueceu-se da senha?"
|
||||
|
||||
|
@ -44,11 +63,14 @@ msgstr "Adicione o seu endereço de email"
|
|||
msgid "Awaiting confirmation"
|
||||
msgstr "Aguardando confirmação"
|
||||
|
||||
msgid "Two-factor authentication"
|
||||
msgstr "Autenticação de dois factores"
|
||||
|
||||
msgid "Email changed"
|
||||
msgstr "E-mail alterado"
|
||||
|
||||
msgid "Invalid Username/Email"
|
||||
msgstr "Nome de usuário inválido / Email"
|
||||
msgstr "Nome de utilizador/Email inválido"
|
||||
|
||||
msgid "User doesn't have an email."
|
||||
msgstr "O utilizador não tem um e-mail."
|
||||
|
@ -59,6 +81,9 @@ msgstr "A conta precisa ser ativada antes de poder usar este recurso"
|
|||
msgid "Account already activated"
|
||||
msgstr "Conta activada"
|
||||
|
||||
msgid "Account banned"
|
||||
msgstr "Conta banida"
|
||||
|
||||
msgid "Allow up to 15 minutes for the email. You can try again later."
|
||||
msgstr "Aguarde até 15 minutos pela recepção do e-mail. Poderá tentar novamente mais tarde."
|
||||
|
||||
|
@ -86,6 +111,9 @@ msgstr "E-mail inválido"
|
|||
msgid "Email already being used"
|
||||
msgstr "Esse e-mail já está a ser utilizado"
|
||||
|
||||
msgid "Invalid code"
|
||||
msgstr "Código inválido"
|
||||
|
||||
msgid "Check the errors in the form to continue."
|
||||
msgstr "Verifique os erros no formulário para continuar."
|
||||
|
||||
|
@ -95,6 +123,9 @@ msgstr "É preciso senha"
|
|||
msgid "Embed codes"
|
||||
msgstr "Códigos para Incorporar"
|
||||
|
||||
msgid "albums"
|
||||
msgstr "álbuns"
|
||||
|
||||
msgid "%a album hosted in %w"
|
||||
msgstr "Álbum %a alojado em %w"
|
||||
|
||||
|
@ -103,12 +134,6 @@ msgid_plural "images"
|
|||
msgstr[0] "imagem"
|
||||
msgstr[1] "imagens"
|
||||
|
||||
msgid "Stats"
|
||||
msgstr "Estatísticas"
|
||||
|
||||
msgid "Images"
|
||||
msgstr "Imagens"
|
||||
|
||||
msgid "Album"
|
||||
msgid_plural "Albums"
|
||||
msgstr[0] "Álbum"
|
||||
|
@ -134,8 +159,11 @@ msgstr "Conteúdo"
|
|||
msgid "Listings"
|
||||
msgstr "Resultados"
|
||||
|
||||
msgid "Image upload"
|
||||
msgstr "Envio de imagem"
|
||||
msgid "File uploads"
|
||||
msgstr "Envios de ficheiros"
|
||||
|
||||
msgid "Semantics"
|
||||
msgstr "Semântica"
|
||||
|
||||
msgid "Categories"
|
||||
msgstr "Categorias"
|
||||
|
@ -152,8 +180,11 @@ msgstr "Idiomas"
|
|||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
msgid "External storage"
|
||||
msgstr "Alojamento externo"
|
||||
msgid "Tools"
|
||||
msgstr "Ferramentas"
|
||||
|
||||
msgid "Logo"
|
||||
msgstr "Logo"
|
||||
|
||||
msgid "Homepage"
|
||||
msgstr "Página principal"
|
||||
|
@ -161,11 +192,24 @@ msgstr "Página principal"
|
|||
msgid "Pages"
|
||||
msgstr "Páginas"
|
||||
|
||||
msgid "Consent screen"
|
||||
msgstr "Janela de consentimento"
|
||||
|
||||
#, php-format
|
||||
msgid "Guests %s"
|
||||
msgstr "Convidados %s"
|
||||
|
||||
msgid "External storage"
|
||||
msgstr "Alojamento externo"
|
||||
|
||||
msgid "Routing"
|
||||
msgstr "Redireccionamento"
|
||||
|
||||
msgid "External services"
|
||||
msgstr "Serviços externos"
|
||||
|
||||
msgid "Flood protection"
|
||||
msgstr "Protecção contra as inundações"
|
||||
msgstr "Protecção contra abuso"
|
||||
|
||||
msgid "IP bans"
|
||||
msgstr "Banimentos por IP"
|
||||
|
@ -173,59 +217,41 @@ msgstr "Banimentos por IP"
|
|||
msgid "Watermarks"
|
||||
msgstr "Marcas de água"
|
||||
|
||||
msgid "Documentation"
|
||||
msgstr "Documentação"
|
||||
|
||||
msgid "Support"
|
||||
msgstr "Suport"
|
||||
|
||||
msgid "Community"
|
||||
msgstr "Comunidade"
|
||||
msgstr "Suporte"
|
||||
|
||||
msgid "install update"
|
||||
msgstr "Instalar actualização"
|
||||
|
||||
msgid "Stats"
|
||||
msgstr "Estatísticas"
|
||||
|
||||
msgid "Rebuild stats"
|
||||
msgstr "Estatísticas de reconstrução"
|
||||
|
||||
msgid "Not your IP?"
|
||||
msgstr "Não é o seu IP?"
|
||||
|
||||
msgid "PHP version"
|
||||
msgstr "Versão do PHP"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
msgid "MySQL version"
|
||||
msgstr "Versão do MySQL"
|
||||
|
||||
msgid "MySQL server info"
|
||||
msgstr "Informação do servidor MySQL"
|
||||
|
||||
msgid "File uploads"
|
||||
msgstr "Envios de ficheiros"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Ativado"
|
||||
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
msgid "Max. execution time"
|
||||
msgstr "Tempo máximo de execução"
|
||||
msgid "Releases"
|
||||
msgstr "Lançamentos"
|
||||
|
||||
#, php-format
|
||||
msgid "%d second"
|
||||
msgid_plural "%d seconds"
|
||||
msgstr[0] "%d segundo"
|
||||
msgstr[1] "%d segundos"
|
||||
msgid "Community"
|
||||
msgstr "Comunidade"
|
||||
|
||||
msgid "Memory limit"
|
||||
msgstr "Limite de memória"
|
||||
msgid "Cron last ran"
|
||||
msgstr "Última execução do agendamento"
|
||||
|
||||
msgid "External"
|
||||
msgstr "Externo"
|
||||
msgid "PHP version"
|
||||
msgstr "Versão do PHP"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
msgid "All"
|
||||
msgstr "Todas"
|
||||
|
@ -233,33 +259,16 @@ msgstr "Todas"
|
|||
msgid "search content"
|
||||
msgstr "conteúdo de pesquisa"
|
||||
|
||||
msgid "Before pagination"
|
||||
msgstr "Antes de paginação"
|
||||
|
||||
msgid "After pagination"
|
||||
msgstr "Depois de paginação"
|
||||
|
||||
msgid "Before comments"
|
||||
msgstr "Antes dos comentários"
|
||||
|
||||
msgid "Image page"
|
||||
msgstr "Página da imagem"
|
||||
|
||||
msgid "Inside viewer top (image page)"
|
||||
msgstr "Topo da página para visualizar a imagem"
|
||||
|
||||
msgid "Footer (image page)"
|
||||
msgstr "Rodapé (página imagem)"
|
||||
|
||||
msgid "User profile page"
|
||||
msgstr "Página de perfil do utilizador"
|
||||
|
||||
msgid "After top (user profile)"
|
||||
msgstr "Depois de topo (perfil do utlizador)"
|
||||
|
||||
msgid "Explore"
|
||||
msgstr "Explorar"
|
||||
|
||||
#, php-format
|
||||
msgid "After top (%s page)"
|
||||
msgstr "Depois do topo (%s página)"
|
||||
|
||||
msgid "NSFW"
|
||||
msgstr "18+"
|
||||
|
||||
msgid "Invalid website name"
|
||||
msgstr "Nome da página inválido"
|
||||
|
||||
|
@ -269,6 +278,10 @@ msgstr "Idioma inválido"
|
|||
msgid "Invalid timezone"
|
||||
msgstr "Fuso horário inválido"
|
||||
|
||||
#, php-format
|
||||
msgid "Invalid value: %s"
|
||||
msgstr "Valor inválido: %s"
|
||||
|
||||
msgid "Invalid thumb width"
|
||||
msgstr "largura da miniatura inválida"
|
||||
|
||||
|
@ -281,46 +294,6 @@ msgstr "Tema inválido"
|
|||
msgid "Invalid value"
|
||||
msgstr "Valor inválido"
|
||||
|
||||
msgid "Invalid theme image listing size"
|
||||
msgstr "Tamanho para os resultados do tema inválido"
|
||||
|
||||
msgid "Invalid user id"
|
||||
msgstr "ID de usuário Inválido"
|
||||
|
||||
msgid "Invalid email mode"
|
||||
msgstr "Modo de e-mail inválido"
|
||||
|
||||
msgid "Invalid SMTP port"
|
||||
msgstr "Porta SMTP inválida"
|
||||
|
||||
msgid "Invalid SMTP security"
|
||||
msgstr "Segurança inválida SMTP "
|
||||
|
||||
msgid "Invalid website mode"
|
||||
msgstr "Modo de website inválido"
|
||||
|
||||
msgid "Invalid website content privacy mode"
|
||||
msgstr "modo de conteúdo do site privacidade inválido"
|
||||
|
||||
msgid "Invalid homepage style"
|
||||
msgstr "Estilo da página principal inválido"
|
||||
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL inválido"
|
||||
|
||||
msgid "Invalid upload image path"
|
||||
msgstr "Caminho para o envio de imagens inválido"
|
||||
|
||||
#, php-format
|
||||
msgid "Max. allowed %s"
|
||||
msgstr "Máximo permitido %s"
|
||||
|
||||
msgid "Invalid SMTP server"
|
||||
msgstr "Servidor SMTP inválido"
|
||||
|
||||
msgid "Invalid SMTP username"
|
||||
msgstr "Nome de usuário SMTP inválido"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr "Administração"
|
||||
|
||||
|
@ -342,21 +315,6 @@ msgstr "Imagem %i na categoria %c"
|
|||
msgid "Image %i hosted in %w"
|
||||
msgstr "Imagem %i alojada em %w"
|
||||
|
||||
msgid "Direct links"
|
||||
msgstr "Links Diretos"
|
||||
|
||||
msgid "Image link"
|
||||
msgstr "Link da imagem"
|
||||
|
||||
msgid "Image URL"
|
||||
msgstr "URL da imagem"
|
||||
|
||||
msgid "Thumbnail URL"
|
||||
msgstr "URL Thumbnail"
|
||||
|
||||
msgid "Medium URL"
|
||||
msgstr "URL Médio"
|
||||
|
||||
msgid "Login needed"
|
||||
msgstr "Necessário iniciar sessão"
|
||||
|
||||
|
@ -368,9 +326,6 @@ msgstr[1] "imagens"
|
|||
msgid "Category"
|
||||
msgstr "Categoria"
|
||||
|
||||
msgid "IP address already banned"
|
||||
msgstr "Endereço de IP já banido"
|
||||
|
||||
msgid "Missing values"
|
||||
msgstr "Valores em falta"
|
||||
|
||||
|
@ -383,6 +338,9 @@ msgstr "Papel inválido"
|
|||
msgid "Username already being used"
|
||||
msgstr "Nome de utilizador já está a ser utilizado"
|
||||
|
||||
msgid "IP address already banned"
|
||||
msgstr "Endereço de IP já banido"
|
||||
|
||||
#, php-format
|
||||
msgid "%s has been disconnected."
|
||||
msgstr "%s foi desconectado."
|
||||
|
@ -449,6 +407,9 @@ msgstr "Apagar utilizador"
|
|||
msgid "User ID"
|
||||
msgstr "ID de utilizador"
|
||||
|
||||
msgid "Images"
|
||||
msgstr "Imagens"
|
||||
|
||||
msgid "Register date"
|
||||
msgstr "Data de registo"
|
||||
|
||||
|
@ -584,7 +545,7 @@ msgid "%s ago"
|
|||
msgstr "%s atrás"
|
||||
|
||||
msgid "moments ago"
|
||||
msgstr "à momentos atrás"
|
||||
msgstr "há poucos segundos"
|
||||
|
||||
msgid "Random"
|
||||
msgstr "Aleatório"
|
||||
|
@ -642,28 +603,24 @@ msgstr "Imagem de fundo eliminada."
|
|||
msgid "Error deleting profile background image."
|
||||
msgstr "Erro apagar imagem de fundo do perfil"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Update available v%s"
|
||||
msgstr "Actualização disponível v%s"
|
||||
|
||||
msgid "Like"
|
||||
msgstr "Gostar"
|
||||
|
||||
msgid "Create album"
|
||||
msgstr "Criar álbum"
|
||||
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
msgid "Previous"
|
||||
msgstr "Anterior"
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
msgid "Like"
|
||||
msgstr "Gostar"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Próximo"
|
||||
|
||||
msgid "Previous"
|
||||
msgstr "Anterior"
|
||||
|
||||
msgid "File too big."
|
||||
msgstr "Ficheiro muito grande."
|
||||
|
||||
|
@ -677,9 +634,6 @@ msgstr "Alguns arquivos não puderam ser adiccionados"
|
|||
msgid "%s's Albums"
|
||||
msgstr "Álbuns de %s"
|
||||
|
||||
msgid "Image edited successfully."
|
||||
msgstr "Imagem editada com sucesso."
|
||||
|
||||
msgid "private"
|
||||
msgstr "Privado"
|
||||
|
||||
|
@ -820,9 +774,6 @@ msgstr "Obrigado por se juntar a nós"
|
|||
msgid "This email was sent from %w %u"
|
||||
msgstr "Este e-mail foi enviado por %w %u"
|
||||
|
||||
msgid "Select the images to upload"
|
||||
msgstr "Selecionar as imagens para envio"
|
||||
|
||||
msgid "complete"
|
||||
msgstr "completo"
|
||||
|
||||
|
@ -862,36 +813,12 @@ msgstr "Assinalar como inseguro"
|
|||
msgid "Description"
|
||||
msgstr "Descrição"
|
||||
|
||||
msgid "Add image URLs"
|
||||
msgstr "Adicionar URLs de imagem"
|
||||
|
||||
msgid "Add the image URLs here"
|
||||
msgstr "Adicione os URLs de imagem aqui"
|
||||
|
||||
msgid "Error report"
|
||||
msgstr "Relatório de erro"
|
||||
|
||||
msgid "Direct"
|
||||
msgstr "Directo"
|
||||
|
||||
msgid "HTML Codes"
|
||||
msgstr "Códigos HTML"
|
||||
|
||||
msgid "HTML medium linked"
|
||||
msgstr "HTML médio"
|
||||
|
||||
msgid "HTML thumbnail linked"
|
||||
msgstr "HTML da miniatura"
|
||||
|
||||
msgid "BBCode medium linked"
|
||||
msgstr "Código BBCode do tamanho médio"
|
||||
|
||||
msgid "BBCode thumbnail linked"
|
||||
msgstr "Código BBCode da miniatura"
|
||||
|
||||
msgid "Viewer links"
|
||||
msgstr "Ver links"
|
||||
|
||||
msgid "All these words"
|
||||
msgstr "Todas estas palavras"
|
||||
|
||||
|
@ -1024,6 +951,9 @@ msgstr "Entre com outra conta"
|
|||
msgid "There's nothing to show here."
|
||||
msgstr "Não há nada para ver aqui."
|
||||
|
||||
msgid "Selection will be assigned to %t."
|
||||
msgstr "A selecção vai ser atribuída a %t."
|
||||
|
||||
msgid "There is no categories."
|
||||
msgstr "Não existem categorias."
|
||||
|
||||
|
@ -1198,6 +1128,34 @@ msgstr "Activo"
|
|||
msgid "Disk used"
|
||||
msgstr "Espaço usado"
|
||||
|
||||
msgid "Enable uploads"
|
||||
msgstr "Activar envios"
|
||||
|
||||
msgid "Guest uploads"
|
||||
msgstr "Envios de visitantes"
|
||||
|
||||
msgid "Enable this if you want to allow non registered users to upload."
|
||||
msgstr "Ative isto se quiser permitir que os utilizadores não registados façam envios."
|
||||
|
||||
msgid "Relative to Chevereto root"
|
||||
msgstr "Relativo ao root do Chevereto"
|
||||
|
||||
msgid "Storage mode"
|
||||
msgstr "Modo de armazenamento"
|
||||
|
||||
#, php-format
|
||||
msgid "Datefolders creates %s structure"
|
||||
msgstr "Datefolders cria %s estrutura"
|
||||
|
||||
msgid "File naming method"
|
||||
msgstr "Método de nomeação do arquivo"
|
||||
|
||||
msgid "Thumb size"
|
||||
msgstr "Tamanho da miniatura"
|
||||
|
||||
msgid "Thumbnails will be fixed to this size."
|
||||
msgstr "As miniaturas serão ajustadas para este tamanho."
|
||||
|
||||
msgid "Notify to email"
|
||||
msgstr "Notificar para o e-mail"
|
||||
|
||||
|
@ -1243,40 +1201,6 @@ msgstr "Branco"
|
|||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
msgid "Enable uploads"
|
||||
msgstr "Activar envios"
|
||||
|
||||
msgid "Guest uploads"
|
||||
msgstr "Envios de visitantes"
|
||||
|
||||
msgid "Enable this if you want to allow non registered users to upload."
|
||||
msgstr "Ative isto se quiser permitir que os utilizadores não registados façam envios."
|
||||
|
||||
msgid "Image path"
|
||||
msgstr "Caminho da imagem"
|
||||
|
||||
msgid "Relative to Chevereto root"
|
||||
msgstr "Relativo ao root do Chevereto"
|
||||
|
||||
msgid "Where to store the images? Relative to Chevereto root."
|
||||
msgstr "Onde alojar as imagens? Relativo ao root do Chevereto."
|
||||
|
||||
msgid "Storage mode"
|
||||
msgstr "Modo de armazenamento"
|
||||
|
||||
#, php-format
|
||||
msgid "Datefolders creates %s structure"
|
||||
msgstr "Datefolders cria %s estrutura"
|
||||
|
||||
msgid "File naming method"
|
||||
msgstr "Método de nomeação do arquivo"
|
||||
|
||||
msgid "Thumb size"
|
||||
msgstr "Tamanho da miniatura"
|
||||
|
||||
msgid "Thumbnails will be fixed to this size."
|
||||
msgstr "As miniaturas serão ajustadas para este tamanho."
|
||||
|
||||
msgid "Expires"
|
||||
msgstr "Expira"
|
||||
|
||||
|
@ -1514,14 +1438,11 @@ msgstr "Endereço de email"
|
|||
|
||||
#, php-format
|
||||
msgid "Added to %s"
|
||||
msgstr "Adicionar a %s"
|
||||
msgstr "Adicionado a %s"
|
||||
|
||||
msgid "Add IP ban"
|
||||
msgstr "Adicionar banimento de IP"
|
||||
|
||||
msgid "Upload and share your images."
|
||||
msgstr "Envie e compartilhe as suas imagens."
|
||||
|
||||
msgid "Sign up to unlock all the features"
|
||||
msgstr "Registre-se agora Grátis"
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,9 +14,9 @@ use function Chevereto\Legacy\feedbackAlert;
|
|||
use function Chevereto\Legacy\isSafeToExecute;
|
||||
use function Chevereto\Vars\env;
|
||||
|
||||
if (!(bool) env()['CHEVERETO_ENABLE_BULK_IMPORTER']) {
|
||||
if (! (bool) env()['CHEVERETO_ENABLE_BULK_IMPORTER']) {
|
||||
feedbackAlert('Bulk importer is disabled');
|
||||
die(255);
|
||||
exit(255);
|
||||
}
|
||||
$threadID = getenv('THREAD_ID') ?: 0;
|
||||
$loop = 1;
|
||||
|
@ -26,7 +26,7 @@ do {
|
|||
if ($jobs === []) {
|
||||
echo "~They took our jobs!~\n";
|
||||
echo "[OK] No jobs left.\n";
|
||||
die(0);
|
||||
exit(0);
|
||||
}
|
||||
$id = $jobs[0]['import_id'];
|
||||
$import = new Import();
|
||||
|
@ -34,13 +34,15 @@ do {
|
|||
$import->thread = (int) $threadID;
|
||||
$import->get();
|
||||
if ($import->isLocked()) {
|
||||
$import->edit(['status' => 'paused']);
|
||||
echo "> Job locked for id #$id\n";
|
||||
$import->edit([
|
||||
'status' => 'paused',
|
||||
]);
|
||||
echo "> Job locked for id #{$id}\n";
|
||||
} else {
|
||||
echo "* Processing job id #$id\n";
|
||||
echo "* Processing job id #{$id}\n";
|
||||
$import->process();
|
||||
}
|
||||
$loop++;
|
||||
} while (isSafeToExecute());
|
||||
echo "--\n[OK] Automatic importing looped $loop times ~ /dashboard/bulk for stats\n";
|
||||
die(0);
|
||||
echo "--\n[OK] Automatic importing looped {$loop} times ~ /dashboard/bulk for stats\n";
|
||||
exit(0);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
use function Chevereto\Legacy\loaderHandler;
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
|
@ -46,7 +47,7 @@ define('ACCESS', $access);
|
|||
require_once __DIR__ . '/../load/php-boot.php';
|
||||
require_once loaderHandler(
|
||||
$_COOKIE,
|
||||
$_ENV,
|
||||
getCheveretoEnv(),
|
||||
$_FILES,
|
||||
$_GET,
|
||||
$_POST,
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
*/
|
||||
|
||||
use function Chevereto\Legacy\G\sanitize_path_slashes;
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
use function Chevereto\Legacy\loaderHandler;
|
||||
|
||||
define('ACCESS', 'web');
|
||||
|
@ -35,7 +36,7 @@ if (in_array($urlPath, ['/upgrading', '/upgrading/'], true)
|
|||
}
|
||||
require_once loaderHandler(
|
||||
$_COOKIE,
|
||||
$_ENV,
|
||||
getCheveretoEnv(),
|
||||
$_FILES,
|
||||
$_GET,
|
||||
$_POST,
|
||||
|
|
|
@ -86,6 +86,7 @@ $db_array = [
|
|||
];
|
||||
$error = false;
|
||||
$db_conn_error = "Can't connect to the target database. The server replied with this:<br>%s<br><br>Please fix your MySQL info.";
|
||||
$installed_version = cheveretoVersionInstalled();
|
||||
$settings_updates = [
|
||||
'3.0.0' => [
|
||||
'analytics_code' => '',
|
||||
|
@ -632,7 +633,11 @@ $settings_updates = [
|
|||
'arachnid_api_password' => '',
|
||||
],
|
||||
'4.2.1' => null,
|
||||
'4.2.2' => null,
|
||||
'4.2.3' => null,
|
||||
'4.2.4' => null,
|
||||
];
|
||||
|
||||
/**
|
||||
* The following settings are for enabling backwards compatibility
|
||||
* It is recommended to use a proper storage device when possible!
|
||||
|
@ -640,21 +645,23 @@ $settings_updates = [
|
|||
* You can configure both asset/external storage from the admin dashboard.
|
||||
*/
|
||||
if ((bool) env()['CHEVERETO_ENABLE_LOCAL_STORAGE']) {
|
||||
// Legacy application stores assets relative to root
|
||||
// target -> /content/images/...
|
||||
// Reflect a path under /images/ which is the default persistent storage mounted path for zero config
|
||||
// target -> /images/_assets/content/images...
|
||||
$asset_storage_default = [
|
||||
'asset_storage_api_id' => '8',
|
||||
'asset_storage_bucket' => PATH_PUBLIC,
|
||||
'asset_storage_url' => URL_APP_PUBLIC_STATIC,
|
||||
'asset_storage_bucket' => PATH_PUBLIC . 'images/_assets/',
|
||||
'asset_storage_url' => env()['CHEVERETO_HOSTNAME_PATH'] . 'images/_assets/',
|
||||
];
|
||||
if (env()['CHEVERETO_SERVICING'] === 'docker') {
|
||||
// Reflect a path under /images/ which is the default persistent storage mounted path for zero config
|
||||
// target -> /images/_assets/content/images...
|
||||
$asset_storage_default = [
|
||||
'asset_storage_api_id' => '8',
|
||||
'asset_storage_bucket' => PATH_PUBLIC . 'images/_assets/',
|
||||
'asset_storage_url' => URL_APP_PUBLIC_STATIC . 'images/_assets/',
|
||||
];
|
||||
if ($installed_version !== '') {
|
||||
// Legacy application stores assets relative to root
|
||||
// target -> /content/images/...
|
||||
if (env()['CHEVERETO_SERVICING'] === 'server') {
|
||||
$asset_storage_default = [
|
||||
'asset_storage_api_id' => '8',
|
||||
'asset_storage_bucket' => PATH_PUBLIC,
|
||||
'asset_storage_url' => env()['CHEVERETO_HOSTNAME_PATH'],
|
||||
];
|
||||
}
|
||||
}
|
||||
$settings_updates['4.2.0'] = array_merge($settings_updates['4.2.0'], $asset_storage_default);
|
||||
}
|
||||
|
@ -780,7 +787,6 @@ if (hasEnvDbInfo()) {
|
|||
$doing = 'ready';
|
||||
}
|
||||
$fulltext_engine = 'InnoDB';
|
||||
$installed_version = cheveretoVersionInstalled();
|
||||
$maintenance = getSetting('maintenance');
|
||||
if (isset($cheveretoFreeMap[$installed_version])) {
|
||||
$installed_version = $cheveretoFreeMap[$installed_version];
|
||||
|
@ -1034,7 +1040,7 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
],
|
||||
'login_secret' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => $isUtf8mb4 ? 'mediumtext' : 'text', //3.13.0
|
||||
'type' => 'text',
|
||||
'prop' => "DEFAULT NULL COMMENT 'The secret part'",
|
||||
],
|
||||
],
|
||||
|
@ -1048,12 +1054,12 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
'settings' => [
|
||||
'setting_value' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => $isUtf8mb4 ? 'mediumtext' : 'text', //3.13.0
|
||||
'type' => 'text', //3.13.0
|
||||
'prop' => null,
|
||||
],
|
||||
'setting_default' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => $isUtf8mb4 ? 'mediumtext' : 'text', //3.13.0
|
||||
'type' => 'text', //3.13.0
|
||||
'prop' => null,
|
||||
],
|
||||
],
|
||||
|
@ -1086,11 +1092,11 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
],
|
||||
'3.5.0' => [
|
||||
'images' => [
|
||||
'image_original_exifdata' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => 'longtext',
|
||||
'prop' => null,
|
||||
],
|
||||
// 'image_original_exifdata' => [
|
||||
// 'op' => 'MODIFY',
|
||||
// 'type' => 'text',
|
||||
// 'prop' => null,
|
||||
// ],
|
||||
'image_storage' => [
|
||||
'op' => 'CHANGE',
|
||||
'to' => 'image_storage_mode',
|
||||
|
@ -1256,12 +1262,12 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
'storages' => [
|
||||
'storage_key' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => $isUtf8mb4 ? 'mediumtext' : 'text', //3.13.0
|
||||
'type' => 'text', //3.13.0
|
||||
'prop' => null,
|
||||
],
|
||||
'storage_secret' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => $isUtf8mb4 ? 'mediumtext' : 'text', //3.13.0
|
||||
'type' => 'text', //3.13.0
|
||||
'prop' => null,
|
||||
],
|
||||
],
|
||||
|
@ -1829,7 +1835,7 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
'pages' => [
|
||||
'page_code' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => 'mediumtext',
|
||||
'type' => 'text',
|
||||
'prop' => null,
|
||||
],
|
||||
],
|
||||
|
@ -2007,6 +2013,22 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
VALUES('news_check_datetimegmt', (SELECT `setting_value` FROM `%table_prefix%settings` WHERE `setting_name` = 'news_check_datetimegmt'), 'string');
|
||||
SQL,
|
||||
],
|
||||
'4.2.3' => [
|
||||
'images' => [
|
||||
'image_original_exifdata' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => 'mediumtext',
|
||||
'prop' => null,
|
||||
],
|
||||
],
|
||||
'importing' => [
|
||||
'importing_content_id' => [
|
||||
'op' => 'MODIFY',
|
||||
'type' => 'bigint(32)',
|
||||
'prop' => 'DEFAULT NULL',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
$sql_update = [];
|
||||
if (! $maintenance) {
|
||||
|
@ -2186,6 +2208,12 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
SQL;
|
||||
}
|
||||
}
|
||||
$APP_VERSION = APP_VERSION;
|
||||
$sql_update[] = <<<MySQL
|
||||
INSERT INTO `%table_prefix%variables` (variable_name, variable_value, variable_type)
|
||||
VALUES ("chevereto_version_installed", "{$APP_VERSION}", "string")
|
||||
ON DUPLICATE KEY UPDATE variable_value = "{$APP_VERSION}", variable_type = "string";
|
||||
MySQL;
|
||||
if (! $maintenance) {
|
||||
$sql_update[] = 'UPDATE `%table_prefix%settings` SET `setting_value` = 0 WHERE `setting_name` = "maintenance";';
|
||||
}
|
||||
|
@ -2239,9 +2267,6 @@ if ($installed_version !== '' && empty($paramsCheck)) {
|
|||
logger("[STATUS] Updating Chevereto database (this may take a while)...\n");
|
||||
logger("[SQL]\n{$sql_update}\n");
|
||||
$updated = $db->exec();
|
||||
if ($updated) {
|
||||
Variable::set('chevereto_version_installed', APP_VERSION);
|
||||
}
|
||||
} catch (Throwable $e) {
|
||||
throw new LogicException(
|
||||
(string) message(
|
||||
|
@ -2403,7 +2428,7 @@ EOT;
|
|||
ADD `image_source_md5` varchar(32) DEFAULT NULL,
|
||||
ADD `image_storage_mode` enum('datefolder','direct','old') NOT NULL DEFAULT 'datefolder',
|
||||
ADD `image_original_filename` text NOT NULL,
|
||||
ADD `image_original_exifdata` longtext,
|
||||
ADD `image_original_exifdata` mediumtext,
|
||||
ADD `image_views` bigint(32) NOT NULL DEFAULT '0',
|
||||
ADD `image_category_id` bigint(32) DEFAULT NULL,
|
||||
ADD `image_chain` tinyint(128) NOT NULL,
|
||||
|
|
|
@ -1,54 +1,68 @@
|
|||
<?php
|
||||
|
||||
use Chevereto\Legacy\Classes\Settings;
|
||||
use function Chevereto\Vars\env;
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
if (! defined('ACCESS') || ! ACCESS) {
|
||||
exit('This file cannot be directly accessed.');
|
||||
} ?>
|
||||
<h1><i class="fa fa-box-open"></i> Ready to install</h1>
|
||||
<p>Fill this form with the details of the initial admin account you want to use.</p>
|
||||
<p>You can change this account later on.</p>
|
||||
}
|
||||
$version_patch = APP_VERSION;
|
||||
$explode = explode('.', $version_patch);
|
||||
$version_major = $explode[0];
|
||||
$version_minor = $version_major . '.' . $explode[1];
|
||||
$version_link = strtr(
|
||||
'https://releases.chevereto.com/%major%.X/%minor%/%patch%.html',
|
||||
[
|
||||
'%major%' => $version_major,
|
||||
'%minor%' => $version_minor,
|
||||
'%patch%' => $version_patch,
|
||||
]
|
||||
);
|
||||
$edition = ucfirst(env()['CHEVERETO_EDITION'] ?? '');
|
||||
?>
|
||||
<h1><i class="fa fa-box-open"></i> Chevereto <?php echo $edition; ?> <a class="label--version" target="_blank" href="<?php echo $version_link; ?>"><?php echo APP_VERSION; ?></a></h1>
|
||||
<p>Fill this form with the details of the initial admin account you want to use. You can change this account later on.</p>
|
||||
<?php if ($error ?? false) { ?>
|
||||
<p class="highlight padding-10"><?php echo $error_message ?? ''; ?></p>
|
||||
<p class="highlight padding-10"><?php echo $error_message ?? ''; ?></p>
|
||||
<?php } ?>
|
||||
<form method="post">
|
||||
<div>
|
||||
<div class="p input-label">
|
||||
<label for="username">Admin username</label>
|
||||
<form method="post">
|
||||
<div>
|
||||
<div class="p input-label">
|
||||
<label for="username">Admin username</label>
|
||||
<input type="text" name="username" id="username" class="width-100p" value="<?php echo $safe_post['username'] ?? ''; ?>" placeholder="Admin username" pattern="<?php echo Settings::USERNAME_PATTERN; ?>" title='<?php echo strtr('%i to %f characters<br>Letters, numbers and "_"', [
|
||||
'%i' => Settings::USERNAME_MIN_LENGTH,
|
||||
'%f' => Settings::USERNAME_MAX_LENGTH,
|
||||
]); ?>' maxlength="<?php echo Settings::USERNAME_MAX_LENGTH; ?>" required>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['username'] ?? ''; ?></span>
|
||||
</div>
|
||||
<div class="p input-label">
|
||||
<label for="email">Admin email</label>
|
||||
<input type="email" name="email" id="email" class="width-100p" value="<?php echo $safe_post['email'] ?? ''; ?>" placeholder="Admin email" title="Valid email address for your admin account" required>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['email'] ?? ''; ?></span>
|
||||
</div>
|
||||
<div class="p input-label input-password">
|
||||
<label for="password">Admin password</label>
|
||||
<input type="password" name="password" id="password" class="width-100p" value="" placeholder="Admin password" title="Password to login" pattern="<?php echo Settings::USER_PASSWORD_PATTERN; ?>" autocomplete="new-password" required>
|
||||
<div class="input-password-strength"><span style="width: 0%" data-content="password-meter-bar"></span></div>
|
||||
<div class="input-warning red-warning" data-text="password-meter-message"><?php echo $input_errors['password'] ?? ''; ?></div>
|
||||
</div>
|
||||
</div>
|
||||
]); ?>' maxlength="<?php echo Settings::USERNAME_MAX_LENGTH; ?>" required>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['username'] ?? ''; ?></span>
|
||||
</div>
|
||||
<div class="p input-label">
|
||||
<label for="email">Admin email</label>
|
||||
<input type="email" name="email" id="email" class="width-100p" value="<?php echo $safe_post['email'] ?? ''; ?>" placeholder="Admin email" title="Valid email address for your admin account" required>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['email'] ?? ''; ?></span>
|
||||
</div>
|
||||
<div class="p input-label input-password">
|
||||
<label for="password">Admin password</label>
|
||||
<input type="password" name="password" id="password" class="width-100p" value="" placeholder="Admin password" title="Password to login" pattern="<?php echo Settings::USER_PASSWORD_PATTERN; ?>" autocomplete="new-password" required>
|
||||
<div class="input-password-strength"><span style="width: 0%" data-content="password-meter-bar"></span></div>
|
||||
<div class="input-warning red-warning" data-text="password-meter-message"><?php echo $input_errors['password'] ?? ''; ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
if ($is_2X ?? false) {
|
||||
?>
|
||||
<div>
|
||||
<div class="p input-label">
|
||||
<label for="crypt_salt">__CHV_CRYPT_SALT__</label>
|
||||
<input type="text" name="crypt_salt" id="crypt_salt" class="width-100p" value="<?php echo $safe_post['crypt_salt'] ?? ''; ?>" placeholder="Example: changeme" title="As defined in includes/definitions.php" required>
|
||||
<span class="input-below highlight">Value from define("__CHV_CRYPT_SALT__", "changeme");</span>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['crypt_salt'] ?? ''; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="p input-label">
|
||||
<label for="crypt_salt">__CHV_CRYPT_SALT__</label>
|
||||
<input type="text" name="crypt_salt" id="crypt_salt" class="width-100p" value="<?php echo $safe_post['crypt_salt'] ?? ''; ?>" placeholder="Example: changeme" title="As defined in includes/definitions.php" required>
|
||||
<span class="input-below highlight">Value from define("__CHV_CRYPT_SALT__", "changeme");</span>
|
||||
<span class="input-warning red-warning"><?php echo $input_errors['crypt_salt'] ?? ''; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<div>
|
||||
<button class="action radius" type="submit">Install</button>
|
||||
</div>
|
||||
</form>
|
||||
<div>
|
||||
<button class="action radius" type="submit">Install</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -9,5 +9,5 @@
|
|||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
const APP_VERSION = '4.2.1';
|
||||
const APP_VERSION = '4.2.4';
|
||||
const APP_VERSION_AKA = 'regio';
|
||||
|
|
|
@ -85,7 +85,10 @@ set_exception_handler(function (Throwable $throwable) {
|
|||
try {
|
||||
$debugLevel = Config::system()->debugLevel();
|
||||
} catch (Throwable) {
|
||||
$debugLevel = (int) ($_ENV['CHEVERETO_DEBUG_LEVEL'] ?? 1);
|
||||
$envDebugLevel = getenv('CHEVERETO_DEBUG_LEVEL');
|
||||
$debugLevel = $envDebugLevel === false
|
||||
? 1
|
||||
: (int) $envDebugLevel;
|
||||
}
|
||||
$doDebug = in_array($debugLevel, [2, 3], true) || isDebug();
|
||||
$publicHandler = $publicHandler->withIsDebug($doDebug);
|
||||
|
|
|
@ -256,9 +256,15 @@ return function (Handler $handler) {
|
|||
'link' => $recovery_link,
|
||||
];
|
||||
if ($doing === 'password-forgot') {
|
||||
$mail['subject'] = _s('Reset your password at %s', getSetting('website_name', true));
|
||||
$mail['subject'] = _s(
|
||||
'Reset your password at %s',
|
||||
getSetting('website_name')
|
||||
);
|
||||
} else {
|
||||
$mail['subject'] = _s('Confirmation required at %s', getSetting('website_name', true));
|
||||
$mail['subject'] = _s(
|
||||
'Confirmation required at %s',
|
||||
getSetting('website_name')
|
||||
);
|
||||
}
|
||||
$mail['message'] = get_email_body_str('mails/account-' . ($doing === 'password-forgot' ? 'password-reset' : 'confirm'));
|
||||
if (send_mail($user['email'], $mail['subject'], $mail['message'])) {
|
||||
|
@ -375,7 +381,7 @@ return function (Handler $handler) {
|
|||
$theme_mail = [
|
||||
'user' => $logged_user,
|
||||
];
|
||||
$mail['subject'] = _s('Welcome to %s', getSetting('website_name', true));
|
||||
$mail['subject'] = _s('Welcome to %s', getSetting('website_name'));
|
||||
$mail['message'] = get_email_body_str('mails/account-welcome');
|
||||
if (send_mail($logged_user['email'], $mail['subject'], $mail['message'])) {
|
||||
$is_process_done = true;
|
||||
|
@ -497,7 +503,7 @@ return function (Handler $handler) {
|
|||
'user' => $logged_user,
|
||||
'link' => $activation_link,
|
||||
];
|
||||
$mail['subject'] = _s('Confirmation required at %s', getSettings('website_name', true));
|
||||
$mail['subject'] = _s('Confirmation required at %s', getSettings('website_name'));
|
||||
$mail['message'] = get_email_body_str('mails/account-confirm');
|
||||
if (send_mail($POST['email'], $mail['subject'], $mail['message'])) {
|
||||
$is_process_done = true;
|
||||
|
|
|
@ -201,7 +201,12 @@ return function (Handler $handler) {
|
|||
'user_username' => $user['username'] ?? null,
|
||||
'user_email' => $user['email'] ?? null,
|
||||
];
|
||||
Akismet::checkImage($params['title'] ?? null, $params['description'] ?? null, $user_source_db);
|
||||
Akismet::checkImage(
|
||||
title: $params['title'] ?? null,
|
||||
description: $params['description'] ?? null,
|
||||
tags: $params['tags'] ?? null,
|
||||
source_db: $user_source_db
|
||||
);
|
||||
}
|
||||
$uploadToWebsite = Image::uploadToWebsite($source, $user, $params);
|
||||
$uploaded_id = intval($uploadToWebsite[0]);
|
||||
|
|
|
@ -149,7 +149,7 @@ return function (Handler $handler) {
|
|||
$routesLinkLabels = $routes;
|
||||
$paidRoutes = [];
|
||||
$paidRoutesEnv = [
|
||||
'bulk-importer' => ['pro', 'CHEVERETO_ENABLE_BULK_IMPORTER'],
|
||||
// 'bulk-importer' => ['pro', 'CHEVERETO_ENABLE_BULK_IMPORTER'],
|
||||
];
|
||||
$removeSaaSContextRoutes = [
|
||||
'bulk-importer' => ! ((bool) env()['CHEVERETO_ENABLE_BULK_IMPORTER']),
|
||||
|
@ -198,9 +198,9 @@ return function (Handler $handler) {
|
|||
'consent-screen' => _s('Consent screen'),
|
||||
'users' => _n('User', 'Users', 20),
|
||||
'guest-api' => _s('Guests %s', 'API'),
|
||||
'login-providers' => _s('Login providers'),
|
||||
'routing' => _s('Routing'),
|
||||
'external-services' => _s('External services'),
|
||||
'login-providers' => _s('Login providers'),
|
||||
'cookie-compliance' => _s('Cookie compliance'),
|
||||
'flood-protection' => _s('Flood protection'),
|
||||
'banners' => _s('Banners'),
|
||||
|
@ -249,8 +249,7 @@ return function (Handler $handler) {
|
|||
'guest-api' => ['lite', 'CHEVERETO_ENABLE_API_GUEST'],
|
||||
'homepage' => ['lite', 'CHEVERETO_ENABLE_USERS'],
|
||||
'ip-bans' => ['pro', 'CHEVERETO_ENABLE_IP_BANS'],
|
||||
'login-providers' => ['pro', 'CHEVERETO_ENABLE_LOGIN_PROVIDERS'],
|
||||
'logo' => ['free', 'CHEVERETO_ENABLE_LOGO_CUSTOM'],
|
||||
'login-providers' => ['lite', 'CHEVERETO_ENABLE_LOGIN_PROVIDERS'],
|
||||
'pages' => ['lite', 'CHEVERETO_ENABLE_PAGES'],
|
||||
'routing' => ['pro', 'CHEVERETO_ENABLE_ROUTING'],
|
||||
'users' => ['lite', 'CHEVERETO_ENABLE_USERS'],
|
||||
|
|
|
@ -19,6 +19,8 @@ use function Chevereto\Legacy\encodeID;
|
|||
use function Chevereto\Legacy\flatten_array;
|
||||
use function Chevereto\Legacy\G\get_current_url;
|
||||
use function Chevereto\Legacy\G\get_global;
|
||||
use function Chevereto\Legacy\G\get_route_name;
|
||||
use function Chevereto\Legacy\G\get_route_path;
|
||||
use function Chevereto\Legacy\G\redirect;
|
||||
use function Chevereto\Legacy\G\require_theme_file;
|
||||
use function Chevereto\Legacy\G\safe_html;
|
||||
|
@ -160,9 +162,13 @@ return function (Handler $handler) {
|
|||
$handler::setCond('album_cover', $is_album_cover);
|
||||
$image_safe_html = safe_html($image);
|
||||
$image['alt'] = $image_safe_html['description'] ?? ($image_safe_html['title'] ?? $image_safe_html['name']);
|
||||
$hostedAt = _s('%f hosted at %w', [
|
||||
'%f' => $image_safe_html['name'] . '.' . $image['extension'],
|
||||
'%w' => getSetting('website_name'),
|
||||
]);
|
||||
$pre_doctitle = isset($image['title'])
|
||||
? strip_tags($image['title'])
|
||||
: $image_safe_html['name'] . '.' . $image['extension'] . ' hosted at ' . getSetting('website_name');
|
||||
: $hostedAt;
|
||||
$tabs = [];
|
||||
$tabs[] = [
|
||||
'icon' => 'fas fa-list-ul',
|
||||
|
@ -171,7 +177,13 @@ return function (Handler $handler) {
|
|||
'current' => true,
|
||||
'url' => '#about',
|
||||
];
|
||||
$comments = getComments();
|
||||
$commentsArgs = [
|
||||
'url' => $image['url_short'],
|
||||
'id' => $image['type'] . ':' . $image['id_encoded'],
|
||||
'title' => $image['title_truncated_html'],
|
||||
];
|
||||
// $commentsArgs['id'] = str_replace_first(get_route_path(), get_route_name(), get_route_path(true)); // Legacy fix
|
||||
$comments = getComments(...$commentsArgs);
|
||||
if ($comments !== '') {
|
||||
$tabs[] = [
|
||||
'icon' => 'fas fa-comments',
|
||||
|
@ -216,7 +228,7 @@ return function (Handler $handler) {
|
|||
]);
|
||||
$image_admin_list_values = [
|
||||
[
|
||||
'label' => _s('Image ID'),
|
||||
'label' => _s('File ID'),
|
||||
'content' => $image['id'] . ' (' . $image['id_encoded'] . ')',
|
||||
],
|
||||
getIpButtonsArray($bannedIp, $image['uploader_ip']),
|
||||
|
@ -226,7 +238,7 @@ return function (Handler $handler) {
|
|||
],
|
||||
[
|
||||
'label' => '',
|
||||
'content' => $image['date_gmt'] . ' (GMT)',
|
||||
'content' => $image['date_gmt'] . ' (UTC)',
|
||||
],
|
||||
];
|
||||
$handler::setVar('content_ip', $image['uploader_ip']);
|
||||
|
|
|
@ -136,9 +136,10 @@ return function (Handler $handler) {
|
|||
}
|
||||
if (! $handler::cond('content_manager') && getSetting('akismet')) {
|
||||
Akismet::checkImage(
|
||||
$REQUEST['title'] ?? null,
|
||||
$REQUEST['description'] ?? null,
|
||||
$logged_user_source_db
|
||||
title: $REQUEST['title'] ?? null,
|
||||
description: $REQUEST['description'] ?? null,
|
||||
tags: $REQUEST['tags'] ?? null,
|
||||
source_db: $logged_user_source_db
|
||||
);
|
||||
}
|
||||
$uploadToWebsite = Image::uploadToWebsite($source, $logged_user, $REQUEST);
|
||||
|
@ -553,7 +554,12 @@ return function (Handler $handler) {
|
|||
if (! $handler::cond('content_manager')
|
||||
&& getSetting('akismet')
|
||||
) {
|
||||
Akismet::checkImage($editing['title'], $editing['description'], $source_image_db);
|
||||
Akismet::checkImage(
|
||||
title: $editing['title'] ?? null,
|
||||
description: $editing['description'] ?? null,
|
||||
tags: $editing['tags'] ?? null,
|
||||
source_db: $source_image_db
|
||||
);
|
||||
}
|
||||
Image::update($id, $editing);
|
||||
$image_edit_db = Image::getSingle($id);
|
||||
|
@ -993,7 +999,7 @@ return function (Handler $handler) {
|
|||
throw new Exception('Invalid request', 403);
|
||||
}
|
||||
$query_field = 'nsfw';
|
||||
$prop = $editing['nsfw'] ?? 0;
|
||||
$prop = (int) ($editing['nsfw'] ?? 0);
|
||||
$prop = intval($prop === 1);
|
||||
$message = 'Content flag changed';
|
||||
|
||||
|
@ -1459,7 +1465,7 @@ return function (Handler $handler) {
|
|||
throw new Exception('Invalid request', 403);
|
||||
}
|
||||
$send_email = send_mail($REQUEST['email'], _s('Test email from %s @ %t', [
|
||||
'%s' => getSetting('website_name', true),
|
||||
'%s' => getSetting('website_name'),
|
||||
'%t' => datetime(),
|
||||
]), '<p>' . _s('This is just a test') . '</p>');
|
||||
if ($send_email) {
|
||||
|
@ -1793,7 +1799,7 @@ return function (Handler $handler) {
|
|||
if (! Login::isAdmin()) {
|
||||
throw new Exception(_s('Request denied'), 403);
|
||||
}
|
||||
$licenseKey = $POST['key'] ?? '';
|
||||
$licenseKey = trim($POST['key'] ?? '');
|
||||
if ($licenseKey !== '') {
|
||||
$check = fetch_url(
|
||||
url: 'https://chevereto.com/api/license/check',
|
||||
|
@ -1816,7 +1822,7 @@ return function (Handler $handler) {
|
|||
if (version_compare($checkVersion, '4', '>=') === false) {
|
||||
throw new Exception(
|
||||
_s(
|
||||
'Chevereto V%s license key used, required V%r or greater license key',
|
||||
'Chevereto V%s license key detected. A Chevereto V%r license key is required.',
|
||||
[
|
||||
'%s' => $checkVersion,
|
||||
'%r' => '4',
|
||||
|
@ -1826,9 +1832,9 @@ return function (Handler $handler) {
|
|||
);
|
||||
}
|
||||
}
|
||||
$licenseFile = PATH_APP . 'CHEVERETO_LICENSE_KEY';
|
||||
touch($licenseFile);
|
||||
if (file_put_contents($licenseFile, $licenseKey) !== false) {
|
||||
touch(PATH_APP_LICENSE_KEY);
|
||||
$licenseContents = "<?php return '{$licenseKey}';";
|
||||
if (file_put_contents(PATH_APP_LICENSE_KEY, $licenseContents) !== false) {
|
||||
$json_array['status_code'] = 200;
|
||||
$licenseAction = $licenseKey === ''
|
||||
? _s('License key removed')
|
||||
|
|
|
@ -347,7 +347,7 @@ return function (Handler $handler) {
|
|||
require_once PATH_PUBLIC_LEGACY_THEME . 'mails/account-change-email.php';
|
||||
$mail_body = ob_get_contents();
|
||||
ob_end_clean();
|
||||
$mail['subject'] = _s('Confirmation required at %s', getSettings('website_name', true));
|
||||
$mail['subject'] = _s('Confirmation required at %s', getSettings('website_name'));
|
||||
$mail['message'] = $mail_body;
|
||||
send_mail($POST['email'], $mail['subject'], $mail['message']);
|
||||
unset($POST['email']);
|
||||
|
@ -632,7 +632,7 @@ return function (Handler $handler) {
|
|||
],
|
||||
[
|
||||
'label' => '<span class="visibility-hidden">' . _s('Register date') . '</span>',
|
||||
'content' => $handler::var('user')['date_gmt'] . ' (GMT)',
|
||||
'content' => $handler::var('user')['date_gmt'] . ' (UTC)',
|
||||
],
|
||||
];
|
||||
if ($handler::var('user')['registration_ip']) {
|
||||
|
|
|
@ -175,7 +175,7 @@ return function (Handler $handler) {
|
|||
$is_error = true;
|
||||
$error_message = $e->getMessage();
|
||||
} else {
|
||||
throw new Exception($e, $e->getCode(), $e);
|
||||
throw new Exception($e, (int) $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
if (! $is_error) {
|
||||
|
@ -203,7 +203,7 @@ return function (Handler $handler) {
|
|||
];
|
||||
$mail['subject'] = _s(
|
||||
'Confirmation required at %s',
|
||||
getSetting('website_name', true)
|
||||
getSetting('website_name')
|
||||
);
|
||||
$mail['message'] = get_email_body_str('mails/account-confirm');
|
||||
send_mail($POST['email'], $mail['subject'], $mail['message']);
|
||||
|
@ -217,7 +217,7 @@ return function (Handler $handler) {
|
|||
$theme_mail = [
|
||||
'user' => $logged_user,
|
||||
];
|
||||
$mail['subject'] = _s('Welcome to %s', getSetting('website_name', true));
|
||||
$mail['subject'] = _s('Welcome to %s', getSetting('website_name'));
|
||||
$mail['message'] = get_email_body_str('mails/account-welcome');
|
||||
send_mail($logged_user['email'], $mail['subject'], $mail['message']);
|
||||
} catch (Exception) {
|
||||
|
|
|
@ -239,8 +239,7 @@ return function (Handler $handler) {
|
|||
}
|
||||
$handler::setCond('show_follow_button', $show_follow_button);
|
||||
$base_user_url = $user['url'];
|
||||
$type = $userHome;
|
||||
$current_view = $type;
|
||||
$current_view = $userHome;
|
||||
$tools = false;
|
||||
foreach ($user_views as $k => $v) {
|
||||
$handler::setCond('user_' . $k, (bool) $v['current']);
|
||||
|
@ -251,6 +250,10 @@ return function (Handler $handler) {
|
|||
}
|
||||
}
|
||||
}
|
||||
$type = match ($current_view) {
|
||||
'files' => 'images',
|
||||
default => $current_view
|
||||
};
|
||||
$currentKey = 0;
|
||||
$safe_html_user = safe_html($user);
|
||||
$sub_tabs = [];
|
||||
|
@ -376,7 +379,7 @@ return function (Handler $handler) {
|
|||
$tags_display = [];
|
||||
if ($isDisplayUsedTags) {
|
||||
$tagsSql = <<<MySQL
|
||||
SELECT t.tag_name name, tu.tag_user_count count
|
||||
SELECT DISTINCT t.tag_name name, tu.tag_user_count count
|
||||
FROM `{$tagsTable}` t
|
||||
INNER JOIN `{$tagsUsersTable}` tu
|
||||
ON tu.tag_user_tag_id=t.tag_id
|
||||
|
@ -388,7 +391,7 @@ return function (Handler $handler) {
|
|||
MySQL;
|
||||
if ($type === 'albums') {
|
||||
$tagsSql = <<<MySQL
|
||||
SELECT t.tag_name name, ta.tag_album_count count
|
||||
SELECT DISTINCT t.tag_name name, ta.tag_album_count count
|
||||
FROM `{$tagsTable}` t
|
||||
INNER JOIN `{$tagsAlbumsTable}` ta
|
||||
ON ta.tag_album_tag_id=t.tag_id
|
||||
|
@ -468,7 +471,9 @@ return function (Handler $handler) {
|
|||
$output_tpl = 'user/' . $tpl;
|
||||
if ($user_views['search']['current']) {
|
||||
$type = $user['search']['type'];
|
||||
$where = $user['search']['type'] === 'images' ? 'WHERE image_user_id=:user_id AND MATCH(image_name, image_title, image_description, image_original_filename) AGAINST (:q)' : 'WHERE album_user_id=:user_id AND MATCH(album_name, album_description) AGAINST (:q)';
|
||||
$where = $user['search']['type'] === 'images'
|
||||
? 'WHERE image_user_id=:user_id AND MATCH(image_name, image_title, image_description, image_original_filename) AGAINST (:q)'
|
||||
: 'WHERE album_user_id=:user_id AND MATCH(album_name, album_description) AGAINST (:q)';
|
||||
}
|
||||
$show_user_items_editor = Login::isLoggedUser();
|
||||
if ($type === 'albums') {
|
||||
|
|
|
@ -20,7 +20,7 @@ CREATE TABLE `%table_prefix%images` (
|
|||
`image_md5` varchar(32) NOT NULL,
|
||||
`image_source_md5` varchar(32) DEFAULT NULL,
|
||||
`image_original_filename` varchar(255) NOT NULL,
|
||||
`image_original_exifdata` text,
|
||||
`image_original_exifdata` mediumtext,
|
||||
`image_views` bigint(32) NOT NULL DEFAULT '0',
|
||||
`image_category_id` bigint(32) DEFAULT NULL,
|
||||
`image_chain` tinyint(3) NOT NULL,
|
||||
|
|
|
@ -18,4 +18,4 @@ CREATE TABLE `%table_prefix%stats` (
|
|||
UNIQUE KEY `stat_date_gmt` (`stat_date_gmt`) USING BTREE,
|
||||
KEY `stat_type` (`stat_type`)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO `%table_prefix%stats` VALUES ('1', 'total', NULL, '0', '0', '0', '0', '0', '0', '0', '0');
|
||||
INSERT INTO `%table_prefix%stats` (stat_id, stat_type) VALUES (1, 'total');
|
||||
|
|
|
@ -11,7 +11,7 @@ CREATE TABLE `%table_prefix%tags` (
|
|||
UNIQUE KEY `tag_name` (`tag_name`) USING BTREE,
|
||||
KEY `tag_user_id` (`tag_user_id`),
|
||||
KEY `tag_date_gmt` (`tag_date_gmt`),
|
||||
KEY `tag_files` (`tag_files`),˝
|
||||
KEY `tag_files` (`tag_files`),
|
||||
KEY `tag_views` (`tag_views`),
|
||||
KEY `tag_user_id_date_gmt` (`tag_user_id`,`tag_date_gmt`),
|
||||
KEY `tag_user_id_files` (`tag_user_id`,`tag_files`),
|
||||
|
|
|
@ -8,7 +8,7 @@ CREATE TABLE `%table_prefix%tags_albums` (
|
|||
FOREIGN KEY (tag_album_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_album_album_id) REFERENCES `%table_prefix%albums` (album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_album_user_id) REFERENCES `%table_prefix%users` (user_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_album_UNIQUE` (`tag_album_tag_id` ASC, `tag_album_album_id` ASC, `tag_album_user_id` ASC) VISIBLE,
|
||||
UNIQUE INDEX `tag_album_UNIQUE` (`tag_album_tag_id` ASC, `tag_album_album_id` ASC, `tag_album_user_id` ASC),
|
||||
KEY `tag_album_count` (`tag_album_count`),
|
||||
KEY `tag_album_last_used_datetime` (`tag_album_last_used_datetime`)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
|
|
@ -4,5 +4,5 @@ CREATE TABLE `%table_prefix%tags_files` (
|
|||
`tag_file_file_id` bigint(32) NOT NULL,
|
||||
FOREIGN KEY (tag_file_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_file_file_id) REFERENCES `%table_prefix%images` (image_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_file_UNIQUE` (`tag_file_tag_id` ASC, `tag_file_file_id` ASC) VISIBLE
|
||||
UNIQUE INDEX `tag_file_UNIQUE` (`tag_file_tag_id` ASC, `tag_file_file_id` ASC)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
|
|
@ -6,7 +6,7 @@ CREATE TABLE `%table_prefix%tags_users` (
|
|||
`tag_user_last_used_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (tag_user_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_user_user_id) REFERENCES `%table_prefix%users` (user_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_user_UNIQUE` (`tag_user_tag_id` ASC, `tag_user_user_id` ASC) VISIBLE,
|
||||
UNIQUE INDEX `tag_user_UNIQUE` (`tag_user_tag_id` ASC, `tag_user_user_id` ASC),
|
||||
KEY `tag_user_count` (`tag_user_count`),
|
||||
KEY `tag_user_last_used_datetime` (`tag_user_last_used_datetime`)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
|
||||
|
|
|
@ -20,7 +20,7 @@ CREATE TABLE `%table_prefix%images` (
|
|||
`image_md5` varchar(32) NOT NULL,
|
||||
`image_source_md5` varchar(32) DEFAULT NULL,
|
||||
`image_original_filename` varchar(255) NOT NULL,
|
||||
`image_original_exifdata` text,
|
||||
`image_original_exifdata` mediumtext,
|
||||
`image_views` bigint(32) NOT NULL DEFAULT '0',
|
||||
`image_category_id` bigint(32) DEFAULT NULL,
|
||||
`image_chain` tinyint(3) NOT NULL,
|
||||
|
|
|
@ -8,7 +8,7 @@ CREATE TABLE `%table_prefix%tags_albums` (
|
|||
FOREIGN KEY (tag_album_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_album_album_id) REFERENCES `%table_prefix%albums` (album_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_album_user_id) REFERENCES `%table_prefix%users` (user_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_album_UNIQUE` (`tag_album_tag_id` ASC, `tag_album_album_id` ASC, `tag_album_user_id` ASC) VISIBLE,
|
||||
UNIQUE INDEX `tag_album_UNIQUE` (`tag_album_tag_id` ASC, `tag_album_album_id` ASC, `tag_album_user_id` ASC),
|
||||
KEY `tag_album_count` (`tag_album_count`),
|
||||
KEY `tag_album_last_used_datetime` (`tag_album_last_used_datetime`)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4;
|
||||
|
|
|
@ -4,5 +4,5 @@ CREATE TABLE `%table_prefix%tags_files` (
|
|||
`tag_file_file_id` bigint(32) NOT NULL,
|
||||
FOREIGN KEY (tag_file_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_file_file_id) REFERENCES `%table_prefix%images` (image_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_file_UNIQUE` (`tag_file_tag_id` ASC, `tag_file_file_id` ASC) VISIBLE
|
||||
UNIQUE INDEX `tag_file_UNIQUE` (`tag_file_tag_id` ASC, `tag_file_file_id` ASC)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4;
|
||||
|
|
|
@ -6,7 +6,7 @@ CREATE TABLE `%table_prefix%tags_users` (
|
|||
`tag_user_last_used_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (tag_user_tag_id) REFERENCES `%table_prefix%tags` (tag_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_user_user_id) REFERENCES `%table_prefix%users` (user_id) ON DELETE CASCADE,
|
||||
UNIQUE INDEX `tag_user_UNIQUE` (`tag_user_tag_id` ASC, `tag_user_user_id` ASC) VISIBLE,
|
||||
UNIQUE INDEX `tag_user_UNIQUE` (`tag_user_tag_id` ASC, `tag_user_user_id` ASC),
|
||||
KEY `tag_user_count` (`tag_user_count`),
|
||||
KEY `tag_user_last_used_datetime` (`tag_user_last_used_datetime`)
|
||||
) ENGINE=%table_engine% DEFAULT CHARSET=utf8mb4;
|
||||
|
|
|
@ -20,12 +20,13 @@ function storeDownloadedUrl(string $url, string $filepath)
|
|||
{
|
||||
$clientArgs = [
|
||||
'base_uri' => $url,
|
||||
'timeout' => $_ENV['CHEVERETO_HTTP_TIMEOUT'] ?? 30,
|
||||
// 'timeout' => $_ENV['CHEVERETO_HTTP_TIMEOUT'] ?? 30,
|
||||
];
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
if (isset($_ENV['CHEVERETO_HTTP_PROXY'])) {
|
||||
$clientArgs['proxy'] = $_ENV['CHEVERETO_HTTP_PROXY'];
|
||||
}
|
||||
// if (isset($_ENV['CHEVERETO_HTTP_PROXY'])) {
|
||||
// $clientArgs['proxy'] = $_ENV['CHEVERETO_HTTP_PROXY'];
|
||||
// }
|
||||
// @codeCoverageIgnoreEnd
|
||||
try {
|
||||
$httpClient = new Client($clientArgs);
|
||||
|
|
|
@ -156,7 +156,7 @@ class Album
|
|||
sessionVar()->put('album_view_stock', $id);
|
||||
}
|
||||
|
||||
public static function getUrl(string $id_encoded, string $title = null): string
|
||||
public static function getUrl(string $id_encoded, ?string $title = null): string
|
||||
{
|
||||
$seo = seoUrlfy($title ?? '');
|
||||
$url = $seo === ''
|
||||
|
|
|
@ -92,7 +92,7 @@ class DB extends GDB
|
|||
array|string $where,
|
||||
string $clause = 'AND',
|
||||
array $sort = [],
|
||||
int $limit = null,
|
||||
?int $limit = null,
|
||||
int $fetch_style = PDO::FETCH_ASSOC,
|
||||
array $valuesOperators = []
|
||||
): mixed {
|
||||
|
|
|
@ -291,7 +291,7 @@ class Image
|
|||
|
||||
public static function getAlbumSlice(
|
||||
int $image_id,
|
||||
int $album_id = null,
|
||||
?int $album_id = null,
|
||||
int $padding = 2
|
||||
): array {
|
||||
$tables = DB::getTables();
|
||||
|
|
1231
app/src/Legacy/Classes/Import.php
Normal file
1231
app/src/Legacy/Classes/Import.php
Normal file
File diff suppressed because it is too large
Load diff
34
app/src/Legacy/Classes/ImporterFilterIterator.php
Normal file
34
app/src/Legacy/Classes/ImporterFilterIterator.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Chevereto.
|
||||
*
|
||||
* (c) Rodolfo Berrios <rodolfo@chevereto.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chevereto\Legacy\Classes;
|
||||
|
||||
use FilterIterator;
|
||||
|
||||
class ImporterFilterIterator extends FilterIterator
|
||||
{
|
||||
protected $fileinfo;
|
||||
|
||||
public function accept(): bool
|
||||
{
|
||||
$this->fileinfo = $this->getInnerIterator()->current();
|
||||
if ($this->fileinfo->isFile() && (preg_match(Import::imageExtensionsRegex(), (string) $this->fileinfo) == false || $this->filterAssets())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !($this->fileinfo->isDir() && $this->filterAssets());
|
||||
}
|
||||
|
||||
protected function filterAssets()
|
||||
{
|
||||
return $this->fileinfo->getBasename() == '.assets' || basename($this->fileinfo->getPath()) == '.assets';
|
||||
}
|
||||
}
|
|
@ -488,31 +488,33 @@ class Listing
|
|||
$tableTagsFiles = $tables['tags_files'];
|
||||
$relationTagIdColumn = 'tag_file_tag_id';
|
||||
$tableImages = $tables['images'];
|
||||
$tagPivot = 'tag_file_file_id';
|
||||
$tagSql = <<<MySQL
|
||||
EXISTS (
|
||||
SELECT *
|
||||
SELECT `{$tagPivot}`
|
||||
FROM `{$tableTagsFiles}`
|
||||
WHERE `{$relationTagIdColumn}` IN ({$inTagsSQL})
|
||||
AND `tag_file_file_id` = {$tableImages}.image_id
|
||||
AND `{$tagPivot}` = {$tableImages}.image_id
|
||||
|
||||
MySQL;
|
||||
if ($this->type === 'albums') {
|
||||
$tableRelation = $tables['tags_albums'];
|
||||
$relationTagIdColumn = 'tag_album_tag_id';
|
||||
$tableAlbums = $tables['albums'];
|
||||
$tagPivot = 'tag_album_album_id';
|
||||
$tagSql = <<<MySQL
|
||||
EXISTS (
|
||||
SELECT *
|
||||
SELECT `{$tagPivot}`
|
||||
FROM `{$tableRelation}`
|
||||
WHERE `{$relationTagIdColumn}` IN ({$inTagsSQL})
|
||||
AND `tag_album_album_id` = {$tableAlbums}.album_id
|
||||
AND `{$tagPivot}` = {$tableAlbums}.album_id
|
||||
AND `tag_album_count` > 0
|
||||
|
||||
MySQL;
|
||||
}
|
||||
if ($this->tagsMatch === 'all') {
|
||||
$tagBinds[':tag_count'] = count($this->tagsIds);
|
||||
$tagSql .= " HAVING COUNT(`{$relationTagIdColumn}`) = :tag_count";
|
||||
$tagSql .= ' HAVING COUNT(*) = :tag_count';
|
||||
}
|
||||
$tagSql .= ')';
|
||||
if ($this->where === '') {
|
||||
|
|
|
@ -50,7 +50,7 @@ class Page
|
|||
return [];
|
||||
}
|
||||
|
||||
public static function get(array $values, array $sort = [], int $limit = null): array
|
||||
public static function get(array $values, array $sort = [], ?int $limit = null): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ use function Chevereto\Encryption\decryptValues;
|
|||
use function Chevereto\Encryption\encryptValues;
|
||||
use function Chevereto\Encryption\hasEncryption;
|
||||
use function Chevereto\Legacy\assertMaxCount;
|
||||
use function Chevereto\Legacy\cheveretoVersionInstalled;
|
||||
use function Chevereto\Legacy\G\add_ending_slash;
|
||||
use function Chevereto\Legacy\G\array_filter_array;
|
||||
use function Chevereto\Legacy\G\check_value;
|
||||
|
@ -58,10 +59,14 @@ class Storage
|
|||
);
|
||||
}
|
||||
|
||||
public static function get(array $values = [], array $sort = [], int $limit = null): array
|
||||
public static function get(array $values = [], array $sort = [], ?int $limit = null): array
|
||||
{
|
||||
if (! isset($values['deleted_at'])) {
|
||||
$values['deleted_at'] = null;
|
||||
$valueOperators = [
|
||||
'type_chain' => '&',
|
||||
];
|
||||
if (version_compare(cheveretoVersionInstalled(), '4.2.0', '>=')) {
|
||||
$values['deleted_at'] = $values['deleted_at'] ?? null;
|
||||
$valueOperators['deleted_at'] = 'IS';
|
||||
}
|
||||
$get = DB::get(
|
||||
[
|
||||
|
@ -75,10 +80,7 @@ class Storage
|
|||
$sort,
|
||||
$limit,
|
||||
PDO::FETCH_ASSOC,
|
||||
[
|
||||
'type_chain' => '&',
|
||||
'deleted_at' => 'IS',
|
||||
]
|
||||
$valueOperators
|
||||
);
|
||||
if (isset($get[0]) && is_array($get[0])) {
|
||||
foreach ($get as $k => $v) {
|
||||
|
|
|
@ -252,7 +252,7 @@ class User
|
|||
'Email: %email',
|
||||
'Status: %status',
|
||||
'IP: %registration_ip',
|
||||
'Date (GMT): %date_gmt',
|
||||
'Date (UTC): %date_gmt',
|
||||
'',
|
||||
'You can disable these notifications on %configure',
|
||||
]);
|
||||
|
@ -723,7 +723,7 @@ class User
|
|||
if (isset($user['twitter_username'])) {
|
||||
$user['twitter'] = [
|
||||
'username' => $user['twitter_username'],
|
||||
'url' => 'http://twitter.com/' . $user['twitter_username'],
|
||||
'url' => 'https://twitter.com/' . $user['twitter_username'],
|
||||
];
|
||||
}
|
||||
unset($user['twitter_username']);
|
||||
|
@ -738,7 +738,7 @@ class User
|
|||
return preg_replace('#<|>#', '', $name);
|
||||
}
|
||||
|
||||
public static function cleanUnconfirmed(int $limit = null): void
|
||||
public static function cleanUnconfirmed(?int $limit = null): void
|
||||
{
|
||||
$db = DB::getInstance();
|
||||
$query = 'SELECT * FROM ' . DB::getTable('users') . ' WHERE user_status IN ("awaiting-confirmation", "awaiting-email") AND user_date_gmt <= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 2 DAY) ORDER BY user_id DESC';
|
||||
|
|
|
@ -84,10 +84,7 @@ class DB
|
|||
{
|
||||
if (! isset(self::$instance)) {
|
||||
throw new LogicException(
|
||||
message(
|
||||
'No `%type%` initialized',
|
||||
s: static::class
|
||||
)
|
||||
message('No `%type%` initialized', type: static::class)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -119,7 +116,7 @@ class DB
|
|||
return self::$dbh->errorInfo();
|
||||
}
|
||||
|
||||
public function bind(mixed $param, mixed $value, int $type = null): void
|
||||
public function bind(mixed $param, mixed $value, ?int $type = null): void
|
||||
{
|
||||
if ($type === null) {
|
||||
switch (true) {
|
||||
|
@ -262,7 +259,7 @@ class DB
|
|||
array|string $where,
|
||||
string $clause = 'AND',
|
||||
array $sort = [],
|
||||
int $limit = null,
|
||||
?int $limit = null,
|
||||
int $fetch_style = PDO::FETCH_ASSOC,
|
||||
array $valuesOperators = []
|
||||
): mixed {
|
||||
|
|
|
@ -292,7 +292,7 @@ class Handler
|
|||
);
|
||||
}
|
||||
|
||||
public function mapRoute(string $route_name, array $args = null): callable
|
||||
public function mapRoute(string $route_name, ?array $args = null): callable
|
||||
{
|
||||
$this->template = $route_name;
|
||||
self::$base_request = $route_name;
|
||||
|
@ -477,7 +477,7 @@ class Handler
|
|||
return (bool) preg_match('{index\.php$}', ltrim($this->script_name, '/'));
|
||||
}
|
||||
|
||||
private function loadTemplate(string $template = null): void
|
||||
private function loadTemplate(?string $template = null): void
|
||||
{
|
||||
if ($template !== null) {
|
||||
$this->template = $template;
|
||||
|
|
|
@ -19,6 +19,27 @@ use function Chevereto\Legacy\headersNoCache;
|
|||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* @deprecate
|
||||
*/
|
||||
function include_theme_file($filename, $args = [])
|
||||
{
|
||||
$file = PATH_PUBLIC_LEGACY_THEME . $filename;
|
||||
$override = PATH_PUBLIC_LEGACY_THEME . 'overrides/' . $filename;
|
||||
if (! file_exists($file)) {
|
||||
$file .= '.php';
|
||||
$override .= '.php';
|
||||
}
|
||||
if (file_exists($override)) {
|
||||
$file = $override;
|
||||
}
|
||||
if (file_exists($file)) {
|
||||
$GLOBALS['theme_include_args'] = $args;
|
||||
require $file;
|
||||
unset($GLOBALS['theme_include_args']);
|
||||
}
|
||||
}
|
||||
|
||||
function get_theme_php_file(string $filename): string
|
||||
{
|
||||
$filename = str_replace_last('.php', '', $filename) . '.php';
|
||||
|
|
|
@ -22,6 +22,7 @@ use FFMpeg\FFProbe;
|
|||
use GdImage;
|
||||
use LogicException;
|
||||
use Throwable;
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
use function Chevereto\Vars\env;
|
||||
use function Chevereto\Vars\server;
|
||||
use function Safe\curl_exec;
|
||||
|
@ -1963,7 +1964,7 @@ function get_app_setting(string $key): mixed
|
|||
];
|
||||
$settingEnv = $settingsToEnv[$key] ?? null;
|
||||
$env = null;
|
||||
if (isset($settingEnv) && array_key_exists($settingEnv, $_ENV)) {
|
||||
if (isset($settingEnv) && array_key_exists($settingEnv, getCheveretoEnv())) {
|
||||
$env = getenv($settingEnv);
|
||||
if ($env === false) {
|
||||
$env = null;
|
||||
|
|
|
@ -26,10 +26,8 @@ use function Chevereto\Legacy\G\array_filter_array;
|
|||
use function Chevereto\Legacy\G\check_value;
|
||||
use function Chevereto\Legacy\G\dsq_hmacsha1;
|
||||
use function Chevereto\Legacy\G\get_base_url;
|
||||
use function Chevereto\Legacy\G\get_current_url;
|
||||
use function Chevereto\Legacy\G\get_public_url;
|
||||
use function Chevereto\Legacy\G\get_route_name;
|
||||
use function Chevereto\Legacy\G\get_route_path;
|
||||
use function Chevereto\Legacy\G\get_set_status_header_desc;
|
||||
use function Chevereto\Legacy\G\json_document_output;
|
||||
use function Chevereto\Legacy\G\json_prepare;
|
||||
|
@ -37,7 +35,6 @@ use function Chevereto\Legacy\G\require_theme_file;
|
|||
use function Chevereto\Legacy\G\safe_html;
|
||||
use function Chevereto\Legacy\G\sanitize_path_slashes;
|
||||
use function Chevereto\Legacy\G\set_status_header;
|
||||
use function Chevereto\Legacy\G\str_replace_first;
|
||||
use function Chevereto\Legacy\G\url_to_relative;
|
||||
use function Chevereto\Vars\cookie;
|
||||
use function Chevereto\Vars\env;
|
||||
|
@ -233,7 +230,7 @@ function get_share_links(array $share_element = [])
|
|||
'label' => 'Email',
|
||||
],
|
||||
'facebook' => [
|
||||
'url' => 'http://www.facebook.com/share.php?u=%URL%',
|
||||
'url' => 'https://www.facebook.com/share.php?u=%URL%',
|
||||
'label' => 'Facebook',
|
||||
],
|
||||
'x-twitter' => [
|
||||
|
@ -270,15 +267,15 @@ function get_share_links(array $share_element = [])
|
|||
'label' => '分享到QQ',
|
||||
],
|
||||
'reddit' => [
|
||||
'url' => 'http://old.reddit.com/submit?type=link&url=%URL%&title=%TITLE%&text=%DESCRIPTION%',
|
||||
'url' => 'https://old.reddit.com/submit?type=link&url=%URL%&title=%TITLE%&text=%DESCRIPTION%',
|
||||
'label' => 'reddit',
|
||||
],
|
||||
'vk' => [
|
||||
'url' => 'http://vk.com/share.php?url=%URL%',
|
||||
'url' => 'https://vk.com/share.php?url=%URL%',
|
||||
'label' => 'VK',
|
||||
],
|
||||
'blogger' => [
|
||||
'url' => 'http://www.blogger.com/blog-this.g?n=%TITLE%&source=&b=%HTML%',
|
||||
'url' => 'https://www.blogger.com/blog-this.g?n=%TITLE%&source=&b=%HTML%',
|
||||
'label' => 'Blogger',
|
||||
],
|
||||
'tumblr' => [
|
||||
|
@ -286,7 +283,7 @@ function get_share_links(array $share_element = [])
|
|||
'label' => 'Tumblr.',
|
||||
],
|
||||
'pinterest' => [
|
||||
'url' => 'http://www.pinterest.com/pin/create/bookmarklet/?media=%IMAGE%&url=%URL%&is_video=false&description=%DESCRIPTION%&title=%TITLE%',
|
||||
'url' => 'https://www.pinterest.com/pin/create/bookmarklet/?media=%IMAGE%&url=%URL%&is_video=false&description=%DESCRIPTION%&title=%TITLE%',
|
||||
'label' => 'Pinterest',
|
||||
],
|
||||
];
|
||||
|
@ -353,7 +350,7 @@ function get_cookie_law_banner()
|
|||
{
|
||||
return '<div id="cookie-law-banner" data-cookie="CHV_COOKIE_LAW_DISPLAY"><div class="c24 center-box position-relative"><p class="">' . _s('We use our own and third party cookies to improve your browsing experience and our services. If you continue using our website is understood that you accept this %cookie_policy_link.', [
|
||||
'%cookie_policy_link' => '<a href="' . get_base_url('page/privacy') . '">' . _s('cookie policy') . '</a>',
|
||||
]) . '</p><a data-action="cookie-law-close" title="' . _s('I understand') . '" class="cookie-law-close"><span class="icon fas fa-times"></span></a></div></div>' . "\n\n";
|
||||
]) . '</p><a data-action="cookie-law-close" title="' . _s('I understand') . '" class="cookie-law-close"><span class="icon fas fa-close"></span></a></div></div>' . "\n\n";
|
||||
}
|
||||
// Sensitive Cookie law display
|
||||
function display_cookie_law_banner()
|
||||
|
@ -678,7 +675,7 @@ function replace_tpl_string(string $search, $replace, string $subject)
|
|||
$subject
|
||||
);
|
||||
}
|
||||
// http://stackoverflow.com/a/9546215
|
||||
// https://stackoverflow.com/a/9546215
|
||||
function flatten_array($array, $prefix = '')
|
||||
{
|
||||
$result = [];
|
||||
|
@ -1069,8 +1066,11 @@ function show_banner($banner, $sfw = true)
|
|||
echo '<div id="' . $banner . '" class="ad-banner">' . $banner_code . '</div>';
|
||||
}
|
||||
}
|
||||
function getComments(): string
|
||||
{
|
||||
function getComments(
|
||||
string $url,
|
||||
string $id,
|
||||
?string $title = null
|
||||
): string {
|
||||
$html = '';
|
||||
switch (getSetting('comments_api')) {
|
||||
case 'js':
|
||||
|
@ -1097,37 +1097,43 @@ function getComments(): string
|
|||
$hmac = dsq_hmacsha1($message . ' ' . $timestamp, $disqus_secret);
|
||||
$auth = $message . ' ' . $hmac . ' ' . $timestamp;
|
||||
}
|
||||
$html = strtr('<div id="disqus_thread"></div>
|
||||
$template = '<div id="disqus_thread"></div>
|
||||
<script>
|
||||
var disqus_config = function() {
|
||||
this.page.url = "%page_url";
|
||||
this.page.identifier = "%page_id";
|
||||
this.page.url = "{{ PAGE_URL }}";
|
||||
this.page.identifier = "{{ PAGE_ID }}";
|
||||
this.language = "{{ LANGUAGE_CODE }}";
|
||||
this.page.remote_auth_s3 = "%auth%";
|
||||
this.page.api_key = "%api_key%";
|
||||
};
|
||||
(function() {
|
||||
var d = document, s = d.createElement("script");
|
||||
s.src = "//%shortname.disqus.com/embed.js";
|
||||
s.src = "//%shortname%.disqus.com/embed.js";
|
||||
s.setAttribute("data-timestamp", +new Date());
|
||||
(d.head || d.body).appendChild(s);
|
||||
})();
|
||||
var disqus_config = function () {
|
||||
this.language = "%language_code";
|
||||
this.page.remote_auth_s3 = "%auth";
|
||||
this.page.api_key = "%api_key";
|
||||
};
|
||||
document.addEventListener("paletteChanged", function (e) {
|
||||
if (document.readyState == "complete") {
|
||||
DISQUS.reset({ reload: true, config: disqus_config });
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>', [
|
||||
'%page_url' => get_current_url(),
|
||||
'%page_id' => str_replace_first(get_route_path(), get_route_name(), get_route_path(true)), // image.ID
|
||||
'%shortname' => getSetting('disqus_shortname'),
|
||||
'%language_code' => get_language_used()['base'],
|
||||
'%auth' => $auth ?? null,
|
||||
'%api_key' => $disqus_public,
|
||||
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>';
|
||||
$html = strtr($template, [
|
||||
'%shortname%' => getSetting('disqus_shortname'),
|
||||
'%auth%' => $auth ?? null,
|
||||
'%api_key%' => $disqus_public,
|
||||
]);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return $html;
|
||||
return strtr($html, [
|
||||
'{{ PAGE_URL }}' => $url,
|
||||
'{{ PAGE_ID }}' => $id,
|
||||
'{{ PAGE_TITLE }}' => $title ?? '',
|
||||
'{{ LANGUAGE_CODE }}' => get_language_used()['base'],
|
||||
]);
|
||||
}
|
||||
|
||||
function getThemeLogo(): string
|
||||
|
@ -1146,9 +1152,6 @@ function getThemeLogo(): string
|
|||
|
||||
function badgePaid(string $edition): string
|
||||
{
|
||||
if ($edition === 'lite') {
|
||||
$edition = 'pro';
|
||||
}
|
||||
if (! (bool) env()['CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES']) {
|
||||
return '';
|
||||
}
|
||||
|
@ -1161,9 +1164,6 @@ function badgePaid(string $edition): string
|
|||
|
||||
function linkPaid(string $edition): ?string
|
||||
{
|
||||
if ($edition === 'lite') {
|
||||
$edition = 'pro';
|
||||
}
|
||||
if (! (bool) env()['CHEVERETO_ENABLE_EXPOSE_PAID_FEATURES']) {
|
||||
return null;
|
||||
}
|
||||
|
@ -1176,9 +1176,6 @@ function linkPaid(string $edition): ?string
|
|||
|
||||
function inputDisabledPaid(string $edition): string
|
||||
{
|
||||
if ($edition === 'lite') {
|
||||
$edition = 'pro';
|
||||
}
|
||||
if (in_array($edition, editionCombo()[env()['CHEVERETO_EDITION']], true)) {
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ use Chevereto\Vars\PostVar;
|
|||
use Chevereto\Vars\RequestVar;
|
||||
use Chevereto\Vars\ServerVar;
|
||||
use Chevereto\Vars\SessionVar;
|
||||
use ErrorException;
|
||||
use Exception;
|
||||
use Intervention\Image\ImageManagerStatic;
|
||||
use LogicException;
|
||||
|
@ -49,6 +50,7 @@ use Throwable;
|
|||
use function Chevere\Filesystem\filePhpForPath;
|
||||
use function Chevere\Message\message;
|
||||
use function Chevere\Parameter\cast;
|
||||
use function Chevere\Parameter\getType;
|
||||
use function Chevere\Writer\streamFor;
|
||||
use function Chevere\Writer\writers;
|
||||
use function Chevereto\Legacy\G\absolute_to_url;
|
||||
|
@ -264,11 +266,15 @@ function get_chv_default_setting(string $value = '', bool $safe = false): mixed
|
|||
|
||||
function getStorages(): array|bool
|
||||
{
|
||||
$where = [];
|
||||
if (version_compare(cheveretoVersionInstalled(), '4.2.0', '>=')) {
|
||||
$where = [
|
||||
'deleted_at' => null,
|
||||
];
|
||||
}
|
||||
$storages = DB::get(
|
||||
table: 'storages',
|
||||
where: [
|
||||
'deleted_at' => null,
|
||||
],
|
||||
where: $where,
|
||||
);
|
||||
if ($storages) {
|
||||
foreach ($storages as $k => $v) {
|
||||
|
@ -933,7 +939,7 @@ function upload_to_content_images(array $source, string $what): void
|
|||
}
|
||||
}
|
||||
|
||||
function isSafeToExecute(int $max_execution_time = null, array $options = []): bool
|
||||
function isSafeToExecute(?int $max_execution_time = null, array $options = []): bool
|
||||
{
|
||||
if ($max_execution_time === null) {
|
||||
$max_execution_time = (int) ini_get('max_execution_time');
|
||||
|
@ -1011,6 +1017,15 @@ function isShowEmbedContent(): bool
|
|||
};
|
||||
}
|
||||
|
||||
function getCheveretoEnv(): array
|
||||
{
|
||||
$env = getenv();
|
||||
|
||||
return array_filter($env, function ($key) {
|
||||
return strpos($key, 'CHEVERETO_') === 0;
|
||||
}, ARRAY_FILTER_USE_KEY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the server context and returns the handler file to load.
|
||||
*/
|
||||
|
@ -1044,6 +1059,7 @@ function loaderHandler(
|
|||
define('PATH_APP_LEGACY_ROUTES_OVERRIDES', PATH_APP_LEGACY_ROUTES . 'overrides/');
|
||||
define('PATH_APP_COMPONENTS_LEGACY', PATH_PUBLIC . 'app/src/Components/Legacy/');
|
||||
define('PATH_APP', PATH_PUBLIC . 'app/');
|
||||
define('PATH_APP_LICENSE_KEY', PATH_APP . 'CHEVERETO_LICENSE_KEY.php');
|
||||
define('PATH_APP_LEGACY_INSTALL', PATH_APP_LEGACY . 'install/');
|
||||
define('PATH_APP_CONTENT', PATH_APP . 'content/');
|
||||
define('PATH_APP_LANGUAGES', PATH_APP . 'languages/');
|
||||
|
@ -1077,7 +1093,6 @@ function loaderHandler(
|
|||
'CHEVERETO_EDITION' => 'free',
|
||||
'CHEVERETO_ENABLE_API_GUEST' => '0',
|
||||
'CHEVERETO_ENABLE_BANNERS' => '0',
|
||||
'CHEVERETO_ENABLE_BULK_IMPORTER' => '0',
|
||||
'CHEVERETO_ENABLE_CAPTCHA' => '0',
|
||||
'CHEVERETO_ENABLE_CONSENT_SCREEN' => '0',
|
||||
'CHEVERETO_ENABLE_COOKIE_COMPLIANCE' => '0',
|
||||
|
@ -1122,7 +1137,13 @@ function loaderHandler(
|
|||
'session.save_path' => 'CHEVERETO_SESSION_SAVE_PATH',
|
||||
// 'upload_max_filesize' => 'CHEVERETO_MAX_UPLOAD_SIZE', // INI_PERDIR
|
||||
];
|
||||
$iniToSkip = [
|
||||
'max_execution_time' => PHP_SAPI === 'cli',
|
||||
];
|
||||
foreach ($iniToChevereto as $iniOption => $envName) {
|
||||
if (($iniToSkip[$iniOption] ?? false) === true) {
|
||||
continue;
|
||||
}
|
||||
if (! function_exists('ini_get')
|
||||
|| ! function_exists('ini_set')
|
||||
) {
|
||||
|
@ -1164,6 +1185,19 @@ function loaderHandler(
|
|||
$envVar['CHEVERETO_XRDEBUG_HOST'] = 'host.docker.internal';
|
||||
}
|
||||
}
|
||||
foreach ($envVar as $envName => &$envValue) {
|
||||
if (! is_string($envValue)) {
|
||||
try {
|
||||
$envValue = (string) $envValue;
|
||||
} catch (ErrorException) {
|
||||
$type = getType($envValue);
|
||||
$envValue = match ($type) {
|
||||
'array' => '[]',
|
||||
default => '',
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
new EnvVar($envVar);
|
||||
new ServerVar(array_merge($envDefault, $env, $_server));
|
||||
new CookieVar($_cookie);
|
||||
|
@ -1173,15 +1207,24 @@ function loaderHandler(
|
|||
new FilesVar($_files);
|
||||
require_once PATH_APP . 'configurator.php';
|
||||
if ($_session === []) {
|
||||
$sessionStart = session_start([
|
||||
$session_start = false;
|
||||
$session_options = [
|
||||
'save_handler' => Config::system()->sessionSaveHandler(),
|
||||
'save_path' => Config::system()->sessionSavePath(),
|
||||
'cookie_path' => Config::host()->hostnamePath(),
|
||||
'cookie_domain' => Config::host()->hostname(),
|
||||
'cookie_secure' => Config::host()->isHttps(),
|
||||
'cookie_httponly' => true,
|
||||
]);
|
||||
if (! $sessionStart) {
|
||||
];
|
||||
|
||||
try {
|
||||
$session_start = session_start($session_options);
|
||||
} catch (Throwable) {
|
||||
if (session_status() === PHP_SESSION_ACTIVE) {
|
||||
$session_start = true;
|
||||
}
|
||||
}
|
||||
if (! $session_start) {
|
||||
throw new RuntimeException(
|
||||
'Sessions not working (session_start)',
|
||||
600
|
||||
|
@ -1396,8 +1439,13 @@ function feedbackStep(string $doing, string $target)
|
|||
|
||||
function isDebug(): bool
|
||||
{
|
||||
$environment = getenv('CHEVERETO_ENVIRONMENT');
|
||||
$debugLevel = $environment === false
|
||||
? ''
|
||||
: $environment;
|
||||
|
||||
try {
|
||||
return ($_ENV['CHEVERETO_ENVIRONMENT'] ?? '') === 'dev'
|
||||
return $debugLevel === 'dev'
|
||||
|| (getSetting('debug_errors') && Login::isAdmin());
|
||||
} catch (Throwable) {
|
||||
return false;
|
||||
|
@ -1478,9 +1526,9 @@ function adjustBrightness(string $hexCode, float $adjustPercent)
|
|||
function getLicenseKey(): string
|
||||
{
|
||||
$licenseKey = env()['CHEVERETO_LICENSE_KEY'] ?? '';
|
||||
$licenseFile = PATH_APP . 'CHEVERETO_LICENSE_KEY';
|
||||
if ($licenseKey === '' && file_exists($licenseFile)) {
|
||||
$licenseKey = file_get_contents($licenseFile);
|
||||
if ($licenseKey === '' && file_exists(PATH_APP_LICENSE_KEY)) {
|
||||
/** @var string $licenseKey */
|
||||
$licenseKey = require PATH_APP_LICENSE_KEY;
|
||||
}
|
||||
|
||||
return $licenseKey;
|
||||
|
|
|
@ -24,6 +24,11 @@ final class EnvVar
|
|||
|
||||
public const REGEX_KEY = '/^' . self::PREFIX . '[A-Z0-9_]+$/';
|
||||
|
||||
public const PUTENV = [
|
||||
'CHEVERETO_ENVIRONMENT',
|
||||
'CHEVERETO_DEBUG_LEVEL',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param array<string, string> $array
|
||||
*/
|
||||
|
@ -40,6 +45,11 @@ final class EnvVar
|
|||
K: string(self::REGEX_KEY)
|
||||
)($array);
|
||||
$this->assertNoInstance();
|
||||
foreach (self::PUTENV as $putenv) {
|
||||
if (array_key_exists($putenv, $array)) {
|
||||
putenv($putenv . '=' . $array[$putenv]);
|
||||
}
|
||||
}
|
||||
static::$array = $array;
|
||||
static::$map = new Map($array);
|
||||
}
|
||||
|
|
|
@ -10,25 +10,22 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
|
||||
Download (auto license):
|
||||
php app/upgrading.php
|
||||
|
||||
-
|
||||
Download (with license):
|
||||
CHEVERETO_LICENSE_KEY=your_license_key php app/upgrading.php
|
||||
|
||||
* .upgrading/upgrading.lock
|
||||
This setting affects non CLI (HTTP calls only).
|
||||
It exists when the upgrade has been authorized at dashboard.
|
||||
-
|
||||
.upgrading/upgrading.lock
|
||||
It contains the token for upgrade process, must be checked against request.
|
||||
|
||||
* .upgrading/downloading.lock
|
||||
-
|
||||
.upgrading/downloading.lock
|
||||
It exists when the upgrade is downloading the new version.
|
||||
|
||||
* .upgrading/extracting.lock
|
||||
-
|
||||
.upgrading/extracting.lock
|
||||
It exists when the upgrade is extracting the new version.
|
||||
*/
|
||||
|
||||
*/
|
||||
namespace Chevereto;
|
||||
|
||||
use Exception;
|
||||
|
@ -36,14 +33,14 @@ use RuntimeException;
|
|||
use stdClass;
|
||||
use Throwable;
|
||||
use ZipArchive;
|
||||
|
||||
use function Chevere\Filesystem\directoryForPath;
|
||||
use function Chevereto\Legacy\getCheveretoEnv;
|
||||
|
||||
require_once __DIR__ . '/legacy/load/php-boot.php';
|
||||
|
||||
const ZIP_BALL = 'https://chevereto.com/api/download/%tag%';
|
||||
const LOGGER = __DIR__ . '/.upgrading/process.log';
|
||||
if (!file_exists(LOGGER)) {
|
||||
if (! file_exists(LOGGER)) {
|
||||
$loggerDir = dirname(LOGGER);
|
||||
directoryForPath($loggerDir)->createIfNotExists();
|
||||
touch(LOGGER);
|
||||
|
@ -68,7 +65,14 @@ $logProcess = $workingDir . '/process.log';
|
|||
$lockUpgrading = $workingDir . '/upgrading.lock';
|
||||
$lockDownloading = $workingDir . '/downloading.lock';
|
||||
$lockExtracting = $workingDir . '/extracting.lock';
|
||||
$upgradingKey = $rootDir . '/app/CHEVERETO_LICENSE_KEY';
|
||||
$FileKeyLegacy = $rootDir . '/app/CHEVERETO_LICENSE_KEY';
|
||||
$fileKey = $rootDir . '/app/CHEVERETO_LICENSE_KEY.php';
|
||||
if (file_exists($FileKeyLegacy)) {
|
||||
$licenseKeyLegacy = file_get_contents($FileKeyLegacy);
|
||||
$licenseKeyLegacy = trim($licenseKeyLegacy);
|
||||
file_put_contents($fileKey, "<?php return '{$licenseKeyLegacy}';");
|
||||
unlink($FileKeyLegacy);
|
||||
}
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
|
||||
echo <<<HTML
|
||||
|
@ -79,10 +83,10 @@ if (PHP_SAPI !== 'cli') {
|
|||
</script></head><body><pre>
|
||||
HTML;
|
||||
}
|
||||
if (!is_dir($workingDir)) {
|
||||
if (! is_dir($workingDir)) {
|
||||
mkdir($workingDir, 0755, true);
|
||||
}
|
||||
if (!is_writable($workingDir)) {
|
||||
if (! is_writable($workingDir)) {
|
||||
abort('[!] Working dir is not writable', 500);
|
||||
}
|
||||
$envFile = __DIR__ . '/env.php';
|
||||
|
@ -90,16 +94,16 @@ $env = [];
|
|||
if (file_exists($envFile)) {
|
||||
$env = require $envFile;
|
||||
}
|
||||
$env = array_merge($_ENV, $_SERVER, $env);
|
||||
$env = array_merge(getCheveretoEnv(), $_SERVER, $env);
|
||||
if (($env['CHEVERETO_SERVICING'] ?? null) === 'docker') {
|
||||
abort('[!] This feature is not available when using Docker', 403);
|
||||
}
|
||||
if (!class_exists('ZipArchive')) {
|
||||
if (! class_exists('ZipArchive')) {
|
||||
abort('[!] ZipArchive is not available');
|
||||
}
|
||||
$licenseKey = $env['CHEVERETO_LICENSE_KEY'] ?? '';
|
||||
if ($licenseKey === '' && file_exists($upgradingKey)) {
|
||||
$licenseKey = file_get_contents($upgradingKey);
|
||||
if ($licenseKey === '' && file_exists($fileKey)) {
|
||||
$licenseKey = require $fileKey;
|
||||
}
|
||||
$return = $_GET['return'] ?? '';
|
||||
$parseUri = parse_url($_SERVER['REQUEST_URI'] ?? '');
|
||||
|
@ -124,26 +128,26 @@ if (PHP_SAPI === 'cli') {
|
|||
unlinkIfExists($lockDownloading);
|
||||
unlinkIfExists($lockExtracting);
|
||||
logger('Locks cleared');
|
||||
die(0);
|
||||
exit(0);
|
||||
}
|
||||
} else {
|
||||
$singleStep = false;
|
||||
$action = (string) ($_GET['action'] ?? '');
|
||||
$token = (string) ($_GET['token'] ?? '');
|
||||
if (!file_exists($lockUpgrading)) {
|
||||
if (! file_exists($lockUpgrading)) {
|
||||
abort('[!] Upgrade is not expected', 403);
|
||||
}
|
||||
$upgradeToken = file_get_contents($lockUpgrading);
|
||||
if ($upgradeToken === false) {
|
||||
abort('[!] Invalid token file', 403);
|
||||
}
|
||||
if (!hash_equals($upgradeToken, $token)) {
|
||||
if (! hash_equals($upgradeToken, $token)) {
|
||||
abort('[!] Invalid token', 403);
|
||||
}
|
||||
if (($env['CHEVERETO_CONTEXT'] ?? null) === 'saas') {
|
||||
abort('[!] Upgrade is not needed on SaaS context', 403);
|
||||
}
|
||||
if (!in_array($action, $actions, true)) {
|
||||
if (! in_array($action, $actions, true)) {
|
||||
abort('[!] Provide action=download or action=extract', 400);
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +191,7 @@ if ($singleStep || $action === 'extract') {
|
|||
if (file_exists($lockExtracting)) {
|
||||
abort('[!] Extracting is already in progress', 400);
|
||||
}
|
||||
if (!file_exists($filePath)) {
|
||||
if (! file_exists($filePath)) {
|
||||
abort('[!] Package not downloaded', 400);
|
||||
}
|
||||
logger('Lock extracting process');
|
||||
|
@ -258,7 +262,7 @@ function curl(string $url, array $curlOpts = []): object
|
|||
curl_setopt($ch, CURLOPT_USERAGENT, 'Chevereto Upgrade');
|
||||
$fp = false;
|
||||
foreach ($curlOpts as $k => $v) {
|
||||
if (CURLOPT_FILE == $k) {
|
||||
if ($k == CURLOPT_FILE) {
|
||||
$fp = $v;
|
||||
}
|
||||
curl_setopt($ch, $k, $v);
|
||||
|
@ -279,7 +283,7 @@ function curl(string $url, array $curlOpts = []): object
|
|||
} else {
|
||||
$return->raw = $file_get_contents;
|
||||
}
|
||||
if (false !== strpos($transfer['content_type'], 'application/json')) {
|
||||
if (strpos($transfer['content_type'], 'application/json') !== false) {
|
||||
$return->json = json_decode($return->raw);
|
||||
if (is_resource($fp)) {
|
||||
$meta_data = stream_get_meta_data($fp);
|
||||
|
@ -287,7 +291,7 @@ function curl(string $url, array $curlOpts = []): object
|
|||
}
|
||||
}
|
||||
$code = $transfer['http_code'];
|
||||
if (200 != $code && !isset($return->json)) {
|
||||
if ($code != 200 && ! isset($return->json)) {
|
||||
$return->json = new stdClass();
|
||||
$return->json->error = new stdClass();
|
||||
$return->json->error->message = 'Error performing HTTP request';
|
||||
|
@ -300,11 +304,11 @@ function curl(string $url, array $curlOpts = []): object
|
|||
|
||||
function getFormatBytes($bytes, int $round = 1): string
|
||||
{
|
||||
if (!is_numeric($bytes)) {
|
||||
if (! is_numeric($bytes)) {
|
||||
return (string) $bytes;
|
||||
}
|
||||
if ($bytes < 1000) {
|
||||
return "$bytes B";
|
||||
return "{$bytes} B";
|
||||
}
|
||||
$units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
||||
foreach ($units as $k => $v) {
|
||||
|
@ -313,7 +317,7 @@ function getFormatBytes($bytes, int $round = 1): string
|
|||
if ($bytes < $threshold) {
|
||||
$size = round($bytes / $multiplier, $round);
|
||||
|
||||
return "$size $v";
|
||||
return "{$size} {$v}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -331,7 +335,7 @@ function getBytesToMb($bytes, int $round = 2): float
|
|||
function downloadFile(string $url, array $params, string $filePath, bool $post = true): object
|
||||
{
|
||||
$fp = fopen($filePath, 'wb+');
|
||||
if (!$fp) {
|
||||
if (! $fp) {
|
||||
throw new Exception("Can't open temp file " . $filePath . ' (wb+)');
|
||||
}
|
||||
$ops = [
|
||||
|
@ -389,13 +393,13 @@ function downloadAction(string $workingDir, array $params): Response
|
|||
|
||||
function extractAction(string $pathTo, string $filePath): Response
|
||||
{
|
||||
if (!file_exists($pathTo) && !mkdir($pathTo)) {
|
||||
if (! file_exists($pathTo) && ! mkdir($pathTo)) {
|
||||
throw new Exception(sprintf("Working path %s doesn't exists and can't be created", $pathTo), 500);
|
||||
}
|
||||
if (!is_readable($pathTo)) {
|
||||
if (! is_readable($pathTo)) {
|
||||
throw new Exception(sprintf('Working path %s is not readable', $pathTo), 500);
|
||||
}
|
||||
if (!is_readable($filePath)) {
|
||||
if (! is_readable($filePath)) {
|
||||
throw new Exception(sprintf("Can't read %s", basename($filePath)), 500);
|
||||
}
|
||||
$zip = new ZipArchive();
|
||||
|
@ -410,15 +414,18 @@ function extractAction(string $pathTo, string $filePath): Response
|
|||
}
|
||||
$numFiles = $zip->numFiles - 1;
|
||||
$extraction = $zip->extractTo($pathTo);
|
||||
if (!$extraction) {
|
||||
throw new Exception("Unable to extract to");
|
||||
if (! $extraction) {
|
||||
throw new Exception('Unable to extract to');
|
||||
}
|
||||
$zip->close();
|
||||
$timeTaken = round(microtime(true) - $timeStart, 2); //
|
||||
clearstatcache(true, $pathTo);
|
||||
|
||||
return new Response(
|
||||
strtr('Extraction completed for %n files in %ss', ['%n' => $numFiles, '%s' => $timeTaken]),
|
||||
strtr('Extraction completed for %n files in %ss', [
|
||||
'%n' => $numFiles,
|
||||
'%s' => $timeTaken,
|
||||
]),
|
||||
[
|
||||
'numFiles' => $numFiles,
|
||||
'timeTaken' => $timeTaken,
|
||||
|
@ -429,22 +436,22 @@ function extractAction(string $pathTo, string $filePath): Response
|
|||
function abort(string $message)
|
||||
{
|
||||
logger('[ERROR] ' . $message);
|
||||
die(255);
|
||||
exit(255);
|
||||
}
|
||||
|
||||
function passthruEnabled(): bool
|
||||
{
|
||||
if (!function_exists('passthru')) {
|
||||
if (! function_exists('passthru')) {
|
||||
return false;
|
||||
}
|
||||
$disabled = explode(',', ini_get('disable_functions'));
|
||||
|
||||
return !in_array('passthru', $disabled);
|
||||
return ! in_array('passthru', $disabled);
|
||||
}
|
||||
|
||||
function unlinkIfExists(string $file): void
|
||||
{
|
||||
if (!file_exists($file)) {
|
||||
if (! file_exists($file)) {
|
||||
return;
|
||||
}
|
||||
unlink($file);
|
||||
|
|
|
@ -648,3 +648,18 @@ body.body--installing .flex-box .loader {
|
|||
.description-meta:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
a.label--version {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
font-size: .6em;
|
||||
border-radius: .2em;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
padding: .3em 0.4em;
|
||||
display: block;
|
||||
font-weight: 400;
|
||||
line-height: normal;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 20px;
|
||||
}
|
||||
|
|
2
content/legacy/system/style.min.css
vendored
2
content/legacy/system/style.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -16,7 +16,7 @@ $share_links_networks = [
|
|||
'label' => 'Email'
|
||||
],
|
||||
'facebook' => [
|
||||
'url' => 'http://www.facebook.com/share.php?u=%URL%',
|
||||
'url' => 'https://www.facebook.com/share.php?u=%URL%',
|
||||
'label' => 'Facebook'
|
||||
],
|
||||
'twitter' => [
|
||||
|
@ -24,7 +24,7 @@ $share_links_networks = [
|
|||
'label' => 'X'
|
||||
],
|
||||
'blogger' => [
|
||||
'url' => 'http://www.blogger.com/blog-this.g?n=%TITLE%&source=&b=%HTML%',
|
||||
'url' => 'https://www.blogger.com/blog-this.g?n=%TITLE%&source=&b=%HTML%',
|
||||
'label' => 'Blogger'
|
||||
],
|
||||
'tumblr' => [
|
||||
|
@ -32,15 +32,15 @@ $share_links_networks = [
|
|||
'label' => 'Tumblr.'
|
||||
],
|
||||
'pinterest' => [
|
||||
'url' => 'http://www.pinterest.com/pin/create/bookmarklet/?media=%IMAGE%&url=%URL%&is_video=false&description=%DESCRIPTION%&title=%TITLE%',
|
||||
'url' => 'https://www.pinterest.com/pin/create/bookmarklet/?media=%IMAGE%&url=%URL%&is_video=false&description=%DESCRIPTION%&title=%TITLE%',
|
||||
'label' => 'Pinterest'
|
||||
],
|
||||
'reddit' => [
|
||||
'url' => 'http://old.reddit.com/submit?type=link&url=%URL%&title=%TITLE%&text=%DESCRIPTION%',
|
||||
'url' => 'https://old.reddit.com/submit?type=link&url=%URL%&title=%TITLE%&text=%DESCRIPTION%',
|
||||
'label' => 'reddit'
|
||||
],
|
||||
'vk' => [
|
||||
'url' => 'http://vk.com/share.php?url=%URL%',
|
||||
'url' => 'https://vk.com/share.php?url=%URL%',
|
||||
'label' => 'VK'
|
||||
]
|
||||
];
|
||||
|
|
|
@ -66,11 +66,11 @@ foreach ($links as $rel => $href) {
|
|||
<link rel="shortcut icon" href="<?php echo $icon;?>">
|
||||
<link rel="icon" type="image/png" href="<?php echo $icon; ?>" sizes="192x192">
|
||||
<link rel="apple-touch-icon" href="<?php echo $icon; ?>" sizes="180x180">
|
||||
<?php if (is_route('image') && Handler::var('image') !== null && Handler::var('image')['is_360']) { ?>
|
||||
<?php if (is_route('image') && Handler::var('image') !== null && Handler::var('image')['is_360']) { ?>
|
||||
<link rel="stylesheet" href="<?php echo get_static_url(PATH_PUBLIC_CONTENT_LEGACY_THEMES_PEAFOWL_LIB . 'js/pannellum.css'); ?>">
|
||||
<script type="text/javascript" src="<?php echo get_static_url(PATH_PUBLIC_CONTENT_LEGACY_THEMES_PEAFOWL_LIB . 'js/pannellum.js'); ?>"></script>
|
||||
<?php } ?>
|
||||
<?php
|
||||
<?php } ?>
|
||||
<?php
|
||||
if (!Handler::cond('maintenance')) {
|
||||
require_theme_file('snippets/embed');
|
||||
}
|
||||
|
@ -80,28 +80,38 @@ foreach ($links as $rel => $href) {
|
|||
}
|
||||
$open_graph = [
|
||||
'type' => 'website',
|
||||
'url' => get_current_url(true, ['lang']),
|
||||
'url' => $links['canonical']
|
||||
?? get_current_url(safe: true, removeQs: ['lang'], public: true),
|
||||
'title' => getSetting('website_doctitle', true),
|
||||
'image' => getSetting('homepage_cover_images')[0]['url'] ?? '',
|
||||
'site_name' => Handler::var('safe_html_website_name'),
|
||||
'description' => Handler::var('safe_html_meta_description'),
|
||||
'site_name' => Handler::var('website_name'),
|
||||
'description' => Handler::var('meta_description'),
|
||||
];
|
||||
if (getSetting('facebook_app_id')) {
|
||||
$open_graph['fb:app_id'] = getSetting('facebook_app_id');
|
||||
}
|
||||
switch (true) {
|
||||
case Handler::var('image') !== null and is_route('image'):
|
||||
$open_graph_key = match(Handler::var('image')['type']) {
|
||||
'video' => 'video',
|
||||
default => 'image',
|
||||
};
|
||||
$open_graph_type = match($open_graph_key) {
|
||||
'video' => 'video.other',
|
||||
default => 'article',
|
||||
};
|
||||
$open_graph_extend = [
|
||||
'type' => 'article',
|
||||
'type' => $open_graph_type,
|
||||
'title' => Handler::var('pre_doctitle'),
|
||||
// 'description' => _var('image')['description'],
|
||||
'image' => Handler::var('image')['url'],
|
||||
'image:width' => Handler::var('image')['width'],
|
||||
'image:height' => Handler::var('image')['height'],
|
||||
'image' => Handler::var('image')['display_url'],
|
||||
$open_graph_key => Handler::var('image')['url'],
|
||||
$open_graph_key . ':width' => Handler::var('image')['width'],
|
||||
$open_graph_key . ':height' => Handler::var('image')['height'],
|
||||
$open_graph_key . ':type' => Handler::var('image')['mime'],
|
||||
];
|
||||
if (Handler::var('image')['is_animated']
|
||||
&& Handler::var('image')['size'] < get_bytes('8 MB')
|
||||
) {
|
||||
) {
|
||||
$open_graph_extend['type'] = 'video.other';
|
||||
$open_graph_extend['url'] = Handler::var('image')['url'];
|
||||
}
|
||||
|
@ -127,14 +137,15 @@ foreach ($links as $rel => $href) {
|
|||
$open_graph_extend = [
|
||||
'type' => 'profile',
|
||||
'title' => Handler::var('user')['name'],
|
||||
'image' => isset(Handler::var('user')['avatar']) ? Handler::var('user')['avatar']['url'] : '',
|
||||
'image' => isset(Handler::var('user')['avatar'])
|
||||
? Handler::var('user')['avatar']['url']
|
||||
: '',
|
||||
];
|
||||
|
||||
break;
|
||||
case Handler::var('album') !== null and is_route('album'):
|
||||
$open_graph_extend = [
|
||||
'title' => Handler::var('album')['name'],
|
||||
// 'description' => _var('album')['description'],
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -147,12 +158,16 @@ foreach ($links as $rel => $href) {
|
|||
continue;
|
||||
}
|
||||
$prop = strpos($k, ':') !== false ? $k : "og:$k";
|
||||
echo '<meta property="' . $prop . '" content="' . safe_html($v, ENT_COMPAT) . '">' . "\n";
|
||||
echo '<meta property="' . $prop . '" content="' . safe_html($v) . '">' . "\n";
|
||||
}
|
||||
$twitter_card = [
|
||||
'card' => 'summary',
|
||||
'description' => Handler::var('safe_html_meta_description'),
|
||||
'title' => str_replace_last(' - ' . Handler::var('safe_html_website_name'), '', Handler::var('safe_html_doctitle')),
|
||||
'title' => str_replace_last(
|
||||
' - ' . Handler::var('safe_html_website_name'),
|
||||
'',
|
||||
Handler::var('safe_html_doctitle')
|
||||
),
|
||||
'site' => getSetting('twitter_account') ? ('@' . getSetting('twitter_account')) : null,
|
||||
];
|
||||
switch (true) {
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1894,11 +1894,11 @@ CHV.fn.uploader = {
|
|||
},
|
||||
"*"
|
||||
);
|
||||
if(CHV.obj.opener.uploadPlugin[window.name].autoClose) {
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(CHV.obj.opener.uploadPlugin[window.name].autoClose) {
|
||||
window.close();
|
||||
}
|
||||
} else {
|
||||
$('[data-action="openerPostMessage"]', this.selectors.root).remove();
|
||||
}
|
||||
|
@ -4078,7 +4078,7 @@ $(function () {
|
|||
);
|
||||
CHV.obj.opener.uploadPlugin[window.name] = {
|
||||
autoInsert: false,
|
||||
autoClose: false,
|
||||
autoClose: true,
|
||||
};
|
||||
});
|
||||
$(window).on("message", function (e) {
|
||||
|
@ -4231,6 +4231,8 @@ $(function () {
|
|||
$(this).addClass("current");
|
||||
CHV.fn.Palettes.set(palette);
|
||||
CHV.fn.Palettes.save();
|
||||
const event = new Event("paletteChanged");
|
||||
document.dispatchEvent(event);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,8 +0,0 @@
|
|||
/*!
|
||||
* JavaScript Cookie v2.0.0-pre
|
||||
* https://github.com/js-cookie/js-cookie
|
||||
*
|
||||
* Copyright 2006, 2015 Klaus Hartl
|
||||
* Released under the MIT license
|
||||
*/
|
||||
!function(e){if("function"==typeof define&&define.amd)define(e);else if("object"==typeof exports)module.exports=e();else{var n=window.Cookies,o=window.Cookies=e(window.jQuery);o.noConflict=function(){return window.Cookies=n,o}}}(function(){function e(){for(var e=0,n={};e<arguments.length;e++){var o=arguments[e];for(var t in o)n[t]=o[t]}return n}function n(o){function t(n,r,i){var c;if(arguments.length>1){if(i=e({path:"/"},t.defaults,i),"number"==typeof i.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*i.expires),i.expires=s}try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(a){}return r=encodeURIComponent(String(r)),r=r.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)),n=n.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),n=n.replace(/[\(\)]/g,escape),document.cookie=[n,"=",r,i.expires&&"; expires="+i.expires.toUTCString(),i.path&&"; path="+i.path,i.domain&&"; domain="+i.domain,i.secure&&"; secure"].join("")}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],u=/(%[0-9A-Z]{2})+/g,d=0;d<p.length;d++){var f=p[d].split("="),l=f[0].replace(u,decodeURIComponent),m=f.slice(1).join("=");if('"'===m.charAt(0)&&(m=m.slice(1,-1)),m=o&&o(m,l)||m.replace(u,decodeURIComponent),this.json)try{m=JSON.parse(m)}catch(a){}if(n===l){c=m;break}n||(c[l]=m)}return c}return t.get=t.set=t,t.getJSON=function(){return t.apply({json:!0},[].slice.call(arguments))},t.defaults={},t.remove=function(n,o){t(n,"",e(o,{expires:-1}))},t.withConverter=n,t}return n()});
|
|
@ -1226,14 +1226,14 @@ $(function () {
|
|||
$target.toggle();
|
||||
});
|
||||
|
||||
// Cookie law thing
|
||||
$(document).on("click", "[data-action=cookie-law-close]", function () {
|
||||
var $cookie = $(this).closest("#cookie-law-banner");
|
||||
var cookieName =
|
||||
typeof $cookie.data("cookie") !== typeof undefined
|
||||
? $cookie.data("cookie")
|
||||
: "PF_COOKIE_LAW_DISPLAY";
|
||||
Cookies.set(cookieName, 0, { expires: 365 });
|
||||
var cookieExpires = new Date(new Date().getTime()+1000*60*60*24*365).toGMTString();
|
||||
document.cookie = `${cookieName}=0; expires=${cookieExpires}; path=/`;
|
||||
$cookie.remove();
|
||||
});
|
||||
|
||||
|
|
|
@ -5289,7 +5289,7 @@ a.top-user-avatar {
|
|||
|
||||
#cookie-law-banner {
|
||||
position: fixed;
|
||||
padding: 10px;
|
||||
padding: 20px;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.8);
|
||||
|
@ -5299,6 +5299,7 @@ a.top-user-avatar {
|
|||
}
|
||||
|
||||
#cookie-law-banner p {
|
||||
font-size: 85%;
|
||||
-webkit-padding-end: 20px;
|
||||
padding-inline-end: 20px;
|
||||
}
|
||||
|
@ -5308,8 +5309,7 @@ a.cookie-law-close {
|
|||
text-decoration: none;
|
||||
position: absolute;
|
||||
inset-inline-end: 0;
|
||||
top: 3px;
|
||||
font-size: 0.72em;
|
||||
top: 0;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -228,7 +228,7 @@ if (Login::isLoggedUser()) {
|
|||
<?php
|
||||
if (getSetting('theme_nsfw_upload_checkbox') && !getSetting('enable_consent_screen')) {
|
||||
?>
|
||||
<div class="margin-20"><span rel="tooltip" data-tiptip="top" title="<?php _se('Mark this if the upload is not family safe'); ?>"><input type="checkbox" name="upload-nsfw" id="upload-nsfw" class="margin-right-5" value="1"><label for="upload-nsfw"><?php _se('Not family safe upload'); ?></label></span></div>
|
||||
<div class="margin-20"><span rel="tooltip" data-tiptip="top" title="<?php _se('Mark this if the upload is not family safe'); ?>"><input type="checkbox" name="upload-nsfw" id="upload-nsfw" class="margin-right-5" value="1"><label for="upload-nsfw"><i class="fas fa-flag margin-right-5"></i><?php _se('Flag not safe'); ?></label></span></div>
|
||||
<?php
|
||||
}
|
||||
if (!Login::isLoggedUser()) {
|
||||
|
@ -387,7 +387,7 @@ if (Login::isLoggedUser()) {
|
|||
<div class="checkbox-label">
|
||||
<div class="display-inline" rel="template-tooltip" data-tiptip="right" data-title="<?php _se('Mark this if the image is not family safe'); ?>">
|
||||
<label for="form-nsfw">
|
||||
<input class="float-left" type="checkbox" name="form-nsfw" id="form-nsfw" value="1"><?php _se('Flag as unsafe'); ?>
|
||||
<input class="float-left" type="checkbox" name="form-nsfw" id="form-nsfw" value="1"><span class="no-select"><i class="fas fa-flag margin-right-5"></i><?php _se('Flag not safe'); ?></span></label></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -42,7 +42,7 @@ if (!defined('ACCESS') || !ACCESS) {
|
|||
if (!Handler::cond('allowed_nsfw_flagging')) {
|
||||
echo ' disabled';
|
||||
}
|
||||
?>><span class="no-select"><i class="fas fa-flag"></i> <?php _se('Flag not safe'); ?></span></label></span></div>
|
||||
?>><span class="no-select"><i class="fas fa-flag margin-right-5"></i><?php _se('Flag not safe'); ?></span></label></span></div>
|
||||
<div class="input-label">
|
||||
<label for="form-image-description"><?php _se('Description'); ?> <span class="optional"><?php _se('optional'); ?></span></label>
|
||||
<textarea id="form-image-description" name="form-image-description" class="text-input resize-vertical" placeholder="<?php _se('Brief description of this %s', _n('image', 'images', 1)); ?>"><?php echo Handler::var('image_safe_html')["description"] ?? ''; ?></textarea>
|
||||
|
|
|
@ -31,7 +31,7 @@ foreach (StorageApis::getEnabled() as $k => $v) {
|
|||
</select>
|
||||
</div>
|
||||
<?php if(!(bool) env()['CHEVERETO_ENABLE_EXTERNAL_STORAGE_PROVIDERS']) { ?>
|
||||
<div class="input-below">(*) <?php _se('Not available in %s.', 'Chevereto ' . (string) env()['CHEVERETO_EDITION']); ?></div>
|
||||
<div class="input-below">(*) <?php _se('Not available in %s edition.', '<b>Chevereto ' . ucfirst((string) env()['CHEVERETO_EDITION']) . '</b>'); ?></div>
|
||||
<?php } ?>
|
||||
<div class="input-below input-warning red-warning"><?php echo Handler::var('input_errors')['form-storage-api_id'] ?? ''; ?></div>
|
||||
</div>
|
||||
|
@ -192,7 +192,7 @@ foreach (StorageApis::getEnabled() as $k => $v) {
|
|||
</div>
|
||||
<div class="input-label">
|
||||
<label for="form-storage-url">URL</label>
|
||||
<input type="text" id="form-storage-url" name="form-storage-url" class="text-input" placeholder="<?php _se('Storage URL'); ?>" value="<?php echo Storage::getAPIRegions('s3')['us-east-1']['url']; ?>" required>
|
||||
<input type="text" id="form-storage-url" name="form-storage-url" class="text-input" placeholder="<?php _se('Storage URL'); ?>" required>
|
||||
<div class="input-below"><?php _se('Map files in this storage under this URL.'); ?></div>
|
||||
</div>
|
||||
<div class="input-label">
|
||||
|
|
|
@ -3044,3 +3044,7 @@ img[data-type="video"] {
|
|||
.breadcrumb a:active {
|
||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||
}
|
||||
|
||||
iframe[src*=disqus] {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
|
2
content/legacy/themes/Peafowl/style.min.css
vendored
2
content/legacy/themes/Peafowl/style.min.css
vendored
File diff suppressed because one or more lines are too long
274
content/legacy/themes/Peafowl/views/dashboard/bulk-importer.php
Normal file
274
content/legacy/themes/Peafowl/views/dashboard/bulk-importer.php
Normal file
|
@ -0,0 +1,274 @@
|
|||
<?php
|
||||
use Chevereto\Legacy\Classes\Import;
|
||||
use function Chevereto\Legacy\G\absolute_to_relative;
|
||||
use function Chevereto\Legacy\G\get_base_url;
|
||||
use function Chevereto\Vars\env;
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
if (!defined('ACCESS') || !ACCESS) {
|
||||
die('This file cannot be directly accessed.');
|
||||
}
|
||||
?>
|
||||
<div data-content="dashboard-imports" class="margin-top-20 margin-bottom-10">
|
||||
<?php
|
||||
$statusesDisplay = [
|
||||
'queued' => _s('Queued'),
|
||||
'working' => _s('Working'),
|
||||
'paused' => _s('Paused'),
|
||||
'canceled' => _s('Canceled'),
|
||||
'completed' => _s('Completed'),
|
||||
];
|
||||
$rowTpl = '<li data-status="%status%" data-id="%id%" data-object="%object%" data-errors="%errors%" data-started="%started%">
|
||||
<span class="fluid-column c2 col-2-max display-table-cell padding-right-10">%id%</span>
|
||||
<span class="fluid-column c2 col-2-max display-table-cell padding-right-10 text-transform-uppercase" title="' . _s('Top level folders as %s', '%parse%') . '">%shortParse%</span>
|
||||
<span class="fluid-column c3 col-3-max display-table-cell padding-right-10">
|
||||
<span class="icon icon-warning2 color-red" data-result="error"></span>
|
||||
<span class="icon icon-checkmark-circle color-green" data-result="success"></span>
|
||||
<span class="status-text">%displayStatus%</span>
|
||||
</span>
|
||||
<span class="fluid-column c7 col-7-max col-7-min display-table-cell padding-right-10 text-overflow-ellipsis phone-display-block" title="%path%">%path%</span>
|
||||
<span class="fluid-column c2 display-table-cell padding-right-10"><span>%users%</span><span class="table-li--mobile-display"> ' . _n('User', 'Users', 20) . '</span></span>
|
||||
<span class="fluid-column c2 display-table-cell padding-right-10"><span>%albums%</span><span class="table-li--mobile-display"> ' . _n('Album', 'Albums', 20) . '</span></span>
|
||||
<span class="fluid-column c3 display-table-cell padding-right-10"><span>%images%</span><span class="table-li--mobile-display"> ' . _n('File', 'Files', 20) . '</span></span>
|
||||
<div class="fluid-column c3 display-table-cell margin-bottom-0 phone-display-block">
|
||||
<div class="loading"></div>
|
||||
<div data-content="pop-selection" class="pop-btn">
|
||||
<span class="pop-btn-text">' . _s('Actions') . ' <span class="fas fa-angle-down"></span></span>
|
||||
<div class="pop-box arrow-box arrow-box-top anchor-left">
|
||||
<div class="pop-box-inner pop-box-menu">
|
||||
<ul>
|
||||
<li data-args="%id%" data-modal="form" data-target="modal-process-import"><a>' . _s('Process') . '</a></li>
|
||||
<li data-action="pause"><a>' . _s('Pause') . '</a></li>
|
||||
<li data-action="cancel"><a>' . _s('Cancel') . '</a></li>
|
||||
<li data-content="log-process"><a href="' . get_base_url('importer-jobs/%id%/process') . '" target="_blank">' . _s('Process log') . '</a></li>
|
||||
<li data-content="log-errors"><a href="' . get_base_url('importer-jobs/%id%/errors') . '" target="_blank">' . _s('Errors') . '</a></li>
|
||||
<li data-args="%id%" data-confirm="' . _s('Do you really want to remove the import ID %s?', '%id%') . '" data-submit-fn="CHV.fn.import.delete.submit" data-ajax-deferred="CHV.fn.import.delete.deferred"><a>' . _s('Delete') . '</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>';
|
||||
if ($continuous = Import::getContinuous()) {
|
||||
foreach ($continuous as $v) {
|
||||
$boxTpl = '<div class="importing phone-c1 phablet-c1 c8 fluid-column display-inline-block" data-status="%status%" data-id="%id%" data-object="%object%" data-errors="%errors%" data-started="%started%">
|
||||
<h3 class="margin-bottom-5"><i class="fas fa-folder"></i> <b title="%path%">%pathRelative%</b></h3>
|
||||
<span data-content="log-errors" class="icon fas fa-exclamation-triangle color-red position-absolute top-10 right-10"></span>
|
||||
<div data-content="pop-selection" class="pop-btn">
|
||||
<span class="pop-btn-text">' . _s('Actions') . ' <span class="fas fa-angle-down"></span></span>
|
||||
<div class="pop-box arrow-box arrow-box-top anchor-left">
|
||||
<div class="pop-box-inner pop-box-menu">
|
||||
<ul>
|
||||
<li data-action="reset"><a>' . _s('Reset') . '</a></li>
|
||||
<li data-action="pause"><a>' . _s('Pause') . '</a></li>
|
||||
<li data-action="resume"><a>' . _s('Resume') . '</a></li>
|
||||
<li data-content="log-process"><a href="' . get_base_url('importer-jobs/%id%/process') . '" target="_blank">' . _s('Process log') . '</a></li>
|
||||
<li data-content="log-errors"><a href="' . get_base_url('importer-jobs/%id%/errors') . '" target="_blank"><span class="icon fas fa-exclamation-triangle color-red"></span> ' . _s('Errors') . '</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="importing-stats">
|
||||
<span class="figure"><span data-content="images">%images%</span> ' . _n('File', 'Files', 20) . '</span>
|
||||
<span class="figure"><span data-content="albums">%albums%</span> ' . _n('Album', 'Albums', 20) . '</span>
|
||||
<span class="figure"><span data-content="users">%users%</span> ' . _n('User', 'Users', 20) . '</span>
|
||||
</div>
|
||||
<div class="importing-status">' . _s('Status') . ': <span data-content="status">%displayStatus%</span></div>
|
||||
<div class="importing-status">@<span data-content="dateTime">%dateTime%</span> UTC</div>
|
||||
<div class="loading-container position-absolute right-10 bottom-10"><div class="loading"></div></div>
|
||||
</div>';
|
||||
echo strtr($boxTpl, [
|
||||
'%id%' => $v['id'],
|
||||
'%dateTime%' => $v['time_updated'],
|
||||
'%object%' => htmlspecialchars(json_encode($v), ENT_QUOTES, 'UTF-8'),
|
||||
'%status%' => $v['status'],
|
||||
'%parse%' => $v['options']['root'],
|
||||
'%shortParse%' => $v['options']['root'][0],
|
||||
'%displayStatus%' => $statusesDisplay[$v['status']],
|
||||
'%path%' => $v['path'],
|
||||
'%pathRelative%' => '.' . absolute_to_relative($v['path']),
|
||||
'%users%' => $v['users'] ?: 0,
|
||||
'%images%' => $v['images'] ?: 0,
|
||||
'%albums%' => $v['albums'] ?: 0,
|
||||
'%errors%' => $v['errors'] ?: 0,
|
||||
'%started%' => $v['started'] ?: 0,
|
||||
]);
|
||||
}
|
||||
} ?>
|
||||
</div>
|
||||
<?php if (env()['CHEVERETO_CONTEXT'] !== 'saas') { ?>
|
||||
<div>
|
||||
<p><?php _se('Run the following command to import content to Chevereto:'); ?></p>
|
||||
<?php
|
||||
$code = env()['CHEVERETO_SERVICING'] === 'docker'
|
||||
? "docker exec -it --user www-data " . (gethostname() ?: 'chv-container') . " app/bin/legacy -C bulk-importer"
|
||||
: 'sudo -u www-data php ' . PATH_PUBLIC . 'app/bin/legacy -C bulk-importer'
|
||||
?>
|
||||
<div class="margin-bottom-10 margin-top-10">
|
||||
<code class="code code--command display-inline-block" data-click="select-all"><?php echo $code; ?></code>
|
||||
</div>
|
||||
<p><?php _se('Read the %s for more information about this feature.', get_admin_docs_link('dashboard/bulk-importer.html', _s('documentation'))); ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
CHV.obj.import = {
|
||||
working: {
|
||||
// importId: {
|
||||
// threads: {threadId: xhr},
|
||||
// interval: interval,
|
||||
// stats: xhr
|
||||
// }
|
||||
},
|
||||
aborted: [],
|
||||
boxTpl: <?php echo json_encode($boxTpl ?? ''); ?>,
|
||||
rowTpl: <?php echo json_encode($rowTpl); ?>,
|
||||
importTr: {
|
||||
'id': null,
|
||||
// 'object' : null,
|
||||
'status': null,
|
||||
'parse': null,
|
||||
'shortParse': null,
|
||||
'displayStatus': null,
|
||||
'path': null,
|
||||
'users': null,
|
||||
'images': null,
|
||||
'albums': null,
|
||||
'errors': null,
|
||||
'started': null,
|
||||
},
|
||||
sel: {
|
||||
root: "[data-content=dashboard-imports]",
|
||||
header: ".table-li-header"
|
||||
},
|
||||
statusesDisplay: <?php echo json_encode($statusesDisplay); ?>
|
||||
};
|
||||
var updateContinuous = function( object) {
|
||||
var $sel = $("[data-id=" + object.id + "]", CHV.obj.import.sel.root);
|
||||
$sel.attr({
|
||||
"data-status": object.status,
|
||||
"data-object": JSON.stringify(object),
|
||||
"data-errors": object.errors,
|
||||
"data-started": object.started,
|
||||
});
|
||||
$("[data-content=images]", $sel).text(object.images);
|
||||
$("[data-content=dateTime]", $sel).text(object.time_updated);
|
||||
$("[data-content=users]", $sel).text(object.users);
|
||||
$("[data-content=albums]", $sel).text(object.albums);
|
||||
$("[data-content=status]", $sel).text(CHV.obj.import.statusesDisplay[object.status]);
|
||||
};
|
||||
$('.importing', '[data-content=dashboard-imports]').each(function(i, v) {
|
||||
var id = $(this).data("id");
|
||||
var $this = $(this);
|
||||
CHV.obj.import.working[id] = {
|
||||
threads: {},
|
||||
interval: setInterval(function() {
|
||||
var $loading = $this.find(".loading");
|
||||
if($loading.html() !== "") {
|
||||
$loading.removeClass("hidden");
|
||||
} else {
|
||||
PF.fn.loading.inline($loading, {
|
||||
size: "small"
|
||||
});
|
||||
}
|
||||
CHV.obj.import.working[id].stats = $.ajax({
|
||||
type: "POST",
|
||||
data: {
|
||||
action: "importStats",
|
||||
id: id
|
||||
}
|
||||
});
|
||||
CHV.obj.import.working[id].stats.complete(function (XHR) {
|
||||
var response = XHR.responseJSON;
|
||||
if (response) {
|
||||
updateContinuous(response.import);
|
||||
}
|
||||
$loading.addClass("hidden");
|
||||
});
|
||||
}, 10000),
|
||||
stats: {}
|
||||
};
|
||||
});
|
||||
$(document).on("click", CHV.obj.import.sel.root + " [data-action]", function() {
|
||||
var $el = $(this).closest("[data-object]");
|
||||
var $loading = $el.find(".loading");
|
||||
var $actions = $el.find("[data-content=pop-selection]");
|
||||
var localData = $el.data("object");
|
||||
var backupData = $.extend({}, localData);
|
||||
var action = $(this).data("action");
|
||||
var data = {};
|
||||
if (localData.id) {
|
||||
data.id = localData.id;
|
||||
}
|
||||
if($el.is("li")) {
|
||||
CHV.fn.import.process.abortAll(data.id);
|
||||
}
|
||||
switch (action) {
|
||||
case "resume":
|
||||
data.action = "importResume";
|
||||
localData.status = "working";
|
||||
break;
|
||||
case "reset":
|
||||
data.action = "importReset";
|
||||
localData.status = "working";
|
||||
break;
|
||||
case "pause":
|
||||
data.action = "importEdit";
|
||||
localData.status = "paused";
|
||||
data.values = {
|
||||
status: localData.status
|
||||
};
|
||||
break;
|
||||
case "cancel":
|
||||
localData.status = "canceled";
|
||||
data.action = "importEdit";
|
||||
data.values = {
|
||||
status: localData.status
|
||||
};
|
||||
break;
|
||||
case "process":
|
||||
localData.status = "working";
|
||||
data.action = "importEdit";
|
||||
data.values = {
|
||||
status: localData.status
|
||||
};
|
||||
break;
|
||||
default:
|
||||
alert('null');
|
||||
return;
|
||||
break;
|
||||
}
|
||||
if($loading.html() !== "") {
|
||||
$loading.removeClass("hidden");
|
||||
} else {
|
||||
PF.fn.loading.inline($loading, {
|
||||
size: "small"
|
||||
});
|
||||
}
|
||||
$actions.addClass("pointer-events-none");
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
data: data
|
||||
}).complete(function(XHR) {
|
||||
var response = XHR.responseJSON;
|
||||
if (XHR.status == 200) {
|
||||
var dataset = response.import;
|
||||
if($el.is("li")) {
|
||||
var $html = CHV.fn.import.parseTemplate(dataset);
|
||||
$el.replaceWith($html);
|
||||
if (action == "process") {
|
||||
CHV.fn.import.process.deferred.success(XHR);
|
||||
}
|
||||
} else {
|
||||
updateContinuous(response.import);
|
||||
}
|
||||
} else {
|
||||
PF.fn.growl.call(response.error.message);
|
||||
}
|
||||
$loading.addClass("hidden");
|
||||
$actions.removeClass("pointer-events-none");
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -154,8 +154,8 @@ foreach ($regions ?? [] as $key => $region) {
|
|||
<?php } ?>
|
||||
<hr class="line-separator">
|
||||
<div class="input-label">
|
||||
<?php echo badgePaid('pro'); ?><label for="enable_likes"><?php _se('Likes'); ?></label>
|
||||
<div class="c5 phablet-c1"><select <?php echo inputDisabledPaid('pro'); ?> type="text" name="enable_likes" id="enable_likes" class="text-input" <?php if (getSetting('website_mode') == 'personal') {
|
||||
<?php echo badgePaid('lite'); ?><label for="enable_likes"><?php _se('Likes'); ?></label>
|
||||
<div class="c5 phablet-c1"><select <?php echo inputDisabledPaid('lite'); ?> type="text" name="enable_likes" id="enable_likes" class="text-input" <?php if (getSetting('website_mode') == 'personal') {
|
||||
echo ' disabled';
|
||||
} ?>>
|
||||
<?php
|
||||
|
@ -165,8 +165,8 @@ foreach ($regions ?? [] as $key => $region) {
|
|||
<?php personal_mode_warning(); ?>
|
||||
</div>
|
||||
<div class="input-label">
|
||||
<?php echo badgePaid('pro'); ?><label for="enable_followers"><?php _se('Followers'); ?></label>
|
||||
<div class="c5 phablet-c1"><select <?php echo inputDisabledPaid('pro'); ?> type="text" name="enable_followers" id="enable_followers" class="text-input" <?php if (getSetting('website_mode') == 'personal') {
|
||||
<?php echo badgePaid('lite'); ?><label for="enable_followers"><?php _se('Followers'); ?></label>
|
||||
<div class="c5 phablet-c1"><select <?php echo inputDisabledPaid('lite'); ?> type="text" name="enable_followers" id="enable_followers" class="text-input" <?php if (getSetting('website_mode') == 'personal') {
|
||||
echo ' disabled';
|
||||
} ?>>
|
||||
<?php
|
||||
|
|
|
@ -29,7 +29,7 @@ if (!defined('ACCESS') || !ACCESS) {
|
|||
"Provide Chevereto license key by assigning the environment variable %e or by creating the %f file containing the license key.",
|
||||
[
|
||||
'%e' => '<code class="code font-weight-bold word-break-break-all">CHEVERETO_LICENSE_KEY</code>',
|
||||
'%f' => '<code class="code font-weight-bold word-break-break-all">' . PATH_APP . 'CHEVERETO_LICENSE_KEY</code>',
|
||||
'%f' => '<code class="code font-weight-bold word-break-break-all">' . PATH_APP . 'CHEVERETO_LICENSE_KEY.php</code>',
|
||||
]
|
||||
); ?></p>
|
||||
<p><?php _se('You can also set the license key in the textarea below.'); ?></p>
|
||||
|
|
|
@ -17,12 +17,14 @@ if (!defined('ACCESS') || !ACCESS) {
|
|||
die('This file cannot be directly accessed.');
|
||||
}
|
||||
if (env()['CHEVERETO_CONTEXT'] === 'saas') {
|
||||
$about = _s('This service is based on Chevereto hosted edition.')
|
||||
. ' ' . _s('Usage of this service must be in compliance with the Chevereto Software Terms of Service.');
|
||||
$about = _s('This service is based on Chevereto cloud edition.')
|
||||
. ' '
|
||||
. _s('Usage of this service must be in compliance with the Chevereto Software Terms of Service.');
|
||||
$liability = _s("This instance is hosted in a service layer provided by Chevereto Software, which hereby declare not being responsible for the use of this service neither the damages that this service may cause.");
|
||||
} else {
|
||||
$about = _s('This service is based on Chevereto self-hosted edition.')
|
||||
. ' ' . _s('Usage of Chevereto Software must be in compliance with the software license terms known as "The Chevereto License".');
|
||||
$about = _s('This service is based on Chevereto self-hosted %s edition.', ucfirst(env()['CHEVERETO_EDITION'] ?? ''))
|
||||
. ' '
|
||||
. _s('Usage of Chevereto Software must be in compliance with the software license terms known as "The Chevereto License".');
|
||||
$liability = _s("This instance is hosted in a service layer not provided by Chevereto Software, which hereby declare to do not have any control nor access to the management layer of this instance and it won't be responsible for this service neither the damages that this service may cause.");
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ if (post() !== [] && ! $is_sent) {
|
|||
$is_error = true;
|
||||
} else {
|
||||
$email = trim(post()['email']);
|
||||
$subject = getSetting('website_name', true) . ' contact form';
|
||||
$subject = getSetting('website_name') . ' contact form';
|
||||
$name = post()['name'];
|
||||
$send_mail = [
|
||||
'to' => getSettings()['email_incoming_email'],
|
||||
|
@ -63,7 +63,7 @@ if (post() !== [] && ! $is_sent) {
|
|||
getSettings()['email_from_email'],
|
||||
$name
|
||||
. ' ('
|
||||
. getSetting('website_name', true)
|
||||
. getSetting('website_name')
|
||||
. ' contact form)',
|
||||
],
|
||||
'reply-to' => [$email],
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
Chevereto Popup Upload Plugin (PUP)
|
||||
|
||||
@website https://chevereto.com/
|
||||
@version 1.1.0
|
||||
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
|
||||
@version 1.1.1
|
||||
@author Rodolfo Berrios A. <https://rodolfoberrios.com/>
|
||||
|
||||
--------------------------------------------------------------------- */
|
||||
(function () {
|
||||
|
@ -15,6 +15,7 @@
|
|||
mode: "auto",
|
||||
lang: "auto",
|
||||
autoInsert: "bbcode-embed-medium",
|
||||
autoClose: 1,
|
||||
palette: "default",
|
||||
init: "onload",
|
||||
containerClass: 1,
|
||||
|
|
2
sdk/pup.min.js
vendored
2
sdk/pup.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue