Merge branch 'master' of github.com:akaunting/akaunting
This commit is contained in:
commit
79380dc3e8
@ -17,7 +17,7 @@ abstract class Widget
|
|||||||
public $default_name = '';
|
public $default_name = '';
|
||||||
|
|
||||||
public $default_settings = [
|
public $default_settings = [
|
||||||
'width' => 'w-full lg:w-2/4 px-12 my-8',
|
'width' => 'w-full lg:w-2/4 lg:px-12 my-8',
|
||||||
];
|
];
|
||||||
|
|
||||||
public $description = '';
|
public $description = '';
|
||||||
|
@ -48,6 +48,40 @@ class Handler extends ExceptionHandler
|
|||||||
'password_confirmation',
|
'password_confirmation',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the exception handling callbacks for the application.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
$this->reportable(function (Throwable $e) {
|
||||||
|
if (config('logging.default') == 'sentry') {
|
||||||
|
app('sentry')->configureScope(function ($scope) {
|
||||||
|
$scope->setTag('company_id', (string) company_id());
|
||||||
|
$scope->setTag('locale', (string) app()->getLocale());
|
||||||
|
$scope->setTag('timezone', (string) config('app.timezone'));
|
||||||
|
});
|
||||||
|
|
||||||
|
//define('SENTRY_RELEASE', version('short'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config('logging.default') == 'bugsnag') {
|
||||||
|
app('bugsnag')->registerCallback(function ($report) {
|
||||||
|
$report->setMetaData([
|
||||||
|
'akaunting' => [
|
||||||
|
'company_id' => (string) company_id(),
|
||||||
|
'locale' => (string) app()->getLocale(),
|
||||||
|
'timezone' => (string) config('app.timezone'),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
app('bugsnag')->setAppVersion(version('short'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Report or log an exception.
|
* Report or log an exception.
|
||||||
*
|
*
|
||||||
|
@ -488,6 +488,20 @@ class Document extends Model
|
|||||||
return $actions;
|
return $actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (app('mobile-detect')->isMobile()) {
|
||||||
|
try {
|
||||||
|
$actions[] = [
|
||||||
|
'title' => trans('general.show'),
|
||||||
|
'icon' => 'visibility',
|
||||||
|
'url' => route($prefix . '.show', $this->id),
|
||||||
|
'permission' => 'read-' . $group . '-' . $permission_prefix,
|
||||||
|
'attributes' => [
|
||||||
|
'id' => 'index-more-actions-show-' . $this->id,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
} catch (\Exception $e) {}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (! $this->reconciled) {
|
if (! $this->reconciled) {
|
||||||
$actions[] = [
|
$actions[] = [
|
||||||
|
21
app/View/Components/Show/Right.php
Normal file
21
app/View/Components/Show/Right.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\View\Components\Show;
|
||||||
|
|
||||||
|
use App\Abstracts\View\Component;
|
||||||
|
|
||||||
|
class Right extends Component
|
||||||
|
{
|
||||||
|
|
||||||
|
public $disableLoading = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the view / contents that represent the component.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Contracts\View\View|string
|
||||||
|
*/
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
return view('components.show.content.right');
|
||||||
|
}
|
||||||
|
}
|
@ -44,6 +44,7 @@
|
|||||||
"barryvdh/laravel-dompdf": "^2.0",
|
"barryvdh/laravel-dompdf": "^2.0",
|
||||||
"barryvdh/laravel-ide-helper": "^2.9",
|
"barryvdh/laravel-ide-helper": "^2.9",
|
||||||
"bkwld/cloner": "^3.10",
|
"bkwld/cloner": "^3.10",
|
||||||
|
"bugsnag/bugsnag-laravel": "^2.24",
|
||||||
"doctrine/dbal": "^3.1",
|
"doctrine/dbal": "^3.1",
|
||||||
"fruitcake/laravel-cors": "^2.0",
|
"fruitcake/laravel-cors": "^2.0",
|
||||||
"genealabs/laravel-model-caching": "0.12.*",
|
"genealabs/laravel-model-caching": "0.12.*",
|
||||||
@ -67,6 +68,7 @@
|
|||||||
"plank/laravel-mediable": "^5.4",
|
"plank/laravel-mediable": "^5.4",
|
||||||
"riverskies/laravel-mobile-detect": "^1.3",
|
"riverskies/laravel-mobile-detect": "^1.3",
|
||||||
"santigarcor/laratrust": "^7.0",
|
"santigarcor/laratrust": "^7.0",
|
||||||
|
"sentry/sentry-laravel": "^2.14",
|
||||||
"simple-icons/simple-icons": "^6.0",
|
"simple-icons/simple-icons": "^6.0",
|
||||||
"simshaun/recurr": "^5.0",
|
"simshaun/recurr": "^5.0",
|
||||||
"staudenmeir/belongs-to-through": "^2.12",
|
"staudenmeir/belongs-to-through": "^2.12",
|
||||||
|
1056
composer.lock
generated
1056
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -180,6 +180,7 @@ return [
|
|||||||
/*
|
/*
|
||||||
* Package Service Providers...
|
* Package Service Providers...
|
||||||
*/
|
*/
|
||||||
|
Bugsnag\BugsnagLaravel\BugsnagServiceProvider::class,
|
||||||
Laravel\Tinker\TinkerServiceProvider::class,
|
Laravel\Tinker\TinkerServiceProvider::class,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
352
config/bugsnag.php
Normal file
352
config/bugsnag.php
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| API Key
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| You can find your API key on your Bugsnag dashboard.
|
||||||
|
|
|
||||||
|
| This api key points the Bugsnag notifier to the project in your account
|
||||||
|
| which should receive your application's uncaught exceptions.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'api_key' => env('BUGSNAG_API_KEY', ''),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| App Type
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set the type of application executing the current code.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'app_type' => env('BUGSNAG_APP_TYPE'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| App Version
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set the version of application executing the current code.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'app_version' => env('BUGSNAG_APP_VERSION'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Batch Sending
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set to true to send the errors through to Bugsnag when the PHP process
|
||||||
|
| shuts down, in order to prevent your app waiting on HTTP requests.
|
||||||
|
|
|
||||||
|
| Setting this to false will send an HTTP request straight away for each
|
||||||
|
| error.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'batch_sending' => env('BUGSNAG_BATCH_SENDING', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Endpoint
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set what server the Bugsnag notifier should send errors to. By default
|
||||||
|
| this is set to 'https://notify.bugsnag.com', but for Bugsnag Enterprise
|
||||||
|
| this should be the URL to your Bugsnag instance.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'endpoint' => env('BUGSNAG_ENDPOINT'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Filters
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Use this if you want to ensure you don't send sensitive data such as
|
||||||
|
| passwords, and credit card numbers to our servers. Any keys which
|
||||||
|
| contain these strings will be filtered.
|
||||||
|
|
|
||||||
|
| This option has been deprecated in favour of 'redacted_keys'
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'filters' => empty(env('BUGSNAG_FILTERS')) ? null : explode(',', str_replace(' ', '', env('BUGSNAG_FILTERS'))),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Hostname
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| You can set the hostname of your server to something specific for you to
|
||||||
|
| identify it by if needed.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'hostname' => env('BUGSNAG_HOSTNAME', env('APP_URL')),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Proxy
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This is where you can set the proxy settings you'd like us to use when
|
||||||
|
| communicating with Bugsnag when reporting errors.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'proxy' => array_filter([
|
||||||
|
'http' => env('HTTP_PROXY'),
|
||||||
|
'https' => env('HTTPS_PROXY'),
|
||||||
|
'no' => empty(env('NO_PROXY')) ? null : explode(',', str_replace(' ', '', env('NO_PROXY'))),
|
||||||
|
]),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Project Root
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Bugsnag marks stacktrace lines as in-project if they come from files
|
||||||
|
| inside your “project root”. You can set this here.
|
||||||
|
|
|
||||||
|
| If this is not set, we will automatically try to detect it.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'project_root' => env('BUGSNAG_PROJECT_ROOT'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Project Root Regex
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Bugsnag marks stacktrace lines as in-project if they come from files
|
||||||
|
| inside your “project root”. You can set this here.
|
||||||
|
|
|
||||||
|
| This option allows you to set it as a regular expression and will take
|
||||||
|
| precedence over "project_root" if both are defined.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'project_root_regex' => env('BUGSNAG_PROJECT_ROOT_REGEX'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Strip Path
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The strip path is a path to be trimmed from the start of any filepaths in
|
||||||
|
| your stacktraces.
|
||||||
|
|
|
||||||
|
| If this is not set, we will automatically try to detect it.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'strip_path' => env('BUGSNAG_STRIP_PATH'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Strip Path Regex
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The strip path is a path to be trimmed from the start of any filepaths in
|
||||||
|
| your stacktraces.
|
||||||
|
|
|
||||||
|
| This option allows you to set it as a regular expression and will take
|
||||||
|
| precedence over "strip_path" if both are defined.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'strip_path_regex' => env('BUGSNAG_STRIP_PATH_REGEX'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Query
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Enable this if you'd like us to automatically record all queries executed
|
||||||
|
| as breadcrumbs.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'query' => env('BUGSNAG_QUERY', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Bindings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Enable this if you'd like us to include the query bindings in our query
|
||||||
|
| breadcrumbs.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'bindings' => env('BUGSNAG_QUERY_BINDINGS', false),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Release Stage
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set the release stage to use when sending notifications to Bugsnag.
|
||||||
|
|
|
||||||
|
| Leaving this unset will default to using the application environment.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'release_stage' => env('BUGSNAG_RELEASE_STAGE'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Notify Release Stages
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set which release stages should send notifications to Bugsnag.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'notify_release_stages' => empty(env('BUGSNAG_NOTIFY_RELEASE_STAGES')) ? null : explode(',', str_replace(' ', '', env('BUGSNAG_NOTIFY_RELEASE_STAGES'))),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Send Code
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Bugsnag automatically sends a small snippet of the code that crashed to
|
||||||
|
| help you diagnose even faster from within your dashboard. If you don’t
|
||||||
|
| want to send this snippet, then set this to false.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'send_code' => env('BUGSNAG_SEND_CODE', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Callbacks
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Enable this if you'd like us to enable our default set of notification
|
||||||
|
| callbacks. These add things like the cookie information and session
|
||||||
|
| details to the error to be sent to Bugsnag.
|
||||||
|
|
|
||||||
|
| If you'd like to add your own callbacks, you can call the
|
||||||
|
| Bugsnag::registerCallback method from the boot method of your app
|
||||||
|
| service provider.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'callbacks' => env('BUGSNAG_CALLBACKS', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| User
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Enable this if you'd like us to set the current user logged in via
|
||||||
|
| Laravel's authentication system.
|
||||||
|
|
|
||||||
|
| If you'd like to add your own user resolver, you can do this by using
|
||||||
|
| callbacks via Bugsnag::registerCallback.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'user' => env('BUGSNAG_USER', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Logger Notify Level
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This sets the level at which a logged message will trigger a notification
|
||||||
|
| to Bugsnag. By default this level will be 'notice'.
|
||||||
|
|
|
||||||
|
| Must be one of the Psr\Log\LogLevel levels from the Psr specification.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'logger_notify_level' => env('BUGSNAG_LOGGER_LEVEL'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Auto Capture Sessions
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Enable this to start tracking sessions and deliver them to Bugsnag.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'auto_capture_sessions' => env('BUGSNAG_CAPTURE_SESSIONS', false),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Sessions Endpoint
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Sets a url to send tracked sessions to.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'session_endpoint' => env('BUGSNAG_SESSION_ENDPOINT'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Builds Endpoint
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Sets a url to send build reports to.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'build_endpoint' => env('BUGSNAG_BUILD_ENDPOINT'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Discard Classes
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| An array of classes that should not be sent to Bugsnag.
|
||||||
|
|
|
||||||
|
| This can contain both fully qualified class names and regular expressions.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'discard_classes' => empty(env('BUGSNAG_DISCARD_CLASSES')) ? null : explode(',', env('BUGSNAG_DISCARD_CLASSES')),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Redacted Keys
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| An array of metadata keys that should be redacted.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'redacted_keys' => empty(env('BUGSNAG_REDACTED_KEYS')) ? null : explode(',', env('BUGSNAG_REDACTED_KEYS')),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Feature flags
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| An array of feature flags to add to all reports.
|
||||||
|
|
|
||||||
|
| Each element in the array must have a "name" key and can optionally have a
|
||||||
|
| "variant" key, for example:
|
||||||
|
|
|
||||||
|
| [
|
||||||
|
| ['name' => 'example without a variant'],
|
||||||
|
| ['name' => 'example with a variant', 'variant' => 'example of a variant'],
|
||||||
|
| ]
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'feature_flags' => [],
|
||||||
|
];
|
@ -128,6 +128,16 @@ return [
|
|||||||
'path' => storage_path('logs/laravel.log'),
|
'path' => storage_path('logs/laravel.log'),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'bugsnag' => [
|
||||||
|
'driver' => 'bugsnag',
|
||||||
|
'level' => env('LOG_LEVEL', 'debug'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'sentry' => [
|
||||||
|
'driver' => 'sentry',
|
||||||
|
'level' => env('LOG_LEVEL', 'debug'),
|
||||||
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
57
config/sentry.php
Normal file
57
config/sentry.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
'dsn' => env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')),
|
||||||
|
|
||||||
|
// capture release as git sha
|
||||||
|
// 'release' => trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
||||||
|
|
||||||
|
// When left empty or `null` the Laravel environment will be used
|
||||||
|
'environment' => env('SENTRY_ENVIRONMENT'),
|
||||||
|
|
||||||
|
'breadcrumbs' => [
|
||||||
|
// Capture Laravel logs in breadcrumbs
|
||||||
|
'logs' => true,
|
||||||
|
|
||||||
|
// Capture SQL queries in breadcrumbs
|
||||||
|
'sql_queries' => true,
|
||||||
|
|
||||||
|
// Capture bindings on SQL queries logged in breadcrumbs
|
||||||
|
'sql_bindings' => true,
|
||||||
|
|
||||||
|
// Capture queue job information in breadcrumbs
|
||||||
|
'queue_info' => true,
|
||||||
|
|
||||||
|
// Capture command information in breadcrumbs
|
||||||
|
'command_info' => true,
|
||||||
|
],
|
||||||
|
|
||||||
|
'tracing' => [
|
||||||
|
// Trace queue jobs as their own transactions
|
||||||
|
'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false),
|
||||||
|
|
||||||
|
// Capture queue jobs as spans when executed on the sync driver
|
||||||
|
'queue_jobs' => true,
|
||||||
|
|
||||||
|
// Capture SQL queries as spans
|
||||||
|
'sql_queries' => true,
|
||||||
|
|
||||||
|
// Try to find out where the SQL query originated from and add it to the query spans
|
||||||
|
'sql_origin' => true,
|
||||||
|
|
||||||
|
// Capture views as spans
|
||||||
|
'views' => true,
|
||||||
|
|
||||||
|
// Indicates if the tracing integrations supplied by Sentry should be loaded
|
||||||
|
'default_integrations' => true,
|
||||||
|
],
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/configuration/options/#send-default-pii
|
||||||
|
'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', true),
|
||||||
|
|
||||||
|
'traces_sample_rate' => (float)(env('SENTRY_TRACES_SAMPLE_RATE', 1.0)),
|
||||||
|
|
||||||
|
'controllers_base_namespace' => env('SENTRY_CONTROLLERS_BASE_NAMESPACE', 'App\\Http\\Controllers'),
|
||||||
|
|
||||||
|
];
|
8
public/akaunting-js/generalAction.js
vendored
8
public/akaunting-js/generalAction.js
vendored
@ -30,6 +30,14 @@ document.querySelectorAll("[data-table-body]").forEach((table) => {
|
|||||||
td_item.addEventListener("click", () => {
|
td_item.addEventListener("click", () => {
|
||||||
window.location.href = row_href;
|
window.location.href = row_href;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// added target blank for click mouse middle button
|
||||||
|
td_item.addEventListener('mousedown', (event) => {
|
||||||
|
if (event.button == 1 || event.buttons == 4) {
|
||||||
|
window.open(row_href, "_blank");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// added target blank for click mouse middle button
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
50
public/css/app.css
vendored
50
public/css/app.css
vendored
@ -49894,18 +49894,18 @@ body{
|
|||||||
gap: 0px;
|
gap: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sm\:space-x-2 > :not([hidden]) ~ :not([hidden]){
|
|
||||||
--tw-space-x-reverse: 0;
|
|
||||||
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
|
||||||
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
|
|
||||||
}
|
|
||||||
|
|
||||||
.sm\:space-y-2 > :not([hidden]) ~ :not([hidden]){
|
.sm\:space-y-2 > :not([hidden]) ~ :not([hidden]){
|
||||||
--tw-space-y-reverse: 0;
|
--tw-space-y-reverse: 0;
|
||||||
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
|
margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
|
||||||
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
|
margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sm\:space-x-2 > :not([hidden]) ~ :not([hidden]){
|
||||||
|
--tw-space-x-reverse: 0;
|
||||||
|
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
||||||
|
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
|
||||||
|
}
|
||||||
|
|
||||||
.sm\:divide-x-2 > :not([hidden]) ~ :not([hidden]){
|
.sm\:divide-x-2 > :not([hidden]) ~ :not([hidden]){
|
||||||
--tw-divide-x-reverse: 0;
|
--tw-divide-x-reverse: 0;
|
||||||
border-right-width: calc(2px * var(--tw-divide-x-reverse));
|
border-right-width: calc(2px * var(--tw-divide-x-reverse));
|
||||||
@ -49967,6 +49967,11 @@ body{
|
|||||||
margin-bottom: 3rem;
|
margin-bottom: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lg\:-mx-12{
|
||||||
|
margin-left: -3rem;
|
||||||
|
margin-right: -3rem;
|
||||||
|
}
|
||||||
|
|
||||||
.lg\:my-0{
|
.lg\:my-0{
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
margin-bottom: 0px;
|
margin-bottom: 0px;
|
||||||
@ -50050,6 +50055,10 @@ body{
|
|||||||
width: 2.25rem;
|
width: 2.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lg\:w-96{
|
||||||
|
width: 24rem;
|
||||||
|
}
|
||||||
|
|
||||||
.lg\:w-1\/2{
|
.lg\:w-1\/2{
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
@ -50130,10 +50139,6 @@ body{
|
|||||||
width: 1rem;
|
width: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lg\:w-96{
|
|
||||||
width: 24rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lg\:w-2\/4{
|
.lg\:w-2\/4{
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
@ -50235,6 +50240,26 @@ body{
|
|||||||
border-right-width: 1px;
|
border-right-width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lg\:px-3{
|
||||||
|
padding-left: 0.75rem;
|
||||||
|
padding-right: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lg\:px-4{
|
||||||
|
padding-left: 1rem;
|
||||||
|
padding-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lg\:px-6{
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
padding-right: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lg\:px-12{
|
||||||
|
padding-left: 3rem;
|
||||||
|
padding-right: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
.lg\:px-24{
|
.lg\:px-24{
|
||||||
padding-left: 6rem;
|
padding-left: 6rem;
|
||||||
padding-right: 6rem;
|
padding-right: 6rem;
|
||||||
@ -50245,11 +50270,6 @@ body{
|
|||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lg\:px-12{
|
|
||||||
padding-left: 3rem;
|
|
||||||
padding-right: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lg\:pl-24{
|
.lg\:pl-24{
|
||||||
padding-left: 6rem;
|
padding-left: 6rem;
|
||||||
}
|
}
|
||||||
|
@ -856,7 +856,7 @@ const app = new Vue({
|
|||||||
|
|
||||||
this.component = Vue.component('add-new-component', (resolve, reject) => {
|
this.component = Vue.component('add-new-component', (resolve, reject) => {
|
||||||
resolve({
|
resolve({
|
||||||
template: '<div id="dynamic-email-component"><akaunting-modal-add-new modal-dialog-class="max-w-md" :show="email.modal" @submit="onSubmit" @cancel="onCancel" :buttons="email.buttons" :title="email.title" :is_component=true :message="email.html"></akaunting-modal-add-new></div>',
|
template: '<div id="dynamic-email-component"><akaunting-modal-add-new modal-dialog-class="max-w-screen-md" :show="email.modal" @submit="onSubmit" @cancel="onCancel" :buttons="email.buttons" :title="email.title" :is_component=true :message="email.html"></akaunting-modal-add-new></div>',
|
||||||
|
|
||||||
mixins: [
|
mixins: [
|
||||||
Global
|
Global
|
||||||
|
@ -24,7 +24,7 @@ return [
|
|||||||
'create_recurring' => ':user created this recurring template on :date',
|
'create_recurring' => ':user created this recurring template on :date',
|
||||||
'schedule' => 'Repeat every :interval :frequency since :date',
|
'schedule' => 'Repeat every :interval :frequency since :date',
|
||||||
'children' => ':count transactions were created automatically',
|
'children' => ':count transactions were created automatically',
|
||||||
'transfer_headline' => 'From :from_account to :to_account',
|
'transfer_headline' => '<div> <span class="font-bold"> From: </span> :from_account </div> <div> <span class="font-bold"> to: </span> :to_account </div>',
|
||||||
'transfer_desc' => 'Transfer created on :date.',
|
'transfer_desc' => 'Transfer created on :date.',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@
|
|||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
<x-slot name="content">
|
<x-slot name="content">
|
||||||
<div class="dashboard flex flex-wrap -mx-12">
|
<div class="dashboard flex flex-wrap lg:-mx-12">
|
||||||
@foreach($widgets as $widget)
|
@foreach($widgets as $widget)
|
||||||
@widget($widget)
|
@widget($widget)
|
||||||
@endforeach
|
@endforeach
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<div id="{{ $id }}" role="tooltip" class="w-96 inline-block absolute left-0 z-10 text-sm font-medium rounded-lg border border-gray-200 shadow-sm whitespace-nowrap tooltip-content transition-visible bg-lilac-900 border-none text-black p-6 cursor-auto opacity-0 invisible information-content">
|
<div id="{{ $id }}" role="tooltip" class="w-full lg:w-96 inline-block absolute left-0 z-10 text-sm font-medium rounded-lg border border-gray-200 shadow-sm whitespace-nowrap tooltip-content transition-visible bg-lilac-900 border-none text-black p-6 cursor-auto opacity-0 invisible information-content">
|
||||||
<div class="absolute w-2 h-2 inset-y-1/2 -right-1 before:content-[' '] before:absolute before:w-2 before:h-2 before:bg-lilac-900 before:border-gray-200 before:transform before:rotate-45 before:border before:border-t-0 before:border-l-0 data-popper-arrow"></div>
|
<div class="absolute w-2 h-2 inset-y-1/2 -right-1 before:content-[' '] before:absolute before:w-2 before:h-2 before:bg-lilac-900 before:border-gray-200 before:transform before:rotate-45 before:border before:border-t-0 before:border-l-0 data-popper-arrow"></div>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -222,7 +222,7 @@
|
|||||||
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90 pointer-events-none">expand_circle_down</span>
|
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90 pointer-events-none">expand_circle_down</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span data-menu-close id="menu-cancel" class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden pointer-events-none">cancel</span>
|
<span data-menu-close id="menu-cancel" class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
|
||||||
|
|
||||||
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
|
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
@stack('body_start')
|
@stack('body_start')
|
||||||
|
|
||||||
<div id="app" class="bg-no-repeat bg-cover bg-center" style="background-image: url({{ asset('public/img/auth/login-bg.png') }});">
|
<div id="app" class="h-screen lg:h-auto bg-no-repeat bg-cover bg-center" style="background-image: url({{ asset('public/img/auth/login-bg.png') }});">
|
||||||
<div class="relative w-full lg:max-w-7xl flex items-center m-auto">
|
<div class="relative w-full lg:max-w-7xl flex items-center m-auto">
|
||||||
<x-layouts.auth.slider>
|
<x-layouts.auth.slider>
|
||||||
{!! $slider ?? '' !!}
|
{!! $slider ?? '' !!}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<body>
|
<body>
|
||||||
@stack('body_start')
|
@stack('body_start')
|
||||||
|
|
||||||
<div class="bg-no-repeat bg-cover bg-center" style="background-image: url({{ asset('public/img/auth/login-bg.png') }});">
|
<div class="h-screen lg:h-auto bg-no-repeat bg-cover bg-center" style="background-image: url({{ asset('public/img/auth/login-bg.png') }});">
|
||||||
@if (! file_exists(public_path('js/install.min.js')))
|
@if (! file_exists(public_path('js/install.min.js')))
|
||||||
<div class="relative w-full lg:max-w-7xl flex flex-col lg:flex-row items-center m-auto">
|
<div class="relative w-full lg:max-w-7xl flex flex-col lg:flex-row items-center m-auto">
|
||||||
<div class="md:w-6/12 h-screen hidden lg:flex flex-col items-center justify-center">
|
<div class="md:w-6/12 h-screen hidden lg:flex flex-col items-center justify-center">
|
||||||
|
@ -169,7 +169,7 @@
|
|||||||
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90 pointer-events-none">expand_circle_down</span>
|
<span class="material-icons text-lg text-purple transform ltr:rotate-90 rtl:-rotate-90 pointer-events-none">expand_circle_down</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span data-menu-close class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden pointer-events-none">cancel</span>
|
<span data-menu-close class="material-icons absolute ltr:-right-2 rtl:right-12 transition-all top-8 text-lg text-purple cursor-pointer z-10 hidden">cancel</span>
|
||||||
|
|
||||||
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
|
<div class="fixed w-full h-full invisible lg:hidden js-menu-background" style="background-color: rgba(0, 0, 0, 0.5); z-index: -1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<div class="relative lg:w-8/12 ltr:lg:pl-8 rtl:lg:pr-8">
|
<div class="relative lg:w-8/12 ltr:lg:pl-8 rtl:lg:pr-8">
|
||||||
<x-loading.absolute />
|
@if (! isset($attributes['disable-loading']))
|
||||||
|
<x-loading.absolute />
|
||||||
|
@endif
|
||||||
{!! $slot !!}
|
{!! $slot !!}
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
@if ($transfer)
|
@if ($transfer)
|
||||||
<div class="text-black-400 text-sm flex gap-x-1 mt-1">
|
<div class="text-black-400 text-sm space-y-3 mt-1">
|
||||||
{!! trans('transactions.slider.transfer_headline', ['from_account' => $from_account, 'to_account' => $to_account]) !!}
|
{!! trans('transactions.slider.transfer_headline', ['from_account' => $from_account, 'to_account' => $to_account]) !!}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
@if (! empty($module))
|
@if (! empty($module))
|
||||||
{!! $module !!}
|
{!! $module !!}
|
||||||
@else
|
@else
|
||||||
<div class="relative w-full lg:w-1/2 my-8 px-12">
|
<div class="relative w-full lg:w-1/2 my-8 lg:px-12">
|
||||||
<div class="relative pb-2 my-4 lg:my-0 z-10">
|
<div class="relative pb-2 my-4 lg:my-0 z-10">
|
||||||
<div class="flex justify-between font-medium mb-2">
|
<div class="flex justify-between font-medium mb-2">
|
||||||
<h2 class="text-black">
|
<h2 class="text-black">
|
||||||
|
@ -6,6 +6,11 @@ lg:mt-4
|
|||||||
lg:pl-6
|
lg:pl-6
|
||||||
lg:w-9
|
lg:w-9
|
||||||
lg:mt-11
|
lg:mt-11
|
||||||
|
lg:-mx-12
|
||||||
|
lg:w-96
|
||||||
|
lg:px-3
|
||||||
|
lg:px-4
|
||||||
|
lg:px-6
|
||||||
lg:relative
|
lg:relative
|
||||||
lg:right-0
|
lg:right-0
|
||||||
lg:justify-around
|
lg:justify-around
|
||||||
|
Loading…
x
Reference in New Issue
Block a user