Compare commits

..

81 Commits

Author SHA1 Message Date
James Brooks
1400d4a04f Merge pull request #4174 from cactysman/patch-1
Updated link to PHP manual for date formats
2021-03-29 11:56:24 +01:00
James Brooks
b413e402e5 Merge pull request #4213 from Upellift99/master
Increase in the maximum number for the Piwik's site ID
2021-03-29 11:54:41 +01:00
John
8c627ee037 Increase in the maximum number for the Piwik's site ID 2021-02-08 10:27:29 +01:00
Cλctysman
9a0ceb52bf Updated link to PHP manual for date formats
The `datetime.format` page actually lists the formatting characters.
2020-11-30 13:30:10 +01:00
James Brooks
a2a36cd080 Fix some view bug 2016-12-29 11:39:14 +00:00
James Brooks
0ea41bed47 Compress logo svg 2016-12-29 11:39:06 +00:00
James Brooks
c14b6d7df7 Update deps 2016-12-29 11:38:59 +00:00
James Brooks
d682a42892 Updated deps 2016-12-15 10:24:38 +00:00
Graham Campbell
8f5afff4a2 Merge branch '2.4' 2016-07-29 13:14:33 -04:00
Graham Campbell
b045028c7b Merge pull request #2004 from CachetHQ/existence
Improved the bus test coverage
2016-07-29 13:12:29 -04:00
Graham Campbell
16189da222 Finished off tests 2016-07-29 13:05:30 -04:00
Graham Campbell
7596966e6c Added missing listener definitions 2016-07-29 13:05:18 -04:00
James Brooks
dcea947973 Fix metric point tests 2016-07-29 12:54:20 -04:00
James Brooks
d8ea3c59e3 Added update subscriber subscription command test 2016-07-29 12:54:20 -04:00
James Brooks
a2f8f4540e Added missing event tests 2016-07-29 12:54:20 -04:00
Graham Campbell
4031c42958 Added test existence tests 2016-07-29 12:54:20 -04:00
Graham Campbell
8348f48692 Merge branch '2.3' into 2.4 2016-07-29 12:51:23 -04:00
James Brooks
faf91470aa Remove elixir config 2016-07-29 12:05:50 -04:00
James Brooks
58039634bd Merge branch '2.3' into 2.4 2016-07-29 12:05:19 -04:00
James Brooks
915ea0d0bd Merge branch '2.3' into 2.4 2016-07-29 11:45:45 -04:00
Graham Campbell
a019d82010 Merge branch '2.4' 2016-07-25 23:03:58 +01:00
Graham Campbell
0f029702d4 Merge branch '2.3' into 2.4 2016-07-25 23:02:12 +01:00
James Brooks
71b5d446ba Merge branch '2.3' into 2.4 2016-07-25 21:44:07 +01:00
James Brooks
6246f20506 Set debug to true in tests 2016-07-25 08:09:53 +01:00
Graham Campbell
9dcc5d6896 Merge branch '2.3' into 2.4 2016-07-24 15:06:52 +01:00
James Brooks
235e3281b0 Merge branch '2.3' into 2.4 2016-07-22 09:20:58 +01:00
James Brooks
04b96e7dec Merge pull request #1995 from CachetHQ/standardise-team-member-commands
Standardise the team member commands
2016-07-22 09:15:48 +01:00
James Brooks
e15af44449 Standardise the team member commands. Closes #1881 2016-07-21 11:49:05 +01:00
Joe Cohen
ef9f7d23a0 Merge pull request #1993 from CachetHQ/skip-subscriber-verification
Added option to skip subscriber verification
2016-07-20 14:50:29 -05:00
Graham Campbell
ef694b027a Removed old variable 2016-07-20 19:58:58 +01:00
Graham Campbell
f53e466500 Applied fixes from StyleCI
[ci skip] [skip ci]
2016-07-20 14:56:55 -04:00
Graham Campbell
1e24138d7a Removed extra brackets 2016-07-20 19:54:48 +01:00
Graham Campbell
9120dba237 Fixed verification skipping 2016-07-20 19:52:23 +01:00
James Brooks
7f261a218a Added option to skip subscriber verification. Closes #1990 2016-07-20 16:00:27 +01:00
Graham Campbell
5b5db06ce3 Updated composer.lock hashes 2016-07-18 19:44:19 +01:00
Graham Campbell
b6635d30ee Merge branch '2.4' 2016-07-18 19:39:25 +01:00
Graham Campbell
5ae23b64d2 Bumped version 2016-07-18 19:39:18 +01:00
Graham Campbell
0d90f0459b Merge branch '2.3' into 2.4 2016-07-18 19:38:10 +01:00
James Brooks
bcbbee22d9 Merge pull request #1983 from peelman/improve-manage-subscriptions
group components on manage subscriptions page
2016-07-18 15:00:21 +01:00
Nick Peelman
9750191bff proper indents for @includes 2016-07-18 09:51:23 -04:00
Nick Peelman
52c4901a78 left align @include tags 2016-07-18 09:39:09 -04:00
Nick Peelman
587555c2d4 Adding a newline... 2016-07-18 09:12:42 -04:00
Nick Peelman
b4c7fb2ab0 adding a period... 2016-07-18 09:12:00 -04:00
Nick Peelman
e61d24f685 Fixing indentation problems... 2016-07-18 09:08:48 -04:00
Nick Peelman
88e85d2dfb group components on manage subscriptions page 2016-07-18 08:49:38 -04:00
James Brooks
5b72f2febc Merge '2.3' 2016-07-17 16:42:27 +01:00
Graham Campbell
4703aeadb2 Merge branch '2.3' 2016-07-14 11:23:45 -07:00
Graham Campbell
ef304950bb Updated the tests 2016-07-13 19:04:58 -07:00
Graham Campbell
ad8f098ec1 Merge branch '2.3' 2016-07-13 18:28:48 -07:00
James Brooks
2551a1a038 Updated deps 2016-07-13 19:24:57 +01:00
James Brooks
3874b533be Fix Feed import 2016-07-13 14:41:59 +01:00
James Brooks
85c0e94408 Fix import 2016-07-13 14:39:39 +01:00
James Brooks
1793f5588a Added missing import 2016-07-13 14:39:13 +01:00
James Brooks
46ff13c7fb Merge pull request #1972 from CachetHQ/analysis-qyrNE2
Applied fixes from StyleCI

[ci skip] [skip ci]
2016-07-13 14:38:51 +01:00
James Brooks
da8c8fae74 Applied fixes from StyleCI
[ci skip] [skip ci]
2016-07-13 09:38:47 -04:00
James Brooks
ff9eb123c6 Don't use the Config facade in any composers 2016-07-13 14:38:36 +01:00
James Brooks
895d1ea1b6 Don't use the Config facade in the TimezoneLocaleComposer 2016-07-13 14:35:49 +01:00
James Brooks
503252c3a2 Tidy up integrations, use contracts 2016-07-13 14:33:20 +01:00
James Brooks
ec0f0768f0 Added missing typehints 2016-07-13 14:24:02 +01:00
James Brooks
68cc6eb93c Merge pull request #1968 from CachetHQ/system-status-api
Implement the system status api endpoint
2016-07-13 14:22:29 +01:00
James Brooks
fdfebc18fb Implement the system status api endpoint. Closes #1936 2016-07-13 14:21:57 +01:00
James Brooks
0cd3ea0e92 Merge branch '2.3' 2016-07-13 14:21:00 +01:00
James Brooks
0f10522e9c Merge pull request #1957 from CachetHQ/apple-system-font
Update the font-stack to be -apple-system font
2016-07-12 22:41:07 +01:00
James Brooks
83e1013771 Merge branch '2.3' 2016-07-12 09:37:11 +01:00
James Brooks
7d4bab478f Merge branch '2.3' 2016-07-12 09:29:47 +01:00
James Brooks
18d7af2b35 Update the font-stack to be apple-system-font 2016-07-12 09:18:07 +01:00
James Brooks
e3cfb47d66 Merge branch '2.3' 2016-07-12 09:16:07 +01:00
James Brooks
716d357738 Resize the footer elements 2016-07-12 09:14:27 +01:00
James Brooks
cee336fd7c Merge pull request #1955 from CachetHQ/system-timezones
System Timezones
2016-07-12 09:10:23 +01:00
James Brooks
b3497820f9 Merge pull request #1954 from CachetHQ/analysis-8jlaNr
Applied fixes from StyleCI

[ci skip] [skip ci]
2016-07-11 21:44:19 +01:00
James Brooks
67152806d7 Applied fixes from StyleCI
[ci skip] [skip ci]
2016-07-11 16:44:15 -04:00
James Brooks
5298ad241a Show the timezone in the footer. 2016-07-11 21:43:59 +01:00
James Brooks
e2da8ee1fa Merge pull request #1952 from CachetHQ/disable-external-dependencies
Option to disable external dependencies
2016-07-11 10:12:27 +01:00
James Brooks
b6c22c1029 Option to disable external dependencies. Closes #1929 2016-07-11 10:11:44 +01:00
James Brooks
5c54830b0f Merged 2.3 2016-07-11 09:56:11 +01:00
James Brooks
1a6c22a8a9 Write the readme gooder 2016-06-30 08:48:30 +01:00
Graham Campbell
cb5badefcc Merge branch '2.3' 2016-06-27 15:50:43 +01:00
Graham Campbell
c25437871a Merge branch '2.3'
# Conflicts:
#	composer.lock
2016-06-11 00:49:49 +01:00
Graham Campbell
e96088fc0f Updated lock file 2016-06-10 08:56:40 +01:00
Graham Campbell
7472657812 Merge branch '2.3' 2016-06-10 08:56:18 +01:00
Graham Campbell
6becaf2acd Bumped version to 2.4 2016-06-10 08:40:57 +01:00
394 changed files with 2281 additions and 26758 deletions

View File

@@ -1,17 +1,13 @@
language: php
sudo: false
dist: trusty
php:
- 5.5.9
- 5.5
- 5.6
- 7.0
- 7.1
- hhvm
before_install: cp .env.example .env
sudo: false
install: travis_retry composer install --no-interaction --no-scripts --prefer-source

View File

