- E-mail intake (IMAP), optional and off by default: clients can create a ticket or reply to an existing one just by sending/replying to an e-mail. Configure any number of mailboxes in the new Admin > Poczta page (SMTP + IMAP together, replacing the old "E-MAIL" tab), each routed to a specific subcategory or a whole category (new tickets.category_id column). Replies are matched to their ticket via the number/checksum already in every notification subject; autoresponders/bounces are detected and rejected; "restrict tickets to LDAP" is enforced for e-mail like the guest web form. Manual "Pobierz teraz" per-mailbox fetch button; dedicated storage/logs/imap-*.log regardless of the app's log level; mail-icon badges on e-mail-originated tickets/messages in the operator queue and ticket view. - Operator queue: "select all" checkbox in the table header for every currently visible ticket under the active filter/tab. - Fixed: scheduled commands (SLA breach check, automation rules, and now IMAP fetch) always sent notifications through .env's default mailer instead of the configured SMTP server, because AppServiceProvider's Settings override used to skip itself for any console command, not just migrate. - Fixed: visiting a ticket that no longer exists (deleted mid-session, or a stale background refresh) showed a raw 404 instead of redirecting back to the operator queue / client dashboard. - Docs: README/ARCHITECTURE/CLAUDE/install/wiki updated for all of the above, including the previously-missing host crontab entry for schedule:run. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
146 lines
4.8 KiB
PHP
146 lines
4.8 KiB
PHP
<?php
|
|
|
|
use Monolog\Handler\NullHandler;
|
|
use Monolog\Handler\StreamHandler;
|
|
use Monolog\Handler\SyslogUdpHandler;
|
|
use Monolog\Processor\PsrLogMessageProcessor;
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default Log Channel
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This option defines the default log channel that is utilized to write
|
|
| messages to your logs. The value provided here should match one of
|
|
| the channels present in the list of "channels" configured below.
|
|
|
|
|
*/
|
|
|
|
'default' => env('LOG_CHANNEL', 'stack'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Deprecations Log Channel
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This option controls the log channel that should be used to log warnings
|
|
| regarding deprecated PHP and library features. This allows you to get
|
|
| your application ready for upcoming major versions of dependencies.
|
|
|
|
|
*/
|
|
|
|
'deprecations' => [
|
|
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
|
|
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Log Channels
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may configure the log channels for your application. Laravel
|
|
| utilizes the Monolog PHP logging library, which includes a variety
|
|
| of powerful log handlers and formatters that you're free to use.
|
|
|
|
|
| Available drivers: "single", "daily", "slack", "syslog",
|
|
| "errorlog", "monolog", "custom", "stack"
|
|
|
|
|
*/
|
|
|
|
'channels' => [
|
|
|
|
'stack' => [
|
|
'driver' => 'stack',
|
|
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
|
|
'ignore_exceptions' => false,
|
|
],
|
|
|
|
'single' => [
|
|
'driver' => 'single',
|
|
'path' => storage_path('logs/laravel.log'),
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
'daily' => [
|
|
'driver' => 'daily',
|
|
'path' => storage_path('logs/laravel.log'),
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'days' => env('LOG_DAILY_DAYS', 14),
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
// Dedicated, always-verbose channel for the IMAP fetcher
|
|
// (emails:fetch-imap) — kept separate from 'single'/LOG_LEVEL so a
|
|
// production app typically running at LOG_LEVEL=error still gets
|
|
// full visibility into what the fetcher did on every run, without
|
|
// that verbosity going into the main laravel.log.
|
|
'imap' => [
|
|
'driver' => 'daily',
|
|
'path' => storage_path('logs/imap.log'),
|
|
'level' => 'debug',
|
|
'days' => 14,
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
'slack' => [
|
|
'driver' => 'slack',
|
|
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
|
'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')),
|
|
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
|
|
'level' => env('LOG_LEVEL', 'critical'),
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
'papertrail' => [
|
|
'driver' => 'monolog',
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
|
|
'handler_with' => [
|
|
'host' => env('PAPERTRAIL_URL'),
|
|
'port' => env('PAPERTRAIL_PORT'),
|
|
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
|
|
],
|
|
'processors' => [PsrLogMessageProcessor::class],
|
|
],
|
|
|
|
'stderr' => [
|
|
'driver' => 'monolog',
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'handler' => StreamHandler::class,
|
|
'handler_with' => [
|
|
'stream' => 'php://stderr',
|
|
],
|
|
'formatter' => env('LOG_STDERR_FORMATTER'),
|
|
'processors' => [PsrLogMessageProcessor::class],
|
|
],
|
|
|
|
'syslog' => [
|
|
'driver' => 'syslog',
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
'errorlog' => [
|
|
'driver' => 'errorlog',
|
|
'level' => env('LOG_LEVEL', 'debug'),
|
|
'replace_placeholders' => true,
|
|
],
|
|
|
|
'null' => [
|
|
'driver' => 'monolog',
|
|
'handler' => NullHandler::class,
|
|
],
|
|
|
|
'emergency' => [
|
|
'path' => storage_path('logs/laravel.log'),
|
|
],
|
|
|
|
],
|
|
|
|
];
|