@@ -1,14 +1,18 @@
# Cachet
[![StyleCI](https://styleci.io/repos/26730195/shield)](https://styleci.io/repos/26730195/)
[![Build Status](https://img.shields.io/travis/CachetHQ/Cachet/2.3.svg?style=flat-square)](https://travis-ci.org/CachetHQ/Cachet)
[![Build Status](https://img.shields.io/travis/CachetHQ/Cachet/master.svg?style=flat-square)](https://travis-ci.org/CachetHQ/Cachet)
[![Software License](https://img.shields.io/badge/license-BSD3-brightgreen.svg?style=flat-square)](LICENSE)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/cachet/localized.svg)](http://translate.cachethq.io/project/cachet)
[![Packagist](https://img.shields.io/packagist/v/cachethq/cachet.svg?style=flat-square)](https://packagist.org/packages/cachethq/cachet)
![Screenshot](https://cachethq.io/img/main-interface.jpg)
Cachet is a beautiful and powerful open source status page system.
Cachet is a beautiful and powerful open source status page system, a free replacement to services such as StatusPage.io, Status.io and others.
## Show your support
Cachet is a BSD-3-licensed open source project. If you'd like to support future development, check out the [Patreon campaign](https://patreon.com/jbrooksuk).
## Features
@@ -21,17 +25,21 @@ Cachet is a beautiful and powerful open source status page system.
- Metrics
- Cross-database support: MySQL, PostgreSQL and SQLite
- Subscriber notifications via Email
- Two factor authentication using Google Authenticator
- Two factor authentication, with Google Authenticator
## Usage in production
Use of `master` in a production environment is not recommended as it may change at any time.
## Requirements
- PHP 5.5.9 - 7.1
- PHP 5.5.9+ or newer
- Apache or Nginx server
- [Composer](https://getcomposer.org)
## I'm looking to contribute to this awesome project!
## How to contribute
Sweet, we're always looking for contributions that improve Cachet! It's easy to get started and you don't even need to know how to write a single line of code!
We're always looking for contributions that improve Cachet. It's easy to get started and you don't even need to know how to write a single line of code!
### Contributing as a non-developer/non-designer
@@ -63,13 +71,11 @@ We use these extra dependencies to develop Cachet:
- Gulp
- Git
Once cloned to your local machine, you'll need some demo data! Run `php artisan cachet:seed` to get the demo installation ready for action.
Once cloned to your local machine, you'll need some demo data! Run `php artisan cachet:seed` to get the demo installation on the go.
## Installation, Upgrades and Documentation
Documentation is found at [https://docs.cachethq.io](https://docs.cachethq.io).
Here are some useful quick links:
You can now find our documentation at [https://docs.cachethq.io](https://docs.cachethq.io).
- [Installing Cachet](https://docs.cachethq.io/docs/installing-cachet)
- [Getting started with Docker](https://docs.cachethq.io/docs/get-started-with-docker)
@@ -78,8 +84,8 @@ Here are some useful quick links:
To test out the demo, you may login to the [Dashboard](https://demo.cachethq.io/dashboard) with the following:
- **Username:** `test` or `test@test.com`
- **Password:** `test123`
- **Username:** test or test@test.com
- **Password:** test123
The demo is reset every half hour.
@@ -89,18 +95,14 @@ We list releases on the [Releases page](https://github.com/CachetHQ/Cachet/relea
## Translations
If you'd like to contribute translations, please check out our [CrowdIn project](https://crowdin.com/project/cachet).
> Thank you to our [translators](https://crowdin.com/project/cachet/activity_stream), who have allowed us to share Cachet with the world!
## Show your support
Cachet is a BSD-3-licensed open source project.
## Professional Installation Service
We offer a professional installation service. To find out more, email us at [support@alt-three.com](mailto:support@alt-three.com?Cachet Installation)
A special thank you to our [translators](https://crowdin.com/project/cachet/activity_stream), who have allowed us to share Cachet with the world. If you'd like to contribute translations, please check out our [CrowdIn project](https://crowdin.com/project/cachet).
## Security Vulnerabilities
If you discover a security vulnerability within Cachet, please send an e-mail to us at support@alt-three.com. We handle all security vulnerabilities on a case-by-case basis.
## Installations
We offer a paid installation service, which starts at $99 but is subject to change, dependant on your setup and infrastructure.
To find out more, email us at support@alt-three.com

View File

@@ -1 +1 @@
2.3.16
2.5.0-dev

View File

@@ -11,7 +11,12 @@
namespace CachetHQ\Cachet\Bus\Commands\User;
final class AddTeamMemberCommand
/**
* This is the add user command.
*
* @author James Brooks <james@alt-three.com>
*/
final class AddUserCommand
{
/**
* The user username.

View File

@@ -11,7 +11,12 @@
namespace CachetHQ\Cachet\Bus\Commands\User;
final class InviteTeamMemberCommand
/**
* This is the invite user command.
*
* @author James Brooks <james@alt-three.com>
*/
final class InviteUserCommand
{
/**
* The invite emails.
@@ -30,7 +35,7 @@ final class InviteTeamMemberCommand
];
/**
* Create a new invite team member command instance.
* Create a new invite user command instance.
*
* @param string[] $emails
*

View File

@@ -70,7 +70,7 @@ class ReportIncidentCommandHandler
'visible' => $command->visible,
];
if (IncidentTemplate::where('slug', '=', $command->template)->first()) {
if ($command->template) {
$data['message'] = $this->parseIncidentTemplate($command->template, $command->template_vars);
} else {
$data['message'] = $command->message;

View File

@@ -44,17 +44,17 @@ class SubscribeSubscriberCommandHandler
// Decide what to subscribe the subscriber to.
if ($subscriptions = $command->subscriptions) {
$components = Component::whereIn('id', $subscriptions)->get();
$subscriptions = Component::whereIn('id', $subscriptions);
} else {
$components = Component::all();
$subscriptions = Component::all();
}
$components->map(function ($component) use ($subscriber) {
foreach ($subscriptions as $component) {
Subscription::create([
'subscriber_id' => $subscriber->id,
'component_id' => $component->id,
]);
});
}
if ($command->verified) {
dispatch(new VerifySubscriberCommand($subscriber));
@@ -62,8 +62,6 @@ class SubscribeSubscriberCommandHandler
event(new SubscriberHasSubscribedEvent($subscriber));
}
$subscriber->load('subscriptions');
return $subscriber;
}
}

View File

@@ -13,6 +13,7 @@ namespace CachetHQ\Cachet\Bus\Handlers\Commands\Subscriber;
use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriberCommand;
use CachetHQ\Cachet\Bus\Events\Subscriber\SubscriberHasUnsubscribedEvent;
use CachetHQ\Cachet\Models\Subscriber;
class UnsubscribeSubscriberCommandHandler
{

View File

@@ -11,20 +11,25 @@
namespace CachetHQ\Cachet\Bus\Handlers\Commands\User;
use CachetHQ\Cachet\Bus\Commands\User\AddTeamMemberCommand;
use CachetHQ\Cachet\Bus\Commands\User\AddUserCommand;
use CachetHQ\Cachet\Bus\Events\User\UserWasAddedEvent;
use CachetHQ\Cachet\Models\User;
class AddTeamMemberCommandHandler
/**
* This is the add user command handler.
*
* @author James Brooks <james@alt-three.com>
*/
class AddUserCommandHandler
{
/**
* Handle the add team member command.
* Handle the add user command.
*
* @param \CachetHQ\Cachet\Bus\Commands\User\AddTeamMemberCommand $command
* @param \CachetHQ\Cachet\Bus\Commands\User\AddUserCommand $command
*
* @return \CachetHQ\Cachet\Models\User
*/
public function handle(AddTeamMemberCommand $command)
public function handle(AddUserCommand $command)
{
$user = User::create([
'username' => $command->username,

View File

@@ -11,20 +11,25 @@
namespace CachetHQ\Cachet\Bus\Handlers\Commands\User;
use CachetHQ\Cachet\Bus\Commands\User\InviteTeamMemberCommand;
use CachetHQ\Cachet\Bus\Commands\User\InviteUserCommand;
use CachetHQ\Cachet\Bus\Events\User\UserWasInvitedEvent;
use CachetHQ\Cachet\Models\Invite;
class InviteTeamMemberCommandHandler
/**
* This is the invite user command handler.
*
* @author James Brooks <james@alt-three.com>
*/
class InviteUserCommandHandler
{
/**
* Handle the invite team member command.
*
* @param \CachetHQ\Cachet\Bus\Commands\User\InviteTeamMemberCommand $command
* @param \CachetHQ\Cachet\Bus\Commands\User\InviteUserCommand $command
*
* @return void
*/
public function handle(InviteTeamMemberCommand $command)
public function handle(InviteUserCommand $command)
{
foreach ($command->emails as $email) {
$invite = Invite::create([

View File

@@ -106,8 +106,8 @@ class SendIncidentEmailNotificationHandler
$component = AutoPresenter::decorate($event->incident->component);
$mail = [
'email' => $subscriber->email,
'subject' => trans('cachet.subscriber.email.incident.subject', [
'email' => $subscriber->email,
'subject' => trans('cachet.subscriber.email.incident.subject', [
'status' => $incident->human_status,
'name' => $incident->name,
]),

View File

@@ -106,9 +106,9 @@ class SendMaintenanceEmailNotificationHandler
$component = AutoPresenter::decorate($event->incident->component);
$mail = [
'email' => $subscriber->email,
'subject' => trans('cachet.subscriber.email.maintenance.subject', [
'name' => $incident->name,
'email' => $subscriber->email,
'subject' => trans('cachet.subscriber.email.maintenance.subject', [
'name' => $incident->name,
]),
'has_component' => ($event->incident->component) ? true : false,
'component_name' => $component ? $component->name : null,

View File

@@ -46,9 +46,9 @@ class SendInviteUserEmailHandler
public function handle(UserWasInvitedEvent $event)
{
$mail = [
'email' => $event->invite->email,
'subject' => 'You have been invited.',
'link' => route('signup.invite', ['code' => $event->invite->code]),
'email' => $event->invite->email,
'subject' => 'You have been invited.',
'link' => route('signup.invite', ['code' => $event->invite->code]),
];
$this->mailer->queue([

View File

@@ -11,12 +11,41 @@
namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Dates\DateFactory;
use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Config;
class AppComposer
{
/**
* The date factory instance.
*
* @var \CachetHQ\Cachet\Dates\DateFactory
*/
protected $dates;
/**
* The illuminate config instance.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* Create a new app composer instance.
*
* @param \CachetHQ\Cachet\Dates\DateFactory $dates
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(DateFactory $dates, Repository $config)
{
$this->dates = $dates;
$this->config = $config;
}
/**
* Index page view composer.
*
@@ -26,25 +55,28 @@ class AppComposer
*/
public function compose(View $view)
{
$view->withAboutApp(Markdown::convertToHtml(Config::get('setting.app_about')));
$view->withAppAnalytics(Config::get('setting.app_analytics'));
$view->withAppAnalyticsGoSquared(Config::get('setting.app_analytics_gs'));
$view->withAppAnalyticsPiwikUrl(Config::get('setting.app_analytics_piwik_url'));
$view->withAppAnalyticsPiwikSiteId(Config::get('setting.app_analytics_piwik_site_id'));
$view->withAppBanner(Config::get('setting.app_banner'));
$view->withAppBannerStyleFullWidth(Config::get('setting.style_fullwidth_header'));
$view->withAppBannerType(Config::get('setting.app_banner_type'));
$view->withAppDomain(Config::get('setting.app_domain'));
$view->withAppGraphs(Config::get('setting.display_graphs'));
$view->withAppLocale(Config::get('setting.app_locale'));
$view->withAppStylesheet(Config::get('setting.stylesheet'));
$view->withAppUrl(Config::get('app.url'));
$view->withAppHeader(Config::get('setting.header'));
$view->withAppFooter(Config::get('setting.footer'));
$view->withAppName(Config::get('setting.app_name'));
$view->withShowSupport($support = Config::get('setting.show_support'));
$view->withAutomaticLocalization(Config::get('setting.automatic_localization'));
$view->withSiteTitle(Config::get('setting.app_name'));
$view->withFontSubset(Config::get('langs.'.Config::get('app.locale').'.subset', 'latin'));
$view->withAboutApp(Markdown::convertToHtml($this->config->get('setting.app_about')));
$view->withAppAnalytics($this->config->get('setting.app_analytics'));
$view->withAppAnalyticsGoSquared($this->config->get('setting.app_analytics_gs'));
$view->withAppAnalyticsPiwikUrl($this->config->get('setting.app_analytics_piwik_url'));
$view->withAppAnalyticsPiwikSiteId($this->config->get('setting.app_analytics_piwik_site_id'));
$view->withAppBanner($this->config->get('setting.app_banner'));
$view->withAppBannerStyleFullWidth($this->config->get('setting.style_fullwidth_header'));
$view->withAppBannerType($this->config->get('setting.app_banner_type'));
$view->withAppDomain($this->config->get('setting.app_domain'));
$view->withAppGraphs($this->config->get('setting.display_graphs'));
$view->withAppLocale($this->config->get('setting.app_locale'));
$view->withAppStylesheet($this->config->get('setting.stylesheet'));
$view->withAppUrl($this->config->get('app.url'));
$view->withAppHeader($this->config->get('setting.header'));
$view->withAppFooter($this->config->get('setting.footer'));
$view->withAppName($this->config->get('setting.app_name'));
$view->withShowSupport($this->config->get('setting.show_support'));
$view->withAutomaticLocalization($this->config->get('setting.automatic_localization'));
$view->withEnableExternalDependencies($this->config->get('setting.enable_external_dependencies'));
$view->withShowTimezone($this->config->get('setting.show_timezone'));
$view->withTimezone($this->dates->getTimezone());
$view->withSiteTitle($this->config->get('setting.app_name'));
$view->withFontSubset($this->config->get('langs.'.$this->config->get('app.locale').'.subset', 'latin'));
}
}

View File

@@ -12,11 +12,30 @@
namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Models\Metric;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Config;
class MetricsComposer
{
/**
* The illuminate config instance.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* Create a new metrics composer.
*
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(Repository $config)
{
$this->config = $config;
}
/**
* Metrics view composer.
*
@@ -27,7 +46,7 @@ class MetricsComposer
public function compose(View $view)
{
$metrics = null;
if ($displayMetrics = Config::get('setting.display_graphs')) {
if ($displayMetrics = $this->config->get('setting.display_graphs')) {
$metrics = Metric::displayable()->orderBy('order')->orderBy('id')->get();
}

View File

@@ -11,11 +11,30 @@
namespace CachetHQ\Cachet\Composers;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Config;
class ThemeComposer
{
/**
* The illuminate config instance.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* Create a new theme composer.
*
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(Repository $config)
{
$this->config = $config;
}
/**
* Bind data to the view.
*
@@ -26,17 +45,17 @@ class ThemeComposer
public function compose(View $view)
{
// Theme colors.
$view->withThemeBackgroundColor(Config::get('setting.style_background_color', '#F0F3F4'));
$view->withThemeBackgroundFills(Config::get('setting.style_background_fills', '#FFFFFF'));
$view->withThemeBannerBackgroundColor(Config::get('setting.style_banner_background_color', ''));
$view->withThemeBannerPadding(Config::get('setting.style_banner_padding', '40px 0'));
$view->withThemeTextColor(Config::get('setting.style_text_color', '#333333'));
$view->withThemeReds(Config::get('setting.style_reds', '#ff6f6f'));
$view->withThemeBlues(Config::get('setting.style_blues', '#3498db'));
$view->withThemeGreens(Config::get('setting.style_greens', '#7ED321'));
$view->withThemeYellows(Config::get('setting.style_yellows', '#F7CA18'));
$view->withThemeOranges(Config::get('setting.style_oranges', '#FF8800'));
$view->withThemeMetrics(Config::get('setting.style_metrics', '#0dccc0'));
$view->withThemeLinks(Config::get('setting.style_links', '#7ED321'));
$view->withThemeBackgroundColor($this->config->get('setting.style_background_color', '#F0F3F4'));
$view->withThemeBackgroundFills($this->config->get('setting.style_background_fills', '#FFFFFF'));
$view->withThemeBannerBackgroundColor($this->config->get('setting.style_banner_background_color', ''));
$view->withThemeBannerPadding($this->config->get('setting.style_banner_padding', '40px 0'));
$view->withThemeTextColor($this->config->get('setting.style_text_color', '#333333'));
$view->withThemeReds($this->config->get('setting.style_reds', '#ff6f6f'));
$view->withThemeBlues($this->config->get('setting.style_blues', '#3498db'));
$view->withThemeGreens($this->config->get('setting.style_greens', '#7ED321'));
$view->withThemeYellows($this->config->get('setting.style_yellows', '#F7CA18'));
$view->withThemeOranges($this->config->get('setting.style_oranges', '#FF8800'));
$view->withThemeMetrics($this->config->get('setting.style_metrics', '#0dccc0'));
$view->withThemeLinks($this->config->get('setting.style_links', '#7ED321'));
}
}

View File

@@ -13,11 +13,30 @@ namespace CachetHQ\Cachet\Composers;
use DateTime;
use DateTimeZone;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Config;
class TimezoneLocaleComposer
{
/**
* The illuminate config instance.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* Create a new timezone locale composer.
*
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(Repository $config)
{
$this->config = $config;
}
/**
* Timezones and Locales composer.
*
@@ -27,7 +46,7 @@ class TimezoneLocaleComposer
*/
public function compose(View $view)
{
$enabledLangs = Config::get('langs');
$enabledLangs = $this->config->get('langs');
$langs = array_map(function ($lang) use ($enabledLangs) {
$locale = basename($lang);

View File

@@ -163,6 +163,13 @@ class DemoSeederCommand extends Command
'order' => 1,
'group_id' => 2,
'link' => 'https://styleci.io',
], [
'name' => 'Patreon Page',
'description' => 'Support future development of Cachet.',
'status' => 1,
'order' => 0,
'group_id' => 0,
'link' => 'https://patreon.com/jbrooksuk',
],
];

View File

@@ -11,6 +11,7 @@
namespace CachetHQ\Cachet\Dates;
use DateTimeZone;
use Jenssegers\Date\Date;
class DateFactory
@@ -88,4 +89,17 @@ class DateFactory
{
return (new Date($time))->setTimezone($this->cachetTimezone);
}
/**
* Return the abbreviated timezone.
*
* @return string
*/
public function getTimezone()
{
$dateTime = new Date();
$dateTime->setTimeZone(new DateTimeZone($this->cachetTimezone));
return $dateTime->format('T');
}
}

View File

@@ -14,9 +14,6 @@ namespace CachetHQ\Cachet\Foundation\Providers;
use AltThree\Bus\Dispatcher;
use CachetHQ\Cachet\Bus\Middleware\UseDatabaseTransactions;
use CachetHQ\Cachet\Dates\DateFactory;
use CachetHQ\Cachet\Integrations\Credits;
use CachetHQ\Cachet\Integrations\Feed;
use CachetHQ\Cachet\Integrations\Releases;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
@@ -55,9 +52,6 @@ class AppServiceProvider extends ServiceProvider
public function register()
{
$this->registerDateFactory();
$this->registerCredits();
$this->registerFeed();
$this->registerReleases();
}
/**
@@ -74,47 +68,4 @@ class AppServiceProvider extends ServiceProvider
return new DateFactory($appTimezone, $cacheTimezone);
});
}
/**
* Register the credits class.
*
* @return void
*/
protected function registerCredits()
{
$this->app->singleton(Credits::class, function ($app) {
$cache = $app['cache.store'];
return new Credits($cache);
});
}
/**
* Register the feed class.
*
* @return void
*/
protected function registerFeed()
{
$this->app->singleton(Feed::class, function ($app) {
$cache = $app['cache.store'];
return new Feed($cache);
});
}
/**
* Register the releases class.
*
* @return void
*/
protected function registerReleases()
{
$this->app->singleton(Releases::class, function ($app) {
$cache = $app['cache.store'];
$token = $app['config']->get('services.github.token');
return new Releases($cache, $token);
});
}
}

View File

@@ -48,6 +48,9 @@ class EventServiceProvider extends ServiceProvider
'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent' => [
//
],
'CachetHQ\Cachet\Bus\Events\Incident\IncidentWasRemovedEvent' => [
//
],
'CachetHQ\Cachet\Bus\Events\Incident\MaintenanceWasScheduledEvent' => [
'CachetHQ\Cachet\Bus\Handlers\Events\Incident\SendMaintenanceEmailNotificationHandler',
],
@@ -90,5 +93,8 @@ class EventServiceProvider extends ServiceProvider
'CachetHQ\Cachet\Bus\Events\User\UserWasInvitedEvent' => [
'CachetHQ\Cachet\Bus\Handlers\Events\User\SendInviteUserEmailHandler',
],
'CachetHQ\Cachet\Bus\Events\User\UserWasRemovedEvent' => [
//
],
];
}

View File

@@ -11,8 +11,14 @@
namespace CachetHQ\Cachet\Foundation\Providers;
use CachetHQ\Cachet\Integrations\Contracts\Credits as CreditsContract;
use CachetHQ\Cachet\Integrations\Contracts\Feed as FeedContract;
use CachetHQ\Cachet\Integrations\Contracts\Releases as ReleasesContract;
use CachetHQ\Cachet\Integrations\Contracts\System as SystemContract;
use CachetHQ\Cachet\Integrations\Core\Credits;
use CachetHQ\Cachet\Integrations\Core\Feed;
use CachetHQ\Cachet\Integrations\Core\System;
use CachetHQ\Cachet\Integrations\GitHub\Releases;
use Illuminate\Contracts\Container\Container;
use Illuminate\Support\ServiceProvider;
@@ -30,7 +36,39 @@ class IntegrationServiceProvider extends ServiceProvider
*/
public function register()
{
$this->registerCredits();
$this->registerFeed();
$this->registerSystem();
$this->registerReleases();
}
/**
* Register the credits class.
*
* @return void
*/
protected function registerCredits()
{
$this->app->singleton(CreditsContract::class, function ($app) {
$cache = $app['cache.store'];
return new Credits($cache);
});
}
/**
* Register the feed class.
*
* @return void
*/
protected function registerFeed()
{
$this->app->singleton(FeedContract::class, function ($app) {
$cache = $app['cache.store'];
return new Feed($cache);
});
}
/**
@@ -44,4 +82,19 @@ class IntegrationServiceProvider extends ServiceProvider
return new System();
});
}
/**
* Register the releases class.
*
* @return void
*/
protected function registerReleases()
{
$this->app->singleton(ReleasesContract::class, function ($app) {
$cache = $app['cache.store'];
$token = $app['config']->get('services.github.token');
return new Releases($cache, $token);
});
}
}

View File

@@ -11,8 +11,8 @@
namespace CachetHQ\Cachet\Http\Controllers\Api;
use CachetHQ\Cachet\Integrations\Contracts\Releases;
use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Integrations\Releases;
/**
* This is the general api controller.
@@ -38,7 +38,7 @@ class GeneralController extends AbstractApiController
*/
public function version()
{
$latest = app(Releases::class)->latest();
$latest = app()->make(Releases::class)->latest();
return $this->setMetaData([
'on_latest' => version_compare(CACHET_VERSION, $latest['tag_name']) === 1,
@@ -55,9 +55,6 @@ class GeneralController extends AbstractApiController
{
$system = app()->make(System::class)->getStatus();
return $this->item([
'status' => $system['system_status'],
'message' => $system['system_message'],
]);
return $this->item($system['system_message']);
}
}

View File

@@ -17,6 +17,7 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriptionCommand;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Models\Subscription;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
@@ -48,12 +49,10 @@ class SubscriberController extends AbstractApiController
*/
public function postSubscribers()
{
$verified = Binput::get('verify', app(Repository::class)->get('setting.skip_subscriber_verification'));
try {
$subscriber = dispatch(new SubscribeSubscriberCommand(
Binput::get('email'),
Binput::get('verify', false),
Binput::get('components', null)
));
$subscriber = dispatch(new SubscribeSubscriberCommand(Binput::get('email'), $verified, Binput::get('components')));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}

View File

@@ -11,7 +11,7 @@
namespace CachetHQ\Cachet\Http\Controllers\Dashboard;
use CachetHQ\Cachet\Integrations\Feed;
use CachetHQ\Cachet\Integrations\Contracts\Feed;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\Incident;

View File

@@ -11,7 +11,7 @@
namespace CachetHQ\Cachet\Http\Controllers\Dashboard;
use CachetHQ\Cachet\Integrations\Credits;
use CachetHQ\Cachet\Integrations\Contracts\Credits;
use CachetHQ\Cachet\Models\User;
use CachetHQ\Cachet\Settings\Repository;
use Exception;
@@ -274,14 +274,6 @@ class SettingsController extends Controller
}
}
if (isset($parameters['stylesheet'])) {
if ($stylesheet = Binput::get('stylesheet', null, false, false)) {
$setting->set('stylesheet', $stylesheet);
} else {
$setting->delete('stylesheet');
}
}
if (Binput::hasFile('app_banner')) {
$this->handleUpdateBanner($setting);
}
@@ -292,7 +284,6 @@ class SettingsController extends Controller
'remove_banner',
'header',
'footer',
'stylesheet',
];
try {

View File

@@ -16,6 +16,7 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand;
use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriberCommand;
use CachetHQ\Cachet\Models\Subscriber;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
@@ -52,11 +53,13 @@ class SubscriberController extends Controller
*/
public function createSubscriberAction()
{
$verified = app(Repository::class)->get('setting.skip_subscriber_verification');
try {
$subscribers = preg_split("/\r\n|\n|\r/", Binput::get('email'));
foreach ($subscribers as $subscriber) {
dispatch(new SubscribeSubscriberCommand($subscriber));
dispatch(new SubscribeSubscriberCommand($subscriber, $verified));
}
} catch (ValidationException $e) {
return Redirect::route('dashboard.subscribers.add')

View File

@@ -12,8 +12,8 @@
namespace CachetHQ\Cachet\Http\Controllers\Dashboard;
use AltThree\Validator\ValidationException;
use CachetHQ\Cachet\Bus\Commands\User\AddTeamMemberCommand;
use CachetHQ\Cachet\Bus\Commands\User\InviteTeamMemberCommand;
use CachetHQ\Cachet\Bus\Commands\User\AddUserCommand;
use CachetHQ\Cachet\Bus\Commands\User\InviteUserCommand;
use CachetHQ\Cachet\Bus\Commands\User\RemoveUserCommand;
use CachetHQ\Cachet\Models\User;
use GrahamCampbell\Binput\Facades\Binput;
@@ -81,7 +81,7 @@ class TeamController extends Controller
public function postAddUser()
{
try {
dispatch(new AddTeamMemberCommand(
dispatch(new AddUserCommand(
Binput::get('username'),
Binput::get('password'),
Binput::get('email'),
@@ -130,7 +130,7 @@ class TeamController extends Controller
public function postInviteUser()
{
try {
dispatch(new InviteTeamMemberCommand(
dispatch(new InviteUserCommand(
array_unique(array_filter((array) Binput::get('emails')))
));
} catch (ValidationException $e) {

View File

@@ -48,11 +48,11 @@ class SetupController extends Controller
* @var string[]
*/
protected $mailDrivers = [
'smtp' => 'SMTP',
'mail' => 'Mail',
'sendmail' => 'Sendmail',
'mailgun' => 'Mailgun',
'mandrill' => 'Mandrill',
'smtp' => 'SMTP',
'mail' => 'Mail',
'sendmail' => 'Sendmail',
'mailgun' => 'Mailgun',
'mandrill' => 'Mandrill',
// 'ses' => 'Amazon SES', this will be available only if aws/aws-sdk-php is installed
'sparkpost' => 'SparkPost',
'log' => 'Log (Testing)',
@@ -149,7 +149,7 @@ class SetupController extends Controller
return $input->mail_driver === 'smtp';
});
$v->sometimes(['env.mail_address', 'env.mail_username'], 'required', function ($input) {
$v->sometimes(['env.mail_address', 'env.mail_username', 'env.mail_password'], 'required', function ($input) {
return $input->mail_driver !== 'log';
});

View File

@@ -18,10 +18,12 @@ use CachetHQ\Cachet\Bus\Commands\Subscriber\UnsubscribeSubscriptionCommand;
use CachetHQ\Cachet\Bus\Commands\Subscriber\UpdateSubscriberSubscriptionCommand;
use CachetHQ\Cachet\Bus\Commands\Subscriber\VerifySubscriberCommand;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Models\Subscription;
use GrahamCampbell\Binput\Facades\Binput;
use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Redirect;
@@ -56,10 +58,9 @@ class SubscribeController extends Controller
{
$email = Binput::get('email');
$subscriptions = Binput::get('subscriptions');
$verified = app(Repository::class)->get('setting.skip_subscriber_verification');
try {
$verified = false;
$subscription = dispatch(new SubscribeSubscriberCommand($email, $verified));
} catch (ValidationException $e) {
return Redirect::route('status-page')
@@ -147,15 +148,19 @@ class SubscribeController extends Controller
}
$subscriber = Subscriber::where('verify_code', '=', $code)->first();
$usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id');
$componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
$ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
if (!$subscriber) {
throw new BadRequestHttpException();
}
return View::make('subscribe.manage')
->withComponents(Component::all())
->withUngroupedComponents($ungroupedComponents)
->withSubscriber($subscriber)
->withSubscriptions($subscriber->subscriptions->pluck('component_id')->all());
->withSubscriptions($subscriber->subscriptions->pluck('component_id')->all())
->withComponentGroups($componentGroups);
}
/**
@@ -180,6 +185,8 @@ class SubscribeController extends Controller
try {
dispatch(new UpdateSubscriberSubscriptionCommand($subscriber, Binput::get('subscriptions')));
} catch (ValidationException $e) {
dd($e->getMessageBag());
return Redirect::route('subscribe.manage', $subscriber->verify_code)
->withInput(Binput::all())
->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('cachet.subscriber.email.failure')))

View File

@@ -131,7 +131,7 @@ class DashboardRoutes
$router->delete('{incident_template}/delete', 'IncidentController@deleteTemplateAction');
});
$router->group(['as' => 'subscribers.', 'prefix' => 'subscribers'], function (Registrar $router) {
$router->group(['as' => 'subscribers.', 'prefix' => 'subscribers'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'SubscriberController@showSubscribers',
@@ -144,7 +144,7 @@ class DashboardRoutes
$router->delete('{subscriber}/delete', 'SubscriberController@deleteSubscriberAction');
});
$router->group(['as' => 'metrics.', 'prefix' => 'metrics'], function (Registrar $router) {
$router->group(['as' => 'metrics.', 'prefix' => 'metrics'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'MetricController@showMetrics',

View File

@@ -0,0 +1,27 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations\Contracts;
/**
* This is the credits interface.
*
* @author James Brooks <james@alt-three.com>
*/
interface Credits
{
/**
* Returns the latest credits.
*
* @return array|null
*/
public function latest();
}

View File

@@ -0,0 +1,27 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations\Contracts;
/**
* This is the feed interface.
*
* @author James Brooks <james@alt-three.com>
*/
interface Feed
{
/**
* Returns the latest entries.
*
* @return array|null
*/
public function latest();
}

View File

@@ -0,0 +1,27 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations\Contracts;
/**
* This is the releases interface.
*
* @author James Brooks <james@alt-three.com>
*/
interface Releases
{
/**
* Returns the latest release.
*
* @return string
*/
public function latest();
}

View File

@@ -9,13 +9,14 @@
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations;
namespace CachetHQ\Cachet\Integrations\Core;
use CachetHQ\Cachet\Integrations\Contracts\Credits as CreditsContract;
use Exception;
use GuzzleHttp\Client;
use Illuminate\Contracts\Cache\Repository;
class Credits
class Credits implements CreditsContract
{
/**
* The default url.

View File

@@ -9,8 +9,9 @@
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations;
namespace CachetHQ\Cachet\Integrations\Core;
use CachetHQ\Cachet\Integrations\Contracts\Feed as FeedContract;
use Exception;
use GuzzleHttp\Client;
use Illuminate\Contracts\Cache\Repository;
@@ -20,7 +21,7 @@ use Illuminate\Contracts\Cache\Repository;
*
* @author James Brooks <james@alt-three.com>
*/
class Feed
class Feed implements FeedContract
{
/**
* The default url.

View File

@@ -9,12 +9,13 @@
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Integrations;
namespace CachetHQ\Cachet\Integrations\GitHub;
use CachetHQ\Cachet\Integrations\Contracts\Releases as ReleasesContract;
use GuzzleHttp\Client;
use Illuminate\Contracts\Cache\Repository;
class Releases
class Releases implements ReleasesContract
{
/**
* The default url.

View File

@@ -99,7 +99,7 @@ class ComponentGroup extends Model implements HasPresenter
*/
public function components()
{
return $this->hasMany(Component::class, 'group_id', 'id');
return $this->hasMany(Component::class, 'group_id', 'id')->orderBy('order');
}
/**
@@ -119,7 +119,7 @@ class ComponentGroup extends Model implements HasPresenter
*/
public function enabled_components()
{
return $this->components()->enabled()->orderBy('order');
return $this->components()->enabled();
}
/**

View File

@@ -12,6 +12,7 @@
namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
@@ -66,7 +67,7 @@ class IncidentTemplate extends Model
*
* @return \Illuminate\Database\Query\Builder
*/
public function scopeForSlug($query, $slug)
public function scopeForSlug(Builder $query, $slug)
{
return $query->where('slug', $slug);
}

View File

@@ -97,4 +97,27 @@ class ComponentGroupPresenter extends BasePresenter implements Arrayable
'lowest_human_status' => $this->lowest_human_status(),
]);
}
/**
* Determine if any of the contained components have active subscriptions.
*
* @return bool
*/
public function has_subscriber($subscriptions)
{
$enabled_components = $this->wrappedObject->enabled_components()->orderBy('order')->pluck('id')->toArray();
$intersected = array_intersect($enabled_components, $subscriptions);
return count($intersected) != 0;
}
/**
* Determine the class for collapsed/uncollapsed groups on the subscription form.
*
* @return string
*/
public function collapse_class_with_subscriptions($subscriptions)
{
return $this->has_subscriber($subscriptions) ? 'ion-ios-minus-outline' : 'ion-ios-plus-outline';
}
}

View File

@@ -47,20 +47,6 @@ abstract class AbstractMetricRepository
$this->config = $config;
}
/**
* Get the table names prefix.
*
* @return string
*/
protected function getPrefix()
{
$driver = $this->config->get('database.default');
$connection = $this->config->get('database.connections.'.$driver);
$prefix = $connection['prefix'];
return $prefix;
}
/**
* Get the metrics table name.
*
@@ -68,20 +54,10 @@ abstract class AbstractMetricRepository
*/
protected function getTableName()
{
$prefix = $this->getPrefix();
$driver = $this->config->get('database.default');
$connection = $this->config->get('database.connections.'.$driver);
$prefix = $connection['prefix'];
return $prefix.'metrics';
}
/**
* Get the metric points table name.
*
* @return string
*/
protected function getMetricPointsTableName()
{
$prefix = $this->getPrefix();
return $prefix.'metric_points';
}
}

View File

@@ -36,7 +36,6 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
{
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M'));
$timeInterval = $dateTime->format('YmdHi');
$metricPointsTableName = $this->getMetricPointsTableName();
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`';
@@ -46,7 +45,7 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
$value = 0;
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN $metricPointsTableName mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H%i') = :timeInterval GROUP BY HOUR(mp.`created_at`), MINUTE(mp.`created_at`)", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H%i') = :timeInterval GROUP BY HOUR(mp.`created_at`), MINUTE(mp.`created_at`)", [
'metricId' => $metric->id,
'timeInterval' => $timeInterval,
]);
@@ -74,7 +73,6 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
{
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'));
$hourInterval = $dateTime->format('YmdH');
$metricPointsTableName = $this->getMetricPointsTableName();
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`';
@@ -84,7 +82,7 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
$value = 0;
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN $metricPointsTableName mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H') = :hourInterval GROUP BY HOUR(mp.`created_at`)", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H') = :hourInterval GROUP BY HOUR(mp.`created_at`)", [
'metricId' => $metric->id,
'hourInterval' => $hourInterval,
]);
@@ -110,7 +108,6 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
public function getPointsForDayInWeek(Metric $metric, $day)
{
$dateTime = (new Date())->sub(new DateInterval('P'.$day.'D'));
$metricPointsTableName = $this->getMetricPointsTableName();
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = 'SUM(mp.`value` * mp.`counter`) AS `value`';
@@ -120,7 +117,7 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
$value = 0;
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN $metricPointsTableName mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.`created_at` BETWEEN DATE_SUB(mp.`created_at`, INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 1 DAY) AND DATE_FORMAT(mp.`created_at`, '%Y%m%d') = :timeInterval GROUP BY DATE_FORMAT(mp.`created_at`, '%Y%m%d')", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.`created_at` BETWEEN DATE_SUB(mp.`created_at`, INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 1 DAY) AND DATE_FORMAT(mp.`created_at`, '%Y%m%d') = :timeInterval GROUP BY DATE_FORMAT(mp.`created_at`, '%Y%m%d')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

View File

@@ -34,20 +34,19 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterfac
*/
public function getPointsLastHour(Metric $metric, $hour, $minute)
{
$metricPointsTableName = $this->getMetricPointsTableName();
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M'));
// Default metrics calculations.
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
} elseif ($metric->calc_type == Metric::CALC_AVG) {
$queryType = "avg($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'avg(metric_points.value * metric_points.counter)';
} else {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN $metricPointsTableName ON $metricPointsTableName.metric_id = m.id WHERE m.id = :metricId AND to_char($metricPointsTableName.created_at, 'YYYYMMDDHH24MI') = :timeInterval GROUP BY to_char($metricPointsTableName.created_at, 'HHMI')", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24MI') = :timeInterval GROUP BY to_char(metric_points.created_at, 'HHMI')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdHi'),
]);
@@ -74,19 +73,18 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterfac
public function getPointsByHour(Metric $metric, $hour)
{
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'));
$metricPointsTableName = $this->getMetricPointsTableName();
// Default metrics calculations.
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
} elseif ($metric->calc_type == Metric::CALC_AVG) {
$queryType = "avg($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'avg(metric_points.value * metric_points.counter)';
} else {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN $metricPointsTableName ON $metricPointsTableName.metric_id = m.id WHERE $metricPointsTableName.metric_id = :metricId AND to_char($metricPointsTableName.created_at, 'YYYYMMDDHH24') = :timeInterval GROUP BY to_char($metricPointsTableName.created_at, 'H')", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE metric_points.metric_id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24') = :timeInterval GROUP BY to_char(metric_points.created_at, 'H')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdH'),
]);
@@ -112,7 +110,6 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterfac
public function getPointsForDayInWeek(Metric $metric, $day)
{
$dateTime = (new Date())->sub(new DateInterval('P'.$day.'D'));
$metricPointsTableName = $this->getMetricPointsTableName();
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = 'sum(mp.value * mp.counter) AS value';
@@ -121,7 +118,7 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterfac
}
$value = 0;
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN $metricPointsTableName mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.created_at BETWEEN (mp.created_at - interval '1 week') AND (now() + interval '1 day') AND to_char(mp.created_at, 'YYYYMMDD') = :timeInterval GROUP BY to_char(mp.created_at, 'YYYYMMDD')", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.created_at BETWEEN (mp.created_at - interval '1 week') AND (now() + interval '1 day') AND to_char(mp.created_at, 'YYYYMMDD') = :timeInterval GROUP BY to_char(mp.created_at, 'YYYYMMDD')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

View File

@@ -30,19 +30,18 @@ class SqliteRepository extends AbstractMetricRepository implements MetricInterfa
public function getPointsLastHour(Metric $metric, $hour, $minute)
{
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'))->sub(new DateInterval('PT'.$minute.'M'));
$metricPointsTableName = $this->getMetricPointsTableName();
// Default metrics calculations.
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
} elseif ($metric->calc_type == Metric::CALC_AVG) {
$queryType = "avg($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'avg(metric_points.value * metric_points.counter)';
} else {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN $metricPointsTableName ON $metricPointsTableName.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H%M', $metricPointsTableName.created_at) = :timeInterval GROUP BY strftime('%H%M', $metricPointsTableName.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H%M', metric_points.created_at) = :timeInterval GROUP BY strftime('%H%M', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdHi'),
]);
@@ -69,19 +68,18 @@ class SqliteRepository extends AbstractMetricRepository implements MetricInterfa
public function getPointsByHour(Metric $metric, $hour)
{
$dateTime = (new Date())->sub(new DateInterval('PT'.$hour.'H'));
$metricPointsTableName = $this->getMetricPointsTableName();
// Default metrics calculations.
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
} elseif ($metric->calc_type == Metric::CALC_AVG) {
$queryType = "avg($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'avg(metric_points.value * metric_points.counter)';
} else {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN $metricPointsTableName ON $metricPointsTableName.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H', $metricPointsTableName.created_at) = :timeInterval GROUP BY strftime('%H', $metricPointsTableName.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H', metric_points.created_at) = :timeInterval GROUP BY strftime('%H', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdH'),
]);
@@ -107,19 +105,18 @@ class SqliteRepository extends AbstractMetricRepository implements MetricInterfa
public function getPointsForDayInWeek(Metric $metric, $day)
{
$dateTime = (new Date())->sub(new DateInterval('P'.$day.'D'));
$metricPointsTableName = $this->getMetricPointsTableName();
// Default metrics calculations.
if (!isset($metric->calc_type) || $metric->calc_type == Metric::CALC_SUM) {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
} elseif ($metric->calc_type == Metric::CALC_AVG) {
$queryType = "avg($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'avg(metric_points.value * metric_points.counter)';
} else {
$queryType = "sum($metricPointsTableName.value * $metricPointsTableName.counter)";
$queryType = 'sum(metric_points.value * metric_points.counter)';
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN $metricPointsTableName ON $metricPointsTableName.metric_id = m.id WHERE m.id = :metricId AND $metricPointsTableName.created_at > date('now', '-7 day') AND strftime('%Y%m%d', $metricPointsTableName.created_at) = :timeInterval GROUP BY strftime('%Y%m%d', $metricPointsTableName.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND metric_points.created_at > date('now', '-7 day') AND strftime('%Y%m%d', metric_points.created_at) = :timeInterval GROUP BY strftime('%Y%m%d', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

View File

@@ -83,13 +83,6 @@ class CommandSubscriber
$command->line('Settings cache cleared!');
// SQLite does not backup.
if ($this->config->get('database.default') === 'sqlite') {
$command->line('Backup skipped: SQLite is not supported.');
return;
}
$command->line('Backing up database...');
try {

View File

@@ -14,6 +14,7 @@ use Illuminate\Support\Facades\Request;
use Jenssegers\Date\Date;
if (!function_exists('set_active')) {
/**
* Set active class if request is in path.
*

View File

@@ -20,29 +20,26 @@
],
"require": {
"php": ">=5.5.9",
"ext-xml": "*",
"laravel/framework": "5.2.39",
"alt-three/badger": "^3.1",
"alt-three/bus": "^1.1",
"alt-three/emoji": "^3.1",
"alt-three/throttle": "^1.0",
"alt-three/validator": "^1.5",
"aws/aws-sdk-php": "^3.7",
"backup-manager/laravel": "dev-master#df53f9c9d8c6be5d7a2638f45d54b8fb7bc51e2b",
"backup-manager/laravel": "^1.1",
"barryvdh/laravel-cors": "^0.8",
"doctrine/dbal": "^2.5",
"fedeisas/laravel-mail-css-inliner": "^1.5",
"fideloper/proxy": "^3.1",
"graham-campbell/binput": "^3.4",
"graham-campbell/core": "^5.1",
"graham-campbell/exceptions": "^9.4",
"graham-campbell/exceptions": "^8.6",
"graham-campbell/markdown": "^6.1",
"guzzlehttp/guzzle": "6.3.3",
"guzzlehttp/psr7": "1.4.2",
"guzzlehttp/guzzle": "^6.2.1",
"jenssegers/date": "^3.2",
"laravel/framework": "5.2.39",
"mccool/laravel-auto-presenter": "^4.3",
"pragmarx/google2fa": "^0.7.1",
"predis/predis": "^1.1",
"rcrowe/twigbridge": "^0.9.2",
"roumen/feed": "^2.10.4"
},
@@ -51,7 +48,7 @@
"filp/whoops": "^2.1",
"fzaninotto/faker": "^1.6",
"graham-campbell/testbench-core": "^1.1",
"mockery/mockery": "0.9.9",
"mockery/mockery": "0.9.5",
"phpunit/phpunit": "4.8.21",
"symfony/css-selector": "^3.0",
"symfony/dom-crawler": "^3.0"
@@ -101,7 +98,7 @@
},
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
"dev-master": "2.5-dev"
}
},
"minimum-stability": "dev",

1120
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -234,8 +234,8 @@ return [
'Validator' => 'Illuminate\Support\Facades\Validator',
'View' => 'Illuminate\Support\Facades\View',
'Binput' => 'GrahamCampbell\Binput\Facades\Binput',
'Str' => 'Illuminate\Support\Str',
'Binput' => 'GrahamCampbell\Binput\Facades\Binput',
'Str' => 'Illuminate\Support\Str',
],

View File

@@ -76,25 +76,25 @@ return [
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', null),
'database' => env('DB_DATABASE', null),
'username' => env('DB_USERNAME', null),
'password' => env('DB_PASSWORD', null),
'port' => env('DB_PORT', '5432'),
'charset' => 'utf8',
'prefix' => env('DB_PREFIX', null),
'schema' => env('DB_SCHEMA', 'public'),
'driver' => 'pgsql',
'host' => env('DB_HOST', null),
'database' => env('DB_DATABASE', null),
'username' => env('DB_USERNAME', null),
'password' => env('DB_PASSWORD', null),
'port' => env('DB_PORT', '5432'),
'charset' => 'utf8',
'prefix' => env('DB_PREFIX', null),
'schema' => env('DB_SCHEMA', 'public'),
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', null),
'database' => env('DB_DATABASE', null),
'username' => env('DB_USERNAME', null),
'password' => env('DB_PASSWORD', null),
'port' => env('DB_PORT', null),
'prefix' => env('DB_PREFIX', null),
'driver' => 'sqlsrv',
'host' => env('DB_HOST', null),
'database' => env('DB_DATABASE', null),
'username' => env('DB_USERNAME', null),
'password' => env('DB_PASSWORD', null),
'port' => env('DB_PORT', null),
'prefix' => env('DB_PREFIX', null),
],
],

View File

@@ -11,35 +11,35 @@
return [
// Enabled langs
'af' => [
'af' => [
'name' => 'Afrikaans',
'subset' => 'latin',
],
'ar' => [
'ar' => [
'name' => 'Arabic',
'subset' => 'latin',
],
'ca' => [
'ca' => [
'name' => 'Catalan',
'subset' => 'latin',
],
'cs' => [
'cs' => [
'name' => 'Czech',
'subset' => 'latin,latin-ext',
],
'da' => [
'da' => [
'name' => 'Danish',
'subset' => 'latin,latin-ext',
],
'de' => [
'de' => [
'name' => 'Deutsch',
'subset' => 'latin,latin-ext',
],
'el' => [
'el' => [
'name' => 'Greek',
'subset' => 'greek,greek-ext',
],
'en' => [
'en' => [
'name' => 'English',
'subset' => 'latin',
],
@@ -47,55 +47,55 @@ return [
'name' => 'CrowdIn - InContext Localization',
'subset' => 'latin',
],
'es' => [
'es' => [
'name' => 'Español',
'subset' => 'latin,latin-ext',
],
'fa' => [
'fa' => [
'name' => 'Persian',
'subset' => 'latin',
],
'fi' => [
'fi' => [
'name' => 'Finnish',
'subset' => 'latin,latin-ext',
],
'fr' => [
'fr' => [
'name' => 'Français',
'subset' => 'latin,latin-ext',
],
'he' => [
'he' => [
'name' => 'Hebrew',
'subset' => 'latin',
],
'hu' => [
'hu' => [
'name' => 'Hungarian',
'subset' => 'latin,latin-ext',
],
'id' => [
'id' => [
'name' => 'Indonesian',
'subset' => 'latin',
],
'it' => [
'it' => [
'name' => 'Italiano',
'subset' => 'latin,latin-ext',
],
'ja' => [
'ja' => [
'name' => 'Japanese',
'subset' => 'latin',
],
'ko' => [
'ko' => [
'name' => '한글',
'subset' => 'latin',
],
'nl' => [
'nl' => [
'name' => 'Nederlands',
'subset' => 'latin,latin-ext',
],
'no' => [
'no' => [
'name' => 'Norwegian',
'subset' => 'latin,latin-ext',
],
'pl' => [
'pl' => [
'name' => 'Polski',
'subset' => 'latin,latin-ext',
],
@@ -107,19 +107,19 @@ return [
'name' => 'Portuguese, Portugal',
'subset' => 'latin,latin-ext',
],
'ro' => [
'ro' => [
'name' => 'Romanian',
'subset' => 'latin,latin-ext',
],
'ru' => [
'ru' => [
'name' => 'Русский',
'subset' => 'latin,cyrillic',
],
'sq' => [
'sq' => [
'name' => 'Albanian',
'subset' => 'latin,latin-ext',
],
'sr' => [
'sr' => [
'name' => 'Sebrian (Cyrillic)',
'subset' => 'latin,cyrillic,cyrillic-ext',
],
@@ -127,15 +127,15 @@ return [
'name' => 'Swedish',
'subset' => 'latin,latin-ext',
],
'tr' => [
'tr' => [
'name' => 'Turkish',
'subset' => 'latin,latin-ext',
],
'uk' => [
'uk' => [
'name' => 'Ukranian',
'subset' => 'latin,cyrillic-ext',
],
'vi' => [
'vi' => [
'name' => 'Vietnamese',
'subset' => 'latin,vietnamese',
],

View File

@@ -56,4 +56,36 @@ return [
'show_support' => true,
/*
|--------------------------------------------------------------------------
| Enable External Dependencies
|--------------------------------------------------------------------------
|
| Whether to disable third-party dependencies.
|
*/
'enable_external_dependencies' => true,
/*
|--------------------------------------------------------------------------
| Show the timezone
|--------------------------------------------------------------------------
|
| Whether to show the status page timezone in the footer.
|
*/
'show_timezone' => false,
/*
|--------------------------------------------------------------------------
| Skip subscriber verifications
|--------------------------------------------------------------------------
|
| Whether to allow skipping of subscriber verifications.
|
*/
'skip_subscriber_verification' => false,
];

View File

@@ -1,10 +0,0 @@
files:
-
source: '/resources/lang/en/*.php'
translation: '/resources/lang/%locale%/%original_file_name%'
languages_mapping:
locale:
'en-ES': 'es'
'fa-IR': 'fa'
'ko-KR': 'kr'
'de-DE': 'de'

View File

@@ -1,8 +1,5 @@
var elixir = require('laravel-elixir');
elixir.config.production = true;
elixir.config.sourcemaps = false;
elixir(function (mix) {
mix
.sass('app.scss', 'public/dist/css/app.css')

View File

@@ -27,6 +27,7 @@
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_DEBUG" value="true"/>
<env name="APP_URL" value="http://localhost"/>
<env name="APP_KEY" value="GCvcgDKMRIN498g52zfVEd9CxDs6PR7q"/>
<env name="DB_DRIVER" value="sqlite"/>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -277,6 +277,24 @@ $(function() {
$this.next('.group-items').toggleClass('hide');
});
$('.select-group').on('click', function () {
var $parentGroup = $(this).closest('ul.list-group');
$parentGroup.find('input[type=checkbox]').prop('checked', true);
$parentGroup.find('.group-items').removeClass('hide')
$parentGroup.find('.group-toggle').addClass('ion-ios-minus-outline').removeClass('ion-ios-plus-outline');
event.stopPropagation();
return false;
});
$('.deselect-group').on('click', function () {
var $parentGroup = $(this).closest('ul.list-group');
$parentGroup.find('input[type=checkbox]').prop('checked', false);
$parentGroup.find('.group-items').addClass('hide');
$parentGroup.find('.group-toggle').removeClass('ion-ios-minus-outline').addClass('ion-ios-plus-outline');
event.stopPropagation();
return false;
});
// Setup wizard
$('.wizard-next').on('click', function () {
var $form = $('#setup-form'),

View File

@@ -15,7 +15,7 @@ $tooltip-bg: #333 !default;
$tooltip-opacity: .9 !default;
$base-background-color: #f1f1f1;
$base-font-family: "Open Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
$base-font-family: -apple-system, BlinkMacSystemFont, "Open Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
$base-font-weight: 400;
$base-letter-spacing: 0.08em;
$base-font-size: 15px;

View File

@@ -1,144 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Components
'components' => [
'last_updated' => 'Last updated :timestamp',
'status' => [
1 => 'Operasioneel',
2 => 'Prestasieprobleme',
3 => 'Gedeeltelike Onderbreking',
4 => 'Groot Onderbreking',
],
'group' => [
'other' => 'Other Components',
],
],
// Incidents
'incidents' => [
'none' => 'No incidents reported',
'past' => 'Past Incidents',
'previous_week' => 'Vorige Week',
'next_week' => 'Volgende Week',
'scheduled' => 'Scheduled Maintenance',
'scheduled_at' => ', scheduled :timestamp',
'status' => [
0 => 'Geskeduleerd', // TODO: Hopefully remove this.
1 => 'Investigating',
2 => 'Identified',
3 => 'Hou Dop',
4 => 'Opgelos',
],
],
// Service Status
'service' => [
'good' => '[0,1] System operational|[2,Inf] All systems are operational',
'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues',
'major' => '[0,1] The service experiencing a major outage|[2,Inf] Some systems are experiencing a major outage',
],
'api' => [
'regenerate' => 'Regenerate API Key',
'revoke' => 'Revoke API Key',
],
// Metrics
'metrics' => [
'filter' => [
'last_hour' => 'Last Hour',
'hourly' => 'Afgelope 12 Uur',
'weekly' => 'Weekliks',
'monthly' => 'Maandeliks',
],
],
// Subscriber
'subscriber' => [
'subscribe' => 'Subscribe to get the most recent updates',
'button' => 'Teken aan',
'manage' => [
'no_subscriptions' => 'You\'re currently subscribed to all updates.',
'my_subscriptions' => 'You\'re currently subscribed to the following updates.',
],
'email' => [
'subscribe' => 'Subscribe to email updates.',
'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.',
'verified' => 'Your email subscription has been confirmed. Thank you!',
'manage' => 'Bestuur Subskripsies',
'unsubscribe' => 'Unsubscribe from email updates.',
'unsubscribed' => 'Your email subscription has been cancelled.',
'failure' => 'Something went wrong with the subscription.',
'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
],
'component' => [
'subject' => 'Component Status Update',
'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name',
'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>',
'tooltip-title' => 'Subscribe to notifications for :component_name.',
],
],
],
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],
'signup' => [
'title' => 'Teken Aan',
'username' => 'Username',
'email' => 'EPos',
'password' => 'Wagwoord',
'success' => 'U rekening is geskep.',
'failure' => 'Something went wrong with the signup.',
],
'system' => [
'update' => 'There is a newer version of Cachet available. You can learn how to update <a href="https://docs.cachethq.io/docs/updating-cachet">here</a>!',
],
// Modal
'modal' => [
'close' => 'Maak toe',
'subscribe' => [
'title' => 'Subscribe to component updates',
'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.',
'button' => 'Teken aan',
],
],
// Other
'home' => 'Tuiste',
'description' => 'Stay up to date with the latest service updates from :app.',
'powered_by' => 'Powered by <a href="https://cachethq.io" class="links">Cachet</a>.',
'about_this_site' => 'Aangaande Hierdie Webwerf',
'rss-feed' => 'RSS',
'atom-feed' => 'Atom',
'feed' => 'Status Feed',
];

View File

@@ -1,273 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'dashboard' => 'Dashboard',
// Incidents
'incidents' => [
'title' => 'Incidents &amp; Schedule',
'incidents' => 'Incidents',
'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.',
'incident-create-template' => 'Create Template',
'incident-templates' => 'Incident Templates',
'add' => [
'title' => 'Report an incident',
'success' => 'Incident added.',
'failure' => 'There was an error adding the incident, please try again.',
],
'edit' => [
'title' => 'Edit an incident',
'success' => 'Incident updated.',
'failure' => 'There was an error editing the incident, please try again.',
],
'delete' => [
'success' => 'The incident has been deleted and will not show on your status page.',
'failure' => 'The incident could not be deleted, please try again.',
],
// Incident templates
'templates' => [
'title' => 'Incident Templates',
'add' => [
'title' => 'Create an incident template',
'message' => 'You should add an incident template.',
'success' => 'Your new incident template has been created.',
'failure' => 'Something went wrong with the incident template.',
],
'edit' => [
'title' => 'Edit Template',
'success' => 'The incident template has been updated.',
'failure' => 'Something went wrong updating the incident template',
],
'delete' => [
'success' => 'The incident template has been deleted.',
'failure' => 'The incident template could not be deleted, please try again.',
],
],
],
// Incident Maintenance
'schedule' => [
'schedule' => 'Scheduled Maintenance',
'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported <strong>:count</strong> schedules.',
'scheduled_at' => 'Scheduled at :timestamp',
'add' => [
'title' => 'Add Scheduled Maintenance',
'success' => 'Schedule added.',
'failure' => 'Something went wrong adding the schedule, please try again.',
],
'edit' => [
'title' => 'Edit Scheduled Maintenance',
'success' => 'Schedule has been updated!',
'failure' => 'Something went wrong editing the schedule, please try again.',
],
'delete' => [
'success' => 'The scheduled maintenance has been deleted and will not show on your status page.',
'failure' => 'The scheduled maintenance could not be deleted, please try again.',
],
],
// Components
'components' => [
'components' => 'Components',
'component_statuses' => 'Component Statuses',
'listed_group' => 'Grouped under :name',
'add' => [
'title' => 'Add a component',
'message' => 'You should add a component.',
'success' => 'Component created.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component',
'success' => 'Component updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'The component has been deleted!',
'failure' => 'The component could not be deleted, please try again.',
],
// Component groups
'groups' => [
'groups' => 'Component group|Component groups',
'no_components' => 'You should add a component group.',
'add' => [
'title' => 'Add a component group',
'success' => 'Component group added.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component group',
'success' => 'Component group updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'Component group has been deleted!',
'failure' => 'The component group could not be deleted, please try again.',
],
],
],
// Metrics
'metrics' => [
'metrics' => 'Metrics',
'add' => [
'title' => 'Create a metric',
'message' => 'You should add a metric.',
'success' => 'Metric created.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'edit' => [
'title' => 'Edit a metric',
'success' => 'Metric updated.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'delete' => [
'success' => 'The metric has been deleted and will no longer display on your status page.',
'failure' => 'The metric could not be deleted, please try again.',
],
],
// Subscribers
'subscribers' => [
'subscribers' => 'Subscribers',
'description' => 'Subscribers will receive email updates when incidents are created or components are updated.',
'verified' => 'Verified',
'not_verified' => 'Not verified',
'subscriber' => ':email, subscribed :date',
'no_subscriptions' => 'Subscribed to all updates',
'add' => [
'title' => 'Add a new subscriber',
'success' => 'Subscriber has been added!',
'failure' => 'Something went wrong adding the subscriber, please try again.',
'help' => 'Enter each subscriber on a new line.',
],
'edit' => [
'title' => 'Update subscriber',
'success' => 'Subscriber has been updated!',
'failure' => 'Something went wrong editing the subscriber, please try again.',
],
],
// Team
'team' => [
'team' => 'Span',
'member' => 'Lid',
'profile' => 'Profiel',
'description' => 'Team Members will be able to add, modify &amp; edit components and incidents.',
'add' => [
'title' => 'Add a new team member',
'success' => 'Spanlid bygevoeg.',
'failure' => 'The team member could not be added, please try again.',
],
'edit' => [
'title' => 'Update profile',
'success' => 'Profile updated.',
'failure' => 'Something went wrong updating the profile, please try again.',
],
'delete' => [
'success' => 'Team member has been deleted and will no longer have access to the dashboard!',
'failure' => 'The team member could not be added, please try again.',
],
'invite' => [
'title' => 'Invite a new team member',
'success' => 'An invite has been sent',
'failure' => 'The invite could not be sent, please try again.',
],
],
// Settings
'settings' => [
'settings' => 'Instellings',
'app-setup' => [
'app-setup' => 'Application Setup',
'images-only' => 'Only images may be uploaded.',
'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size',
],
'analytics' => [
'analytics' => 'Analytics',
],
'localization' => [
'localization' => 'Localization',
],
'customization' => [
'customization' => 'Customization',
'header' => 'Custom Header HTML',
'footer' => 'Custom Footer HTML',
],
'security' => [
'security' => 'Security',
'two-factor' => 'Users without two-factor authentication',
],
'stylesheet' => [
'stylesheet' => 'Stylesheet',
],
'theme' => [
'theme' => 'Tema',
],
'edit' => [
'success' => 'Settings saved.',
'failure' => 'Settings could not be saved.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
// Login
'login' => [
'login' => 'Teken In',
'logged_in' => 'You\'re logged in.',
'welcome' => 'Welcome Back!',
'two-factor' => 'Please enter your token.',
],
// Sidebar footer
'help' => 'Help',
'status_page' => 'Status Page',
'logout' => 'Teken Uit',
// Notifications
'notifications' => [
'notifications' => 'Notifications',
'awesome' => 'Awesome.',
'whoops' => 'Whoops.',
],
// Widgets
'widgets' => [
'news' => 'Latest News',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal
'welcome' => [
'welcome' => 'Welcome to your new Status page!',
'message' => 'Your status page is almost ready! You might want to configure these extra settings',
'close' => 'Take me straight to my dashboard',
'steps' => [
'component' => 'Create components',
'incident' => 'Create incidents',
'customize' => 'Customize',
'team' => 'Voeg gebruikers by',
'api' => 'Generate API token',
'two-factor' => 'Two Factor Authentication',
],
],
];

View File

@@ -1,192 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Setup form fields
'setup' => [
'email' => 'EPos',
'username' => 'Gebruikersnaam',
'password' => 'Wagwoord',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Kies taal',
'enable_google2fa' => 'Enable Google Two Factor Authentication',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From Address',
'mail_username' => 'Mail Username',
'mail_password' => 'Mail Password',
],
// Login form fields
'login' => [
'login' => 'Username or Email',
'email' => 'EPos',
'password' => 'Wagwoord',
'2fauth' => 'Authentication Code',
'invalid' => 'Ongeldige gebruikernaam of wagwoord',
'invalid-token' => 'Invalid token',
'cookies' => 'You must enable cookies to login.',
'rate-limit' => 'Rate limit exceeded.',
],
// Incidents form fields
'incidents' => [
'name' => 'Name',
'status' => 'Status',
'component' => 'Komponente',
'message' => 'Boodskap',
'message-help' => 'You may also use Markdown.',
'scheduled_at' => 'When to schedule the maintenance for?',
'incident_time' => 'When did this incident occur?',
'notify_subscribers' => 'Notify subscribers?',
'visibility' => 'Incident Visibility',
'public' => 'Viewable by public',
'logged_in_only' => 'Only visible to logged in users',
'templates' => [
'name' => 'Name',
'template' => 'Templaat',
'twig' => 'Incident Templates can make use of the <a href="http://twig.sensiolabs.org/" target="_blank">Twig</a> templating language.',
],
],
// Components form fields
'components' => [
'name' => 'Name',
'status' => 'Status',
'group' => 'Group',
'description' => 'Beskrywing',
'link' => 'Link',
'tags' => 'Tags',
'tags-help' => 'Comma separated.',
'enabled' => 'Component enabled?',
'groups' => [
'name' => 'Name',
'collapsing' => 'Choose visibility of the group',
'visible' => 'Always expanded',
'collapsed' => 'Collapse the group by default',
'collapsed_incident' => 'Collapse the group, but expand if there are issues',
],
],
// Metric form fields
'metrics' => [
'name' => 'Name',
'suffix' => 'Suffix',
'description' => 'Beskrywing',
'description-help' => 'You may also use Markdown.',
'display-chart' => 'Display chart on status page?',
'default-value' => 'Default value',
'calc_type' => 'Calculation of metrics',
'type_sum' => 'Sum',
'type_avg' => 'Average',
'places' => 'Decimal places',
'default_view' => 'Default view',
'threshold' => 'How many minutes of threshold between metric points?',
'points' => [
'value' => 'Value',
],
],
// Settings
'settings' => [
/// Application setup
'app-setup' => [
'site-name' => 'Site Name',
'site-url' => 'Site URL',
'display-graphs' => 'Display graphs on status page?',
'about-this-page' => 'About this page',
'days-of-incidents' => 'How many days of incidents to show?',
'banner' => 'Banner Image',
'banner-help' => "It's recommended that you upload files no bigger than 930px wide .",
'subscribers' => 'Allow people to signup to email notifications?',
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
],
'analytics' => [
'analytics_google' => 'Google Analytics code',
'analytics_gosquared' => 'GoSquared Analytics code',
'analytics_piwik_url' => 'URL of your Piwik instance (without http(s)://)',
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',
'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.',
],
'stylesheet' => [
'custom-css' => 'Custom Stylesheet',
],
'theme' => [
'background-color' => 'Background Color',
'background-fills' => 'Background fills (components, incidents, footer)',
'banner-background-color' => 'Banner background color',
'banner-padding' => 'Banner padding',
'fullwidth-banner' => 'Enable fullwidth banner?',
'text-color' => 'Text Color',
'dashboard-login' => 'Show dashboard button in the footer?',
'reds' => 'Red (used for errors)',
'blues' => 'Blue (used for information)',
'greens' => 'Green (used for success)',
'yellows' => 'Yellow (used for alerts)',
'oranges' => 'Orange (used for notices)',
'metrics' => 'Metrics fill',
'links' => 'Links',
],
],
'user' => [
'username' => 'Username',
'email' => 'EPos',
'password' => 'Wagwoord',
'api-token' => 'API Token',
'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.',
'gravatar' => 'Change your profile picture at Gravatar.',
'user_level' => 'User Level',
'levels' => [
'admin' => 'Admin',
'user' => 'User',
],
'2fa' => [
'help' => 'Enabling two factor authentication increases security of your account. You will need to download <a href="https://support.google.com/accounts/answer/1066447?hl=en">Google Authenticator</a> or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.',
],
'team' => [
'description' => 'Invite your team members by entering their email addresses here.',
'email' => 'Email #:id',
],
],
// Buttons
'add' => 'Add',
'save' => 'Save',
'update' => 'Update',
'create' => 'Create',
'edit' => 'Edit',
'delete' => 'Delete',
'submit' => 'Submit',
'cancel' => 'Cancel',
'remove' => 'Remove',
'invite' => 'Invite',
'signup' => 'Teken Aan',
// Other
'optional' => '* Optional',
];

View File

@@ -1,28 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Vorige',
'next' => 'Volgende &raquo;',
];

View File

@@ -1,23 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'setup' => 'Setup',
'title' => 'Setup Cachet',
'service_details' => 'Service Details',
'env_setup' => 'Environment Setup',
'status_page_setup' => 'Status Page Setup',
'show_support' => 'Show support for Cachet?',
'admin_account' => 'Administrator Account',
'complete_setup' => 'Complete Setup',
'completed' => 'Cachet has been configured successfully!',
'finish_setup' => 'Go to dashboard',
];

View File

@@ -1,122 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be a date before :date.',
'file' => 'The :attribute must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max kilobytes.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute must have between :min and :max items.',
'confirmed' => 'The :attribute field must be true or false.',
'date' => 'The :attribute confirmation does not match.',
'date_format' => 'The :attribute is not a valid date.',
'different' => 'The :attribute does not match the format :format.',
'digits' => 'The :attribute and :other must be different.',
'digits_between' => 'The :attribute must be :digits digits.',
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'filled' => 'The :attribute format is invalid.',
'image' => 'The :attribute must be an image.',
'in' => 'The :attribute must be an image.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The selected :attribute is invalid.',
'ip' => 'The :attribute must be an integer.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute must be a valid IP address.',
'file' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max kilobytes.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute may not have more than :max items.',
'min' => [
'numeric' => 'The :attribute must be a file of type: :values.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min kilobytes.',
'array' => 'The :attribute must be at least :min characters.',
],
'not_in' => 'The :attribute must have at least :min items.',
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'required' => 'The :attribute format is invalid.',
'required_if' => 'The :attribute field is required.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is present.',
'required_without_all' => 'The :attribute field is required when :values is not present.',
'same' => 'The :attribute field is required when none of :values are present.',
'size' => [
'numeric' => 'The :attribute and :other must match.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must be :size characters.',
],
'string' => 'The :attribute must contain :size items.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -103,8 +103,8 @@ return [
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],

View File

@@ -224,7 +224,7 @@ return [
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
@@ -251,6 +251,8 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
],

View File

@@ -118,10 +118,10 @@ return [
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',

View File

@@ -1,144 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Components
'components' => [
'last_updated' => 'Last updated :timestamp',
'status' => [
1 => 'Operational',
2 => 'Performance Issues',
3 => 'Partial Outage',
4 => 'Major Outage',
],
'group' => [
'other' => 'Other Components',
],
],
// Incidents
'incidents' => [
'none' => 'No incidents reported',
'past' => 'Past Incidents',
'previous_week' => 'Previous Week',
'next_week' => 'Next Week',
'scheduled' => 'Scheduled Maintenance',
'scheduled_at' => ', scheduled :timestamp',
'status' => [
0 => 'Scheduled', // TODO: Hopefully remove this.
1 => 'Investigating',
2 => 'Identified',
3 => 'Watching',
4 => 'Fixed',
],
],
// Service Status
'service' => [
'good' => '[0,1] System operational|[2,Inf] All systems are operational',
'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues',
'major' => '[0,1] The service experiencing a major outage|[2,Inf] Some systems are experiencing a major outage',
],
'api' => [
'regenerate' => 'Regenerate API Key',
'revoke' => 'Revoke API Key',
],
// Metrics
'metrics' => [
'filter' => [
'last_hour' => 'Last Hour',
'hourly' => 'Last 12 Hours',
'weekly' => 'Week',
'monthly' => 'Month',
],
],
// Subscriber
'subscriber' => [
'subscribe' => 'Subscribe to get the most recent updates',
'button' => 'Subscribe',
'manage' => [
'no_subscriptions' => 'You\'re currently subscribed to all updates.',
'my_subscriptions' => 'You\'re currently subscribed to the following updates.',
],
'email' => [
'subscribe' => 'Subscribe to email updates.',
'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.',
'verified' => 'Your email subscription has been confirmed. Thank you!',
'manage' => 'Manage your subscription',
'unsubscribe' => 'Unsubscribe from email updates.',
'unsubscribed' => 'Your email subscription has been cancelled.',
'failure' => 'Something went wrong with the subscription.',
'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
],
'component' => [
'subject' => 'Component Status Update',
'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name',
'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>',
'tooltip-title' => 'Subscribe to notifications for :component_name.',
],
],
],
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],
'signup' => [
'title' => 'Sign Up',
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'success' => 'Your account has been created.',
'failure' => 'Something went wrong with the signup.',
],
'system' => [
'update' => 'There is a newer version of Cachet available. You can learn how to update <a href="https://docs.cachethq.io/docs/updating-cachet">here</a>!',
],
// Modal
'modal' => [
'close' => 'Close',
'subscribe' => [
'title' => 'Subscribe to component updates',
'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.',
'button' => 'Subscribe',
],
],
// Other
'home' => 'Home',
'description' => 'Stay up to date with the latest service updates from :app.',
'powered_by' => 'Powered by <a href="https://cachethq.io" class="links">Cachet</a>.',
'about_this_site' => 'About This Site',
'rss-feed' => 'RSS',
'atom-feed' => 'Atom',
'feed' => 'Status Feed',
];

View File

@@ -1,273 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'dashboard' => 'Dashboard',
// Incidents
'incidents' => [
'title' => 'Incidents &amp; Schedule',
'incidents' => 'Incidents',
'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.',
'incident-create-template' => 'Create Template',
'incident-templates' => 'Incident Templates',
'add' => [
'title' => 'Report an incident',
'success' => 'Incident added.',
'failure' => 'There was an error adding the incident, please try again.',
],
'edit' => [
'title' => 'Edit an incident',
'success' => 'Incident updated.',
'failure' => 'There was an error editing the incident, please try again.',
],
'delete' => [
'success' => 'The incident has been deleted and will not show on your status page.',
'failure' => 'The incident could not be deleted, please try again.',
],
// Incident templates
'templates' => [
'title' => 'Incident Templates',
'add' => [
'title' => 'Create an incident template',
'message' => 'You should add an incident template.',
'success' => 'Your new incident template has been created.',
'failure' => 'Something went wrong with the incident template.',
],
'edit' => [
'title' => 'Edit Template',
'success' => 'The incident template has been updated.',
'failure' => 'Something went wrong updating the incident template',
],
'delete' => [
'success' => 'The incident template has been deleted.',
'failure' => 'The incident template could not be deleted, please try again.',
],
],
],
// Incident Maintenance
'schedule' => [
'schedule' => 'Scheduled Maintenance',
'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported <strong>:count</strong> schedules.',
'scheduled_at' => 'Scheduled at :timestamp',
'add' => [
'title' => 'Add Scheduled Maintenance',
'success' => 'Schedule added.',
'failure' => 'Something went wrong adding the schedule, please try again.',
],
'edit' => [
'title' => 'Edit Scheduled Maintenance',
'success' => 'Schedule has been updated!',
'failure' => 'Something went wrong editing the schedule, please try again.',
],
'delete' => [
'success' => 'The scheduled maintenance has been deleted and will not show on your status page.',
'failure' => 'The scheduled maintenance could not be deleted, please try again.',
],
],
// Components
'components' => [
'components' => 'Components',
'component_statuses' => 'Component Statuses',
'listed_group' => 'Grouped under :name',
'add' => [
'title' => 'Add a component',
'message' => 'You should add a component.',
'success' => 'Component created.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component',
'success' => 'Component updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'The component has been deleted!',
'failure' => 'The component could not be deleted, please try again.',
],
// Component groups
'groups' => [
'groups' => 'Component group|Component groups',
'no_components' => 'You should add a component group.',
'add' => [
'title' => 'Add a component group',
'success' => 'Component group added.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component group',
'success' => 'Component group updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'Component group has been deleted!',
'failure' => 'The component group could not be deleted, please try again.',
],
],
],
// Metrics
'metrics' => [
'metrics' => 'Metrics',
'add' => [
'title' => 'Create a metric',
'message' => 'You should add a metric.',
'success' => 'Metric created.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'edit' => [
'title' => 'Edit a metric',
'success' => 'Metric updated.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'delete' => [
'success' => 'The metric has been deleted and will no longer display on your status page.',
'failure' => 'The metric could not be deleted, please try again.',
],
],
// Subscribers
'subscribers' => [
'subscribers' => 'Subscribers',
'description' => 'Subscribers will receive email updates when incidents are created or components are updated.',
'verified' => 'Verified',
'not_verified' => 'Not verified',
'subscriber' => ':email, subscribed :date',
'no_subscriptions' => 'Subscribed to all updates',
'add' => [
'title' => 'Add a new subscriber',
'success' => 'Subscriber has been added!',
'failure' => 'Something went wrong adding the subscriber, please try again.',
'help' => 'Enter each subscriber on a new line.',
],
'edit' => [
'title' => 'Update subscriber',
'success' => 'Subscriber has been updated!',
'failure' => 'Something went wrong editing the subscriber, please try again.',
],
],
// Team
'team' => [
'team' => 'Team',
'member' => 'Member',
'profile' => 'Profile',
'description' => 'Team Members will be able to add, modify &amp; edit components and incidents.',
'add' => [
'title' => 'Add a new team member',
'success' => 'Team member added.',
'failure' => 'The team member could not be added, please try again.',
],
'edit' => [
'title' => 'Update profile',
'success' => 'Profile updated.',
'failure' => 'Something went wrong updating the profile, please try again.',
],
'delete' => [
'success' => 'Team member has been deleted and will no longer have access to the dashboard!',
'failure' => 'The team member could not be added, please try again.',
],
'invite' => [
'title' => 'Invite a new team member',
'success' => 'An invite has been sent',
'failure' => 'The invite could not be sent, please try again.',
],
],
// Settings
'settings' => [
'settings' => 'Settings',
'app-setup' => [
'app-setup' => 'Application Setup',
'images-only' => 'Only images may be uploaded.',
'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size',
],
'analytics' => [
'analytics' => 'Analytics',
],
'localization' => [
'localization' => 'Localization',
],
'customization' => [
'customization' => 'Customization',
'header' => 'Custom Header HTML',
'footer' => 'Custom Footer HTML',
],
'security' => [
'security' => 'Security',
'two-factor' => 'Users without two-factor authentication',
],
'stylesheet' => [
'stylesheet' => 'Stylesheet',
],
'theme' => [
'theme' => 'Theme',
],
'edit' => [
'success' => 'Settings saved.',
'failure' => 'Settings could not be saved.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
// Login
'login' => [
'login' => 'Login',
'logged_in' => 'You\'re logged in.',
'welcome' => 'Welcome Back!',
'two-factor' => 'Please enter your token.',
],
// Sidebar footer
'help' => 'Help',
'status_page' => 'Status Page',
'logout' => 'Logout',
// Notifications
'notifications' => [
'notifications' => 'Notifications',
'awesome' => 'Awesome.',
'whoops' => 'Whoops.',
],
// Widgets
'widgets' => [
'news' => 'Latest News',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal
'welcome' => [
'welcome' => 'Welcome to your new Status page!',
'message' => 'Your status page is almost ready! You might want to configure these extra settings',
'close' => 'Take me straight to my dashboard',
'steps' => [
'component' => 'Create components',
'incident' => 'Create incidents',
'customize' => 'Customize',
'team' => 'Add users',
'api' => 'Generate API token',
'two-factor' => 'Two Factor Authentication',
],
],
];

View File

@@ -1,192 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Username',
'password' => 'Password',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Select your language',
'enable_google2fa' => 'Enable Google Two Factor Authentication',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From Address',
'mail_username' => 'Mail Username',
'mail_password' => 'Mail Password',
],
// Login form fields
'login' => [
'login' => 'Username or Email',
'email' => 'Email',
'password' => 'Password',
'2fauth' => 'Authentication Code',
'invalid' => 'Invalid username or password',
'invalid-token' => 'Invalid token',
'cookies' => 'You must enable cookies to login.',
'rate-limit' => 'Rate limit exceeded.',
],
// Incidents form fields
'incidents' => [
'name' => 'Name',
'status' => 'Status',
'component' => 'Component',
'message' => 'Message',
'message-help' => 'You may also use Markdown.',
'scheduled_at' => 'When to schedule the maintenance for?',
'incident_time' => 'When did this incident occur?',
'notify_subscribers' => 'Notify subscribers?',
'visibility' => 'Incident Visibility',
'public' => 'Viewable by public',
'logged_in_only' => 'Only visible to logged in users',
'templates' => [
'name' => 'Name',
'template' => 'Template',
'twig' => 'Incident Templates can make use of the <a href="http://twig.sensiolabs.org/" target="_blank">Twig</a> templating language.',
],
],
// Components form fields
'components' => [
'name' => 'Name',
'status' => 'Status',
'group' => 'Group',
'description' => 'Description',
'link' => 'Link',
'tags' => 'Tags',
'tags-help' => 'Comma separated.',
'enabled' => 'Component enabled?',
'groups' => [
'name' => 'Name',
'collapsing' => 'Choose visibility of the group',
'visible' => 'Always expanded',
'collapsed' => 'Collapse the group by default',
'collapsed_incident' => 'Collapse the group, but expand if there are issues',
],
],
// Metric form fields
'metrics' => [
'name' => 'Name',
'suffix' => 'Suffix',
'description' => 'Description',
'description-help' => 'You may also use Markdown.',
'display-chart' => 'Display chart on status page?',
'default-value' => 'Default value',
'calc_type' => 'Calculation of metrics',
'type_sum' => 'Sum',
'type_avg' => 'Average',
'places' => 'Decimal places',
'default_view' => 'Default view',
'threshold' => 'How many minutes of threshold between metric points?',
'points' => [
'value' => 'Value',
],
],
// Settings
'settings' => [
/// Application setup
'app-setup' => [
'site-name' => 'Site Name',
'site-url' => 'Site URL',
'display-graphs' => 'Display graphs on status page?',
'about-this-page' => 'About this page',
'days-of-incidents' => 'How many days of incidents to show?',
'banner' => 'Banner Image',
'banner-help' => "It's recommended that you upload files no bigger than 930px wide .",
'subscribers' => 'Allow people to signup to email notifications?',
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
],
'analytics' => [
'analytics_google' => 'Google Analytics code',
'analytics_gosquared' => 'GoSquared Analytics code',
'analytics_piwik_url' => 'URL of your Piwik instance (without http(s)://)',
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',
'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.',
],
'stylesheet' => [
'custom-css' => 'Custom Stylesheet',
],
'theme' => [
'background-color' => 'Background Color',
'background-fills' => 'Background fills (components, incidents, footer)',
'banner-background-color' => 'Banner background color',
'banner-padding' => 'Banner padding',
'fullwidth-banner' => 'Enable fullwidth banner?',
'text-color' => 'Text Color',
'dashboard-login' => 'Show dashboard button in the footer?',
'reds' => 'Red (used for errors)',
'blues' => 'Blue (used for information)',
'greens' => 'Green (used for success)',
'yellows' => 'Yellow (used for alerts)',
'oranges' => 'Orange (used for notices)',
'metrics' => 'Metrics fill',
'links' => 'Links',
],
],
'user' => [
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'api-token' => 'API Token',
'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.',
'gravatar' => 'Change your profile picture at Gravatar.',
'user_level' => 'User Level',
'levels' => [
'admin' => 'Admin',
'user' => 'User',
],
'2fa' => [
'help' => 'Enabling two factor authentication increases security of your account. You will need to download <a href="https://support.google.com/accounts/answer/1066447?hl=en">Google Authenticator</a> or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.',
],
'team' => [
'description' => 'Invite your team members by entering their email addresses here.',
'email' => 'Email #:id',
],
],
// Buttons
'add' => 'Add',
'save' => 'Save',
'update' => 'Update',
'create' => 'Create',
'edit' => 'Edit',
'delete' => 'Delete',
'submit' => 'Submit',
'cancel' => 'Cancel',
'remove' => 'Remove',
'invite' => 'Invite',
'signup' => 'Sign Up',
// Other
'optional' => '* Optional',
];

View File

@@ -1,28 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@@ -1,23 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'setup' => 'Setup',
'title' => 'Setup Cachet',
'service_details' => 'Service Details',
'env_setup' => 'Environment Setup',
'status_page_setup' => 'Status Page Setup',
'show_support' => 'Show support for Cachet?',
'admin_account' => 'Administrator Account',
'complete_setup' => 'Complete Setup',
'completed' => 'Cachet has been configured successfully!',
'finish_setup' => 'Go to dashboard',
];

View File

@@ -1,122 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be a date before :date.',
'file' => 'The :attribute must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max kilobytes.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute must have between :min and :max items.',
'confirmed' => 'The :attribute field must be true or false.',
'date' => 'The :attribute confirmation does not match.',
'date_format' => 'The :attribute is not a valid date.',
'different' => 'The :attribute does not match the format :format.',
'digits' => 'The :attribute and :other must be different.',
'digits_between' => 'The :attribute must be :digits digits.',
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'filled' => 'The :attribute format is invalid.',
'image' => 'The :attribute must be an image.',
'in' => 'The :attribute must be an image.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The selected :attribute is invalid.',
'ip' => 'The :attribute must be an integer.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute must be a valid IP address.',
'file' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max kilobytes.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute may not have more than :max items.',
'min' => [
'numeric' => 'The :attribute must be a file of type: :values.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min kilobytes.',
'array' => 'The :attribute must be at least :min characters.',
],
'not_in' => 'The :attribute must have at least :min items.',
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'required' => 'The :attribute format is invalid.',
'required_if' => 'The :attribute field is required.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is present.',
'required_without_all' => 'The :attribute field is required when :values is not present.',
'same' => 'The :attribute field is required when none of :values are present.',
'size' => [
'numeric' => 'The :attribute and :other must match.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must be :size characters.',
],
'string' => 'The :attribute must contain :size items.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -103,8 +103,8 @@ return [
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],

View File

@@ -224,7 +224,7 @@ return [
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
@@ -251,6 +251,8 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
],

View File

@@ -118,10 +118,10 @@ return [
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',

View File

@@ -1,144 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Components
'components' => [
'last_updated' => 'Last updated :timestamp',
'status' => [
1 => 'Operational',
2 => 'Performance Issues',
3 => 'Partial Outage',
4 => 'Major Outage',
],
'group' => [
'other' => 'Other Components',
],
],
// Incidents
'incidents' => [
'none' => 'No incidents reported',
'past' => 'Past Incidents',
'previous_week' => 'Previous Week',
'next_week' => 'Next Week',
'scheduled' => 'Scheduled Maintenance',
'scheduled_at' => ', scheduled :timestamp',
'status' => [
0 => 'Scheduled', // TODO: Hopefully remove this.
1 => 'Investigating',
2 => 'Identified',
3 => 'Watching',
4 => 'Fixed',
],
],
// Service Status
'service' => [
'good' => '[0,1] System operational|[2,Inf] All systems are operational',
'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues',
'major' => '[0,1] The service experiencing a major outage|[2,Inf] Some systems are experiencing a major outage',
],
'api' => [
'regenerate' => 'Regenerate API Key',
'revoke' => 'Revoke API Key',
],
// Metrics
'metrics' => [
'filter' => [
'last_hour' => 'Last Hour',
'hourly' => 'Last 12 Hours',
'weekly' => 'Week',
'monthly' => 'Month',
],
],
// Subscriber
'subscriber' => [
'subscribe' => 'Subscribe to get the most recent updates',
'button' => 'Subscribe',
'manage' => [
'no_subscriptions' => 'You\'re currently subscribed to all updates.',
'my_subscriptions' => 'You\'re currently subscribed to the following updates.',
],
'email' => [
'subscribe' => 'Subscribe to email updates.',
'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.',
'verified' => 'Your email subscription has been confirmed. Thank you!',
'manage' => 'Manage your subscription',
'unsubscribe' => 'Unsubscribe from email updates.',
'unsubscribed' => 'Your email subscription has been cancelled.',
'failure' => 'Something went wrong with the subscription.',
'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
],
'component' => [
'subject' => 'Component Status Update',
'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name',
'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>',
'tooltip-title' => 'Subscribe to notifications for :component_name.',
],
],
],
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],
'signup' => [
'title' => 'Sign Up',
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'success' => 'Your account has been created.',
'failure' => 'Something went wrong with the signup.',
],
'system' => [
'update' => 'There is a newer version of Cachet available. You can learn how to update <a href="https://docs.cachethq.io/docs/updating-cachet">here</a>!',
],
// Modal
'modal' => [
'close' => 'Close',
'subscribe' => [
'title' => 'Subscribe to component updates',
'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.',
'button' => 'Subscribe',
],
],
// Other
'home' => 'Home',
'description' => 'Stay up to date with the latest service updates from :app.',
'powered_by' => 'Powered by <a href="https://cachethq.io" class="links">Cachet</a>.',
'about_this_site' => 'About This Site',
'rss-feed' => 'RSS',
'atom-feed' => 'Atom',
'feed' => 'Status Feed',
];

View File

@@ -1,273 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'dashboard' => 'Dashboard',
// Incidents
'incidents' => [
'title' => 'Incidents &amp; Schedule',
'incidents' => 'Incidents',
'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.',
'incident-create-template' => 'Create Template',
'incident-templates' => 'Incident Templates',
'add' => [
'title' => 'Report an incident',
'success' => 'Incident added.',
'failure' => 'There was an error adding the incident, please try again.',
],
'edit' => [
'title' => 'Edit an incident',
'success' => 'Incident updated.',
'failure' => 'There was an error editing the incident, please try again.',
],
'delete' => [
'success' => 'The incident has been deleted and will not show on your status page.',
'failure' => 'The incident could not be deleted, please try again.',
],
// Incident templates
'templates' => [
'title' => 'Incident Templates',
'add' => [
'title' => 'Create an incident template',
'message' => 'You should add an incident template.',
'success' => 'Your new incident template has been created.',
'failure' => 'Something went wrong with the incident template.',
],
'edit' => [
'title' => 'Edit Template',
'success' => 'The incident template has been updated.',
'failure' => 'Something went wrong updating the incident template',
],
'delete' => [
'success' => 'The incident template has been deleted.',
'failure' => 'The incident template could not be deleted, please try again.',
],
],
],
// Incident Maintenance
'schedule' => [
'schedule' => 'Scheduled Maintenance',
'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported <strong>:count</strong> schedules.',
'scheduled_at' => 'Scheduled at :timestamp',
'add' => [
'title' => 'Add Scheduled Maintenance',
'success' => 'Schedule added.',
'failure' => 'Something went wrong adding the schedule, please try again.',
],
'edit' => [
'title' => 'Edit Scheduled Maintenance',
'success' => 'Schedule has been updated!',
'failure' => 'Something went wrong editing the schedule, please try again.',
],
'delete' => [
'success' => 'The scheduled maintenance has been deleted and will not show on your status page.',
'failure' => 'The scheduled maintenance could not be deleted, please try again.',
],
],
// Components
'components' => [
'components' => 'Components',
'component_statuses' => 'Component Statuses',
'listed_group' => 'Grouped under :name',
'add' => [
'title' => 'Add a component',
'message' => 'You should add a component.',
'success' => 'Component created.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component',
'success' => 'Component updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'The component has been deleted!',
'failure' => 'The component could not be deleted, please try again.',
],
// Component groups
'groups' => [
'groups' => 'Component group|Component groups',
'no_components' => 'You should add a component group.',
'add' => [
'title' => 'Add a component group',
'success' => 'Component group added.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component group',
'success' => 'Component group updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'Component group has been deleted!',
'failure' => 'The component group could not be deleted, please try again.',
],
],
],
// Metrics
'metrics' => [
'metrics' => 'Metrics',
'add' => [
'title' => 'Create a metric',
'message' => 'You should add a metric.',
'success' => 'Metric created.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'edit' => [
'title' => 'Edit a metric',
'success' => 'Metric updated.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'delete' => [
'success' => 'The metric has been deleted and will no longer display on your status page.',
'failure' => 'The metric could not be deleted, please try again.',
],
],
// Subscribers
'subscribers' => [
'subscribers' => 'Subscribers',
'description' => 'Subscribers will receive email updates when incidents are created or components are updated.',
'verified' => 'Verified',
'not_verified' => 'Not verified',
'subscriber' => ':email, subscribed :date',
'no_subscriptions' => 'Subscribed to all updates',
'add' => [
'title' => 'Add a new subscriber',
'success' => 'Subscriber has been added!',
'failure' => 'Something went wrong adding the subscriber, please try again.',
'help' => 'Enter each subscriber on a new line.',
],
'edit' => [
'title' => 'Update subscriber',
'success' => 'Subscriber has been updated!',
'failure' => 'Something went wrong editing the subscriber, please try again.',
],
],
// Team
'team' => [
'team' => 'Team',
'member' => 'Member',
'profile' => 'Profile',
'description' => 'Team Members will be able to add, modify &amp; edit components and incidents.',
'add' => [
'title' => 'Add a new team member',
'success' => 'Team member added.',
'failure' => 'The team member could not be added, please try again.',
],
'edit' => [
'title' => 'Update profile',
'success' => 'Profile updated.',
'failure' => 'Something went wrong updating the profile, please try again.',
],
'delete' => [
'success' => 'Team member has been deleted and will no longer have access to the dashboard!',
'failure' => 'The team member could not be added, please try again.',
],
'invite' => [
'title' => 'Invite a new team member',
'success' => 'An invite has been sent',
'failure' => 'The invite could not be sent, please try again.',
],
],
// Settings
'settings' => [
'settings' => 'Settings',
'app-setup' => [
'app-setup' => 'Application Setup',
'images-only' => 'Only images may be uploaded.',
'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size',
],
'analytics' => [
'analytics' => 'Analytics',
],
'localization' => [
'localization' => 'Localization',
],
'customization' => [
'customization' => 'Customization',
'header' => 'Custom Header HTML',
'footer' => 'Custom Footer HTML',
],
'security' => [
'security' => 'Security',
'two-factor' => 'Users without two-factor authentication',
],
'stylesheet' => [
'stylesheet' => 'Stylesheet',
],
'theme' => [
'theme' => 'Theme',
],
'edit' => [
'success' => 'Settings saved.',
'failure' => 'Settings could not be saved.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
// Login
'login' => [
'login' => 'Login',
'logged_in' => 'You\'re logged in.',
'welcome' => 'Welcome Back!',
'two-factor' => 'Please enter your token.',
],
// Sidebar footer
'help' => 'Help',
'status_page' => 'Status Page',
'logout' => 'Logout',
// Notifications
'notifications' => [
'notifications' => 'Notifications',
'awesome' => 'Awesome.',
'whoops' => 'Whoops.',
],
// Widgets
'widgets' => [
'news' => 'Latest News',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal
'welcome' => [
'welcome' => 'Welcome to your new Status page!',
'message' => 'Your status page is almost ready! You might want to configure these extra settings',
'close' => 'Take me straight to my dashboard',
'steps' => [
'component' => 'Create components',
'incident' => 'Create incidents',
'customize' => 'Customize',
'team' => 'Add users',
'api' => 'Generate API token',
'two-factor' => 'Two Factor Authentication',
],
],
];

View File

@@ -1,192 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Username',
'password' => 'Password',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Select your language',
'enable_google2fa' => 'Enable Google Two Factor Authentication',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From Address',
'mail_username' => 'Mail Username',
'mail_password' => 'Mail Password',
],
// Login form fields
'login' => [
'login' => 'Username or Email',
'email' => 'Email',
'password' => 'Password',
'2fauth' => 'Authentication Code',
'invalid' => 'Invalid username or password',
'invalid-token' => 'Invalid token',
'cookies' => 'Heu d\'habilitar les galetes (cookies) per poder iniciar sessió.',
'rate-limit' => 'Rate limit exceeded.',
],
// Incidents form fields
'incidents' => [
'name' => 'Name',
'status' => 'Status',
'component' => 'Component',
'message' => 'Message',
'message-help' => 'You may also use Markdown.',
'scheduled_at' => 'When to schedule the maintenance for?',
'incident_time' => 'When did this incident occur?',
'notify_subscribers' => 'Notify subscribers?',
'visibility' => 'Incident Visibility',
'public' => 'Viewable by public',
'logged_in_only' => 'Only visible to logged in users',
'templates' => [
'name' => 'Name',
'template' => 'Template',
'twig' => 'Incident Templates can make use of the <a href="http://twig.sensiolabs.org/" target="_blank">Twig</a> templating language.',
],
],
// Components form fields
'components' => [
'name' => 'Name',
'status' => 'Status',
'group' => 'Group',
'description' => 'Description',
'link' => 'Link',
'tags' => 'Tags',
'tags-help' => 'Comma separated.',
'enabled' => 'Component enabled?',
'groups' => [
'name' => 'Name',
'collapsing' => 'Choose visibility of the group',
'visible' => 'Always expanded',
'collapsed' => 'Collapse the group by default',
'collapsed_incident' => 'Collapse the group, but expand if there are issues',
],
],
// Metric form fields
'metrics' => [
'name' => 'Name',
'suffix' => 'Suffix',
'description' => 'Description',
'description-help' => 'You may also use Markdown.',
'display-chart' => 'Display chart on status page?',
'default-value' => 'Default value',
'calc_type' => 'Calculation of metrics',
'type_sum' => 'Sum',
'type_avg' => 'Average',
'places' => 'Decimal places',
'default_view' => 'Default view',
'threshold' => 'How many minutes of threshold between metric points?',
'points' => [
'value' => 'Value',
],
],
// Settings
'settings' => [
/// Application setup
'app-setup' => [
'site-name' => 'Site Name',
'site-url' => 'Site URL',
'display-graphs' => 'Display graphs on status page?',
'about-this-page' => 'About this page',
'days-of-incidents' => 'How many days of incidents to show?',
'banner' => 'Banner Image',
'banner-help' => "It's recommended that you upload files no bigger than 930px wide .",
'subscribers' => 'Allow people to signup to email notifications?',
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
],
'analytics' => [
'analytics_google' => 'Google Analytics code',
'analytics_gosquared' => 'GoSquared Analytics code',
'analytics_piwik_url' => 'URL of your Piwik instance (without http(s)://)',
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',
'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.',
],
'stylesheet' => [
'custom-css' => 'Custom Stylesheet',
],
'theme' => [
'background-color' => 'Background Color',
'background-fills' => 'Background fills (components, incidents, footer)',
'banner-background-color' => 'Banner background color',
'banner-padding' => 'Farciment (padding) del banner',
'fullwidth-banner' => 'Enable fullwidth banner?',
'text-color' => 'Text Color',
'dashboard-login' => 'Show dashboard button in the footer?',
'reds' => 'Red (used for errors)',
'blues' => 'Blue (used for information)',
'greens' => 'Green (used for success)',
'yellows' => 'Yellow (used for alerts)',
'oranges' => 'Orange (used for notices)',
'metrics' => 'Metrics fill',
'links' => 'Links',
],
],
'user' => [
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'api-token' => 'API Token',
'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.',
'gravatar' => 'Change your profile picture at Gravatar.',
'user_level' => 'User Level',
'levels' => [
'admin' => 'Admin',
'user' => 'User',
],
'2fa' => [
'help' => 'Enabling two factor authentication increases security of your account. You will need to download <a href="https://support.google.com/accounts/answer/1066447?hl=en">Google Authenticator</a> or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.',
],
'team' => [
'description' => 'Invite your team members by entering their email addresses here.',
'email' => 'Email #:id',
],
],
// Buttons
'add' => 'Add',
'save' => 'Save',
'update' => 'Update',
'create' => 'Create',
'edit' => 'Edit',
'delete' => 'Delete',
'submit' => 'Submit',
'cancel' => 'Cancel',
'remove' => 'Remove',
'invite' => 'Invite',
'signup' => 'Sign Up',
// Other
'optional' => '* Optional',
];

View File

@@ -1,28 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@@ -1,23 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'setup' => 'Setup',
'title' => 'Setup Cachet',
'service_details' => 'Service Details',
'env_setup' => 'Environment Setup',
'status_page_setup' => 'Status Page Setup',
'show_support' => 'Show support for Cachet?',
'admin_account' => 'Administrator Account',
'complete_setup' => 'Complete Setup',
'completed' => 'Cachet has been configured successfully!',
'finish_setup' => 'Go to dashboard',
];

View File

@@ -1,122 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be a date before :date.',
'file' => 'The :attribute must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max kilobytes.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute must have between :min and :max items.',
'confirmed' => 'The :attribute field must be true or false.',
'date' => 'The :attribute confirmation does not match.',
'date_format' => 'The :attribute is not a valid date.',
'different' => 'The :attribute does not match the format :format.',
'digits' => 'The :attribute and :other must be different.',
'digits_between' => 'The :attribute must be :digits digits.',
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'filled' => 'The :attribute format is invalid.',
'image' => 'The :attribute must be an image.',
'in' => 'The :attribute must be an image.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The selected :attribute is invalid.',
'ip' => 'The :attribute must be an integer.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute must be a valid IP address.',
'file' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max kilobytes.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute may not have more than :max items.',
'min' => [
'numeric' => 'The :attribute must be a file of type: :values.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min kilobytes.',
'array' => 'The :attribute must be at least :min characters.',
],
'not_in' => 'The :attribute must have at least :min items.',
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'required' => 'The :attribute format is invalid.',
'required_if' => 'The :attribute field is required.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is present.',
'required_without_all' => 'The :attribute field is required when :values is not present.',
'same' => 'The :attribute field is required when none of :values are present.',
'size' => [
'numeric' => 'The :attribute and :other must match.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must be :size characters.',
],
'string' => 'The :attribute must contain :size items.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -103,8 +103,8 @@ return [
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],

View File

@@ -224,7 +224,7 @@ return [
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
@@ -251,6 +251,8 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
],

View File

@@ -118,10 +118,10 @@ return [
'analytics_piwik_siteid' => 'Identificador de lloc del Piwik',
],
'localization' => [
'site-timezone' => 'Seleccioneu el fus horari',
'site-locale' => 'Idioma del lloc',
'date-format' => 'Format de la data',
'incident-date-format' => 'Format del fus horari dels incidents',
'site-timezone' => 'Seleccioneu el fus horari',
'site-locale' => 'Idioma del lloc',
'date-format' => 'Format de la data',
'incident-date-format' => 'Format del fus horari dels incidents',
],
'security' => [
'allowed-domains' => 'Dominis permesos',

View File

@@ -1,144 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Components
'components' => [
'last_updated' => 'Last updated :timestamp',
'status' => [
1 => 'Operational',
2 => 'Performance Issues',
3 => 'Partial Outage',
4 => 'Major Outage',
],
'group' => [
'other' => 'Other Components',
],
],
// Incidents
'incidents' => [
'none' => 'No incidents reported',
'past' => 'Past Incidents',
'previous_week' => 'Previous Week',
'next_week' => 'Next Week',
'scheduled' => 'Scheduled Maintenance',
'scheduled_at' => ', scheduled :timestamp',
'status' => [
0 => 'Scheduled', // TODO: Hopefully remove this.
1 => 'Investigating',
2 => 'Identified',
3 => 'Watching',
4 => 'Fixed',
],
],
// Service Status
'service' => [
'good' => '[0,1] System operational|[2,Inf] All systems are operational',
'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues',
'major' => '[0,1] The service experiencing a major outage|[2,Inf] Some systems are experiencing a major outage',
],
'api' => [
'regenerate' => 'Regenerate API Key',
'revoke' => 'Revoke API Key',
],
// Metrics
'metrics' => [
'filter' => [
'last_hour' => 'Last Hour',
'hourly' => 'Last 12 Hours',
'weekly' => 'Week',
'monthly' => 'Month',
],
],
// Subscriber
'subscriber' => [
'subscribe' => 'Subscribe to get the most recent updates',
'button' => 'Subscribe',
'manage' => [
'no_subscriptions' => 'Aktuálně jsi přihlášen(a) ke všem upozorněním.',
'my_subscriptions' => 'Aktuálně jsi přihlášen(a) k následujícím upozorněním.',
],
'email' => [
'subscribe' => 'Subscribe to email updates.',
'subscribed' => 'You\'ve been subscribed to email notifications, please check your email to confirm your subscription.',
'verified' => 'Your email subscription has been confirmed. Thank you!',
'manage' => 'Manage your subscription',
'unsubscribe' => 'Unsubscribe from email updates.',
'unsubscribed' => 'Your email subscription has been cancelled.',
'failure' => 'Something went wrong with the subscription.',
'already-subscribed' => 'Cannot subscribe :email because they\'re already subscribed.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
],
'component' => [
'subject' => 'Component Status Update',
'text' => 'The component :component_name has seen a status change. The component is now at :component_human_status.\nThank you, :app_name',
'html' => '<p>The component :component_name has seen a status change. The component is now at :component_human_status.</p><p>Thank you, :app_name</p>',
'tooltip-title' => 'Subscribe to notifications for :component_name.',
],
],
],
'users' => [
'email' => [
'invite' => [
'text' => "Byl(a) jsi pozván(a) do teamu :app_name, k registraci klikni na následující odkaz.\n:link\nDěkujeme, :app_name",
'html' => '<p>Byl(a) jsi pozván(a) do teamu :app_name, k registraci klikni na následující odkaz.</p><p><a href=":link">:link</a></p><p>Děkujeme, :app_name</p>',
],
],
],
'signup' => [
'title' => 'Sign Up',
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'success' => 'Your account has been created.',
'failure' => 'Something went wrong with the signup.',
],
'system' => [
'update' => 'There is a newer version of Cachet available. You can learn how to update <a href="https://docs.cachethq.io/docs/updating-cachet">here</a>!',
],
// Modal
'modal' => [
'close' => 'Close',
'subscribe' => [
'title' => 'Subscribe to component updates',
'body' => 'Enter your email address to subscribe to updates for this component. If you\'re already subscribed, you\'ll already receive emails for this component.',
'button' => 'Subscribe',
],
],
// Other
'home' => 'Home',
'description' => 'Stay up to date with the latest service updates from :app.',
'powered_by' => 'Powered by <a href="https://cachethq.io" class="links">Cachet</a>.',
'about_this_site' => 'About This Site',
'rss-feed' => 'RSS',
'atom-feed' => 'Atom',
'feed' => 'Status Feed',
];

View File

@@ -1,273 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'dashboard' => 'Dashboard',
// Incidents
'incidents' => [
'title' => 'Incidents &amp; Schedule',
'incidents' => 'Incidents',
'logged' => '{0} There are no incidents, good work.|You have logged one incident.|You have reported <strong>:count</strong> incidents.',
'incident-create-template' => 'Create Template',
'incident-templates' => 'Incident Templates',
'add' => [
'title' => 'Report an incident',
'success' => 'Incident added.',
'failure' => 'There was an error adding the incident, please try again.',
],
'edit' => [
'title' => 'Edit an incident',
'success' => 'Incident updated.',
'failure' => 'There was an error editing the incident, please try again.',
],
'delete' => [
'success' => 'The incident has been deleted and will not show on your status page.',
'failure' => 'The incident could not be deleted, please try again.',
],
// Incident templates
'templates' => [
'title' => 'Incident Templates',
'add' => [
'title' => 'Create an incident template',
'message' => 'You should add an incident template.',
'success' => 'Your new incident template has been created.',
'failure' => 'Something went wrong with the incident template.',
],
'edit' => [
'title' => 'Edit Template',
'success' => 'The incident template has been updated.',
'failure' => 'Something went wrong updating the incident template',
],
'delete' => [
'success' => 'The incident template has been deleted.',
'failure' => 'The incident template could not be deleted, please try again.',
],
],
],
// Incident Maintenance
'schedule' => [
'schedule' => 'Scheduled Maintenance',
'logged' => '{0} There are no schedules, good work.|You have logged one schedule.|You have reported <strong>:count</strong> schedules.',
'scheduled_at' => 'Scheduled at :timestamp',
'add' => [
'title' => 'Add Scheduled Maintenance',
'success' => 'Schedule added.',
'failure' => 'Something went wrong adding the schedule, please try again.',
],
'edit' => [
'title' => 'Edit Scheduled Maintenance',
'success' => 'Schedule has been updated!',
'failure' => 'Something went wrong editing the schedule, please try again.',
],
'delete' => [
'success' => 'The scheduled maintenance has been deleted and will not show on your status page.',
'failure' => 'The scheduled maintenance could not be deleted, please try again.',
],
],
// Components
'components' => [
'components' => 'Components',
'component_statuses' => 'Component Statuses',
'listed_group' => 'Grouped under :name',
'add' => [
'title' => 'Add a component',
'message' => 'You should add a component.',
'success' => 'Component created.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component',
'success' => 'Component updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'The component has been deleted!',
'failure' => 'The component could not be deleted, please try again.',
],
// Component groups
'groups' => [
'groups' => 'Component group|Component groups',
'no_components' => 'You should add a component group.',
'add' => [
'title' => 'Add a component group',
'success' => 'Component group added.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component group',
'success' => 'Component group updated.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'Component group has been deleted!',
'failure' => 'The component group could not be deleted, please try again.',
],
],
],
// Metrics
'metrics' => [
'metrics' => 'Metrics',
'add' => [
'title' => 'Create a metric',
'message' => 'You should add a metric.',
'success' => 'Metric created.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'edit' => [
'title' => 'Edit a metric',
'success' => 'Metric updated.',
'failure' => 'Something went wrong with the metric, please try again.',
],
'delete' => [
'success' => 'The metric has been deleted and will no longer display on your status page.',
'failure' => 'The metric could not be deleted, please try again.',
],
],
// Subscribers
'subscribers' => [
'subscribers' => 'Subscribers',
'description' => 'Subscribers will receive email updates when incidents are created or components are updated.',
'verified' => 'Verified',
'not_verified' => 'Not verified',
'subscriber' => ':email, subscribed :date',
'no_subscriptions' => 'Subscribed to all updates',
'add' => [
'title' => 'Add a new subscriber',
'success' => 'Subscriber has been added!',
'failure' => 'Something went wrong adding the subscriber, please try again.',
'help' => 'Enter each subscriber on a new line.',
],
'edit' => [
'title' => 'Update subscriber',
'success' => 'Subscriber has been updated!',
'failure' => 'Something went wrong editing the subscriber, please try again.',
],
],
// Team
'team' => [
'team' => 'Team',
'member' => 'Member',
'profile' => 'Profile',
'description' => 'Team Members will be able to add, modify &amp; edit components and incidents.',
'add' => [
'title' => 'Add a new team member',
'success' => 'Team member added.',
'failure' => 'The team member could not be added, please try again.',
],
'edit' => [
'title' => 'Update profile',
'success' => 'Profile updated.',
'failure' => 'Something went wrong updating the profile, please try again.',
],
'delete' => [
'success' => 'Team member has been deleted and will no longer have access to the dashboard!',
'failure' => 'The team member could not be added, please try again.',
],
'invite' => [
'title' => 'Invite a new team member',
'success' => 'An invite has been sent',
'failure' => 'The invite could not be sent, please try again.',
],
],
// Settings
'settings' => [
'settings' => 'Settings',
'app-setup' => [
'app-setup' => 'Application Setup',
'images-only' => 'Only images may be uploaded.',
'too-big' => 'The file you uploaded is too big. Upload an image smaller than :size',
],
'analytics' => [
'analytics' => 'Analytics',
],
'localization' => [
'localization' => 'Localization',
],
'customization' => [
'customization' => 'Customization',
'header' => 'Custom Header HTML',
'footer' => 'Custom Footer HTML',
],
'security' => [
'security' => 'Security',
'two-factor' => 'Users without two-factor authentication',
],
'stylesheet' => [
'stylesheet' => 'Stylesheet',
],
'theme' => [
'theme' => 'Theme',
],
'edit' => [
'success' => 'Settings saved.',
'failure' => 'Settings could not be saved.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
// Login
'login' => [
'login' => 'Login',
'logged_in' => 'You\'re logged in.',
'welcome' => 'Welcome Back!',
'two-factor' => 'Please enter your token.',
],
// Sidebar footer
'help' => 'Help',
'status_page' => 'Status Page',
'logout' => 'Logout',
// Notifications
'notifications' => [
'notifications' => 'Notifications',
'awesome' => 'Awesome.',
'whoops' => 'Whoops.',
],
// Widgets
'widgets' => [
'news' => 'Latest News',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal
'welcome' => [
'welcome' => 'Welcome to your new Status page!',
'message' => 'Your status page is almost ready! You might want to configure these extra settings',
'close' => 'Take me straight to my dashboard',
'steps' => [
'component' => 'Create components',
'incident' => 'Create incidents',
'customize' => 'Customize',
'team' => 'Add users',
'api' => 'Generate API token',
'two-factor' => 'Two Factor Authentication',
],
],
];

View File

@@ -1,192 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Username',
'password' => 'Password',
'site_name' => 'Site Name',
'site_domain' => 'Site Domain',
'site_timezone' => 'Select your timezone',
'site_locale' => 'Select your language',
'enable_google2fa' => 'Enable Google Two Factor Authentication',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From Address',
'mail_username' => 'Mail Username',
'mail_password' => 'Mail Password',
],
// Login form fields
'login' => [
'login' => 'Username or Email',
'email' => 'Email',
'password' => 'Password',
'2fauth' => 'Authentication Code',
'invalid' => 'Invalid username or password',
'invalid-token' => 'Invalid token',
'cookies' => 'You must enable cookies to login.',
'rate-limit' => 'Rate limit exceeded.',
],
// Incidents form fields
'incidents' => [
'name' => 'Name',
'status' => 'Status',
'component' => 'Component',
'message' => 'Message',
'message-help' => 'You may also use Markdown.',
'scheduled_at' => 'When to schedule the maintenance for?',
'incident_time' => 'When did this incident occur?',
'notify_subscribers' => 'Notify subscribers?',
'visibility' => 'Incident Visibility',
'public' => 'Viewable by public',
'logged_in_only' => 'Only visible to logged in users',
'templates' => [
'name' => 'Name',
'template' => 'Template',
'twig' => 'Incident Templates can make use of the <a href="http://twig.sensiolabs.org/" target="_blank">Twig</a> templating language.',
],
],
// Components form fields
'components' => [
'name' => 'Name',
'status' => 'Status',
'group' => 'Group',
'description' => 'Description',
'link' => 'Link',
'tags' => 'Tags',
'tags-help' => 'Comma separated.',
'enabled' => 'Component enabled?',
'groups' => [
'name' => 'Name',
'collapsing' => 'Choose visibility of the group',
'visible' => 'Always expanded',
'collapsed' => 'Collapse the group by default',
'collapsed_incident' => 'Collapse the group, but expand if there are issues',
],
],
// Metric form fields
'metrics' => [
'name' => 'Name',
'suffix' => 'Suffix',
'description' => 'Description',
'description-help' => 'You may also use Markdown.',
'display-chart' => 'Display chart on status page?',
'default-value' => 'Default value',
'calc_type' => 'Calculation of metrics',
'type_sum' => 'Sum',
'type_avg' => 'Average',
'places' => 'Decimal places',
'default_view' => 'Default view',
'threshold' => 'How many minutes of threshold between metric points?',
'points' => [
'value' => 'Value',
],
],
// Settings
'settings' => [
/// Application setup
'app-setup' => [
'site-name' => 'Site Name',
'site-url' => 'Site URL',
'display-graphs' => 'Display graphs on status page?',
'about-this-page' => 'About this page',
'days-of-incidents' => 'How many days of incidents to show?',
'banner' => 'Banner Image',
'banner-help' => "It's recommended that you upload files no bigger than 930px wide .",
'subscribers' => 'Allow people to signup to email notifications?',
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
],
'analytics' => [
'analytics_google' => 'Google Analytics code',
'analytics_gosquared' => 'GoSquared Analytics code',
'analytics_piwik_url' => 'URL of your Piwik instance (without http(s)://)',
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',
'allowed-domains-help' => 'Comma separated. The domain set above is automatically allowed by default.',
],
'stylesheet' => [
'custom-css' => 'Custom Stylesheet',
],
'theme' => [
'background-color' => 'Background Color',
'background-fills' => 'Background fills (components, incidents, footer)',
'banner-background-color' => 'Banner background color',
'banner-padding' => 'Banner padding',
'fullwidth-banner' => 'Enable fullwidth banner?',
'text-color' => 'Text Color',
'dashboard-login' => 'Show dashboard button in the footer?',
'reds' => 'Red (used for errors)',
'blues' => 'Blue (used for information)',
'greens' => 'Green (used for success)',
'yellows' => 'Yellow (used for alerts)',
'oranges' => 'Orange (used for notices)',
'metrics' => 'Metrics fill',
'links' => 'Links',
],
],
'user' => [
'username' => 'Username',
'email' => 'Email',
'password' => 'Password',
'api-token' => 'API Token',
'api-token-help' => 'Regenerating your API token will prevent existing applications from accessing Cachet.',
'gravatar' => 'Change your profile picture at Gravatar.',
'user_level' => 'User Level',
'levels' => [
'admin' => 'Admin',
'user' => 'User',
],
'2fa' => [
'help' => 'Enabling two factor authentication increases security of your account. You will need to download <a href="https://support.google.com/accounts/answer/1066447?hl=en">Google Authenticator</a> or a similar app on to your mobile device. When you login you will be asked to provide a token generated by the app.',
],
'team' => [
'description' => 'Invite your team members by entering their email addresses here.',
'email' => 'Email #:id',
],
],
// Buttons
'add' => 'Add',
'save' => 'Save',
'update' => 'Update',
'create' => 'Create',
'edit' => 'Edit',
'delete' => 'Delete',
'submit' => 'Submit',
'cancel' => 'Cancel',
'remove' => 'Remove',
'invite' => 'Invite',
'signup' => 'Sign Up',
// Other
'optional' => '* Optional',
];

View File

@@ -1,28 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];

View File

@@ -1,23 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'setup' => 'Setup',
'title' => 'Setup Cachet',
'service_details' => 'Service Details',
'env_setup' => 'Environment Setup',
'status_page_setup' => 'Status Page Setup',
'show_support' => 'Show support for Cachet?',
'admin_account' => 'Administrator Account',
'complete_setup' => 'Complete Setup',
'completed' => 'Cachet has been configured successfully!',
'finish_setup' => 'Go to dashboard',
];

View File

@@ -1,122 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'between' => [
'numeric' => 'The :attribute must be a date before :date.',
'file' => 'The :attribute must be between :min and :max.',
'string' => 'The :attribute must be between :min and :max kilobytes.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute must have between :min and :max items.',
'confirmed' => 'The :attribute field must be true or false.',
'date' => 'The :attribute confirmation does not match.',
'date_format' => 'The :attribute is not a valid date.',
'different' => 'The :attribute does not match the format :format.',
'digits' => 'The :attribute and :other must be different.',
'digits_between' => 'The :attribute must be :digits digits.',
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'filled' => 'The :attribute format is invalid.',
'image' => 'The :attribute must be an image.',
'in' => 'The :attribute must be an image.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The selected :attribute is invalid.',
'ip' => 'The :attribute must be an integer.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => 'The :attribute must be a valid IP address.',
'file' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max kilobytes.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute may not have more than :max items.',
'min' => [
'numeric' => 'The :attribute must be a file of type: :values.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min kilobytes.',
'array' => 'The :attribute must be at least :min characters.',
],
'not_in' => 'The :attribute must have at least :min items.',
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'required' => 'The :attribute format is invalid.',
'required_if' => 'The :attribute field is required.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is present.',
'required_without_all' => 'The :attribute field is required when :values is not present.',
'same' => 'The :attribute field is required when none of :values are present.',
'size' => [
'numeric' => 'The :attribute and :other must match.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must be :size characters.',
],
'string' => 'The :attribute must contain :size items.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -103,8 +103,8 @@ return [
'users' => [
'email' => [
'invite' => [
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
'text' => "You have been invited to the team :app_name status page, to sign up follow the next link.\n:link\nThank you, :app_name",
'html' => '<p>You have been invited to the team :app_name status page, to sign up follow the next link.</p><p><a href=":link">:link</a></p><p>Thank you, :app_name</p>',
],
],
],

View File

@@ -224,7 +224,7 @@ return [
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
@@ -251,6 +251,8 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
],

View File

@@ -118,10 +118,10 @@ return [
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
'site-timezone' => 'Site timezone',
'site-locale' => 'Site language',
'date-format' => 'Date format',
'incident-date-format' => 'Incident timestamp format',
],
'security' => [
'allowed-domains' => 'Allowed domains',

View File

@@ -1,144 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Components
'components' => [
'last_updated' => 'Sidst opdateret :timestamp',
'status' => [
1 => 'Normal',
2 => 'Hastighedsproblemer',
3 => 'Nogen udfald',
4 => 'Store problemer',
],
'group' => [
'other' => 'Andre komponenter',
],
],
// Incidents
'incidents' => [
'none' => 'Ingen hændelser er rapporteret',
'past' => 'Tidligere hændelser',
'previous_week' => 'Previous Week',
'next_week' => 'Next Week',
'scheduled' => 'Planlagt vedligeholdelse',
'scheduled_at' => ', planlagt til :timestamp',
'status' => [
0 => 'Scheduled', // TODO: Hopefully remove this.
1 => 'Undersøger',
2 => 'Identificeret',
3 => 'Overvåger',
4 => 'Rettet',
],
],
// Service Status
'service' => [
'good' => '[0,1] Systemet virker|[2,Inf] Alle systemer virker',
'bad' => '[0,1] The system is currently experiencing issues|[2,Inf] Some systems are experiencing issues',
'major' => '[0,1] The service experiencing a major outage|[2,Inf] Some systems are experiencing a major outage',
],
'api' => [
'regenerate' => 'Generer en ny API nøgle',
'revoke' => 'Tilbagekald API nøgle',
],
// Metrics
'metrics' => [
'filter' => [
'last_hour' => 'Sidste time',
'hourly' => 'Sidste 12 timer',
'weekly' => 'Ugentlig',
'monthly' => 'Månedlig',
],
],
// Subscriber
'subscriber' => [
'subscribe' => 'Subscribe to get the most recent updates',
'button' => 'Abonner',
'manage' => [
'no_subscriptions' => 'Du abonner i øjeblikket på alle opdateringer.',
'my_subscriptions' => 'Du abonnere i øjeblikket på følgende opdateringer.',
],
'email' => [
'subscribe' => 'Abonner på email opdateringer.',
'subscribed' => 'Du er blevet tilmeldt email notifikationer. Vi har sendt dig en bekræftelse på den indtastede email-adresse.',
'verified' => 'Din tilmelding er nu blevet bekræftet, tak.',
'manage' => 'Manage your subscription',
'unsubscribe' => 'Afmeld email notifikationer.',
'unsubscribed' => 'Du er nu blevet frameldt vores emailnotifikationer.',
'failure' => 'Noget gik galt med bekræftelsen.',
'already-subscribed' => 'Kan ikke abonnere da :email allerede er tilmeldt.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
],
'component' => [
'subject' => 'Komponent status opdatering',
'text' => 'Komponentet :component_name har ændret status. Komponentet er nu :component_human_status.\nTak, :app_name',
'html' => '<p>Komponentet :component_name har ændret status. Komponentet er nu :component_human_status.</p><p>\nTak, :app_name</p>',
'tooltip-title' => 'Abonner på notifikation for :component_name.',
],
],
],
'users' => [
'email' => [
'invite' => [
'text' => "Du er blevet inviteret til :app_name status status side, Klik på linket for at oprette dig.\n:link\nTak, :app_name",
'html' => '<p>Du er blevet inviteret til :app_name status side, Klik på linket for at oprette dig.</p><p><a href=":link">:link</a></p><p>Tak, :app_name</p>',
],
],
],
'signup' => [
'title' => 'Tilmeld',
'username' => 'Brugernavn',
'email' => 'Email',
'password' => 'Adgangskode',
'success' => 'Din konto er nu oprettet.',
'failure' => 'Noget gik galt under tilmeldingen.',
],
'system' => [
'update' => 'Der er en nyere version af Cachet tilgængelig. Du kan læse mere om hvordan du opdatere <a href="https://docs.cachethq.io/docs/updating-cachet">her</a>!',
],
// Modal
'modal' => [
'close' => 'Luk',
'subscribe' => [
'title' => 'Abonner på komponent opdateringer',
'body' => 'Indtast din email adresse for at abonnere på opdateringer angående dette komponent. Hvis du allerede er tilmeldt, vil du modtage emails angående dette komponent.',
'button' => 'Abonner',
],
],
// Other
'home' => 'Hjem',
'description' => 'Hold dig opdateret med de seneste opdateringer fra :app.',
'powered_by' => 'Powered by <a href="https://cachethq.io" class="links">Cachet</a>.',
'about_this_site' => 'Om denne side',
'rss-feed' => 'RSS',
'atom-feed' => 'Atom',
'feed' => 'Status Feed',
];

View File

@@ -1,273 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'dashboard' => 'Oversigt',
// Incidents
'incidents' => [
'title' => 'Incidents &amp; Schedule',
'incidents' => 'Incidents',
'logged' => '{0} Ingen åbne hændelser.|Der er en åben hændelse.|Der er <strong>:count</strong> åbne hændelser.',
'incident-create-template' => 'Create Template',
'incident-templates' => 'Incident Templates',
'add' => [
'title' => 'Opret hændelse',
'success' => 'Hændelse tilføjet.',
'failure' => 'Der opstod en fejl i forsøget på at tilføje hændelsen. Prøv venligst igen.',
],
'edit' => [
'title' => 'Redigér hændelse',
'success' => 'Hændelse opdateret.',
'failure' => 'Der opstod en fejl under forsøget på at redigere hændelsen. Prøv venligst igen.',
],
'delete' => [
'success' => 'Hændelsen er blevet slettet og vil ikke blive vist på din statusside.',
'failure' => 'Hændelsen kunne ikke slettes. Prøv venligst igen.',
],
// Incident templates
'templates' => [
'title' => 'Hændelses skabeloner',
'add' => [
'title' => 'Opret hændelses skabelon',
'message' => 'Du bør tilføje en hændelses skabelon.',
'success' => 'Din nye hændelses skabelon er blevet oprettet.',
'failure' => 'En fejl er opstået med hændelses skabelonen.',
],
'edit' => [
'title' => 'Redigér skabelon',
'success' => 'Hændelses skabelonen er blevet opdateret.',
'failure' => 'Der opstod en fejl under forsøget på at opdatere hændelses skabelonen',
],
'delete' => [
'success' => 'Hændelses skabelonen er blevet slettet.',
'failure' => 'Hændelses skabelonen kunne ikke slettes. Prøv venligst igen.',
],
],
],
// Incident Maintenance
'schedule' => [
'schedule' => 'Planlagt vedligeholdelse',
'logged' => '{0} Der er intet planlagt.|Der er 1 planlagt.|Der er <strong>:count</strong> planlagte.',
'scheduled_at' => 'Planlagt til :timestamp',
'add' => [
'title' => 'Tilføj planlagt vedligeholdelse',
'success' => 'Planlagt vedligeholdelse tilføjet.',
'failure' => 'Noget gik galt under forsøget på at tilføje planlagt vedligeholdelse. Prøv venligst igen.',
],
'edit' => [
'title' => 'Rediger planlagt vedligeholdelse',
'success' => 'Planlagt vedligeholdelse er blevet opdateret!',
'failure' => 'Noget gik galt under forsøget på at opdatere planlagt vedligeholdelse. Prøv venligst igen.',
],
'delete' => [
'success' => 'Planlagt vedligeholdelse er blevet slette og vil ikke længere blive vist på din status side.',
'failure' => 'Den planlagt vedligeholdelse kunne ikke slettes. Prøv venligst igen.',
],
],
// Components
'components' => [
'components' => 'Components',
'component_statuses' => 'Komponentstatus',
'listed_group' => 'Grouped under :name',
'add' => [
'title' => 'Tilføj komponent',
'message' => 'Du bør tilføje en komponent.',
'success' => 'Komponent oprettet.',
'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.',
],
'edit' => [
'title' => 'Redigér komponent',
'success' => 'Komponent opdateret.',
'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.',
],
'delete' => [
'success' => 'Komponentet er blevet slettet!',
'failure' => 'Komponentet kunne ikke slettes. Prøv venligst igen.',
],
// Component groups
'groups' => [
'groups' => 'Komponentgruppe|Komponentgrupper',
'no_components' => 'You should add a component group.',
'add' => [
'title' => 'Tilføj komponentgruppe',
'success' => 'Komponent gruppe tilføjet.',
'failure' => 'Noget gik galt med komponentet gruppen. Prøv venligst igen.',
],
'edit' => [
'title' => 'Redigér komponentgruppe',
'success' => 'Komponent gruppe opdateret.',
'failure' => 'Noget gik galt med komponentet. Prøv venligst igen.',
],
'delete' => [
'success' => 'Komponent gruppen er blevet slettet!',
'failure' => 'Komponent gruppen kunne ikke slettes. Prøv venligst igen.',
],
],
],
// Metrics
'metrics' => [
'metrics' => 'Grafer',
'add' => [
'title' => 'Opret graf',
'message' => 'Du bør tilføje en graf.',
'success' => 'Graf oprettet.',
'failure' => 'Noget gik galt med graffen. Prøv venligst igen.',
],
'edit' => [
'title' => 'Redigér graf',
'success' => 'Graf opdateret.',
'failure' => 'Noget gik galt med graffen. Prøv venligst igen.',
],
'delete' => [
'success' => 'Grafen er blevet slette og vil ikke længere blive vist på din status side.',
'failure' => 'Grafen kunne ikke slettes. Prøv venligst igen.',
],
],
// Subscribers
'subscribers' => [
'subscribers' => 'Subscribers',
'description' => 'Abonnenter vil modtage notifikationer når hændelser oprettes eller komponenter opdateres.',
'verified' => 'Bekræftet',
'not_verified' => 'Ej bekræftet',
'subscriber' => ':email, abonnerede :date',
'no_subscriptions' => 'Abonnere på alle opdateringer',
'add' => [
'title' => 'Tilføj abonnent',
'success' => 'Subscriber added.',
'failure' => 'Noget gik galt under forsøget på at tilføje en abonnent. Prøv venligst igen.',
'help' => 'Enter each subscriber on a new line.',
],
'edit' => [
'title' => 'Redigér abonnent',
'success' => 'Subscriber updated.',
'failure' => 'Noget gik galt under forsøget på at redigere abonnenten. Prøv venligst igen.',
],
],
// Team
'team' => [
'team' => 'Brugere',
'member' => 'Bruger',
'profile' => 'Profile',
'description' => 'Team Members will be able to add, modify &amp; edit components and incidents.',
'add' => [
'title' => 'Tilføj bruger',
'success' => 'Bruger tilføjet.',
'failure' => 'Brugeren kunne ikke tilføjes. Prøv venligst igen.',
],
'edit' => [
'title' => 'Redigér profil',
'success' => 'Profil opdateret.',
'failure' => 'Noget gik galt under forsøget på at opdatere profilen. Prøv venligst igen.',
],
'delete' => [
'success' => 'Slet bruger.',
'failure' => 'Brugeren kunne ikke tilføjes. Prøv venligst igen.',
],
'invite' => [
'title' => 'Invite a New Team Member',
'success' => 'The users invited.',
'failure' => 'Invitationen kunne ikke sendes. Prøv venligst igen.',
],
],
// Settings
'settings' => [
'settings' => 'Settings',
'app-setup' => [
'app-setup' => 'Applikationssetup',
'images-only' => 'Only images may be uploaded.',
'too-big' => 'Filen du prøvede at uploade er for stort, billet skal være mindre end :size',
],
'analytics' => [
'analytics' => 'Analytics',
],
'localization' => [
'localization' => 'Localization',
],
'customization' => [
'customization' => 'Tilpasning',
'header' => 'Brugerdefineret header HTML',
'footer' => 'Brugerdefineret footer html',
],
'security' => [
'security' => 'Sikkerhed',
'two-factor' => 'Brugere uden totrinsbekræftelse',
],
'stylesheet' => [
'stylesheet' => 'Stylesheet',
],
'theme' => [
'theme' => 'Tema',
],
'edit' => [
'success' => 'Indstillingerne er gemt.',
'failure' => 'Indstillingerne kunne ikke gemmes.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the CrowdIn and GitHub.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
],
],
// Login
'login' => [
'login' => 'Log ind',
'logged_in' => 'Du er logget ind.',
'welcome' => 'Welcome Back!',
'two-factor' => 'Indtast venligst din totrins bekræftelses nøgle.',
],
// Sidebar footer
'help' => 'Hjælp',
'status_page' => 'Status side',
'logout' => 'Log ud',
// Notifications
'notifications' => [
'notifications' => 'Notifikationer',
'awesome' => 'Fantastisk.',
'whoops' => 'Hov.',
],
// Widgets
'widgets' => [
'news' => 'Latest News',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal
'welcome' => [
'welcome' => 'Welcome to your new Status page!',
'message' => 'Your status page is almost ready! You might want to configure these extra settings',
'close' => 'Take me straight to my dashboard',
'steps' => [
'component' => 'Create components',
'incident' => 'Create incidents',
'customize' => 'Customize',
'team' => 'Add users',
'api' => 'Generate API token',
'two-factor' => 'Two Factor Authentication',
],
],
];

View File

@@ -1,192 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
// Setup form fields
'setup' => [
'email' => 'Email',
'username' => 'Username',
'password' => 'Adgangskode',
'site_name' => 'Sidenavn',
'site_domain' => 'Sidens domæne',
'site_timezone' => 'Vælg din tidszone',
'site_locale' => 'Vælg dit sprog',
'enable_google2fa' => 'Aktiver Googles to-trins bekræftelse',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From Address',
'mail_username' => 'Mail Username',
'mail_password' => 'Mail Password',
],
// Login form fields
'login' => [
'login' => 'Brugernavn eller email',
'email' => 'Email',
'password' => 'Password',
'2fauth' => 'Bekræftelseskode',
'invalid' => 'Ugyldigt brugernavn eller adgangskode',
'invalid-token' => 'Ugyldig token',
'cookies' => 'Du skal tillade cookies for at logge ind.',
'rate-limit' => 'Rate limit exceeded.',
],
// Incidents form fields
'incidents' => [
'name' => 'Navn',
'status' => 'Status',
'component' => 'Komponent',
'message' => 'Besked',
'message-help' => 'Du kan benytte Markdown.',
'scheduled_at' => 'When to schedule the maintenance for?',
'incident_time' => 'When did this incident occur?',
'notify_subscribers' => 'Underret abonnenter',
'visibility' => 'Hændelses synlighed',
'public' => 'Kan ses af alle',
'logged_in_only' => 'Kun synlig for brugere der er logget ind',
'templates' => [
'name' => 'Name',
'template' => 'Skabelon',
'twig' => 'Hændelse skabeloner kan gøre brug af <a href="http://twig.sensiolabs.org/" target="_blank"> Twigs</a> skabelon sprog.',
],
],
// Components form fields
'components' => [
'name' => 'Name',
'status' => 'Status',
'group' => 'Gruppe',
'description' => 'Beskrivelse',
'link' => 'Link',
'tags' => 'Mærkat',
'tags-help' => 'Komma adskilt.',
'enabled' => 'Komponent er aktivt',
'groups' => [
'name' => 'Name',
'collapsing' => 'Choose visibility of the group',
'visible' => 'Altid åben',
'collapsed' => 'Minimer gruppen som standard',
'collapsed_incident' => 'Minimer gruppen, men hold den åben hvis der er fejl',
],
],
// Metric form fields
'metrics' => [
'name' => 'Name',
'suffix' => 'Endelse',
'description' => 'Description',
'description-help' => 'You may also use Markdown.',
'display-chart' => 'Vis graf på statussiden?',
'default-value' => 'Standard værdi',
'calc_type' => 'Beregning af grafer',
'type_sum' => 'Sum',
'type_avg' => 'Gennemsnit',
'places' => 'Antal decimaler',
'default_view' => 'Standardvisning',
'threshold' => 'How many minutes of threshold between metric points?',
'points' => [
'value' => 'Værdi',
],
],
// Settings
'settings' => [
/// Application setup
'app-setup' => [
'site-name' => 'Sidenavn',
'site-url' => 'Sidens URL',
'display-graphs' => 'Display graphs on status page?',
'about-this-page' => 'Om',
'days-of-incidents' => 'Hvor mange dage skal der vises hændelser for?',
'banner' => 'Banner billede',
'banner-help' => 'Det anbefales ikke at uploade billeder bredere end 930px.',
'subscribers' => 'Tillad folk at tilmelde sig email underretninger?',
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
],
'analytics' => [
'analytics_google' => 'Google Analytics kode',
'analytics_gosquared' => 'GoSquared Analytics kode',
'analytics_piwik_url' => 'URL til Piwik installation (uden http(s)://)',
'analytics_piwik_siteid' => 'Piwik\'s site id',
],
'localization' => [
'site-timezone' => 'Tidszone',
'site-locale' => 'Sprog på siden',
'date-format' => 'Datoformat',
'incident-date-format' => 'Datoformat for hændelser',
],
'security' => [
'allowed-domains' => 'Tilladte domæner',
'allowed-domains-help' => 'Komma adskilt. Domænet ovenfor har automatisk adgang.',
],
'stylesheet' => [
'custom-css' => 'Tilpasset CSS',
],
'theme' => [
'background-color' => 'Background Color',
'background-fills' => 'Baggrundsfyld (Komponenter, hændelser og footer)',
'banner-background-color' => 'Baggrundsfarve bag banneret',
'banner-padding' => 'Banner Padding',
'fullwidth-banner' => 'Slå fuldbrede bannere til?',
'text-color' => 'Text Color',
'dashboard-login' => 'Vis oversigtsside ikon i bunden af siden?',
'reds' => 'Rød (Brugt til fejl)',
'blues' => 'Blå (Brugt til information)',
'greens' => 'Grøn (Brugt til success)',
'yellows' => 'Gul (Brugt til advarsler)',
'oranges' => 'Orange (Brugt til noter)',
'metrics' => 'Graffyld',
'links' => 'Links',
],
],
'user' => [
'username' => 'Brugernavn',
'email' => 'Email',
'password' => 'Password',
'api-token' => 'API nøgle',
'api-token-help' => 'Hvis du regenerere din API nøgle vil eksisterende applikationer ikke kunne tilgå API\'et.',
'gravatar' => 'Ændre dit profilbillede hos Gravatar.',
'user_level' => 'Brugertype',
'levels' => [
'admin' => 'Administrator',
'user' => 'Bruger',
],
'2fa' => [
'help' => 'Brug totrinsbekræftelse for større sikkerhed på din konto. Du skal installere <a href="https://support.google.com/accounts/answer/1066447?hl=en">Google Authenticator</a> eller en lignende app på din mobile enhed, for at kunne logge ind med nøgler fra appen.',
],
'team' => [
'description' => 'Inviter brugere, ved at indtaste dere email adresser her.',
'email' => 'Email #:id',
],
],
// Buttons
'add' => 'Tilføj',
'save' => 'Gem',
'update' => 'Opdatér',
'create' => 'Opret',
'edit' => 'Rediger',
'delete' => 'Slet',
'submit' => 'Send',
'cancel' => 'Afbryd',
'remove' => 'Fjern',
'invite' => 'Inviter',
'signup' => 'Tilmeld',
// Other
'optional' => '* ikke påkrævet',
];

View File

@@ -1,28 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Forrige',
'next' => 'Næste &raquo;',
];

View File

@@ -1,23 +0,0 @@
<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
'setup' => 'Opsætning',
'title' => 'Setup Cachet',
'service_details' => 'Tjenestesdetaljer',
'env_setup' => 'Opsætning af miljø',
'status_page_setup' => 'Status side opsætning',
'show_support' => 'Vis støtte til Cachet?',
'admin_account' => 'Administratorkonto',
'complete_setup' => 'Gennemfør opsætning',
'completed' => 'Cachet er nu sat op og er klar til brug!',
'finish_setup' => 'Gå til oversigtssiden',
];

Some files were not shown because too many files have changed in this diff Show More